Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4ComponentAntiNuclNuclearXS Class Reference

#include <G4ComponentAntiNuclNuclearXS.hh>

Inheritance diagram for G4ComponentAntiNuclNuclearXS:
G4VComponentCrossSection

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 *)
 
G4double GetInelasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
G4double GetElasticElementCrossSection (const G4ParticleDefinition *, G4double kinEnergy, const G4Element *)
 
virtual G4double ComputeQuasiElasticRatio (const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)
 
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 ( )

Definition at line 47 of file G4ComponentAntiNuclNuclearXS.cc.

References G4AntiAlpha::AntiAlpha(), G4AntiDeuteron::AntiDeuteron(), G4AntiHe3::AntiHe3(), G4AntiNeutron::AntiNeutron(), G4AntiProton::AntiProton(), and G4AntiTriton::AntiTriton().

48 : G4VComponentCrossSection("AntiAGlauber"),
49 // fUpperLimit(10000*GeV), fLowerLimit(10*MeV),
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)
54 {
55  theAProton = G4AntiProton::AntiProton();
56  theANeutron = G4AntiNeutron::AntiNeutron();
57  theADeuteron = G4AntiDeuteron::AntiDeuteron();
58  theATriton = G4AntiTriton::AntiTriton();
59  theAAlpha = G4AntiAlpha::AntiAlpha();
60  theAHe3 = G4AntiHe3::AntiHe3();
61 
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 G4AntiHe3 * AntiHe3()
Definition: G4AntiHe3.cc:94
static G4AntiDeuteron * AntiDeuteron()
static G4AntiAlpha * AntiAlpha()
Definition: G4AntiAlpha.cc:89
static G4AntiProton * AntiProton()
Definition: G4AntiProton.cc:93
G4VComponentCrossSection(const G4String &nam="")
static G4AntiTriton * AntiTriton()
Definition: G4AntiTriton.cc:94
static G4AntiNeutron * AntiNeutron()
G4ComponentAntiNuclNuclearXS::~G4ComponentAntiNuclNuclearXS ( )
virtual

Definition at line 74 of file G4ComponentAntiNuclNuclearXS.cc.

75 {
76 }

Member Function Documentation

virtual void G4ComponentAntiNuclNuclearXS::BuildPhysicsTable ( const G4ParticleDefinition )
inlinevirtual

Reimplemented from G4VComponentCrossSection.

Definition at line 95 of file G4ComponentAntiNuclNuclearXS.hh.

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

Definition at line 355 of file G4ComponentAntiNuclNuclearXS.cc.

356 {
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";
364 }
std::ofstream outFile
Definition: GammaRayTel.cc:68
virtual void G4ComponentAntiNuclNuclearXS::DumpPhysicsTable ( const G4ParticleDefinition )
inlinevirtual

Reimplemented from G4VComponentCrossSection.

Definition at line 99 of file G4ComponentAntiNuclNuclearXS.hh.

100  {}
G4double G4ComponentAntiNuclNuclearXS::GetAntiHadronNucleonElCrSc ( const G4ParticleDefinition aParticle,
G4double  kinEnergy 
)

Definition at line 330 of file G4ComponentAntiNuclNuclearXS.cc.

References GetAntiHadronNucleonTotCrSc().

331 {
332  G4double xsection;
333 
334  G4double SigAss;
335  G4double C, d1, d2, d3 ;
336 
337  GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
338 
339  SigAss = 4.5 + 0.101*std::log(S/S0)*std::log(S/S0); //mb
340 
341  C = 59.27;
342  d1 = -6.95;
343  d2 = 23.54;
344  d3 = -25.34;
345 
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.)) ));
348 
349 // xsection *= millibarn;
350 
351  fAntiHadronNucleonElXsc = xsection;
352  return fAntiHadronNucleonElXsc;
353 }
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
double G4double
Definition: G4Types.hh:76
G4double G4ComponentAntiNuclNuclearXS::GetAntiHadronNucleonTotCrSc ( const G4ParticleDefinition aParticle,
G4double  kinEnergy 
)

Definition at line 291 of file G4ComponentAntiNuclNuclearXS.cc.

References G4ParticleDefinition::GetBaryonNumber(), G4ParticleDefinition::GetPDGMass(), and python.hepunit::GeV.

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

