52 fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0),
53 fAntiHadronNucleonTotXsc(0.0), fAntiHadronNucleonElXsc(0.0),
54 Elab(0.0),
S(0.0), SqrtS(0)
85 if ( aParticle ==
nullptr ) {
87 ed <<
"anti-nucleus with nullptr particle definition: " << aParticle <<
G4endl;
88 G4Exception(
"G4ComponentAntiNuclNuclearXS::GetTotalElementCrossSection",
98 if ( theParticle == theAProton ||
99 theParticle == theANeutron ) { i=0; }
100 else if ( theParticle == theADeuteron ) { i=1; }
101 else if ( theParticle == theATriton ) { i=2; }
102 else if ( theParticle == theAHe3 ) { i=3; }
103 else if ( theParticle == theAAlpha ) { i=4; }
109 <<
"Target (Z, A)=(" << Z <<
"," <<
A <<
")" <<
G4endl;
110 G4Exception(
"G4ComponentAntiNuclNuclearXS::GetTotalElementCrossSection",
116 if ( Z == 1 && intA == 1 ) { j=0; }
117 else if ( Z == 1 && intA == 2 ) { j=1; }
118 else if ( Z == 1 && intA == 3 ) { j=2; }
119 else if ( Z == 2 && intA == 3 ) { j=3; }
120 else if ( Z == 2 && intA == 4 ) { j=4; }
123 if ( i < 0 && j >= 0 ) { fRadiusEff = ReffTot[4][j]; }
124 if ( i == 0 && j == 0 )
return sigmaTotal * millibarn;
125 if ( i >= 0 && j >= 0 ) { fRadiusEff = ReffTot[i][j]; }
128 if ( i == 0 ) { fRadiusEff = 1.34 * theG4Pow->
powZ(intA, 0.23)
129 + 1.35 / theG4Pow->
Z13(intA); }
130 else if ( i == 1 ) { fRadiusEff = 1.46 * theG4Pow->
powZ(intA, 0.21)
131 + 1.45 / theG4Pow->
Z13(intA); }
132 else if ( i == 2 ) { fRadiusEff = 1.40 * theG4Pow->
powZ(intA, 0.21)
133 + 1.63 / theG4Pow->
Z13(intA); }
134 else if ( i == 3 ) { fRadiusEff = 1.40 * theG4Pow->
powZ(intA, 0.21)
135 + 1.63 / theG4Pow->
Z13(intA); }
136 else if ( i == 4 ) { fRadiusEff = 1.35 * theG4Pow->
powZ(intA, 0.21)
137 + 1.10 / theG4Pow->
Z13(intA); }
138 else if ( i < 0 ) { fRadiusEff = 1.35 * theG4Pow->
powZ(intA, 0.21)
139 + 1.10 / theG4Pow->
Z13(intA); }
143 G4double R2 = fRadiusEff*fRadiusEff;
146 G4double xsection = millibarn*2.*pi*R2*10.*
G4Log(1.+(ApAt*sigmaTotal/(2.*pi*R2*10.)));
147 fTotalXsc = xsection;
170 if ( aParticle ==
nullptr ) {
172 ed <<
"anti-nucleus with nullptr particle definition: " << aParticle <<
G4endl;
173 G4Exception(
"G4ComponentAntiNuclNuclearXS::GetInelasticElementCrossSection",
184 if ( theParticle == theAProton ||
185 theParticle == theANeutron ) { i=0; }
186 else if ( theParticle == theADeuteron ) { i=1; }
187 else if ( theParticle == theATriton ) { i=2; }
188 else if ( theParticle == theAHe3 ) { i=3; }
189 else if ( theParticle == theAAlpha ) { i=4; }
195 <<
"Target (Z, A)=(" << Z <<
"," <<
A <<
")" <<
G4endl;
196 G4Exception(
"G4ComponentAntiNuclNuclearXS::GetInelasticElementCrossSection",
202 if ( Z == 1 && intA == 1 ) { j=0; }
203 else if ( Z == 1 && intA == 2 ) { j=1; }
204 else if ( Z == 1 && intA == 3 ) { j=2; }
205 else if ( Z == 2 && intA == 3 ) { j=3; }
206 else if ( Z == 2 && intA == 4 ) { j=4; }
209 if ( i < 0 && j >= 0 ) { fRadiusEff = ReffInel[4][j]; }
210 if ( i == 0 && j == 0 )
return (sigmaTotal - sigmaElastic) * millibarn;
211 if ( i >= 0 && j >= 0 ) { fRadiusEff = ReffInel[i][j]; }
214 if ( i == 0 ) { fRadiusEff = 1.31*theG4Pow->
powZ(intA, 0.22)
215 + 0.90/theG4Pow->
Z13(intA); }
216 else if ( i == 1 ) { fRadiusEff = 1.38*theG4Pow->
powZ(intA, 0.21)
217 + 1.55/theG4Pow->
Z13(intA); }
218 else if ( i == 2 ) { fRadiusEff = 1.34*theG4Pow->
powZ(intA, 0.21)
219 + 1.51/theG4Pow->
Z13(intA); }
220 else if ( i == 3 ) { fRadiusEff = 1.34*theG4Pow->
powZ(intA, 0.21)
221 + 1.51/theG4Pow->
Z13(intA); }
222 else if ( i == 4 ) { fRadiusEff = 1.30*theG4Pow->
powZ(intA, 0.21)
223 + 1.05/theG4Pow->
Z13(intA); }
224 else if ( i < 0 ) { fRadiusEff = 1.30*theG4Pow->
powZ(intA,0.21)
225 + 1.05/theG4Pow->
Z13(intA); }
229 G4double R2 = fRadiusEff*fRadiusEff;
232 G4double inelxsection = millibarn*pi*R2*10.*
G4Log(1.+(ApAt*sigmaTotal/(pi*R2*10.)));
233 fInelasticXsc = inelxsection;
235 return fInelasticXsc;
259 if (fElasticXsc < 0.) fElasticXsc = 0.;
281 G4double xsection, Pmass, Energy, momentum;
284 Energy=Pmass+kinEnergy;
285 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->
GetBaryonNumber());
290 Elab = std::sqrt(Mn*Mn + Plab*Plab);
291 S = 2.*Mn*Mn + 2. *Mn*Elab;
292 SqrtS = std::sqrt(S);
294 SigAss = 36.04 +0.304*
G4Log(S/S0)*
G4Log(S/S0);
295 R0 = std::sqrt(0.40874044*SigAss -
B);
301 xsection = SigAss * ( 1 + 1./(std::sqrt(S-4.*Mn*Mn)) / (theG4Pow->
powN(R0, 3))
302 *
C * ( 1 + d1/SqrtS + d2/(theG4Pow->
powN(SqrtS, 2))
303 + d3/(theG4Pow->
powN(SqrtS, 3)) ) );
306 fAntiHadronNucleonTotXsc = xsection;
308 return fAntiHadronNucleonTotXsc;
321 GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
328 xsection = SigAss * ( 1 + 1. / (std::sqrt(
S-4.*Mn*Mn)) / (theG4Pow->powN(R0, 3))
329 *
C * ( 1 + d1/SqrtS + d2/(theG4Pow->powN(SqrtS, 2))
330 + d3/(theG4Pow->powN(SqrtS, 3)) ) );
333 fAntiHadronNucleonElXsc = xsection;
335 return fAntiHadronNucleonElXsc;
343 outFile <<
"The G4ComponentAntiNuclNuclearXS calculates total,\n"
344 <<
"inelastic, elastic cross sections of anti-nucleons and light \n"
345 <<
"anti-nucleus interactions with nuclei using Glauber's approach.\n"
346 <<
"It uses parametrizations of antiproton-proton total and elastic \n"
347 <<
"cross sections and Wood-Saxon distribution of nuclear density.\n"
348 <<
"See details in Phys.Lett. B705 (2011) 235. \n";
G4double C(G4double temp)
G4double S(G4double temp)
G4double B(G4double temperature)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Log(G4double x)
static G4AntiAlpha * AntiAlpha()
static G4AntiDeuteron * AntiDeuteron()
static G4AntiHe3 * AntiHe3()
static G4AntiNeutron * AntiNeutron()
static G4AntiProton * AntiProton()
static G4AntiTriton * AntiTriton()
virtual G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
virtual G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
virtual void CrossSectionDescription(std::ostream &) const
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4ComponentAntiNuclNuclearXS()
virtual G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
virtual G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
virtual ~G4ComponentAntiNuclNuclearXS()
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
G4double GetPDGMass() const
G4bool IsAntiHypernucleus() const
G4int GetBaryonNumber() const
const G4String & GetParticleName() const
G4double powZ(G4int Z, G4double y) const
G4double powN(G4double x, G4int n) const
G4double Z13(G4int Z) const