All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
SiStripDigi.h
Go to the documentation of this file.
1 // ////////////////////////////////////////////////////////////////////// //
2 // //
3 // SiStripDigi - Marlin Processor - digitizing data from Si strip sensors //
4 // //
5 // ////////////////////////////////////////////////////////////////////// //
6 
7 /**
8 \addtogroup SiStripDigi SiStripDigi
9 @{
10 
11  *\mainpage notitle
12  *
13  *<br><br><h1>Digitization of Si Microstrip Detectors - Marlin Processors' Documentation</h1>
14  *
15  *<h4 style="text-align: center"> version 01 </h4>
16  *
17  *<h3>Description of SiStripDigi processor:</h3> SiStripDigi (a Marlin processor)
18  * represents a detailed strip detector digitizer that's mainly intended for detailed
19  * simulation studies; but in principle, can be used for full physics studies. The
20  * geometry information required for data processing is being accessed on the fly via
21  * a geometry interface: SiStripGeom that simply utilizes the information obtained
22  * from given GEAR *.xml file. As regards the solid-state physics, the processor
23  * naturally implements the following processes for e-h pairs created by a
24  * high-energy particle: drift in electric field (simplified just as electric
25  * field of a p-n junction - oriented in negative direction of X axis of local
26  * reference system, i.e. electrons drift in positive direction X, holes vice
27  * versa), diffusion due to multiple collisions and Lorentz shift in magnetic
28  * field; furthermore, it also takes into account electronics processes:
29  * mutual micro-strip crosstalks (dependent on AC/DC coupling), electronics noise, the
30  * type of current collected by strips and set if there are floating string in between
31  * real read-out strips. As DSSDs are assumed to be digitized, both electrons and
32  * holes are collected. Electrons drift to strips oriented in R-Phi direction, holes
33  * to strips oriented in Z direction. A user can naturally influence these effects
34  * when changing processor parameters: sensor depletion voltage (set by default to 60 V),
35  * sensor bias voltage (set by default to 150 V), temperature of a silicon wafer (set by
36  * default to 300 K), interstrip capacitance (set by default to 6 pF), strip-to-backplane
37  * capacitance (set by default to 0 pF), coupling capacitance (set by default to 120 pF)
38  * and sigma of CMS-like noise (set by default to 1200 electrons). Finally, to achieve
39  * higher effectivity one can influence the simulation precision using these parameters:
40  * space precision (set by default to 20 um), relative Lorentz angle precision (set by
41  * default to 1%) and relative drift time precision (set by default to 1%). As the space
42  * precision might be different from the one set in Geant 4, the Landau fluctuations
43  * of deposited energy are simulated here too, using internal fluctuator SiEnergyFluct,
44  * which exactly follows a Geant4 class called G4UniversalFluctuation. If the particle is
45  * regarded as low energy (below MIP beta*gamma factor), the energy is distributed
46  * uniformly using the info from Geant 4, otherwise internal fluctuation is used. As an
47  * output one obtains a standard LCIO collection of TrackerPulses, so to obtain hits,
48  * one still must perform clustering, for instance SiStripClus processor can do it ...
49  *
50  *<h3>Description of SiStripClus processor:</h3>SiStripClus (a Marlin processor)
51  * provides a cluster finding algorithm based on COG (centre of gravity) method (cluster
52  * size is lower than 3) or on head-tail analog method (cluster-size is equal or higher than
53  * 3) and thus transforms electric pulses (TrackerPulses - obtained from SiStripDigi processor)
54  * into real 2D hits (RPhi + Z) (resp. 3D hits, where the 3rd component is calculated
55  * as a center of a sensor). First, a seed strip in Z direction is found (seed strip is a
56  * strip with signal higher than roughly 5 * noise level - set by user), than the processor
57  * looks for neighbouring strips (with signals higher than roughly 2 * noise level - set by
58  * user) and thus finds a 1D cluster in Z. The same is performed in R-Phi direction (pitch in
59  * R-Phi might differ in forward region based on current Z position) and final 2D hit, resp.
60  * 3D hit is calculated (including "blind" hits, so-called ghosts). All the computation is
61  * performed in local reference system (using information from the geometry interface:
62  * SiStripGeom) and final 3D hits are transformed back into global ref. system. In
63  * order to obtain quasi-realistic hit covariance matrices, the resolution can be simulated
64  * using this processor (use #define ROOT_OUTPUT) and then saved as input Marlin resolution
65  * parameters ...
66  *
67  *
68  * If you have any questions or comments, please write an email to the author:
69  * <a class="email" href="mailto:drasal@ipnp.troja.mff.cuni.cz"> Zbynek Drasal</a>,
70  * Charles University, Prague.
71  *
72  * CLHEP Namespace of Class Library in High Energy Physics
73  * gear Namespace of GEometry Api for Reconstruction
74  * lcio Namespace of Linear Collider InputOutput
75  * marlin Namespace of Modular Analysis and Reconstruction tool for LINear collider
76  * std Standard library namespace
77  * sistrip SiStripDigi processor namespace
78  */
79 
80 #ifndef SISTRIPDIGI_H
81 #define SISTRIPDIGI_H 1
82 
83 // Define ROOT output if needed
84 //#define ROOT_OUTPUT_LAND
85 
86 #include <vector>
87 #include <queue>
88 #include <map>
89 #include<string>
90 
91 // Include CLHEP header files
92 #include <CLHEP/Random/RandGauss.h>
93 #include <CLHEP/Vector/ThreeVector.h>
94 
95 // Include Digi header files
96 #include "DigiCluster.h"
97 #include "SiEnergyFluct.h"
98 #include "Signal.h"
99 #include "SimTrackerDigiHit.h"
100 #include "SiStripGeom.h"
101 
102 // Include LCIO header files
103 #include <lcio.h>
104 #include <EVENT/LCCollection.h>
105 #include <IMPL/SimTrackerHitImpl.h>
106 
107 // Include Marlin
108 #include <marlin/Global.h>
109 #include <marlin/Processor.h>
110 #include <streamlog/streamlog.h>
111 
112 // Include ROOT classes
113 #ifdef ROOT_OUTPUT_LAND
114 #include <TFile.h>
115 #include <TTree.h>
116 #endif
117 
118 class RombIntSolver;
119 
120 namespace sistrip {
121 
122 // FIXME: Use the StripType enumerate
123 #define STRIPFRONT RPhi // Const denoting strips in sensors 1,2 (front)
124 #define STRIPREAR Z // Const denoting strips in sensors 3,4 (rear)
125 //FIXME: TO DELETE: Solo para compilar
126 #define STRIPRPHI RPhi // Const denoting strips in sensors 1,2 (front)
127 #define STRIPZ Z // Const denoting strips in sensors 3,4 (rear)
128 
129 #define ROUNDEPS 5. // Avoid rounding errors - space precision for round. errors in um
130 #define SEED 12586 // Random generator initialization
131 
132 // Typedefs
133 typedef const std::vector< std::string > ConstStringVec;
134 typedef std::vector< std::string > StringVec;
135 typedef std::queue < std::string > StringQue;
136 typedef std::vector< DigiCluster *> DigiClusterVec;
137 typedef std::vector< EVENT::LCCollection *> LCCollectionVec;
138 typedef const std::vector< EVENT::SimTrackerHit *> ConstSimTrackerHitVec;
139 typedef std::vector< EVENT::SimTrackerHit *> SimTrackerHitVec;
140 typedef std::vector< SimTrackerDigiHit *> SimTrackerDigiHitVec;
141 typedef std::map< int, Signal *> StripChargeMap; // strip ID, signal
142 typedef std::map< int, StripChargeMap *> SensorStripMap; // sensor ID, strip map
143 typedef std::map<SimTrackerHit *, float> SimHitMap; // hit, weight
144 
145 /**
146 \addtogroup SiStripDigiProcessor SiStripDigiProcessor
147 \ingroup SiStripDigi
148 @{
149 Marlin processor intended for detailed digitization of silicon strip sensors.
150 //!
151 //! @author Z. Drasal, Charles University, Prague
152 //!
153 */
154 class SiStripDigi : public marlin::Processor
155 {
156  public:
157  //!Method that returns a new instance of this processor
158  virtual Processor * newProcessor() { return new SiStripDigi(); }
159 
160  //!Constructor - set processor description and register processor parameters
161  SiStripDigi();
162 
163  //!Method called at the beginning of data processing - used for initialization
164  virtual void init();
165 
166  //!Method called for each run - used for run header processing
167  virtual void processRunHeader(LCRunHeader * run);
168 
169  //!Method called for each event - used for event data processing
170  virtual void processEvent(LCEvent * event);
171 
172  //!Method called after each event - used for data checking
173  virtual void check(LCEvent * event);
174 
175  //!Method called after all data processing
176  virtual void end();
177 
178  protected:
179 
180  // MAIN DIGI METHOD
181 
182  //!Method digitizing given SimTrackerDigiHit - takes into account all relevant
183  //!physical processes: landau fluctuations, drift, diffusion, Lorentz shift
184  //!in magnetic field (input parameter: a pointer to digitized hit, output
185  //!parameter: a sensor map of strips with total integrated charge and time
186  //!when particle crossed the sensor)
187  void digitize(const SimTrackerDigiHit * hit, SensorStripMap & sensorMap);
188 
189 
190  // OTHER METHODS
191 
192  //!Method that calculates e-h clusters, where clusters are worked out from
193  //!the hits (simulated in Geant 4 and transformed into local reference
194  //!system) using predefined space precision. As the precision might be
195  //!different from a precision in Geant 4, the Landau fluctuations are
196  //!performed here too, using internal Landau fluctuator. Required parameters:
197  //!a pointer to SimTrackerDigiHit and two vectors of pointers to electron,
198  //!resp. hole clusters (pairs) )
199  void calcClusters(const SimTrackerDigiHit * hit, DigiClusterVec & hClusterVec);
200  //DigiClusterVec & eClusterVec, DigiClusterVec & hClusterVec);
201 
202  //!Method that calculates crosstalk effect, i.e. each total charge is
203  //!redistributed according the following relation:
204  //! Q_neigh = Q_centr * C_inter/(C_inter + C_back + C_coupl),
205  //!where neigh denotes neighbouring, centr central, inter interstrip,
206  //!back strip2backplane and coupl coupling.
207  void calcCrossTalk(SensorStripMap & sensorMap);
208 
209  //!Method generating random noise using Gaussian distribution and add this
210  //!effect to the final results.
211  void genNoise(SensorStripMap & sensorMap);
212 
213  //!Method transforming given SimTrackerHit into local ref. system of each
214  //!sensor, resp. wafer, where the center is positioned such as x, y and z
215  //!coordinates are always positive and x is in direction of thickness.
216  void transformSimHit(SimTrackerDigiHit * simDigiHit);
217 
218  // GET METHODS
219 
220  //!Get method - returns ELECTRON diffusivity (parameters: electron mobility
221  //!in cm^2/s, respectively position in cm). The diffusivity is calculated
222  //!according to the Einstein relation:
223  //!
224  //! &nbsp;&nbsp; D = k*temp/e * mobil(E(x),temp) in cm^2/s
225  //!
226  //!Where k represents Boltzmann constant and e an elementary charge.
227  double getElecDiffusivity(double pos);
228 
229  //!Get method - returns HOLE diffusivity (parameters: hole mobility in
230  //!cm^2/s, respectively position in cm). The diffusivity is calculated
231  //!according to the Einstein relation:
232  //!
233  //! &nbsp;&nbsp; D = k*temp/e * mobil(E(x),temp) in cm^2/s
234  //!
235  //!Where k represents Boltzmann constant and e an elementary charge.
236  double getHoleDiffusivity(double pos);
237 
238  //!Get method - returns total ELECTRON drift time (parameters: electron
239  //!position in cm). The total time is obtained as a numerical solution of
240  //!following equation of motion:
241  //!
242  //! &nbsp;&nbsp; dx/dt = v = mobil(E(x), temp) * E(x)
243  //! &nbsp;&nbsp; Int(x0,d){1/(mobility(E(x), temp) * E(x)) * dx} = t
244  //! &nbsp;&nbsp; Int(x0,d){1/v(E(x), temp) * dx} = t
245  //!
246  //!Where mobil represents electron mobility, d sensor thickness, which
247  //!corresponds to sensor back side (DSSDs - back strip side), i.e. the
248  //!one with high voltage set; and v to electron actual velocity.
249  double getElecDriftTime(double pos);
250 
251  //!Get method - returns total HOLE drift time (parameters: hole position
252  //!in cm). The total time is obtained as a numerical solution of following
253  //!equation of motion:
254  //!
255  //! &nbsp;&nbsp; dx/dt = v = mobil(E(x), temp) * E(x)
256  //! &nbsp;&nbsp; Int(x0,0){1/(mobility(E(x), temp) * E(x))*dx} = t
257  //! &nbsp;&nbsp; Int(x0,0){1/v(E(x), temp) * dx} = t
258  //!
259  //!Where mobil represents hole mobility, 0 corresponds to sensor strip side
260  //!(with high voltage set to 0) and v to hole actual velocity.
261  double getHoleDriftTime(double pos);
262 
263  //!Get method - returns electric intensity (parameters: position X in cm).
264  //!The intensity is calculated using analytically expressible relation
265  //!between electron, resp. hole, position and electric field, derived for
266  //!simple abrupt p-n junction with depletion voltage Vd and bias voltage Vb.
267  //!
268  //! Relation:
269  //!
270  //! &nbsp;&nbsp; E(x) = -(Vb+Vd/d - 2*x/d^2*Vd) in V/cm
271  //!
272  //!Where d represents sensor thickness.
273  double getEField(double pos);
274 
275  //!Get method - returns ELECTRON mobility (parameters: electric intenzity in
276  //!V/cm, respectively position X in cm). For the region where the mobility
277  //!is dependent on the electric field, applied along <111> direction,
278  //!following parametrization can be used:
279  //!
280  //! &nbsp;&nbsp; mobil = vm/Ec * 1/(1 + (E(x)/Ec)^beta)^(1/beta) in cm^2/V.s
281  //!
282  //! &nbsp;&nbsp; vm = 1.53*10^9*temp^(-0.87) cm/s
283  //! &nbsp;&nbsp; Ec = 1.01*temp^(1.55) V/cm
284  //! &nbsp;&nbsp; beta = 2.57*10^(-2)*temp(0.66)
285  //!
286  //!For more details about parametrization see: A review of some charge
287  //!transport properties of silicon by C.Jacobini et. al. (Solid-State
288  //!Electronics, 1977, Vol. 20, p. 77-89)
289  double getElecMobility(double pos);
290 
291  //!Get method - returns HOLE mobility (parameters: electric intenzity in
292  //!V/cm, respectively position X in cm). For the region where the mobility
293  //!is dependent on the electric field, applied along <111> direction,
294  //!following parametrization can be used:
295  //!
296  //! &nbsp;&nbsp; mobil = vm/Ec * 1/(1 + (E(x)/Ec)^beta)^(1/beta) in cm^2/V.s
297  //!
298  //! &nbsp;&nbsp; vm = 1.62*10^8*temp^(-0.52) cm/s
299  //! &nbsp;&nbsp; Ec = 1.24*temp^(1.68) V/cm
300  //! &nbsp;&nbsp; beta = 0.46*temp(0.17)
301  //!
302  //!For more details about parametrization see: A review of some charge
303  //!transport properties of silicon by C.Jacobini et. al. (Solid-State
304  //!Electronics, 1977, Vol. 20, p. 77-89)
305  double getHoleMobility(double pos);
306 
307  //!Method used for precise calculation of tan(Lorentz angle) - an angle of
308  //!ELECTRON deflection due to magnetic field. (parameters: position z in
309  //!cm). The Lorentz angle calculation utilizes so-called Romberg integration
310  //!method, quite fast and reasonably precise method. The precision of the
311  //!calculation is set via variable: _epsAngle by a user.
312  //!
313  //! Relation:
314  //!
315  //! &nbsp;&nbsp; tan(thetaL) = Int(x,d){mobil(E(z))*r*B*dz}/Int(z,d){dz}
316  //! &nbsp;&nbsp; shiftX = -Int(x,d){mobil(E(z))*r*By*dz}
317  //! &nbsp;&nbsp; shiftY = Int(x,d){mobil(E(z))*r*Bx*dz}
318  //!
319  //!Where r = 1.13 + 0.0008*(temp-273) represents Hall scattering factor
320  //!for electrons and d sensor thickness, corresponding to sensor back side.
321  CLHEP::Hep3Vector getElecLorentzShift(double posZ);
322 
323  //!Method used for precise calculation of tan(Lorentz angle) - an angle of
324  //!HOLES deflection due to magnetic field. (parameters: position z in
325  //!cm). The Lorentz angle calculation utilizes so-called Romberg integration
326  //!method, quite fast and reasonably precise method. The precision of
327  //!the calculation is set via variable: _epsAngle by a user.
328  //!
329  //! Relation:
330  //!
331  //! &nbsp;&nbsp; tan(thetaL) = Int(z,0){mobil(E(z))*r*B*dz}/Int(z,0){dz}
332  //!
333  //!
334  //!Where r = 0.72 - 0.0005*(temp-273) represents Hall scattering factor
335  //!for holes and 0 corresponds to sensor strip side.
336  CLHEP::Hep3Vector getHoleLorentzShift(double pos);
337 
338  //!Get method - returns ELECTRON actual velocity, calculated as follows:
339  //!
340  //! &nbsp;&nbsp; dz/dt = v = mobil(E(x), temp) * E(x)
341  //!
342  //!Where E corresponds to elec. intenzity a mobil to electron mobility.
343  //!(parameters: electron position in cm)
344  double getElecVelocity(double pos);
345 
346  //!Get method - returns actual ELECTRON inverse velocity, calculated as
347  //!follows:
348  //!
349  //! &nbsp;&nbsp; dt/dx = v^-1 = 1/(mobil(E(x), temp) * E(x))
350  //!
351  //!Where E corresponds to elec. intenzity a mobil to electron mobility.
352  //!(parameters: electron position in cm)
353  double getElecInvVelocity(double pos);
354 
355  //!Get method - returns HOLE actual velocity, calculated as follows:
356  //!
357  //! &nbsp;&nbsp; dx/dt = v = mobil(E(x), temp) * E(x)
358  //!
359  //!Where E corresponds to elec. intenzity a mobil to hole mobility.
360  //!(parameters: hole position in cm)
361  double getHoleVelocity(double pos);
362 
363  //!Get method - returns actual HOLE inverse velocity, calculated as follows:
364  //!
365  //! &nbsp;&nbsp; dt/dx = v^-1 = 1/(mobil(E(x), temp) * E(x))
366  //!
367  //!Where E corresponds to elec. intenzity a mobil to hole mobility.
368  //!(parameters: hole position in cm)
369  double getHoleInvVelocity(double pos);
370 
371 
372  // PRINT METHODS
373 
374  //!Method printing cluster info
375  void printClusterInfo( const DigiCluster & cluster) const;
376 
377  //!Method printing clusters info (parameter: info - extra information)
378  void printClustersInfo( std::string info,
379  const DigiClusterVec & clusterVec) const;
380 
381  //!Method printing hit info (parameter: info - extra information)
382  void printHitInfo( std::string info, const SimTrackerDigiHit * hit) const;
383 
384  //!Method printing processor parameters
385  void printProcessorParams() const;
386 
387  //!Method printing info about signals at each strip
388  void printStripsInfo( std::string info,
389  const SensorStripMap & sensorMap) const;
390 
391 
392  // VARIABLES
393 
394  // Collection names
395  std::string _inColName; //!< LCIO input collection name
396  std::string _outColName; //!< LCIO output collection name
397  std::string _relColNamePlsToSim;//!< LCIO relation collection name -
398  //!< TrkPulse (Digit) <-> SimTrkHit
399 
400  // Digitization parameters - set by users
401  std::string _subdetector;
402 
403  float _Vdepl; //!< Sensor depletion voltage in volts
404  float _Vbias; //!< Sensor bias voltage in volts
405  float _temp; //!< Sensor temperature in Kelvins
406 
407  bool _electronicEffects; //!< Add crosstalk + noise?
408  float _capInterStrip; //!< Mutual interstrip capacitance
409  float _capBackPlane; //!< Strip-to-backplane capacitance
410  float _capCoupl; //!< AC coupling - capacitance
411  float _elNoise; //!< CMS-like (common mode subtracted) noise added to the signal
412  bool _floatStripsRPhi; //!< Is every even strip floating in R-Phi?
413  bool _floatStripsZ; //!< Is every even strip floating in Z?
414 
415  float _epsSpace; //!< Absolute digi precision in space in um
416  float _epsAngle; //!< Relative digi precision in Lorentz angle
417  float _epsTime; //!< Relative digi precision in Drift time
418 
419  // Digitization parameters for Landau fluctuations - set by users
420  bool _landauFluct; //!< Define if internal Landau fluctuations (instead of Geant4) used
421  float _landauBetaGammaCut; //!< Below this beta*gamma factor internal Landau fluctuations not used
422  double _prodThreshOnDeltaRays; //!< Production threshold cut on delta electrons in keV (for Landau fluct.) - use the same as in Geant4 (80keV ~ 0.05 mm)
423 
424  double _pitchFront; //!< Pitch in the front sensors (in the middle)
425  double _pitchRear; //!< Pitch in the rear sensors (in the middle)
426 
427  // Digitization parameters for background studies - set by users
428  bool _integrationWindow; //!< Use integration window?
429  double _startIntegration; //!< Start time of integration of the sensors in ns (everything before this value will not be digitized)
430  double _stopIntegration; //!< Stop time of integration of the sensors in ns(everything after this value will not be digitized)
431 
432  // Digitization parameters - obtained from Gear xml file
433  int _currentCellID; //!< Actual layer+ladder+sensor ID encoded into one number
434  short int _currentLayerID; //!< Actual layer ID
435  short int _currentLadderID; //!< Actual ladder ID
436  short int _currentSensorID; //!< Actual sensor ID
437  float _sensorThick; //!< Actual sensor - Si wafer thickness in system of units
438 
439  // Magnetic field - obtained from Gear xml file and transformed into
440  // local system
441  CLHEP::Hep3Vector _magField; //!< Magnetic field in T in detector reference system
442 
443  // Geometry parameters
444  SiStripGeom * _geometry; //!< All geometry information from Gear xml file
445 
446  // Random generator
447  CLHEP::RandGauss * _genGauss; //!< Random number generator - Gaussian distribution
448 
449  // Simulator of Landau fluctuations in Si
451 
452  // Root output
453 #ifdef ROOT_OUTPUT_LAND
454  TFile * _rootFile;
455  TTree * _tree;
456 
457  std::map<int,double> _variables; //!< Variable to be stored
458 #endif
459 
460  private:
461 
462  double _timeCPU; //!< CPU time
463  int _nRun; //!< Run number
464  int _nEvent; //!< Event number
465 
466 }; // Class
467 /** @} */
468 
469 } // Namespace
470 
471 /** @} */
472 #endif // SISTRDIGI_H
double getElecMobility(double pos)
Get method - returns ELECTRON mobility (parameters: electric intenzity in V/cm, respectively position...
double getElecDriftTime(double pos)
Get method - returns total ELECTRON drift time (parameters: electron position in cm).
double getElecDiffusivity(double pos)
Get method - returns ELECTRON diffusivity (parameters: electron mobility in cm^2/s, respectively position in cm).
double _pitchRear
Pitch in the rear sensors (in the middle)
Definition: SiStripDigi.h:425
short int _currentLadderID
Actual ladder ID.
Definition: SiStripDigi.h:435
double getHoleDriftTime(double pos)
Get method - returns total HOLE drift time (parameters: hole position in cm).
double _timeCPU
CPU time.
Definition: SiStripDigi.h:462
double _pitchFront
Pitch in the front sensors (in the middle)
Definition: SiStripDigi.h:424
double getElecVelocity(double pos)
Get method - returns ELECTRON actual velocity, calculated as follows:
virtual void init()
Method called at the beginning of data processing - used for initialization.
Definition: SiStripDigi.cc:207
void genNoise(SensorStripMap &sensorMap)
Method generating random noise using Gaussian distribution and add this effect to the final results...
Digitization hit inheritad from LCIO SimTrackerHitImpl, which naturally extends basic features of Sim...
virtual void processEvent(LCEvent *event)
Method called for each event - used for event data processing.
Definition: SiStripDigi.cc:309
void digitize(const SimTrackerDigiHit *hit, SensorStripMap &sensorMap)
Method digitizing given SimTrackerDigiHit - takes into account all relevant physical processes: landa...
Definition: SiStripDigi.cc:795
float _capBackPlane
Strip-to-backplane capacitance.
Definition: SiStripDigi.h:409
void printProcessorParams() const
Method printing processor parameters.
int _nRun
Run number.
Definition: SiStripDigi.h:463
Gear geometry class - holds all geometry information about silicon strip sensors. ...
Definition: SiStripGeom.h:59
std::map< int, StripChargeMap * > SensorStripMap
Definition: SiStripDigi.h:142
SiEnergyFluct * _fluctuate
Definition: SiStripDigi.h:450
SiStripDigi()
Constructor - set processor description and register processor parameters.
Definition: SiStripDigi.cc:68
const std::vector< std::string > ConstStringVec
Definition: SiStripClus.h:52
const std::vector< EVENT::SimTrackerHit * > ConstSimTrackerHitVec
Definition: SiStripDigi.h:138
std::vector< DigiCluster * > DigiClusterVec
Definition: SiStripDigi.h:136
virtual void processRunHeader(LCRunHeader *run)
Method called for each run - used for run header processing.
Definition: SiStripDigi.cc:288
double _prodThreshOnDeltaRays
Production threshold cut on delta electrons in keV (for Landau fluct.) - use the same as in Geant4 (8...
Definition: SiStripDigi.h:422
bool _integrationWindow
Use integration window?
Definition: SiStripDigi.h:428
CLHEP::Hep3Vector getHoleLorentzShift(double pos)
Method used for precise calculation of tan(Lorentz angle) - an angle of HOLES deflection due to magne...
std::vector< SimTrackerDigiHit * > SimTrackerDigiHitVec
Definition: SiStripDigi.h:140
void printStripsInfo(std::string info, const SensorStripMap &sensorMap) const
Method printing info about signals at each strip.
std::string _relColNamePlsToSim
LCIO relation collection name - TrkPulse (Digit) &lt;-&gt; SimTrkHit.
Definition: SiStripDigi.h:397
CLHEP::Hep3Vector _magField
Magnetic field in T in detector reference system.
Definition: SiStripDigi.h:441
float _elNoise
CMS-like (common mode subtracted) noise added to the signal.
Definition: SiStripDigi.h:411
double getElecInvVelocity(double pos)
Get method - returns actual ELECTRON inverse velocity, calculated as.
int _nEvent
Event number.
Definition: SiStripDigi.h:464
void transformSimHit(SimTrackerDigiHit *simDigiHit)
Method transforming given SimTrackerHit into local ref.
std::string _inColName
LCIO input collection name.
Definition: SiStripDigi.h:395
short int _currentSensorID
Actual sensor ID.
Definition: SiStripDigi.h:436
double _startIntegration
Start time of integration of the sensors in ns (everything before this value will not be digitized) ...
Definition: SiStripDigi.h:429
double _stopIntegration
Stop time of integration of the sensors in ns(everything after this value will not be digitized) ...
Definition: SiStripDigi.h:430
bool _floatStripsRPhi
Is every even strip floating in R-Phi?
Definition: SiStripDigi.h:412
Digitization cluster class.
Definition: DigiCluster.h:30
void printHitInfo(std::string info, const SimTrackerDigiHit *hit) const
Method printing hit info (parameter: info - extra information)
std::map< SimTrackerHit *, float > SimHitMap
Definition: SiStripDigi.h:143
float _Vdepl
Sensor depletion voltage in volts.
Definition: SiStripDigi.h:403
void calcCrossTalk(SensorStripMap &sensorMap)
Method that calculates crosstalk effect, i.e.
void calcClusters(const SimTrackerDigiHit *hit, DigiClusterVec &hClusterVec)
Method that calculates e-h clusters, where clusters are worked out from the hits (simulated in Geant ...
Definition: SiStripDigi.cc:995
void printClustersInfo(std::string info, const DigiClusterVec &clusterVec) const
Method printing clusters info (parameter: info - extra information)
float _temp
Sensor temperature in Kelvins.
Definition: SiStripDigi.h:405
short int _currentLayerID
Actual layer ID.
Definition: SiStripDigi.h:434
float _epsTime
Relative digi precision in Drift time.
Definition: SiStripDigi.h:417
CLHEP::RandGauss * _genGauss
Random number generator - Gaussian distribution.
Definition: SiStripDigi.h:447
SiStripGeom * _geometry
All geometry information from Gear xml file.
Definition: SiStripDigi.h:444
virtual void check(LCEvent *event)
Method called after each event - used for data checking.
Definition: SiStripDigi.cc:739
bool _floatStripsZ
Is every even strip floating in Z?
Definition: SiStripDigi.h:413
std::vector< EVENT::SimTrackerHit * > SimTrackerHitVec
Definition: SiStripDigi.h:139
CLHEP::Hep3Vector getElecLorentzShift(double posZ)
Method used for precise calculation of tan(Lorentz angle) - an angle of ELECTRON deflection due to ma...
float _sensorThick
Actual sensor - Si wafer thickness in system of units.
Definition: SiStripDigi.h:437
bool _landauFluct
Define if internal Landau fluctuations (instead of Geant4) used.
Definition: SiStripDigi.h:420
std::queue< std::string > StringQue
Definition: SiStripClus.h:57
int _currentCellID
Actual layer+ladder+sensor ID encoded into one number.
Definition: SiStripDigi.h:433
double getHoleInvVelocity(double pos)
Get method - returns actual HOLE inverse velocity, calculated as follows:
std::vector< LCCollection * > LCCollectionVec
Definition: SiStripClus.h:55
Special class providing particle energy loss fluctuations in Si material (Landau fluctuations).
Definition: SiEnergyFluct.h:63
float _landauBetaGammaCut
Below this beta*gamma factor internal Landau fluctuations not used.
Definition: SiStripDigi.h:421
std::string _outColName
LCIO output collection name.
Definition: SiStripDigi.h:396
void printClusterInfo(const DigiCluster &cluster) const
Method printing cluster info.
double getHoleVelocity(double pos)
Get method - returns HOLE actual velocity, calculated as follows:
virtual Processor * newProcessor()
Method that returns a new instance of this processor.
Definition: SiStripDigi.h:158
std::map< int, Signal * > StripChargeMap
Definition: SiStripDigi.h:141
float _Vbias
Sensor bias voltage in volts.
Definition: SiStripDigi.h:404
std::string _subdetector
Definition: SiStripDigi.h:401
double getEField(double pos)
Get method - returns electric intensity (parameters: position X in cm).
float _epsAngle
Relative digi precision in Lorentz angle.
Definition: SiStripDigi.h:416
float _capCoupl
AC coupling - capacitance.
Definition: SiStripDigi.h:410
double getHoleMobility(double pos)
Get method - returns HOLE mobility (parameters: electric intenzity in V/cm, respectively position X i...
float _epsSpace
Absolute digi precision in space in um.
Definition: SiStripDigi.h:415
bool _electronicEffects
Add crosstalk + noise?
Definition: SiStripDigi.h:407
double getHoleDiffusivity(double pos)
Get method - returns HOLE diffusivity (parameters: hole mobility in cm^2/s, respectively position in ...
virtual void end()
Method called after all data processing.
Definition: SiStripDigi.cc:746
float _capInterStrip
Mutual interstrip capacitance.
Definition: SiStripDigi.h:408
std::vector< std::string > StringVec
Definition: SiStripClus.h:56