86 G4double q = IonEffChargeSquare(material,energy,particleMass,charge) ;
101 G4double q = IonEffChargeSquare(material,kineticEnergy,particleMass,charge) ;
158G4double G4hIonEffChargeSquare::IonEffChargeSquare(
170 G4double reducedEnergy = kineticEnergy * proton_mass_c2/particleMass ;
171 if(reducedEnergy < 1.0*keV) reducedEnergy = 1.0*keV;
172 if( (reducedEnergy > ionCharge * 10.0 * MeV) ||
173 (ionCharge < 1.5) )
return ionCharge*ionCharge ;
175 static const G4double vFermi[92] = {
176 1.0309, 0.15976, 0.59782, 1.0781, 1.0486, 1.0, 1.058, 0.93942, 0.74562, 0.3424,
177 0.45259, 0.71074, 0.90519, 0.97411, 0.97184, 0.89852, 0.70827, 0.39816, 0.36552, 0.62712,
178 0.81707, 0.9943, 1.1423, 1.2381, 1.1222, 0.92705, 1.0047, 1.2, 1.0661, 0.97411,
179 0.84912, 0.95, 1.0903, 1.0429, 0.49715, 0.37755, 0.35211, 0.57801, 0.77773, 1.0207,
180 1.029, 1.2542, 1.122, 1.1241, 1.0882, 1.2709, 1.2542, 0.90094, 0.74093, 0.86054,
181 0.93155, 1.0047, 0.55379, 0.43289, 0.32636, 0.5131, 0.695, 0.72591, 0.71202, 0.67413,
182 0.71418, 0.71453, 0.5911, 0.70263, 0.68049, 0.68203, 0.68121, 0.68532, 0.68715, 0.61884,
183 0.71801, 0.83048, 1.1222, 1.2381, 1.045, 1.0733, 1.0953, 1.2381, 1.2879, 0.78654,
184 0.66401, 0.84912, 0.88433, 0.80746, 0.43357, 0.41923, 0.43638, 0.51464, 0.73087, 0.81065,
187 static const G4double c[6] = {0.2865, 0.1266, -0.001429,
188 0.02402,-0.01135, 0.001475} ;
192 const G4double* theAtomicNumDensityVector =
198 G4double z = 0.0, vF = 0.0, norm = 0.0 ;
200 if( 1 == NumberOfElements ) {
201 z = material->
GetZ() ;
204 else if(iz > 91) iz = 91 ;
208 for (
G4int iel=0; iel<NumberOfElements; iel++)
210 const G4Element* element = (*theElementVector)[iel] ;
212 const G4double weight = theAtomicNumDensityVector[iel] ;
217 else if(iz > 91) iz =91 ;
218 vF += vFermi[iz] * weight ;
225 if( ionCharge < 2.5 ) {
227 G4double e = std::log(std::max(1.0, kineticEnergy / (keV*theHeMassAMU) )) ;
230 for (
G4int i=1; i<6; i++) {
235 q = 1.0 + ( 0.007 + 0.00005 * z ) *
G4Exp( -q*q ) ;
236 return 4.0 * q * q * (1.0 -
G4Exp(-x)) ;
242 G4double v1 = std::sqrt( reducedEnergy / (25.0 * keV) )/ vF ;
244 G4double z13 = std::pow(ionCharge, 0.3333) ;
248 y = vF * v1 * ( 1.0 + 0.2 / (v1*v1) ) / (z13*z13) ;
252 y = 0.6923 * vF * (1.0 + 2.0*v1*v1/3.0 + v1*v1*v1*v1/15.0) / (z13*z13) ;
257 0.38157*y - 0.008983*y*y ) ;
258 if( q < 0.0 ) q = 0.0 ;
260 G4double sLocal = 7.6 - std::log(std::max(1.0, reducedEnergy/keV)) ;
261 sLocal = 1.0 + ( 0.18 + 0.0015 * z ) *
G4Exp( -sLocal*sLocal )/ (ionCharge*ionCharge) ;
267 G4double lambda = 10.0 * vF * std::pow(1.0-q, 0.6667) / (z13 * (6.0 + q)) ;
268 G4double qeff = ionCharge * sLocal *
269 ( q + 0.5*(1.0-q) * std::log(1.0 + lambda*lambda) / (vF*vF) ) ;
270 if( 0.1 > qeff ) qeff = 0.1 ;
std::vector< const G4Element * > G4ElementVector
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
const G4double * GetAtomicNumDensityVector() const
G4double GetPDGMass() const
G4double GetPDGCharge() const
G4hIonEffChargeSquare(const G4String &name)
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const override
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const override
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const override
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material) override