207{
208 if (verboseLevel > 3)
209 {
211 << "Calling CrossSectionPerVolume() of G4DNADingfelderChargeIncreaseModel"
213 }
214
215
216
217 if (
218 particleDefinition != hydrogenDef
219 &&
220 particleDefinition != alphaPlusDef
221 &&
222 particleDefinition != heliumDef
223 )
224
225 return 0;
226
230
232
233 const G4String& particleName = particleDefinition->GetParticleName();
234
235 std::map< G4String,G4double,std::less<G4String> >::iterator pos1;
236 pos1 = lowEnergyLimit.find(particleName);
237
238 if (pos1 != lowEnergyLimit.end())
239 {
240 lowLim = pos1->second;
241 }
242
243 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
244 pos2 = highEnergyLimit.find(particleName);
245
246 if (pos2 != highEnergyLimit.end())
247 {
248 highLim = pos2->second;
249 }
250
251 if (k >= lowLim && k <= highLim)
252 {
253
254 if (particleDefinition == hydrogenDef)
255 {
262
263 G4double t = k / (proton_mass_c2/electron_mass_c2);
265 G4double temp = 4.0 *
pi * Bohr_radius/nm * Bohr_radius/nm * fac;
268 totalCrossSection = 1.0/(1.0/sigmal + 1.0/sigmah) *m*m;
269 }
270 else
271 {
272 totalCrossSection = Sum(k,particleDefinition);
273 }
274 }
275
276 if (verboseLevel > 2)
277 {
278 G4cout <<
"__________________________________" <<
G4endl;
279 G4cout <<
"G4DNADingfelderChargeIncreaseModel - XS INFO START" <<
G4endl;
280 G4cout <<
"Kinetic energy(eV)=" << k/eV <<
" particle : " << particleName <<
G4endl;
281 G4cout <<
"Cross section per water molecule (cm^2)=" << totalCrossSection/cm/cm <<
G4endl;
282 G4cout <<
"Cross section per water molecule (cm^-1)=" << totalCrossSection*waterDensity/(1./cm) <<
G4endl;
283
284
285 G4cout <<
"G4DNADingfelderChargeIncreaseModel - XS INFO END" <<
G4endl;
286 }
287
288 return totalCrossSection*waterDensity;
289
290
291}
G4double G4Log(G4double x)
G4double powA(G4double A, G4double y) const