Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ComponentAntiNuclNuclearXS Class Reference

#include <G4ComponentAntiNuclNuclearXS.hh>

+ Inheritance diagram for G4ComponentAntiNuclNuclearXS:

Public Member Functions

 G4ComponentAntiNuclNuclearXS ()
 
virtual ~G4ComponentAntiNuclNuclearXS ()
 
virtual G4double GetTotalIsotopeCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
 
virtual G4double GetTotalElementCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
 
virtual G4double GetInelasticIsotopeCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
 
virtual G4double GetInelasticElementCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
 
virtual G4double GetElasticElementCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
 
virtual G4double GetElasticIsotopeCrossSection (const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4int A)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
G4double GetAntiHadronNucleonTotCrSc (const G4ParticleDefinition *aParticle, G4double kinEnergy)
 
G4double GetAntiHadronNucleonElCrSc (const G4ParticleDefinition *aParticle, G4double kinEnergy)
 
- Public Member Functions inherited from G4VComponentCrossSection
 G4VComponentCrossSection (const G4String &nam="")
 
virtual ~G4VComponentCrossSection ()
 
G4double GetTotalElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
virtual G4double GetTotalElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4double)=0
 
virtual G4double GetTotalIsotopeCrossSection (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)=0
 
G4double GetInelasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
virtual G4double GetInelasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4double)=0
 
virtual G4double GetInelasticIsotopeCrossSection (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)=0
 
G4double GetElasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
virtual G4double GetElasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4double)=0
 
virtual G4double GetElasticIsotopeCrossSection (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)=0
 
virtual G4double ComputeQuasiElasticRatio (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void Description (std::ostream &) const
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
const G4StringGetName () const
 

Detailed Description

Definition at line 59 of file G4ComponentAntiNuclNuclearXS.hh.

Constructor & Destructor Documentation

◆ G4ComponentAntiNuclNuclearXS()

G4ComponentAntiNuclNuclearXS::G4ComponentAntiNuclNuclearXS ( )

Definition at line 49 of file G4ComponentAntiNuclNuclearXS.cc.

50: G4VComponentCrossSection("AntiAGlauber"),
51 fRadiusEff(0.0),
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)
55{
56 theAProton = G4AntiProton::AntiProton();
57 theANeutron = G4AntiNeutron::AntiNeutron();
58 theADeuteron = G4AntiDeuteron::AntiDeuteron();
59 theATriton = G4AntiTriton::AntiTriton();
60 theAAlpha = G4AntiAlpha::AntiAlpha();
61 theAHe3 = G4AntiHe3::AntiHe3();
62 Mn = 0.93827231; // GeV
63 b0 = 11.92; // GeV^(-2)
64 b2 = 0.3036; // GeV^(-2)
65 SqrtS0 = 20.74; // GeV
66 S0 = 33.0625; // GeV^2
67 R0 = 1.0; // default value (V.Ivanchenko)
68}
static G4AntiAlpha * AntiAlpha()
Definition: G4AntiAlpha.cc:88
static G4AntiDeuteron * AntiDeuteron()
static G4AntiHe3 * AntiHe3()
Definition: G4AntiHe3.cc:93
static G4AntiNeutron * AntiNeutron()
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:92
static G4AntiTriton * AntiTriton()
Definition: G4AntiTriton.cc:93

◆ ~G4ComponentAntiNuclNuclearXS()

G4ComponentAntiNuclNuclearXS::~G4ComponentAntiNuclNuclearXS ( )
virtual

Definition at line 73 of file G4ComponentAntiNuclNuclearXS.cc.

74{
75}

Member Function Documentation

◆ BuildPhysicsTable()

virtual void G4ComponentAntiNuclNuclearXS::BuildPhysicsTable ( const G4ParticleDefinition )
inlinevirtual

Reimplemented from G4VComponentCrossSection.

Definition at line 76 of file G4ComponentAntiNuclNuclearXS.hh.

76{}

◆ CrossSectionDescription()

void G4ComponentAntiNuclNuclearXS::CrossSectionDescription ( std::ostream &  outFile) const
virtual

