49 fLowerLimit(10*
MeV), fRadiusEff(0.0), fRadiusNN2(0.0),
50 fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0),
51 fAntiHadronNucleonTotXsc(0.0), fAntiHadronNucleonElXsc(0.0),
52 Elab(0.0), S(0.0), SqrtS(0)
89 G4double xsection, sigmaTotal, sigmaElastic;
93 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
94 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
97 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*
pi) ;
109 fRadiusEff = 1.34*std::pow(A,0.23)+1.35/std::pow(A,1./3.);
111 if( (Z==1) && (A==2) ) fRadiusEff = 3.800;
112 if( (Z==1) && (A==3) ) fRadiusEff = 3.300;
113 if( (Z==2) && (A==3) ) fRadiusEff = 3.300;
114 if( (Z==2) && (A==4) ) fRadiusEff = 2.376;
118 if (theParticle == theADeuteron)
119 { fRadiusEff = 1.46 * std::pow(A,0.21) + 1.45 / std::pow(A,1./3.);
121 if( (Z==1) && (A==2) ) fRadiusEff = 3.238;
122 if( (Z==1) && (A==3) ) fRadiusEff = 3.144;
123 if( (Z==2) && (A==3) ) fRadiusEff = 3.144;
124 if( (Z==2) && (A==4) ) fRadiusEff = 2.544;
128 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
129 { fRadiusEff = 1.40* std::pow(A,0.21)+1.63/std::pow(A,1./3.);
131 if( (Z==1) && (A==2) ) fRadiusEff = 3.144;
132 if( (Z==1) && (A==3) ) fRadiusEff = 3.075;
133 if( (Z==2) && (A==3) ) fRadiusEff = 3.075;
134 if( (Z==2) && (A==4) ) fRadiusEff = 2.589;
139 if (theParticle == theAAlpha)
141 fRadiusEff = 1.35* std::pow(A,0.21)+1.1/std::pow(A,1./3.);
143 if( (Z==1) && (A==2) ) fRadiusEff = 2.544;
144 if( (Z==1) && (A==3) ) fRadiusEff = 2.589;
145 if( (Z==2) && (A==3) ) fRadiusEff = 2.589;
146 if( (Z==2) && (A==4) ) fRadiusEff = 2.241;
150 G4double R2 = fRadiusEff*fRadiusEff;
154 xsection = 2*
pi*REf2*10.*std::log(1+(ApAt*sigmaTotal/(2*
pi*REf2*10.)));
156 fTotalXsc = xsection;
168 {
return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (
G4double) A); }
177 G4double inelxsection, sigmaTotal, sigmaElastic;
181 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
182 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
185 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*
pi);
195 { fInelasticXsc = (sigmaTotal - sigmaElastic) *
millibarn;
196 return fInelasticXsc;
198 fRadiusEff = 1.31*std::pow(A, 0.22)+0.9/std::pow(A, 1./3.);
200 if( (Z==1) && (A==2) ) fRadiusEff = 3.582;
201 if( (Z==1) && (A==3) ) fRadiusEff = 3.105;
202 if( (Z==2) && (A==3) ) fRadiusEff = 3.105;
203 if( (Z==2) && (A==4) ) fRadiusEff = 2.209;
208 if (theParticle ==theADeuteron)
210 fRadiusEff = 1.38*std::pow(A, 0.21)+1.55/std::pow(A, 1./3.);
212 if( (Z==1) && (A==2) ) fRadiusEff = 3.169;
213 if( (Z==1) && (A==3) ) fRadiusEff = 3.066;
214 if( (Z==2) && (A==3) ) fRadiusEff = 3.066;
215 if( (Z==2) && (A==4) ) fRadiusEff = 2.498;
220 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
222 fRadiusEff = 1.34 * std::pow(A, 0.21)+1.51/std::pow(A, 1./3.);
224 if( (Z==1) && (A==2) ) fRadiusEff = 3.066;
225 if( (Z==1) && (A==3) ) fRadiusEff = 2.973;
226 if( (Z==2) && (A==3) ) fRadiusEff = 2.973;
227 if( (Z==2) && (A==4) ) fRadiusEff = 2.508;
233 if (theParticle == theAAlpha)
235 fRadiusEff = 1.3*std::pow(A, 0.21)+1.05/std::pow(A, 1./3.);
237 if( (Z==1) && (A==2) ) fRadiusEff = 2.498;
238 if( (Z==1) && (A==3) ) fRadiusEff = 2.508;
239 if( (Z==2) && (A==3) ) fRadiusEff = 2.508;
240 if( (Z==2) && (A==4) ) fRadiusEff = 2.158;
242 G4double R2 = fRadiusEff*fRadiusEff;
246 inelxsection =
pi*REf2 *10* std::log(1+(ApAt*sigmaTotal/(
pi*REf2*10.)));
248 fInelasticXsc = inelxsection;
249 return fInelasticXsc;
258 {
return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (
G4double) A); }
269 fElasticXsc = GetTotalElementCrossSection(aParticle, kinEnergy, Z, A)-
270 GetInelasticElementCrossSection(aParticle, kinEnergy, Z, A);
272 if (fElasticXsc < 0.) fElasticXsc = 0.;
283 {
return GetElasticElementCrossSection(aParticle, kinEnergy, Z, (
G4double) A); }
292 G4double xsection, Pmass, Energy, momentum;
295 Energy=Pmass+kinEnergy;
296 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->
GetBaryonNumber());
302 Elab = std::sqrt(Mn*Mn + Plab*Plab);
303 S = 2.*Mn*Mn + 2. *Mn*Elab;
304 SqrtS = std::sqrt(S);
306 B = b0+b2*std::log(SqrtS/SqrtS0)*std::log(SqrtS/SqrtS0);
307 SigAss = 36.04 +0.304*std::log(S/S0)*std::log(S/S0);
308 R0 = std::sqrt(0.40874044*SigAss - B);
314 xsection = SigAss*(1 + 1./(std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
315 *C* (1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
319 fAntiHadronNucleonTotXsc = xsection;
320 return fAntiHadronNucleonTotXsc;
338 SigAss = 4.5 + 0.101*std::log(S/S0)*std::log(S/S0);
345 xsection = SigAss* (1 + 1. / (std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
346 *C* ( 1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
350 fAntiHadronNucleonElXsc = xsection;
351 return fAntiHadronNucleonElXsc;
356 outFile <<
"The G4ComponentAntiNuclNuclearXS calculates total,\n"
357 <<
"inelastic, elastic cross sections of anti-nucleons and light \n"
358 <<
"anti-nucleus interactions with nuclei using Glauber's approach.\n"
359 <<
"It uses parametrizations of antiproton-proton total and elastic \n"
360 <<
"cross sections and Wood-Saxon distribution of nuclear density.\n"
361 <<
"The lower limit is 10 MeV, the upper limit is 10 TeV. \n"
362 <<
"See details in Phys.Lett. B705 (2011) 235. \n";