169 G4double reducedEnergy = kineticEnergy * proton_mass_c2/particleMass ;
170 if(reducedEnergy < 1.0*
keV) reducedEnergy = 1.0*
keV;
171 if( (reducedEnergy > ionCharge * 10.0 *
MeV) ||
172 (ionCharge < 1.5) )
return ionCharge*ionCharge ;
174 static const G4double vFermi[92] = {
175 1.0309, 0.15976, 0.59782, 1.0781, 1.0486, 1.0, 1.058, 0.93942, 0.74562, 0.3424,
176 0.45259, 0.71074, 0.90519, 0.97411, 0.97184, 0.89852, 0.70827, 0.39816, 0.36552, 0.62712,
177 0.81707, 0.9943, 1.1423, 1.2381, 1.1222, 0.92705, 1.0047, 1.2, 1.0661, 0.97411,
178 0.84912, 0.95, 1.0903, 1.0429, 0.49715, 0.37755, 0.35211, 0.57801, 0.77773, 1.0207,
179 1.029, 1.2542, 1.122, 1.1241, 1.0882, 1.2709, 1.2542, 0.90094, 0.74093, 0.86054,
180 0.93155, 1.0047, 0.55379, 0.43289, 0.32636, 0.5131, 0.695, 0.72591, 0.71202, 0.67413,
181 0.71418, 0.71453, 0.5911, 0.70263, 0.68049, 0.68203, 0.68121, 0.68532, 0.68715, 0.61884,
182 0.71801, 0.83048, 1.1222, 1.2381, 1.045, 1.0733, 1.0953, 1.2381, 1.2879, 0.78654,
183 0.66401, 0.84912, 0.88433, 0.80746, 0.43357, 0.41923, 0.43638, 0.51464, 0.73087, 0.81065,
186 static const G4double lFactor[92] = {
187 1.0, 1.0, 1.1, 1.06, 1.01, 1.03, 1.04, 0.99, 0.95, 0.9,
188 0.82, 0.81, 0.83, 0.88, 1.0, 0.95, 0.97, 0.99, 0.98, 0.97,
189 0.98, 0.97, 0.96, 0.93, 0.91, 0.9, 0.88, 0.9, 0.9, 0.9,
190 0.9, 0.85, 0.9, 0.9, 0.91, 0.92, 0.9, 0.9, 0.9, 0.9,
191 0.9, 0.88, 0.9, 0.88, 0.88, 0.9, 0.9, 0.88, 0.9, 0.9,
192 0.9, 0.9, 0.96, 1.2, 0.9, 0.88, 0.88, 0.85, 0.9, 0.9,
193 0.92, 0.95, 0.99, 1.03, 1.05, 1.07, 1.08, 1.1, 1.08, 1.08,
194 1.08, 1.08, 1.09, 1.09, 1.1, 1.11, 1.12, 1.13, 1.14, 1.15,
195 1.17, 1.2, 1.18, 1.17, 1.17, 1.16, 1.16, 1.16, 1.16, 1.16,
198 static const G4double c[6] = {0.2865, 0.1266, -0.001429,
199 0.02402,-0.01135, 0.001475} ;
203 const G4double* theAtomicNumDensityVector =
209 G4double z = 0.0, vF = 0.0, lF = 0.0, norm = 0.0 ;
211 if( 1 == NumberOfElements ) {
212 z = material->
GetZ() ;
215 else if(iz > 91) iz = 91 ;
220 for (
G4int iel=0; iel<NumberOfElements; iel++)
222 const G4Element* element = (*theElementVector)[iel] ;
224 const G4double weight = theAtomicNumDensityVector[iel] ;
229 else if(iz > 91) iz =91 ;
230 vF += vFermi[
iz] * weight ;
231 lF += lFactor[
iz] * weight ;
239 if( ionCharge < 2.5 ) {
244 for (
G4int i=1; i<6; i++) {
249 q = 1.0 + ( 0.007 + 0.00005 *
z ) * std::exp( -q*q ) ;
250 return 4.0 * q * q * (1.0 - std::exp(-x)) ;
256 G4double v1 = std::sqrt( reducedEnergy / (25.0 *
keV) )/ vF ;
258 G4double z13 = std::pow(ionCharge, 0.3333) ;
262 y = vF * v1 * ( 1.0 + 0.2 / (v1*v1) ) / (z13*z13) ;
266 y = 0.6923 * vF * (1.0 + 2.0*v1*v1/3.0 + v1*v1*v1*v1/15.0) / (z13*z13) ;
270 G4double q = 1.0 - std::exp( 0.803*y3 - 1.3167*y3*y3 -
271 0.38157*y - 0.008983*y*y ) ;
272 if( q < 0.0 ) q = 0.0 ;
275 sLocal = 1.0 + ( 0.18 + 0.0015 *
z ) * std::exp( -sLocal*sLocal )/ (ionCharge*ionCharge) ;
281 G4double lambda = 10.0 * vF * std::pow(1.0-q, 0.6667) / (z13 * (6.0 + q)) ;
282 G4double qeff = ionCharge * sLocal *
283 ( q + 0.5*(1.0-q) * std::log(1.0 + lambda*lambda) / (vF*vF) ) ;
284 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 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