Definition at line 341 of file G4ComponentAntiNuclNuclearXS.cc.

342{
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";
349}

◆ DumpPhysicsTable()

virtual void G4ComponentAntiNuclNuclearXS::DumpPhysicsTable ( const G4ParticleDefinition )
inlinevirtual

Reimplemented from G4VComponentCrossSection.

Definition at line 77 of file G4ComponentAntiNuclNuclearXS.hh.

77{}

◆ GetAntiHadronNucleonElCrSc()

G4double G4ComponentAntiNuclNuclearXS::GetAntiHadronNucleonElCrSc ( const G4ParticleDefinition aParticle,
G4double  kinEnergy 
)

Definition at line 315 of file G4ComponentAntiNuclNuclearXS.cc.

317{
318 G4double xsection;
319 G4double SigAss;
320 G4double C, d1, d2, d3;
321 GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
322 SigAss = 4.5 + 0.101*G4Log(S/S0)*G4Log(S/S0); //mb
323 C = 59.27;
324 d1 = -6.95;
325 d2 = 23.54;
326 d3 = -25.34;
327
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)) ) );
331
332 //xsection *= millibarn;
333 fAntiHadronNucleonElXsc = xsection;
334
335 return fAntiHadronNucleonElXsc;
336}
G4double G4Log(G4double x)
Definition: G4Log.hh:227
double G4double
Definition: G4Types.hh:83
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
G4double powN(G4double x, G4int n) const
Definition: G4Pow.cc:162

Referenced by GetInelasticElementCrossSection().

◆ GetAntiHadronNucleonTotCrSc()

G4double G4ComponentAntiNuclNuclearXS::GetAntiHadronNucleonTotCrSc ( const G4ParticleDefinition aParticle,
G4double  kinEnergy 
)

Definition at line 278 of file G4ComponentAntiNuclNuclearXS.cc.

280{
281 G4double xsection, Pmass, Energy, momentum;
282 const G4ParticleDefinition* theParticle = aParticle;
283 Pmass=theParticle->GetPDGMass();
284 Energy=Pmass+kinEnergy;
285 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->GetBaryonNumber());
286 G4double Plab = momentum / GeV;
287
288 G4double B, SigAss;
289 G4double C, d1, d2, d3;
290 Elab = std::sqrt(Mn*Mn + Plab*Plab); // GeV
291 S = 2.*Mn*Mn + 2. *Mn*Elab; // GeV^2
292 SqrtS = std::sqrt(S); // GeV
293 B = b0+b2*G4Log(SqrtS/SqrtS0)*G4Log(SqrtS/SqrtS0); //GeV^(-2)
294 SigAss = 36.04 +0.304*G4Log(S/S0)*G4Log(S/S0); //mb
295 R0 = std::sqrt(0.40874044*SigAss - B); //GeV^(-2)
296 C = 13.55;
297 d1 = -4.47;
298 d2 = 12.38;
299 d3 = -12.43;
300
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)) ) );
304
305 //xsection *= millibarn;
306 fAntiHadronNucleonTotXsc = xsection;
307
308 return fAntiHadronNucleonTotXsc;
309}
G4double B(G4double temperature)

Referenced by GetInelasticElementCrossSection(), GetTotalElementCrossSection(), and G4AntiNuclElastic::SampleInvariantT().

◆ GetElasticElementCrossSection()

G4double G4ComponentAntiNuclNuclearXS::GetElasticElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 254 of file G4ComponentAntiNuclNuclearXS.cc.

256{
257 fElasticXsc = GetTotalElementCrossSection(aParticle, kinEnergy, Z, A)-
258 GetInelasticElementCrossSection(aParticle, kinEnergy, Z, A);
259 if (fElasticXsc < 0.) fElasticXsc = 0.;
260 return fElasticXsc;
261}
const G4int Z[17]
const G4double A[17]
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
virtual G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)

Referenced by GetElasticIsotopeCrossSection(), and G4AntiNuclElastic::SampleInvariantT().

◆ GetElasticIsotopeCrossSection()

G4double G4ComponentAntiNuclNuclearXS::GetElasticIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 268 of file G4ComponentAntiNuclNuclearXS.cc.