292 {
293  G4double xsection, Pmass, Energy, momentum;
294  const G4ParticleDefinition* theParticle = aParticle;
295  Pmass=theParticle->GetPDGMass();
296  Energy=Pmass+kinEnergy;
297  momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->GetBaryonNumber());
298  G4double Plab = momentum / GeV;
299 
300  G4double B, SigAss;
301  G4double C, d1, d2, d3 ;
302 
303  Elab = std::sqrt(Mn*Mn + Plab*Plab); // GeV
304  S = 2.*Mn*Mn + 2. *Mn*Elab; // GeV^2
305  SqrtS = std::sqrt(S); // GeV
306 
307  B = b0+b2*std::log(SqrtS/SqrtS0)*std::log(SqrtS/SqrtS0); //GeV^(-2)
308  SigAss = 36.04 +0.304*std::log(S/S0)*std::log(S/S0); //mb
309  R0 = std::sqrt(0.40874044*SigAss - B); //GeV^(-2)
310 
311  C = 13.55;
312  d1 = -4.47;
313  d2 = 12.38;
314  d3 = -12.43;
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.)) ));
317 
318 // xsection *= millibarn;
319 
320  fAntiHadronNucleonTotXsc = xsection;
321  return fAntiHadronNucleonTotXsc;
322 }
G4double GetPDGMass() const
double G4double
Definition: G4Types.hh:76
G4double G4ComponentAntiNuclNuclearXS::GetElasticElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 268 of file G4ComponentAntiNuclNuclearXS.cc.

Referenced by G4AntiNuclElastic::SampleInvariantT().

269 {
270  fElasticXsc = GetTotalElementCrossSection(aParticle, kinEnergy, Z, A)-
271  GetInelasticElementCrossSection(aParticle, kinEnergy, Z, A);
272 
273  if (fElasticXsc < 0.) fElasticXsc = 0.;
274 
275  return fElasticXsc;
276 }
virtual G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
G4double G4ComponentAntiNuclNuclearXS::GetElasticIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 283 of file G4ComponentAntiNuclNuclearXS.cc.

284 { return GetElasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
double G4double
Definition: G4Types.hh:76
G4double G4ComponentAntiNuclNuclearXS::GetInelasticElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 176 of file G4ComponentAntiNuclNuclearXS.cc.

References G4ParticleDefinition::GetBaryonNumber(), python.hepunit::millibarn, and python.hepunit::pi.

177 {
178  G4double inelxsection, sigmaTotal, sigmaElastic;
179 
180  const G4ParticleDefinition* theParticle = aParticle;
181 
182  sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
183  sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
184 
185 // calculation of sqr of radius NN-collision
186  fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi); // fm^2
187 
188 
189 // calculation of effective nuclear radius for Pbar and Nbar interaction (can be changed)
190 
191  //A.R. 29-Jan-2013 : use antiprotons/antineutrons as the default case,
192  // to be used for instance, as first approximation
193  // without validation, for anti-hyperons.
194  //if ( (theParticle == theAProton) || (theParticle == theANeutron) ) {
195  if (A==1)
196  { fInelasticXsc = (sigmaTotal - sigmaElastic) * millibarn;
197  return fInelasticXsc;
198  }
199  fRadiusEff = 1.31*std::pow(A, 0.22)+0.9/std::pow(A, 1./3.); //fm
200 
201  if( (Z==1) && (A==2) ) fRadiusEff = 3.582; //fm
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;
205  //}
206 
207 //calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
208 
209  if (theParticle ==theADeuteron)
210 {
211  fRadiusEff = 1.38*std::pow(A, 0.21)+1.55/std::pow(A, 1./3.);
212 
213  if( (Z==1) && (A==2) ) fRadiusEff = 3.169; //fm
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;
217  }
218 
219 //calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
220 
221  if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
222  {
223  fRadiusEff = 1.34 * std::pow(A, 0.21)+1.51/std::pow(A, 1./3.);
224 
225  if( (Z==1) && (A==2) ) fRadiusEff = 3.066; //fm
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;
229 
230  }
231 
232 //calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
233 
234  if (theParticle == theAAlpha)
235  {
236  fRadiusEff = 1.3*std::pow(A, 0.21)+1.05/std::pow(A, 1./3.);
237 
238  if( (Z==1) && (A==2) ) fRadiusEff = 2.498; //fm
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;
242  }
243  G4double R2 = fRadiusEff*fRadiusEff;
244  G4double REf2 = R2+fRadiusNN2;
245  G4double ApAt= std::abs(theParticle->GetBaryonNumber()) * A;
246 
247  inelxsection = pi*REf2 *10* std::log(1+(ApAt*sigmaTotal/(pi*REf2*10.))); //mb
248  inelxsection = inelxsection * millibarn;
249  fInelasticXsc = inelxsection;
250  return fInelasticXsc;
251 }
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
int millibarn
Definition: hepunit.py:40
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
double G4double
Definition: G4Types.hh:76
G4double G4ComponentAntiNuclNuclearXS::GetInelasticIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 258 of file G4ComponentAntiNuclNuclearXS.cc.

