#include <SiLinearChargeCollectionDrifter.h>
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 &) |
Private Attributes | |
double | appliedVoltage |
double | chargeDistributionRMS |
double | depletionVoltage |
double | diffusionConstant |
double | moduleThickness |
double | timeNormalisation |
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.
SiLinearChargeCollectionDrifter::SiLinearChargeCollectionDrifter | ( | double | dc, |
double | cdr, | ||
double | dv, | ||
double | av | ||
) |
Definition at line 3 of file SiLinearChargeCollectionDrifter.cc.
References appliedVoltage, chargeDistributionRMS, depletionVoltage, and diffusionConstant.
{ // Everything which does not depend on the specific det diffusionConstant = dc; chargeDistributionRMS = cdr; depletionVoltage = dv; appliedVoltage = av; }
SiChargeCollectionDrifter::collection_type SiLinearChargeCollectionDrifter::drift | ( | const SiChargeCollectionDrifter::ionization_type | ion, |
const LocalVector & | driftDir, | ||
double | mt, | ||
double | tn | ||
) | [virtual] |
Implements SiChargeCollectionDrifter.
Definition at line 14 of file SiLinearChargeCollectionDrifter.cc.
References i, moduleThickness, and timeNormalisation.
{ // set some variables used in the main method moduleThickness = mt; timeNormalisation = tn; // 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); } return _temp; }
SignalPoint SiLinearChargeCollectionDrifter::drift | ( | const EnergyDepositUnit & | edu, |
const LocalVector & | drift | ||
) | [private] |
Definition at line 30 of file SiLinearChargeCollectionDrifter.cc.
References EnergyDepositUnit::energy(), funct::log(), mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), EnergyDepositUnit::x(), PV3DBase< T, PVType, FrameType >::y(), EnergyDepositUnit::y(), PV3DBase< T, PVType, FrameType >::z(), 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()); }
double SiLinearChargeCollectionDrifter::appliedVoltage [private] |
Definition at line 25 of file SiLinearChargeCollectionDrifter.h.
Referenced by SiLinearChargeCollectionDrifter().
double SiLinearChargeCollectionDrifter::chargeDistributionRMS [private] |
Definition at line 23 of file SiLinearChargeCollectionDrifter.h.
Referenced by SiLinearChargeCollectionDrifter().
double SiLinearChargeCollectionDrifter::depletionVoltage [private] |
Definition at line 24 of file SiLinearChargeCollectionDrifter.h.
Referenced by SiLinearChargeCollectionDrifter().
double SiLinearChargeCollectionDrifter::diffusionConstant [private] |
Definition at line 22 of file SiLinearChargeCollectionDrifter.h.
Referenced by SiLinearChargeCollectionDrifter().
double SiLinearChargeCollectionDrifter::moduleThickness [private] |
Definition at line 20 of file SiLinearChargeCollectionDrifter.h.
Referenced by drift().
double SiLinearChargeCollectionDrifter::timeNormalisation [private] |
Definition at line 21 of file SiLinearChargeCollectionDrifter.h.
Referenced by drift().