source: trunk/source/processes/hadronic/cross_sections/src/G4ComponentAntiNuclNuclearXS.cc@ 1353

Last change on this file since 1353 was 1350, checked in by garnier, 15 years ago

update to last version 4.9.4

File size: 12.4 KB
RevLine 
[1350]1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// Calculation of the total, elastic and inelastic cross-sections
27// of anti-nucleon and anti-nucleus interactions with nuclei
28// based on Glauber approach and V. Grishine formulaes for
29// interpolations (ref. V.M.Grichine, Eur.Phys.J., C62(2009) 399;
30// NIM, B267 (2009) 2460) and our parametrization of hadron-nucleon
31// cross-sections
32//
33//
34// Created by A.Galoyan and V. Uzhinsky, 18.11.2010
35
36
37#include "G4ComponentAntiNuclNuclearXS.hh"
38
39#include "G4ParticleTable.hh"
40#include "G4IonTable.hh"
41#include "G4ParticleDefinition.hh"
42
43///////////////////////////////////////////////////////////////////////////////
44
45
46G4ComponentAntiNuclNuclearXS::G4ComponentAntiNuclNuclearXS()
47: fUpperLimit( 10000 * GeV ),
48 fLowerLimit( 10 * MeV )
49{
50 theAProton = G4AntiProton::AntiProton();
51 theANeutron = G4AntiNeutron::AntiNeutron();
52 theADeuteron = G4AntiDeuteron::AntiDeuteron();
53 theATriton = G4AntiTriton::AntiTriton();
54 theAAlpha = G4AntiAlpha::AntiAlpha();
55 theAHe3 = G4AntiHe3::AntiHe3();
56
57 Mn = 0.93827231; // GeV
58 b0 = 11.92; // GeV^(-2)
59 b2 = 0.3036; // GeV^(-2)
60 SqrtS0 = 20.74; // GeV
61 S0 = 33.0625; // GeV^2
62
63}
64
65///////////////////////////////////////////////////////////////////////////////////////
66//
67//
68
69G4ComponentAntiNuclNuclearXS::~G4ComponentAntiNuclNuclearXS()
70{
71}
72
73////////////////////////////////////////////////////////////////////////////////
74
75
76
77////////////////////////////////////////////////////////////////////////////////
78//
79// Calculation of total CrossSection of Anti-Nucleus - Nucleus
80
81
82G4double G4ComponentAntiNuclNuclearXS:: ComputeTotalCrossSection
83(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double A)
84{
85 G4double xsection, sigmaTotal, sigmaElastic;
86
87 const G4ParticleDefinition* theParticle = aParticle;
88
89 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
90 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
91
92// calculation of squared radius of NN-collision
93 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi) ; //fm^2
94
95// calculation of effective nuclear radius for Pbar and Nbar interactions (can be changed)
96
97 if ( (theParticle == theAProton) || (theParticle == theANeutron) )
98 {
99 if(A==1)
100 { fTotalXsc = sigmaTotal * millibarn;
101 return fTotalXsc; }
102
103 fRadiusEff = 1.34*std::pow(A,0.23)+1.35/std::pow(A,1./3.); //fm
104
105 if( (Z==1) && (A==2) ) fRadiusEff = 3.800; //fm
106 if( (Z==1) && (A==3) ) fRadiusEff = 3.300;
107 if( (Z==2) && (A==3) ) fRadiusEff = 3.300;
108 if( (Z==2) && (A==4) ) fRadiusEff = 2.376;
109
110
111 }
112
113//calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
114 if (theParticle == theADeuteron)
115 { fRadiusEff = 1.46 * std::pow(A,0.21) + 1.45 / std::pow(A,1./3.);
116
117 if( (Z==1) && (A==2) ) fRadiusEff = 3.238; //fm
118 if( (Z==1) && (A==3) ) fRadiusEff = 3.144;
119 if( (Z==2) && (A==3) ) fRadiusEff = 3.144;
120 if( (Z==2) && (A==4) ) fRadiusEff = 2.544;
121 }
122// calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
123
124 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
125 { fRadiusEff = 1.40* std::pow(A,0.21)+1.63/std::pow(A,1./3.);
126
127 if( (Z==1) && (A==2) ) fRadiusEff = 3.144; //fm
128 if( (Z==1) && (A==3) ) fRadiusEff = 3.075;
129 if( (Z==2) && (A==3) ) fRadiusEff = 3.075;
130 if( (Z==2) && (A==4) ) fRadiusEff = 2.589;
131 }
132
133//calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
134
135 if (theParticle == theAAlpha)
136 {
137 fRadiusEff = 1.35* std::pow(A,0.21)+1.1/std::pow(A,1./3.);
138
139 if( (Z==1) && (A==2) ) fRadiusEff = 2.544; //fm
140 if( (Z==1) && (A==3) ) fRadiusEff = 2.589;
141 if( (Z==2) && (A==3) ) fRadiusEff = 2.589;
142 if( (Z==2) && (A==4) ) fRadiusEff = 2.241;
143
144 }
145
146 G4double R2 = fRadiusEff*fRadiusEff;
147 G4double REf2 = R2+fRadiusNN2;
148 G4double ApAt = std::abs(theParticle->GetBaryonNumber()) * A;
149
150 xsection = 2*pi*REf2*10.*std::log(1+(ApAt*sigmaTotal/(2*pi*REf2*10.))); //mb
151 xsection =xsection *millibarn;
152 fTotalXsc = xsection;
153
154 return fTotalXsc;
155}
156
157
158////////////////////////////////////////////////////////////////////////////////
159//
160// Calculation of total CrossSection of Anti-Nucleus - Nucleus
161//////////////////////////////////////////////////////////////////////////////
162G4double G4ComponentAntiNuclNuclearXS::GetTotalZandACrossSection
163(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A )
164{ return ComputeTotalCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
165
166////////////////////////////////////////////////////////////////
167// Calculation of inelastic CrossSection of Anti-Nucleus - Nucleus
168////////////////////////////////////////////////////////////////
169
170G4double G4ComponentAntiNuclNuclearXS:: ComputeInelasticCrossSection
171(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double A)
172{
173 G4double inelxsection, sigmaTotal, sigmaElastic;
174
175 const G4ParticleDefinition* theParticle = aParticle;
176
177 sigmaTotal = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
178 sigmaElastic = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
179
180// calculation of sqr of radius NN-collision
181 fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi); // fm^2
182
183
184// calculation of effective nuclear radius for Pbar and Nbar interaction (can be changed)
185
186 if ( (theParticle == theAProton) || (theParticle == theANeutron) )
187 {
188 if (A==1)
189 { fInelasticXsc = (sigmaTotal - sigmaElastic) * millibarn;
190 return fInelasticXsc;
191 }
192 fRadiusEff = 1.31*std::pow(A, 0.22)+0.9/std::pow(A, 1./3.); //fm
193
194 if( (Z==1) && (A==2) ) fRadiusEff = 3.582; //fm
195 if( (Z==1) && (A==3) ) fRadiusEff = 3.105;
196 if( (Z==2) && (A==3) ) fRadiusEff = 3.105;
197 if( (Z==2) && (A==4) ) fRadiusEff = 2.209;
198 }
199
200//calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
201
202 if (theParticle ==theADeuteron)
203{
204 fRadiusEff = 1.38*std::pow(A, 0.21)+1.55/std::pow(A, 1./3.);
205
206 if( (Z==1) && (A==2) ) fRadiusEff = 3.169; //fm
207 if( (Z==1) && (A==3) ) fRadiusEff = 3.066;
208 if( (Z==2) && (A==3) ) fRadiusEff = 3.066;
209 if( (Z==2) && (A==4) ) fRadiusEff = 2.498;
210 }
211
212//calculation of effective nuclear radius for AntiHe3 interaction (can be changed)
213
214 if( (theParticle ==theAHe3) || (theParticle ==theATriton) )
215 {
216 fRadiusEff = 1.34 * std::pow(A, 0.21)+1.51/std::pow(A, 1./3.);
217
218 if( (Z==1) && (A==2) ) fRadiusEff = 3.066; //fm
219 if( (Z==1) && (A==3) ) fRadiusEff = 2.973;
220 if( (Z==2) && (A==3) ) fRadiusEff = 2.973;
221 if( (Z==2) && (A==4) ) fRadiusEff = 2.508;
222
223 }
224
225//calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
226
227 if (theParticle == theAAlpha)
228 {
229 fRadiusEff = 1.3*std::pow(A, 0.21)+1.05/std::pow(A, 1./3.);
230
231 if( (Z==1) && (A==2) ) fRadiusEff = 2.498; //fm
232 if( (Z==1) && (A==3) ) fRadiusEff = 2.508;
233 if( (Z==2) && (A==3) ) fRadiusEff = 2.508;
234 if( (Z==2) && (A==4) ) fRadiusEff = 2.158;
235 }
236 G4double R2 = fRadiusEff*fRadiusEff;
237 G4double REf2 = R2+fRadiusNN2;
238 G4double ApAt= std::abs(theParticle->GetBaryonNumber()) * A;
239
240 inelxsection = pi*REf2 *10* std::log(1+(ApAt*sigmaTotal/(pi*REf2*10.))); //mb
241 inelxsection = inelxsection * millibarn;
242 fInelasticXsc = inelxsection;
243 return fInelasticXsc;
244}
245
246///////////////////////////////////////////////////////////////////////////////
247//
248// Calculates Inelastic Anti-nucleus-Nucleus cross-section
249//
250G4double G4ComponentAntiNuclNuclearXS::GetInelasticZandACrossSection
251(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A)
252{return ComputeInelasticCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
253
254
255
256///////////////////////////////////////////////////////////////////////////////
257//
258// Calculates elastic Anti-nucleus-Nucleus cross-section as Total - Inelastic
259//
260G4double G4ComponentAntiNuclNuclearXS::ComputeElasticCrossSection
261(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double A)
262{
263 fElasticXsc = ComputeTotalCrossSection(aParticle, kinEnergy, Z, A)-
264 ComputeInelasticCrossSection(aParticle, kinEnergy, Z, A);
265
266 if (fElasticXsc < 0.) fElasticXsc = 0.;
267
268 return fElasticXsc;
269}
270
271///////////////////////////////////////////////////////////////////////////////
272//
273// Calculates elastic Anti-nucleus-Nucleus cross-section
274//
275G4double G4ComponentAntiNuclNuclearXS:: GetElasticZandACrossSection
276(const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A)
277{ return ComputeElasticCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
278
279
280///////////////////////////////////////////////////////////////////////////////////
281// Calculation of Antihadron - hadron Total Cross-section
282
283G4double G4ComponentAntiNuclNuclearXS ::GetAntiHadronNucleonTotCrSc
284(const G4ParticleDefinition* aParticle, G4double kinEnergy)
285{
286 G4double xsection, Pmass, Energy, momentum;
287 const G4ParticleDefinition* theParticle = aParticle;
288 Pmass=theParticle->GetPDGMass();
289 Energy=Pmass+kinEnergy;
290 momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->GetBaryonNumber());
291 G4double Plab = momentum / GeV;
292
293 G4double B, SigAss;
294 G4double C, d1, d2, d3 ;
295
296 Elab = std::sqrt(Mn*Mn + Plab*Plab); // GeV
297 S = 2.*Mn*Mn + 2. *Mn*Elab; // GeV^2
298 SqrtS = std::sqrt(S); // GeV
299
300 B = b0+b2*std::log(SqrtS/SqrtS0)*std::log(SqrtS/SqrtS0); //GeV^(-2)
301 SigAss = 36.04 +0.304*std::log(S/S0)*std::log(S/S0); //mb
302 R0 = std::sqrt(0.40874044*SigAss - B); //GeV^(-2)
303
304 C = 13.55;
305 d1 = -4.47;
306 d2 = 12.38;
307 d3 = -12.43;
308 xsection = SigAss*(1 + 1./(std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
309 *C* (1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
310
311// xsection *= millibarn;
312
313 fAntiHadronNucleonTotXsc = xsection;
314 return fAntiHadronNucleonTotXsc;
315}
316
317
318//
319// /////////////////////////////////////////////////////////////////////////////////
320// Calculation of Antihadron - hadron Elastic Cross-section
321
322G4double G4ComponentAntiNuclNuclearXS ::
323GetAntiHadronNucleonElCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy)
324{
325 G4double xsection;
326
327 G4double SigAss;
328 G4double C, d1, d2, d3 ;
329
330 GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
331
332 SigAss = 4.5 + 0.101*std::log(S/S0)*std::log(S/S0); //mb
333
334 C = 59.27;
335 d1 = -6.95;
336 d2 = 23.54;
337 d3 = -25.34;
338
339 xsection = SigAss* (1 + 1. / (std::sqrt(S-4.*Mn*Mn)) / (std::pow(R0, 3.))
340 *C* ( 1+d1/SqrtS+d2/(std::pow(SqrtS,2.))+d3/(std::pow(SqrtS,3.)) ));
341
342// xsection *= millibarn;
343
344 fAntiHadronNucleonElXsc = xsection;
345 return fAntiHadronNucleonElXsc;
346}
347
348
349
Note: See TracBrowser for help on using the repository browser.