All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
sistrip::SiStripDigi Class Reference

#include <SiStripDigi.h>

Inheritance diagram for sistrip::SiStripDigi:
[legend]

Public Member Functions

virtual ProcessornewProcessor ()
 Method that returns a new instance of this processor. More...
 
 SiStripDigi ()
 Constructor - set processor description and register processor parameters. More...
 
virtual void init ()
 Method called at the beginning of data processing - used for initialization. More...
 
virtual void processRunHeader (LCRunHeader *run)
 Method called for each run - used for run header processing. More...
 
virtual void processEvent (LCEvent *event)
 Method called for each event - used for event data processing. More...
 
virtual void check (LCEvent *event)
 Method called after each event - used for data checking. More...
 
virtual void end ()
 Method called after all data processing. More...
 

Protected Member Functions

void digitize (const SimTrackerDigiHit *hit, SensorStripMap &sensorMap)
 Method digitizing given SimTrackerDigiHit - takes into account all relevant physical processes: landau fluctuations, drift, diffusion, Lorentz shift in magnetic field (input parameter: a pointer to digitized hit, output. More...
 
void calcClusters (const SimTrackerDigiHit *hit, DigiClusterVec &hClusterVec)
 Method that calculates e-h clusters, where clusters are worked out from the hits (simulated in Geant 4 and transformed into local reference system) using predefined space precision. More...
 
void calcCrossTalk (SensorStripMap &sensorMap)
 Method that calculates crosstalk effect, i.e. More...
 
void genNoise (SensorStripMap &sensorMap)
 Method generating random noise using Gaussian distribution and add this effect to the final results. More...
 
void transformSimHit (SimTrackerDigiHit *simDigiHit)
 Method transforming given SimTrackerHit into local ref. More...
 
double getElecDiffusivity (double pos)
 Get method - returns ELECTRON diffusivity (parameters: electron mobility in cm^2/s, respectively position in cm). More...
 
double getHoleDiffusivity (double pos)
 Get method - returns HOLE diffusivity (parameters: hole mobility in cm^2/s, respectively position in cm). More...
 
double getElecDriftTime (double pos)
 Get method - returns total ELECTRON drift time (parameters: electron position in cm). More...
 
double getHoleDriftTime (double pos)
 Get method - returns total HOLE drift time (parameters: hole position in cm). More...
 
double getEField (double pos)
 Get method - returns electric intensity (parameters: position X in cm). More...
 
double getElecMobility (double pos)
 Get method - returns ELECTRON mobility (parameters: electric intenzity in V/cm, respectively position X in cm). More...
 
double getHoleMobility (double pos)
 Get method - returns HOLE mobility (parameters: electric intenzity in V/cm, respectively position X in cm). More...
 
CLHEP::Hep3Vector getElecLorentzShift (double posZ)
 Method used for precise calculation of tan(Lorentz angle) - an angle of ELECTRON deflection due to magnetic field. More...
 
CLHEP::Hep3Vector getHoleLorentzShift (double pos)
 Method used for precise calculation of tan(Lorentz angle) - an angle of HOLES deflection due to magnetic field. More...
 
double getElecVelocity (double pos)
 Get method - returns ELECTRON actual velocity, calculated as follows: More...
 
double getElecInvVelocity (double pos)
 Get method - returns actual ELECTRON inverse velocity, calculated as. More...
 
double getHoleVelocity (double pos)
 Get method - returns HOLE actual velocity, calculated as follows: More...
 
double getHoleInvVelocity (double pos)
 Get method - returns actual HOLE inverse velocity, calculated as follows: More...
 
void printClusterInfo (const DigiCluster &cluster) const
 Method printing cluster info. More...
 
void printClustersInfo (std::string info, const DigiClusterVec &clusterVec) const
 Method printing clusters info (parameter: info - extra information) More...
 
void printHitInfo (std::string info, const SimTrackerDigiHit *hit) const
 Method printing hit info (parameter: info - extra information) More...
 
void printProcessorParams () const
 Method printing processor parameters. More...
 
void printStripsInfo (std::string info, const SensorStripMap &sensorMap) const
 Method printing info about signals at each strip. More...
 

Protected Attributes

std::string _inColName
 LCIO input collection name. More...
 
std::string _outColName
 LCIO output collection name. More...
 
std::string _relColNamePlsToSim
 LCIO relation collection name - TrkPulse (Digit) <-> SimTrkHit. More...
 
std::string _subdetector
 
float _Vdepl
 Sensor depletion voltage in volts. More...
 
float _Vbias
 Sensor bias voltage in volts. More...
 
float _temp
 Sensor temperature in Kelvins. More...
 
bool _electronicEffects
 Add crosstalk + noise? More...
 
float _capInterStrip
 Mutual interstrip capacitance. More...
 
float _capBackPlane
 Strip-to-backplane capacitance. More...
 
float _capCoupl
 AC coupling - capacitance. More...
 
float _elNoise
 CMS-like (common mode subtracted) noise added to the signal. More...
 
bool _floatStripsRPhi
 Is every even strip floating in R-Phi? More...
 
bool _floatStripsZ
 Is every even strip floating in Z? More...
 
float _epsSpace
 Absolute digi precision in space in um. More...
 
float _epsAngle
 Relative digi precision in Lorentz angle. More...
 
float _epsTime
 Relative digi precision in Drift time. More...
 
bool _landauFluct
 Define if internal Landau fluctuations (instead of Geant4) used. More...
 
float _landauBetaGammaCut
 Below this beta*gamma factor internal Landau fluctuations not used. More...
 
double _prodThreshOnDeltaRays
 Production threshold cut on delta electrons in keV (for Landau fluct.) - use the same as in Geant4 (80keV ~ 0.05 mm) More...
 
double _pitchFront
 Pitch in the front sensors (in the middle) More...
 
double _pitchRear
 Pitch in the rear sensors (in the middle) More...
 
bool _integrationWindow
 Use integration window? More...
 
double _startIntegration
 Start time of integration of the sensors in ns (everything before this value will not be digitized) More...
 
double _stopIntegration
 Stop time of integration of the sensors in ns(everything after this value will not be digitized) More...
 
int _currentCellID
 Actual layer+ladder+sensor ID encoded into one number. More...
 
short int _currentLayerID
 Actual layer ID. More...
 
short int _currentLadderID
 Actual ladder ID. More...
 
short int _currentSensorID
 Actual sensor ID. More...
 
float _sensorThick
 Actual sensor - Si wafer thickness in system of units. More...
 
CLHEP::Hep3Vector _magField
 Magnetic field in T in detector reference system. More...
 
SiStripGeom_geometry
 All geometry information from Gear xml file. More...
 
CLHEP::RandGauss * _genGauss
 Random number generator - Gaussian distribution. More...
 
SiEnergyFluct_fluctuate
 

Private Attributes

double _timeCPU
 CPU time. More...
 
int _nRun
 Run number. More...
 
int _nEvent
 Event number. More...
 

Detailed Description

Definition at line 154 of file SiStripDigi.h.

Constructor & Destructor Documentation

sistrip::SiStripDigi::SiStripDigi ( )

Constructor - set processor description and register processor parameters.

Definition at line 68 of file SiStripDigi.cc.

Member Function Documentation

void sistrip::SiStripDigi::calcClusters ( const SimTrackerDigiHit hit,
DigiClusterVec hClusterVec 
)
protected

Method that calculates e-h clusters, where clusters are worked out from the hits (simulated in Geant 4 and transformed into local reference system) using predefined space precision.

As the precision might be different from a precision in Geant 4, the Landau fluctuations are performed here too, using internal Landau fluctuator. Required parameters: a pointer to SimTrackerDigiHit and two vectors of pointers to electron, resp. hole clusters (pairs) )

