Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4EmCorrections.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// -------------------------------------------------------------------
28//
29// GEANT4 Class
30//
31// File name: G4EmCorrections
32//
33// Author: Vladimir Ivanchenko
34//
35// Creation date: 13.01.2005
36//
37// Modifications:
38// 05.05.2005 V.Ivanchenko Fix misprint in Mott term
39// 26.11.2005 V.Ivanchenko Fix effective charge for heavy ions using original paper
40// 28.04.2006 V.Ivanchenko General cleanup, add finite size corrections
41// 13.05.2006 V.Ivanchenko Add corrections for ion stopping
42// 08.05.2007 V.Ivanchenko Use G4IonTable for ion mass instead of NistTable to avoid
43// division by zero
44// 29.02.2008 V.Ivanchenko use expantions for log and power function
45// 21.04.2008 Updated computations for ions (V.Ivanchenko)
46// 20.05.2008 Removed Finite Size correction (V.Ivanchenko)
47// 19.04.2012 Fix reproducibility problem (A.Ribon)
48//
49//
50// Class Description:
51//
52// This class provides calculation of EM corrections to ionisation
53//
54
55// -------------------------------------------------------------------
56//
57
58#include "G4EmCorrections.hh"
60#include "G4SystemOfUnits.hh"
61#include "G4ParticleTable.hh"
62#include "G4IonTable.hh"
63#include "G4VEmModel.hh"
64#include "G4Proton.hh"
65#include "G4GenericIon.hh"
66#include "G4PhysicsLogVector.hh"
69#include "G4AtomicShells.hh"
70#include "G4Log.hh"
71#include "G4Exp.hh"
72#include "G4Pow.hh"
73
74//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
75
76namespace
77{
78 constexpr G4double inveplus = 1.0/CLHEP::eplus;
79 constexpr G4double alpha2 = CLHEP::fine_structure_const*CLHEP::fine_structure_const;
80}
81const G4double G4EmCorrections::ZD[11] =
82 {0., 0., 0., 1.72, 2.09, 2.48, 2.82, 3.16, 3.53, 3.84, 4.15};
83const G4double G4EmCorrections::UK[20] = {1.9999, 2.0134, 2.0258, 2.0478, 2.0662,
84 2.0817, 2.0945, 2.0999, 2.1049, 2.1132,
85 2.1197, 2.1246, 2.1280, 2.1292, 2.1301,
86 2.1310, 2.1310, 2.1300, 2.1283, 2.1271};
87const G4double G4EmCorrections::VK[20] = {8.3410, 8.3373, 8.3340, 8.3287, 8.3247,
88 8.3219, 8.3201, 8.3194, 8.3191, 8.3188,
89 8.3191, 8.3199, 8.3211, 8.3218, 8.3226,
90 8.3244, 8.3264, 8.3285, 8.3308, 8.3320};
91G4double G4EmCorrections::ZK[] = {0.0};
92const G4double G4EmCorrections::Eta[29] = {0.005, 0.007, 0.01, 0.015, 0.02,
93 0.03, 0.04, 0.05, 0.06, 0.08,
94 0.1, 0.15, 0.2, 0.3, 0.4,
95 0.5, 0.6, 0.7, 0.8, 1.0,
96 1.2, 1.4, 1.5, 1.7, 2.0, 3.0, 5.0, 7.0, 10.};
97G4double G4EmCorrections::CK[20][29];
98G4double G4EmCorrections::CL[26][28];
99const G4double G4EmCorrections::UL[] = {0.1215, 0.5265, 0.8411, 1.0878, 1.2828,
100 1.4379, 1.5032, 1.5617, 1.6608, 1.7401,
101 1.8036, 1.8543, 1.8756, 1.8945, 1.9262,
102 1.9508, 1.9696, 1.9836, 1.9890, 1.9935,
103 2.0001, 2.0039, 2.0053, 2.0049, 2.0040, 2.0028};
104G4double G4EmCorrections::VL[] = {0.0};
105G4double G4EmCorrections::sWmaxBarkas = 10.0;
106
107G4PhysicsFreeVector* G4EmCorrections::sBarkasCorr = nullptr;
108G4PhysicsFreeVector* G4EmCorrections::sThetaK = nullptr;
109G4PhysicsFreeVector* G4EmCorrections::sThetaL = nullptr;
110
112 : verbose(verb)
113{
114 eth = 2.0*CLHEP::MeV;
115 eCorrMin = 25.*CLHEP::keV;
116 eCorrMax = 1.*CLHEP::GeV;
117
119 g4calc = G4Pow::GetInstance();
120
121 // fill vectors
122 if (nullptr == sBarkasCorr) {
123 Initialise();
124 isInitializer = true;
125 }
126}
127
128//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
129
131{
132 for (G4int i=0; i<nIons; ++i) { delete stopData[i]; }
133 if (isInitializer) {
134 delete sBarkasCorr;
135 delete sThetaK;
136 delete sThetaL;
137 sBarkasCorr = sThetaK = sThetaL = nullptr;
138 }
139}
140
141void G4EmCorrections::SetupKinematics(const G4ParticleDefinition* p,
142 const G4Material* mat,
143 const G4double kineticEnergy)
144{
145 if(kineticEnergy != kinEnergy || p != particle) {
146 particle = p;
147 kinEnergy = kineticEnergy;
148 mass = p->GetPDGMass();
149 tau = kineticEnergy / mass;
150 gamma = 1.0 + tau;
151 bg2 = tau * (tau+2.0);
152 beta2 = bg2/(gamma*gamma);
153 beta = std::sqrt(beta2);
154 ba2 = beta2/alpha2;
155 const G4double ratio = CLHEP::electron_mass_c2/mass;
156 tmax = 2.0*CLHEP::electron_mass_c2*bg2
157 /(1. + 2.0*gamma*ratio + ratio*ratio);
158 charge = p->GetPDGCharge()*inveplus;
159 if(charge > 1.5) { charge = effCharge.EffectiveCharge(p,mat,kinEnergy); }
160 q2 = charge*charge;
161 }
162 if(mat != material) {
163 material = mat;
164 theElementVector = material->GetElementVector();
165 atomDensity = material->GetAtomicNumDensityVector();
166 numberOfElements = (G4int)material->GetNumberOfElements();
167 }
168}
169
170//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
171
173 const G4Material* mat,
174 const G4double e, const G4double)
175{
176 // . Z^3 Barkas effect in the stopping power of matter for charged particles
177 // J.C Ashley and R.H.Ritchie
178 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
179 // and ICRU49 report
180 // valid for kineticEnergy < 0.5 MeV
181 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980
182
183 SetupKinematics(p, mat, e);
184 if(tau <= 0.0) { return 0.0; }
185
186 const G4double Barkas = BarkasCorrection(p, mat, e, true);
187 const G4double Bloch = BlochCorrection(p, mat, e, true);
188 const G4double Mott = MottCorrection(p, mat, e, true);
189
190 G4double sum = 2.0*(Barkas + Bloch) + Mott;
191
192 if(verbose > 1) {
193 G4cout << "EmCorrections: E(MeV)= " << e/MeV << " Barkas= " << Barkas
194 << " Bloch= " << Bloch << " Mott= " << Mott
195 << " Sum= " << sum << " q2= " << q2 << G4endl;
196 G4cout << " ShellCorrection: " << ShellCorrection(p, mat, e)
197 << " Kshell= " << KShellCorrection(p, mat, e)
198 << " Lshell= " << LShellCorrection(p, mat, e)
199 << " " << mat->GetName() << G4endl;
200 }
201 sum *= material->GetElectronDensity()*q2*CLHEP::twopi_mc2_rcl2/beta2;
202 return sum;
203}
204
205//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
206
208 const G4Material* mat,
209 const G4double e)
210{
211 SetupKinematics(p, mat, e);
212 return 2.0*BarkasCorrection(p, mat, e, true)*
213 material->GetElectronDensity() * q2 * CLHEP::twopi_mc2_rcl2 /beta2;
214}
215
216//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
217
219 const G4Material* mat,
220 const G4double e)
221{
222 // . Z^3 Barkas effect in the stopping power of matter for charged particles
223 // J.C Ashley and R.H.Ritchie
224 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
225 // and ICRU49 report
226 // valid for kineticEnergy < 0.5 MeV
227 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980
228 SetupKinematics(p, mat, e);
229 if(tau <= 0.0) { return 0.0; }
230
231 const G4double Barkas = BarkasCorrection (p, mat, e, true);
232 const G4double Bloch = BlochCorrection (p, mat, e, true);
233 const G4double Mott = MottCorrection (p, mat, e, true);
234
235 G4double sum = 2.0*(Barkas*(charge - 1.0)/charge + Bloch) + Mott;
236
237 if(verbose > 1) {
238 G4cout << "EmCorrections: E(MeV)= " << e/MeV << " Barkas= " << Barkas
239 << " Bloch= " << Bloch << " Mott= " << Mott
240 << " Sum= " << sum << G4endl;
241 }
242 sum *= material->GetElectronDensity() * q2 * CLHEP::twopi_mc2_rcl2 /beta2;
243
244 if(verbose > 1) { G4cout << " Sum= " << sum << G4endl; }
245 return sum;
246}
247
248//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
249
251 const G4MaterialCutsCouple* couple,
252 const G4double e)
253{
254 // . Z^3 Barkas effect in the stopping power of matter for charged particles
255 // J.C Ashley and R.H.Ritchie
256 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
257 // and ICRU49 report
258 // valid for kineticEnergy < 0.5 MeV
259 // Other corrections from S.P.Ahlen Rev. Mod. Phys., Vol 52, No1, 1980
260
261 G4double sum = 0.0;
262
263 if(nullptr != ionHEModel) {
264 G4int Z = G4lrint(p->GetPDGCharge()*inveplus);
265 Z = std::max(std::min(Z, 99), 1);
266
267 const G4double ethscaled = eth*p->GetPDGMass()/CLHEP::proton_mass_c2;
268 const G4int ionPDG = p->GetPDGEncoding();
269 if(thcorr.find(ionPDG)==thcorr.end()) { // Not found: fill the map
270 std::vector<G4double> v;
271 for(std::size_t i=0; i<ncouples; ++i){
272 v.push_back(ethscaled*ComputeIonCorrections(p,currmat[i],ethscaled));
273 }
274 thcorr.insert(std::pair< G4int, std::vector<G4double> >(ionPDG,v));
275 }
276
277 const G4double rest = (thcorr.find(ionPDG)->second)[couple->GetIndex()];
278
279 sum = ComputeIonCorrections(p,couple->GetMaterial(),e) - rest/e;
280
281 if(verbose > 1) {
282 G4cout << " Sum= " << sum << " dSum= " << rest/e << G4endl;
283 }
284 }
285 return sum;
286}
287
288//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
289
291 const G4Material* mat,
292 const G4double e)
293{
294 SetupKinematics(p, mat, e);
295 const G4double eexc = material->GetIonisation()->GetMeanExcitationEnergy();
296 const G4double eexc2 = eexc*eexc;
297 return 0.5*G4Log(2.0*electron_mass_c2*bg2*tmax/eexc2)-beta2;
298}
299
300//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
301
303 const G4Material* mat,
304 const G4double e)
305{
306 SetupKinematics(p, mat, e);
307 const G4double dedx = 0.5*tmax/(kinEnergy + mass);
308 return 0.5*dedx*dedx;
309}
310
311//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
312
314 const G4Material* mat,
315 const G4double e)
316{
317 SetupKinematics(p, mat, e);
318 G4double term = 0.0;
319 for (G4int i = 0; i<numberOfElements; ++i) {
320
321 G4double Z = (*theElementVector)[i]->GetZ();
322 G4int iz = (*theElementVector)[i]->GetZasInt();
323 G4double f = 1.0;
324 G4double Z2= (Z-0.3)*(Z-0.3);
325 if(1 == iz) {
326 f = 0.5;
327 Z2 = 1.0;
328 }
329 const G4double eta = ba2/Z2;
330 const G4double tet = (11 < iz) ? sThetaK->Value(Z) : Z2*(1. + Z2*0.25*alpha2);
331 term += f*atomDensity[i]*KShell(tet,eta)/Z;
332 }
333
334 term /= material->GetTotNbOfAtomsPerVolume();
335
336 return term;
337}
338
339//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
340
342 const G4Material* mat,
343 const G4double e)
344{
345 SetupKinematics(p, mat, e);
346 G4double term = 0.0;
347 for (G4int i = 0; i<numberOfElements; ++i) {
348
349 const G4double Z = (*theElementVector)[i]->GetZ();
350 const G4int iz = (*theElementVector)[i]->GetZasInt();
351 if(2 < iz) {
352 const G4double Zeff = (iz < 10) ? Z - ZD[iz] : Z - ZD[10];
353 const G4double Z2= Zeff*Zeff;
354 const G4double eta = ba2/Z2;
355 G4double tet = sThetaL->Value(Z);
356 G4int nmax = std::min(4, G4AtomicShells::GetNumberOfShells(iz));
357 for (G4int j=1; j<nmax; ++j) {
359 if (15 >= iz) {
360 tet = (3 > j) ? 0.25*Z2*(1.0 + 5*Z2*alpha2/16.) :
361 0.25*Z2*(1.0 + Z2*alpha2/16.);
362 }
363 //G4cout << " LShell: j= " << j << " ne= " << ne << " e(eV)= " << e/eV
364 // << " ThetaL= " << tet << G4endl;
365 term += 0.125*ne*atomDensity[i]*LShell(tet,eta)/Z;
366 }
367 }
368 }
369
370 term /= material->GetTotNbOfAtomsPerVolume();
371
372 return term;
373}
374
375//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
376
377G4double G4EmCorrections::KShell(const G4double tet, const G4double eta)
378{
379 G4double corr = 0.0;
380
381 static const G4double TheK[20] =
382 {0.64, 0.65, 0.66, 0.68, 0.70, 0.72, 0.74, 0.75, 0.76, 0.78,
383 0.80, 0.82, 0.84, 0.85, 0.86, 0.88, 0.90, 0.92, 0.94, 0.95};
384
385
386 G4double x = tet;
387 G4int itet = 0;
388 G4int ieta = 0;
389 if(tet < TheK[0]) {
390 x = TheK[0];
391 } else if(tet > TheK[nK-1]) {
392 x = TheK[nK-1];
393 itet = nK-2;
394 } else {
395 itet = Index(x, TheK, nK);
396 }
397 // asymptotic case
398 if(eta >= Eta[nEtaK-1]) {
399 corr =
400 (Value(x, TheK[itet], TheK[itet+1], UK[itet], UK[itet+1]) +
401 Value(x, TheK[itet], TheK[itet+1], VK[itet], VK[itet+1])/eta +
402 Value(x, TheK[itet], TheK[itet+1], ZK[itet], ZK[itet+1])/(eta*eta))/eta;
403 } else {
404 G4double y = eta;
405 if(eta < Eta[0]) {
406 y = Eta[0];
407 } else {
408 ieta = Index(y, Eta, nEtaK);
409 }
410 corr = Value2(x, y, TheK[itet], TheK[itet+1], Eta[ieta], Eta[ieta+1],
411 CK[itet][ieta], CK[itet+1][ieta],
412 CK[itet][ieta+1], CK[itet+1][ieta+1]);
413 //G4cout << " x= " <<x<<" y= "<<y<<" tet= " <<TheK[itet]
414 // <<" "<< TheK[itet+1]<<" eta= "<< Eta[ieta]<<" "<< Eta[ieta+1]
415 // <<" CK= " << CK[itet][ieta]<<" "<< CK[itet+1][ieta]
416 // <<" "<< CK[itet][ieta+1]<<" "<< CK[itet+1][ieta+1]<<G4endl;
417 }
418 //G4cout << "Kshell: tet= " << tet << " eta= " << eta << " C= " << corr
419 // << " itet= " << itet << " ieta= " << ieta <<G4endl;
420 return corr;
421}
422
423//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
424
425G4double G4EmCorrections::LShell(const G4double tet, const G4double eta)
426{
427 G4double corr = 0.0;
428
429 static const G4double TheL[26] =
430 {0.24, 0.26, 0.28, 0.30, 0.32, 0.34, 0.35, 0.36, 0.38, 0.40,
431 0.42, 0.44, 0.45, 0.46, 0.48, 0.50, 0.52, 0.54, 0.55, 0.56,
432 0.58, 0.60, 0.62, 0.64, 0.65, 0.66};
433
434 G4double x = tet;
435 G4int itet = 0;
436 G4int ieta = 0;
437 if(tet < TheL[0]) {
438 x = TheL[0];
439 } else if(tet > TheL[nL-1]) {
440 x = TheL[nL-1];
441 itet = nL-2;
442 } else {
443 itet = Index(x, TheL, nL);
444 }
445
446 // asymptotic case
447 if(eta >= Eta[nEtaL-1]) {
448 corr = (Value(x, TheL[itet], TheL[itet+1], UL[itet], UL[itet+1])
449 + Value(x, TheL[itet], TheL[itet+1], VL[itet], VL[itet+1])/eta
450 )/eta;
451 } else {
452 G4double y = eta;
453 if(eta < Eta[0]) {
454 y = Eta[0];
455 } else {
456 ieta = Index(y, Eta, nEtaL);
457 }
458 corr = Value2(x, y, TheL[itet], TheL[itet+1], Eta[ieta], Eta[ieta+1],
459 CL[itet][ieta], CL[itet+1][ieta],
460 CL[itet][ieta+1], CL[itet+1][ieta+1]);
461 //G4cout << " x= " <<x<<" y= "<<y<<" tet= " <<TheL[itet]
462 // <<" "<< TheL[itet+1]<<" eta= "<< Eta[ieta]<<" "<< Eta[ieta+1]
463 // <<" CL= " << CL[itet][ieta]<<" "<< CL[itet+1][ieta]
464 // <<" "<< CL[itet][ieta+1]<<" "<< CL[itet+1][ieta+1]<<G4endl;
465 }
466 //G4cout<<"Lshell: tet= "<<tet<<" eta= "<<eta<<" itet= "<<itet
467 // <<" ieta= "<<ieta<<" Corr= "<<corr<<G4endl;
468 return corr;
469}
470
471//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
472
474 const G4Material* mat,
475 const G4double e)
476{
477 SetupKinematics(p, mat, e);
478 G4double taulim= 8.0*MeV/mass;
479 G4double bg2lim= taulim * (taulim+2.0);
480
481 G4double* shellCorrectionVector =
483 G4double sh = 0.0;
484 G4double x = 1.0;
485 G4double taul = material->GetIonisation()->GetTaul();
486
487 if ( bg2 >= bg2lim ) {
488 for (G4int k=0; k<3; ++k) {
489 x *= bg2 ;
490 sh += shellCorrectionVector[k]/x;
491 }
492
493 } else {
494 for (G4int k=0; k<3; ++k) {
495 x *= bg2lim ;
496 sh += shellCorrectionVector[k]/x;
497 }
498 sh *= G4Log(tau/taul)/G4Log(taulim/taul);
499 }
500 sh *= 0.5;
501 return sh;
502}
503
504
505//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
506
508 const G4Material* mat,
509 const G4double ekin)
510{
511 SetupKinematics(p, mat, ekin);
512 G4double term = 0.0;
513 //G4cout << "### G4EmCorrections::ShellCorrection " << mat->GetName()
514 // << " " << ekin/MeV << " MeV " << G4endl;
515 for (G4int i = 0; i<numberOfElements; ++i) {
516
517 G4double res = 0.0;
518 G4double res0 = 0.0;
519 const G4double Z = (*theElementVector)[i]->GetZ();
520 const G4int iz = (*theElementVector)[i]->GetZasInt();
521 G4double Z2= (Z-0.3)*(Z-0.3);
522 G4double f = 1.0;
523 if(1 == iz) {
524 f = 0.5;
525 Z2 = 1.0;
526 }
527 G4double eta = ba2/Z2;
528 G4double tet = (11 < iz) ? sThetaK->Value(Z) : Z2*(1. + Z2*0.25*alpha2);
529 res0 = f*KShell(tet,eta);
530 res += res0;
531 //G4cout << " Z= " << iz << " Shell 0" << " tet= " << tet
532 // << " eta= " << eta << " resK= " << res0 << G4endl;
533
534 if(2 < iz) {
535 const G4double Zeff = (iz < 10) ? Z - ZD[iz] : Z - ZD[10];
536 Z2= Zeff*Zeff;
537 eta = ba2/Z2;
538 tet = sThetaL->Value(Z);
539 f = 0.125;
541 const G4int nmax = std::min(4, ntot);
542 G4double norm = 0.0;
543 G4double eshell = 0.0;
544 for(G4int j=1; j<nmax; ++j) {
546 if(15 >= iz) {
547 tet = (3 > j) ? 0.25*Z2*(1.0 + 5*Z2*alpha2/16.) :
548 0.25*Z2*(1.0 + Z2*alpha2/16.);
549 }
550 norm += ne;
551 eshell += tet*ne;
552 res0 = f*ne*LShell(tet,eta);
553 res += res0;
554 //G4cout << " Zeff= " << Zeff << " Shell " << j << " Ne= " << ne
555 // << " tet= " << tet << " eta= " << eta
556 // << " resL= " << res0 << G4endl;
557 }
558 if(ntot > nmax) {
559 eshell /= norm;
560
561 static const G4double HM[53] = {
562 12.0, 12.0, 12.0, 12.0, 11.9, 11.7, 11.5, 11.2, 10.8, 10.4,
563 10.0, 9.51, 8.97, 8.52, 8.03, 7.46, 6.95, 6.53, 6.18, 5.87,
564 5.61, 5.39, 5.19, 5.01, 4.86, 4.72, 4.62, 4.53, 4.44, 4.38,
565 4.32, 4.26, 4.20, 4.15, 4.1, 4.04, 4.00, 3.95, 3.93, 3.91,
566 3.90, 3.89, 3.89, 3.88, 3.88, 3.88, 3.88, 3.88, 3.89, 3.89,
567 3.90, 3.92, 3.93 };
568 static const G4double HN[31] = {
569 75.5, 61.9, 52.2, 45.1, 39.6, 35.4, 31.9, 29.1, 27.2, 25.8,
570 24.5, 23.6, 22.7, 22.0, 21.4, 20.9, 20.5, 20.2, 19.9, 19.7,
571 19.5, 19.3, 19.2, 19.1, 18.4, 18.8, 18.7, 18.6, 18.5, 18.4,
572 18.2};
573
574 // Add M-shell
575 if(28 > iz) {
576 res += f*(iz - 10)*LShell(eshell,HM[iz-11]*eta);
577 } else if(63 > iz) {
578 res += f*18*LShell(eshell,HM[iz-11]*eta);
579 } else {
580 res += f*18*LShell(eshell,HM[52]*eta);
581 }
582 // Add N-shell
583 if(32 < iz) {
584 if(60 > iz) {
585 res += f*(iz - 28)*LShell(eshell,HN[iz-33]*eta);
586 } else if(63 > iz) {
587 res += 4*LShell(eshell,HN[iz-33]*eta);
588 } else {
589 res += 4*LShell(eshell,HN[30]*eta);
590 }
591 // Add O-P-shells
592 if(60 < iz) {
593 res += f*(iz - 60)*LShell(eshell,150*eta);
594 }
595 }
596 }
597 }
598 term += res*atomDensity[i]/Z;
599 }
600
601 term /= material->GetTotNbOfAtomsPerVolume();
602 //G4cout << "##Shell Correction=" << term << G4endl;
603 return term;
604}
605
606//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
607
609 const G4Material* mat,
610 const G4double e)
611{
612 SetupKinematics(p, mat, e);
613
614 G4double cden = material->GetIonisation()->GetCdensity();
615 G4double mden = material->GetIonisation()->GetMdensity();
616 G4double aden = material->GetIonisation()->GetAdensity();
617 G4double x0den = material->GetIonisation()->GetX0density();
618 G4double x1den = material->GetIonisation()->GetX1density();
619
620 G4double dedx = 0.0;
621
622 // density correction
623 static const G4double twoln10 = 2.0*G4Log(10.0);
624 G4double x = G4Log(bg2)/twoln10;
625 if ( x >= x0den ) {
626 dedx = twoln10*x - cden ;
627 if ( x < x1den ) dedx += aden*G4Exp(G4Log(x1den-x)*mden) ;
628 }
629
630 return dedx;
631}
632
633//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
634
636 const G4Material* mat,
637 const G4double e,
638 const G4bool isInitialized)
639{
640 // . Z^3 Barkas effect in the stopping power of matter for charged particles
641 // J.C Ashley and R.H.Ritchie
642 // Physical review B Vol.5 No.7 1 April 1972 pp. 2393-2397
643 // valid for kineticEnergy > 0.5 MeV
644
645 if (!isInitialized) { SetupKinematics(p, mat, e); }
646 G4double BarkasTerm = 0.0;
647
648 for (G4int i = 0; i<numberOfElements; ++i) {
649
650 const G4int iz = (*theElementVector)[i]->GetZasInt();
651 if(iz == 47) {
652 BarkasTerm += atomDensity[i]*0.006812*G4Exp(-G4Log(beta)*0.9);
653 } else if(iz >= 64) {
654 BarkasTerm += atomDensity[i]*0.002833*G4Exp(-G4Log(beta)*1.2);
655 } else {
656
657 const G4double Z = (*theElementVector)[i]->GetZ();
658 const G4double X = ba2 / Z;
659 G4double b = 1.3;
660 if(1 == iz) { b = (material->GetName() == "G4_lH2") ? 0.6 : 1.8; }
661 else if(2 == iz) { b = 0.6; }
662 else if(10 >= iz) { b = 1.8; }
663 else if(17 >= iz) { b = 1.4; }
664 else if(18 == iz) { b = 1.8; }
665 else if(25 >= iz) { b = 1.4; }
666 else if(50 >= iz) { b = 1.35;}
667
668 const G4double W = b/std::sqrt(X);
669
670 G4double val = sBarkasCorr->Value(W, idxBarkas);
671 if (W > sWmaxBarkas) { val *= (sWmaxBarkas/W); }
672 // G4cout << "i= " << i << " b= " << b << " W= " << W
673 // << " Z= " << Z << " X= " << X << " val= " << val<< G4endl;
674 BarkasTerm += val*atomDensity[i] / (std::sqrt(Z*X)*X);
675 }
676 }
677
678 BarkasTerm *= 1.29*charge/material->GetTotNbOfAtomsPerVolume();
679
680 return BarkasTerm;
681}
682
683//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
684
686 const G4Material* mat,
687 const G4double e,
688 const G4bool isInitialized)
689{
690 if (!isInitialized) { SetupKinematics(p, mat, e); }
691
692 G4double y2 = q2/ba2;
693
694 G4double term = 1.0/(1.0 + y2);
695 G4double del;
696 G4double j = 1.0;
697 do {
698 j += 1.0;
699 del = 1.0/(j* (j*j + y2));
700 term += del;
701 // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
702 } while (del > 0.01*term);
703
704 return -y2*term;
705}
706
707//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
708
710 const G4Material* mat,
711 const G4double e,
712 const G4bool isInitialized)
713{
714 if (!isInitialized) { SetupKinematics(p, mat, e); }
715 return CLHEP::pi*CLHEP::fine_structure_const*beta*charge;
716}
717
718//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
719
722 const G4Material* mat,
723 const G4double ekin)
724{
725 G4double factor = 1.0;
726 if(p->GetPDGCharge() <= 2.5*CLHEP::eplus || nIons <= 0) { return factor; }
727
728 if(verbose > 1) {
729 G4cout << "EffectiveChargeCorrection: " << p->GetParticleName()
730 << " in " << mat->GetName()
731 << " ekin(MeV)= " << ekin/MeV << G4endl;
732 }
733
734 if(p != curParticle || mat != curMaterial) {
735 curParticle = p;
736 curMaterial = mat;
737 curVector = nullptr;
738 currentZ = p->GetAtomicNumber();
739 if(verbose > 1) {
740 G4cout << "G4EmCorrections::EffectiveChargeCorrection: Zion= "
741 << currentZ << " Aion= " << p->GetPDGMass()/amu_c2 << G4endl;
742 }
743 massFactor = CLHEP::proton_mass_c2/p->GetPDGMass();
744 idx = -1;
745
746 for(G4int i=0; i<nIons; ++i) {
747 if(materialList[i] == mat && currentZ == Zion[i]) {
748 idx = i;
749 break;
750 }
751 }
752 //G4cout << " idx= " << idx << " dz= " << G4endl;
753 if(idx >= 0) {
754 if(nullptr == ionList[idx]) { BuildCorrectionVector(); }
755 curVector = stopData[idx];
756 } else {
757 return factor;
758 }
759 }
760 if(nullptr != curVector) {
761 factor = curVector->Value(ekin*massFactor);
762 if(verbose > 1) {
763 G4cout << "E= " << ekin << " factor= " << factor << " massfactor= "
764 << massFactor << G4endl;
765 }
766 }
767 return factor;
768}
769
770//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
771
773 const G4String& mname,
774 G4PhysicsVector* dVector)
775{
776 G4int i = 0;
777 for(; i<nIons; ++i) {
778 if(Z == Zion[i] && A == Aion[i] && mname == materialName[i]) break;
779 }
780 if(i == nIons) {
781 Zion.push_back(Z);
782 Aion.push_back(A);
783 materialName.push_back(mname);
784 materialList.push_back(nullptr);
785 ionList.push_back(nullptr);
786 stopData.push_back(dVector);
787 nIons++;
788 if(verbose > 1) {
789 G4cout << "AddStoppingData Z= " << Z << " A= " << A << " " << mname
790 << " idx= " << i << G4endl;
791 }
792 }
793}
794
795//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
796
797void G4EmCorrections::BuildCorrectionVector()
798{
799 if(nullptr == ionLEModel || nullptr == ionHEModel) {
800 return;
801 }
802
803 const G4ParticleDefinition* ion = curParticle;
805 G4int Z = Zion[idx];
806 G4double A = Aion[idx];
807 G4PhysicsVector* v = stopData[idx];
808
809 if(verbose > 1) {
810 G4cout << "BuildCorrectionVector: Stopping for "
811 << curParticle->GetParticleName() << " in "
812 << materialName[idx] << " Ion Z= " << Z << " A= " << A
813 << " massFactor= " << massFactor << G4endl;
814 G4cout << " Nbins=" << nbinCorr << " Emin(MeV)=" << eCorrMin
815 << " Emax(MeV)=" << eCorrMax << " ion: "
816 << ion->GetParticleName() << G4endl;
817 }
818
819 auto vv = new G4PhysicsLogVector(eCorrMin,eCorrMax,nbinCorr,false);
820 const G4double eth0 = v->Energy(0);
821 const G4double escal = eth/massFactor;
822 G4double qe =
823 effCharge.EffectiveChargeSquareRatio(curParticle, curMaterial, escal);
824 const G4double dedxt =
825 ionLEModel->ComputeDEDXPerVolume(curMaterial, gion, eth, eth)*qe;
826 const G4double dedx1t =
827 ionHEModel->ComputeDEDXPerVolume(curMaterial, gion, eth, eth)*qe
828 + ComputeIonCorrections(curParticle, curMaterial, escal);
829 const G4double rest = escal*(dedxt - dedx1t);
830 if(verbose > 1) {
831 G4cout << "Escal(MeV)= " << escal << " qe=" << qe
832 << " dedxt= " << dedxt << " dedx1t= " << dedx1t << G4endl;
833 }
834 for(G4int i=0; i<=nbinCorr; ++i) {
835 // energy in the local table (GenericIon)
836 G4double e = vv->Energy(i);
837 // energy of the real ion
838 G4double eion = e/massFactor;
839 // energy in the imput stopping data vector
840 G4double e1 = eion/A;
841 G4double dedx = (e1 < eth0)
842 ? v->Value(eth0)*std::sqrt(e1/eth0) : v->Value(e1);
843 qe = effCharge.EffectiveChargeSquareRatio(curParticle, curMaterial, eion);
844 G4double dedx1 = (e <= eth)
845 ? ionLEModel->ComputeDEDXPerVolume(curMaterial, gion, e, e)*qe
846 : ionHEModel->ComputeDEDXPerVolume(curMaterial, gion, e, e)*qe +
847 ComputeIonCorrections(curParticle, curMaterial, eion) + rest/eion;
848 vv->PutValue(i, dedx/dedx1);
849 if(verbose > 1) {
850 G4cout << "E(MeV)=" << e/CLHEP::MeV << " Eion=" << eion/CLHEP::MeV
851 << " e1=" << e1 << " dedxRatio= " << dedx/dedx1
852 << " dedx=" << dedx << " dedx1=" << dedx1
853 << " qe=" << qe << " rest/eion=" << rest/eion << G4endl;
854 }
855 }
856 delete v;
857 ionList[idx] = ion;
858 stopData[idx] = vv;
859 if(verbose > 1) { G4cout << "End data set " << G4endl; }
860}
861
862//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
863
865{
867 ncouples = tb->GetTableSize();
868 if(currmat.size() != ncouples) {
869 currmat.resize(ncouples);
870 for(auto it = thcorr.begin(); it != thcorr.end(); ++it){
871 (it->second).clear();
872 }
873 thcorr.clear();
874 for(std::size_t i=0; i<ncouples; ++i) {
875 currmat[i] = tb->GetMaterialCutsCouple((G4int)i)->GetMaterial();
876 G4String nam = currmat[i]->GetName();
877 for(G4int j=0; j<nIons; ++j) {
878 if(nam == materialName[j]) { materialList[j] = currmat[i]; }
879 }
880 }
881 }
882}
883
884//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
885
886void G4EmCorrections::Initialise()
887{
888 // Z^3 Barkas effect in the stopping power of matter for charged particles
889 // J.C Ashley and R.H.Ritchie
890 // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397
891 // G.S. Khandelwal Nucl. Phys. A116(1968)97 - 111.
892 // "Shell corrections for K- and L- electrons
893
894 G4int i, j;
895 static const G4double fTable[47][2] = {
896 { 0.02, 21.5},
897 { 0.03, 20.0},
898 { 0.04, 18.0},
899 { 0.05, 15.6},
900 { 0.06, 15.0},
901 { 0.07, 14.0},
902 { 0.08, 13.5},
903 { 0.09, 13.},
904 { 0.1, 12.2},
905 { 0.2, 9.25},
906 { 0.3, 7.0},
907 { 0.4, 6.0},
908 { 0.5, 4.5},
909 { 0.6, 3.5},
910 { 0.7, 3.0},
911 { 0.8, 2.5},
912 { 0.9, 2.0},
913 { 1.0, 1.7},
914 { 1.2, 1.2},
915 { 1.3, 1.0},
916 { 1.4, 0.86},
917 { 1.5, 0.7},
918 { 1.6, 0.61},
919 { 1.7, 0.52},
920 { 1.8, 0.5},
921 { 1.9, 0.43},
922 { 2.0, 0.42},
923 { 2.1, 0.3},
924 { 2.4, 0.2},
925 { 3.0, 0.13},
926 { 3.08, 0.1},
927 { 3.1, 0.09},
928 { 3.3, 0.08},
929 { 3.5, 0.07},
930 { 3.8, 0.06},
931 { 4.0, 0.051},
932 { 4.1, 0.04},
933 { 4.8, 0.03},
934 { 5.0, 0.024},
935 { 5.1, 0.02},
936 { 6.0, 0.013},
937 { 6.5, 0.01},
938 { 7.0, 0.009},
939 { 7.1, 0.008},
940 { 8.0, 0.006},
941 { 9.0, 0.0032},
942 { 10.0, 0.0025} };
943
944 sBarkasCorr = new G4PhysicsFreeVector(47, false);
945 for(i=0; i<47; ++i) { sBarkasCorr->PutValues(i, fTable[i][0], fTable[i][1]); }
946
947 const G4double SK[20] = {1.9477, 1.9232, 1.8996, 1.8550, 1.8137,
948 1.7754, 1.7396, 1.7223, 1.7063, 1.6752,
949 1.6461, 1.6189, 1.5933, 1.5811, 1.5693,
950 1.5467, 1.5254, 1.5053, 1.4863, 1.4772};
951 const G4double TK[20] = {2.5222, 2.5125, 2.5026, 2.4821, 2.4608,
952 2.4388, 2.4163, 2.4044, 2.3933, 2.3701,
953 2.3466, 2.3229, 2.2992, 2.2872, 2.2753,
954 2.2515, 2.2277, 2.2040, 2.1804, 2.1686};
955
956 const G4double SL[26] = {15.3343, 13.9389, 12.7909, 11.8343, 11.0283,
957 10.3424, 10.0371, 9.7537, 9.2443, 8.8005,
958 8.4114, 8.0683, 7.9117, 7.7641, 7.4931,
959 7.2506, 7.0327, 6.8362, 6.7452, 6.6584,
960 6.4969, 6.3498, 6.2154, 6.0923, 6.0345, 5.9792};
961 const G4double TL[26] = {35.0669, 33.4344, 32.0073, 30.7466, 29.6226,
962 28.6128, 28.1449, 27.6991, 26.8674, 26.1061,
963 25.4058, 24.7587, 24.4531, 24.1583, 23.5992,
964 23.0771, 22.5880, 22.1285, 21.9090, 21.6958,
965 21.2872, 20.9006, 20.5341, 20.1859, 20.0183, 19.8546};
966
967 const G4double bk1[29][11] = {
968 {0.005, 1.34782E-8, 1.46132E-8, 1.72179E-8, 2.03521E-8, 2.41370E-8, 2.87247E-8, 3.13778E-8, 3.43072E-8, 4.11274E-8, 4.94946E-8},
969 {0.007, 6.87555E-8, 7.44373E-8, 8.74397E-8, 1.03022E-7, 1.21760E-7, 1.44370E-7, 1.57398E-7, 1.71747E-7, 2.05023E-7, 2.45620E-7},
970 {0.01, 3.78413E-7, 4.08831E-7, 4.78154E-7, 5.60760E-7, 6.59478E-7, 7.77847E-7, 8.45709E-7, 9.20187E-7, 1.09192E-6, 1.29981E-6},
971 {0.015, 2.53200E-6, 2.72664E-6, 3.16738E-6, 3.68791E-6, 4.30423E-6, 5.03578E-6, 5.45200E-6, 5.90633E-6, 6.94501E-6, 8.18757E-6},
972 {0.02, 9.43891E-6, 1.01339E-5, 1.16984E-5, 1.35313E-5, 1.56829E-5, 1.82138E-5, 1.96439E-5, 2.11973E-5, 2.47216E-5, 2.88935E-5},
973 {0.03, 5.67088E-5, 6.05576E-5, 6.91311E-5, 7.90324E-5, 9.04832E-5, 1.03744E-4, 1.11147E-4, 1.19122E-4, 1.36980E-4, 1.57744E-4},
974 {0.04, 1.91576E-4, 2.03626E-4, 2.30230E-4, 2.60584E-4, 2.95248E-4, 3.34870E-4, 3.56771E-4, 3.80200E-4, 4.32104E-4, 4.91584E-4},
975 {0.05, 4.74226E-4, 5.02006E-4, 5.62872E-4, 6.31597E-4, 7.09244E-4, 7.97023E-4, 8.45134E-4, 8.96410E-4, 1.00867E-3, 1.13590E-3},
976 {0.06, 9.67285E-4, 1.02029E-3, 1.13566E-3, 1.26476E-3, 1.46928E-3, 1.57113E-3, 1.65921E-3, 1.75244E-3, 1.95562E-3, 2.18336E-3},
977 {0.08, 2.81537E-3, 2.95200E-3, 3.24599E-3, 3.57027E-3, 3.92793E-3, 4.32246E-3, 4.53473E-3, 4.75768E-3, 5.23785E-3, 5.76765E-3},
978 {0.1, 6.14216E-3, 6.40864E-3, 6.97750E-3, 7.59781E-3, 8.27424E-3, 9.01187E-3, 9.40534E-3, 9.81623E-3, 1.06934E-2, 1.16498E-2},
979 {0.15, 2.23096E-2, 2.30790E-2, 2.46978E-2, 2.64300E-2, 2.82832E-2, 3.02661E-2, 3.13090E-2, 3.23878E-2, 3.46580E-2, 3.70873E-2},
980 {0.2, 5.04022E-2, 5.18492E-2, 5.48682E-2, 5.80617E-2, 6.14403E-2, 6.50152E-2, 6.68798E-2, 6.87981E-2, 7.28020E-2, 7.70407E-2},
981 {0.3, 1.38018E-1, 1.41026E-1, 1.47244E-1, 1.53743E-1, 1.60536E-1, 1.67641E-1, 1.71315E-1, 1.75074E-1, 1.82852E-1, 1.90997E-1},
982 {0.4, 2.56001E-1, 2.60576E-1, 2.69992E-1, 2.79776E-1, 2.89946E-1, 3.00525E-1, 3.05974E-1, 3.11533E-1, 3.22994E-1, 3.34935E-1},
983 {0.5, 3.92181E-1, 3.98213E-1, 4.10597E-1, 4.23427E-1, 4.36726E-1, 4.50519E-1, 4.57610E-1, 4.64834E-1, 4.79700E-1, 4.95148E-1},
984 {0.6, 5.37913E-1, 5.45268E-1, 5.60350E-1, 5.75948E-1, 5.92092E-1, 6.08811E-1, 6.17396E-1, 6.26136E-1, 6.44104E-1, 6.62752E-1},
985 {0.7, 6.87470E-1, 6.96021E-1, 7.13543E-1, 7.31650E-1, 7.50373E-1, 7.69748E-1, 7.79591E-1, 7.89811E-1, 8.10602E-1, 8.32167E-1},
986 {0.8, 8.37159E-1, 8.46790E-1, 8.66525E-1, 8.86910E-1, 9.07979E-1, 9.29772E-1, 9.40953E-1, 9.52331E-1, 9.75701E-1, 9.99934E-1},
987 {1.0, 1.12850, 1.14002, 1.16362, 1.18799, 1.21317, 1.23921, 1.25257, 1.26616, 1.29408, 1.32303},
988 {1.2, 1.40232, 1.41545, 1.44232, 1.47007, 1.49875, 1.52842, 1.54364, 1.55913, 1.59095, 1.62396},
989 {1.4, 1.65584, 1.67034, 1.70004, 1.73072, 1.76244, 1.79526, 1.81210, 1.82925, 1.86448, 1.90104},
990 {1.5, 1.77496, 1.79009, 1.82107, 1.85307, 1.88617, 1.92042, 1.93800, 1.95590, 1.99269, 2.03087},
991 {1.7, 1.99863, 2.01490, 2.04822, 2.08265, 2.11827, 2.15555, 2.17409, 2.19337, 2.23302, 2.27419},
992 {2.0, 2.29325, 2.31100, 2.34738, 2.38501, 2.42395, 2.46429, 2.48401, 2.50612, 2.54955, 2.59468},
993 {3.0, 3.08887, 3.11036, 3.15445, 3.20013, 3.24748, 3.29664, 3.32192, 3.34770, 3.40081, 3.45611},
994 {5.0, 4.07599, 4.10219, 4.15606, 4.21199, 4.27010, 4.33056, 4.36172, 4.39353, 4.45918, 4.52772},
995 {7.0, 4.69647, 4.72577, 4.78608, 4.84877, 4.91402, 4.98200, 5.01707, 5.05290, 5.12695, 5.20436},
996 {10.0, 5.32590, 5.35848, 5.42560, 5.49547, 5.56830, 5.64429, 5.68353, 5.72366, 5.80666, 5.89359}
997 };
998
999 const G4double bk2[29][11] = {
1000 {0.005, 5.98040E-8, 7.25636E-8, 8.00602E-8, 8.84294E-8, 1.08253E-7, 1.33148E-7, 1.64573E-7, 2.04459E-7, 2.28346E-7, 2.55370E-7},
1001 {0.007, 2.95345E-7, 3.56497E-7, 3.92247E-7, 4.32017E-7, 5.25688E-7, 6.42391E-7, 7.88464E-7, 9.72171E-7, 1.08140E-6, 1.20435E-6},
1002 {0.01, 1.55232E-6, 1.86011E-6, 2.03881E-6, 2.23662E-6, 2.69889E-6, 3.26860E-6, 3.26860E-6, 4.84882E-6, 5.36428E-6, 5.94048E-6},
1003 {0.015, 9.67802E-6, 1.14707E-5, 1.25008E-5, 1.36329E-5, 1.62480E-5, 1.94200E-5, 2.32783E-5, 2.79850E-5, 3.07181E-5, 3.37432E-5},
1004 {0.02, 3.38425E-5, 3.97259E-5, 4.30763E-5, 4.67351E-5, 5.51033E-5, 6.51154E-5, 7.71154E-5, 9.15431E-5, 9.98212E-5, 1.08909E-4},
1005 {0.03, 1.81920E-4, 2.10106E-4, 2.25918E-4, 2.43007E-4, 2.81460E-4, 3.26458E-4, 3.79175E-4, 4.41006E-4, 4.75845E-4, 5.13606E-4},
1006 {0.04, 5.59802E-4, 6.38103E-4, 6.81511E-4, 7.28042E-4, 8.31425E-4, 9.50341E-4, 1.08721E-3, 1.24485E-3, 1.33245E-3, 1.42650E-3},
1007 {0.05, 1.28002E-3, 1.44336E-3, 1.53305E-3, 1.62855E-3, 1.83861E-3, 2.07396E-3, 2.34750E-3, 2.65469E-3, 2.82358E-3, 3.00358E-3},
1008 {0.06, 2.42872E-3, 2.72510E-3, 2.88111E-3, 3.04636E-3, 3.40681E-3, 3.81132E-3, 4.26536E-3, 4.77507E-3, 5.05294E-3, 5.34739E-3},
1009 {0.08, 6.35222E-3, 6.99730E-3, 7.34446E-3, 7.70916E-3, 8.49478E-3, 9.36187E-3, 1.03189E-2, 1.13754E-2, 1.19441E-2, 1.25417E-2},
1010 {0.1, 1.26929E-2, 1.38803E-2, 1.44371E-2, 1.50707E-2, 1.64235E-2, 1.78989E-2, 1.95083E-2, 2.12640E-2, 2.22009E-2, 2.31795E-2},
1011 {0.15, 3.96872E-2, 4.24699E-2, 4.39340E-2, 4.54488E-2, 4.86383E-2, 5.20542E-2, 5.57135E-2, 5.96350E-2, 6.17003E-2, 6.38389E-2},
1012 {0.2, 8.15290E-2, 8.62830E-2, 8.87650E-2, 9.13200E-2, 9.66589E-2, 1.02320E-1, 1.08326E-1, 1.14701E-1, 1.18035E-1, 1.21472E-1},
1013 {0.3, 1.99528E-1, 2.08471E-1, 2.13103E-1, 2.17848E-1, 2.27689E-1, 2.38022E-1, 2.48882E-1, 2.60304E-1, 2.66239E-1, 2.72329E-1},
1014 {0.4, 3.47383E-1, 3.60369E-1, 3.67073E-1, 3.73925E-1, 3.88089E-1, 4.02900E-1, 4.18404E-1, 4.34647E-1, 4.43063E-1, 4.51685E-1},
1015 {0.5, 5.11214E-1, 5.27935E-1, 5.36554E-1, 5.45354E-1, 5.63515E-1, 5.82470E-1, 6.02273E-1, 6.22986E-1, 6.33705E-1, 6.44677E-1},
1016 {0.6, 6.82122E-1, 7.02260E-1, 7.12631E-1, 7.23214E-1, 7.45041E-1, 7.67800E-1, 7.91559E-1, 8.16391E-1, 8.29235E-1, 8.42380E-1},
1017 {0.7, 8.54544E-1, 8.77814E-1, 8.89791E-1, 9.02008E-1, 9.27198E-1, 9.53454E-1, 9.80856E-1, 1.00949, 1.02430, 1.03945},
1018 {0.8, 1.02508, 1.05121, 1.06466, 1.07838, 1.10667, 1.13615, 1.16692, 1.19907, 1.21570, 1.23272},
1019 {1.0, 1.35307, 1.38429, 1.40036, 1.41676, 1.45057, 1.48582, 1.52263, 1.56111, 1.58102, 1.60140},
1020 {1.2, 1.65823, 1.69385, 1.71220, 1.73092, 1.76954, 1.80983, 1.85192, 1.89596, 1.91876, 1.94211},
1021 {1.4, 1.93902, 1.97852, 1.99887, 2.01964, 2.06251, 2.10727, 2.15406, 2.20304, 2.22842, 2.25442},
1022 {1.5, 2.07055, 2.11182, 2.13309, 2.15480, 2.19963, 2.24644, 2.29539, 2.34666, 2.37323, 2.40045},
1023 {1.7, 2.31700, 2.36154, 2.38451, 2.40798, 2.45641, 2.50703, 2.56000, 2.61552, 2.64430, 2.67381},
1024 {2.0, 2.64162, 2.69053, 2.71576, 2.74154, 2.79481, 2.85052, 2.90887, 2.97009, 3.00185, 3.03442},
1025 {3.0, 3.51376, 3.57394, 3.60503, 3.63684, 3.70268, 3.77170, 3.84418, 3.92040, 3.96003, 4.00073},
1026 {5.0, 4.59935, 4.67433, 4.71316, 4.75293, 4.83543, 4.92217, 5.01353, 5.10992, 5.16014, 5.21181},
1027 {7.0, 5.28542, 5.37040, 5.41445, 5.45962, 5.55344, 5.65226, 5.79496, 5.90517, 5.96269, 6.02191},
1028 {10.0, 5.98474, 6.08046, 6.13015, 6.18112, 6.28715, 6.39903, 6.51728, 6.64249, 6.70792, 6.77535}
1029 };
1030
1031 const G4double bls1[28][10] = {
1032 {0.005, 2.4111E-4, 2.5612E-4, 2.7202E-4, 3.0658E-4, 3.4511E-4, 3.8795E-4, 4.3542E-4, 4.6100E-4, 4.8786E-4},
1033 {0.007, 6.3947E-4, 6.7058E-4, 7.0295E-4, 7.7167E-4, 8.4592E-4, 9.2605E-4, 1.0125E-3, 1.0583E-3, 1.1058E-3},
1034 {0.01, 1.5469E-3, 1.6036E-3, 1.6622E-3, 1.7856E-3, 1.9181E-3, 2.1615E-3, 2.3178E-3, 2.4019E-3, 2.4904E-3},
1035 {0.015, 3.7221E-3, 3.8404E-3, 3.9650E-3, 4.2354E-3, 4.5396E-3, 4.8853E-3, 5.2820E-3, 5.5031E-3, 5.7414E-3},
1036 {0.02, 6.9449E-3, 7.1910E-3, 7.4535E-3, 8.0336E-3, 8.6984E-3, 9.4638E-3, 1.0348E-2, 1.0841E-2, 1.1372E-2},
1037 {0.03, 1.7411E-2, 1.8180E-2, 1.8997E-2, 2.0784E-2, 2.2797E-2, 2.5066E-2, 2.7622E-2, 2.9020E-2, 3.0503E-2},
1038 {0.04, 3.8474E-2, 4.0056E-2, 4.1718E-2, 4.5300E-2, 4.9254E-2, 5.3619E-2, 5.8436E-2, 6.1028E-2, 6.3752E-2},
1039 {0.05, 6.7371E-2, 6.9928E-2, 7.2596E-2, 7.8282E-2, 8.4470E-2, 9.1206E-2, 9.8538E-2, 1.0244E-1, 1.0652E-1},
1040 {0.06, 1.0418E-1, 1.0778E-1, 1.1152E-1, 1.1943E-1, 1.2796E-1, 1.3715E-1, 1.4706E-1, 1.5231E-1, 1.5776E-1},
1041 {0.08, 1.9647E-1, 2.0217E-1, 2.0805E-1, 2.2038E-1, 2.3351E-1, 2.4751E-1, 2.6244E-1, 2.7027E-1, 2.7837E-1},
1042 {0.1, 3.0594E-1, 3.1361E-1, 3.2150E-1, 3.3796E-1, 3.5537E-1, 3.7381E-1, 3.9336E-1, 4.0357E-1, 4.1410E-1},
1043 {0.15, 6.1411E-1, 6.2597E-1, 6.3811E-1, 6.6330E-1, 6.8974E-1, 7.1753E-1, 7.4678E-1, 7.6199E-1, 7.7761E-1},
1044 {0.2, 9.3100E-1, 9.5614E-1, 9.7162E-1, 1.0037, 1.0372, 1.0723, 1.1092, 1.1284, 1.1480},
1045 {0.3, 1.5172, 1.5372, 1.5576, 1.5998, 1.6438, 1.6899, 1.7382, 1.7632, 1.7889},
1046 {0.4, 2.0173, 2.0408, 2.0647, 2.1142, 2.1659, 2.2199, 2.2765, 2.3059, 2.3360},
1047 {0.5, 2.3932, 2.4193, 2.4460, 2.5011, 2.5587, 2.6190, 2.6821, 2.7148, 2.7484},
1048 {0.6, 2.7091, 2.7374, 2.7663, 2.8260, 2.8884, 2.9538, 3.0222, 3.0577, 3.0941},
1049 {0.7, 2.9742, 3.0044, 3.0352, 3.0988, 3.1652, 3.2349, 3.3079, 3.3457, 3.3845},
1050 {0.8, 3.2222, 3.2539, 3.2863, 3.3532, 3.4232, 3.4965, 3.5734, 3.6133, 3.6542},
1051 {1.0, 3.6690, 3.7033, 3.7384, 3.8108, 3.8866, 3.9661, 4.0495, 4.0928, 4.1371},
1052 {1.2, 3.9819, 4.0183, 4.0555, 4.1324, 4.2130, 4.2974, 4.3861, 4.4321, 4.4794},
1053 {1.4, 4.2745, 4.3127, 4.3517, 4.4324, 4.5170, 4.6056, 4.6988, 4.7471, 4.7968},
1054 {1.5, 4.4047, 4.4436, 4.4834, 4.5658, 4.6521, 4.7426, 4.8378, 4.8872, 4.9379},
1055 {1.7, 4.6383, 4.6787, 4.7200, 4.8054, 4.8949, 4.9888, 5.0876, 5.1388, 5.1915},
1056 {2.0, 4.9369, 4.9791, 5.0223, 5.1116, 5.2053, 5.3036, 5.4070, 5.4607, 5.5159},
1057 {3.0, 5.6514, 5.6981, 5.7459, 5.8450, 5.9489, 6.0581, 6.1730, 6.2328, 6.2943},
1058 {5.0, 6.4665, 6.5189, 6.5724, 6.6835, 6.8003, 6.9231, 7.0525, 7.1199, 7.1892},
1059 {7.0, 6.8634, 6.9194, 6.9767, 7.0957, 7.2208, 7.3526, 7.4915, 7.5639, 7.6384}
1060 };
1061
1062 const G4double bls2[28][10] = {
1063 {0.005, 5.4561E-4, 6.0905E-4, 6.7863E-4, 7.5494E-4, 7.9587E-4, 8.3883E-4, 9.3160E-4, 1.0352E-3, 1.1529E-3},
1064 {0.007, 1.2068E-3, 1.3170E-3, 1.4377E-3, 1.5719E-3, 1.6451E-3, 1.7231E-3, 1.8969E-3, 2.1009E-3, 2.3459E-3},
1065 {0.01, 2.6832E-3, 2.9017E-3, 3.1534E-3, 3.4479E-3, 3.6149E-3, 3.7976E-3, 4.2187E-3, 4.7320E-3, 5.3636E-3},
1066 {0.015, 6.2775E-3, 6.9077E-3, 7.6525E-3, 8.5370E-2, 9.0407E-3, 9.5910E-3, 1.0850E-2, 1.2358E-2, 1.4165E-2},
1067 {0.02, 1.2561E-2, 1.3943E-2, 1.5553E-2, 1.7327E-2, 1.8478E-2, 1.9612E-2, 2.2160E-2, 2.5130E-2, 2.8594E-2},
1068 {0.03, 3.3750E-2, 3.7470E-2, 4.1528E-2, 4.6170E-2, 4.8708E-2, 5.1401E-2, 5.7297E-2, 6.3943E-2, 7.1441E-2},
1069 {0.04, 6.9619E-2, 7.6098E-2, 8.3249E-2, 9.1150E-2, 9.5406E-2, 9.9881E-2, 1.0954E-1, 1.2023E-1, 1.3208E-1},
1070 {0.05, 1.1522E-1, 1.2470E-1, 1.3504E-1, 1.4632E-1, 1.5234E-1, 1.5864E-1, 1.7211E-1, 1.8686E-1, 2.0304E-1},
1071 {0.06, 1.6931E-1, 1.8179E-1, 1.9530E-1, 2.0991E-1, 2.1767E-1, 2.2576E-1, 2.4295E-1, 2.6165E-1, 2.8201E-1},
1072 {0.08, 2.9540E-1, 3.1361E-1, 3.3312E-1, 3.5403E-1, 3.6506E-1, 3.7650E-1, 4.0067E-1, 4.2673E-1, 4.5488E-1},
1073 {0.1, 4.3613E-1, 4.5956E-1, 4.852E-1, 5.1115E-1, 5.2514E-1, 5.3961E-1, 5.7008E-1, 6.0277E-1, 6.3793E-1},
1074 {0.15, 8.1014E-1, 8.4453E-1, 8.8093E-1, 9.1954E-1, 9.3973E-1, 9.6056E-1, 1.0043, 1.0509, 1.1008},
1075 {0.2, 1.1888, 1.2319, 1.2774, 1.3255, 1.3506, 1.3765, 1.4308, 1.4886, 1.5504},
1076 {0.3, 1.8422, 1.8983, 1.9575, 2.0201, 2.0528, 2.0864, 2.1569, 2.2319, 2.3120},
1077 {0.4, 2.3984, 2.4642, 2.5336, 2.6070, 2.6452, 2.6847, 2.7674, 2.8554, 2.9494},
1078 {0.5, 2.8181, 2.8915, 2.9690, 3.0509, 3.0937, 3.1378, 3.2301, 3.3285, 3.4337},
1079 {0.6, 3.1698, 3.2494, 3.3336, 3.4226, 3.4691, 3.5171, 3.6175, 3.7246, 3.8391},
1080 {0.7, 3.4652, 3.5502, 3.6400, 3.7351, 3.7848, 3.8360, 3.9433, 4.0578, 4.1804},
1081 {0.8, 3.7392, 3.8289, 3.9236, 4.0239, 4.0764, 4.1304, 4.2438, 4.3648, 4.4944},
1082 {1.0, 4.2295, 4.3269, 4.4299, 4.5391, 4.5962, 4.6551, 4.7786, 4.9106, 5.0520},
1083 {1.2, 4.5777, 4.6814, 4.7912, 4.9076, 4.9685, 5.0314, 5.1633, 5.3043, 5.4555},
1084 {1.4, 4.9001, 5.0092, 5.1247, 5.2473, 5.3114, 5.3776, 5.5166, 5.6653, 5.8249},
1085 {1.5, 5.0434, 5.1550, 5.2731, 5.3984, 5.4640, 5.5317, 5.6739, 5.8260, 5.9893},
1086 {1.7, 5.3011, 5.4170, 5.5398, 5.6701, 5.7373, 5.8088, 5.9568, 6.1152, 6.2853},
1087 {2.0, 5.6308, 5.7523, 5.8811, 6.0174, 6.0896, 6.1636, 6.3192, 6.4857, 6.6647},
1088 {3.0, 6.4224, 6.5580, 6.7019, 6.8549, 6.9351, 7.0180, 7.1925, 7.3795, 7.5808},
1089 {5.0, 7.3338, 7.4872, 7.6500, 7.8235, 7.9146, 8.0087, 8.2071, 8.4200, 8.6496},
1090 {7.0, 7.7938, 7.9588, 8.1342, 8.3211, 8.4193, 8.5209, 8.7350, 8.9651, 9.2133}
1091 };
1092
1093 const G4double bls3[28][9] = {
1094 {0.005, 1.2895E-3, 1.3670E-3, 1.4524E-3, 1.6524E-3, 1.9078E-3, 2.2414E-3, 2.6889E-3, 3.3006E-3},
1095 {0.007, 2.6467E-3, 2.8242E-3, 3.0238E-3, 3.5045E-3, 4.1260E-3, 4.9376E-3, 6.0050E-3, 7.4152E-3},
1096 {0.01, 6.1472E-3, 6.6086E-3, 7.1246E-3, 8.3491E-3, 9.8871E-3, 1.1822E-2, 1.4261E-2, 1.7335E-2},
1097 {0.015, 1.63316E-2, 1.7572E-2, 1.8932E-2, 2.2053E-2, 2.5803E-2, 3.0308E-2, 3.5728E-2, 4.2258E-2},
1098 {0.02, 3.2634E-2, 3.4900E-2, 3.7348E-2, 4.2850E-2, 4.9278E-2, 5.6798E-2, 6.5610E-2, 7.5963E-2},
1099 {0.03, 7.9907E-2, 8.4544E-2, 8.9486E-2, 1.0032E-1, 1.1260E-1, 1.2656E-1, 1.4248E-1, 1.6071E-1},
1100 {0.04, 1.4523E-1, 1.5237E-1, 1.5985E-1, 1.7614E-1, 1.9434E-1, 2.1473E-1, 2.3766E-1, 2.6357E-1},
1101 {0.05, 2.2082E-1, 2.3036E-1, 2.4038E-1, 2.6199E-1, 2.8590E-1, 3.1248E-1, 3.4212E-1, 3.7536E-1},
1102 {0.06, 3.0423E-1, 3.1611E-1, 3.2854E-1, 3.5522E-1, 3.8459E-1, 4.1704E-1, 4.5306E-1, 4.9326E-1},
1103 {0.08, 4.8536E-1, 5.0156E-1, 5.1846E-1, 5.5453E-1, 5.9397E-1, 6.3728E-1, 6.8507E-1, 7.3810E-1},
1104 {0.1, 6.7586E-1, 6.9596E-1, 7.1688E-1, 7.6141E-1, 8.0992E-1, 8.6301E-1, 9.2142E-1, 9.8604E-1},
1105 {0.15, 1.1544, 1.1828, 1.2122, 1.2746, 1.3424, 1.4163, 1.4974, 1.5868},
1106 {0.2, 1.6167, 1.6517, 1.6880, 1.7650, 1.8484, 1.9394, 2.0390, 2.1489},
1107 {0.3, 2.3979, 2.4432, 2.4902, 2.5899, 2.6980, 2.8159, 2.9451, 3.0876},
1108 {0.4, 3.0502, 3.1034, 3.1586, 3.2758, 3.4030, 3.5416, 3.6938, 3.8620},
1109 {0.5, 3.5466, 3.6062, 3.6681, 3.7994, 3.9421, 4.0978, 4.2688, 4.4580},
1110 {0.6, 3.9620, 4.0270, 4.0945, 4.2378, 4.3935, 4.5636, 4.7506, 4.9576},
1111 {0.7, 4.3020, 4.3715, 4.4438, 4.5974, 4.7644, 4.9470, 5.1478, 5.3703},
1112 {0.8, 4.6336, 4.7072, 4.7837, 4.9463, 5.1233, 5.3169, 5.5300, 5.7661},
1113 {1.0, 5.2041, 5.2845, 5.3682, 5.5462, 5.7400, 5.9523, 6.1863, 6.4458},
1114 {1.2, 5.6182, 5.7044, 5.7940, 5.9848, 6.1927, 6.4206, 6.6719, 6.9510},
1115 {1.4, 5.9967, 6.0876, 6.1823, 6.3839, 6.6038, 6.8451, 7.1113, 7.4071},
1116 {1.5, 6.1652, 6.2583, 6.3553, 6.5618, 6.7871, 7.0344, 7.3073, 7.6107},
1117 {1.7, 6.4686, 6.5657, 6.6668, 6.8823, 7.1175, 7.3757, 7.6609, 7.9782},
1118 {2.0, 6.8577, 6.9600, 7.0666, 7.2937, 7.5418, 7.8143, 8.1156, 8.4510},
1119 {3.0, 7.7981, 7.9134, 8.0336, 8.2901, 8.5708, 8.8796, 9.2214, 9.6027},
1120 {5.0, 8.8978, 9.0297, 9.1673, 9.4612, 9.7834, 10.1384, 10.5323, 10.9722},
1121 {7.0, 9.4819, 9.6248, 9.7739, 10.0926, 10.4423, 10.8282, 11.2565, 11.7356}
1122 };
1123
1124 const G4double bll1[28][10] = {
1125 {0.005, 3.6324E-5, 4.0609E-5, 4.5430E-5, 5.6969E-5, 7.1625E-5, 9.0279E-5, 1.1407E-4, 1.2834E-4, 1.4447E-4},
1126 {0.007, 1.8110E-4, 2.0001E-4, 2.2099E-4, 2.7006E-4, 3.3049E-4, 4.0498E-4, 4.9688E-4, 5.5061E-4, 6.1032E-4},
1127 {0.01, 8.6524E-4, 9.4223E-4, 1.0262E-3, 1.2178E-3, 1.4459E-3, 1.7174E-3, 2.0405E-3, 2.2245E-3, 2.4252E-3},
1128 {0.015, 4.2293E-3, 4.5314E-3, 4.8551E-3, 5.5731E-3, 6.3968E-3, 7.3414E-3, 8.4242E-3, 9.0236E-3, 9.6652E-3},
1129 {0.02, 1.1485E-2, 1.2172E-2, 1.2900E-2, 1.4486E-2, 1.6264E-2, 1.8256E-2, 2.0487E-2, 2.1702E-2, 2.2989E-2},
1130 {0.03, 3.9471E-2, 4.1270E-2, 4.3149E-2, 4.7163E-2, 5.1543E-2, 5.6423E-2, 6.1540E-2, 6.4326E-2, 6.7237E-2},
1131 {0.04, 8.4454E-2, 8.7599E-2, 9.0860E-2, 9.7747E-2, 1.0516E-1, 1.1313E-1, 1.2171E-1, 1.2625E-1, 1.3096E-1},
1132 {0.05, 1.4339E-1, 1.4795E-1, 1.5266E-1, 1.6253E-1, 1.7306E-1, 1.8430E-1, 1.9630E-1, 2.0261E-1, 2.0924E-1},
1133 {0.06, 2.1304E-1, 2.1899E-1, 2.2512E-1, 2.3794E-1, 2.5153E-1, 2.6596E-1, 2.8130E-1, 2.8934E-1, 2.9763E-1},
1134 {0.08, 3.7382E-1, 3.8241E-1, 3.9122E-1, 4.0955E-1, 4.2888E-1, 4.4928E-1, 4.7086E-1, 4.8212E-1, 4.9371E-1},
1135 {0.1, 5.5056E-1, 5.6151E-1, 5.7273E-1, 5.9601E-1, 6.2049E-1, 6.4627E-1, 6.7346E-1, 6.8762E-1, 7.0218E-1},
1136 {0.15, 1.0066, 1.0224, 1.0386, 1.0721, 1.1073, 1.1443, 1.1832, 1.2035, 1.2243},
1137 {0.2, 1.4376, 1.4572, 1.4773, 1.5188, 1.5624, 1.6083, 1.6566, 1.6817, 1.7076},
1138 {0.3, 2.1712, 2.1964, 2.2223, 2.2758, 2.3322, 2.3915, 2.4542, 2.4869, 2.5205},
1139 {0.4, 2.7500, 2.7793, 2.8094, 2.8719, 2.9377, 3.0072, 3.0807, 3.1192, 3.1587},
1140 {0.5, 3.2033, 3.2359, 3.2693, 3.3389, 3.4122, 3.4898, 3.5721, 3.6151, 3.6595},
1141 {0.6, 3.6038, 3.6391, 3.6753, 3.7506, 3.8303, 3.9146, 4.0042, 4.0511, 4.0995},
1142 {0.7, 3.9106, 3.9482, 3.9867, 4.0670, 4.1520, 4.2421, 4.3380, 4.3882, 4.4401},
1143 {0.8, 4.1790, 4.2185, 4.2590, 4.3437, 4.4333, 4.5285, 4.6298, 4.6830, 4.7380},
1144 {1.0, 4.6344, 4.6772, 4.7212, 4.8131, 4.9106, 5.0144, 5.1250, 5.1831, 5.2432},
1145 {1.2, 4.9787, 5.0242, 5.0711, 5.1689, 5.2729, 5.3837, 5.5050, 5.5642, 5.6287},
1146 {1.4, 5.2688, 5.3166, 5.3658, 5.4687, 5.5782, 5.6950, 5.8198, 5.8855, 5.9554},
1147 {1.5, 5.3966, 5.4454, 5.4957, 5.6009, 5.7128, 5.8323, 5.9601, 6.0274, 6.0972},
1148 {1.7, 5.6255, 5.6762, 5.7284, 5.8377, 5.9541, 6.0785, 6.2116, 6.2818, 6.3546},
1149 {2.0, 5.9170, 5.9701, 6.0248, 6.1395, 6.2618, 6.3925, 6.5327, 6.6066, 6.6833},
1150 {3.0, 6.6210, 6.6801, 6.7411, 6.8692, 7.0062, 7.1529, 7.3107, 7.3941, 7.4807},
1151 {5.0, 7.4620, 7.5288, 7.5977, 7.7428, 7.8982, 8.0653, 8.2454, 8.3409, 8.4402},
1152 {7.0, 7.7362, 7.8079, 7.8821, 8.0383, 8.2061, 8.3866, 8.5816, 8.6850, 8.7927}
1153 };
1154
1155 const G4double bll2[28][10] = {
1156 {0.005, 1.8339E-4, 2.3330E-4, 2.9738E-4, 3.7977E-4, 4.2945E-4, 4.8582E-4, 6.2244E-4, 7.9858E-4, 1.0258E-3},
1157 {0.007, 7.5042E-4, 9.2355E-4, 1.1375E-3, 1.4021E-3, 1.5570E-3, 1.7292E-3, 2.1335E-3, 2.6335E-3, 3.2515E-3},
1158 {0.01, 2.8829E-3, 3.4275E-3, 4.0758E-3, 4.8457E-3, 5.2839E-3, 5.7617E-3, 6.8504E-3, 8.1442E-3, 9.6816E-3},
1159 {0.015, 1.1087E-2, 1.2716E-2, 1.4581E-2, 1.6717E-2, 1.7898E-2, 1.9163E-2, 2.1964E-2, 2.5173E-2, 2.8851E-2},
1160 {0.02, 2.5786E-2, 2.8922E-2, 3.2435E-2, 3.6371E-2, 3.8514E-2, 4.0784E-2, 4.5733E-2, 5.1288E-2, 5.7531E-2},
1161 {0.03, 7.3461E-2, 8.0264E-2, 8.7705E-2, 9.5852E-2, 1.0021E-1, 1.0478E-1, 1.1458E-1, 1.2535E-1, 1.3721E-1},
1162 {0.04, 1.4094E-1, 1.5172E-1, 1.6336E-1, 1.7596E-1, 1.8265E-1, 1.8962E-1, 2.0445E-1, 2.2058E-1, 2.3818E-1},
1163 {0.05, 2.2289E-1, 2.3762E-1, 2.5344E-1, 2.7045E-1, 2.7944E-1, 2.8877E-1, 3.0855E-1, 3.2995E-1, 3.5318E-1},
1164 {0.06, 3.1503E-1, 3.3361E-1, 3.5346E-1, 3.7473E-1, 3.8594E-1, 3.9756E-1, 4.2212E-1, 4.4861E-1, 4.7727E-1},
1165 {0.08, 5.1793E-1, 5.4368E-1, 5.7109E-1, 6.0032E-1, 6.1569E-1, 6.3159E-1, 6.6512E-1, 7.0119E-1, 7.4012E-1},
1166 {0.1, 7.3258E-1, 7.6481E-1, 7.9907E-1, 8.3556E-1, 8.5472E-1, 8.7454E-1, 9.1630E-1, 9.6119E-1, 1.0096},
1167 {0.15, 1.2677, 1.3137, 1.3626, 1.4147, 1.4421, 1.4703, 1.5300, 1.5942, 1.6636},
1168 {0.2, 1.7615, 1.8188, 1.8797, 1.9446, 1.9788, 2.0142, 2.0889, 2.1694, 2.2567},
1169 {0.3, 2.5909, 2.6658, 2.7457, 2.8312, 2.8762, 2.9231, 3.0222, 3.1295, 3.2463},
1170 {0.4, 3.2417, 3.3302, 3.4249, 3.5266, 3.5803, 3.6361, 3.7546, 3.8835, 4.0242},
1171 {0.5, 3.7527, 3.8523, 3.9591, 4.0741, 4.1350, 4.1983, 4.3330, 4.4799, 4.6408},
1172 {0.6, 4.2013, 4.3103, 4.4274, 4.5537, 4.6206, 4.6904, 4.8390, 5.0013, 5.1796},
1173 {0.7, 4.5493, 4.6664, 4.7925, 4.9286, 5.0009, 5.0762, 5.2370, 5.4129, 5.6066},
1174 {0.8, 4.8537, 4.9780, 5.1119, 5.2568, 5.3338, 5.4141, 5.5857, 5.7738, 5.9811},
1175 {1.0, 5.3701, 5.5066, 5.6540, 5.8138, 5.8989, 5.9878, 6.1780, 6.3870, 6.6179},
1176 {1.2, 5.7648, 5.9114, 6.0701, 6.2424, 6.3343, 6.4303, 6.6361, 6.8626, 7.1137},
1177 {1.4, 6.0976, 6.2530, 6.4214, 6.6044, 6.7021, 6.8043, 7.0237, 7.2655, 7.5338},
1178 {1.5, 6.2447, 6.4041, 6.5768, 6.7647, 6.8650, 6.9700, 7.1954, 7.4442, 7.7203},
1179 {1.7, 6.5087, 6.6752, 6.8558, 7.0526, 7.1578, 7.2679, 7.5045, 7.7660, 8.0565},
1180 {2.0, 6.8458, 7.0218, 7.2129, 7.4213, 7.5328, 7.6496, 7.9010, 8.1791, 8.4886},
1181 {3.0, 7.6647, 7.8644, 8.0819, 8.3189, 8.4475, 8.5814, 8.8702, 9.1908, 9.5488},
1182 {5.0, 8.6515, 8.8816, 9.1330, 9.4090, 9.5572, 9.7132, 10.0504, 10.4259, 10.8466},
1183 {7.0, 9.0221, 9.2724, 9.5464, 9.8477, 10.0099, 10.1805, 10.5499, 10.9622, 11.4250}
1184 };
1185
1186 const G4double bll3[28][9] = {
1187 {0.005, 1.3190E-3, 1.4961E-3, 1.6974E-3, 2.1858E-3, 2.8163E-3, 3.6302E-3, 4.6814E-3, 6.0395E-3},
1188 {0.007, 4.0158E-3, 4.4623E-3, 4.9592E-3, 6.1257E-3, 7.5675E-3, 9.3502E-3, 1.1556E-2, 1.4290E-2},
1189 {0.01, 1.1509E-2, 1.2548E-2, 1.3681E-2, 1.6263E-2, 1.9336E-2, 2.2999E-2, 2.7370E-2, 3.2603E-2},
1190 {0.015, 3.3070E-2, 3.5408E-2, 3.7914E-2, 4.3483E-2, 4.9898E-2, 5.7304E-2, 6.5884E-2, 7.5861E-2},
1191 {0.02, 6.4555E-2, 6.8394E-2, 7.2472E-2, 8.1413E-2, 9.1539E-2, 1.0304E-1, 1.1617E-1, 1.3121E-1},
1192 {0.03, 1.5030E-1, 1.5101E-1, 1.5844E-1, 1.7451E-1, 1.9244E-1, 2.1244E-1, 2.3496E-1, 2.6044E-1},
1193 {0.04, 2.5743E-1, 2.6774E-1, 2.7855E-1, 3.0180E-1, 3.2751E-1, 3.5608E-1, 3.8803E-1, 4.2401E-1},
1194 {0.05, 3.7846E-1, 3.9195E-1, 4.0607E-1, 4.3635E-1, 4.6973E-1, 5.0672E-1, 5.4798E-1, 5.9436E-1},
1195 {0.06, 5.0839E-1, 5.2497E-1, 5.4230E-1, 5.7943E-1, 6.2028E-1, 6.6549E-1, 7.1589E-1, 7.7252E-1},
1196 {0.08, 7.8230E-1, 8.0474E-1, 8.2818E-1, 8.7836E-1, 9.3355E-1, 9.9462E-1, 1.0627, 1.1394},
1197 {0.1, 1.0621, 1.0900, 1.1192, 1.1816, 1.2503, 1.3265, 1.4116, 1.5076},
1198 {0.15, 1.7389, 1.7790, 1.8210, 1.9112, 2.0108, 2.1217, 2.2462, 2.3876},
1199 {0.2, 2.3516, 2.4024, 2.4556, 2.5701, 2.6971, 2.8391, 2.9994, 3.1822},
1200 {0.3, 3.3741, 3.4427, 3.5148, 3.6706, 3.8445, 4.0404, 4.2631, 4.5193},
1201 {0.4, 4.1788, 4.2620, 4.3496, 4.5398, 4.7530, 4.9944, 5.2703, 5.5895},
1202 {0.5, 4.8180, 4.9137, 5.0146, 5.2341, 5.4811, 5.7618, 6.0840, 6.4583},
1203 {0.6, 5.3765, 5.4830, 5.5954, 5.8406, 6.1173, 6.4326, 6.7958, 7.2191},
1204 {0.7, 5.8208, 5.9369, 6.0596, 6.3275, 6.6306, 6.9769, 7.3767, 7.8440},
1205 {0.8, 6.2109, 6.3355, 6.4674, 6.7558, 7.0827, 7.4570, 7.8900, 8.3972},
1206 {1.0, 6.8747, 7.0142, 7.1621, 7.4861, 7.8546, 8.2778, 8.7690, 9.3464},
1207 {1.2, 7.3933, 7.5454, 7.7068, 8.0612, 8.4652, 8.9302, 9.4713, 10.1090},
1208 {1.4, 7.8331, 7.9967, 8.1694, 8.5502, 8.9851, 9.4866, 10.0713, 10.7619},
1209 {1.5, 8.0286, 8.1967, 8.3753, 8.7681, 9.2181, 9.7352, 10.3399, 11.0546},
1210 {1.7, 8.3813, 8.5585, 8.7469, 9.1618, 9.6367, 10.1856, 10.8270, 11.5863},
1211 {2.0, 8.8352, 9.0245, 9.2260, 9.6701, 10.1793, 10.7688, 11.4590, 12.2775},
1212 {3.0, 9.9511, 10.1714, 10.4062, 10.9254, 11.5229, 12.2172, 13.0332, 14.0048},
1213 {5.0, 11.3211, 11.5818, 11.8601, 12.4771, 13.1898, 14.0213, 15.0024, 16.1752},
1214 {7.0, 11.9480, 12.2357, 12.5432, 13.2260, 14.0164, 14.9404, 16.0330, 17.3420}
1215 };
1216
1217 G4double b, bs;
1218 for(i=0; i<nEtaK; ++i) {
1219
1220 G4double et = Eta[i];
1221 G4double loget = G4Log(et);
1222
1223 for(j=0; j<nK; ++j) {
1224
1225 if(j < 10) { b = bk2[i][10-j]; }
1226 else { b = bk1[i][20-j]; }
1227
1228 CK[j][i] = SK[j]*loget + TK[j] - b;
1229
1230 if(i == nEtaK-1) {
1231 ZK[j] = et*(et*et*CK[j][i] - et*UK[j] - VK[j]);
1232 //G4cout << "i= " << i << " j= " << j
1233 // << " CK[j][i]= " << CK[j][i]
1234 // << " ZK[j]= " << ZK[j] << " b= " << b << G4endl;
1235 }
1236 }
1237 //G4cout << G4endl;
1238 if(i < nEtaL) {
1239 //G4cout << " LShell:" <<G4endl;
1240 for(j=0; j<nL; ++j) {
1241
1242 if(j < 8) {
1243 bs = bls3[i][8-j];
1244 b = bll3[i][8-j];
1245 } else if(j < 17) {
1246 bs = bls2[i][17-j];
1247 b = bll2[i][17-j];
1248 } else {
1249 bs = bls1[i][26-j];
1250 b = bll1[i][26-j];
1251 }
1252 G4double c = SL[j]*loget + TL[j];
1253 CL[j][i] = c - bs - 3.0*b;
1254 if(i == nEtaL-1) {
1255 VL[j] = et*(et*CL[j][i] - UL[j]);
1256 //G4cout << "i= " << i << " j= " << j
1257 // << " CL[j][i]= " << CL[j][i]
1258 // << " VL[j]= " << VL[j] << " b= " << b << " bs= " << bs
1259 // << " et= " << et << G4endl;
1260 //" UL= " << UL[j] << " TL= " << TL[j] << " SL= " << SL[j] <<G4endl;
1261 }
1262 }
1263 //G4cout << G4endl;
1264 }
1265 }
1266
1267 const G4double xzk[34] = { 11.7711,
1268 13.3669, 15.5762, 17.1715, 18.7667, 20.8523, 23.0606, 24.901, 26.9861, 29.4394, 31.77,
1269 34.3457, 37.4119, 40.3555, 42.3177, 44.7705, 47.2234, 50.78, 53.8458, 56.4214, 58.3834,
1270 60.9586, 63.6567, 66.5998, 68.807, 71.8728, 74.5706, 77.3911, 81.8056, 85.7297, 89.8988,
1271 93.4549, 96.2753, 99.709};
1272 const G4double yzk[34] = { 0.70663,
1273 0.72033, 0.73651, 0.74647, 0.75518, 0.76388, 0.77258, 0.78129, 0.78625, 0.7937, 0.79991,
1274 0.80611, 0.8123, 0.8185, 0.82097, 0.82467, 0.82838, 0.83457, 0.83702, 0.84198, 0.8432,
1275 0.84565, 0.84936, 0.85181, 0.85303, 0.85548, 0.85794, 0.8604, 0.86283, 0.86527, 0.86646,
1276 0.86891, 0.87011, 0.87381};
1277
1278 const G4double xzl[36] = { 15.5102,
1279 16.7347, 17.9592, 19.551, 21.0204, 22.6122, 24.9388, 27.3878, 29.5918, 31.3061, 32.898,
1280 34.4898, 36.2041, 38.4082, 40.3674, 42.5714, 44.898, 47.4694, 49.9184, 52.7347, 55.9184,
1281 59.3469, 61.9184, 64.6122, 67.4286, 71.4694, 75.2653, 78.3265, 81.2653, 85.551, 88.7347,
1282 91.551, 94.2449, 96.449, 98.4082, 99.7551};
1283 const G4double yzl[36] = { 0.29875,
1284 0.31746, 0.33368, 0.35239, 0.36985, 0.38732, 0.41102, 0.43472, 0.45343, 0.4659, 0.47713,
1285 0.4896, 0.50083, 0.51331, 0.52328, 0.53077, 0.54075, 0.54823, 0.55572, 0.56445, 0.57193,
1286 0.58191, 0.5869, 0.59189, 0.60062, 0.60686, 0.61435, 0.61809, 0.62183, 0.62931, 0.6343,
1287 0.6368, 0.64054, 0.64304, 0.64428, 0.64678};
1288
1289 sThetaK = new G4PhysicsFreeVector(34, false);
1290 for(i=0; i<34; ++i) { sThetaK->PutValues(i, xzk[i], yzk[i]); }
1291 sThetaL = new G4PhysicsFreeVector(36, false);
1292 for(i=0; i<36; ++i) { sThetaL->PutValues(i, xzl[i], yzl[i]); }
1293}
1294
1295//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
1296
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:180
G4double G4Log(G4double x)
Definition G4Log.hh:227
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
const G4double A[17]
const G4double alpha2
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb)
static G4int GetNumberOfShells(G4int Z)
G4double HighOrderCorrections(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy, const G4double cutEnergy)
G4double ShellCorrectionSTD(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double SpinCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
void AddStoppingData(const G4int Z, const G4int A, const G4String &materialName, G4PhysicsVector *dVector)
G4double IonHighOrderCorrections(const G4ParticleDefinition *, const G4MaterialCutsCouple *, const G4double kineticEnergy)
G4double MottCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy, const G4bool isInitialized=false)
G4double BlochCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy, const G4bool isInitialized=false)
G4double BarkasCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy, const G4bool isInitialized=false)
G4double DensityCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double ComputeIonCorrections(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double Bethe(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double KShellCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double EffectiveChargeCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double LShellCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double ShellCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4double IonBarkasCorrection(const G4ParticleDefinition *, const G4Material *, const G4double kineticEnergy)
G4EmCorrections(G4int verb)
static G4GenericIon * GenericIon()
G4double GetMdensity() const
G4double GetX1density() const
G4double * GetShellCorrectionVector() const
G4double GetTaul() const
G4double GetX0density() const
G4double GetCdensity() const
G4double GetMeanExcitationEnergy() const
G4double GetAdensity() const
const G4Material * GetMaterial() const
const G4ElementVector * GetElementVector() const
G4double GetTotNbOfAtomsPerVolume() const
G4IonisParamMat * GetIonisation() const
const G4double * GetAtomicNumDensityVector() const
G4double GetElectronDensity() const
std::size_t GetNumberOfElements() const
const G4String & GetName() const
G4int GetAtomicNumber() const
const G4String & GetParticleName() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
void PutValues(const std::size_t index, const G4double energy, const G4double value)
G4double Energy(const std::size_t index) const
G4double Value(const G4double energy, std::size_t &lastidx) const
static G4Pow * GetInstance()
Definition G4Pow.cc:41
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
G4double EffectiveCharge(const G4ParticleDefinition *p, const G4Material *material, G4double kineticEnergy)
G4double EffectiveChargeSquareRatio(const G4ParticleDefinition *p, const G4Material *material, G4double kineticEnergy)
#define W
Definition crc32.c:85
int G4lrint(double ad)
Definition templates.hh:134