85 G4double q = IonEffChargeSquare(material,energy,particleMass,charge) ;
100 G4double q = IonEffChargeSquare(material,kineticEnergy,particleMass,charge) ;
157G4double G4hIonEffChargeSquare::IonEffChargeSquare(
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 ;
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,
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 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 ) {
241 G4double e = std::log(std::max(1.0, kineticEnergy / (keV*theHeMassAMU) )) ;
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 ;
274 G4double sLocal = 7.6 - std::log(std::max(1.0, reducedEnergy/keV)) ;
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
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