Definition at line 995 of file SiStripDigi.cc.

void sistrip::SiStripDigi::calcCrossTalk ( SensorStripMap sensorMap)
protected

Method that calculates crosstalk effect, i.e.

each total charge is redistributed according the following relation: Q_neigh = Q_centr * C_inter/(C_inter + C_back + C_coupl), where neigh denotes neighbouring, centr central, inter interstrip, back strip2backplane and coupl coupling.

Definition at line 1100 of file SiStripDigi.cc.

void sistrip::SiStripDigi::check ( LCEvent *  event)
virtual

Method called after each event - used for data checking.

Definition at line 739 of file SiStripDigi.cc.

void sistrip::SiStripDigi::digitize ( const SimTrackerDigiHit hit,
SensorStripMap sensorMap 
)
protected

Method digitizing given SimTrackerDigiHit - takes into account all relevant physical processes: landau fluctuations, drift, diffusion, Lorentz shift in magnetic field (input parameter: a pointer to digitized hit, output.

parameter: a sensor map of strips with total integrated charge and time when particle crossed the sensor)

Definition at line 795 of file SiStripDigi.cc.

void sistrip::SiStripDigi::end ( )
virtual

Method called after all data processing.

Definition at line 746 of file SiStripDigi.cc.

void sistrip::SiStripDigi::genNoise ( SensorStripMap sensorMap)
protected

