CMS 3D CMS Logo

SiHitDigitizer.cc
Go to the documentation of this file.
1 #include "SiHitDigitizer.h"
5 
10 
11 //#define CBOLTZ (1.38E-23)
12 //#define e_SI (1.6E-19)
13 static const double CBOLTZ_over_e_SI = 1.38E-23 / 1.6E-19;
14 static const double noDiffusionMultiplier = 1.0e-3;
15 
17  : depletionVoltage(conf.getParameter<double>("DepletionVoltage")),
18  chargeMobility(conf.getParameter<double>("ChargeMobility")),
19  theSiChargeDivider(new SiLinearChargeDivider(conf)),
20  theSiChargeCollectionDrifter(new SiLinearChargeCollectionDrifter(
21  CBOLTZ_over_e_SI * chargeMobility * conf.getParameter<double>("Temperature") *
22  (conf.getParameter<bool>("noDiffusion") ? noDiffusionMultiplier : 1.0),
23  conf.getParameter<double>("ChargeDistributionRMS"),
24  depletionVoltage,
25  conf.getParameter<double>("AppliedVoltage"))),
26  theSiInduceChargeOnStrips(new SiTrivialInduceChargeOnStrips(conf, conf.getParameter<double>("GevPerElectron"))) {}
27 
29 
31  const StripGeomDetUnit& det,
32  GlobalVector bfield,
33  float langle,
34  std::vector<float>& locAmpl,
35  size_t& firstChannelWithSignal,
36  size_t& lastChannelWithSignal,
37  const TrackerTopology* tTopo,
38  CLHEP::HepRandomEngine* engine) {
39  // Compute the drift direction for this det
40  double moduleThickness = det.specificSurface().bounds().thickness(); // active detector thicness
41  double timeNormalisation = (moduleThickness * moduleThickness) / (2. * depletionVoltage * chargeMobility);
42  LocalVector driftDir = DriftDirection(&det, bfield, langle);
43 
44  // Fully process one SimHit
46  theSiChargeCollectionDrifter->drift(theSiChargeDivider->divide(hit, driftDir, moduleThickness, det, engine),
47  driftDir,
48  moduleThickness,
49  timeNormalisation),
50  det,
51  locAmpl,
52  firstChannelWithSignal,
53  lastChannelWithSignal,
54  tTopo);
55 }
LocalVector DriftDirection(const StripGeomDetUnit *_detp, GlobalVector _bfield, float langle)
const double chargeMobility
const double depletionVoltage
SiHitDigitizer(const edm::ParameterSet &conf)
virtual float thickness() const =0
static const double noDiffusionMultiplier
void processHit(const PSimHit *, const StripGeomDetUnit &, GlobalVector, float, std::vector< float > &, size_t &, size_t &, const TrackerTopology *tTopo, CLHEP::HepRandomEngine *)
static const double CBOLTZ_over_e_SI
std::unique_ptr< const SiInduceChargeOnStrips > theSiInduceChargeOnStrips
std::unique_ptr< SiChargeCollectionDrifter > theSiChargeCollectionDrifter
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
Definition: GeomDet.h:40
std::unique_ptr< SiChargeDivider > theSiChargeDivider
const Bounds & bounds() const
Definition: Surface.h:87