|
BmnRoot
|
Detector response for DSSD sensors with stereo angles and cross-connection by double metal layers. More...
#include <BmnSsdSensorDssdStereo.h>
Public Member Functions | |
| BmnSsdSensorDssdStereo (UInt_t address=0, TGeoPhysicalNode *node=nullptr, BmnSsdElement *mother=nullptr) | |
| BmnSsdSensorDssdStereo (Double_t dy, Int_t nStrips, Double_t pitch, Double_t stereoF, Double_t stereoB) | |
| virtual | ~BmnSsdSensorDssdStereo () |
| virtual Int_t | GetNofStrips (Int_t) const |
| Number of strips (same for front and back side) | |
| virtual Double_t | GetPitch (Int_t) const |
| Strip pitch (same for front and back side) | |
| Double_t | GetStereoAngle (Int_t side) const |
| Stereo angle for front and back side. | |
| virtual Bool_t | Init () |
| Initialisation @value kTRUE if parameters and node are consistent. | |
| virtual void | ModifyStripPitch (Double_t pitch) |
| Modify the strip pitch. | |
| std::string | ToString () const |
| Set the internal sensor parameters. | |
Public Member Functions inherited from BmnSsdSensorDssd | |
| 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. | |
| void | PrintChargeStatus () const |
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 |
| 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 void | Diffusion (Double_t x, Double_t y, Double_t sigma, Int_t side, Double_t &fracL, Double_t &fracC, Double_t &fracR) |
| Used for calculation of hit errors. | |
| virtual Int_t | GetModuleChannel (Int_t strip, Int_t side, Int_t sensorId) const |
| Get the readout channel in the module for a given strip. | |
| virtual std::pair< Int_t, Int_t > | GetStrip (Int_t channel, Int_t sensorId) const |
| virtual Int_t | GetStripNumber (Double_t x, Double_t y, Int_t side) const |
| Get strip number from point coordinates. | |
| Bool_t | Intersect (Double_t xF, Double_t exF, Double_t xB, Double_t exB, Double_t &x, Double_t &y, Double_t &varX, Double_t &varY, Double_t &varXY) |
| virtual Int_t | IntersectClusters (BmnSsdCluster *clusterF, BmnSsdCluster *clusterB) |
| virtual void | PropagateCharge (Double_t x, Double_t y, Double_t z, Double_t charge, Double_t bY, Int_t side) |
Protected Member Functions inherited from BmnSsdSensorDssd | |
| 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) |
| Int_t | GetSide (Double_t channel) const |
| 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. | |
| 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 | |
| Int_t | fNofStrips |
| Number of strips (same for front and back) | |
| Double_t | fPitch |
| Strip pitch /same for front and back) | |
| Double_t | fStereoF |
| Stereo angle front side [degrees]. | |
| Double_t | fStereoB |
| Stereo angle front back side [degrees]. | |
| Double_t | fTanStereo [2] |
| Double_t | fCosStereo [2] |
| tangent of stereo angle front/back side | |
| Int_t | fStripShift [2] |
| cosine of stereo angle front/back side | |
| Double_t | fErrorFac |
| Shift in number of strips from bottom to top. | |
Protected Attributes inherited from BmnSsdSensorDssd | |
| 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) |
Detector response for DSSD sensors with stereo angles and cross-connection by double metal layers.
This class describes the response of double-sided silicon strip sensors with stereo angles ( < 90 degrees) on front and/or back side. .
The stereo angle is defined with respect to the y (vertical) axis. Readout is performed at the top edge of the sensor. In case of finite stereo angle, the corner strips not reaching the top edge are connected horizontally to the corresponding strip in the other corner.
A sensor of this type may be part of a daisy chain of several sensors arranged vertically on top of each others and being connected to the same module.
The mapping of strip number and module channel is trivial in the case of just one sensor per module. In case of several daisy-chained sensors, the top-edge strip is vertically connected vertically to the corresponding strip on the bottom edge of the sensor above. This results in an offset of strip number to channel number which depends on the position of the' sensor in the daisy chain. This behaviour is implemented in the methods GetStrip and GetModuleChannel.
Definition at line 45 of file BmnSsdSensorDssdStereo.h.
| BmnSsdSensorDssdStereo::BmnSsdSensorDssdStereo | ( | UInt_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 BmnSsdSensorDssdStereo.cxx.
| BmnSsdSensorDssdStereo::BmnSsdSensorDssdStereo | ( | Double_t | dy, |
| Int_t | nStrips, | ||
| Double_t | pitch, | ||
| Double_t | stereoF, | ||
| Double_t | stereoB | ||
| ) |
Constructor
| dy | Length of active area in y [cm] |
| nStrips | Number of strips (same front and back) |
| pitch | Strip pitch [cm] |
| stereoF | Stereo angle front side [degrees] |
| stereoB | Stereo angle back side [degrees] |
Definition at line 36 of file BmnSsdSensorDssdStereo.cxx.
References BmnSsdSensorDssd::fDy.
|
inlinevirtual |
Destructor
Definition at line 71 of file BmnSsdSensorDssdStereo.h.
|
protectedvirtual |
Used for calculation of hit errors.
Charge diffusion into adjacent strips
| [in] | x | x coordinate of charge centre (local c.s.) [cm] |
| [in] | y | y coordinate of charge centre (local c.s.) [cm] |
| [in] | sigma | Diffusion width [cm] |
| [in] | side | 0 = front (p) side, 1 = back (n) side |
| [out] | fracL | Fraction of charge in left neighbour strip |
| [out] | fracC | Fraction of charge in centre strip |
| [out] | fracR | Fraction of charge in right neighbour strip |
Calculates the fraction of charge in the most significant (centre) strip and its left and right neighbours. The charge distribution is assumed to be a 2-d Gaussian (resulting from thermal diffusion) with centre (x,y) and width sigma in both dimensions. The integration is performed in the coordinate across the strips. For simplicity, all charge left (right) of the centre strip is accumulated in the left (right) neighbour; this is justified since typical values of the diffusion width are much smaller than the strip pitch. The charge in the neighbouring strip is neglected if it is more distant than 3 sigma from the charge centre. Edge effects are neglected, i.e. diffusion into the inactive area is allowed.
Definition at line 58 of file BmnSsdSensorDssdStereo.cxx.
References fCosStereo, BmnSsdSensorDssd::fDx, BmnSsdSensorDssd::fDy, fPitch, and fTanStereo.
Referenced by PropagateCharge().
|
protectedvirtual |
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.
Implements BmnSsdSensorDssd.
Definition at line 101 of file BmnSsdSensorDssdStereo.cxx.
References fNofStrips, and fStripShift.
|
inlinevirtual |
Number of strips (same for front and back side)
| side | Not used @value Number of strips |
Implements BmnSsdSensorDssd.
Definition at line 78 of file BmnSsdSensorDssdStereo.h.
References fNofStrips.
|
inlinevirtual |
Strip pitch (same for front and back side)
| side | Not used @value Strip pitch |
Implements BmnSsdSensorDssd.
Definition at line 85 of file BmnSsdSensorDssdStereo.h.
References fPitch.
|
inline |
Stereo angle for front and back side.
| side | 0 = front side, 1 = back side @value Stereo angle [degrees] on the specified sensor side |
Definition at line 92 of file BmnSsdSensorDssdStereo.h.
References fStereoB, and fStereoF.
Referenced by BmnSsdStation::GetSensorStereoAngle().
|
protectedvirtual |
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.
Implements BmnSsdSensorDssd.
Definition at line 124 of file BmnSsdSensorDssdStereo.cxx.
References fNofStrips, and fStripShift.
|
protectedvirtual |
Get strip number from point coordinates.
| x | x coordinate [cm] |
| y | y coordinate [cm] |
| side | 0 = front side, 1 = back side |
Definition at line 154 of file BmnSsdSensorDssdStereo.cxx.
References BmnSsdSensorDssd::fDx, BmnSsdSensorDssd::fDy, fNofStrips, fPitch, and fTanStereo.
Referenced by PropagateCharge().
|
virtual |
Initialisation @value kTRUE if parameters and node are consistent.
The consistency of geometric node and sensor parameters is checked; derived parameters are calculated.
Reimplemented from BmnSsdSensor.
Definition at line 200 of file BmnSsdSensorDssdStereo.cxx.
References fCosStereo, BmnSsdSensorDssd::fDx, BmnSsdSensorDssd::fDy, BmnSsdSensorDssd::fDz, fErrorFac, BmnSsdSensorDssd::fIsSet, BmnSsdElement::fNode, fNofStrips, fPitch, fStereoB, fStereoF, BmnSsdSensorDssd::fStripCharge, fStripShift, fTanStereo, and BmnSsdSensorDssd::SelfTest().
Referenced by BmnSsdSetup::DefaultSensor().
|
protected |
Intersection point of two strips / cluster centres
| [in] | xF | x coordinate on read-out edge, front side [cm] |
| [in] | exF | uncertainty on xF [cm] |
| [in] | xB | x coordinate on read-out edge, back side [cm] |
| [in] | eBF | uncertainty on xB [cm] |
| [out] | x | x coordinate of crossing [cm] |
| [out] | y | y coordinate of crossing [cm] |
| [out] | varX | Variance in x [cm^2] |
| [out] | varY | Variance in y [cm^2] |
| [out] | varXY | Covariance of x and y [cm^2] |
This function calculates the intersection point of two lines starting at xF and xB at the top edge with slopes corresponding to the respective stereo angle.
All coordinates are in the sensor frame with the origin in the bottom left corner of the active area.
Definition at line 279 of file BmnSsdSensorDssdStereo.cxx.
References BmnSsdSensorDssd::fDx, BmnSsdSensorDssd::fDy, fErrorFac, fStereoB, fStereoF, fTanStereo, and BmnSsdSensorDssd::IsInside().
Referenced by IntersectClusters().
|
protectedvirtual |
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 |
Implements BmnSsdSensorDssd.
Definition at line 342 of file BmnSsdSensorDssdStereo.cxx.
References BmnSsdSensor::CreateHit(), BmnSsdSensorDssd::fDx, BmnSsdSensorDssd::fDy, fPitch, fStereoB, fStereoF, fTanStereo, BmnSsdSensorDssd::GetClusterPosition(), BmnSsdElement::GetIndex(), BmnSsdCluster::GetPosition(), BmnSsdCluster::GetPositionError(), and Intersect().
|
virtual |
Modify the strip pitch.
| New | strip pitch [cm] |
The number of strips is re-calculated accordingly.
Implements BmnSsdSensorDssd.
Definition at line 457 of file BmnSsdSensorDssdStereo.cxx.
References BmnSsdSensorDssd::fDx, BmnSsdSensorDssd::fIsSet, fNofStrips, fPitch, and BmnSsdSensorDssd::fStripCharge.
|
protectedvirtual |
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 |
Implements BmnSsdSensorDssd.
Definition at line 476 of file BmnSsdSensorDssdStereo.cxx.
References Diffusion(), BmnSsdPhysics::DiffusionWidth(), BmnSsdSensorDssd::fDz, fNofStrips, BmnSsdSensorDssd::fStripCharge, fTanStereo, BmnSsdSensor::GetConditions(), GetStripNumber(), BmnSsdSetup::Instance(), BmnSsdSensorDssd::IsInside(), and BmnSsdSensorDssd::LorentzShift().
|
virtual |
Set the internal sensor parameters.
| dy | Size of active area in y [cm] |
| nStrips | Number of strips (same for front and back) |
| pitch | Strip pitch [cm] (same for front and back) |
| stereoF | Strip stereo angle front side [degrees] |
| stereoB | Strip stereo angle back side [degrees] @value kTRUE if parameters are successfully set; else kFALSE |
String output
Implements BmnSsdSensorDssd.
Definition at line 574 of file BmnSsdSensorDssdStereo.cxx.
References BmnSsdSensor::fConditions, BmnSsdSensorDssd::fDy, fNofStrips, fPitch, fStereoB, fStereoF, BmnSsdElement::GetPnode(), and BmnSsdSensorConditions::ToString().
|
protected |
tangent of stereo angle front/back side
Definition at line 140 of file BmnSsdSensorDssdStereo.h.
Referenced by Diffusion(), and Init().
|
protected |
Shift in number of strips from bottom to top.
Definition at line 142 of file BmnSsdSensorDssdStereo.h.
Referenced by Init(), and Intersect().
|
protected |
Number of strips (same for front and back)
Definition at line 133 of file BmnSsdSensorDssdStereo.h.
Referenced by GetModuleChannel(), GetNofStrips(), GetStrip(), GetStripNumber(), Init(), ModifyStripPitch(), PropagateCharge(), and ToString().
|
protected |
Strip pitch /same for front and back)
Definition at line 134 of file BmnSsdSensorDssdStereo.h.
Referenced by Diffusion(), GetPitch(), GetStripNumber(), Init(), IntersectClusters(), ModifyStripPitch(), and ToString().
|
protected |
Stereo angle front back side [degrees].
Definition at line 136 of file BmnSsdSensorDssdStereo.h.
Referenced by GetStereoAngle(), Init(), Intersect(), IntersectClusters(), and ToString().
|
protected |
Stereo angle front side [degrees].
Definition at line 135 of file BmnSsdSensorDssdStereo.h.
Referenced by GetStereoAngle(), Init(), Intersect(), IntersectClusters(), and ToString().
|
protected |
cosine of stereo angle front/back side
Definition at line 141 of file BmnSsdSensorDssdStereo.h.
Referenced by GetModuleChannel(), GetStrip(), and Init().
|
protected |
Temporary variables to avoid frequent calculations
Definition at line 139 of file BmnSsdSensorDssdStereo.h.
Referenced by Diffusion(), GetStripNumber(), Init(), Intersect(), IntersectClusters(), and PropagateCharge().