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]

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.

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

Referenced by drift().

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 }
SiChargeCollectionDrifter::collection_type drift(const SiChargeCollectionDrifter::ionization_type &, const LocalVector &, double, double) override
std::vector< SignalPoint > collection_type

◆ drift() [2/2]

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

Definition at line 23 of file SiLinearChargeCollectionDrifter.cc.

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

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 }
SiChargeCollectionDrifter::collection_type drift(const SiChargeCollectionDrifter::ionization_type &, const LocalVector &, double, double) override
T sqrt(T t)
Definition: SSEVec.h:23
float energy() const

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