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 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 =
210 G4double z = 0.0, vF = 0.0, lF = 0.0, norm = 0.0 ;
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] ;
225 const G4double weight = theAtomicNumDensityVector[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 ;
std::vector< G4Element * > G4ElementVector
G4hIonEffChargeSquare(const G4String &name)
G4double GetKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
const G4ElementVector * GetElementVector() const
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material)
const G4double theHeMassAMU
G4double IonEffChargeSquare(const G4Material *material, G4double kineticEnergy, G4double particleMass, G4double ionCharge) const
const G4double * GetAtomicNumDensityVector() const
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double GetPDGMass() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double energy(const ThreeVector &p, const G4double m)
const G4double x[NPOINTSGL]
size_t GetNumberOfElements() const
static const double eplus
G4double GetPDGCharge() const
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const