50 fRadiusEff(0.0), fRadiusNN2(0.0),
51 fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0),
52 fAntiHadronNucleonTotXsc(0.0), fAntiHadronNucleonElXsc(0.0),
53 Elab(0.0), S(0.0), SqrtS(0)
90 G4double xsection, sigmaTotal, sigmaElastic;
94 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
95 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
98 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*
pi) ;
110 fRadiusEff = 1.34*std::pow(A,0.23)+1.35/std::pow(A,1./3.);
112 if( (Z==1) && (A==2) ) fRadiusEff = 3.800;
113 if( (Z==1) && (A==3) ) fRadiusEff = 3.300;
114 if( (Z==2) && (A==3) ) fRadiusEff = 3.300;
115 if( (Z==2) && (A==4) ) fRadiusEff = 2.376;
119 if (theParticle == theADeuteron)
120 { fRadiusEff = 1.46 * std::pow(A,0.21) + 1.45 / std::pow(A,1./3.);
122 if( (Z==1) && (A==2) ) fRadiusEff = 3.238;
123 if( (Z==1) && (A==3) ) fRadiusEff = 3.144;
124 if( (Z==2) && (A==3) ) fRadiusEff = 3.144;
125 if( (Z==2) && (A==4) ) fRadiusEff = 2.544;
129 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
130 { fRadiusEff = 1.40* std::pow(A,0.21)+1.63/std::pow(A,1./3.);
132 if( (Z==1) && (A==2) ) fRadiusEff = 3.144;
133 if( (Z==1) && (A==3) ) fRadiusEff = 3.075;
134 if( (Z==2) && (A==3) ) fRadiusEff = 3.075;
135 if( (Z==2) && (A==4) ) fRadiusEff = 2.589;
140 if (theParticle == theAAlpha)
142 fRadiusEff = 1.35* std::pow(A,0.21)+1.1/std::pow(A,1./3.);
144 if( (Z==1) && (A==2) ) fRadiusEff = 2.544;
145 if( (Z==1) && (A==3) ) fRadiusEff = 2.589;
146 if( (Z==2) && (A==3) ) fRadiusEff = 2.589;
147 if( (Z==2) && (A==4) ) fRadiusEff = 2.241;
151 G4double R2 = fRadiusEff*fRadiusEff;
155 xsection = 2*
pi*REf2*10.*std::log(1+(ApAt*sigmaTotal/(2*
pi*REf2*10.)));
157 fTotalXsc = xsection;
169 {
return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (
G4double) A); }
178 G4double inelxsection, sigmaTotal, sigmaElastic;
182 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
183 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
186 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*
pi);
196 { fInelasticXsc = (sigmaTotal - sigmaElastic) *
millibarn;
197 return fInelasticXsc;
199 fRadiusEff = 1.31*std::pow(A, 0.22)+0.9/std::pow(A, 1./3.);
201 if( (Z==1) && (A==2) ) fRadiusEff = 3.582;
202 if( (Z==1) && (A==3) ) fRadiusEff = 3.105;
203 if( (Z==2) && (A==3) ) fRadiusEff = 3.105;
204 if( (Z==2) && (A==4) ) fRadiusEff = 2.209;
209 if (theParticle ==theADeuteron)
211 fRadiusEff = 1.38*std::pow(A, 0.21)+1.55/std::pow(A, 1./3.);
213 if( (Z==1) && (A==2) ) fRadiusEff = 3.169;
214 if( (Z==1) && (A==3) ) fRadiusEff = 3.066;
215 if( (Z==2) && (A==3) ) fRadiusEff = 3.066;
216 if( (Z==2) && (A==4) ) fRadiusEff = 2.498;
221 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
223 fRadiusEff = 1.34 * std::pow(A, 0.21)+1.51/std::pow(A, 1./3.);
225 if( (Z==1) && (A==2) ) fRadiusEff = 3.066;
226 if( (Z==1) && (A==3) ) fRadiusEff = 2.973;
227 if( (Z==2) && (A==3) ) fRadiusEff = 2.973;
228 if( (Z==2) && (A==4) ) fRadiusEff = 2.508;
234 if (theParticle == theAAlpha)
236 fRadiusEff = 1.3*std::pow(A, 0.21)+1.05/std::pow(A, 1./3.);
238 if( (Z==1) && (A==2) ) fRadiusEff = 2.498;
239 if( (Z==1) && (A==3) ) fRadiusEff = 2.508;
240 if( (Z==2) && (A==3) ) fRadiusEff = 2.508;
241 if( (Z==2) && (A==4) ) fRadiusEff = 2.158;
243 G4double R2 = fRadiusEff*fRadiusEff;
247 inelxsection =
pi*REf2 *10* std::log(1+(ApAt*sigmaTotal/(
pi*REf2*10.)));
249 fInelasticXsc = inelxsection;
250 return fInelasticXsc;
259 {
return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (
G4double) A); }
270 fElasticXsc = GetTotalElementCrossSection(aParticle, kinEnergy, Z, A)-
271 GetInelasticElementCrossSection(aParticle, kinEnergy, Z, A);
273 if (fElasticXsc < 0.) fElasticXsc = 0.;
284 {
return GetElasticElementCrossSection(aParticle, kinEnergy, Z, (
G4double) A); }
293 G4double xsection, Pmass, Energy, momentum;
296 Energy=Pmass+kinEnergy;
297 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->
GetBaryonNumber());
303 Elab = std::sqrt(Mn*Mn + Plab*Plab);
304 S = 2.*Mn*Mn + 2. *Mn*Elab;
305 SqrtS = std::sqrt(S);
307 B = b0+b2*std::log(SqrtS/SqrtS0)*std::log(SqrtS/SqrtS0);
308 SigAss = 36.04 +0.304*std::log(S/S0)*std::log(S/S0);
309 R0 = std::sqrt(0.40874044*SigAss - B);
315 xsection = SigAss*(1 + 1./(std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
316 *C* (1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
320 fAntiHadronNucleonTotXsc = xsection;
321 return fAntiHadronNucleonTotXsc;
339 SigAss = 4.5 + 0.101*std::log(S/S0)*std::log(S/S0);
346 xsection = SigAss* (1 + 1. / (std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
347 *C* ( 1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
351 fAntiHadronNucleonElXsc = xsection;
352 return fAntiHadronNucleonElXsc;
357 outFile <<
"The G4ComponentAntiNuclNuclearXS calculates total,\n"
358 <<
"inelastic, elastic cross sections of anti-nucleons and light \n"
359 <<
"anti-nucleus interactions with nuclei using Glauber's approach.\n"
360 <<
"It uses parametrizations of antiproton-proton total and elastic \n"
361 <<
"cross sections and Wood-Saxon distribution of nuclear density.\n"
362 <<
"The lower limit is 10 MeV, the upper limit is 10 TeV. \n"
363 <<
"See details in Phys.Lett. B705 (2011) 235. \n";
static G4AntiHe3 * AntiHe3()
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
static G4AntiDeuteron * AntiDeuteron()
virtual G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
static G4AntiAlpha * AntiAlpha()
virtual ~G4ComponentAntiNuclNuclearXS()
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
virtual void CrossSectionDescription(std::ostream &) const
static G4AntiProton * AntiProton()
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4double GetPDGMass() const
virtual G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
virtual G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
G4ComponentAntiNuclNuclearXS()
static G4AntiTriton * AntiTriton()
static G4AntiNeutron * AntiNeutron()
virtual G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
G4int GetBaryonNumber() const