BmnRoot
Loading...
Searching...
No Matches
BmnSsdSensorDssdStereo Class Reference

Detector response for DSSD sensors with stereo angles and cross-connection by double metal layers. More...

#include <BmnSsdSensorDssdStereo.h>

Inheritance diagram for BmnSsdSensorDssdStereo:
[legend]
Collaboration diagram for BmnSsdSensorDssdStereo:
[legend]

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 BmnSsdSensorConditionsGetConditions () const
 
BmnLinkGetCurrentLink () const
 
BmnSsdModuleGetModule () 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
 
BmnSsdElementGetDaughter (Int_t index) const
 
Int_t GetIndex () const
 
ESsdElementLevel GetLevel () const
 
BmnSsdElementGetMother () 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
 
BmnSsdSensoroperator= (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
BmnSsdSensorConditionsfConditions
 Operating conditions.
 
BmnLinkfCurrentLink
 Link to currently processed MCPoint.
 
TClonesArray * fHits
 Output array for hits. Used in hit finding.
 
BmnEventfEvent
 
- 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.
 
BmnSsdElementfMother
 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)
 

Detailed Description

Detector response for DSSD sensors with stereo angles and cross-connection by double metal layers.

Author
V.Friese v.fri.nosp@m.ese@.nosp@m.gsi.d.nosp@m.e
D. Baranov
Version
1.0

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.

Constructor & Destructor Documentation

◆ BmnSsdSensorDssdStereo() [1/2]

BmnSsdSensorDssdStereo::BmnSsdSensorDssdStereo ( UInt_t  address = 0,
TGeoPhysicalNode *  node = nullptr,
BmnSsdElement mother = nullptr 
)

Constructor

Parameters
addressUnique element address
nodePointer to geometry node
motherPointer to mother element (module)

Definition at line 22 of file BmnSsdSensorDssdStereo.cxx.

◆ BmnSsdSensorDssdStereo() [2/2]

BmnSsdSensorDssdStereo::BmnSsdSensorDssdStereo ( Double_t  dy,
Int_t  nStrips,
Double_t  pitch,
Double_t  stereoF,
Double_t  stereoB 
)

Constructor

Parameters
dyLength of active area in y [cm]
nStripsNumber of strips (same front and back)
pitchStrip pitch [cm]
stereoFStereo angle front side [degrees]
stereoBStereo angle back side [degrees]

Definition at line 36 of file BmnSsdSensorDssdStereo.cxx.

References BmnSsdSensorDssd::fDy.

◆ ~BmnSsdSensorDssdStereo()

virtual BmnSsdSensorDssdStereo::~BmnSsdSensorDssdStereo ( )
inlinevirtual

Destructor

Definition at line 71 of file BmnSsdSensorDssdStereo.h.

Member Function Documentation

◆ Diffusion()

void BmnSsdSensorDssdStereo::Diffusion ( Double_t  x,
Double_t  y,
Double_t  sigma,
Int_t  side,
Double_t &  fracL,
Double_t &  fracC,
Double_t &  fracR 
)
protectedvirtual

Used for calculation of hit errors.

Charge diffusion into adjacent strips

Parameters
[in]xx coordinate of charge centre (local c.s.) [cm]
[in]yy coordinate of charge centre (local c.s.) [cm]
[in]sigmaDiffusion width [cm]
[in]side0 = front (p) side, 1 = back (n) side
[out]fracLFraction of charge in left neighbour strip
[out]fracCFraction of charge in centre strip
[out]fracRFraction 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().

◆ GetModuleChannel()

Int_t BmnSsdSensorDssdStereo::GetModuleChannel ( Int_t  strip,
Int_t  side,
Int_t  sensorId 
) const
protectedvirtual

Get the readout channel in the module for a given strip.

Parameters
stripStrip number
sideSide (0 = front, 1 = back)
sensorIdIndex of sensor within module
Returns
Channel number in 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.

◆ GetNofStrips()

virtual Int_t BmnSsdSensorDssdStereo::GetNofStrips ( Int_t  ) const
inlinevirtual

Number of strips (same for front and back side)

Parameters
sideNot used @value Number of strips

Implements BmnSsdSensorDssd.

Definition at line 78 of file BmnSsdSensorDssdStereo.h.

References fNofStrips.

◆ GetPitch()

virtual Double_t BmnSsdSensorDssdStereo::GetPitch ( Int_t  ) const
inlinevirtual

Strip pitch (same for front and back side)

Parameters
sideNot used @value Strip pitch

Implements BmnSsdSensorDssd.

Definition at line 85 of file BmnSsdSensorDssdStereo.h.

References fPitch.

◆ GetStereoAngle()

Double_t BmnSsdSensorDssdStereo::GetStereoAngle ( Int_t  side) const
inline

Stereo angle for front and back side.

Parameters
side0 = 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().

◆ GetStrip()

pair< Int_t, Int_t > BmnSsdSensorDssdStereo::GetStrip ( Int_t  channel,
Int_t  sensorId 
) const
protectedvirtual