Method generating random noise using Gaussian distribution and add this effect to the final results.

Definition at line 1255 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getEField ( double  pos)
protected

Get method - returns electric intensity (parameters: position X in cm).

The intensity is calculated using analytically expressible relation between electron, resp. hole, position and electric field, derived for simple abrupt p-n junction with depletion voltage Vd and bias voltage Vb.

Relation:

   E(x) = -(Vb+Vd/d - 2*x/d^2*Vd) in V/cm

Where d represents sensor thickness.

Definition at line 1444 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getElecDiffusivity ( double  pos)
protected

Get method - returns ELECTRON diffusivity (parameters: electron mobility in cm^2/s, respectively position in cm).

The diffusivity is calculated according to the Einstein relation:

   D = k*temp/e * mobil(E(x),temp) in cm^2/s

Where k represents Boltzmann constant and e an elementary charge.

Definition at line 1365 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getElecDriftTime ( double  pos)
protected

Get method - returns total ELECTRON drift time (parameters: electron position in cm).

The total time is obtained as a numerical solution of following equation of motion:

   dx/dt = v = mobil(E(x), temp) * E(x)    Int(x0,d){1/(mobility(E(x), temp) * E(x)) * dx} = t    Int(x0,d){1/v(E(x), temp) * dx} = t

Where mobil represents electron mobility, d sensor thickness, which corresponds to sensor back side (DSSDs - back strip side), i.e. the one with high voltage set; and v to electron actual velocity.

Definition at line 1387 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getElecInvVelocity ( double  pos)
protected

Get method - returns actual ELECTRON inverse velocity, calculated as.

follows:    dt/dx = v^-1 = 1/(mobil(E(x), temp) * E(x))

Where E corresponds to elec. intenzity a mobil to electron mobility. (parameters: electron position in cm)

Definition at line 1580 of file SiStripDigi.cc.

Hep3Vector sistrip::SiStripDigi::getElecLorentzShift ( double  posZ)
protected

Method used for precise calculation of tan(Lorentz angle) - an angle of ELECTRON deflection due to magnetic field.

(parameters: position z in cm). The Lorentz angle calculation utilizes so-called Romberg integration method, quite fast and reasonably precise method. The precision of the calculation is set via variable: _epsAngle by a user.

Relation:

   tan(thetaL) = Int(x,d){mobil(E(z))*r*B*dz}/Int(z,d){dz}    shiftX = -Int(x,d){mobil(E(z))*r*By*dz}    shiftY = Int(x,d){mobil(E(z))*r*Bx*dz}

Where r = 1.13 + 0.0008*(temp-273) represents Hall scattering factor for electrons and d sensor thickness, corresponding to sensor back side.

Definition at line 1501 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getElecMobility ( double  pos)
protected

