Geant4 9.6.0
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 () 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 57 of file G4ComponentAntiNuclNuclearXS.hh.

Constructor & Destructor Documentation

◆ G4ComponentAntiNuclNuclearXS()

G4ComponentAntiNuclNuclearXS::G4ComponentAntiNuclNuclearXS ( )

Definition at line 48 of file G4ComponentAntiNuclNuclearXS.cc.

49: G4VComponentCrossSection("AntiAGlauber"), fUpperLimit( 10000 * GeV ),
50 fLowerLimit( 10 * MeV )
51{
52 theAProton = G4AntiProton::AntiProton();
53 theANeutron = G4AntiNeutron::AntiNeutron();
54 theADeuteron = G4AntiDeuteron::AntiDeuteron();
55 theATriton = G4AntiTriton::AntiTriton();
56 theAAlpha = G4AntiAlpha::AntiAlpha();
57 theAHe3 = G4AntiHe3::AntiHe3();
58
59 Mn = 0.93827231; // GeV
60 b0 = 11.92; // GeV^(-2)
61 b2 = 0.3036; // GeV^(-2)
62 SqrtS0 = 20.74; // GeV
63 S0 = 33.0625; // GeV^2
64
65}
static G4AntiAlpha * AntiAlpha()
Definition: G4AntiAlpha.cc:89
static G4AntiDeuteron * AntiDeuteron()
static G4AntiHe3 * AntiHe3()
Definition: G4AntiHe3.cc:94
static G4AntiNeutron * AntiNeutron()
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:93
static G4AntiTriton * AntiTriton()
Definition: G4AntiTriton.cc:94

◆ ~G4ComponentAntiNuclNuclearXS()

G4ComponentAntiNuclNuclearXS::~G4ComponentAntiNuclNuclearXS ( )
virtual

Definition at line 71 of file G4ComponentAntiNuclNuclearXS.cc.

72{
73}

Member Function Documentation

◆ BuildPhysicsTable()

virtual void G4ComponentAntiNuclNuclearXS::BuildPhysicsTable ( const G4ParticleDefinition )
inlinevirtual

Reimplemented from G4VComponentCrossSection.

Definition at line 95 of file G4ComponentAntiNuclNuclearXS.hh.

96 {}

◆ CrossSectionDescription()

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

Definition at line 78 of file G4ComponentAntiNuclNuclearXS.cc.

79{
80 outFile << "G4ComponentAntiNuclNuclearXS describes the total, elastic\n"
81 << "and inelastic cross sections for the scattering of light\n"
82 << "antinuclei from nuclei using the Glauber approach and Grichine\n"
83 << "parameterization. It is valid from 10 MeV to 10 TeV incident\n"
84 << "energies and applies to antiprotons, antineutrons, antideuterons,\n"
85 << "anti3He, antitritons and antialphas. This is a cross section\n"
86 << "component which is to be used as part of a cross section data\n"
87 << "set.\n";
88}

◆ DumpPhysicsTable()

virtual void G4ComponentAntiNuclNuclearXS::DumpPhysicsTable ( const G4ParticleDefinition )
inlinevirtual

Reimplemented from G4VComponentCrossSection.

Definition at line 99 of file G4ComponentAntiNuclNuclearXS.hh.

100 {}

◆ GetAntiHadronNucleonElCrSc()

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

Definition at line 335 of file G4ComponentAntiNuclNuclearXS.cc.

337{
338 G4double xsection;
339
340 G4double SigAss;
341 G4double C, d1, d2, d3 ;
342
343 GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
344
345 SigAss = 4.5 + 0.101*std::log(S/S0)*std::log(S/S0); //mb
346
347 C = 59.27;
348 d1 = -6.95;
349 d2 = 23.54;
350 d3 = -25.34;
351
352 xsection = SigAss* (1 + 1. / (std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
353 *C* ( 1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
354
355// xsection *= millibarn;
356
357 fAntiHadronNucleonElXsc = xsection;
358 return fAntiHadronNucleonElXsc;
359}
double G4double
Definition: G4Types.hh:64
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)

Referenced by GetInelasticElementCrossSection(), and GetTotalElementCrossSection().

◆ GetAntiHadronNucleonTotCrSc()

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

Definition at line 294 of file G4ComponentAntiNuclNuclearXS.cc.

296{
297 G4double xsection, Pmass, Energy, momentum;
298 const G4ParticleDefinition* theParticle = aParticle;
299 Pmass=theParticle->GetPDGMass();
300 Energy=Pmass+kinEnergy;
301 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->GetBaryonNumber());
302 G4double Plab = momentum / GeV/std::abs(aParticle->GetBaryonNumber()); // Uzhi 24 Nov. 2011
303
304 if(Plab < 0.1) { Plab = 0.1; } // Uzhi 24 Nov. 2011
305
306 G4double B, SigAss;
307 G4double C, d1, d2, d3 ;
308
309 Elab = std::sqrt(Mn*Mn + Plab*Plab); // GeV
310 S = 2.*Mn*Mn + 2. *Mn*Elab; // GeV^2
311 SqrtS = std::sqrt(S); // GeV
312
313 B = b0+b2*std::log(SqrtS/SqrtS0)*std::log(SqrtS/SqrtS0); //GeV^(-2)
314 SigAss = 36.04 +0.304*std::log(S/S0)*std::log(S/S0); //mb
315 R0 = std::sqrt(0.40874044*SigAss - B); //GeV^(-2)
316
317 C = 13.55;
318 d1 = -4.47;
319 d2 = 12.38;
320 d3 = -12.43;
321 xsection = SigAss*(1 + 1./(std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
322 *C* (1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
323
324// xsection *= millibarn;
325
326 fAntiHadronNucleonTotXsc = xsection;
327 return fAntiHadronNucleonTotXsc;
328}

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 271 of file G4ComponentAntiNuclNuclearXS.cc.

273{
274 fElasticXsc = GetTotalElementCrossSection(aParticle, kinEnergy, Z, A)-
275 GetInelasticElementCrossSection(aParticle, kinEnergy, Z, A);
276
277 if (fElasticXsc < 0.) fElasticXsc = 0.;
278
279 return fElasticXsc;
280}
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 286 of file G4ComponentAntiNuclNuclearXS.cc.

288{ return GetElasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
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 181 of file G4ComponentAntiNuclNuclearXS.cc.

183{
184 G4double inelxsection, sigmaTotal, sigmaElastic;
185
186 const G4ParticleDefinition* theParticle = aParticle;
187
188 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
189 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
190
191// calculation of sqr of radius NN-collision
192 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi); // fm^2
193
194
195// calculation of effective nuclear radius for Pbar and Nbar interaction (can be changed)
196
197 if ( (theParticle == theAProton) || (theParticle == theANeutron) )
198 {
199 if (A==1)
200 { fInelasticXsc = (sigmaTotal - sigmaElastic) * millibarn;
201 return fInelasticXsc;
202 }
203 fRadiusEff = 1.31*std::pow(A, 0.22)+0.9/std::pow(A, 1./3.); //fm
204
205 if( (Z==1) && (A==2) ) fRadiusEff = 3.582; //fm
206 if( (Z==1) && (A==3) ) fRadiusEff = 3.105;
207 if( (Z==2) && (A==3) ) fRadiusEff = 3.105;
208 if( (Z==2) && (A==4) ) fRadiusEff = 2.209;
209 }
210
211//calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
212
213 if (theParticle ==theADeuteron)
214 {
215 fRadiusEff = 1.38*std::pow(A, 0.21)+1.55/std::pow(A, 1./3.);
216
217 if( (Z==1) && (A==2) ) fRadiusEff = 3.169; //fm
218 if( (Z==1) && (A==3) ) fRadiusEff = 3.066;
219 if( (Z==2) && (A==3) ) fRadiusEff = 3.066;
220 if( (Z==2) && (A==4) ) fRadiusEff = 2.498;
221 }
222
223//calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
224
225 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
226 {
227 fRadiusEff = 1.34 * std::pow(A, 0.21)+1.51/std::pow(A, 1./3.);
228
229 if( (Z==1) && (A==2) ) fRadiusEff = 3.066; //fm
230 if( (Z==1) && (A==3) ) fRadiusEff = 2.973;
231 if( (Z==2) && (A==3) ) fRadiusEff = 2.973;
232 if( (Z==2) && (A==4) ) fRadiusEff = 2.508;
233
234 }
235
236//calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
237
238 if (theParticle == theAAlpha)
239 {
240 fRadiusEff = 1.3*std::pow(A, 0.21)+1.05/std::pow(A, 1./3.);
241
242 if( (Z==1) && (A==2) ) fRadiusEff = 2.498; //fm
243 if( (Z==1) && (A==3) ) fRadiusEff = 2.508;
244 if( (Z==2) && (A==3) ) fRadiusEff = 2.508;
245 if( (Z==2) && (A==4) ) fRadiusEff = 2.158;
246 }
247 G4double R2 = fRadiusEff*fRadiusEff;
248 G4double REf2 = R2+fRadiusNN2;
249 G4double ApAt= std::abs(theParticle->GetBaryonNumber()) * A;
250
251 inelxsection = pi*REf2 *10* std::log(1+(ApAt*sigmaTotal/(pi*REf2*10.))); //mb
252 inelxsection = inelxsection * millibarn;
253 fInelasticXsc = inelxsection;
254 return fInelasticXsc;
255}
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
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 261 of file G4ComponentAntiNuclNuclearXS.cc.

263{return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }

◆ GetTotalElementCrossSection()

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

Implements G4VComponentCrossSection.

Definition at line 95 of file G4ComponentAntiNuclNuclearXS.cc.

97{
98 G4double xsection, sigmaTotal, sigmaElastic;
99
100 const G4ParticleDefinition* theParticle = aParticle;
101
102 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
103 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
104
105// calculation of squared radius of NN-collision
106 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi) ; //fm^2
107
108// calculation of effective nuclear radius for Pbar and Nbar interactions (can be changed)
109
110 if ( (theParticle == theAProton) || (theParticle == theANeutron) )
111 {
112 if(A==1)
113 { fTotalXsc = sigmaTotal * millibarn;
114 return fTotalXsc; }
115
116 fRadiusEff = 1.34*std::pow(A,0.23)+1.35/std::pow(A,1./3.); //fm
117
118 if( (Z==1) && (A==2) ) fRadiusEff = 3.800; //fm
119 if( (Z==1) && (A==3) ) fRadiusEff = 3.300;
120 if( (Z==2) && (A==3) ) fRadiusEff = 3.300;
121 if( (Z==2) && (A==4) ) fRadiusEff = 2.376;
122 }
123
124//calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
125 if (theParticle == theADeuteron)
126 { fRadiusEff = 1.46 * std::pow(A,0.21) + 1.45 / std::pow(A,1./3.);
127
128 if( (Z==1) && (A==2) ) fRadiusEff = 3.238; //fm
129 if( (Z==1) && (A==3) ) fRadiusEff = 3.144;
130 if( (Z==2) && (A==3) ) fRadiusEff = 3.144;
131 if( (Z==2) && (A==4) ) fRadiusEff = 2.544;
132 }
133// calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
134
135 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
136 { fRadiusEff = 1.40* std::pow(A,0.21)+1.63/std::pow(A,1./3.);
137
138 if( (Z==1) && (A==2) ) fRadiusEff = 3.144; //fm
139 if( (Z==1) && (A==3) ) fRadiusEff = 3.075;
140 if( (Z==2) && (A==3) ) fRadiusEff = 3.075;
141 if( (Z==2) && (A==4) ) fRadiusEff = 2.589;
142 }
143
144//calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
145
146 if (theParticle == theAAlpha)
147 {
148 fRadiusEff = 1.35* std::pow(A,0.21)+1.1/std::pow(A,1./3.);
149
150 if( (Z==1) && (A==2) ) fRadiusEff = 2.544; //fm
151 if( (Z==1) && (A==3) ) fRadiusEff = 2.589;
152 if( (Z==2) && (A==3) ) fRadiusEff = 2.589;
153 if( (Z==2) && (A==4) ) fRadiusEff = 2.241;
154
155 }
156
157 G4double R2 = fRadiusEff*fRadiusEff;
158 G4double REf2 = R2+fRadiusNN2;
159 G4double ApAt = std::abs(theParticle->GetBaryonNumber()) * A;
160
161 xsection = 2*pi*REf2*10.*std::log(1+(ApAt*sigmaTotal/(2*pi*REf2*10.))); //mb
162 xsection =xsection *millibarn;
163 fTotalXsc = xsection;
164
165 return fTotalXsc;
166}

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 173 of file G4ComponentAntiNuclNuclearXS.cc.

175{ return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }

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