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 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 ) {
242 G4double e = std::log(std::max(1.0, kineticEnergy / (keV*theHeMassAMU) )) ;
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 ;
275 G4double sLocal = 7.6 - std::log(std::max(1.0, reducedEnergy/keV)) ;
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
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
G4double TheValue(const G4DynamicParticle *particle, const G4Material *material)
G4hIonEffChargeSquare(const G4String &name)
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4bool IsInCharge(const G4DynamicParticle *particle, const G4Material *material) const
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const