CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiLinearChargeDivider.h
Go to the documentation of this file.
1 #ifndef Tracker_SiLinearChargeDivider_H
2 #define Tracker_SiLinearChargeDivider_H
3 
5 
11 
13 
14 namespace CLHEP{
15  class HepRandomEngine;
16 }
17 
26  public:
27 
28  // constructor
29  SiLinearChargeDivider(const edm::ParameterSet& conf, CLHEP::HepRandomEngine&);
30 
31  // destructor
32  virtual ~SiLinearChargeDivider();
33 
34  // main method: divide the charge (from the PSimHit) into several energy deposits in the bulk
36 
37  // set the ParticleDataTable (used to fluctuate the charge properly)
39 
40  private:
41  // configuration
43  // configuration data
44  bool peakMode;
47  double deltaCut ;
48  double cosmicShift;
50  // Geant4 engine used by fluctuateEloss()
52  // random generator
53  CLHEP::HepRandomEngine& rndEngine;
54  // utility: drifts the charge to the surface to estimate the number of relevant strips
55  inline float driftXPos(const Local3DPoint& pos, const LocalVector& drift, double thickness) {
56  return pos.x()+(thickness/2.-pos.z())*drift.x()/drift.z();
57  }
58  // fluctuate the Eloss
59  void fluctuateEloss(int particleId, float momentum, float eloss, float length, int NumberOfSegmentation, float elossVector[]);
60  // time response (from the pulse shape)
61  inline float TimeResponse( const PSimHit* hit, const StripGeomDetUnit& det) {
62  return (peakMode ? PeakShape(hit,det) : DeconvolutionShape(hit,det));
63  }
64  // pulse shape in peak mode
65  float PeakShape(const PSimHit*, const StripGeomDetUnit& det);
66  // pulse shape in deconvolution mode
67  float DeconvolutionShape( const PSimHit*, const StripGeomDetUnit& det);
68  // data table for pulse shape in peak mode
69  static float peakValues[921];
70  // data table for pulse shape in deconvolution mode
71  static float decoValues[651];
72 
73 };
74 
75 #endif
const ParticleDataTable * theParticleDataTable
HepPDT::ParticleDataTable ParticleDataTable
CLHEP::HepRandomEngine & rndEngine
float PeakShape(const PSimHit *, const StripGeomDetUnit &det)
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
Definition: ShallowTools.cc:39
void setParticleDataTable(const ParticleDataTable *pdt)
float TimeResponse(const PSimHit *hit, const StripGeomDetUnit &det)
float driftXPos(const Local3DPoint &pos, const LocalVector &drift, double thickness)
SiChargeDivider::ionization_type divide(const PSimHit *, const LocalVector &, double, const StripGeomDetUnit &det)
SiLinearChargeDivider(const edm::ParameterSet &conf, CLHEP::HepRandomEngine &)
T z() const
Definition: PV3DBase.h:63
static float decoValues[651]
float DeconvolutionShape(const PSimHit *, const StripGeomDetUnit &det)
std::vector< EnergyDepositUnit > ionization_type
tuple conf
Definition: dbtoconf.py:185
static float peakValues[921]
void fluctuateEloss(int particleId, float momentum, float eloss, float length, int NumberOfSegmentation, float elossVector[])
SiG4UniversalFluctuation * fluctuate
T x() const
Definition: PV3DBase.h:61