270{
271 return GetElasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A);
272}
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)

◆ GetInelasticElementCrossSection()

G4double G4ComponentAntiNuclNuclearXS::GetInelasticElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 167 of file G4ComponentAntiNuclNuclearXS.cc.

169{
170 if ( aParticle == nullptr ) {
172 ed << "anti-nucleus with nullptr particle definition: " << aParticle << G4endl;
173 G4Exception( "G4ComponentAntiNuclNuclearXS::GetInelasticElementCrossSection",
174 "antiNuclNuclearXS003", JustWarning, ed );
175 return 0.0;
176 }
177
178 const G4ParticleDefinition* theParticle = aParticle;
179 G4double sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
180 G4double sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
181
182 // calculation of sqr of radius NN-collision
183 G4int i(-1), j(-1);
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; }
190 else {};
191
192 if ( i < 0 && ( ! theParticle->IsAntiHypernucleus() ) ) {
194 ed << "Unknown anti-nucleus : " << theParticle->GetParticleName() << G4endl
195 << "Target (Z, A)=(" << Z << "," << A << ")" << G4endl;
196 G4Exception( "G4ComponentAntiNuclNuclearXS::GetInelasticElementCrossSection",
197 "antiNuclNuclearXS004", JustWarning, ed );
198 }
199
200 G4int intA = static_cast<G4int>( A );
201
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; }
207 else {}
208
209 if ( i < 0 && j >= 0 ) { fRadiusEff = ReffInel[4][j]; } // Treat all anti-hypernuclei as anti-alpha
210 if ( i == 0 && j == 0 ) return (sigmaTotal - sigmaElastic) * millibarn; // Pbar/Nbar + P
211 if ( i >= 0 && j >= 0 ) { fRadiusEff = ReffInel[i][j]; } // Light anti-nuclei + Light nuclei
212
213 if ( j < 0) {
214 if ( i == 0 ) { fRadiusEff = 1.31*theG4Pow->powZ(intA, 0.22) // Anti-proton/Anti-neutron + Nucleus
215 + 0.90/theG4Pow->Z13(intA); }
216 else if ( i == 1 ) { fRadiusEff = 1.38*theG4Pow->powZ(intA, 0.21) // Anti-deuteron + Nucleus
217 + 1.55/theG4Pow->Z13(intA); }
218 else if ( i == 2 ) { fRadiusEff = 1.34*theG4Pow->powZ(intA, 0.21) // Anti-tritium + Nucleus
219 + 1.51/theG4Pow->Z13(intA); }
220 else if ( i == 3 ) { fRadiusEff = 1.34*theG4Pow->powZ(intA, 0.21) // Anti-He3 + Nucleus
221 + 1.51/theG4Pow->Z13(intA); }
222 else if ( i == 4 ) { fRadiusEff = 1.30*theG4Pow->powZ(intA, 0.21) // Anti-alpha + Nucleus
223 + 1.05/theG4Pow->Z13(intA); }
224 else if ( i < 0 ) { fRadiusEff = 1.30*theG4Pow->powZ(intA,0.21) // Anti-hypernucleus + Nucleus
225 + 1.05/theG4Pow->Z13(intA); } // is treated as Anti-alpha + Nucleus
226 else {}
227 }
228
229 G4double R2 = fRadiusEff*fRadiusEff;
230 G4double ApAt = std::abs(theParticle->GetBaryonNumber()) * A;
231
232 G4double inelxsection = millibarn*pi*R2*10.*G4Log(1.+(ApAt*sigmaTotal/(pi*R2*10.))); //mb
233 fInelasticXsc = inelxsection;
234
235 return fInelasticXsc;
236}
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
G4bool IsAntiHypernucleus() const
const G4String & GetParticleName() const
G4double powZ(G4int Z, G4double y) const
Definition: G4Pow.hh:225
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
const G4double pi

Referenced by GetElasticElementCrossSection(), and GetInelasticIsotopeCrossSection().

◆ GetInelasticIsotopeCrossSection()

G4double G4ComponentAntiNuclNuclearXS::GetInelasticIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 243 of file G4ComponentAntiNuclNuclearXS.cc.

