CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
SiLinearChargeCollectionDrifter Class Reference

#include <SiLinearChargeCollectionDrifter.h>

Inheritance diagram for SiLinearChargeCollectionDrifter:
SiChargeCollectionDrifter

Public Member Functions

SiChargeCollectionDrifter::collection_type drift (const SiChargeCollectionDrifter::ionization_type &, const LocalVector &, double, double) override
 
 SiLinearChargeCollectionDrifter (double, double, double, double)
 
- Public Member Functions inherited from SiChargeCollectionDrifter
virtual ~SiChargeCollectionDrifter ()
 

Private Member Functions

SignalPoint drift (const EnergyDepositUnit &, const LocalVector &, double, double)
 

Private Attributes

const double appliedVoltage
 
const double chargeDistributionRMS
 
const double depletionVoltage
 
const double diffusionConstant
 

Additional Inherited Members

- Public Types inherited from SiChargeCollectionDrifter
typedef std::vector< SignalPointcollection_type
 
typedef std::vector< EnergyDepositUnitionization_type
 

Detailed Description

Concrete implementation of SiChargeCollectionDrifter. Drifts the charges linearly. Drift each energy deposits in the bulk to the surface.
The resulting position depends on the Lorentz angle, and a sigma is computed
that describes the diffusion.

Definition at line 12 of file SiLinearChargeCollectionDrifter.h.

Constructor & Destructor Documentation

◆ SiLinearChargeCollectionDrifter()

SiLinearChargeCollectionDrifter::SiLinearChargeCollectionDrifter ( double  dc,
double  cdr,
double  dv,
double  av 
)

Definition at line 4 of file SiLinearChargeCollectionDrifter.cc.

5  : // Everything which does not depend on the specific det
9  appliedVoltage(av) {}

Member Function Documentation

◆ drift() [1/2]

SignalPoint SiLinearChargeCollectionDrifter::drift ( const EnergyDepositUnit edu,
const LocalVector drift,
double  moduleThickness,
double  timeNormalisation 
)
private

Definition at line 23 of file SiLinearChargeCollectionDrifter.cc.

26  {
27  // computes the fraction of the module the charge has to drift through,
28  // ensuring it is bounded in [0,1]
29  double depth = (moduleThickness / 2. - edu.z());
30  double thicknessFraction = depth / moduleThickness;
31  thicknessFraction = thicknessFraction > 0. ? thicknessFraction : 0.;
32  thicknessFraction = thicknessFraction < 1. ? thicknessFraction : 1.;
33 
34  // computes the drift time in the sensor
35  double driftTime = -timeNormalisation * vdt::fast_log(1. - 2 * depletionVoltage * thicknessFraction /
38 
39  // returns the signal: an energy on the surface, with a size due to diffusion.
40  return SignalPoint(edu.x() + depth * drift.x() / drift.z(),
41  edu.y() + depth * drift.y() / drift.z(),
42  sqrt(2. * diffusionConstant * driftTime),
43  edu.energy());
44 }

References appliedVoltage, chargeDistributionRMS, depletionVoltage, LEDCalibrationChannels::depth, diffusionConstant, drift(), EnergyDepositUnit::energy(), mathSSE::sqrt(), EnergyDepositUnit::x(), EnergyDepositUnit::y(), and EnergyDepositUnit::z().

◆ drift() [2/2]

SiChargeCollectionDrifter::collection_type SiLinearChargeCollectionDrifter::drift ( const SiChargeCollectionDrifter::ionization_type ion,
const LocalVector driftDir,
double  mt,
double  tn 
)
overridevirtual

Implements SiChargeCollectionDrifter.

Definition at line 11 of file SiLinearChargeCollectionDrifter.cc.

12  {
13  // prepare output
14  collection_type _temp;
15  _temp.resize(ion.size());
16  // call the drift method for each deposit
17  for (size_t i = 0; i < ion.size(); i++) {
18  _temp[i] = drift(ion[i], driftDir, mt, tn);
19  }
20  return _temp;
21 }

References mps_fire::i, and TtSemiLepEvtBuilder_cfi::mt.

Referenced by drift().

Member Data Documentation

◆ appliedVoltage

const double SiLinearChargeCollectionDrifter::appliedVoltage
private

Definition at line 27 of file SiLinearChargeCollectionDrifter.h.

Referenced by drift().

◆ chargeDistributionRMS

const double SiLinearChargeCollectionDrifter::chargeDistributionRMS
private

Definition at line 25 of file SiLinearChargeCollectionDrifter.h.

Referenced by drift().

◆ depletionVoltage

const double SiLinearChargeCollectionDrifter::depletionVoltage
private

Definition at line 26 of file SiLinearChargeCollectionDrifter.h.

Referenced by drift().

◆ diffusionConstant

const double SiLinearChargeCollectionDrifter::diffusionConstant
private

Definition at line 24 of file SiLinearChargeCollectionDrifter.h.

Referenced by drift().

mps_fire.i
i
Definition: mps_fire.py:355
SiLinearChargeCollectionDrifter::appliedVoltage
const double appliedVoltage
Definition: SiLinearChargeCollectionDrifter.h:27
EnergyDepositUnit::z
float z() const
Definition: EnergyDepositUnit.h:17
EnergyDepositUnit::x
float x() const
Definition: EnergyDepositUnit.h:15
SiLinearChargeCollectionDrifter::depletionVoltage
const double depletionVoltage
Definition: SiLinearChargeCollectionDrifter.h:26
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
SiLinearChargeCollectionDrifter::chargeDistributionRMS
const double chargeDistributionRMS
Definition: SiLinearChargeCollectionDrifter.h:25
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
SiLinearChargeCollectionDrifter::drift
SiChargeCollectionDrifter::collection_type drift(const SiChargeCollectionDrifter::ionization_type &, const LocalVector &, double, double) override
Definition: SiLinearChargeCollectionDrifter.cc:11
SignalPoint
Definition: SignalPoint.h:11
SiChargeCollectionDrifter::collection_type
std::vector< SignalPoint > collection_type
Definition: SiChargeCollectionDrifter.h:14
EnergyDepositUnit::energy
float energy() const
Definition: EnergyDepositUnit.h:18
TtSemiLepEvtBuilder_cfi.mt
mt
Definition: TtSemiLepEvtBuilder_cfi.py:47
SiLinearChargeCollectionDrifter::diffusionConstant
const double diffusionConstant
Definition: SiLinearChargeCollectionDrifter.h:24
EnergyDepositUnit::y
float y() const
Definition: EnergyDepositUnit.h:16