65 lowEnergyLimit(1.*MeV),
66 highEnergyLimit(100.*GeV),
67 twoln10(2.*std::log(10.)),
85 G4double eloss = BetheBlochFormula(material,energy,particleMass) ;
97 G4double eloss = BetheBlochFormula(material,kineticEnergy,particleMass) ;
108 return highEnergyLimit ;
127 return highEnergyLimit ;
135 return lowEnergyLimit ;
156G4double G4hBetheBlochModel::BetheBlochFormula(
164 G4double rateMass = electron_mass_c2/particleMass ;
167 G4double tau = kineticEnergy/particleMass ;
171 if ( tau < taul ) tau = taul ;
175 G4double gamma,bg2,beta2,tmax,x,delta,sh ;
188 bg2 = tau*(tau+2.0) ;
189 beta2 = bg2/(gamma*gamma) ;
190 tmax = 2.*electron_mass_c2*bg2/(1.+2.*gamma*rateMass+rateMass*rateMass) ;
192 ionloss = std::log(2.0*electron_mass_c2*bg2*tmax/eexc2)-2.0*beta2 ;
195 x = std::log(bg2)/twoln10 ;
200 delta = twoln10*x - cden ;
201 if ( x < x1den ) delta += aden*std::pow((x1den-x),mden) ;
208 if ( bg2 > bg2lim ) {
209 for (
G4int k=0; k<=2; k++) {
211 sh += shellCorrectionVector[k]/x;
215 for (
G4int k=0; k<=2; k++) {
217 sh += shellCorrectionVector[k]/x;
219 sh *= std::log(tau/taul)/std::log(taulim/taul) ;
224 ionloss -= delta + sh ;
225 ionloss *= twopi_mc2_rcl2*electronDensity/beta2 ;
227 if ( ionloss < 0.0) ionloss = 0.0 ;
G4double GetKineticEnergy() const
G4double GetMdensity() const
G4double GetX1density() const
G4double * GetShellCorrectionVector() const
G4double GetX0density() const
G4double GetCdensity() const
G4double GetMeanExcitationEnergy() const
G4double GetAdensity() const
G4IonisParamMat * GetIonisation() const
G4double GetElectronDensity() const
G4double GetPDGMass() const
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material)
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4hBetheBlochModel(const G4String &name)