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;
68 void Initialise(
const G4ParticleDefinition*,
const G4DataVector&)
override;
73 G4double KineticEnergy,
74 G4double AtomicNumber,
75 G4double AtomicWeight=0.,
77 G4double emax=DBL_MAX)
override;
79 G4ThreeVector&
SampleScattering(
const G4ThreeVector&, G4double safety)
override;
82 G4double& currentMinimalStep)
override;
89 G4double KineticEnergy);
99 inline void SetParticle(
const G4ParticleDefinition*);
176 mass = p->GetPDGMass();
177 charge = p->GetPDGCharge()/CLHEP::eplus;
192 G4double lnZ1 = G4Log(
Zeff+1.);
208 G4double KineticEnergy)
213 static const G4double c_highland = 13.6*
CLHEP::MeV;
216 KineticEnergy*(KineticEnergy+2.*
mass)));
232 G4double
a = (2.*xmeanth+9.*x2meanth-3.)/(2.*xmeanth-3.*x2meanth+1.);
233 G4double
prob = (a+2.)*xmeanth/
a;
237 if(G4UniformRand() <
prob) {
238 cth = -1.+2.*G4Exp(G4Log(G4UniformRand())/(a+1.));
240 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)