Main Page
Namespaces
Classes
Package Documentation
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
30
// constructor
31
SiLinearChargeDivider
(
const
edm::ParameterSet
& conf);
32
33
// destructor
34
~
SiLinearChargeDivider
()
override
;
35
36
// main method: divide the charge (from the PSimHit) into several energy deposits in the bulk
37
SiChargeDivider::ionization_type
divide
(
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
50
const
ParticleDataTable
*
theParticleDataTable
;
51
52
// Geant4 engine used by fluctuateEloss()
53
std::unique_ptr<SiG4UniversalFluctuation>
fluctuate
;
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(
double
const
particleMass,
float
momentum,
float
eloss,
float
length,
int
NumberOfSegmentation,
float
elossVector[], CLHEP::HepRandomEngine*);
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
const
peakValues[921];
70
// data table for pulse shape in deconvolution mode
71
static
float
const
decoValues[651];
72
73
};
74
75
#endif
SiChargeDivider
Definition:
SiChargeDivider.h:19
SiLinearChargeDivider::theParticleDataTable
const ParticleDataTable * theParticleDataTable
Definition:
SiLinearChargeDivider.h:50
ParticleDataTable
HepPDT::ParticleDataTable ParticleDataTable
Definition:
ParticleDataTable.h:8
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:38
SiLinearChargeDivider::cosmicShift
const double cosmicShift
Definition:
SiLinearChargeDivider.h:48
python.rootplot.rootmath.divide
def divide(outfile, dest, numer, denom)
Definition:
rootmath.py:291
SiLinearChargeDivider::TimeResponse
float TimeResponse(const PSimHit *hit, const StripGeomDetUnit &det)
Definition:
SiLinearChargeDivider.h:61
SiLinearChargeDivider
Definition:
SiLinearChargeDivider.h:27
SiLinearChargeDivider::driftXPos
float driftXPos(const Local3DPoint &pos, const LocalVector &drift, double thickness)
Definition:
SiLinearChargeDivider.h:55
SiChargeDivider.h
StripGeomDetUnit
Definition:
StripGeomDetUnit.h:15
ParameterSet.h
CLHEP
Definition:
CocoaGlobals.h:27
ParticleDataTable.h
StripTopology.h
SiLinearChargeDivider::fluctuateCharge
const bool fluctuateCharge
Definition:
SiLinearChargeDivider.h:45
PV3DBase::z
T z() const
Definition:
PV3DBase.h:64
SiG4UniversalFluctuation.h
SiChargeDivider::ionization_type
std::vector< EnergyDepositUnit > ionization_type
Definition:
SiChargeDivider.h:21
pos
Definition:
PixelAliasList.h:14
SiLinearChargeDivider::fluctuate
std::unique_ptr< SiG4UniversalFluctuation > fluctuate
Definition:
SiLinearChargeDivider.h:53
SiLinearChargeDivider::deltaCut
const double deltaCut
Definition:
SiLinearChargeDivider.h:47
PSimHit.h
StripGeomDetUnit.h
hit
Definition:
SiStripHitEffFromCalibTree.cc:86
Point3DBase< float, LocalTag >
SiLinearChargeDivider::chargedivisionsPerStrip
const int chargedivisionsPerStrip
Definition:
SiLinearChargeDivider.h:46
PSimHit
Definition:
PSimHit.h:15
edm::ParameterSet
Definition:
ParameterSet.h:36
PV3DBase::x
T x() const
Definition:
PV3DBase.h:62
SiLinearChargeDivider::peakMode
const bool peakMode
Definition:
SiLinearChargeDivider.h:44
Generated for CMSSW Reference Manual by
1.8.11