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 lFactor[92] = {
188 1.0, 1.0, 1.1, 1.06, 1.01, 1.03, 1.04, 0.99, 0.95, 0.9,
189 0.82, 0.81, 0.83, 0.88, 1.0, 0.95, 0.97, 0.99, 0.98, 0.97,
190 0.98, 0.97, 0.96, 0.93, 0.91, 0.9, 0.88, 0.9, 0.9, 0.9,
191 0.9, 0.85, 0.9, 0.9, 0.91, 0.92, 0.9, 0.9, 0.9, 0.9,
192 0.9, 0.88, 0.9, 0.88, 0.88, 0.9, 0.9, 0.88, 0.9, 0.9,
193 0.9, 0.9, 0.96, 1.2, 0.9, 0.88, 0.88, 0.85, 0.9, 0.9,
194 0.92, 0.95, 0.99, 1.03, 1.05, 1.07, 1.08, 1.1, 1.08, 1.08,
195 1.08, 1.08, 1.09, 1.09, 1.1, 1.11, 1.12, 1.13, 1.14, 1.15,
196 1.17, 1.2, 1.18, 1.17, 1.17, 1.16, 1.16, 1.16, 1.16, 1.16,
199 static const G4double c[6] = {0.2865, 0.1266, -0.001429,
200 0.02402,-0.01135, 0.001475} ;
204 const G4double* theAtomicNumDensityVector =
212 if( 1 == NumberOfElements ) {
213 z = material->
GetZ() ;
216 else if(iz > 91) iz = 91 ;
221 for (
G4int iel=0; iel<NumberOfElements; iel++)
223 const G4Element* element = (*theElementVector)[iel] ;
230 else if(iz > 91) iz =91 ;
231 vF += vFermi[iz] *
weight ;
232 lF += lFactor[iz] *
weight ;
240 if( ionCharge < 2.5 ) {
245 for (
G4int i=1; i<6; i++) {
250 q = 1.0 + ( 0.007 + 0.00005 *
z ) *
G4Exp( -q*q ) ;
251 return 4.0 * q * q * (1.0 -
G4Exp(-x)) ;
257 G4double v1 = std::sqrt( reducedEnergy / (25.0 *
keV) )/ vF ;
259 G4double z13 = std::pow(ionCharge, 0.3333) ;
263 y = vF * v1 * ( 1.0 + 0.2 / (v1*v1) ) / (z13*z13) ;
267 y = 0.6923 * vF * (1.0 + 2.0*v1*v1/3.0 + v1*v1*v1*v1/15.0) / (z13*z13) ;
272 0.38157*y - 0.008983*y*y ) ;
273 if( q < 0.0 ) q = 0.0 ;
276 sLocal = 1.0 + ( 0.18 + 0.0015 *
z ) *
G4Exp( -sLocal*sLocal )/ (ionCharge*ionCharge) ;
282 G4double lambda = 10.0 * vF * std::pow(1.0-q, 0.6667) / (z13 * (6.0 + q)) ;
283 G4double qeff = ionCharge * sLocal *
284 ( q + 0.5*(1.0-q) * std::log(1.0 + lambda*lambda) / (vF*vF) ) ;
285 if( 0.1 > qeff ) qeff = 0.1 ;
const G4double theHeMassAMU
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
static constexpr double MeV
G4hIonEffChargeSquare(const G4String &name)
static constexpr double keV
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
const G4ElementVector * GetElementVector() const
G4double GetPDGCharge() const
G4double GetPDGMass() const
static constexpr double proton_mass_c2
static constexpr double TeV
G4ParticleDefinition * GetDefinition() const
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
static constexpr double eplus
std::vector< G4Element * > G4ElementVector
G4double IonEffChargeSquare(const G4Material *material, G4double kineticEnergy, G4double particleMass, G4double ionCharge) const
G4double GetKineticEnergy() const
const G4double * GetAtomicNumDensityVector() const
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material)
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const
size_t GetNumberOfElements() const