85 G4double q = IonEffChargeSquare(material,energy,particleMass,charge) ;
100 G4double q = IonEffChargeSquare(material,kineticEnergy,particleMass,charge) ;
157 G4double G4hIonEffChargeSquare::IonEffChargeSquare(
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 =
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] ;
229 else if(iz > 91) iz =91 ;
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 * 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
size_t GetNumberOfElements() const
G4double GetPDGCharge() const
G4double HighEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const
G4double LowEnergyLimit(const G4ParticleDefinition *aParticle, const G4Material *material) const