259 {return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
virtual G4double GetInelasticElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
double G4double
Definition: G4Types.hh:76
G4double G4ComponentAntiNuclNuclearXS::GetTotalElementCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4double  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 88 of file G4ComponentAntiNuclNuclearXS.cc.

References G4ParticleDefinition::GetBaryonNumber(), python.hepunit::millibarn, and python.hepunit::pi.

Referenced by G4AntiNuclElastic::SampleInvariantT().

89 {
90  G4double xsection, sigmaTotal, sigmaElastic;
91 
92  const G4ParticleDefinition* theParticle = aParticle;
93 
94  sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
95  sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
96 
97 // calculation of squared radius of NN-collision
98  fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi) ; //fm^2
99 
100 // calculation of effective nuclear radius for Pbar and Nbar interactions (can be changed)
101 
102  //A.R. 29-Jan-2013 : use antiprotons/antineutrons as the default case,
103  // to be used for instance, as first approximation
104  // without validation, for anti-hyperons.
105  //if ( (theParticle == theAProton) || (theParticle == theANeutron) ) {
106  if(A==1)
107  { fTotalXsc = sigmaTotal * millibarn;
108  return fTotalXsc; }
109 
110  fRadiusEff = 1.34*std::pow(A,0.23)+1.35/std::pow(A,1./3.); //fm
111 
112  if( (Z==1) && (A==2) ) fRadiusEff = 3.800; //fm
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;
116  //}
117 
118 //calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
119  if (theParticle == theADeuteron)
120  { fRadiusEff = 1.46 * std::pow(A,0.21) + 1.45 / std::pow(A,1./3.);
121 
122  if( (Z==1) && (A==2) ) fRadiusEff = 3.238; //fm
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;
126  }
127 // calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
128 
129  if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
130  { fRadiusEff = 1.40* std::pow(A,0.21)+1.63/std::pow(A,1./3.);
131 
132  if( (Z==1) && (A==2) ) fRadiusEff = 3.144; //fm
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;
136  }
137 
138 //calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
139 
140  if (theParticle == theAAlpha)
141  {
142  fRadiusEff = 1.35* std::pow(A,0.21)+1.1/std::pow(A,1./3.);
143 
144  if( (Z==1) && (A==2) ) fRadiusEff = 2.544; //fm
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;
148 
149  }
150 
151  G4double R2 = fRadiusEff*fRadiusEff;
152  G4double REf2 = R2+fRadiusNN2;
153  G4double ApAt = std::abs(theParticle->GetBaryonNumber()) * A;
154 
155  xsection = 2*pi*REf2*10.*std::log(1+(ApAt*sigmaTotal/(2*pi*REf2*10.))); //mb
156  xsection =xsection *millibarn;
157  fTotalXsc = xsection;
158 
159  return fTotalXsc;
160 }
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
int millibarn
Definition: hepunit.py:40
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition *aParticle, G4double kinEnergy)
double G4double
Definition: G4Types.hh:76
G4double G4ComponentAntiNuclNuclearXS::GetTotalIsotopeCrossSection ( const G4ParticleDefinition aParticle,
G4double  kinEnergy,
G4int  Z,
G4int  A 
)
virtual

Implements G4VComponentCrossSection.

Definition at line 168 of file G4ComponentAntiNuclNuclearXS.cc.

169 { return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition *aParticle, G4double kinEnergy, G4int Z, G4double A)
double G4double
Definition: G4Types.hh:76

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