Get method - returns ELECTRON mobility (parameters: electric intenzity in V/cm, respectively position X in cm).

For the region where the mobility is dependent on the electric field, applied along <111> direction, following parametrization can be used:

   mobil = vm/Ec * 1/(1 + (E(x)/Ec)^beta)^(1/beta) in cm^2/V.s

   vm = 1.53*10^9*temp^(-0.87) cm/s    Ec = 1.01*temp^(1.55) V/cm    beta = 2.57*10^(-2)*temp(0.66)

For more details about parametrization see: A review of some charge transport properties of silicon by C.Jacobini et. al. (Solid-State Electronics, 1977, Vol. 20, p. 77-89)

Definition at line 1462 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getElecVelocity ( double  pos)
protected

Get method - returns ELECTRON actual velocity, calculated as follows:

   dz/dt = v = mobil(E(x), temp) * E(x)

Where E corresponds to elec. intenzity a mobil to electron mobility. (parameters: electron position in cm)

Definition at line 1572 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getHoleDiffusivity ( double  pos)
protected

Get method - returns HOLE diffusivity (parameters: hole mobility in cm^2/s, respectively position in cm).

The diffusivity is calculated according to the Einstein relation:

   D = k*temp/e * mobil(E(x),temp) in cm^2/s

Where k represents Boltzmann constant and e an elementary charge.

Definition at line 1376 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getHoleDriftTime ( double  pos)
protected

Get method - returns total HOLE drift time (parameters: hole position in cm).

The total time is obtained as a numerical solution of following equation of motion:

   dx/dt = v = mobil(E(x), temp) * E(x)    Int(x0,0){1/(mobility(E(x), temp) * E(x))*dx} = t    Int(x0,0){1/v(E(x), temp) * dx} = t

Where mobil represents hole mobility, 0 corresponds to sensor strip side (with high voltage set to 0) and v to hole actual velocity.

Definition at line 1415 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getHoleInvVelocity ( double  pos)
protected

Get method - returns actual HOLE inverse velocity, calculated as follows:

   dt/dx = v^-1 = 1/(mobil(E(x), temp) * E(x))

Where E corresponds to elec. intenzity a mobil to hole mobility. (parameters: hole position in cm)

Definition at line 1596 of file SiStripDigi.cc.

Hep3Vector sistrip::SiStripDigi::getHoleLorentzShift ( double  pos)
protected

Method used for precise calculation of tan(Lorentz angle) - an angle of HOLES deflection due to magnetic field.

(parameters: position z in cm). The Lorentz angle calculation utilizes so-called Romberg integration method, quite fast and reasonably precise method. The precision of the calculation is set via variable: _epsAngle by a user.

Relation:

   tan(thetaL) = Int(z,0){mobil(E(z))*r*B*dz}/Int(z,0){dz}

Where r = 0.72 - 0.0005*(temp-273) represents Hall scattering factor for holes and 0 corresponds to sensor strip side.

Definition at line 1538 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getHoleMobility ( double  pos)
protected

Get method - returns HOLE mobility (parameters: electric intenzity in V/cm, respectively position X in cm).

For the region where the mobility is dependent on the electric field, applied along <111> direction, following parametrization can be used:

   mobil = vm/Ec * 1/(1 + (E(x)/Ec)^beta)^(1/beta) in cm^2/V.s

   vm = 1.62*10^8*temp^(-0.52) cm/s    Ec = 1.24*temp^(1.68) V/cm    beta = 0.46*temp(0.17)

For more details about parametrization see: A review of some charge transport properties of silicon by C.Jacobini et. al. (Solid-State Electronics, 1977, Vol. 20, p. 77-89)

Definition at line 1479 of file SiStripDigi.cc.

double sistrip::SiStripDigi::getHoleVelocity ( double  pos)
protected

Get method - returns HOLE actual velocity, calculated as follows:

   dx/dt = v = mobil(E(x), temp) * E(x)

Where E corresponds to elec. intenzity a mobil to hole mobility. (parameters: hole position in cm)

