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();
const G4ParticleDefinition * particle
void StartTracking(G4Track *) override
const G4MaterialCutsCouple * couple
UrbanMscModel93 & operator=(const UrbanMscModel93 &right)=delete
G4ParticleChangeForMSC * fParticleChange
G4int currentMaterialIndex
G4double ComputeTheta0(G4double truePathLength, G4double KineticEnergy)
G4ThreeVector & SampleScattering(const G4ThreeVector &, G4double safety) override
G4double currentRadLength
void SetParticle(const G4ParticleDefinition *)
G4double ComputeGeomPathLength(G4double truePathLength) override
G4double ComputeTruePathLengthLimit(const G4Track &track, G4double ¤tMinimalStep) override
G4double LatCorrelation()
UrbanMscModel93(const G4String &nam="UrbanMsc93")
G4LossTableManager * theManager
G4double currentKinEnergy
G4double SimpleScattering(G4double xmeanth, G4double x2meanth)
G4double SampleDisplacement()
Abs< T >::type abs(const T &t)
~UrbanMscModel93() override
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *particle, G4double KineticEnergy, G4double AtomicNumber, G4double AtomicWeight=0., G4double cut=0., G4double emax=DBL_MAX) override
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
G4double ComputeTrueStepLength(G4double geomStepLength) override
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy)