CMS 3D CMS Logo

EnergyLossSimulator.cc
Go to the documentation of this file.
2 //#include "FastSimulation/Utilities/interface/RandomEngine.h"
4 
5 #include <cmath>
6 
7 EnergyLossSimulator::EnergyLossSimulator(double A, double Z, double density, double radLen)
10 }
11 
13 
15  // FamosHistos* myHistos = FamosHistos::instance();
16 
17  // double gamma_e = 0.577215664901532861; // Euler constant
18 
19  // The thickness in cm
20  double thick = radLengths * radLenIncm();
21 
22  // This is a simple version (a la PDG) of a dE/dx generator.
23  // It replaces the buggy GEANT3 -> C++ former version.
24  // Author : Patrick Janot - 8-Jan-2004
25 
26  double p2 = Particle.particle().Vect().Mag2();
27  double verySmallP2 = 0.0001;
28  if (p2 <= verySmallP2) {
29  deltaP.SetXYZT(0., 0., 0., 0.);
30  return;
31  }
32  double m2 = Particle.particle().mass() * Particle.particle().mass();
33  double e2 = p2 + m2;
34 
35  double beta2 = p2 / e2;
36  double gama2 = e2 / m2;
37 
38  double charge2 = Particle.particle().charge() * Particle.particle().charge();
39 
40  // Energy loss spread in GeV
41  double eSpread = 0.1536E-3 * charge2 * (theZ() / theA()) * rho() * thick / beta2;
42 
43  // Most probable energy loss (from the integrated Bethe-Bloch equation)
44  mostProbableLoss = eSpread * (log(2. * eMass() * beta2 * gama2 * eSpread / (excitE() * excitE())) - beta2 + 0.200);
45 
46  // This one can be needed on output (but is not used internally)
47  // meanEnergyLoss = 2.*eSpread * ( log ( 2.*eMass()*beta2*gama2 /excitE() ) - beta2 );
48 
49  // Generate the energy loss with Landau fluctuations
50  double dedx = mostProbableLoss + eSpread * theGenerator->landau(random);
51 
52  // Compute the new energy and momentum
53  double aBitAboveMass = Particle.particle().mass() * 1.0001;
54  double newE = std::max(aBitAboveMass, Particle.particle().e() - dedx);
55  // double newE = std::max(Particle.particle().mass(),Particle.particle().e()-dedx);
56  double fac = std::sqrt((newE * newE - m2) / p2);
57 
58  // Update the momentum
59  deltaP.SetXYZT(Particle.particle().Px() * (1. - fac),
60  Particle.particle().Py() * (1. - fac),
61  Particle.particle().Pz() * (1. - fac),
62  Particle.particle().E() - newE);
63  Particle.particle().setMomentum(
64  Particle.particle().Px() * fac, Particle.particle().Py() * fac, Particle.particle().Pz() * fac, newE);
65 }
EnergyLossSimulator::mostProbableLoss
double mostProbableLoss
The most probable enery loss.
Definition: EnergyLossSimulator.h:47
EnergyLossSimulator.h
MaterialEffectsSimulator::rho
double rho() const
Density in g/cm3.
Definition: MaterialEffectsSimulator.h:42
EnergyLossSimulator::deltaP
XYZTLorentzVector deltaP
The actual energy loss.
Definition: EnergyLossSimulator.h:50
MaterialEffectsSimulator::theZ
double theZ() const
Z.
Definition: MaterialEffectsSimulator.h:40
EnergyLossSimulator::compute
void compute(ParticlePropagator &Particle, RandomEngineAndDistribution const *) override
The real dE/dx generation and particle update.
Definition: EnergyLossSimulator.cc:14
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
p2
double p2[4]
Definition: TauolaWrapper.h:90
fastSimProducer_cff.radLen
radLen
Definition: fastSimProducer_cff.py:62
MaterialEffectsSimulator
Definition: MaterialEffectsSimulator.h:25
MaterialEffectsSimulator::radLengths
double radLengths
Definition: MaterialEffectsSimulator.h:84
MaterialEffectsSimulator::excitE
double excitE() const
Mean excitation energy (in GeV)
Definition: MaterialEffectsSimulator.h:46
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
MaterialEffectsSimulator::theA
double theA() const
A.
Definition: MaterialEffectsSimulator.h:38
A
ParticlePropagator
Definition: ParticlePropagator.h:28
LandauFluctuationGenerator::landau
double landau(RandomEngineAndDistribution const *random) const
Random generator of the dE/dX spread (Landau function)
Definition: LandauFluctuationGenerator.h:29
MaterialEffectsSimulator::eMass
double eMass() const
Electron mass in GeV/c2.
Definition: MaterialEffectsSimulator.h:48
EnergyLossSimulator::~EnergyLossSimulator
~EnergyLossSimulator() override
Default Destructor.
Definition: EnergyLossSimulator.cc:12
EnergyLossSimulator::EnergyLossSimulator
EnergyLossSimulator(double A, double Z, double density, double radLen)
Constructor.
Definition: EnergyLossSimulator.cc:7
LandauFluctuationGenerator.h
Particle
Definition: Particle.py:1
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
BeamSpotPI::Z
Definition: BeamSpotPayloadInspectorHelper.h:32
EnergyLossSimulator::theGenerator
LandauFluctuationGenerator * theGenerator
The Landau Fluctuation generator.
Definition: EnergyLossSimulator.h:41
LandauFluctuationGenerator
Definition: LandauFluctuationGenerator.h:20
fastSimProducer_cff.density
density
Definition: fastSimProducer_cff.py:61
MaterialEffectsSimulator::radLenIncm
double radLenIncm() const
One radiation length in cm.
Definition: MaterialEffectsSimulator.h:44
RandomEngineAndDistribution
Definition: RandomEngineAndDistribution.h:18