CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

SiLinearChargeCollectionDrifter Class Reference

#include <SiLinearChargeCollectionDrifter.h>

Inheritance diagram for SiLinearChargeCollectionDrifter:
SiChargeCollectionDrifter

List of all members.

Public Member Functions

SiChargeCollectionDrifter::collection_type drift (const SiChargeCollectionDrifter::ionization_type, const LocalVector &, double, double)
 SiLinearChargeCollectionDrifter (double, double, double, double)

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

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 ( double  dc,
double  cdr,
double  dv,
double  av 
)

Definition at line 3 of file SiLinearChargeCollectionDrifter.cc.

                                                                            :
  // Everything which does not depend on the specific det
  diffusionConstant(dc),
  chargeDistributionRMS(cdr),
  depletionVoltage(dv),
  appliedVoltage(av)
{
}

Member Function Documentation

SiChargeCollectionDrifter::collection_type SiLinearChargeCollectionDrifter::drift ( const SiChargeCollectionDrifter::ionization_type  ion,
const LocalVector &  driftDir,
double  mt,
double  tn 
) [virtual]

Implements SiChargeCollectionDrifter.

Definition at line 15 of file SiLinearChargeCollectionDrifter.cc.

References linker::i.

                                                                                                                                    {
  // prepare output
  collection_type _temp;
  _temp.resize(ion.size());
  // call the drift method for each deposit
  for (size_t i=0; i<ion.size(); i++){
    _temp[i] = drift(ion[i], driftDir, mt, tn);
  }
  return _temp;
}
SignalPoint SiLinearChargeCollectionDrifter::drift ( const EnergyDepositUnit edu,
const LocalVector &  drift,
double  moduleThickness,
double  timeNormalisation 
) [private]

Definition at line 28 of file SiLinearChargeCollectionDrifter.cc.

References EnergyDepositUnit::energy(), EnergyDepositUnit::x(), EnergyDepositUnit::y(), and EnergyDepositUnit::z().

                                                                                                           {
  // computes the fraction of the module the charge has to drift through,
  // ensuring it is bounded in [0,1]
  double depth = (moduleThickness/2.-edu.z());
  double thicknessFraction = depth/moduleThickness ; 
  thicknessFraction = thicknessFraction>0. ? thicknessFraction : 0. ;
  thicknessFraction = thicknessFraction<1. ? thicknessFraction : 1. ;
  
  // computes the drift time in the sensor
  double driftTime = -timeNormalisation*
    log(1.-2*depletionVoltage*thicknessFraction/
        (depletionVoltage+appliedVoltage))
    +chargeDistributionRMS;  
  
  // returns the signal: an energy on the surface, with a size due to diffusion.
  return SignalPoint(edu.x() + depth*drift.x()/drift.z(),
                     edu.y() + depth*drift.y()/drift.z(),
                     sqrt(2.*diffusionConstant*driftTime),
                     edu.energy());
}

Member Data Documentation

Definition at line 23 of file SiLinearChargeCollectionDrifter.h.

Definition at line 21 of file SiLinearChargeCollectionDrifter.h.

Definition at line 22 of file SiLinearChargeCollectionDrifter.h.

Definition at line 20 of file SiLinearChargeCollectionDrifter.h.