50 fLowerLimit( 10 * MeV )
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"
98 G4double xsection, sigmaTotal, sigmaElastic;
106 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi) ;
110 if ( (theParticle == theAProton) || (theParticle == theANeutron) )
113 { fTotalXsc = sigmaTotal * millibarn;
116 fRadiusEff = 1.34*std::pow(A,0.23)+1.35/std::pow(A,1./3.);
118 if( (Z==1) && (A==2) ) fRadiusEff = 3.800;
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;
125 if (theParticle == theADeuteron)
126 { fRadiusEff = 1.46 * std::pow(A,0.21) + 1.45 / std::pow(A,1./3.);
128 if( (Z==1) && (A==2) ) fRadiusEff = 3.238;
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;
135 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
136 { fRadiusEff = 1.40* std::pow(A,0.21)+1.63/std::pow(A,1./3.);
138 if( (Z==1) && (A==2) ) fRadiusEff = 3.144;
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;
146 if (theParticle == theAAlpha)
148 fRadiusEff = 1.35* std::pow(A,0.21)+1.1/std::pow(A,1./3.);
150 if( (Z==1) && (A==2) ) fRadiusEff = 2.544;
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;
157 G4double R2 = fRadiusEff*fRadiusEff;
161 xsection = 2*pi*REf2*10.*std::log(1+(ApAt*sigmaTotal/(2*pi*REf2*10.)));
162 xsection =xsection *millibarn;
163 fTotalXsc = xsection;
184 G4double inelxsection, sigmaTotal, sigmaElastic;
192 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi);
197 if ( (theParticle == theAProton) || (theParticle == theANeutron) )
200 { fInelasticXsc = (sigmaTotal - sigmaElastic) * millibarn;
201 return fInelasticXsc;
203 fRadiusEff = 1.31*std::pow(A, 0.22)+0.9/std::pow(A, 1./3.);
205 if( (Z==1) && (A==2) ) fRadiusEff = 3.582;
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;
213 if (theParticle ==theADeuteron)
215 fRadiusEff = 1.38*std::pow(A, 0.21)+1.55/std::pow(A, 1./3.);
217 if( (Z==1) && (A==2) ) fRadiusEff = 3.169;
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;
225 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
227 fRadiusEff = 1.34 * std::pow(A, 0.21)+1.51/std::pow(A, 1./3.);
229 if( (Z==1) && (A==2) ) fRadiusEff = 3.066;
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;
238 if (theParticle == theAAlpha)
240 fRadiusEff = 1.3*std::pow(A, 0.21)+1.05/std::pow(A, 1./3.);
242 if( (Z==1) && (A==2) ) fRadiusEff = 2.498;
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;
247 G4double R2 = fRadiusEff*fRadiusEff;
251 inelxsection = pi*REf2 *10* std::log(1+(ApAt*sigmaTotal/(pi*REf2*10.)));
252 inelxsection = inelxsection * millibarn;
253 fInelasticXsc = inelxsection;
254 return fInelasticXsc;
277 if (fElasticXsc < 0.) fElasticXsc = 0.;
297 G4double xsection, Pmass, Energy, momentum;
300 Energy=Pmass+kinEnergy;
301 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->
GetBaryonNumber());
304 if(Plab < 0.1) { Plab = 0.1; }
309 Elab = std::sqrt(Mn*Mn + Plab*Plab);
310 S = 2.*Mn*Mn + 2. *Mn*Elab;
311 SqrtS = std::sqrt(S);
313 B = b0+b2*std::log(SqrtS/SqrtS0)*std::log(SqrtS/SqrtS0);
314 SigAss = 36.04 +0.304*std::log(S/S0)*std::log(S/S0);
315 R0 = std::sqrt(0.40874044*SigAss - B);
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.)) ));
326 fAntiHadronNucleonTotXsc = xsection;
327 return fAntiHadronNucleonTotXsc;
343 GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
345 SigAss = 4.5 + 0.101*std::log(S/S0)*std::log(S/S0);
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.)) ));
357 fAntiHadronNucleonElXsc = xsection;
358 return fAntiHadronNucleonElXsc;
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
G4int GetBaryonNumber() const