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

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

update to last version 4.9.4

File size: 12.4 KB
Line 
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.