BmnRoot
Loading...
Searching...
No Matches
BmnSsdSensorDssd Class Referenceabstract

Class describing double-sided silicon strip sensors. More...

#include <BmnSsdSensorDssd.h>

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

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 BmnSsdSensorConditionsGetConditions () const
 
BmnLinkGetCurrentLink () const
 
BmnSsdModuleGetModule () 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
 
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 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
 
BmnSsdSensoroperator= (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
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

Class describing double-sided silicon strip sensors.

Version
1.0

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.

Constructor & Destructor Documentation

◆ BmnSsdSensorDssd()

BmnSsdSensorDssd::BmnSsdSensorDssd ( Int_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 BmnSsdSensorDssd.cxx.

◆ ~BmnSsdSensorDssd()

virtual BmnSsdSensorDssd::~BmnSsdSensorDssd ( )
inlinevirtual

Destructor

Definition at line 64 of file BmnSsdSensorDssd.h.

Member Function Documentation

◆ CalculateResponse()

Int_t BmnSsdSensorDssd::CalculateResponse ( BmnSsdSensorPoint point)
protectedvirtual

Analogue response to a track in the sensor.

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

◆ CrossTalk()

void BmnSsdSensorDssd::CrossTalk ( Double_t  ctcoeff)
protected

Cross talk

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

◆ FindHits()

Int_t BmnSsdSensorDssd::FindHits ( std::vector< BmnSsdCluster * > &  clusters,
TClonesArray *  hitArray,
BmnEvent event,
Double_t  dTime 
)
virtual

Find hits from clusters.

Parameters
clustersInput vector of SsdClusters in the module
dTimeMax. 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().

◆ GetClusterPosition()

void BmnSsdSensorDssd::GetClusterPosition ( Double_t  ClusterCentre,
Double_t &  xCluster,
Int_t &  side 
)
protected

Get the cluster position at the top edge of the sensor.

Parameters
[in]centreCluster centre in (module) channel units
[out]xClusterCluster position at readout edge
[out]sideSensor 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().

◆ GetModuleChannel()

virtual Int_t BmnSsdSensorDssd::GetModuleChannel ( Int_t  strip,
Int_t  side,
Int_t  sensorId 
) const
protectedpure virtual

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.

Implemented in BmnSsdSensorDssdStereo.

Referenced by RegisterCharge(), and SelfTest().

◆ GetNofStrips()

virtual Int_t BmnSsdSensorDssd::GetNofStrips ( Int_t  side) const
pure virtual

Number of strips on front and back side.

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

◆ GetPitch()

virtual Double_t BmnSsdSensorDssd::GetPitch ( Int_t  side) const
pure virtual

Strip pitch on front and back side.

Parameters
side0 = front side, 1 = back side @value Strip pitch [cm] on the specified sensor side

Implemented in BmnSsdSensorDssdStereo.

Referenced by GetClusterPosition(), and BmnSsdStation::GetSensorPitch().

◆ GetSide()

Int_t BmnSsdSensorDssd::GetSide ( Double_t  channel) const
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.

Parameters
channelChannel number
Returns
Sensor side ( 0 = front, 1 = back)

Definition at line 177 of file BmnSsdSensorDssd.h.

References GetNofStrips().

Referenced by FindHits().

◆ GetStrip()

virtual std::pair< Int_t, Int_t > BmnSsdSensorDssd::GetStrip ( Int_t  channel,
Int_t  sensorId 
) const
protectedpure virtual

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.

Implemented in BmnSsdSensorDssdStereo.

Referenced by GetClusterPosition(), and SelfTest().

◆ IntersectClusters()

virtual Int_t BmnSsdSensorDssd::IntersectClusters ( BmnSsdCluster clusterF,
BmnSsdCluster clusterB 
)
protectedpure virtual

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

Implemented in BmnSsdSensorDssdStereo.

Referenced by FindHits().

◆ IsInside()

Bool_t BmnSsdSensorDssd::IsInside ( Double_t  x,
Double_t  y 
)
protected

Check whether a point (x,y) is inside the active area.

Parameters
xx coordinate in the local c.s. [cm]
yy coordinate in the local c.s. [cm]
Returns
kTRUE if inside active area.

The coordinates have to be given in the local coordinate system (origin in the sensor centre).

Definition at line 183 of file BmnSsdSensorDssd.cxx.

References fDx, and fDy.

Referenced by BmnSsdSensorDssdStereo::Intersect(), and BmnSsdSensorDssdStereo::PropagateCharge().

◆ LorentzShift()

Double_t BmnSsdSensorDssd::LorentzShift ( Double_t  z,
Int_t  chargeType,
Double_t  bY 
) const
protected

Lorentz shift in the x coordinate.

Parameters
zCoordinate of charge origin in local c.s. [cm]
chargeTypeType of charge carrier (0 = electron, 1 = hole)
bYMagnetic 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().

◆ ModifyStripPitch()

virtual void BmnSsdSensorDssd::ModifyStripPitch ( Double_t  pitch)
pure virtual

Modify the strip pitch.

Parameters
Newstrip pitch [cm]

The number of strips is re-calculated accordingly.

Implemented in BmnSsdSensorDssdStereo.

Referenced by BmnSsdSetup::ModifyStripPitch().

◆ PrintChargeStatus()

void BmnSsdSensorDssd::PrintChargeStatus ( ) const

Print charge status

Definition at line 241 of file BmnSsdSensorDssd.cxx.

References fStripCharge, and GetNofStrips().

Referenced by CalculateResponse().

◆ ProduceCharge()

void BmnSsdSensorDssd::ProduceCharge ( BmnSsdSensorPoint point)
protected

◆ PropagateCharge()

virtual void BmnSsdSensorDssd::PropagateCharge ( Double_t  x,
Double_t  y,
Double_t  z,
Double_t  charge,
Double_t  bY,
Int_t  side 
)
protectedpure virtual

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

Implemented in BmnSsdSensorDssdStereo.

Referenced by ProduceCharge().

◆ RegisterCharge()

void BmnSsdSensorDssd::RegisterCharge ( Int_t  side,
Int_t  strip,
Double_t  charge,
Double_t  time 
) const
protected

Register the produced charge in one strip to the module.

Parameters
side0 = front, 1 = back
stripstrip number
chargecharge in strip [e]
timetime 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().

◆ SelfTest()

Bool_t BmnSsdSensorDssd::SelfTest ( )
protected

Test the consistent implementation of GetModuleChannel and GetStrip. The latter should be the reverse of the former.

Returns
kTRUE if successful

Definition at line 464 of file BmnSsdSensorDssd.cxx.

References GetModuleChannel(), GetNofStrips(), and GetStrip().

Referenced by BmnSsdSensorDssdStereo::Init().

◆ ToString()

virtual std::string BmnSsdSensorDssd::ToString ( ) const
pure virtual

String output

Implements BmnSsdSensor.

Implemented in BmnSsdSensorDssdStereo.

Referenced by CalculateResponse().

Member Data Documentation

◆ fDx

◆ fDy

◆ fDz

Double_t BmnSsdSensorDssd::fDz
protected

Thickness in z [cm].

Definition at line 117 of file BmnSsdSensorDssd.h.

Referenced by BmnSsdSensorDssdStereo::Init(), LorentzShift(), and BmnSsdSensorDssdStereo::PropagateCharge().

◆ fIsSet

Bool_t BmnSsdSensorDssd::fIsSet
protected

Flag whether sensor is properly initialised.

Definition at line 118 of file BmnSsdSensorDssd.h.

Referenced by CalculateResponse(), BmnSsdSensorDssdStereo::Init(), and BmnSsdSensorDssdStereo::ModifyStripPitch().

◆ fStripCharge

TArrayD BmnSsdSensorDssd::fStripCharge[2]
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().


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