8 double A,
double Z,
double density,
double radLen) :
37 double p2 = Particle.Vect().Mag2();
38 double verySmallP2 = 0.0001;
39 if (p2<=verySmallP2) {
40 deltaP.SetXYZT(0.,0.,0.,0.);
43 double m2 = Particle.
mass() * Particle.
mass();
52 double eSpread = 0.1536E-3*charge2*(
theZ()/
theA())*
rho()*thick/beta2;
66 double aBitAboveMass = Particle.
mass()*1.0001;
67 double newE =
std::max(aBitAboveMass,Particle.e()-dedx);
69 double fac =
std::sqrt((newE*newE-m2)/p2);
73 deltaP.SetXYZT(Particle.Px()*(1.-fac),Particle.Py()*(1.-fac),
74 Particle.Pz()*(1.-fac),Particle.E()-newE);
75 Particle.SetXYZT(Particle.Px()*fac,Particle.Py()*fac,
76 Particle.Pz()*fac,newE);
const double Z[kNumberCalorimeter]
EnergyLossSimulator(const RandomEngine *engine, double A, double Z, double density, double radLen)
Constructor.
void compute(ParticlePropagator &Particle)
The real dE/dx generation and particle update.
double rho() const
Density in g/cm3.
double mass() const
get the MEASURED mass
double mostProbableLoss
The most probable enery loss.
double landau() const
Random generator of the dE/dX spread (Landau function)
const T & max(const T &a, const T &b)
double eMass() const
Electron mass in GeV/c2.
double charge() const
get the MEASURED charge
~EnergyLossSimulator()
Default Destructor.
LandauFluctuationGenerator * theGenerator
The Landau Fluctuation generator.
Log< T >::type log(const T &t)
double excitE() const
Mean excitation energy (in GeV)
double radLenIncm() const
One radiation length in cm.
XYZTLorentzVector deltaP
The actual energy loss.