src
SimTracker
SiStripDigitizer
plugins
SiLinearChargeDivider.h
Go to the documentation of this file.
1
#ifndef Tracker_SiLinearChargeDivider_H
2
#define Tracker_SiLinearChargeDivider_H
3
4
#include <memory>
5
6
#include "
FWCore/ParameterSet/interface/ParameterSet.h
"
7
8
#include "
SiChargeDivider.h
"
9
#include "
SimTracker/Common/interface/SiG4UniversalFluctuation.h
"
10
#include "
SimDataFormats/TrackingHit/interface/PSimHit.h
"
11
#include "
Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h
"
12
#include "
Geometry/CommonTopologies/interface/StripTopology.h
"
13
14
#include "
SimGeneral/HepPDTRecord/interface/ParticleDataTable.h
"
15
16
namespace
CLHEP
{
17
class
HepRandomEngine;
18
}
19
27
class
SiLinearChargeDivider
:
public
SiChargeDivider
{
28
public
:
29
// constructor
30
SiLinearChargeDivider
(
const
edm::ParameterSet
& conf);
31
32
// destructor
33
~SiLinearChargeDivider
()
override
;
34
35
// main method: divide the charge (from the PSimHit) into several energy deposits in the bulk
36
SiChargeDivider::ionization_type
divide
(
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
;
46
const
int
chargedivisionsPerStrip
;
47
const
double
deltaCut
;
48
const
double
cosmicShift
;
49
const
ParticleDataTable
*
theParticleDataTable
;
50
double
pulseResolution
;
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
SiChargeDivider
Definition:
SiChargeDivider.h:19
SiLinearChargeDivider::pulseResolution
double pulseResolution
Definition:
SiLinearChargeDivider.h:50
SiLinearChargeDivider::theParticleDataTable
const ParticleDataTable * theParticleDataTable
Definition:
SiLinearChargeDivider.h:49
ParticleDataTable
HepPDT::ParticleDataTable ParticleDataTable
Definition:
ParticleDataTable.h:8
PV3DBase::z
T z() const
Definition:
PV3DBase.h:61
Vector3DBase< float, LocalTag >
SiLinearChargeDivider::setParticleDataTable
void setParticleDataTable(const ParticleDataTable *pdt) override
Definition:
SiLinearChargeDivider.h:40
shallow::drift
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
Definition:
ShallowTools.cc:36
SiLinearChargeDivider::cosmicShift
const double cosmicShift
Definition:
SiLinearChargeDivider.h:48
SiLinearChargeDivider::TimeResponse
float TimeResponse(const PSimHit *hit, const StripGeomDetUnit &det)
Definition:
SiLinearChargeDivider.cc:178
SiLinearChargeDivider
Definition:
SiLinearChargeDivider.h:27
SiLinearChargeDivider::SiLinearChargeDivider
SiLinearChargeDivider(const edm::ParameterSet &conf)
Definition:
SiLinearChargeDivider.cc:9
SiLinearChargeDivider::driftXPos
float driftXPos(const Local3DPoint &pos, const LocalVector &drift, double thickness)
Definition:
SiLinearChargeDivider.h:57
SiLinearChargeDivider::fluctuateEloss
void fluctuateEloss(double const particleMass, float momentum, float eloss, float length, int NumberOfSegmentation, float elossVector[], CLHEP::HepRandomEngine *)
Definition:
SiLinearChargeDivider.cc:142
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition:
AlCaHLTBitMon_QueryRunRegistry.py:256
SiChargeDivider.h
StripGeomDetUnit
Definition:
StripGeomDetUnit.h:15
ParameterSet.h
CLHEP
Definition:
CocoaGlobals.h:27
ParticleDataTable.h
PV3DBase::x
T x() const
Definition:
PV3DBase.h:59
StripTopology.h
SiLinearChargeDivider::fluctuateCharge
const bool fluctuateCharge
Definition:
SiLinearChargeDivider.h:45
SiLinearChargeDivider::~SiLinearChargeDivider
~SiLinearChargeDivider() override
Definition:
SiLinearChargeDivider.cc:31
SiG4UniversalFluctuation.h
pos
Definition:
PixelCalibBase.h:13
ppsPixelTopologyESSourceRun2_cfi.thickness
thickness
Definition:
ppsPixelTopologyESSourceRun2_cfi.py:7
SiLinearChargeDivider::fluctuate
std::unique_ptr< SiG4UniversalFluctuation > fluctuate
Definition:
SiLinearChargeDivider.h:55
SiLinearChargeDivider::deltaCut
const double deltaCut
Definition:
SiLinearChargeDivider.h:47
PSimHit.h
StripGeomDetUnit.h
SiLinearChargeDivider::readPulseShape
void readPulseShape(const std::string &pulseShapeFileName)
Definition:
SiLinearChargeDivider.cc:33
hit
Definition:
SiStripHitEffFromCalibTree.cc:87
Point3DBase< float, LocalTag >
SiLinearChargeDivider::chargedivisionsPerStrip
const int chargedivisionsPerStrip
Definition:
SiLinearChargeDivider.h:46
PSimHit
Definition:
PSimHit.h:15
edm::ParameterSet
Definition:
ParameterSet.h:48
SiChargeDivider::ionization_type
std::vector< EnergyDepositUnit > ionization_type
Definition:
SiChargeDivider.h:21
SiLinearChargeDivider::divide
SiChargeDivider::ionization_type divide(const PSimHit *, const LocalVector &, double, const StripGeomDetUnit &det, CLHEP::HepRandomEngine *) override
Definition:
SiLinearChargeDivider.cc:71
SiLinearChargeDivider::pulseValues
std::vector< double > pulseValues
Definition:
SiLinearChargeDivider.h:52
SiLinearChargeDivider::pulset0Idx
unsigned int pulset0Idx
Definition:
SiLinearChargeDivider.h:51
SiLinearChargeDivider::peakMode
const bool peakMode
Definition:
SiLinearChargeDivider.h:44
Generated for CMSSW Reference Manual by
1.8.14