Definition at line 1588 of file SiStripDigi.cc.

void sistrip::SiStripDigi::init ( )
virtual

Method called at the beginning of data processing - used for initialization.

Definition at line 207 of file SiStripDigi.cc.

virtual Processor* sistrip::SiStripDigi::newProcessor ( )
inlinevirtual

Method that returns a new instance of this processor.

Definition at line 158 of file SiStripDigi.h.

void sistrip::SiStripDigi::printClusterInfo ( const DigiCluster cluster) const
protected

Method printing cluster info.

Definition at line 1607 of file SiStripDigi.cc.

void sistrip::SiStripDigi::printClustersInfo ( std::string  info,
const DigiClusterVec clusterVec 
) const
protected

Method printing clusters info (parameter: info - extra information)

Definition at line 1626 of file SiStripDigi.cc.

void sistrip::SiStripDigi::printHitInfo ( std::string  info,
const SimTrackerDigiHit hit 
) const
protected

Method printing hit info (parameter: info - extra information)

Definition at line 1639 of file SiStripDigi.cc.

void sistrip::SiStripDigi::printProcessorParams ( ) const
protected

Method printing processor parameters.

Definition at line 1662 of file SiStripDigi.cc.

void sistrip::SiStripDigi::printStripsInfo ( std::string  info,
const SensorStripMap sensorMap 
) const
protected

Method printing info about signals at each strip.

Definition at line 1709 of file SiStripDigi.cc.

void sistrip::SiStripDigi::processEvent ( LCEvent *  event)
virtual

Method called for each event - used for event data processing.

Definition at line 309 of file SiStripDigi.cc.

void sistrip::SiStripDigi::processRunHeader ( LCRunHeader *  run)
virtual

Method called for each run - used for run header processing.

Definition at line 288 of file SiStripDigi.cc.

void sistrip::SiStripDigi::transformSimHit ( SimTrackerDigiHit simDigiHit)
protected

Method transforming given SimTrackerHit into local ref.

system of each sensor, resp. wafer, where the center is positioned such as x, y and z coordinates are always positive and x is in direction of thickness.

Definition at line 1294 of file SiStripDigi.cc.

Member Data Documentation

float sistrip::SiStripDigi::_capBackPlane
protected

Strip-to-backplane capacitance.

Definition at line 409 of file SiStripDigi.h.

float sistrip::SiStripDigi::_capCoupl
protected

AC coupling - capacitance.

Definition at line 410 of file SiStripDigi.h.

float sistrip::SiStripDigi::_capInterStrip
protected

Mutual interstrip capacitance.

Definition at line 408 of file SiStripDigi.h.

int sistrip::SiStripDigi::_currentCellID
protected

Actual layer+ladder+sensor ID encoded into one number.

Definition at line 433 of file SiStripDigi.h.

short int sistrip::SiStripDigi::_currentLadderID
protected

Actual ladder ID.

Definition at line 435 of file SiStripDigi.h.

short int sistrip::SiStripDigi::_currentLayerID
protected

Actual layer ID.

Definition at line 434 of file SiStripDigi.h.

short int sistrip::SiStripDigi::_currentSensorID
protected

Actual sensor ID.

Definition at line 436 of file SiStripDigi.h.

bool sistrip::SiStripDigi::_electronicEffects
protected

Add crosstalk + noise?

Definition at line 407 of file SiStripDigi.h.

float sistrip::SiStripDigi::_elNoise
protected

CMS-like (common mode subtracted) noise added to the signal.

Definition at line 411 of file SiStripDigi.h.

float sistrip::SiStripDigi::_epsAngle
protected

Relative digi precision in Lorentz angle.

Definition at line 416 of file SiStripDigi.h.

float sistrip::SiStripDigi::_epsSpace
protected

Absolute digi precision in space in um.

Definition at line 415 of file SiStripDigi.h.

float sistrip::SiStripDigi::_epsTime
protected

Relative digi precision in Drift time.

Definition at line 417 of file SiStripDigi.h.

