Go to the documentation of this file.
9 #include <TGeoPhysicalNode.h>
12 #include <FairLogger.h>
20 using std::stringstream;
60 assert(side == 0 || side == 1);
68 Int_t iStrip = TMath::FloorNint(xRo /
fPitch);
71 Double_t xLeftRo = Double_t(iStrip) *
fPitch;
72 Double_t xRightRo = xLeftRo +
fPitch;
75 Double_t dLeft = (xRo - xLeftRo) *
fCosStereo[side];
76 Double_t dRight = (xRightRo - xRo) *
fCosStereo[side];
81 if (dLeft < 3. * sigma)
82 fracL = 0.5 * (1. - TMath::Erf(0.707107 * dLeft / sigma));
84 if (dRight < 3. * sigma)
85 fracR = 0.5 * (1. - TMath::Erf(0.707107 * dRight / sigma));
86 fracC = 1. - fracL - fracR;
94 Int_t sensorId)
const {
97 assert(side == 0 || side == 1);
100 Int_t channel = strip - sensorId *
fStripShift[side];
127 assert(side == 0 || side == 1);
130 assert(TMath::Abs(
x) <=
fDx / 2.);
131 assert(TMath::Abs(
y) <=
fDy / 2.);
135 Double_t xdist =
x + 0.5 *
fDx;
136 Double_t ydist =
y + 0.5 *
fDy;
142 Int_t iStrip = TMath::FloorNint(xro /
fPitch);
168 TGeoBBox*
shape =
dynamic_cast<TGeoBBox*
>(node->GetShape());
173 assert(fDx < 2. * shape->GetDX());
176 assert(fDy < 2. * shape->GetDY());
237 assert(side == 0 || side == 1);
239 Double_t xCharge =
x;
240 Double_t yCharge =
y;
247 if (!
IsInside(xCharge, yCharge)) {
return; }
258 Double_t diffusionWidth =
265 assert(diffusionWidth >= 0.);
270 Diffusion(xCharge, yCharge, diffusionWidth, side, fracL, fracC, fracR);
280 iStripL = iStripC - 1;
281 iStripR = iStripC + 1;
283 iStripL = (iStripC == 0 ?
fNofStrips - 1 : iStripC - 1);
284 iStripR = (iStripC ==
fNofStrips - 1 ? 0 : iStripC + 1);
290 if (fracL > 0. && iStripL >= 0) {
305 ss <<
fElement->GetName() <<
" (DssdStereo): ";
308 ss <<
"no node assigned; ";
310 TGeoBBox*
shape =
dynamic_cast<TGeoBBox*
>(node->GetShape());
312 ss <<
"Dimension (" << 2. *
shape->GetDX() <<
", " << 2. *
shape->GetDY()
313 <<
", " << 2. *
shape->GetDZ() <<
") cm, ";
315 ss <<
"dy " <<
fDy <<
" cm, ";
virtual Int_t GetStripNumber(Double_t x, Double_t y, Int_t side) const
Get strip number from point coordinates.
Int_t fStripShift[2]
cosine of stereo angle front/back side
Bool_t fIsSet
Flag whether sensor is properly initialised.
const CbmStsParSim * fSettings
Simulation module.
const CbmStsParSensorCond * GetConditions() const
Sensor conditions.
Double_t LorentzShift(Double_t z, Int_t chargeType, Double_t bY) const
Lorentz shift in the x coordinate.
Double_t fDy
Dimension of active area in y [cm].
TGeoPhysicalNode * GetPnode() const
std::string ToString() const
String output.
Detector response for DSSD sensors with stereo angles and cross-connection by double metal layers.
Int_t fNofStrips
Number of strips (same for front and back)
Double_t fPitch
Strip pitch /same for front and back)
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.
Bool_t IsInside(Double_t x, Double_t y)
Double_t fCosStereo[2]
tangent of stereo angle front/back side
std::string ToString() const
String output.
ClassImp(CbmConverterManager) InitStatus CbmConverterManager
virtual Bool_t Init()
Initialisation @value kTRUE if parameters and node are consistent.
Double_t fStereoF
Stereo angle front side [degrees].
const CbmStsParSensorCond * fConditions
Simulation settings.
Abstract class for the simulation of double-sided silicon strip sensors.
CbmStsSimSensorDssdStereo(CbmStsElement *element=nullptr)
virtual void PropagateCharge(Double_t x, Double_t y, Double_t z, Double_t charge, Double_t bY, Int_t side)
Double_t fStereoB
Stereo angle front back side [degrees].
Bool_t LorentzShift() const
Check whether Lorentz shift is applied.
Double_t fErrorFac
Shift in number of strips from bottom to top.
Bool_t Diffusion() const
Check whether diffusion is applied.
static Double_t DiffusionWidth(Double_t z, Double_t d, Double_t vBias, Double_t vFd, Double_t temperature, Int_t chargeType)
Double_t fDz
Thickness in z [cm].
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.
Class representing an element of the STS setup.
Double_t fDx
Dimension of active area in x [cm].
virtual void ModifyStripPitch(Double_t pitch)
Modify the strip pitch.