245{
246 return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A);
247}

◆ GetTotalElementCrossSection()

G4double G4ComponentAntiNuclNuclearXS::GetTotalElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 82 of file G4ComponentAntiNuclNuclearXS.cc.

84{
85 if ( aParticle == nullptr ) {
87 ed << "anti-nucleus with nullptr particle definition: " << aParticle << G4endl;
88 G4Exception( "G4ComponentAntiNuclNuclearXS::GetTotalElementCrossSection",
89 "antiNuclNuclearXS001", JustWarning, ed );
90 return 0.0;
91 }
92
93 const G4ParticleDefinition* theParticle = aParticle;
94 G4double sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
95
96 // calculation of squared radius of NN-collision
97 G4int i(-1), j(-1);
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; }
104 else {};
105
106 if ( i < 0 && ( ! theParticle->IsAntiHypernucleus() ) ) {
108 ed << "Unknown anti-nucleus : " << theParticle->GetParticleName() << G4endl
109 << "Target (Z, A)=(" << Z << "," << A << ")" << G4endl;
110 G4Exception( "G4ComponentAntiNuclNuclearXS::GetTotalElementCrossSection",
111 "antiNuclNuclearXS002", JustWarning, ed );
112 }
113
114 G4int intA = static_cast<G4int>( A );
115
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; }
121 else {}
122
123 if ( i < 0 && j >= 0 ) { fRadiusEff = ReffTot[4][j]; } // Treat all anti-hypernuclei as anti-alpha
124 if ( i == 0 && j == 0 ) return sigmaTotal * millibarn; // Pbar/Nbar + P
125 if ( i >= 0 && j >= 0 ) { fRadiusEff = ReffTot[i][j]; } // Light anti-nuclei + Light nuclei
126
127 if ( j < 0 ) {
128 if ( i == 0 ) { fRadiusEff = 1.34 * theG4Pow->powZ(intA, 0.23) // Anti-proton/Anti-neutron + Nucleus
129 + 1.35 / theG4Pow->Z13(intA); }
130 else if ( i == 1 ) { fRadiusEff = 1.46 * theG4Pow->powZ(intA, 0.21) // Anti-deuteron + Nucleus
131 + 1.45 / theG4Pow->Z13(intA); }
132 else if ( i == 2 ) { fRadiusEff = 1.40 * theG4Pow->powZ(intA, 0.21) // Anti-tritium + Nucleus
133 + 1.63 / theG4Pow->Z13(intA); }
134 else if ( i == 3 ) { fRadiusEff = 1.40 * theG4Pow->powZ(intA, 0.21) // Anti-He3 + Nucleus
135 + 1.63 / theG4Pow->Z13(intA); }
136 else if ( i == 4 ) { fRadiusEff = 1.35 * theG4Pow->powZ(intA, 0.21) // Anti-alpha + Nucleus
137 + 1.10 / theG4Pow->Z13(intA); }
138 else if ( i < 0 ) { fRadiusEff = 1.35 * theG4Pow->powZ(intA, 0.21) // Anti-hypernucleus + Nucleus
139 + 1.10 / theG4Pow->Z13(intA); } // is treated as Anti-alpha + Nucleus
140 else {}
141 }
142
143 G4double R2 = fRadiusEff*fRadiusEff;
144 G4double ApAt = std::abs(theParticle->GetBaryonNumber()) * A;
145
146 G4double xsection = millibarn*2.*pi*R2*10.*G4Log(1.+(ApAt*sigmaTotal/(2.*pi*R2*10.))); //mb
147 fTotalXsc = xsection;
148
149 return fTotalXsc;
150}

Referenced by GetElasticElementCrossSection(), GetTotalIsotopeCrossSection(), and G4AntiNuclElastic::SampleInvariantT().

◆ GetTotalIsotopeCrossSection()

G4double G4ComponentAntiNuclNuclearXS::GetTotalIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 157 of file G4ComponentAntiNuclNuclearXS.cc.

159{
160 return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (G4double) A);
161}

The documentation for this class was generated from the following files: