|
BmnRoot
|
Class describing double-sided silicon strip sensors. More...
#include <BmnSsdSensorDssd.h>
Public Member Functions | |
| BmnSsdSensorDssd (Int_t address=0, TGeoPhysicalNode *node=nullptr, BmnSsdElement *mother=nullptr) | |
| virtual | ~BmnSsdSensorDssd () |
| virtual Int_t | FindHits (std::vector< BmnSsdCluster * > &clusters, TClonesArray *hitArray, BmnEvent *event, Double_t dTime) |
| Find hits from clusters. | |
| virtual Int_t | GetNofStrips (Int_t side) const =0 |
| Number of strips on front and back side. | |
| virtual Double_t | GetPitch (Int_t side) const =0 |
| Strip pitch on front and back side. | |
| virtual void | ModifyStripPitch (Double_t pitch)=0 |
| Modify the strip pitch. | |
| void | PrintChargeStatus () const |
| virtual std::string | ToString () const =0 |
Public Member Functions inherited from BmnSsdSensor | |
| BmnSsdSensor (UInt_t address=0, TGeoPhysicalNode *node=nullptr, BmnSsdElement *mother=nullptr) | |
| virtual | ~BmnSsdSensor () |
| void | CreateHit (Double_t xLocal, Double_t yLocal, Double_t varX, Double_t varY, Double_t varXY, BmnSsdCluster *clusterF, BmnSsdCluster *clusterB, Double_t du=0., Double_t dv=0.) |
| const BmnSsdSensorConditions * | GetConditions () const |
| BmnLink * | GetCurrentLink () const |
| BmnSsdModule * | GetModule () const |
| TGeoPhysicalNode * | GetNode () const |
| virtual Bool_t | Init () |
| Initialise the sensor, if needed. | |
| Int_t | GetSensorId () const |
| Int_t | ProcessPoint (const BmnSsdPoint *point, Double_t eventTime=0., BmnLink *link=NULL) |
| void | SetAddress (Int_t address) |
| Set sensor address. | |
| void | SetConditions (Double_t vFD, Double_t vBias, Double_t temperature, Double_t cCoupling, Double_t cInterstrip, Double_t bX, Double_t bY, Double_t bZ) |
| void | SetNode (TGeoPhysicalNode *node) |
| Set the physical node. | |
Public Member Functions inherited from BmnSsdElement | |
| BmnSsdElement () | |
| BmnSsdElement (Int_t address, Int_t level, TGeoPhysicalNode *node=nullptr, BmnSsdElement *mother=nullptr) | |
| virtual | ~BmnSsdElement () |
| Int_t | GetAddress () const |
| BmnSsdElement * | GetDaughter (Int_t index) const |
| Int_t | GetIndex () const |
| ESsdElementLevel | GetLevel () const |
| BmnSsdElement * | GetMother () const |
| Int_t | GetNofDaughters () const |
| Int_t | GetNofElements (Int_t level) const |
| TGeoPhysicalNode * | GetPnode () const |
| virtual void | InitDaughters () |
| void | SetMother (BmnSsdElement *mother) |
| virtual void | Print (Option_t *opt="") const |
Protected Member Functions | |
| virtual Int_t | CalculateResponse (BmnSsdSensorPoint *point) |
| Analogue response to a track in the sensor. | |
| void | CrossTalk (Double_t ctcoeff) |
| void | GetClusterPosition (Double_t ClusterCentre, Double_t &xCluster, Int_t &side) |
| virtual Int_t | GetModuleChannel (Int_t strip, Int_t side, Int_t sensorId) const =0 |
| Get the readout channel in the module for a given strip. | |
| Int_t | GetSide (Double_t channel) const |
| virtual std::pair< Int_t, Int_t > | GetStrip (Int_t channel, Int_t sensorId) const =0 |
| virtual Int_t | IntersectClusters (BmnSsdCluster *clusterF, BmnSsdCluster *clusterB)=0 |
| Bool_t | IsInside (Double_t x, Double_t y) |
| Double_t | LorentzShift (Double_t z, Int_t chargeType, Double_t bY) const |
| Lorentz shift in the x coordinate. | |
| void | ProduceCharge (BmnSsdSensorPoint *point) |
| Generate charge as response to a sensor point. | |
| virtual void | PropagateCharge (Double_t x, Double_t y, Double_t z, Double_t charge, Double_t bY, Int_t side)=0 |
| void | RegisterCharge (Int_t side, Int_t strip, Double_t charge, Double_t time) const |
| Register the produced charge in one strip to the module. | |
| Bool_t | SelfTest () |
Protected Member Functions inherited from BmnSsdSensor | |
| BmnSsdSensor (const BmnSsdSensor &)=delete | |
| BmnSsdSensor & | operator= (const BmnSsdSensor &)=delete |
| ClassDef (BmnSsdSensor, 2) | |
Protected Member Functions inherited from BmnSsdElement | |
| void | ConstructName () |
| void | SetLevel (Int_t level) |
Protected Attributes | |
| Double_t | fDx |
| Dimension of active area in x [cm]. | |
| Double_t | fDy |
| Dimension of active area in y [cm]. | |
| Double_t | fDz |
| Thickness in z [cm]. | |
| Bool_t | fIsSet |
| Flag whether sensor is properly initialised. | |
| TArrayD | fStripCharge [2] |
Protected Attributes inherited from BmnSsdSensor | |
| BmnSsdSensorConditions * | fConditions |
| Operating conditions. | |
| BmnLink * | fCurrentLink |
| Link to currently processed MCPoint. | |
| TClonesArray * | fHits |
| Output array for hits. Used in hit finding. | |
| BmnEvent * | fEvent |
Protected Attributes inherited from BmnSsdElement | |
| Int_t | fAddress |
| Unique element address. | |
| ESsdElementLevel | fLevel |
| Level in hierarchy. | |
| TGeoPhysicalNode * | fNode |
| Pointer to geometry. | |
| std::vector< BmnSsdElement * > | fDaughters |
| Array of daughters. | |
| BmnSsdElement * | fMother |
| Mother element. | |
Additional Inherited Members | |
Static Public Member Functions inherited from BmnSsdSensor | |
| static UInt_t | GetAddressFromName (TString name) |
| Get the address from the sensor name (static) | |
Static Public Member Functions inherited from BmnSsdElement | |
| static TString | ConstructName (Int_t address, ESsdElementLevel level) |
Class describing double-sided silicon strip sensors.
Abstract class describes the (analogue) response of double-sided silicon strip sensors in the SSD.
The active area does not necessarily coincide with the geometric dimensions of the sensor. It is, however, centred in the latter, meaning that the width of inactive regions (guard ring) are the same on the left and on the right side and also the same at the top and and the bottom.
The response to charged particles is modelled by a uniform charge distribution along the particle trajectory in the active volume, which is projected to the readout edge, where it is discretised on the active strips. The charge is then delivered to the corresponding channel of the readout module (BmnSsdModule).
This is an abstract class, since additional functionality, depending on where (on which edge) the readout is done. Derived classes have to implement the pure virtual method PropagateCharge, which has to properly fill the charge arrays fStripCharge for front and back side, along with the auxiliary method Diffusion for the thermal diffusion along the drift to the readout plane. Also, the mapping from the strip numbers to the (module) channel number has to be implemented in GetModuleChannel and GetStrip. These methods will e.g. be different for sensors with stereo angles, where both sides are read out at the same edge, and for sensor with orthogonal strips, where the back plane is read out at the left or right edge.
Definition at line 50 of file BmnSsdSensorDssd.h.
| BmnSsdSensorDssd::BmnSsdSensorDssd | ( | Int_t | address = 0, |
| TGeoPhysicalNode * | node = nullptr, |
||
| BmnSsdElement * | mother = nullptr |
||
| ) |
Constructor
| address | Unique element address |
| node | Pointer to geometry node |
| mother | Pointer to mother element (module) |
Definition at line 22 of file BmnSsdSensorDssd.cxx.
|
inlinevirtual |
Destructor
Definition at line 64 of file BmnSsdSensorDssd.h.
|
protectedvirtual |
Analogue response to a track in the sensor.
| point | Pointer to BmnSsdSensorPoint object @value Number of analogue signals created in the strips |
In this method, the analogue response of the sensor to a charged particle traversing it is implemented. The input is an object of type BmnSsdSensorPoint, giving the geometric intersection of the track with the sensor in the sensor internal coordinate system. The method shall create charges in the internal arrays fStripCharge.
Implements BmnSsdSensor.
Definition at line 259 of file BmnSsdSensorDssd.cxx.
References CrossTalk(), fIsSet, fStripCharge, BmnSsdSensor::GetConditions(), BmnSsdSensorConditions::GetCrossTalk(), BmnSsdSensor::GetModule(), GetNofStrips(), BmnSsdSensorPoint::GetTime(), BmnSsdSetup::Instance(), PrintChargeStatus(), ProduceCharge(), RegisterCharge(), BmnSsdSensorPoint::ToString(), and ToString().
|
protected |
Cross talk
| ctcoeff | Cross-talk coefficient |
Operates on the strip charge arrays and re-distributes charges between adjacent strips according to the cross-talk coefficient.
Definition at line 33 of file BmnSsdSensorDssd.cxx.
References fStripCharge, and GetNofStrips().
Referenced by CalculateResponse().
|
virtual |
Find hits from clusters.
| clusters | Input vector of SsdClusters in the module |
| dTime | Max. time difference for two clusters to make a hit @value Number of found hits in this sensor |
This method implements the hit finding. Hits are geometric intersections of a cluster on the front side with a cluster on the back side.
Implements BmnSsdSensor.
Definition at line 69 of file BmnSsdSensorDssd.cxx.
References fabs(), BmnSsdSensor::fEvent, BmnSsdSensor::fHits, BmnSsdCluster::GetPosition(), GetSide(), BmnSsdCluster::GetTime(), BmnSsdCluster::GetTimeError(), and IntersectClusters().
|
protected |
Get the cluster position at the top edge of the sensor.
| [in] | centre | Cluster centre in (module) channel units |
| [out] | xCluster | Cluster position at readout edge |
| [out] | side | Sensor side [0 = front, 1 = back] |
A correction for the Lorentz shift is applied.
Definition at line 139 of file BmnSsdSensorDssd.cxx.
References BmnSsdSensor::GetConditions(), BmnSsdElement::GetIndex(), BmnSsdSensorConditions::GetMeanLorentzShift(), GetPitch(), GetStrip(), and BmnSsdSetup::Instance().
Referenced by BmnSsdSensorDssdStereo::IntersectClusters().
|
protectedpure virtual |
Get the readout channel in the module for a given strip.
| strip | Strip number |
| side | Side (0 = front, 1 = back) |
| sensorId | Index of sensor within module |
This method defines the mapping of the sensor strips to the readout channels in the module.
Implemented in BmnSsdSensorDssdStereo.
Referenced by RegisterCharge(), and SelfTest().
|
pure virtual |
Number of strips on front and back side.
| side | 0 = front side, 1 = back side @value Number of strips on the specified sensor side |
Implemented in BmnSsdSensorDssdStereo.
Referenced by CalculateResponse(), CrossTalk(), GetSide(), PrintChargeStatus(), ProduceCharge(), SelfTest(), and BmnSsdModule::SetParameters().
|
pure virtual |
Strip pitch on front and back side.
| side | 0 = front side, 1 = back side @value Strip pitch [cm] on the specified sensor side |
Implemented in BmnSsdSensorDssdStereo.
Referenced by GetClusterPosition(), and BmnSsdStation::GetSensorPitch().
|
inlineprotected |
Get the side of the sensor from the module channel number The channel number can also be the cluster position, so it needs not be integer.
| channel | Channel number |
Definition at line 177 of file BmnSsdSensorDssd.h.
References GetNofStrips().
Referenced by FindHits().
|
protectedpure virtual |
Get strip and side from module channel.
| [in] | channel | Channel number in module |
| [in] | sensorId | Sensor index in module @value Pair of strip number and side |
Note: This must be the inverse of GetModuleChannel.
Implemented in BmnSsdSensorDssdStereo.
Referenced by GetClusterPosition(), and SelfTest().
|
protectedpure virtual |
Find the intersection points of two clusters. For each intersection point, a hit is created.
| clusterF | Pointer to cluster on front side |
| clusterB | Pointer to cluster on back side |
| sensor | Pointer to sensor object |
Implemented in BmnSsdSensorDssdStereo.
Referenced by FindHits().
|
protected |
Check whether a point (x,y) is inside the active area.
| x | x coordinate in the local c.s. [cm] |
| y | y coordinate in the local c.s. [cm] |
The coordinates have to be given in the local coordinate system (origin in the sensor centre).
Definition at line 183 of file BmnSsdSensorDssd.cxx.
Referenced by BmnSsdSensorDssdStereo::Intersect(), and BmnSsdSensorDssdStereo::PropagateCharge().
|
protected |
Lorentz shift in the x coordinate.
| z | Coordinate of charge origin in local c.s. [cm] |
| chargeType | Type of charge carrier (0 = electron, 1 = hole) |
| bY | Magnetic field (y component) [T] @value Displacement in x due to Lorentz shift [cm] |
Calculates the displacement in x of a charge propagating to the readout plane of the sensor.
TODO: This assumes that the sensor is oriented vertically. It has to be implemented correctly for arbitrary orientations of the local+ x-y plane.
Definition at line 195 of file BmnSsdSensorDssd.cxx.
References BmnSsdPhysics::ElectricField(), fDz, BmnSsdSensor::GetConditions(), BmnSsdSensorConditions::GetVbias(), BmnSsdSensorConditions::GetVfd(), and BmnSsdSensorConditions::HallMobility().
Referenced by BmnSsdSensorDssdStereo::PropagateCharge().
|
pure virtual |
Modify the strip pitch.
| New | strip pitch [cm] |
The number of strips is re-calculated accordingly.
Implemented in BmnSsdSensorDssdStereo.
Referenced by BmnSsdSetup::ModifyStripPitch().
| void BmnSsdSensorDssd::PrintChargeStatus | ( | ) | const |
Print charge status
Definition at line 241 of file BmnSsdSensorDssd.cxx.
References fStripCharge, and GetNofStrips().
Referenced by CalculateResponse().
|
protected |
Generate charge as response to a sensor point.
| point | Pointer to sensor point object |
Charge is created in the sensor volume as response to the particle trajectory and is propagated to the read-out edges.
Definition at line 327 of file BmnSsdSensorDssd.cxx.
References BmnSsdPhysics::EnergyLoss(), fStripCharge, BmnSsdSensorPoint::GetBy(), BmnSsdSensorPoint::GetELoss(), GetNofStrips(), BmnSsdSensorPoint::GetP(), BmnSsdSensorPoint::GetPid(), BmnSsdSensorPoint::GetX1(), BmnSsdSensorPoint::GetX2(), BmnSsdSensorPoint::GetY1(), BmnSsdSensorPoint::GetY2(), BmnSsdSensorPoint::GetZ1(), BmnSsdSensorPoint::GetZ2(), BmnSsdPhysics::Instance(), BmnSsdSetup::Instance(), BmnSsdPhysics::PairCreationEnergy(), BmnSsdPhysics::ParticleMass(), PropagateCharge(), and BmnSsdPhysics::StoppingPower().
Referenced by CalculateResponse().
|
protectedpure virtual |
Propagate a charge created in the sensor to the readout strips
| x | x origin of charge in local c.s. [cm] |
| y | y origin of charge in local c.s. [cm] |
| z | z origin of charge in local c.s. [cm] |
| charge | Charge [e] |
| bY | Magnetic field (y component) [T] |
| side | 0 = front (n) side; 1 = back (p) side |
| sensor | Pointer to sensor object |
Implemented in BmnSsdSensorDssdStereo.
Referenced by ProduceCharge().
|
protected |
Register the produced charge in one strip to the module.
| side | 0 = front, 1 = back |
| strip | strip number |
| charge | charge in strip [e] |
| time | time of registration [ns] |
The charge in one strip resulting from the analogue response simulation is registered to the read-out chip (module).
Definition at line 421 of file BmnSsdSensorDssd.cxx.
References BmnSsdModule::AddSignal(), BmnSsdSensor::GetCurrentLink(), BmnLink::GetEntry(), BmnLink::GetFile(), BmnLink::GetIndex(), BmnSsdSensor::GetModule(), GetModuleChannel(), and BmnSsdSensor::GetSensorId().
Referenced by CalculateResponse().
|
protected |
Test the consistent implementation of GetModuleChannel and GetStrip. The latter should be the reverse of the former.
Definition at line 464 of file BmnSsdSensorDssd.cxx.
References GetModuleChannel(), GetNofStrips(), and GetStrip().
Referenced by BmnSsdSensorDssdStereo::Init().
|
pure virtual |
String output
Implements BmnSsdSensor.
Implemented in BmnSsdSensorDssdStereo.
Referenced by CalculateResponse().
|
protected |
Dimension of active area in x [cm].
Definition at line 115 of file BmnSsdSensorDssd.h.
Referenced by BmnSsdSensorDssdStereo::Diffusion(), BmnSsdSensorDssdStereo::GetStripNumber(), BmnSsdSensorDssdStereo::Init(), BmnSsdSensorDssdStereo::Intersect(), BmnSsdSensorDssdStereo::IntersectClusters(), IsInside(), and BmnSsdSensorDssdStereo::ModifyStripPitch().
|
protected |
Dimension of active area in y [cm].
Definition at line 116 of file BmnSsdSensorDssd.h.
Referenced by BmnSsdSensorDssdStereo::BmnSsdSensorDssdStereo(), BmnSsdSensorDssdStereo::Diffusion(), BmnSsdSensorDssdStereo::GetStripNumber(), BmnSsdSensorDssdStereo::Init(), BmnSsdSensorDssdStereo::Intersect(), BmnSsdSensorDssdStereo::IntersectClusters(), IsInside(), and BmnSsdSensorDssdStereo::ToString().
|
protected |
Thickness in z [cm].
Definition at line 117 of file BmnSsdSensorDssd.h.
Referenced by BmnSsdSensorDssdStereo::Init(), LorentzShift(), and BmnSsdSensorDssdStereo::PropagateCharge().
|
protected |
Flag whether sensor is properly initialised.
Definition at line 118 of file BmnSsdSensorDssd.h.
Referenced by CalculateResponse(), BmnSsdSensorDssdStereo::Init(), and BmnSsdSensorDssdStereo::ModifyStripPitch().
|
protected |
Analog charge in strips (for front and back side). Used during analog response simulation.
Definition at line 122 of file BmnSsdSensorDssd.h.
Referenced by CalculateResponse(), CrossTalk(), BmnSsdSensorDssdStereo::Init(), BmnSsdSensorDssdStereo::ModifyStripPitch(), PrintChargeStatus(), ProduceCharge(), and BmnSsdSensorDssdStereo::PropagateCharge().