Get strip and side from module channel.

Parameters
[in]channelChannel number in module
[in]sensorIdSensor 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.

◆ GetStripNumber()

Int_t BmnSsdSensorDssdStereo::GetStripNumber ( Double_t  x,
Double_t  y,
Int_t  side 
) const
protectedvirtual

Get strip number from point coordinates.

Parameters
xx coordinate [cm]
yy coordinate [cm]
side0 = front side, 1 = back side
Returns
strip number on selected side

Definition at line 154 of file BmnSsdSensorDssdStereo.cxx.

References BmnSsdSensorDssd::fDx, BmnSsdSensorDssd::fDy, fNofStrips, fPitch, and fTanStereo.

Referenced by PropagateCharge().

◆ Init()

Bool_t BmnSsdSensorDssdStereo::Init ( )
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().

◆ Intersect()

Bool_t BmnSsdSensorDssdStereo::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 
)
protected

Intersection point of two strips / cluster centres

Parameters
[in]xFx coordinate on read-out edge, front side [cm]
[in]exFuncertainty on xF [cm]
[in]xBx coordinate on read-out edge, back side [cm]
[in]eBFuncertainty on xB [cm]
[out]xx coordinate of crossing [cm]
[out]yy coordinate of crossing [cm]
[out]varXVariance in x [cm^2]
[out]varYVariance in y [cm^2]
[out]varXYCovariance of x and y [cm^2]
Returns
kTRUE if intersection is inside active area.

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().

◆ IntersectClusters()

Int_t BmnSsdSensorDssdStereo::IntersectClusters ( BmnSsdCluster clusterF,
BmnSsdCluster clusterB 
)
protectedvirtual

Find the intersection points of two clusters. For each intersection point, a hit is created.

Parameters
clusterFPointer to cluster on front side
clusterBPointer to cluster on back side
sensorPointer to sensor object
Returns
Number of intersection points inside active area

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().

◆ ModifyStripPitch()

void BmnSsdSensorDssdStereo::ModifyStripPitch ( Double_t  pitch)
virtual

Modify the strip pitch.

Parameters
Newstrip 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.

◆ PropagateCharge()

void BmnSsdSensorDssdStereo::PropagateCharge ( Double_t  x,
Double_t  y,
Double_t  z,
Double_t  charge,
Double_t  bY,
Int_t  side 
)
protectedvirtual

Propagate a charge created in the sensor to the readout strips

Parameters
xx origin of charge in local c.s. [cm]
yy origin of charge in local c.s. [cm]
zz origin of charge in local c.s. [cm]
chargeCharge [e]
bYMagnetic field (y component) [T]
side0 = front (n) side; 1 = back (p) side
sensorPointer 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().

◆ ToString()

std::string BmnSsdSensorDssdStereo::ToString ( ) const
virtual

Set the internal sensor parameters.

Parameters
dySize of active area in y [cm]
nStripsNumber of strips (same for front and back)
pitchStrip pitch [cm] (same for front and back)
stereoFStrip stereo angle front side [degrees]
stereoBStrip 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().

Member Data Documentation

◆ fCosStereo

Double_t BmnSsdSensorDssdStereo::fCosStereo[2]
protected

tangent of stereo angle front/back side

Definition at line 140 of file BmnSsdSensorDssdStereo.h.

Referenced by Diffusion(), and Init().

◆ fErrorFac

Double_t BmnSsdSensorDssdStereo::fErrorFac
protected

Shift in number of strips from bottom to top.

Definition at line 142 of file BmnSsdSensorDssdStereo.h.

Referenced by Init(), and Intersect().

◆ fNofStrips

Int_t BmnSsdSensorDssdStereo::fNofStrips
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().

◆ fPitch

Double_t BmnSsdSensorDssdStereo::fPitch
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().

◆ fStereoB

Double_t BmnSsdSensorDssdStereo::fStereoB
protected

Stereo angle front back side [degrees].

Definition at line 136 of file BmnSsdSensorDssdStereo.h.

Referenced by GetStereoAngle(), Init(), Intersect(), IntersectClusters(), and ToString().

◆ fStereoF

Double_t BmnSsdSensorDssdStereo::fStereoF
protected

Stereo angle front side [degrees].

Definition at line 135 of file BmnSsdSensorDssdStereo.h.

Referenced by GetStereoAngle(), Init(), Intersect(), IntersectClusters(), and ToString().

◆ fStripShift

Int_t BmnSsdSensorDssdStereo::fStripShift[2]
protected

cosine of stereo angle front/back side

Definition at line 141 of file BmnSsdSensorDssdStereo.h.

Referenced by GetModuleChannel(), GetStrip(), and Init().

◆ fTanStereo

Double_t BmnSsdSensorDssdStereo::fTanStereo[2]
protected

Temporary variables to avoid frequent calculations

Definition at line 139 of file BmnSsdSensorDssdStereo.h.

Referenced by Diffusion(), GetStripNumber(), Init(), Intersect(), IntersectClusters(), and PropagateCharge().


The documentation for this class was generated from the following files: