Geant4 10.7.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 (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), fRadiusNN2(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 326 of file G4ComponentAntiNuclNuclearXS.cc.

327{
328 outFile << "The G4ComponentAntiNuclNuclearXS calculates total,\n"
329 << "inelastic, elastic cross sections of anti-nucleons and light \n"
330 << "anti-nucleus interactions with nuclei using Glauber's approach.\n"
331 << "It uses parametrizations of antiproton-proton total and elastic \n"
332 << "cross sections and Wood-Saxon distribution of nuclear density.\n"
333 << "See details in Phys.Lett. B705 (2011) 235. \n";
334}

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

302{
303 G4double xsection;
304 G4double SigAss;
305 G4double C, d1, d2, d3;
306 GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
307 SigAss = 4.5 + 0.101*G4Log(S/S0)*G4Log(S/S0); //mb
308 C = 59.27;
309 d1 = -6.95;
310 d2 = 23.54;
311 d3 = -25.34;
312
313 xsection = SigAss * ( 1 + 1. / (std::sqrt(S-4.*Mn*Mn)) / (G4Pow::GetInstance()->powA(R0, 3.))
314 * C * ( 1 + d1/SqrtS + d2/(G4Pow::GetInstance()->powA(SqrtS,2.))
315 + d3/(G4Pow::GetInstance()->powA(SqrtS,3.)) ) );
316
317 //xsection *= millibarn;
318 fAntiHadronNucleonElXsc = xsection;
319
320 return fAntiHadronNucleonElXsc;
321}
double C(double temp)
G4double G4Log(G4double x)
Definition: G4Log.hh:226
double G4double
Definition: G4Types.hh:83
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:230

Referenced by GetInelasticElementCrossSection(), and GetTotalElementCrossSection().

◆ GetAntiHadronNucleonTotCrSc()

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

Definition at line 263 of file G4ComponentAntiNuclNuclearXS.cc.

265{
266 G4double xsection, Pmass, Energy, momentum;
267 const G4ParticleDefinition* theParticle = aParticle;
268 Pmass=theParticle->GetPDGMass();
269 Energy=Pmass+kinEnergy;
270 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->GetBaryonNumber());
271 G4double Plab = momentum / GeV;
272
273 G4double B, SigAss;
274 G4double C, d1, d2, d3;
275 Elab = std::sqrt(Mn*Mn + Plab*Plab); // GeV
276 S = 2.*Mn*Mn + 2. *Mn*Elab; // GeV^2
277 SqrtS = std::sqrt(S); // GeV
278 B = b0+b2*G4Log(SqrtS/SqrtS0)*G4Log(SqrtS/SqrtS0); //GeV^(-2)
279 SigAss = 36.04 +0.304*G4Log(S/S0)*G4Log(S/S0); //mb
280 R0 = std::sqrt(0.40874044*SigAss - B); //GeV^(-2)
281 C = 13.55;
282 d1 = -4.47;
283 d2 = 12.38;
284 d3 = -12.43;
285
286 xsection = SigAss * ( 1 + 1./(std::sqrt(S-4.*Mn*Mn)) / (G4Pow::GetInstance()->powA(R0, 3.))
287 * C * ( 1 + d1/SqrtS + d2/(G4Pow::GetInstance()->powA(SqrtS,2.))
288 + d3/(G4Pow::GetInstance()->powA(SqrtS,3.)) ) );
289
290 //xsection *= millibarn;
291 fAntiHadronNucleonTotXsc = xsection;
292
293 return fAntiHadronNucleonTotXsc;
294}
double B(double 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 239 of file G4ComponentAntiNuclNuclearXS.cc.

241{
242 fElasticXsc = GetTotalElementCrossSection(aParticle, kinEnergy, Z, A)-
243 GetInelasticElementCrossSection(aParticle, kinEnergy, Z, A);
244 if (fElasticXsc < 0.) fElasticXsc = 0.;
245 return fElasticXsc;
246}
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 253 of file G4ComponentAntiNuclNuclearXS.cc.

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

162{
163 G4double inelxsection, sigmaTotal, sigmaElastic;
164 const G4ParticleDefinition* theParticle = aParticle;
165 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
166 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
167
168 // calculation of sqr of radius NN-collision
169 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi); // fm^2
170
171 // calculation of effective nuclear radius for Pbar and Nbar interaction (can be changed)
172 //A.R. 29-Jan-2013 : use antiprotons/antineutrons as the default case,
173 // to be used for instance, as first approximation
174 // without validation, for anti-hyperons.
175 if (A==1) {
176 fInelasticXsc = (sigmaTotal - sigmaElastic) * millibarn;
177 return fInelasticXsc;
178 }
179 fRadiusEff = 1.31*G4Pow::GetInstance()->powA(A, 0.22)+0.9/G4Pow::GetInstance()->powA(A, 1./3.); //fm
180 if ( (Z==1) && (A==2) ) fRadiusEff = 3.582; //fm
181 if ( (Z==1) && (A==3) ) fRadiusEff = 3.105;
182 if ( (Z==2) && (A==3) ) fRadiusEff = 3.105;
183 if ( (Z==2) && (A==4) ) fRadiusEff = 2.209;
184
185 // calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
186 if (theParticle ==theADeuteron) {
187 fRadiusEff = 1.38*G4Pow::GetInstance()->powA(A, 0.21)+1.55/G4Pow::GetInstance()->powA(A, 1./3.);
188 if ( (Z==1) && (A==2) ) fRadiusEff = 3.169; //fm
189 if ( (Z==1) && (A==3) ) fRadiusEff = 3.066;
190 if ( (Z==2) && (A==3) ) fRadiusEff = 3.066;
191 if ( (Z==2) && (A==4) ) fRadiusEff = 2.498;
192 }
193
194 // calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
195 if ( (theParticle ==theAHe3) || (theParticle ==theATriton) ) {
196 fRadiusEff = 1.34 * G4Pow::GetInstance()->powA(A, 0.21)+1.51/G4Pow::GetInstance()->powA(A, 1./3.);
197 if ( (Z==1) && (A==2) ) fRadiusEff = 3.066; //fm
198 if ( (Z==1) && (A==3) ) fRadiusEff = 2.973;
199 if ( (Z==2) && (A==3) ) fRadiusEff = 2.973;
200 if ( (Z==2) && (A==4) ) fRadiusEff = 2.508;
201 }
202
203 // calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
204 if (theParticle == theAAlpha) {
205 fRadiusEff = 1.3*G4Pow::GetInstance()->powA(A, 0.21)+1.05/G4Pow::GetInstance()->powA(A, 1./3.);
206 if ( (Z==1) && (A==2) ) fRadiusEff = 2.498; //fm
207 if ( (Z==1) && (A==3) ) fRadiusEff = 2.508;
208 if ( (Z==2) && (A==3) ) fRadiusEff = 2.508;
209 if ( (Z==2) && (A==4) ) fRadiusEff = 2.158;
210 }
211
212 G4double R2 = fRadiusEff*fRadiusEff;
213 G4double REf2 = R2+fRadiusNN2;
214 G4double ApAt = std::abs(theParticle->GetBaryonNumber()) * A;
215
216 inelxsection = pi*REf2 *10* G4Log(1+(ApAt*sigmaTotal/(pi*REf2*10.))); //mb
217 inelxsection = inelxsection * millibarn;
218 fInelasticXsc = inelxsection;
219
220 return fInelasticXsc;
221}
double A(double temperature)
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 228 of file G4ComponentAntiNuclNuclearXS.cc.

230{
231 return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A);
232}

◆ 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 G4double xsection, sigmaTotal, sigmaElastic;
86 const G4ParticleDefinition* theParticle = aParticle;
87 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
88 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
89
90 // calculation of squared radius of NN-collision
91 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi) ; //fm^2
92
93 // calculation of effective nuclear radius for Pbar and Nbar interactions (can be changed)
94 //A.R. 29-Jan-2013 : use antiprotons/antineutrons as the default case,
95 // to be used for instance, as first approximation
96 // without validation, for anti-hyperons.
97 if (A==1) {
98 fTotalXsc = sigmaTotal * millibarn;
99 return fTotalXsc;
100 }
101 fRadiusEff = 1.34*G4Pow::GetInstance()->powA(A,0.23)+1.35/G4Pow::GetInstance()->powA(A,1./3.); //fm
102 if ( (Z==1) && (A==2) ) fRadiusEff = 3.800; //fm
103 if ( (Z==1) && (A==3) ) fRadiusEff = 3.300;
104 if ( (Z==2) && (A==3) ) fRadiusEff = 3.300;
105 if ( (Z==2) && (A==4) ) fRadiusEff = 2.376;
106
107 // calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
108 if (theParticle == theADeuteron) {
109 fRadiusEff = 1.46 * G4Pow::GetInstance()->powA(A,0.21) + 1.45 / G4Pow::GetInstance()->powA(A,1./3.);
110 if ( (Z==1) && (A==2) ) fRadiusEff = 3.238; //fm
111 if ( (Z==1) && (A==3) ) fRadiusEff = 3.144;
112 if ( (Z==2) && (A==3) ) fRadiusEff = 3.144;
113 if ( (Z==2) && (A==4) ) fRadiusEff = 2.544;
114 }
115
116 // calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
117 if ( (theParticle ==theAHe3) || (theParticle ==theATriton) ) {
118 fRadiusEff = 1.40* G4Pow::GetInstance()->powA(A,0.21)+1.63/G4Pow::GetInstance()->powA(A,1./3.);
119 if ( (Z==1) && (A==2) ) fRadiusEff = 3.144; //fm
120 if ( (Z==1) && (A==3) ) fRadiusEff = 3.075;
121 if ( (Z==2) && (A==3) ) fRadiusEff = 3.075;
122 if ( (Z==2) && (A==4) ) fRadiusEff = 2.589;
123 }
124
125 // calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
126 if (theParticle == theAAlpha) {
127 fRadiusEff = 1.35* G4Pow::GetInstance()->powA(A,0.21)+1.1/G4Pow::GetInstance()->powA(A,1./3.);
128 if ( (Z==1) && (A==2) ) fRadiusEff = 2.544; //fm
129 if ( (Z==1) && (A==3) ) fRadiusEff = 2.589;
130 if ( (Z==2) && (A==3) ) fRadiusEff = 2.589;
131 if ( (Z==2) && (A==4) ) fRadiusEff = 2.241;
132 }
133
134 G4double R2 = fRadiusEff*fRadiusEff;
135 G4double REf2 = R2+fRadiusNN2;
136 G4double ApAt = std::abs(theParticle->GetBaryonNumber()) * A;
137
138 xsection = 2*pi*REf2*10.*G4Log(1+(ApAt*sigmaTotal/(2*pi*REf2*10.))); //mb
139 xsection = xsection *millibarn;
140 fTotalXsc = xsection;
141
142 return fTotalXsc;
143}

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

152{
153 return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (G4double) A);
154}

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