49 G4Exception(
"G4ecpssrLCrossSection::G4ecpssrBaseLixsModel()",
"em0006",
FatalException ,
"G4LEDATA environment variable not set");
52 std::ostringstream fileName1;
53 std::ostringstream fileName2;
55 fileName1 << path <<
"/pixe/uf/FL1.dat";
56 fileName2 << path <<
"/pixe/uf/FL2.dat";
59 std::ifstream FL1(fileName1.str().c_str());
60 if (!FL1)
G4Exception(
"G4ecpssrLCrossSection::G4ecpssrBaseLixsModel()",
"em0003",
FatalException,
"error opening FL1 data file");
62 dummyVec1.push_back(0.);
72 if (x1 != dummyVec1.back())
74 dummyVec1.push_back(x1);
75 aVecMap1[x1].push_back(-1.);
80 if (y1 != aVecMap1[x1].back()) aVecMap1[x1].push_back(y1);
85 std::ifstream FL2(fileName2.str().c_str());
86 if (!FL2)
G4Exception(
"G4ecpssrLCrossSection::G4ecpssrBaseLixsModel()",
"em0003",
FatalException,
" error opening FL2 data file");
88 dummyVec2.push_back(0.);
98 if (x2 != dummyVec2.back())
100 dummyVec2.push_back(x2);
101 aVecMap2[x2].push_back(-1.);
104 FL2>>FL2Data[x2][y2];
106 if (y2 != aVecMap2[x2].back()) aVecMap2[x2].push_back(y2);
133 static const G4double euler= 0.5772156649;
134 static const G4int maxit= 100;
135 static const G4double fpmin = 1.0e-30;
138 if (n<0 || x<0.0 || (x==0.0 && (n==0 || n==1)))
139 G4cout <<
"*** WARNING in G4ecpssrBaseLixsModel::ExpIntFunction: bad arguments in ExpIntFunction"
142 if (n==0) ans=
G4Exp(-x)/x;
144 if (x==0.0) ans=1.0/nm1;
151 for (i=1;i<=maxit;i++) {
158 if (std::fabs(del-1.0) < eps) {
164 ans = (nm1!=0 ? 1.0/nm1 : -std::log(x)-euler);
166 for (i=1;i<=maxit;i++) {
168 if (i !=nm1) del = -fact/(i-nm1);
171 for (ii=1;ii<=nm1;ii++) psi +=1.0/ii;
172 del=fact*(-std::log(x)+psi);
175 if (std::fabs(del) < std::fabs(ans)*eps)
return ans;
189 if (zTarget <=4)
return 0.;
214 G4cout <<
"*** WARNING in G4ecpssrBaseLixsModel::CalculateL1CrossSection : Proton or Alpha incident particles only. " <<
G4endl;
222 G4double systemMass =((massIncident*massTarget)/(massIncident+massTarget))/electron_mass_c2;
223 static const G4double zlshell= 4.15;
225 G4double screenedzTarget = zTarget-zlshell;
226 static const G4double rydbergMeV= 13.6056923e-6;
230 G4double tetal1 = (l1BindingEnergy*nl*nl)/((screenedzTarget*screenedzTarget)*rydbergMeV);
233 if (verboseLevel>0)
G4cout <<
" tetal1=" << tetal1<<
G4endl;
235 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
239 static const G4double bohrPow2Barn=(Bohr_radius*Bohr_radius)/barn ;
241 G4double sigma0 = 8.*pi*(zIncident*zIncident)*bohrPow2Barn*std::pow(screenedzTarget,-4.);
247 if (verboseLevel>0)
G4cout <<
" velocityl1=" << velocityl1<<
G4endl;
249 static const G4double l1AnalyticalApproximation= 1.5;
250 G4double x1 =(nl*l1AnalyticalApproximation)/velocityl1;
256 G4double electrIonizationEnergyl1=0.;
261 if ( x1<=0.035) electrIonizationEnergyl1= 0.75*pi*(std::log(1./(x1*x1))-1.);
265 electrIonizationEnergyl1 =
G4Exp(-2.*x1)/(0.031+(0.213*std::pow(x1,0.5))+(0.005*x1)-(0.069*std::pow(x1,3./2.))+(0.324*x1*x1));
267 {
if ( x1<=11.) electrIonizationEnergyl1 =2.*
G4Exp(-2.*x1)/std::pow(x1,1.6);}
270 G4double hFunctionl1 =(electrIonizationEnergyl1*2.*nl)/(tetal1*std::pow(velocityl1,3));
273 if (verboseLevel>0)
G4cout <<
" hFunctionl1=" << hFunctionl1<<
G4endl;
275 G4double gFunctionl1 = (1.+(9.*velocityl1)+(31.*velocityl1*velocityl1)+(49.*std::pow(velocityl1,3.))+(162.*std::pow(velocityl1,4.))+(63.*std::pow(velocityl1,5.))+(18.*std::pow(velocityl1,6.))+(1.97*std::pow(velocityl1,7.)))/std::pow(1.+velocityl1,9.);
278 if (verboseLevel>0)
G4cout <<
" gFunctionl1=" << gFunctionl1<<
G4endl;
280 G4double sigmaPSS_l1 = 1.+(((2.*zIncident)/(screenedzTarget*tetal1))*(gFunctionl1-hFunctionl1));
285 if (verboseLevel>0)
G4cout <<
"sigmaPSS_l1 =" << sigmaPSS_l1<<
G4endl;
289 G4double yl1Formula=0.4*(screenedzTarget/cNaturalUnit)*(screenedzTarget/cNaturalUnit)/(nl*velocityl1/sigmaPSS_l1);
294 G4double l1relativityCorrection = std::pow((1.+(1.1*yl1Formula*yl1Formula)),0.5)+yl1Formula;
308 if ( velocityl1 <20. )
311 L1etaOverTheta2 =(reducedEnergy* l1relativityCorrection)/((tetal1*sigmaPSS_l1)*(tetal1*sigmaPSS_l1));
317 if ( ((tetal1*sigmaPSS_l1) >=0.2) && ((tetal1*sigmaPSS_l1) <=2.6670) && (L1etaOverTheta2>=0.1e-3) && (L1etaOverTheta2<=0.866e2) )
318 universalFunction_l1 = FunctionFL1((tetal1*sigmaPSS_l1),L1etaOverTheta2);
320 if (verboseLevel>0)
G4cout <<
"at low velocity range, universalFunction_l1 =" << universalFunction_l1 <<
G4endl;
322 sigmaPSSR_l1 = (sigma0/(tetal1*sigmaPSS_l1))*universalFunction_l1;
325 if (verboseLevel>0)
G4cout <<
" at low velocity range, sigma PWBA L1 CS = " << sigmaPSSR_l1<<
G4endl;
329 L1etaOverTheta2 = reducedEnergy/(tetal1*tetal1);
335 if ( (tetal1 >=0.2) && (tetal1 <=2.6670) && (L1etaOverTheta2>=0.1e-3) && (L1etaOverTheta2<=0.866e2) )
336 universalFunction_l1 = FunctionFL1(tetal1,L1etaOverTheta2);
338 if (verboseLevel>0)
G4cout <<
"at medium and high velocity range, universalFunction_l1 =" << universalFunction_l1 <<
G4endl;
340 sigmaPSSR_l1 = (sigma0/tetal1)*universalFunction_l1;
343 if (verboseLevel>0)
G4cout <<
" sigma PWBA L1 CS at medium and high velocity range = " << sigmaPSSR_l1<<
G4endl;
346 G4double pssDeltal1 = (4./(systemMass *sigmaPSS_l1*tetal1))*(sigmaPSS_l1/velocityl1)*(sigmaPSS_l1/velocityl1);
350 if (verboseLevel>0)
G4cout <<
" pssDeltal1=" << pssDeltal1<<
G4endl;
352 if (pssDeltal1>1)
return 0.;
354 G4double energyLossl1 = std::pow(1-pssDeltal1,0.5);
358 if (verboseLevel>0)
G4cout <<
" energyLossl1=" << energyLossl1<<
G4endl;
361 (8.*pi*zIncident/systemMass)*std::pow(tetal1*sigmaPSS_l1,-2.)*std::pow(velocityl1/sigmaPSS_l1,-3.)*(zTarget/screenedzTarget);
365 G4double cParameterl1 =2.* coulombDeflectionl1/(energyLossl1*(energyLossl1+1.));
370 if (verboseLevel>0)
G4cout <<
" coulombDeflectionFunction_l1 =" << coulombDeflectionFunction_l1 <<
G4endl;
372 G4double crossSection_L1 = coulombDeflectionFunction_l1 * sigmaPSSR_l1;
377 if (verboseLevel>0)
G4cout <<
" crossSection_L1 =" << crossSection_L1 <<
G4endl;
379 if (crossSection_L1 >= 0)
381 return crossSection_L1 * barn;
392 if (zTarget <=13 )
return 0.;
416 G4cout <<
"*** WARNING in G4ecpssrBaseLixsModel::CalculateL2CrossSection : Proton or Alpha incident particles only. " <<
G4endl;
426 G4double systemMass =((massIncident*massTarget)/(massIncident+massTarget))/electron_mass_c2;
430 G4double screenedzTarget = zTarget-zlshell;
432 const G4double rydbergMeV= 13.6056923e-6;
436 G4double tetal2 = (l2BindingEnergy*nl*nl)/((screenedzTarget*screenedzTarget)*rydbergMeV);
438 if (verboseLevel>0)
G4cout <<
" tetal2=" << tetal2<<
G4endl;
440 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
442 const G4double bohrPow2Barn=(Bohr_radius*Bohr_radius)/barn ;
444 G4double sigma0 = 8.*pi*(zIncident*zIncident)*bohrPow2Barn*std::pow(screenedzTarget,-4.);
448 if (verboseLevel>0)
G4cout <<
" velocityl2=" << velocityl2<<
G4endl;
450 const G4double l23AnalyticalApproximation= 1.25;
452 G4double x2 = (nl*l23AnalyticalApproximation)/velocityl2;
456 G4double electrIonizationEnergyl2=0.;
458 if ( x2<=0.035) electrIonizationEnergyl2= 0.75*pi*(std::log(1./(x2*x2))-1.);
462 electrIonizationEnergyl2 =
G4Exp(-2.*x2)/(0.031+(0.213*std::pow(x2,0.5))+(0.005*x2)-(0.069*std::pow(x2,3./2.))+(0.324*x2*x2));
464 {
if ( x2<=11.) electrIonizationEnergyl2 =2.*
G4Exp(-2.*x2)/std::pow(x2,1.6); }
467 G4double hFunctionl2 =(electrIonizationEnergyl2*2.*nl)/(tetal2*std::pow(velocityl2,3));
469 if (verboseLevel>0)
G4cout <<
" hFunctionl2=" << hFunctionl2<<
G4endl;
471 G4double gFunctionl2 = (1.+(10.*velocityl2)+(45.*velocityl2*velocityl2)+(102.*std::pow(velocityl2,3.))+(331.*std::pow(velocityl2,4.))+(6.7*std::pow(velocityl2,5.))+(58.*std::pow(velocityl2,6.))+(7.8*std::pow(velocityl2,7.))+ (0.888*std::pow(velocityl2,8.)) )/std::pow(1.+velocityl2,10.);
474 if (verboseLevel>0)
G4cout <<
" gFunctionl2=" << gFunctionl2<<
G4endl;
476 G4double sigmaPSS_l2 = 1.+(((2.*zIncident)/(screenedzTarget*tetal2))*(gFunctionl2-hFunctionl2));
478 if (verboseLevel>0)
G4cout <<
" sigmaPSS_l2=" << sigmaPSS_l2<<
G4endl;
482 G4double yl2Formula=0.15*(screenedzTarget/cNaturalUnit)*(screenedzTarget/cNaturalUnit)/(velocityl2/sigmaPSS_l2);
484 G4double l2relativityCorrection = std::pow((1.+(1.1*yl2Formula*yl2Formula)),0.5)+yl2Formula;
492 if ( velocityl2 < 20. )
495 L2etaOverTheta2 = (reducedEnergy*l2relativityCorrection)/((sigmaPSS_l2*tetal2)*(sigmaPSS_l2*tetal2));
497 if ( (tetal2*sigmaPSS_l2>=0.2) && (tetal2*sigmaPSS_l2<=2.6670) && (L2etaOverTheta2>=0.1e-3) && (L2etaOverTheta2<=0.866e2) )
498 universalFunction_l2 = FunctionFL2((tetal2*sigmaPSS_l2),L2etaOverTheta2);
500 sigmaPSSR_l2 = (sigma0/(tetal2*sigmaPSS_l2))*universalFunction_l2;
502 if (verboseLevel>0)
G4cout <<
" sigma PWBA L2 CS at low velocity range = " << sigmaPSSR_l2<<
G4endl;
507 L2etaOverTheta2 = reducedEnergy /(tetal2*tetal2);
509 if ( (tetal2>=0.2) && (tetal2<=2.6670) && (L2etaOverTheta2>=0.1e-3) && (L2etaOverTheta2<=0.866e2) )
510 universalFunction_l2 = FunctionFL2((tetal2),L2etaOverTheta2);
512 sigmaPSSR_l2 = (sigma0/tetal2)*universalFunction_l2;
514 if (verboseLevel>0)
G4cout <<
" sigma PWBA L2 CS at medium and high velocity range = " << sigmaPSSR_l2<<
G4endl;
518 G4double pssDeltal2 = (4./(systemMass*sigmaPSS_l2*tetal2))*(sigmaPSS_l2/velocityl2)*(sigmaPSS_l2/velocityl2);
520 if (pssDeltal2>1)
return 0.;
522 G4double energyLossl2 = std::pow(1-pssDeltal2,0.5);
524 if (verboseLevel>0)
G4cout <<
" energyLossl2=" << energyLossl2<<
G4endl;
527 =(8.*pi*zIncident/systemMass)*std::pow(tetal2*sigmaPSS_l2,-2.)*std::pow(velocityl2/sigmaPSS_l2,-3.)*(zTarget/screenedzTarget);
529 G4double cParameterl2 = 2.*coulombDeflectionl2/(energyLossl2*(energyLossl2+1.));
534 if (verboseLevel>0)
G4cout <<
" coulombDeflectionFunction_l2 =" << coulombDeflectionFunction_l2 <<
G4endl;
536 G4double crossSection_L2 = coulombDeflectionFunction_l2 * sigmaPSSR_l2;
540 if (verboseLevel>0)
G4cout <<
" crossSection_L2 =" << crossSection_L2 <<
G4endl;
542 if (crossSection_L2 >= 0)
544 return crossSection_L2 * barn;
555 if (zTarget <=13)
return 0.;
581 G4cout <<
"*** WARNING in G4ecpssrBaseLixsModel::CalculateL3CrossSection : Proton or Alpha incident particles only. " <<
G4endl;
591 G4double systemMass =((massIncident*massTarget)/(massIncident+massTarget))/electron_mass_c2;
595 G4double screenedzTarget = zTarget-zlshell;
597 const G4double rydbergMeV= 13.6056923e-6;
601 G4double tetal3 = (l3BindingEnergy*nl*nl)/((screenedzTarget*screenedzTarget)*rydbergMeV);
603 if (verboseLevel>0)
G4cout <<
" tetal3=" << tetal3<<
G4endl;
605 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
607 const G4double bohrPow2Barn=(Bohr_radius*Bohr_radius)/barn ;
609 G4double sigma0 = 8.*pi*(zIncident*zIncident)*bohrPow2Barn*std::pow(screenedzTarget,-4.);
613 if (verboseLevel>0)
G4cout <<
" velocityl3=" << velocityl3<<
G4endl;
615 const G4double l23AnalyticalApproximation= 1.25;
617 G4double x3 = (nl*l23AnalyticalApproximation)/velocityl3;
621 G4double electrIonizationEnergyl3=0.;
623 if ( x3<=0.035) electrIonizationEnergyl3= 0.75*pi*(std::log(1./(x3*x3))-1.);
626 if ( x3<=3.) electrIonizationEnergyl3 =
G4Exp(-2.*x3)/(0.031+(0.213*std::pow(x3,0.5))+(0.005*x3)-(0.069*std::pow(x3,3./2.))+(0.324*x3*x3));
629 if ( x3<=11.) electrIonizationEnergyl3 =2.*
G4Exp(-2.*x3)/std::pow(x3,1.6);}
632 G4double hFunctionl3 =(electrIonizationEnergyl3*2.*nl)/(tetal3*std::pow(velocityl3,3));
634 if (verboseLevel>0)
G4cout <<
" hFunctionl3=" << hFunctionl3<<
G4endl;
636 G4double gFunctionl3 = (1.+(10.*velocityl3)+(45.*velocityl3*velocityl3)+(102.*std::pow(velocityl3,3.))+(331.*std::pow(velocityl3,4.))+(6.7*std::pow(velocityl3,5.))+(58.*std::pow(velocityl3,6.))+(7.8*std::pow(velocityl3,7.))+ (0.888*std::pow(velocityl3,8.)) )/std::pow(1.+velocityl3,10.);
639 if (verboseLevel>0)
G4cout <<
" gFunctionl3=" << gFunctionl3<<
G4endl;
641 G4double sigmaPSS_l3 = 1.+(((2.*zIncident)/(screenedzTarget*tetal3))*(gFunctionl3-hFunctionl3));
643 if (verboseLevel>0)
G4cout <<
"sigmaPSS_l3 =" << sigmaPSS_l3<<
G4endl;
647 G4double yl3Formula=0.15*(screenedzTarget/cNaturalUnit)*(screenedzTarget/cNaturalUnit)/(velocityl3/sigmaPSS_l3);
649 G4double l3relativityCorrection = std::pow((1.+(1.1*yl3Formula*yl3Formula)),0.5)+yl3Formula;
657 if ( velocityl3 < 20. )
660 L3etaOverTheta2 = (reducedEnergy* l3relativityCorrection)/((sigmaPSS_l3*tetal3)*(sigmaPSS_l3*tetal3));
662 if ( (tetal3*sigmaPSS_l3>=0.2) && (tetal3*sigmaPSS_l3<=2.6670) && (L3etaOverTheta2>=0.1e-3) && (L3etaOverTheta2<=0.866e2) )
664 universalFunction_l3 = 2.*FunctionFL2((tetal3*sigmaPSS_l3), L3etaOverTheta2 );
666 sigmaPSSR_l3 = (sigma0/(tetal3*sigmaPSS_l3))*universalFunction_l3;
668 if (verboseLevel>0)
G4cout <<
" sigma PWBA L3 CS at low velocity range = " << sigmaPSSR_l3<<
G4endl;
676 L3etaOverTheta2 = reducedEnergy/(tetal3*tetal3);
678 if ( (tetal3>=0.2) && (tetal3<=2.6670) && (L3etaOverTheta2>=0.1e-3) && (L3etaOverTheta2<=0.866e2) )
680 universalFunction_l3 = 2.*FunctionFL2(tetal3, L3etaOverTheta2 );
682 sigmaPSSR_l3 = (sigma0/tetal3)*universalFunction_l3;
684 if (verboseLevel>0)
G4cout <<
" sigma PWBA L3 CS at medium and high velocity range = " << sigmaPSSR_l3<<
G4endl;
687 G4double pssDeltal3 = (4./(systemMass*sigmaPSS_l3*tetal3))*(sigmaPSS_l3/velocityl3)*(sigmaPSS_l3/velocityl3);
689 if (verboseLevel>0)
G4cout <<
" pssDeltal3=" << pssDeltal3<<
G4endl;
691 if (pssDeltal3>1)
return 0.;
693 G4double energyLossl3 = std::pow(1-pssDeltal3,0.5);
695 if (verboseLevel>0)
G4cout <<
" energyLossl3=" << energyLossl3<<
G4endl;
698 (8.*pi*zIncident/systemMass)*std::pow(tetal3*sigmaPSS_l3,-2.)*std::pow(velocityl3/sigmaPSS_l3,-3.)*(zTarget/screenedzTarget);
700 G4double cParameterl3 = 2.*coulombDeflectionl3/(energyLossl3*(energyLossl3+1.));
705 if (verboseLevel>0)
G4cout <<
" coulombDeflectionFunction_l3 =" << coulombDeflectionFunction_l3 <<
G4endl;
707 G4double crossSection_L3 = coulombDeflectionFunction_l3 * sigmaPSSR_l3;
711 if (verboseLevel>0)
G4cout <<
" crossSection_L3 =" << crossSection_L3 <<
G4endl;
713 if (crossSection_L3 >= 0)
715 return crossSection_L3 * barn;
735 G4cout <<
"*** WARNING in G4ecpssrBaseLixsModel::CalculateVelocity : Proton or Alpha incident particles only. " <<
G4endl;
742 G4double screenedzTarget = zTarget- zlshell;
744 constexpr G4double rydbergMeV= 13.6056923e-6;
748 G4double tetali = (liBindingEnergy*nl*nl)/(screenedzTarget*screenedzTarget*rydbergMeV);
750 G4double reducedEnergy = (energyIncident*electron_mass_c2)/(massIncident*rydbergMeV*screenedzTarget*screenedzTarget);
752 G4double velocity = 2.*nl*std::pow(reducedEnergy,0.5)/tetali;
796 auto t2 = std::upper_bound(dummyVec1.begin(),dummyVec1.end(), k);
799 auto e12 = std::upper_bound(aVecMap1[(*t1)].begin(),aVecMap1[(*t1)].end(), theta);
802 auto e22 = std::upper_bound(aVecMap1[(*t2)].begin(),aVecMap1[(*t2)].end(), theta);
812 xs11 = FL1Data[valueT1][valueE11];
813 xs12 = FL1Data[valueT1][valueE12];
814 xs21 = FL1Data[valueT2][valueE21];
815 xs22 = FL1Data[valueT2][valueE22];
831 G4double xsProduct = xs11 * xs12 * xs21 * xs22;
833 if (xs11==0 || xs12==0 ||xs21==0 ||xs22==0)
return (0.);
837 sigma = QuadInterpolator( valueE11, valueE12,
887 auto t2 = std::upper_bound(dummyVec2.begin(),dummyVec2.end(), k);
889 auto e12 = std::upper_bound(aVecMap2[(*t1)].begin(),aVecMap2[(*t1)].end(), theta);
891 auto e22 = std::upper_bound(aVecMap2[(*t2)].begin(),aVecMap2[(*t2)].end(), theta);
901 xs11 = FL2Data[valueT1][valueE11];
902 xs12 = FL2Data[valueT1][valueE12];
903 xs21 = FL2Data[valueT2][valueE21];
904 xs22 = FL2Data[valueT2][valueE22];
920 G4double xsProduct = xs11 * xs12 * xs21 * xs22;
922 if (xs11==0 || xs12==0 ||xs21==0 ||xs22==0)
return (0.);
926 sigma = QuadInterpolator( valueE11, valueE12,
945 G4double value = xs1 + (xs2 - xs1)*(e - e1)/ (e2 - e1);
971 G4double a = (std::log10(xs2)-std::log10(xs1)) / (std::log10(e2)-std::log10(e1));
972 G4double b = std::log10(xs2) - a*std::log10(e2);
973 G4double sigma = a*std::log10(e) + b;
974 G4double value = (std::pow(10.,sigma));
988 G4double interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12);
989 G4double interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22);
990 G4double value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2);
const char * G4FindDataDir(const char *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4GLOB_DLL std::ostream G4cout
G4double BindingEnergy() const
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
static G4AtomicTransitionManager * Instance()
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetPDGMass() const
G4double GetPDGCharge() const
static G4Proton * Proton()
G4double CalculateL1CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override
G4double ExpIntFunction(G4int n, G4double x)
G4double CalculateVelocity(G4int subShell, G4int zTarget, G4double massIncident, G4double energyIncident)
G4double CalculateL3CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override
G4double CalculateL2CrossSection(G4int zTarget, G4double massIncident, G4double energyIncident) override