CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
EnergyLossSimulator Class Reference

#include <EnergyLossSimulator.h>

Inheritance diagram for EnergyLossSimulator:
MaterialEffectsSimulator

Public Member Functions

const XYZTLorentzVectordeltaMom () const
 Returns the actual energy lost. More...
 
 EnergyLossSimulator (double A, double Z, double density, double radLen)
 Constructor. More...
 
double mostLikelyLoss () const
 Return most probable energy loss. More...
 
 ~EnergyLossSimulator () override
 Default Destructor. More...
 
- Public Member Functions inherited from MaterialEffectsSimulator
RHEP_const_iter beginDaughters () const
 Returns const iterator to the beginning of the daughters list. More...
 
int closestDaughterId ()
 The id of the closest charged daughter (filled for nuclear interactions only) More...
 
double eMass () const
 Electron mass in GeV/c2. More...
 
RHEP_const_iter endDaughters () const
 Returns const iterator to the end of the daughters list. More...
 
double excitE () const
 Mean excitation energy (in GeV) More...
 
 MaterialEffectsSimulator (double A=28.0855, double Z=14.0000, double density=2.329, double radLen=9.360)
 
unsigned nDaughters () const
 Returns the number of daughters. More...
 
XYZVector orthogonal (const XYZVector &) const
 A vector orthogonal to another one (because it's not in XYZTLorentzVector) More...
 
double radLenIncm () const
 One radiation length in cm. More...
 
double rho () const
 Density in g/cm3. More...
 
virtual void save ()
 Used by NuclearInteractionSimulator to save last sampled event. More...
 
void setNormalVector (const GlobalVector &normal)
 Sets the vector normal to the surface traversed. More...
 
double theA () const
 A. More...
 
double theZ () const
 Z. More...
 
void updateState (ParticlePropagator &myTrack, double radlen, RandomEngineAndDistribution const *)
 Compute the material effect (calls the sub class) More...
 
virtual ~MaterialEffectsSimulator ()
 

Private Member Functions

void compute (ParticlePropagator &Particle, RandomEngineAndDistribution const *) override
 The real dE/dx generation and particle update. More...
 

Private Attributes

XYZTLorentzVector deltaP
 The actual energy loss. More...
 
double mostProbableLoss
 The most probable enery loss. More...
 
LandauFluctuationGeneratortheGenerator
 The Landau Fluctuation generator. More...
 

Additional Inherited Members

- Public Types inherited from MaterialEffectsSimulator
typedef std::vector< RawParticle >::const_iterator RHEP_const_iter
 
- Protected Attributes inherited from MaterialEffectsSimulator
std::vector< RawParticle_theUpdatedState
 
double A
 
double density
 
double radLen
 
double radLengths
 
int theClosestChargedDaughterId
 
GlobalVector theNormalVector
 
double Z
 

Detailed Description

Definition at line 26 of file EnergyLossSimulator.h.

Constructor & Destructor Documentation

EnergyLossSimulator::EnergyLossSimulator ( double  A,
double  Z,
double  density,
double  radLen 
)

Constructor.

Definition at line 7 of file EnergyLossSimulator.cc.

References theGenerator.

7  :
9 {
11 }
MaterialEffectsSimulator(double A=28.0855, double Z=14.0000, double density=2.329, double radLen=9.360)
LandauFluctuationGenerator * theGenerator
The Landau Fluctuation generator.
EnergyLossSimulator::~EnergyLossSimulator ( )
override

Default Destructor.

Definition at line 13 of file EnergyLossSimulator.cc.

References theGenerator.

13  {
14 
15  delete theGenerator;
16 
17 }
LandauFluctuationGenerator * theGenerator
The Landau Fluctuation generator.

Member Function Documentation

void EnergyLossSimulator::compute ( ParticlePropagator Particle,
RandomEngineAndDistribution const *  random 
)
overrideprivatevirtual

The real dE/dx generation and particle update.

Implements MaterialEffectsSimulator.

Definition at line 20 of file EnergyLossSimulator.cc.

References RawParticle::charge(), deltaP, RawParticle::e(), RawParticle::E(), MaterialEffectsSimulator::eMass(), MaterialEffectsSimulator::excitE(), LandauFluctuationGenerator::landau(), cmsBatch::log, RawParticle::mass(), SiStripPI::max, mostProbableLoss, p2, BaseParticlePropagator::particle(), RawParticle::Px(), RawParticle::Py(), RawParticle::Pz(), MaterialEffectsSimulator::radLengths, MaterialEffectsSimulator::radLenIncm(), MaterialEffectsSimulator::rho(), RawParticle::setMomentum(), mathSSE::sqrt(), MaterialEffectsSimulator::theA(), theGenerator, MaterialEffectsSimulator::theZ(), and RawParticle::Vect().

21 {
22 
23  // FamosHistos* myHistos = FamosHistos::instance();
24 
25  // double gamma_e = 0.577215664901532861; // Euler constant
26 
27  // The thickness in cm
28  double thick = radLengths * radLenIncm();
29 
30  // This is a simple version (a la PDG) of a dE/dx generator.
31  // It replaces the buggy GEANT3 -> C++ former version.
32  // Author : Patrick Janot - 8-Jan-2004
33 
34  double p2 = Particle.particle().Vect().Mag2();
35  double verySmallP2 = 0.0001;
36  if (p2<=verySmallP2) {
37  deltaP.SetXYZT(0.,0.,0.,0.);
38  return;
39  }
40  double m2 = Particle.particle().mass() * Particle.particle().mass();
41  double e2 = p2+m2;
42 
43  double beta2 = p2/e2;
44  double gama2 = e2/m2;
45 
46  double charge2 = Particle.particle().charge() * Particle.particle().charge();
47 
48  // Energy loss spread in GeV
49  double eSpread = 0.1536E-3*charge2*(theZ()/theA())*rho()*thick/beta2;
50 
51  // Most probable energy loss (from the integrated Bethe-Bloch equation)
52  mostProbableLoss = eSpread * ( log ( 2.*eMass()*beta2*gama2*eSpread
53  / (excitE()*excitE()) )
54  - beta2 + 0.200 );
55 
56  // This one can be needed on output (but is not used internally)
57  // meanEnergyLoss = 2.*eSpread * ( log ( 2.*eMass()*beta2*gama2 /excitE() ) - beta2 );
58 
59  // Generate the energy loss with Landau fluctuations
60  double dedx = mostProbableLoss + eSpread * theGenerator->landau(random);
61 
62  // Compute the new energy and momentum
63  double aBitAboveMass = Particle.particle().mass()*1.0001;
64  double newE = std::max(aBitAboveMass,Particle.particle().e()-dedx);
65  // double newE = std::max(Particle.particle().mass(),Particle.particle().e()-dedx);
66  double fac = std::sqrt((newE*newE-m2)/p2);
67 
68 
69  // Update the momentum
70  deltaP.SetXYZT(Particle.particle().Px()*(1.-fac),Particle.particle().Py()*(1.-fac),
71  Particle.particle().Pz()*(1.-fac),Particle.particle().E()-newE);
72  Particle.particle().setMomentum(Particle.particle().Px()*fac,Particle.particle().Py()*fac,
73  Particle.particle().Pz()*fac,newE);
74 
75 }
void setMomentum(const XYZTLorentzVector &vtx)
set the momentum
Definition: RawParticle.h:347
XYZVector Vect() const
the momentum threevector
Definition: RawParticle.h:342
double rho() const
Density in g/cm3.
TRandom random
Definition: MVATrainer.cc:138
RawParticle const & particle() const
The particle being propagated.
double mass() const
get the MEASURED mass
Definition: RawParticle.h:314
double mostProbableLoss
The most probable enery loss.
double e() const
energy of the momentum
Definition: RawParticle.h:324
T sqrt(T t)
Definition: SSEVec.h:18
double Py() const
y of the momentum
Definition: RawParticle.h:319
double eMass() const
Electron mass in GeV/c2.
double Pz() const
z of the momentum
Definition: RawParticle.h:322
double charge() const
get the MEASURED charge
Definition: RawParticle.h:313
double p2[4]
Definition: TauolaWrapper.h:90
LandauFluctuationGenerator * theGenerator
The Landau Fluctuation generator.
double landau(RandomEngineAndDistribution const *random) const
Random generator of the dE/dX spread (Landau function)
double excitE() const
Mean excitation energy (in GeV)
double Px() const
x of the momentum
Definition: RawParticle.h:316
double radLenIncm() const
One radiation length in cm.
double E() const
energy of the momentum
Definition: RawParticle.h:325
XYZTLorentzVector deltaP
The actual energy loss.
const XYZTLorentzVector& EnergyLossSimulator::deltaMom ( ) const
inline

Returns the actual energy lost.

Definition at line 40 of file EnergyLossSimulator.h.

References deltaP.

Referenced by MuonSimHitProducer::applyMaterialEffects(), and CalorimetryManager::MuonMipSimulation().

40 { return deltaP; }
XYZTLorentzVector deltaP
The actual energy loss.
double EnergyLossSimulator::mostLikelyLoss ( ) const
inline

Return most probable energy loss.

Definition at line 37 of file EnergyLossSimulator.h.

References mostProbableLoss.

Referenced by MuonSimHitProducer::applyMaterialEffects().

37 { return mostProbableLoss; }
double mostProbableLoss
The most probable enery loss.

Member Data Documentation

XYZTLorentzVector EnergyLossSimulator::deltaP
private

The actual energy loss.

Definition at line 53 of file EnergyLossSimulator.h.

Referenced by compute(), and deltaMom().

double EnergyLossSimulator::mostProbableLoss
private

The most probable enery loss.

Definition at line 50 of file EnergyLossSimulator.h.

Referenced by compute(), and mostLikelyLoss().

LandauFluctuationGenerator* EnergyLossSimulator::theGenerator
private

The Landau Fluctuation generator.

Definition at line 44 of file EnergyLossSimulator.h.

Referenced by compute(), EnergyLossSimulator(), and ~EnergyLossSimulator().