bool sistrip::SiStripDigi::_floatStripsRPhi
protected

Is every even strip floating in R-Phi?

Definition at line 412 of file SiStripDigi.h.

bool sistrip::SiStripDigi::_floatStripsZ
protected

Is every even strip floating in Z?

Definition at line 413 of file SiStripDigi.h.

SiEnergyFluct* sistrip::SiStripDigi::_fluctuate
protected

Definition at line 450 of file SiStripDigi.h.

CLHEP::RandGauss* sistrip::SiStripDigi::_genGauss
protected

Random number generator - Gaussian distribution.

Definition at line 447 of file SiStripDigi.h.

SiStripGeom* sistrip::SiStripDigi::_geometry
protected

All geometry information from Gear xml file.

Definition at line 444 of file SiStripDigi.h.

std::string sistrip::SiStripDigi::_inColName
protected

LCIO input collection name.

Definition at line 395 of file SiStripDigi.h.

bool sistrip::SiStripDigi::_integrationWindow
protected

Use integration window?

Definition at line 428 of file SiStripDigi.h.

float sistrip::SiStripDigi::_landauBetaGammaCut
protected

Below this beta*gamma factor internal Landau fluctuations not used.

Definition at line 421 of file SiStripDigi.h.

bool sistrip::SiStripDigi::_landauFluct
protected

Define if internal Landau fluctuations (instead of Geant4) used.

Definition at line 420 of file SiStripDigi.h.

CLHEP::Hep3Vector sistrip::SiStripDigi::_magField
protected

Magnetic field in T in detector reference system.

Definition at line 441 of file SiStripDigi.h.

int sistrip::SiStripDigi::_nEvent
private

Event number.

Definition at line 464 of file SiStripDigi.h.

int sistrip::SiStripDigi::_nRun
private

Run number.

Definition at line 463 of file SiStripDigi.h.

std::string sistrip::SiStripDigi::_outColName
protected

LCIO output collection name.

Definition at line 396 of file SiStripDigi.h.

double sistrip::SiStripDigi::_pitchFront
protected

Pitch in the front sensors (in the middle)

Definition at line 424 of file SiStripDigi.h.

double sistrip::SiStripDigi::_pitchRear
protected

Pitch in the rear sensors (in the middle)

Definition at line 425 of file SiStripDigi.h.

double sistrip::SiStripDigi::_prodThreshOnDeltaRays
protected

Production threshold cut on delta electrons in keV (for Landau fluct.) - use the same as in Geant4 (80keV ~ 0.05 mm)

Definition at line 422 of file SiStripDigi.h.

std::string sistrip::SiStripDigi::_relColNamePlsToSim
protected

LCIO relation collection name - TrkPulse (Digit) <-> SimTrkHit.

Definition at line 397 of file SiStripDigi.h.

float sistrip::SiStripDigi::_sensorThick
protected

Actual sensor - Si wafer thickness in system of units.

Definition at line 437 of file SiStripDigi.h.

double sistrip::SiStripDigi::_startIntegration
protected

Start time of integration of the sensors in ns (everything before this value will not be digitized)

Definition at line 429 of file SiStripDigi.h.

double sistrip::SiStripDigi::_stopIntegration
protected

Stop time of integration of the sensors in ns(everything after this value will not be digitized)

Definition at line 430 of file SiStripDigi.h.

std::string sistrip::SiStripDigi::_subdetector
protected

Definition at line 401 of file SiStripDigi.h.

float sistrip::SiStripDigi::_temp
protected

Sensor temperature in Kelvins.

Definition at line 405 of file SiStripDigi.h.

double sistrip::SiStripDigi::_timeCPU
private

CPU time.

Definition at line 462 of file SiStripDigi.h.

float sistrip::SiStripDigi::_Vbias
protected

Sensor bias voltage in volts.

Definition at line 404 of file SiStripDigi.h.

float sistrip::SiStripDigi::_Vdepl
protected

Sensor depletion voltage in volts.

Definition at line 403 of file SiStripDigi.h.


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