184{
185 if (verboseLevel > 3)
186 {
188 << "Calling CrossSectionPerVolume() of G4DNADingfelderChargeIncreaseModel"
190 }
191
192
193
194 if (
195 particleDefinition != hydrogenDef
196 &&
197 particleDefinition != alphaPlusDef
198 &&
199 particleDefinition != heliumDef
200 )
201
202 return 0;
203
207
209
210 const G4String& particleName = particleDefinition->GetParticleName();
211
212 std::map< G4String,G4double,std::less<G4String> >::iterator pos1;
213 pos1 = lowEnergyLimit.find(particleName);
214
215 if (pos1 != lowEnergyLimit.end())
216 {
217 lowLim = pos1->second;
218 }
219
220 std::map< G4String,G4double,std::less<G4String> >::iterator pos2;
221 pos2 = highEnergyLimit.find(particleName);
222
223 if (pos2 != highEnergyLimit.end())
224 {
225 highLim = pos2->second;
226 }
227
228 if (k >= lowLim && k <= highLim)
229 {
230
231 if (particleDefinition == hydrogenDef)
232 {
239
240 G4double t = k / (proton_mass_c2/electron_mass_c2);
242 G4double temp = 4.0 * pi * Bohr_radius/nm * Bohr_radius/nm * fac;
245 totalCrossSection = 1.0/(1.0/sigmal + 1.0/sigmah) *m*m;
246 }
247 else
248 {
249 totalCrossSection = Sum(k,particleDefinition);
250 }
251 }
252
253 if (verboseLevel > 2)
254 {
255 G4cout <<
"__________________________________" <<
G4endl;
256 G4cout <<
"G4DNADingfelderChargeIncreaseModel - XS INFO START" <<
G4endl;
257 G4cout <<
"Kinetic energy(eV)=" << k/eV <<
" particle : " << particleName <<
G4endl;
258 G4cout <<
"Cross section per water molecule (cm^2)=" << totalCrossSection/cm/cm <<
G4endl;
259 G4cout <<
"Cross section per water molecule (cm^-1)=" << totalCrossSection*waterDensity/(1./cm) <<
G4endl;
260
261
262 G4cout <<
"G4DNADingfelderChargeIncreaseModel - XS INFO END" <<
G4endl;
263 }
264
265 return totalCrossSection*waterDensity;
266
267
268}
G4double G4Log(G4double x)
std::size_t GetIndex() const
G4double powA(G4double A, G4double y) const