CMS 3D CMS Logo

SiLinearChargeDivider.h
Go to the documentation of this file.
1 #ifndef Tracker_SiLinearChargeDivider_H
2 #define Tracker_SiLinearChargeDivider_H
3 
4 #include <memory>
5 
7 
8 #include "SiChargeDivider.h"
13 
15 
16 namespace CLHEP {
17  class HepRandomEngine;
18 }
19 
28 public:
29  // constructor
31 
32  // destructor
33  ~SiLinearChargeDivider() override;
34 
35  // main method: divide the charge (from the PSimHit) into several energy deposits in the bulk
37  const PSimHit*, const LocalVector&, double, const StripGeomDetUnit& det, CLHEP::HepRandomEngine*) override;
38 
39  // set the ParticleDataTable (used to fluctuate the charge properly)
40  void setParticleDataTable(const ParticleDataTable* pdt) override { theParticleDataTable = pdt; }
41 
42 private:
43  // configuration data
44  const bool peakMode;
45  const bool fluctuateCharge;
47  const double deltaCut;
48  const double cosmicShift;
51  unsigned int pulset0Idx;
52  std::vector<double> pulseValues;
53 
54  // Geant4 engine used by fluctuateEloss()
55  std::unique_ptr<SiG4UniversalFluctuation> fluctuate;
56  // utility: drifts the charge to the surface to estimate the number of relevant strips
57  inline float driftXPos(const Local3DPoint& pos, const LocalVector& drift, double thickness) {
58  return pos.x() + (thickness / 2. - pos.z()) * drift.x() / drift.z();
59  }
60  // fluctuate the Eloss
61  void fluctuateEloss(double const particleMass,
62  float momentum,
63  float eloss,
64  float length,
65  int NumberOfSegmentation,
66  float elossVector[],
67  CLHEP::HepRandomEngine*);
68  // time response (from the pulse shape)
69  float TimeResponse(const PSimHit* hit, const StripGeomDetUnit& det);
70  void readPulseShape(const std::string& pulseShapeFileName);
71 };
72 
73 #endif
Vector3DBase< float, LocalTag >
SiLinearChargeDivider::SiLinearChargeDivider
SiLinearChargeDivider(const edm::ParameterSet &conf)
Definition: SiLinearChargeDivider.cc:9
StripGeomDetUnit.h
SiLinearChargeDivider::theParticleDataTable
const ParticleDataTable * theParticleDataTable
Definition: SiLinearChargeDivider.h:49
SiChargeDivider.h
SiLinearChargeDivider
Definition: SiLinearChargeDivider.h:27
SiLinearChargeDivider::fluctuate
std::unique_ptr< SiG4UniversalFluctuation > fluctuate
Definition: SiLinearChargeDivider.h:55
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
SiLinearChargeDivider::cosmicShift
const double cosmicShift
Definition: SiLinearChargeDivider.h:48
pos
Definition: PixelAliasList.h:18
StripTopology.h
SiLinearChargeDivider::pulset0Idx
unsigned int pulset0Idx
Definition: SiLinearChargeDivider.h:51
SiLinearChargeDivider::~SiLinearChargeDivider
~SiLinearChargeDivider() override
Definition: SiLinearChargeDivider.cc:31
SiLinearChargeDivider::deltaCut
const double deltaCut
Definition: SiLinearChargeDivider.h:47
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
SiG4UniversalFluctuation.h
shallow::drift
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
Definition: ShallowTools.cc:36
SiLinearChargeDivider::divide
SiChargeDivider::ionization_type divide(const PSimHit *, const LocalVector &, double, const StripGeomDetUnit &det, CLHEP::HepRandomEngine *) override
Definition: SiLinearChargeDivider.cc:71
SiLinearChargeDivider::peakMode
const bool peakMode
Definition: SiLinearChargeDivider.h:44
PSimHit.h
Calorimetry_cff.thickness
thickness
Definition: Calorimetry_cff.py:114
SiLinearChargeDivider::fluctuateCharge
const bool fluctuateCharge
Definition: SiLinearChargeDivider.h:45
Point3DBase< float, LocalTag >
CLHEP
Definition: CocoaGlobals.h:27
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ParameterSet
Definition: ParameterSet.h:36
SiLinearChargeDivider::chargedivisionsPerStrip
const int chargedivisionsPerStrip
Definition: SiLinearChargeDivider.h:46
ParticleDataTable.h
SiLinearChargeDivider::driftXPos
float driftXPos(const Local3DPoint &pos, const LocalVector &drift, double thickness)
Definition: SiLinearChargeDivider.h:57
SiLinearChargeDivider::readPulseShape
void readPulseShape(const std::string &pulseShapeFileName)
Definition: SiLinearChargeDivider.cc:33
SiChargeDivider::ionization_type
std::vector< EnergyDepositUnit > ionization_type
Definition: SiChargeDivider.h:21
SiLinearChargeDivider::pulseResolution
double pulseResolution
Definition: SiLinearChargeDivider.h:50
SiLinearChargeDivider::fluctuateEloss
void fluctuateEloss(double const particleMass, float momentum, float eloss, float length, int NumberOfSegmentation, float elossVector[], CLHEP::HepRandomEngine *)
Definition: SiLinearChargeDivider.cc:142
SiLinearChargeDivider::pulseValues
std::vector< double > pulseValues
Definition: SiLinearChargeDivider.h:52
SiLinearChargeDivider::setParticleDataTable
void setParticleDataTable(const ParticleDataTable *pdt) override
Definition: SiLinearChargeDivider.h:40
SiLinearChargeDivider::TimeResponse
float TimeResponse(const PSimHit *hit, const StripGeomDetUnit &det)
Definition: SiLinearChargeDivider.cc:178
ParameterSet.h
PSimHit
Definition: PSimHit.h:15
ParticleDataTable
HepPDT::ParticleDataTable ParticleDataTable
Definition: ParticleDataTable.h:8
hit
Definition: SiStripHitEffFromCalibTree.cc:88
SiChargeDivider
Definition: SiChargeDivider.h:19
StripGeomDetUnit
Definition: StripGeomDetUnit.h:15