Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/cross_sections/src/G4ComponentAntiNuclNuclearXS.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/cross_sections/src/G4ComponentAntiNuclNuclearXS.cc (Version 11.3.0) and /processes/hadronic/cross_sections/src/G4ComponentAntiNuclNuclearXS.cc (Version 10.1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //  Calculation of the total, elastic and inel     26 //  Calculation of the total, elastic and inelastic cross-sections
 27 //  of anti-nucleon and anti-nucleus interacti     27 //  of anti-nucleon and anti-nucleus interactions with nuclei
 28 //  based on Glauber approach and V. Grishine      28 //  based on Glauber approach and V. Grishine formulaes for
 29 //  interpolations (ref. V.M.Grichine, Eur.Phy     29 //  interpolations (ref. V.M.Grichine, Eur.Phys.J., C62(2009) 399;
 30 //  NIM, B267 (2009) 2460) and our parametriza     30 //  NIM, B267 (2009) 2460) and our parametrization of hadron-nucleon
 31 //  cross-sections                                 31 //  cross-sections
 32 //                                                 32 // 
 33 //                                                 33 // 
 34 //   Created by A.Galoyan and V. Uzhinsky, 18.     34 //   Created by A.Galoyan and V. Uzhinsky, 18.11.2010
 35                                                    35 
 36                                                    36 
 37 #include "G4ComponentAntiNuclNuclearXS.hh"         37 #include "G4ComponentAntiNuclNuclearXS.hh"
 38                                                    38 
 39 #include "G4PhysicalConstants.hh"                  39 #include "G4PhysicalConstants.hh"
 40 #include "G4SystemOfUnits.hh"                      40 #include "G4SystemOfUnits.hh"
 41 #include "G4ParticleTable.hh"                      41 #include "G4ParticleTable.hh"
 42 #include "G4IonTable.hh"                           42 #include "G4IonTable.hh"
 43 #include "G4ParticleDefinition.hh"                 43 #include "G4ParticleDefinition.hh"
 44 #include "G4HadronicException.hh"              << 
 45                                                    44 
 46                                                <<  45 ///////////////////////////////////////////////////////////////////////////////
 47 ////////////////////////////////////////////// << 
 48                                                    46 
 49 G4ComponentAntiNuclNuclearXS::G4ComponentAntiN     47 G4ComponentAntiNuclNuclearXS::G4ComponentAntiNuclNuclearXS() 
 50 : G4VComponentCrossSection("AntiAGlauber"),        48 : G4VComponentCrossSection("AntiAGlauber"),
 51   fRadiusEff(0.0),                             <<  49 // fUpperLimit(10000*GeV), fLowerLimit(10*MeV),
                                                   >>  50   fRadiusEff(0.0), fRadiusNN2(0.0),
 52   fTotalXsc(0.0), fElasticXsc(0.0), fInelastic     51   fTotalXsc(0.0), fElasticXsc(0.0), fInelasticXsc(0.0),
 53   fAntiHadronNucleonTotXsc(0.0), fAntiHadronNu     52   fAntiHadronNucleonTotXsc(0.0), fAntiHadronNucleonElXsc(0.0),
 54   Elab(0.0), S(0.0), SqrtS(0)                      53   Elab(0.0), S(0.0), SqrtS(0) 
 55 {                                                  54 {
 56   theAProton   = G4AntiProton::AntiProton();   <<  55   theAProton       = G4AntiProton::AntiProton();
 57   theANeutron  = G4AntiNeutron::AntiNeutron(); <<  56   theANeutron      = G4AntiNeutron::AntiNeutron();
 58   theADeuteron = G4AntiDeuteron::AntiDeuteron( <<  57   theADeuteron     = G4AntiDeuteron::AntiDeuteron();
 59   theATriton   = G4AntiTriton::AntiTriton();   <<  58   theATriton       = G4AntiTriton::AntiTriton();
 60   theAAlpha    = G4AntiAlpha::AntiAlpha();     <<  59   theAAlpha        = G4AntiAlpha::AntiAlpha();
 61   theAHe3      = G4AntiHe3::AntiHe3();         <<  60   theAHe3          = G4AntiHe3::AntiHe3();
 62   Mn     = 0.93827231;           // GeV        <<  61 
 63   b0     = 11.92;                // GeV^(-2)   <<  62  Mn       = 0.93827231;           // GeV
 64   b2     = 0.3036;               // GeV^(-2)   <<  63  b0       = 11.92;                // GeV^(-2)
 65   SqrtS0 = 20.74;                // GeV        <<  64  b2       = 0.3036;               // GeV^(-2)
 66   S0     = 33.0625;              // GeV^2      <<  65  SqrtS0   = 20.74;                // GeV
 67   R0     = 1.0;                  // default va <<  66  S0       = 33.0625;              // GeV^2
                                                   >>  67  R0       = 1.0;                  // default value (V.Ivanchenko)
 68 }                                                  68 }
 69                                                    69 
 70                                                <<  70 ///////////////////////////////////////////////////////////////////////////////////////
 71 ////////////////////////////////////////////// <<  71 //
                                                   >>  72 //
 72                                                    73 
 73 G4ComponentAntiNuclNuclearXS::~G4ComponentAnti     74 G4ComponentAntiNuclNuclearXS::~G4ComponentAntiNuclNuclearXS()
 74 {                                                  75 {
 75 }                                                  76 }
 76                                                    77 
                                                   >>  78 ////////////////////////////////////////////////////////////////////////////////
 77                                                    79 
 78 ////////////////////////////////////////////// <<  80 
                                                   >>  81 
                                                   >>  82 ////////////////////////////////////////////////////////////////////////////////
 79 //                                                 83 //
 80 // Calculation of total CrossSection of Anti-N     84 // Calculation of total CrossSection of Anti-Nucleus - Nucleus 
 81                                                    85 
                                                   >>  86 
 82 G4double G4ComponentAntiNuclNuclearXS::GetTota     87 G4double G4ComponentAntiNuclNuclearXS::GetTotalElementCrossSection
 83 (const G4ParticleDefinition* aParticle, G4doub     88 (const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double A)
 84 {                                                  89 {
 85   if ( aParticle == nullptr ) {                <<  90   G4double xsection,   sigmaTotal, sigmaElastic;
 86     G4ExceptionDescription ed;                 << 
 87     ed << "anti-nucleus with nullptr particle  << 
 88     G4Exception( "G4ComponentAntiNuclNuclearXS << 
 89                  "antiNuclNuclearXS001", JustW << 
 90     return 0.0;                                << 
 91   }                                            << 
 92                                                << 
 93   const G4ParticleDefinition* theParticle = aP << 
 94   G4double sigmaTotal = GetAntiHadronNucleonTo << 
 95                                                    91 
 96   // calculation of squared radius of  NN-coll <<  92  const G4ParticleDefinition* theParticle = aParticle;
 97   G4int i(-1), j(-1);                          <<  93 
 98   if      ( theParticle == theAProton  ||      <<  94     sigmaTotal        = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
 99       theParticle == theANeutron )  { i=0; }   <<  95     sigmaElastic      = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
100   else if ( theParticle == theADeuteron ) { i= << 
101   else if ( theParticle == theATriton   ) { i= << 
102   else if ( theParticle == theAHe3      ) { i= << 
103   else if ( theParticle == theAAlpha    ) { i= << 
104   else {};                                     << 
105                                                << 
106   if ( i < 0  && ( ! theParticle->IsAntiHypern << 
107     G4ExceptionDescription ed;                 << 
108     ed << "Unknown anti-nucleus : " << thePart << 
109        << "Target (Z, A)=(" << Z << "," << A < << 
110     G4Exception( "G4ComponentAntiNuclNuclearXS << 
111                  "antiNuclNuclearXS002", JustW << 
112   }                                            << 
113                                                    96 
114   G4int intA = static_cast<G4int>( A );        <<  97 // calculation of squared radius of  NN-collision
                                                   >>  98    fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi) ;  //fm^2   
115                                                    99 
116   if      ( Z == 1  &&  intA == 1 ) { j=0; }   << 100 // calculation of effective nuclear radius for Pbar and Nbar interactions (can be changed)
117   else if ( Z == 1  &&  intA == 2 ) { j=1; }   << 101 
118   else if ( Z == 1  &&  intA == 3 ) { j=2; }   << 102   //A.R. 29-Jan-2013 : use antiprotons/antineutrons as the default case,
119   else if ( Z == 2  &&  intA == 3 ) { j=3; }   << 103   //                   to be used for instance, as first approximation
120   else if ( Z == 2  &&  intA == 4 ) { j=4; }   << 104   //                   without validation, for anti-hyperons. 
121   else {}                                      << 105   //if ( (theParticle == theAProton) || (theParticle == theANeutron) ) {   
122                                                << 106      if(A==1)
123   if ( i <  0  &&  j >= 0 ) { fRadiusEff = Ref << 107      { fTotalXsc = sigmaTotal * millibarn;
124   if ( i == 0  &&  j == 0 ) return sigmaTotal  << 108         return fTotalXsc;  }
125   if ( i >= 0  &&  j >= 0 ) { fRadiusEff = Ref << 109  
126                                                << 110    fRadiusEff = 1.34*std::pow(A,0.23)+1.35/std::pow(A,1./3.);   //fm
127   if ( j < 0 ) {                               << 111   
128     if      ( i  == 0 ) { fRadiusEff = 1.34 *  << 112    if( (Z==1) && (A==2) ) fRadiusEff = 3.800;     //fm
129                                      + 1.35 /  << 113    if( (Z==1) && (A==3) ) fRadiusEff = 3.300;  
130     else if ( i  == 1 ) { fRadiusEff = 1.46 *  << 114    if( (Z==2) && (A==3) ) fRadiusEff = 3.300;  
131                                      + 1.45 /  << 115    if( (Z==2) && (A==4) ) fRadiusEff = 2.376;     
132     else if ( i  == 2 ) { fRadiusEff = 1.40 *  << 116  //}
133                                      + 1.63 /  << 117       
134     else if ( i  == 3 ) { fRadiusEff = 1.40 *  << 118 //calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
135                                      + 1.63 /  << 119   if (theParticle == theADeuteron) 
136     else if ( i  == 4 ) { fRadiusEff = 1.35 *  << 120  { fRadiusEff = 1.46 * std::pow(A,0.21) + 1.45 / std::pow(A,1./3.);
137                                      + 1.10 /  << 121 
138     else if ( i  <  0 ) { fRadiusEff = 1.35 *  << 122     if( (Z==1) && (A==2) ) fRadiusEff = 3.238;     //fm
139                                + 1.10 / theG4P << 123     if( (Z==1) && (A==3) ) fRadiusEff = 3.144;     
140     else {}                                    << 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;  
141   }                                               136   }
142                                                   137 
143   G4double R2   = fRadiusEff*fRadiusEff;       << 138 //calculation of effective nuclear radius for AntiAlpha interaction (can be changed)
144   G4double ApAt = std::abs(theParticle->GetBar << 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  }
145                                                   150 
146   G4double xsection = millibarn*2.*pi*R2*10.*G << 151    G4double R2 = fRadiusEff*fRadiusEff;
147   fTotalXsc = xsection;                        << 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;
148                                                   158 
149   return fTotalXsc;                               159   return fTotalXsc; 
150 }                                                 160 }
151                                                   161 
152                                                   162 
153 ////////////////////////////////////////////// << 163 ////////////////////////////////////////////////////////////////////////////////
154 //                                                164 // 
155 // Calculation of total CrossSection of Anti-N    165 // Calculation of total CrossSection of Anti-Nucleus - Nucleus 
156                                                << 166 //////////////////////////////////////////////////////////////////////////////
157 G4double G4ComponentAntiNuclNuclearXS::GetTota    167 G4double G4ComponentAntiNuclNuclearXS::GetTotalIsotopeCrossSection
158 (const G4ParticleDefinition* aParticle, G4doub    168 (const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A )
159 {                                              << 169 { return GetTotalElementCrossSection(aParticle, kinEnergy, Z, (G4double) A);  }
160   return GetTotalElementCrossSection(aParticle << 
161 }                                              << 
162                                                << 
163                                                   170 
164 ////////////////////////////////////////////// << 171 ////////////////////////////////////////////////////////////////
165 // Calculation of inelastic CrossSection of An    172 // Calculation of inelastic CrossSection of Anti-Nucleus - Nucleus
                                                   >> 173 ////////////////////////////////////////////////////////////////
166                                                   174 
167 G4double G4ComponentAntiNuclNuclearXS::GetInel    175 G4double G4ComponentAntiNuclNuclearXS::GetInelasticElementCrossSection
168 (const G4ParticleDefinition* aParticle, G4doub    176 (const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double A)
169 {                                                 177 {
170   if ( aParticle == nullptr ) {                << 178   G4double  inelxsection,  sigmaTotal, sigmaElastic;
171     G4ExceptionDescription ed;                 << 179 
172     ed << "anti-nucleus with nullptr particle  << 
173     G4Exception( "G4ComponentAntiNuclNuclearXS << 
174                  "antiNuclNuclearXS003", JustW << 
175     return 0.0;                                << 
176   }                                            << 
177                                                << 
178   const G4ParticleDefinition* theParticle = aP    180   const G4ParticleDefinition* theParticle = aParticle;
179   G4double sigmaTotal   = GetAntiHadronNucleon << 181 
180   G4double sigmaElastic = GetAntiHadronNucleon << 182     sigmaTotal        = GetAntiHadronNucleonTotCrSc(theParticle,kinEnergy);
                                                   >> 183     sigmaElastic      = GetAntiHadronNucleonElCrSc(theParticle,kinEnergy);
181                                                   184   
182   // calculation of sqr of radius NN-collision << 185 // calculation of sqr of radius NN-collision
183   G4int i(-1), j(-1);                          << 186    fRadiusNN2=sigmaTotal*sigmaTotal*0.1/(8.*sigmaElastic*pi);   // fm^2   
184   if      ( theParticle == theAProton  ||      << 
185       theParticle == theANeutron )  { i=0; }   << 
186   else if ( theParticle == theADeuteron ) { i= << 
187   else if ( theParticle == theATriton   ) { i= << 
188   else if ( theParticle == theAHe3      ) { i= << 
189   else if ( theParticle == theAAlpha    ) { i= << 
190   else {};                                     << 
191                                                << 
192   if ( i < 0  && ( ! theParticle->IsAntiHypern << 
193     G4ExceptionDescription ed;                 << 
194     ed << "Unknown anti-nucleus : " << thePart << 
195        << "Target (Z, A)=(" << Z << "," << A < << 
196     G4Exception( "G4ComponentAntiNuclNuclearXS << 
197                  "antiNuclNuclearXS004", JustW << 
198   }                                            << 
199                                                   187 
200   G4int intA = static_cast<G4int>( A );        << 
201                                                   188 
202   if      ( Z == 1  &&  intA == 1 ) { j=0; }   << 189 // calculation of effective nuclear radius for Pbar and Nbar interaction (can be changed)
203   else if ( Z == 1  &&  intA == 2 ) { j=1; }   << 
204   else if ( Z == 1  &&  intA == 3 ) { j=2; }   << 
205   else if ( Z == 2  &&  intA == 3 ) { j=3; }   << 
206   else if ( Z == 2  &&  intA == 4 ) { j=4; }   << 
207   else {}                                      << 
208                                                << 
209   if ( i <  0  &&  j >= 0 ) { fRadiusEff = Ref << 
210   if ( i == 0  &&  j == 0 ) return (sigmaTotal << 
211   if ( i >= 0  &&  j >= 0 ) { fRadiusEff = Ref << 
212                                                << 
213   if ( j < 0) {                                << 
214     if      ( i  == 0 ) { fRadiusEff = 1.31*th << 
215                                      + 0.90/th << 
216     else if ( i  == 1 ) { fRadiusEff = 1.38*th << 
217                                      + 1.55/th << 
218     else if ( i  == 2 ) { fRadiusEff = 1.34*th << 
219                                      + 1.51/th << 
220     else if ( i  == 3 ) { fRadiusEff = 1.34*th << 
221                                      + 1.51/th << 
222     else if ( i  == 4 ) { fRadiusEff = 1.30*th << 
223                                      + 1.05/th << 
224     else if ( i  <  0 ) { fRadiusEff = 1.30*th << 
225                                      + 1.05/th << 
226     else {}                                    << 
227   }                                            << 
228                                                   190 
229   G4double R2   = fRadiusEff*fRadiusEff;       << 191   //A.R. 29-Jan-2013 : use antiprotons/antineutrons as the default case,
230   G4double ApAt = std::abs(theParticle->GetBar << 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  //}
231                                                   206 
232   G4double inelxsection = millibarn*pi*R2*10.* << 207 //calculation of effective nuclear radius for AntiDeuteron interaction (can be changed)
233   fInelasticXsc = inelxsection;                << 
234                                                   208 
235   return fInelasticXsc;                        << 209   if (theParticle ==theADeuteron) 
236 }                                              << 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)
237                                                   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 }
238                                                   252 
239 ////////////////////////////////////////////// << 253 ///////////////////////////////////////////////////////////////////////////////
240 //                                                254 //
241 // Calculates Inelastic Anti-nucleus-Nucleus c    255 // Calculates Inelastic Anti-nucleus-Nucleus cross-section   
242                                                << 256 //
243 G4double G4ComponentAntiNuclNuclearXS::GetInel    257 G4double G4ComponentAntiNuclNuclearXS::GetInelasticIsotopeCrossSection
244 (const G4ParticleDefinition* aParticle, G4doub    258 (const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A)
245 {                                              << 259 {return GetInelasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
246   return GetInelasticElementCrossSection(aPart << 260  
247 }                                              << 
248                                                   261 
249                                                   262 
250 ////////////////////////////////////////////// << 263 ///////////////////////////////////////////////////////////////////////////////
251 //                                                264 //
252 // Calculates elastic Anti-nucleus-Nucleus cro    265 // Calculates elastic Anti-nucleus-Nucleus cross-section  as Total - Inelastic 
253                                                << 266 //
254 G4double G4ComponentAntiNuclNuclearXS::GetElas    267 G4double G4ComponentAntiNuclNuclearXS::GetElasticElementCrossSection
255 (const G4ParticleDefinition* aParticle, G4doub    268 (const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4double A)
256 {                                                 269 {
257   fElasticXsc = GetTotalElementCrossSection(aP << 270  fElasticXsc = GetTotalElementCrossSection(aParticle, kinEnergy, Z, A)-
258                 GetInelasticElementCrossSectio << 271    GetInelasticElementCrossSection(aParticle, kinEnergy, Z, A);
259   if (fElasticXsc < 0.) fElasticXsc = 0.;      << 272 
260   return fElasticXsc;                          << 273  if (fElasticXsc < 0.) fElasticXsc = 0.;
261 }                                              << 
262                                                   274 
                                                   >> 275  return fElasticXsc;
                                                   >> 276 }
263                                                   277  
264 ////////////////////////////////////////////// << 278 ///////////////////////////////////////////////////////////////////////////////
265 //                                                279 //
266 // Calculates elastic Anti-nucleus-Nucleus cro    280 // Calculates elastic Anti-nucleus-Nucleus cross-section   
267                                                << 281 //
268 G4double G4ComponentAntiNuclNuclearXS::GetElas    282 G4double G4ComponentAntiNuclNuclearXS::GetElasticIsotopeCrossSection
269 (const G4ParticleDefinition* aParticle, G4doub    283 (const G4ParticleDefinition* aParticle, G4double kinEnergy, G4int Z, G4int A)
270 {                                              << 284 { return GetElasticElementCrossSection(aParticle, kinEnergy, Z, (G4double) A); }
271   return GetElasticElementCrossSection(aPartic << 
272 }                                              << 
273                                                   285 
274                                                   286 
275 ////////////////////////////////////////////// << 287 ///////////////////////////////////////////////////////////////////////////////////
276 // Calculation of  Antihadron - hadron Total C    288 // Calculation of  Antihadron - hadron Total Cross-section  
277                                                   289 
278 G4double G4ComponentAntiNuclNuclearXS::GetAnti    290 G4double G4ComponentAntiNuclNuclearXS::GetAntiHadronNucleonTotCrSc
279 (const G4ParticleDefinition* aParticle, G4doub    291 (const G4ParticleDefinition* aParticle, G4double kinEnergy)
280 {                                                 292 {
281   G4double xsection, Pmass, Energy, momentum;     293   G4double xsection, Pmass, Energy, momentum;
282   const G4ParticleDefinition* theParticle = aP    294   const G4ParticleDefinition* theParticle = aParticle;
283   Pmass=theParticle->GetPDGMass();                295   Pmass=theParticle->GetPDGMass();
284   Energy=Pmass+kinEnergy;                         296   Energy=Pmass+kinEnergy;
285   momentum=std::sqrt(Energy*Energy-Pmass*Pmass    297   momentum=std::sqrt(Energy*Energy-Pmass*Pmass)/std::abs(theParticle->GetBaryonNumber());
286   G4double Plab = momentum / GeV;                 298   G4double Plab = momentum / GeV;
287                                                   299 
288   G4double   B, SigAss;                        << 300  G4double   B, SigAss;
289   G4double   C, d1, d2, d3;                    << 301  G4double   C, d1, d2, d3  ;
290   Elab     = std::sqrt(Mn*Mn + Plab*Plab);   / << 
291   S        = 2.*Mn*Mn + 2. *Mn*Elab;         / << 
292   SqrtS    = std::sqrt(S);                   / << 
293   B        = b0+b2*G4Log(SqrtS/SqrtS0)*G4Log(S << 
294   SigAss   = 36.04 +0.304*G4Log(S/S0)*G4Log(S/ << 
295   R0       = std::sqrt(0.40874044*SigAss - B); << 
296   C        = 13.55;                            << 
297   d1       = -4.47;                            << 
298   d2       = 12.38;                            << 
299   d3       = -12.43;                           << 
300                                                << 
301   xsection = SigAss * ( 1 + 1./(std::sqrt(S-4. << 
302                         * C * ( 1 + d1/SqrtS + << 
303                                 + d3/(theG4Pow << 
304                                                   302 
305   //xsection *= millibarn;                     << 303  Elab     = std::sqrt(Mn*Mn + Plab*Plab);   // GeV
306   fAntiHadronNucleonTotXsc = xsection;         << 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;
307                                                   319 
                                                   >> 320   fAntiHadronNucleonTotXsc = xsection;
308   return fAntiHadronNucleonTotXsc;                321   return fAntiHadronNucleonTotXsc;
309 }                                                 322 }
310                                                   323 
311                                                   324 
312 // /////////////////////////////////////////// << 325 //
                                                   >> 326 // /////////////////////////////////////////////////////////////////////////////////
313 // Calculation of  Antihadron - hadron Elastic    327 // Calculation of  Antihadron - hadron Elastic Cross-section  
314                                                   328 
315 G4double G4ComponentAntiNuclNuclearXS ::          329 G4double G4ComponentAntiNuclNuclearXS :: 
316 GetAntiHadronNucleonElCrSc(const G4ParticleDef    330 GetAntiHadronNucleonElCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy)
317 {                                                 331 {
318   G4double xsection;                           << 332  G4double xsection;
319   G4double   SigAss;                           << 
320   G4double   C, d1, d2, d3;                    << 
321   GetAntiHadronNucleonTotCrSc(aParticle,kinEne << 
322   SigAss   = 4.5 + 0.101*G4Log(S/S0)*G4Log(S/S << 
323   C        = 59.27;                            << 
324   d1       = -6.95;                            << 
325   d2       = 23.54;                            << 
326   d3       = -25.34;                           << 
327                                                << 
328   xsection = SigAss * ( 1 + 1. / (std::sqrt(S- << 
329                         * C * ( 1 + d1/SqrtS + << 
330                                 + d3/(theG4Pow << 
331                                                   333 
332   //xsection *= millibarn;                     << 334  G4double   SigAss;
333   fAntiHadronNucleonElXsc = xsection;          << 335  G4double   C, d1, d2, d3  ;
334                                                   336 
335   return fAntiHadronNucleonElXsc;              << 337  GetAntiHadronNucleonTotCrSc(aParticle,kinEnergy);
336 }                                              << 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.)) ));  
337                                                   348 
                                                   >> 349 //  xsection *= millibarn;
338                                                   350 
339 ////////////////////////////////////////////// << 351   fAntiHadronNucleonElXsc = xsection;
                                                   >> 352   return fAntiHadronNucleonElXsc;
                                                   >> 353 }
340                                                   354 
341 void G4ComponentAntiNuclNuclearXS::CrossSectio    355 void G4ComponentAntiNuclNuclearXS::CrossSectionDescription(std::ostream& outFile) const
342 {                                                 356 {
343   outFile << "The G4ComponentAntiNuclNuclearXS    357   outFile << "The G4ComponentAntiNuclNuclearXS calculates total,\n"
344           << "inelastic, elastic cross section    358           << "inelastic, elastic cross sections  of anti-nucleons and light \n"
345           << "anti-nucleus interactions with n << 359           << "anti-nucleus interactions with nuclei using Glauber's approach.\n"  
346           << "It uses parametrizations of anti    360           << "It uses parametrizations of antiproton-proton total and elastic \n"
347           << "cross sections and Wood-Saxon di << 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"
348           << "See details in Phys.Lett. B705 (    363           << "See details in Phys.Lett. B705 (2011) 235. \n";
349 }                                                 364 }
350                                                << 
351                                                   365