42 #ifndef SimG4Core_PhysicsLists_UrbanMscModel93_h
43 #define SimG4Core_PhysicsLists_UrbanMscModel93_h 1
47 #include "G4VMscModel.hh"
48 #include "G4MscStepLimitType.hh"
51 #include "CLHEP/Units/SystemOfUnits.h"
53 class G4ParticleChangeForMSC;
55 class G4LossTableManager;
65 void Initialise(
const G4ParticleDefinition*,
const G4DataVector&)
override;
70 G4double KineticEnergy,
71 G4double AtomicNumber,
72 G4double AtomicWeight = 0.,
74 G4double emax = DBL_MAX)
override;
76 G4ThreeVector&
SampleScattering(
const G4ThreeVector&, G4double safety)
override;
84 inline G4double
ComputeTheta0(G4double truePathLength, G4double KineticEnergy);
93 inline void SetParticle(
const G4ParticleDefinition*);
168 mass =
p->GetPDGMass();
169 charge =
p->GetPDGCharge() / CLHEP::eplus;
182 G4double lnZ1 = G4Log(
Zeff + 1.);
183 coeffc1 = 2.943 - 0.197 * lnZ1;
184 coeffc2 = 0.0987 - 0.0143 * lnZ1;
187 Z23 = G4Exp(2. *
lnZ / 3.);
200 static const G4double c_highland = 13.6 *
CLHEP::MeV;
217 G4double
a = (2. * xmeanth + 9. * x2meanth - 3.) / (2. * xmeanth - 3. * x2meanth + 1.);
218 G4double
prob = (
a + 2.) * xmeanth /
a;
222 if (G4UniformRand() <
prob) {
223 cth = -1. + 2. * G4Exp(G4Log(G4UniformRand()) / (
a + 1.));
225 cth = -1. + 2. * G4UniformRand();