Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/cross_sections/src/G4UPiNuclearCrossSection.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/G4UPiNuclearCrossSection.cc (Version 11.3.0) and /processes/hadronic/cross_sections/src/G4UPiNuclearCrossSection.cc (Version 10.6.p3)


  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 //                                                 26 //
 27 // Calculation of the total, elastic and inela     27 // Calculation of the total, elastic and inelastic cross-sections
 28 // based on Barashenkov parametrisations of pi     28 // based on Barashenkov parametrisations of pion data
 29 //                                                 29 //
 30 // 16.08.06 V.Ivanchenko - first implementatio     30 // 16.08.06 V.Ivanchenko - first implementation on base of 
 31 //                         J.P Wellisch class      31 //                         J.P Wellisch class G4PiNuclearCrossSection
 32 // 22.01.07 V.Ivanchenko - add cross section i     32 // 22.01.07 V.Ivanchenko - add cross section interfaces with Z and A
 33 // 05.03.07 V.Ivanchenko - fix weight for inte     33 // 05.03.07 V.Ivanchenko - fix weight for interpolation
 34 // 13.03.07 V.Ivanchenko - cleanup at low ener     34 // 13.03.07 V.Ivanchenko - cleanup at low energies
 35 // 11.09.09 V.Ivanchenko - fixed bug in interp     35 // 11.09.09 V.Ivanchenko - fixed bug in interpolation
 36 //                                                 36 //
 37                                                    37 
 38 #include "G4UPiNuclearCrossSection.hh"             38 #include "G4UPiNuclearCrossSection.hh"
 39 #include "G4SystemOfUnits.hh"                      39 #include "G4SystemOfUnits.hh"
 40 #include "G4PhysicsFreeVector.hh"              <<  40 #include "G4LPhysicsFreeVector.hh"
 41 #include "G4PionMinus.hh"                          41 #include "G4PionMinus.hh"
 42 #include "G4PionPlus.hh"                           42 #include "G4PionPlus.hh"
 43 #include "G4PhysicsTable.hh"                       43 #include "G4PhysicsTable.hh"
 44 #include "G4NistManager.hh"                        44 #include "G4NistManager.hh"
 45 #include "G4HadronXSDataTable.hh"              << 
 46                                                    45 
 47 G4int G4UPiNuclearCrossSection::theZ[NZ] =         46 G4int G4UPiNuclearCrossSection::theZ[NZ] = 
 48 {2,4,6,7,8,11,13,20,26,29,42,48,50,74,82,92};      47 {2,4,6,7,8,11,13,20,26,29,42,48,50,74,82,92};
 49 G4int G4UPiNuclearCrossSection::idxZ[93] = {0}     48 G4int G4UPiNuclearCrossSection::idxZ[93] = {0}; 
 50 G4double G4UPiNuclearCrossSection::theA[NZ]        49 G4double G4UPiNuclearCrossSection::theA[NZ]   = {0.0};
 51 G4double G4UPiNuclearCrossSection::APower[93]      50 G4double G4UPiNuclearCrossSection::APower[93] = {0.0};
 52                                                    51 
 53 G4PhysicsTable* G4UPiNuclearCrossSection::piPl     52 G4PhysicsTable* G4UPiNuclearCrossSection::piPlusElastic = nullptr;
 54 G4PhysicsTable* G4UPiNuclearCrossSection::piPl     53 G4PhysicsTable* G4UPiNuclearCrossSection::piPlusInelastic = nullptr;
 55 G4PhysicsTable* G4UPiNuclearCrossSection::piMi     54 G4PhysicsTable* G4UPiNuclearCrossSection::piMinusElastic = nullptr;
 56 G4PhysicsTable* G4UPiNuclearCrossSection::piMi     55 G4PhysicsTable* G4UPiNuclearCrossSection::piMinusInelastic = nullptr;
 57                                                    56 
                                                   >>  57 #ifdef G4MULTITHREADED
                                                   >>  58 G4Mutex G4UPiNuclearCrossSection::pionUXSMutex = G4MUTEX_INITIALIZER;
                                                   >>  59 #endif
                                                   >>  60 
 58 G4UPiNuclearCrossSection::G4UPiNuclearCrossSec     61 G4UPiNuclearCrossSection::G4UPiNuclearCrossSection()
 59  : G4VCrossSectionDataSet("G4UPiNuclearCrossSe     62  : G4VCrossSectionDataSet("G4UPiNuclearCrossSection")
 60 {                                                  63 {
 61   piPlus = G4PionPlus::PionPlus();             <<  64   isMaster = false;
                                                   >>  65   piPlus  = G4PionPlus::PionPlus();
 62   piMinus = G4PionMinus::PionMinus();              66   piMinus = G4PionMinus::PionMinus();
 63   elow = 20.0*CLHEP::MeV;                      << 
 64                                                    67 
 65   if (idxZ[0] == 0) { LoadData(); }            <<  68   aPower  = 0.75;
                                                   >>  69   elow    = 20.0*CLHEP::MeV;
                                                   >>  70 }
                                                   >>  71 
                                                   >>  72 G4UPiNuclearCrossSection::~G4UPiNuclearCrossSection()
                                                   >>  73 {
                                                   >>  74   if(isMaster) {
                                                   >>  75     if(piPlusElastic) {
                                                   >>  76       piPlusElastic->clearAndDestroy();
                                                   >>  77       delete piPlusElastic;
                                                   >>  78       piPlusElastic = nullptr;
                                                   >>  79     }
                                                   >>  80     if(piPlusInelastic) {
                                                   >>  81       piPlusInelastic->clearAndDestroy();
                                                   >>  82       delete piPlusInelastic;
                                                   >>  83       piPlusInelastic = nullptr;
                                                   >>  84     }
                                                   >>  85     if(piMinusElastic) {
                                                   >>  86       piMinusElastic->clearAndDestroy();
                                                   >>  87       delete piMinusElastic;
                                                   >>  88       piMinusElastic = nullptr;
                                                   >>  89     }
                                                   >>  90     if(piMinusInelastic) {
                                                   >>  91       piMinusInelastic->clearAndDestroy();
                                                   >>  92       delete piMinusInelastic;
                                                   >>  93       piMinusInelastic = nullptr;
                                                   >>  94     }
                                                   >>  95   }
 66 }                                                  96 }
 67                                                    97 
 68 G4bool                                             98 G4bool 
 69 G4UPiNuclearCrossSection::IsElementApplicable(     99 G4UPiNuclearCrossSection::IsElementApplicable(const G4DynamicParticle*, 
 70                 G4int Z, const G4Material*)       100                 G4int Z, const G4Material*)
 71 {                                                 101 {
 72   return (1 < Z);                                 102   return (1 < Z);
 73 }                                                 103 }
 74                                                   104 
 75 G4double G4UPiNuclearCrossSection::Interpolate    105 G4double G4UPiNuclearCrossSection::Interpolate(
 76          G4int Z, G4int A, G4double e, const G    106          G4int Z, G4int A, G4double e, const G4PhysicsTable* table) const
 77 {                                                 107 {
 78   G4double res = 0.0;                             108   G4double res = 0.0;
 79   G4double ekin = std::max(e, elow);              109   G4double ekin = std::max(e, elow);
 80   G4int iz  = std::min(Z, 92);                    110   G4int iz  = std::min(Z, 92);
 81   G4int idx = idxZ[iz];                           111   G4int idx = idxZ[iz];
 82   std::size_t jdx = (std::size_t)(std::max(eki << 112   size_t jdx = (size_t)(std::max(ekin - elow, 0.0)*0.06);
 83   //G4cout << "Interpolate: Z= " << iz << " A=    113   //G4cout << "Interpolate: Z= " << iz << " A= " << A << " idx= " << idx 
 84   // << " jdx= " << jdx << " Ekin= " << ekin <    114   // << " jdx= " << jdx << " Ekin= " << ekin << G4endl;
 85   if(idx < 0 || 2 == iz) {                        115   if(idx < 0 || 2 == iz) {
 86     res = ((*table)[std::abs(idx)])->Value(eki    116     res = ((*table)[std::abs(idx)])->Value(ekin, jdx);
 87     //G4cout << "1: jdx= " << jdx << G4endl;      117     //G4cout << "1: jdx= " << jdx << G4endl; 
 88   } else {                                        118   } else {
 89     G4int iz2 = theZ[idx];                        119     G4int iz2 = theZ[idx];
 90     G4double x2 = (((*table)[idx])->Value(ekin    120     G4double x2 = (((*table)[idx])->Value(ekin, jdx))*APower[iz]/APower[iz2];
 91     //G4cout << "2: jdx= " << jdx << G4endl;      121     //G4cout << "2: jdx= " << jdx << G4endl; 
 92     G4int iz1 = theZ[idx-1];                      122     G4int iz1 = theZ[idx-1];
 93     G4double x1 = (((*table)[idx-1])->Value(ek    123     G4double x1 = (((*table)[idx-1])->Value(ekin, jdx))*APower[iz]/APower[iz1];
 94     G4double w1 = ((G4double)A - theA[idx-1])/    124     G4double w1 = ((G4double)A - theA[idx-1])/(theA[idx] - theA[idx-1]);
 95     res = w1*x2 + (1.0 - w1)*x1;                  125     res = w1*x2 + (1.0 - w1)*x1;
 96   }                                               126   }
 97   //G4cout << " res(nb)= " << res/CLHEP::barn     127   //G4cout << " res(nb)= " << res/CLHEP::barn << G4endl;
 98   return res;                                     128   return res;
 99 }                                                 129 }
100                                                   130 
101 void G4UPiNuclearCrossSection::AddDataSet(cons    131 void G4UPiNuclearCrossSection::AddDataSet(const G4String& p, 
102             const G4double* tot,                  132             const G4double* tot, 
103             const G4double* in,                   133             const G4double* in, 
104             const G4double* e,                    134             const G4double* e, 
105             G4int n)                              135             G4int n)
106 {                                                 136 {
107   G4PhysicsFreeVector* pvin = new G4PhysicsFre << 137   G4LPhysicsFreeVector* pvin = new G4LPhysicsFreeVector(n,e[0]*GeV,e[n-1]*GeV);
108   G4PhysicsFreeVector* pvel = new G4PhysicsFre << 138   pvin->SetSpline(true);
109   for (G4int i=0; i<n; ++i) {                  << 139   G4LPhysicsFreeVector* pvel = new G4LPhysicsFreeVector(n,e[0]*GeV,e[n-1]*GeV);
110     pvin->PutValues(i, e[i]*CLHEP::GeV, in[i]* << 140   pvel->SetSpline(true);
111     pvel->PutValues(i, e[i]*CLHEP::GeV, std::m << 141   for(G4int i=0; i<n; ++i) { 
112   }                                            << 142     pvin->PutValues(i,e[i]*GeV,in[i]*millibarn); 
113   if (spline) {                                << 143     pvel->PutValues(i,e[i]*GeV,std::max(0.0,(tot[i]-in[i])*millibarn)); 
114     pvin->FillSecondDerivatives();             << 
115     pvel->FillSecondDerivatives();             << 
116   }                                               144   }
117   if (p == "pi+") {                            << 145   if(p == "pi+") {
118     piPlusInelastic->push_back(pvin);             146     piPlusInelastic->push_back(pvin);
119     piPlusElastic->push_back(pvel);               147     piPlusElastic->push_back(pvel);
120   } else {                                        148   } else {
121     piMinusInelastic->push_back(pvin);            149     piMinusInelastic->push_back(pvin);
122     piMinusElastic->push_back(pvel);              150     piMinusElastic->push_back(pvel);
123   }                                               151   }
124 }                                                 152 } 
125                                                   153 
126 void G4UPiNuclearCrossSection::DumpPhysicsTabl    154 void G4UPiNuclearCrossSection::DumpPhysicsTable(const G4ParticleDefinition& p)
127 {                                                 155 {
128   if(&p == piPlus) {                              156   if(&p == piPlus) {
129     G4cout << "### G4UPiNuclearCrossSection El    157     G4cout << "### G4UPiNuclearCrossSection Elastic data for pi+" << G4endl;
130     G4cout << *piPlusElastic << G4endl;           158     G4cout << *piPlusElastic << G4endl;
131     G4cout << "### G4UPiNuclearCrossSection In    159     G4cout << "### G4UPiNuclearCrossSection Inelastic data for pi+" << G4endl;
132     G4cout << *piPlusInelastic << G4endl;         160     G4cout << *piPlusInelastic << G4endl;
133   } else if(&p == piMinus) {                      161   } else if(&p == piMinus) {
134     G4cout << "### G4UPiNuclearCrossSection El    162     G4cout << "### G4UPiNuclearCrossSection Elastic data for pi-" << G4endl;
135     G4cout << *piMinusElastic << G4endl;          163     G4cout << *piMinusElastic << G4endl;
136     G4cout << "### G4UPiNuclearCrossSection In    164     G4cout << "### G4UPiNuclearCrossSection Inelastic data for pi-" << G4endl;
137     G4cout << *piMinusInelastic << G4endl;        165     G4cout << *piMinusInelastic << G4endl;
138   }                                               166   }
139 }                                                 167 }
140                                                   168 
141 void G4UPiNuclearCrossSection::BuildPhysicsTab    169 void G4UPiNuclearCrossSection::BuildPhysicsTable(const G4ParticleDefinition& p)
142 {                                                 170 {
                                                   >> 171   //G4cout << "G4UPiNuclearCrossSection::BuildPhysicsTable for " 
                                                   >> 172   //   << p.GetParticleName() << "  " << piPlusElastic << G4endl; 
                                                   >> 173   if(piPlusElastic) { return; }
                                                   >> 174 
143   if(&p != piPlus && &p != piMinus) {             175   if(&p != piPlus && &p != piMinus) { 
144     G4ExceptionDescription ed;                    176     G4ExceptionDescription ed;
145     ed << "This cross section is applicable on    177     ed << "This cross section is applicable only to pions and not to " 
146        << p.GetParticleName() << G4endl;          178        << p.GetParticleName() << G4endl; 
147     G4Exception("G4UPiNuclearCrossSection::Bui    179     G4Exception("G4UPiNuclearCrossSection::BuildPhysicsTable", "had001", 
148     FatalException, ed);                          180     FatalException, ed);
                                                   >> 181     return;
149   }                                               182   }
150 }                                              << 
151                                                   183 
152 void G4UPiNuclearCrossSection::LoadData()      << 184   if(!piPlusElastic) { 
153 {                                              << 185 #ifdef G4MULTITHREADED
154   idxZ[0] = 1;                                 << 186     G4MUTEXLOCK(&pionUXSMutex);
155   idxZ[1] = idxZ[2] = 0;                       << 187     if(!piPlusElastic) { 
                                                   >> 188 #endif
                                                   >> 189       isMaster = true;
                                                   >> 190 #ifdef G4MULTITHREADED
                                                   >> 191     }
                                                   >> 192     G4MUTEXUNLOCK(&pionUXSMutex);
                                                   >> 193 #endif
                                                   >> 194   }
                                                   >> 195   if(!isMaster) { return; }
                                                   >> 196   
156   G4NistManager* nist = G4NistManager::Instanc    197   G4NistManager* nist = G4NistManager::Instance();
157   G4Pow* g4pow = G4Pow::GetInstance();            198   G4Pow* g4pow = G4Pow::GetInstance();
158   for(G4int i=0; i<NZ; ++i) {                     199   for(G4int i=0; i<NZ; ++i) {
159     theA[i] = nist->GetAtomicMassAmu(theZ[i]);    200     theA[i] = nist->GetAtomicMassAmu(theZ[i]);
160   }                                               201   }
161   for(G4int i=1; i<93; ++i) {                     202   for(G4int i=1; i<93; ++i) {
162     APower[i] = g4pow->powA(nist->GetAtomicMas << 203     APower[i] = g4pow->powA(nist->GetAtomicMassAmu(i),aPower);
163   }                                               204   }
164   G4int idx = 1;                                  205   G4int idx = 1;
165   for(G4int i=3; i<93; ++i) {                     206   for(G4int i=3; i<93; ++i) {
166     if(theZ[idx] == i) {                          207     if(theZ[idx] == i) {
167       idxZ[i] = -idx;                             208       idxZ[i] = -idx;
168       ++idx;                                      209       ++idx;
169     } else {                                      210     } else {
170       idxZ[i] = idx;                              211       idxZ[i] = idx;
171     }                                             212     }
172   }                                               213   }
173                                                   214 
174   piPlusElastic    = new G4PhysicsTable();        215   piPlusElastic    = new G4PhysicsTable();
175   piPlusInelastic  = new G4PhysicsTable();        216   piPlusInelastic  = new G4PhysicsTable();
176   piMinusElastic   = new G4PhysicsTable();        217   piMinusElastic   = new G4PhysicsTable();
177   piMinusInelastic = new G4PhysicsTable();        218   piMinusInelastic = new G4PhysicsTable();
178   auto ptr = G4HadronXSDataTable::Instance();  << 
179   ptr->AddTable(piPlusElastic);                << 
180   ptr->AddTable(piPlusInelastic);              << 
181   ptr->AddTable(piMinusElastic);               << 
182   ptr->AddTable(piMinusInelastic);             << 
183                                                   219 
                                                   >> 220   LoadData();
                                                   >> 221   //G4cout << "### Initialisation done " << G4endl;
                                                   >> 222 }
                                                   >> 223 
                                                   >> 224 void G4UPiNuclearCrossSection::LoadData()
                                                   >> 225 {
184   static const G4double e1[38] = {                226   static const G4double e1[38] = {
185     0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.13, 0    227     0.02, 0.04, 0.06, 0.08, 0.1, 0.12, 0.13, 0.14, 0.15, 0.16, 
186     0.17, 0.18, 0.19, 0.2,  0.22,0.24, 0.26, 0    228     0.17, 0.18, 0.19, 0.2,  0.22,0.24, 0.26, 0.28, 0.3,  0.35, 
187     0.4,  0.45, 0.5,  0.55, 0.6, 0.7,  0.8,  0    229     0.4,  0.45, 0.5,  0.55, 0.6, 0.7,  0.8,  0.9,  1,    2, 
188     3,    5,    10,   20,   50,  100,  500, 10    230     3,    5,    10,   20,   50,  100,  500, 1000};
189   static const G4double e2[39] = {                231   static const G4double e2[39] = {
190     0.02, 0.04, 0.06, 0.08, 0.1,  0.11, 0.12,     232     0.02, 0.04, 0.06, 0.08, 0.1,  0.11, 0.12, 0.13, 0.14, 0.15, 
191     0.16, 0.17, 0.18, 0.2,  0.22, 0.24, 0.26,     233     0.16, 0.17, 0.18, 0.2,  0.22, 0.24, 0.26, 0.28, 0.3,  0.35, 
192     0.4,  0.45, 0.5,  0.55, 0.575,0.6,  0.7,      234     0.4,  0.45, 0.5,  0.55, 0.575,0.6,  0.7,  0.8,  0.9,  1, 
193     2,    3,    5,   10,   20,    50,   100,      235     2,    3,    5,   10,   20,    50,   100,  500,  1000};
194   static const G4double e3[31] = {                236   static const G4double e3[31] = {
195     0.02, 0.04, 0.06, 0.08, 0.1,  0.12, 0.14,     237     0.02, 0.04, 0.06, 0.08, 0.1,  0.12, 0.14, 0.16, 0.18, 0.2, 
196     0.22, 0.25, 0.3,  0.35, 0.4,  0.45, 0.5,      238     0.22, 0.25, 0.3,  0.35, 0.4,  0.45, 0.5,  0.6,  0.7,  0.8, 
197     0.9,  1,    2,    3,    5,    10,    20,      239     0.9,  1,    2,    3,    5,    10,    20,   50,   100, 500, 1000};
198   static const G4double e4[32] = {                240   static const G4double e4[32] = {
199     0.02, 0.04, 0.06, 0.08, 0.1,  0.12, 0.14,     241     0.02, 0.04, 0.06, 0.08, 0.1,  0.12, 0.14, 0.16, 0.18,  0.2, 
200     0.22, 0.25, 0.3,  0.35, 0.4,  0.45, 0.5, 0    242     0.22, 0.25, 0.3,  0.35, 0.4,  0.45, 0.5, 0.55,  0.6,   0.7,  
201     0.8,  0.9,    1,    2,    3,    5,   10,      243     0.8,  0.9,    1,    2,    3,    5,   10,   20,   50,  100,  500,  1000};
202   static const G4double e5[34] = {                244   static const G4double e5[34] = {
203    0.02,  0.04, 0.05, 0.06, 0.07, 0.08, 0.09,     245    0.02,  0.04, 0.05, 0.06, 0.07, 0.08, 0.09,  0.1, 0.12, 0.14, 
204    0.16, 0.18,  0.2,  0.22, 0.25, 0.3,  0.35,     246    0.16, 0.18,  0.2,  0.22, 0.25, 0.3,  0.35,  0.4, 0.45,  0.5,  
205    0.6,  0.7,   0.8,  0.9,    1,    2,    3,      247    0.6,  0.7,   0.8,  0.9,    1,    2,    3,   5,   10,    20, 50, 100, 500, 1000};
206   static const G4double e6[35] = {                248   static const G4double e6[35] = {
207    0.02,  0.04, 0.05, 0.06, 0.07, 0.08, 0.09,     249    0.02,  0.04, 0.05, 0.06, 0.07, 0.08, 0.09,  0.1, 0.12, 0.14, 
208    0.16, 0.18,  0.2,  0.22, 0.25,  0.3, 0.35,     250    0.16, 0.18,  0.2,  0.22, 0.25,  0.3, 0.35,  0.4, 0.45,  0.5, 
209    0.55,  0.6,  0.7,  0.8,  0.9,  1,    2,        251    0.55,  0.6,  0.7,  0.8,  0.9,  1,    2,    3,    5,   10, 20, 50, 100, 500, 1000};
210                                                   252 
211   static const G4double he_t[38] = {              253   static const G4double he_t[38] = {
212    40,  70, 108,   152, 208,   276, 300, 320,     254    40,  70, 108,   152, 208,   276, 300, 320,   329, 333, 
213   332, 328, 322,   310, 288,   260, 240, 216,     255   332, 328, 322,   310, 288,   260, 240, 216,   196, 144, 
214   125, 112, 108.5, 109, 110.5, 117, 123, 128.5    256   125, 112, 108.5, 109, 110.5, 117, 123, 128.5, 135, 110, 
215    96,  87,  85,  83.5, 83.5, 83.5, 83.5, 83.5    257    96,  87,  85,  83.5, 83.5, 83.5, 83.5, 83.5};
216   static const G4double he_in[38] = {             258   static const G4double he_in[38] = {
217    18,  38,  62,    98, 136,   176, 190, 200,     259    18,  38,  62,    98, 136,   176, 190, 200,   209, 212, 
218   212, 208, 204,   196, 176,   164, 150, 134,     260   212, 208, 204,   196, 176,   164, 150, 134,   124, 97.5, 
219    90,  85,82.5,  83.5, 86.5,   93, 97.5,100,     261    90,  85,82.5,  83.5, 86.5,   93, 97.5,100,   102, 83, 
220    77,  75,  74,  72.5, 72.5, 72.5, 72.5, 72.5    262    77,  75,  74,  72.5, 72.5, 72.5, 72.5, 72.5};
221   static const G4double be_m_t[38] = {            263   static const G4double be_m_t[38] = {
222   150, 210, 294,   396, 520,   600, 623, 635,     264   150, 210, 294,   396, 520,   600, 623, 635,   642, 640, 
223   630, 615, 600,   576, 540,   504, 470, 435,     265   630, 615, 600,   576, 540,   504, 470, 435,   400, 340, 
224   294, 258, 236,   230, 233,   244, 257, 270,     266   294, 258, 236,   230, 233,   244, 257, 270,   276, 250, 
225   230, 215, 205,   194, 188,   186, 186, 186};    267   230, 215, 205,   194, 188,   186, 186, 186};
226   static const G4double be_m_in[38] = {           268   static const G4double be_m_in[38] = {
227    90, 126, 177,   240, 320,   380, 400, 410,     269    90, 126, 177,   240, 320,   380, 400, 410,   414, 410, 
228   400, 387, 371,   360, 333,   312, 285, 260,     270   400, 387, 371,   360, 333,   312, 285, 260,   237, 216, 
229   198, 187, 182,   180, 182,   187, 193, 203,     271   198, 187, 182,   180, 182,   187, 193, 203,   207, 179, 
230   172, 165, 159,   155, 144,   144, 144, 144};    272   172, 165, 159,   155, 144,   144, 144, 144};
231   static const G4double be_p_t[38] = {            273   static const G4double be_p_t[38] = {
232    96, 150, 222,   320, 430,   514, 545, 565,     274    96, 150, 222,   320, 430,   514, 545, 565,   574, 574, 
233   564, 552, 535,   522, 490,   462, 432, 398,     275   564, 552, 535,   522, 490,   462, 432, 398,   367, 314, 
234    276, 248, 232,  230, 233,   244, 257, 270,     276    276, 248, 232,  230, 233,   244, 257, 270,   276, 250, 
235   230, 215, 205,   194, 188,   186, 186, 186};    277   230, 215, 205,   194, 188,   186, 186, 186};
236   static const G4double be_p_in[38] = {           278   static const G4double be_p_in[38] = {
237    60,  95, 142,   194, 262,   319, 345, 361,     279    60,  95, 142,   194, 262,   319, 345, 361,   364, 364, 
238   354, 350, 330,   319, 298,   280, 258, 237,     280   354, 350, 330,   319, 298,   280, 258, 237,   216, 200, 
239   189, 183, 182,   180, 182,   187, 193, 203,     281   189, 183, 182,   180, 182,   187, 193, 203,   207, 179, 
240   172, 165, 159,   155, 144,   144, 144, 144};    282   172, 165, 159,   155, 144,   144, 144, 144};
241                                                   283 
242   static const G4double c_m_t[39] = {             284   static const G4double c_m_t[39] = {
243   204, 260, 366,   517, 630,   673, 694, 704,     285   204, 260, 366,   517, 630,   673, 694, 704, 710, 711, 
244   706, 694, 676,   648, 616,   584, 548, 518,     286   706, 694, 676,   648, 616,   584, 548, 518, 489, 426, 
245   376, 342, 323,   310, 312,   313, 319, 333,     287   376, 342, 323,   310, 312,   313, 319, 333, 342, 348, 
246   310, 290, 268,   250, 245,   237, 234, 234,     288   310, 290, 268,   250, 245,   237, 234, 234, 234};
247   static const G4double c_m_in[39] = {            289   static const G4double c_m_in[39] = {
248   128, 160, 224,   315, 388,   416, 430, 438,     290   128, 160, 224,   315, 388,   416, 430, 438, 444, 445, 
249   440, 432, 416,   400, 380,   354, 320, 304,     291   440, 432, 416,   400, 380,   354, 320, 304, 288, 264, 
250   246, 240, 233,   232, 233,   234, 238, 246,     292   246, 240, 233,   232, 233,   234, 238, 246, 252, 256, 
251   220, 210, 198,   187, 183,   176, 174, 174,     293   220, 210, 198,   187, 183,   176, 174, 174, 174};
252   static const G4double c_p_t[39] = {             294   static const G4double c_p_t[39] = {
253   140, 192, 294,   428, 594,   642, 662, 687,     295   140, 192, 294,   428, 594,   642, 662, 687, 685, 688, 
254   684, 672, 656,   630, 598,   567, 533, 504,     296   684, 672, 656,   630, 598,   567, 533, 504, 474, 416, 
255   369, 336, 319,   310, 312,   313, 319, 333,     297   369, 336, 319,   310, 312,   313, 319, 333, 342, 348, 
256   310, 290, 268,   250, 245,   237, 234, 234,     298   310, 290, 268,   250, 245,   237, 234, 234, 234};
257   static const G4double c_p_in[39] = {            299   static const G4double c_p_in[39] = {
258    94, 132, 184,   260, 370,   398, 408, 420,     300    94, 132, 184,   260, 370,   398, 408, 420, 426, 428, 
259   424, 416, 400,   386, 366,   340, 308, 294,     301   424, 416, 400,   386, 366,   340, 308, 294, 280, 257, 
260   241, 236, 231,   232, 233,   234, 238, 246,     302   241, 236, 231,   232, 233,   234, 238, 246, 252, 256, 
261   220, 210, 198,   187, 183,   176, 174, 174,     303   220, 210, 198,   187, 183,   176, 174, 174, 174};
262   static const G4double n_m_t[39] = {             304   static const G4double n_m_t[39] = {
263   246, 308, 424,   590, 729,   776, 800, 821,     305   246, 308, 424,   590, 729,   776, 800, 821, 822, 817, 
264   800, 778, 768,   728, 690,   654, 615, 584,     306   800, 778, 768,   728, 690,   654, 615, 584, 556, 480, 
265   430, 393, 373,   367, 368,   370, 375, 388,     307   430, 393, 373,   367, 368,   370, 375, 388, 390, 397, 
266   364, 337, 310,   291, 275,   268, 268, 268,     308   364, 337, 310,   291, 275,   268, 268, 268, 268};
267   static const G4double n_m_in[39] = {            309   static const G4double n_m_in[39] = {
268   155, 188, 256,   360, 456,   492, 512, 526,     310   155, 188, 256,   360, 456,   492, 512, 526, 526, 520, 
269   504, 491, 475,   450, 425,   396, 376, 360,     311   504, 491, 475,   450, 425,   396, 376, 360, 340, 300, 
270   282, 270, 265,   265, 266,   268, 273, 280,     312   282, 270, 265,   265, 266,   268, 273, 280, 288, 288, 
271   256, 237, 226,   218, 208,   202, 202, 202,     313   256, 237, 226,   218, 208,   202, 202, 202, 202};
272   static const G4double n_p_t[39] = {             314   static const G4double n_p_t[39] = {
273   150, 212, 328,   500, 680,   735, 762, 781,     315   150, 212, 328,   500, 680,   735, 762, 781, 782, 779, 
274   770, 748, 740,   706, 672,   633, 600, 569,     316   770, 748, 740,   706, 672,   633, 600, 569, 541, 467, 
275   419, 385, 368,   364, 366,   368, 375, 388,     317   419, 385, 368,   364, 366,   368, 375, 388, 390, 397, 
276   364, 337, 310,   291, 275,   268, 268, 268,     318   364, 337, 310,   291, 275,   268, 268, 268, 268};
277   static const G4double n_p_in[39] = {            319   static const G4double n_p_in[39] = {
278    90, 140, 208,   300, 426,   467, 490, 504,     320    90, 140, 208,   300, 426,   467, 490, 504, 504, 500, 
279   484, 474, 460,   437, 413,   381, 365, 350,     321   484, 474, 460,   437, 413,   381, 365, 350, 330, 292, 
280   276, 267, 263,   264, 265,   267, 273, 280,     322   276, 267, 263,   264, 265,   267, 273, 280, 288, 288, 
281   256, 237, 226,   218, 208,   202, 202, 202,     323   256, 237, 226,   218, 208,   202, 202, 202, 202};
282                                                   324 
283   static const G4double o_m_t[31] = {             325   static const G4double o_m_t[31] = {
284   280, 360, 500,   685, 812,   861, 870, 865,     326   280, 360, 500,   685, 812,   861, 870, 865, 835, 800, 
285   755, 700, 600,   537, 493,   468, 441, 436,     327   755, 700, 600,   537, 493,   468, 441, 436, 443, 449, 
286   460, 463, 432,   385, 350,   325, 312, 307,     328   460, 463, 432,   385, 350,   325, 312, 307, 303, 303, 303};
287   static const G4double o_m_in[31] = {            329   static const G4double o_m_in[31] = {
288   190, 207, 300,   420, 500,   540, 550, 542,     330   190, 207, 300,   420, 500,   540, 550, 542, 520, 490, 
289   460, 423, 360,   339, 321,   314, 312, 314,     331   460, 423, 360,   339, 321,   314, 312, 314, 319, 324, 
290   328, 330, 300,   275, 250,   240, 229, 225,     332   328, 330, 300,   275, 250,   240, 229, 225, 222, 222, 222};
291   static const G4double o_p_t[31] = {             333   static const G4double o_p_t[31] = {
292   170, 240, 390,   570, 740,   818, 830, 822,     334   170, 240, 390,   570, 740,   818, 830, 822, 800, 765, 
293   725, 675, 585,   525, 483,   458, 444, 447,     335   725, 675, 585,   525, 483,   458, 444, 447, 453, 449,
294   460, 463, 432,   385, 350,   325, 312, 307,     336   460, 463, 432,   385, 350,   325, 312, 307, 303, 303, 303};
295   static const G4double o_p_in[31] = {            337   static const G4double o_p_in[31] = {
296   100, 145, 240,   340, 470,   518, 530, 522,     338   100, 145, 240,   340, 470,   518, 530, 522, 505, 477, 
297   448, 412, 350,   330, 316,   310, 308, 311,     339   448, 412, 350,   330, 316,   310, 308, 311, 317, 324,
298   328, 330, 300,   275, 250,   240, 229, 225,     340   328, 330, 300,   275, 250,   240, 229, 225, 222, 222, 222};
299   static const G4double na_m_t[31] = {            341   static const G4double na_m_t[31] = {
300   450, 545, 705,   910, 1020, 1075, 1087, 1080    342   450, 545, 705,   910, 1020, 1075, 1087, 1080, 1042, 987, 
301   943, 885, 790,   700,  650,  610,  585,  575    343   943, 885, 790,   700,  650,  610,  585,  575,  585, 595, 
302   600, 610, 556,   524,  494,  458,  445,  429    344   600, 610, 556,   524,  494,  458,  445,  429,  427, 427, 427};
303   static const G4double na_m_in[31] = {           345   static const G4double na_m_in[31] = {
304   275, 315, 413,   545,  620,  660,  670,  662    346   275, 315, 413,   545,  620,  660,  670,  662,  630, 593, 
305   570, 520, 465,   420,  410,  395,  390,  400    347   570, 520, 465,   420,  410,  395,  390,  400,  410, 418, 
306   420, 422, 372,   348,  330,  320,  310,  294    348   420, 422, 372,   348,  330,  320,  310,  294,  292, 292, 292};
307   static const G4double na_p_t[31] = {            349   static const G4double na_p_t[31] = {
308   210, 320, 530,   795,  960, 1035, 1050, 1040    350   210, 320, 530,   795,  960, 1035, 1050, 1040, 1007, 957, 
309   918, 865, 773,   685,  636,  598,  575,  565    351   918, 865, 773,   685,  636,  598,  575,  565,  578, 590, 
310   598, 610, 556,   524,  494,  458,  445,  429    352   598, 610, 556,   524,  494,  458,  445,  429,  427, 427, 427};
311   static const G4double na_p_in[31] = {           353   static const G4double na_p_in[31] = {
312   115, 210, 340,   495,  585,  630,  645,  637    354   115, 210, 340,   495,  585,  630,  645,  637,  605, 572, 
313   550, 505, 455,   410,  401,  388,  383,  393    355   550, 505, 455,   410,  401,  388,  383,  393,  405, 414, 
314   418, 422, 372,   348,  330,  320,  310,  294    356   418, 422, 372,   348,  330,  320,  310,  294,  292, 292, 292};
315   static const G4double al_m_t[31] = {            357   static const G4double al_m_t[31] = {
316   532, 637, 832,  1057, 1207, 1230, 1210, 1174    358   532, 637, 832,  1057, 1207, 1230, 1210, 1174, 1133, 1095, 
317  1038, 970, 890,   807,  750,  710,  675,  665    359  1038, 970, 890,   807,  750,  710,  675,  665,  670,  673, 
318   678, 682, 618,   574,  546,  520,  507,  495    360   678, 682, 618,   574,  546,  520,  507,  495,  488,  488, 488};
319   static const G4double al_m_in[31] = {           361   static const G4double al_m_in[31] = {
320   300, 360, 495,   665,  750,  765,  750,  730    362   300, 360, 495,   665,  750,  765,  750,  730,  700,  660, 
321   615, 570, 520,   490,  470,  450,  448,  450    363   615, 570, 520,   490,  470,  450,  448,  450,  450,  452, 
322   456, 460, 408,   392,  376,  356,  347,  338    364   456, 460, 408,   392,  376,  356,  347,  338,  332,  332, 332};
323   static const G4double al_p_t[31] = {            365   static const G4double al_p_t[31] = {
324   225, 350, 616,   945, 1122, 1175, 1157, 1128    366   225, 350, 616,   945, 1122, 1175, 1157, 1128, 1088, 1045, 
325   988, 935, 870,   787,  730,  690,  660,  652    367   988, 935, 870,   787,  730,  690,  660,  652,  660,  668, 
326   678, 682, 618,   574,  546,  520,  507,  495    368   678, 682, 618,   574,  546,  520,  507,  495,  488,  488, 488};
327   static const G4double al_p_in[31] = {           369   static const G4double al_p_in[31] = {
328   120, 238, 390,   610,  712,  735,  720,  703    370   120, 238, 390,   610,  712,  735,  720,  703,  655,  635, 
329   590, 550, 505,   475,  455,  438,  440,  445    371   590, 550, 505,   475,  455,  438,  440,  445,  445,  450, 
330   456, 460, 408,   392,  376,  356,  347,  338    372   456, 460, 408,   392,  376,  356,  347,  338,  332,  332, 332};
331                                                   373 
332   static const G4double ca_m_t[31] = {            374   static const G4double ca_m_t[31] = {
333   800, 980, 1240, 1460, 1570, 1600, 1580, 1535    375   800, 980, 1240, 1460, 1570, 1600, 1580, 1535, 1475, 1425, 
334  1375,1295, 1200, 1083, 1000,  948,  915,  895    376  1375,1295, 1200, 1083, 1000,  948,  915,  895,  900,  908, 
335   915, 922, 856,   795,  740,  705,  682,  660    377   915, 922, 856,   795,  740,  705,  682,  660,  660,  660, 660};
336   static const G4double ca_m_in[31] = {           378   static const G4double ca_m_in[31] = {
337   470, 550, 620,   860,  955,  960,  920,  860    379   470, 550, 620,   860,  955,  960,  920,  860,  820,  780, 
338   740, 665, 637,   615,  600,  590,  580,  580    380   740, 665, 637,   615,  600,  590,  580,  580,  600,  608,  
339   610, 615, 550,   525,  510,  488,  470,  450    381   610, 615, 550,   525,  510,  488,  470,  450,  450,  450,  450};
340   static const G4double ca_p_t[31] = {            382   static const G4double ca_p_t[31] = {
341   275, 445, 790,  1195, 1440, 1485, 1475, 1435    383   275, 445, 790,  1195, 1440, 1485, 1475, 1435, 1385, 1335, 
342  1295,1245,1160,  1050,  970,  923,  895,  877    384  1295,1245,1160,  1050,  970,  923,  895,  877,  887,  897, 
343   904, 913, 855,   795,  740,  705,  682,  660    385   904, 913, 855,   795,  740,  705,  682,  660,  660,  660, 660};
344   static const G4double ca_p_in[31] = {           386   static const G4double ca_p_in[31] = {
345   160, 315, 500,   745,  870,  905,  900,  860    387   160, 315, 500,   745,  870,  905,  900,  860,  810,  770, 
346   740, 710, 640,   617,  595,  585,  575,  575    388   740, 710, 640,   617,  595,  585,  575,  575,  590,  600, 
347   602, 608, 550,   525,  510,  488,  470,  450    389   602, 608, 550,   525,  510,  488,  470,  450,  450,  450,  450};
348   // ca data may have typo                        390   // ca data may have typo
349                                                   391 
350   static const G4double fe_m_t[32] = {            392   static const G4double fe_m_t[32] = {
351  1175, 1363, 1670, 1950, 2050, 2040, 1975, 188    393  1175, 1363, 1670, 1950, 2050, 2040, 1975, 1886, 1834, 1773, 
352  1720, 1635, 1474, 1380, 1269, 1225, 1182, 116    394  1720, 1635, 1474, 1380, 1269, 1225, 1182, 1162, 1159, 1162, 
353  1178, 1190, 1197, 1102, 1135,  975,  945,  92    395  1178, 1190, 1197, 1102, 1135,  975,  945,  925,  905,  905,  
354   905,  905};                                     396   905,  905};
355   static const G4double fe_m_in[32] = {           397   static const G4double fe_m_in[32] = {
356   625,  725,  910, 1180, 1275, 1250, 1200, 115    398   625,  725,  910, 1180, 1275, 1250, 1200, 1150, 1100, 1040,  
357   995,  925,  825,  810,  780,  760,  745,  74    399   995,  925,  825,  810,  780,  760,  745,  740,  740,  740,  
358   750,  760,  765,  690,  660,  635,  615,  60    400   750,  760,  765,  690,  660,  635,  615,  600,  585,  585,  
359   585,  585};                                     401   585,  585};
360   static const G4double fe_p_t[32] =  {           402   static const G4double fe_p_t[32] =  {
361   330,  575, 1010, 1500, 1837, 1875, 1820, 175    403   330,  575, 1010, 1500, 1837, 1875, 1820, 1751, 1691, 1636, 
362  1690, 1450, 1396, 1305, 1219, 1190, 1148, 113    404  1690, 1450, 1396, 1305, 1219, 1190, 1148, 1138, 1134, 1144, 
363   1163, 1175, 1183, 1198, 1135, 975,  945,  92    405   1163, 1175, 1183, 1198, 1135, 975,  945,  925,  905,  905,  
364   905,  905};                                     406   905,  905};
365   static const G4double fe_p_in[32] = {           407   static const G4double fe_p_in[32] = {
366   210,  410,  707, 1010, 1125, 1150, 1100, 107    408   210,  410,  707, 1010, 1125, 1150, 1100, 1070, 1010,  960,  
367   920,  776,  780,  760,  750,  740,  720,  72    409   920,  776,  780,  760,  750,  740,  720,  725,  725,  730,  
368   740,  750,  755,  690,  660,  635,  615,  60    410   740,  750,  755,  690,  660,  635,  615,  600,  585,  585,  
369   585,  585};                                     411   585,  585};
370   static const G4double cu_m_t[32] = {            412   static const G4double cu_m_t[32] = {
371  1400, 1600, 1875, 2088, 2200, 2220, 2175, 212    413  1400, 1600, 1875, 2088, 2200, 2220, 2175, 2125, 2075, 2012, 
372  1950, 1855, 1670, 1530, 1430, 1370, 1315, 131    414  1950, 1855, 1670, 1530, 1430, 1370, 1315, 1315, 1315, 1330, 
373  1345, 1360, 1365, 1250, 1185, 1128, 1070, 103    415  1345, 1360, 1365, 1250, 1185, 1128, 1070, 1035, 1010, 1010, 
374  1010, 1010};                                     416  1010, 1010};
375   static const G4double cu_m_in[32] = {           417   static const G4double cu_m_in[32] = {
376   725,  840, 1020, 1200, 1295, 1300, 1267, 124    418   725,  840, 1020, 1200, 1295, 1300, 1267, 1240, 1213, 1175, 
377  1125, 1042,  950,  900,  860,  840,  830,  83    419  1125, 1042,  950,  900,  860,  840,  830,  832,  835,  840,  
378   850,  860,  865,  785,  735,  705,  680,  65    420   850,  860,  865,  785,  735,  705,  680,  650,  630,  630,  
379   630,  630};                                     421   630,  630};
380   static const G4double cu_p_t[32] = {            422   static const G4double cu_p_t[32] = {
381   355,  605, 1120, 1630, 1940, 2010, 2010, 198    423   355,  605, 1120, 1630, 1940, 2010, 2010, 1980, 1925, 1895, 
382  1830, 1730, 1585, 1490, 1400, 1340, 1290, 129    424  1830, 1730, 1585, 1490, 1400, 1340, 1290, 1290, 1290, 1310, 
383  1330, 1345, 1350, 1240, 1185, 1128, 1070, 103    425  1330, 1345, 1350, 1240, 1185, 1128, 1070, 1035, 1010, 1010, 
384  1010, 1010};                                     426  1010, 1010};
385   static const G4double cu_p_in[32] = {           427   static const G4double cu_p_in[32] = {
386   230,  425,  780,  1025, 1155, 1190, 1190, 11    428   230,  425,  780,  1025, 1155, 1190, 1190, 1180, 1125, 1100, 
387  1050, 1000,  900,   870,  835,  815,  810,  8    429  1050, 1000,  900,   870,  835,  815,  810,  812,  815,  825,  
388   840,  850,  855,   780,  735,  705,  680,  6    430   840,  850,  855,   780,  735,  705,  680,  650,  630,  630,  
389   630,  630};                                     431   630,  630};
390                                                   432 
391   static const G4double mo_m_t[34] = {            433   static const G4double mo_m_t[34] = {
392   2430, 2610, 2710, 2790, 2880, 2940, 2965, 29    434   2430, 2610, 2710, 2790, 2880, 2940, 2965, 2970, 2970, 2920, 
393   2840, 2720, 2570, 2500, 2365, 2200, 2050, 19    435   2840, 2720, 2570, 2500, 2365, 2200, 2050, 1926, 1825, 1768, 
394   1749, 1750, 1778, 1789, 1808, 1690, 1645, 15    436   1749, 1750, 1778, 1789, 1808, 1690, 1645, 1530, 1492, 1450, 
395   1425, 1425, 1425, 1425};                        437   1425, 1425, 1425, 1425};
396   static const G4double mo_m_in[34] = {           438   static const G4double mo_m_in[34] = {
397    925, 1125, 1250, 1375, 1500, 1600, 1680, 17    439    925, 1125, 1250, 1375, 1500, 1600, 1680, 1750, 1770, 1730, 
398   1660, 1580, 1500, 1450, 1330, 1250, 1190, 11    440   1660, 1580, 1500, 1450, 1330, 1250, 1190, 1140, 1100, 1075, 
399   1075, 1070, 1088, 1095, 1110, 1035, 1005,  9    441   1075, 1070, 1088, 1095, 1110, 1035, 1005,  940,  917,  880, 
400    860,  860,  860, 860};                         442    860,  860,  860, 860};
401   static const G4double mo_p_t[34] = {            443   static const G4double mo_p_t[34] = {
402    410,  730, 1110, 1530, 1920, 2200, 2385, 25    444    410,  730, 1110, 1530, 1920, 2200, 2385, 2520, 2600, 2630, 
403   2575, 2470, 2320, 2285, 2185, 2053, 1945, 18    445   2575, 2470, 2320, 2285, 2185, 2053, 1945, 1852, 1776, 1719, 
404   1710, 1716, 1746, 1759, 1778, 1675, 1645, 15    446   1710, 1716, 1746, 1759, 1778, 1675, 1645, 1530, 1492, 1450, 
405   1425, 1425, 1425, 1425};                        447   1425, 1425, 1425, 1425};
406   static const G4double mo_p_in[34] = {           448   static const G4double mo_p_in[34] = {
407    270,  540,  825,  975, 1140, 1285, 1400, 14    449    270,  540,  825,  975, 1140, 1285, 1400, 1480, 1555, 1580, 
408   1525, 1470, 1360, 1340, 1255, 1160, 1120, 10    450   1525, 1470, 1360, 1340, 1255, 1160, 1120, 1085, 1060, 1045, 
409   1045, 1045, 1065, 1075, 1090, 1025, 1005,  9    451   1045, 1045, 1065, 1075, 1090, 1025, 1005,  940,  917,  880, 
410    860,  860,  860, 860};                         452    860,  860,  860, 860};
411   static const G4double cd_m_t[34] = {            453   static const G4double cd_m_t[34] = {
412   3060, 3125, 3170, 3220, 3255, 3280, 3290, 32    454   3060, 3125, 3170, 3220, 3255, 3280, 3290, 3260, 3270, 3200, 
413   3120, 3080, 3090, 2920, 2810, 2640, 2362, 22    455   3120, 3080, 3090, 2920, 2810, 2640, 2362, 2230, 2115, 2050, 
414   2020, 2025, 2040, 2070, 2100, 1900, 1795, 17    456   2020, 2025, 2040, 2070, 2100, 1900, 1795, 1740, 1675, 1645, 
415   1625, 1620, 1620, 1620};                        457   1625, 1620, 1620, 1620};
416   static const G4double cd_m_in[34]= {            458   static const G4double cd_m_in[34]= {
417   1025, 1275, 1440, 1625, 1740, 1800, 1880, 19    459   1025, 1275, 1440, 1625, 1740, 1800, 1880, 1920, 1980, 1920, 
418   1850, 1810, 1720, 1650, 1560, 1450, 1330, 12    460   1850, 1810, 1720, 1650, 1560, 1450, 1330, 1290, 1245, 1210, 
419   1200, 1200, 1205, 1205, 1230, 1130, 1085, 10    461   1200, 1200, 1205, 1205, 1230, 1130, 1085, 1060, 1000,  985, 
420    975,  970,  970, 970};                         462    975,  970,  970, 970};
421   static const G4double cd_p_t[34] = {            463   static const G4double cd_p_t[34] = {
422    455,  780, 1170, 1700, 2120, 2400, 2600, 27    464    455,  780, 1170, 1700, 2120, 2400, 2600, 2720, 2820, 2840, 
423   2800, 2760, 2720, 2640, 2560, 2450, 2252, 21    465   2800, 2760, 2720, 2640, 2560, 2450, 2252, 2130, 2035, 1985, 
424   1970, 1975, 2005, 2035, 2070, 1880, 1795, 17    466   1970, 1975, 2005, 2035, 2070, 1880, 1795, 1740, 1675, 1645, 
425   1625, 1620, 1620, 1620};                        467   1625, 1620, 1620, 1620};
426   static const G4double cd_p_in[34] = {           468   static const G4double cd_p_in[34] = {
427    310,  580,  880, 1060, 1270, 1400, 1530, 16    469    310,  580,  880, 1060, 1270, 1400, 1530, 1610, 1660, 1680, 
428   1640, 1600, 1560, 1500, 1430, 1330, 1280, 12    470   1640, 1600, 1560, 1500, 1430, 1330, 1280, 1230, 1200, 1180, 
429   1170, 1175, 1180, 1180, 1210, 1120, 1085, 10    471   1170, 1175, 1180, 1180, 1210, 1120, 1085, 1060, 1000,  985, 
430    975,  970,  970, 970};                         472    975,  970,  970, 970};
431                                                   473 
432   static const G4double sn_m_t[35] = {            474   static const G4double sn_m_t[35] = {
433   3000, 3180, 3250, 3300, 3300, 3410, 3470, 34    475   3000, 3180, 3250, 3300, 3300, 3410, 3470, 3450, 3410, 3350, 
434   3280, 3200, 3120, 3050, 2900, 2630, 2500, 23    476   3280, 3200, 3120, 3050, 2900, 2630, 2500, 2325, 2190, 2100, 
435   2060, 2055, 2055, 2055, 2067, 2085, 2000, 19    477   2060, 2055, 2055, 2055, 2067, 2085, 2000, 1900, 1835, 1770, 
436   1720, 1700, 1695, 1695, 1695};                  478   1720, 1700, 1695, 1695, 1695};
437   static const G4double sn_m_in[35] = {           479   static const G4double sn_m_in[35] = {
438   1050, 1350, 1520, 1650, 1800, 1980, 2070, 21    480   1050, 1350, 1520, 1650, 1800, 1980, 2070, 2120, 2090, 2050, 
439   1980, 1920, 1830, 1770, 1670, 1500, 1435, 13    481   1980, 1920, 1830, 1770, 1670, 1500, 1435, 1350, 1300, 1230, 
440   1220, 1235, 1235, 1235, 1237, 1240, 1160, 11    482   1220, 1235, 1235, 1235, 1237, 1240, 1160, 1120, 1090, 1065, 
441   1040, 1020, 1015, 1015, 1015};                  483   1040, 1020, 1015, 1015, 1015};
442   static const G4double sn_p_t[35] =  {           484   static const G4double sn_p_t[35] =  { 
443    465,  800, 1200, 1760, 2170, 2480, 2730, 28    485    465,  800, 1200, 1760, 2170, 2480, 2730, 2885, 2970, 2980, 
444   2970, 2890, 2840, 2790, 2620, 2450, 2335, 22    486   2970, 2890, 2840, 2790, 2620, 2450, 2335, 2205, 2080, 2020, 
445   2010, 1990, 1990, 2015, 2030, 2045, 1980, 18    487   2010, 1990, 1990, 2015, 2030, 2045, 1980, 1890, 1835, 1770, 
446   1720, 1700, 1695, 1695, 1695};                  488   1720, 1700, 1695, 1695, 1695};
447   static const G4double sn_p_in[35] = {           489   static const G4double sn_p_in[35] = { 
448    315,  590,  880, 1220, 1460, 1580, 1700, 17    490    315,  590,  880, 1220, 1460, 1580, 1700, 1770, 1810, 1810, 
449   1800, 1730, 1680, 1630, 1530, 1400, 1335, 12    491   1800, 1730, 1680, 1630, 1530, 1400, 1335, 1270, 1210, 1180, 
450   1190, 1190, 1190, 1205, 1210, 1210, 1150, 11    492   1190, 1190, 1190, 1205, 1210, 1210, 1150, 1115, 1090, 1065, 
451   1040, 1020, 1015, 1015, 1015};                  493   1040, 1020, 1015, 1015, 1015};
452   static const G4double w_m_t[35] = {             494   static const G4double w_m_t[35] = {
453   5200, 5115, 5025, 4975, 4900, 4850, 4780, 47    495   5200, 5115, 5025, 4975, 4900, 4850, 4780, 4725, 4600, 4490, 
454   4355, 4255, 4125, 4040, 3830, 3580, 3330, 31    496   4355, 4255, 4125, 4040, 3830, 3580, 3330, 3110, 2955, 2860, 
455   2852, 2845, 2885, 2900, 2915, 2940, 2800, 26    497   2852, 2845, 2885, 2900, 2915, 2940, 2800, 2660, 2570, 2490, 
456   2460, 2425, 2420, 2420, 2420};                  498   2460, 2425, 2420, 2420, 2420};
457   static const G4double w_m_in[35] = {            499   static const G4double w_m_in[35] = {
458   1450, 1850, 2100, 2350, 2550, 2700, 2825, 29    500   1450, 1850, 2100, 2350, 2550, 2700, 2825, 2900, 2850, 2750, 
459   2630, 2525, 2400, 2300, 2200, 2070, 1880, 17    501   2630, 2525, 2400, 2300, 2200, 2070, 1880, 1770, 1715, 1680, 
460   1680, 1680, 1685, 1690, 1700, 1720, 1635, 15    502   1680, 1680, 1685, 1690, 1700, 1720, 1635, 1560, 1530, 1460, 
461   1440, 1410, 1410, 1410, 1410};                  503   1440, 1410, 1410, 1410, 1410};
462   static const G4double w_p_t[35] = {             504   static const G4double w_p_t[35] = { 
463    480,  900, 1500, 2350, 3020, 3420, 3650, 37    505    480,  900, 1500, 2350, 3020, 3420, 3650, 3775, 3875, 3830, 
464   3750, 3700, 3630, 3550, 3550, 3290, 3070, 28    506   3750, 3700, 3630, 3550, 3550, 3290, 3070, 2890, 2840, 2730, 
465   2725, 2720, 2770, 2805, 2828, 2865, 2770, 26    507   2725, 2720, 2770, 2805, 2828, 2865, 2770, 2640, 2570, 2490,
466   2460, 2425, 2420, 2420, 2420};                  508   2460, 2425, 2420, 2420, 2420};
467   static const G4double w_p_in[35] = {            509   static const G4double w_p_in[35] = { 
468    325,  680,  990, 1500, 1850, 2150, 2250, 23    510    325,  680,  990, 1500, 1850, 2150, 2250, 2300, 2350, 2330, 
469   2280, 2230, 2200, 2120, 2130, 1900, 1780, 16    511   2280, 2230, 2200, 2120, 2130, 1900, 1780, 1670, 1635, 1600, 
470   1602, 1605, 1610, 1615, 1630, 1660, 1620, 15    512   1602, 1605, 1610, 1615, 1630, 1660, 1620, 1550, 1530, 1460,
471   1440, 1410, 1410, 1410, 1410};                  513   1440, 1410, 1410, 1410, 1410};
472                                                   514 
473   static const G4double pb_m_t[35] = {            515   static const G4double pb_m_t[35] = {
474   5890, 5700, 5610, 5580, 5550, 5480, 5400, 53    516   5890, 5700, 5610, 5580, 5550, 5480, 5400, 5300, 5100, 4930, 
475   4750, 4600, 4400, 4280, 4170, 3915, 3650, 34    517   4750, 4600, 4400, 4280, 4170, 3915, 3650, 3470, 3260, 3150, 
476   3120, 3070, 3085, 3100, 3120, 3160, 3070, 29    518   3120, 3070, 3085, 3100, 3120, 3160, 3070, 2930, 2820, 2750, 
477   2710, 2655, 2640, 2640, 2640};                  519   2710, 2655, 2640, 2640, 2640};
478   static const G4double pb_m_in[35] = {           520   static const G4double pb_m_in[35] = {
479   1575, 2025, 2300, 2575, 2850, 3000, 3115, 31    521   1575, 2025, 2300, 2575, 2850, 3000, 3115, 3180, 3080, 2940, 
480   2800, 2670, 2550, 2450, 2370, 2220, 2110, 20    522   2800, 2670, 2550, 2450, 2370, 2220, 2110, 2000, 1920, 1880, 
481   1850, 1800, 1805, 1810, 1820, 1840, 1800, 17    523   1850, 1800, 1805, 1810, 1820, 1840, 1800, 1720, 1640, 1620, 
482   1570, 1530, 1530, 1530, 1530};                  524   1570, 1530, 1530, 1530, 1530};
483   static const G4double pb_p_t[35] = {            525   static const G4double pb_p_t[35] = { 
484    515,  940, 1500, 2400, 3270, 3750, 4050, 41    526    515,  940, 1500, 2400, 3270, 3750, 4050, 4140, 4260, 4200, 
485   4080, 3990, 3990, 3810, 3730, 3520, 3370, 31    527   4080, 3990, 3990, 3810, 3730, 3520, 3370, 3186, 3110, 3010, 
486   2990, 2985, 3005, 3020, 3040, 3080, 3020, 29    528   2990, 2985, 3005, 3020, 3040, 3080, 3020, 2905, 2790, 2750,
487   2710, 2655, 2640, 2640, 2640};                  529   2710, 2655, 2640, 2640, 2640};
488   static const G4double pb_p_in[35] = {           530   static const G4double pb_p_in[35] = { 
489    348,  707, 1040, 1650, 2100, 2400, 2580, 26    531    348,  707, 1040, 1650, 2100, 2400, 2580, 2640, 2650, 2520, 
490   2410, 2300, 2250, 2190, 2130, 2000, 1930, 18    532   2410, 2300, 2250, 2190, 2130, 2000, 1930, 1870, 1830, 1790, 
491   1770, 1765, 1775, 1780, 1790, 1800, 1775, 17    533   1770, 1765, 1775, 1780, 1790, 1800, 1775, 1710, 1620, 1620,
492   1570, 1530, 1530, 1530, 1530};                  534   1570, 1530, 1530, 1530, 1530};
493   static const G4double u_m_t[35] = {             535   static const G4double u_m_t[35] = {
494   7080, 6830, 6650, 6530, 6400, 6280, 6100, 58    536   7080, 6830, 6650, 6530, 6400, 6280, 6100, 5840, 5660, 5520, 
495   5330, 5160, 4990, 4810, 4630, 4323, 4130, 38    537   5330, 5160, 4990, 4810, 4630, 4323, 4130, 3870, 3700, 3550, 
496   3490, 3465, 3467, 3475, 3495, 3515, 3440, 33    538   3490, 3465, 3467, 3475, 3495, 3515, 3440, 3360, 3150, 3040, 
497   2985, 2955, 2940, 2940, 2940};                  539   2985, 2955, 2940, 2940, 2940};
498   static const G4double u_m_in[35] = {            540   static const G4double u_m_in[35] = {
499   1740, 2220, 2500, 2820, 3080, 3300, 3420, 35    541   1740, 2220, 2500, 2820, 3080, 3300, 3420, 3500, 3420, 3330, 
500   3200, 3060, 2940, 2850, 2710, 2470, 2380, 22    542   3200, 3060, 2940, 2850, 2710, 2470, 2380, 2250, 2160, 2080, 
501   2040, 2045, 2047, 2050, 2055, 2060, 2010, 19    543   2040, 2045, 2047, 2050, 2055, 2060, 2010, 1980, 1830, 1780, 
502   1735, 1710, 1700, 1700, 1700};                  544   1735, 1710, 1700, 1700, 1700};
503   static const G4double u_p_t[35] = {             545   static const G4double u_p_t[35] = { 
504    485,  960, 1580, 2700, 3550, 4050, 4320, 44    546    485,  960, 1580, 2700, 3550, 4050, 4320, 4420, 4620, 4660, 
505   4580, 4470, 4350, 4295, 4187, 3938, 3755, 35    547   4580, 4470, 4350, 4295, 4187, 3938, 3755, 3573, 3450, 3342, 
506   3310, 3295, 3310, 3330, 3375, 3405, 3350, 33    548   3310, 3295, 3310, 3330, 3375, 3405, 3350, 3338, 3135, 3040,
507   2985, 2955, 2940, 2940, 2940};                  549   2985, 2955, 2940, 2940, 2940};
508   static const G4double u_p_in[35] = {            550   static const G4double u_p_in[35] = { 
509    334,  720, 1020, 1560, 2100, 2300, 2550, 27    551    334,  720, 1020, 1560, 2100, 2300, 2550, 2700, 2880, 2880, 
510   2760, 2660, 2550, 2510, 2430, 2270, 2130, 20    552   2760, 2660, 2550, 2510, 2430, 2270, 2130, 2060, 2000, 1970, 
511   1950, 1950, 1960, 1960, 1970, 1980, 1950, 19    553   1950, 1950, 1960, 1960, 1970, 1980, 1950, 1978, 1830, 1780,
512   1735, 1710, 1700, 1700, 1700};                  554   1735, 1710, 1700, 1700, 1700};
513                                                   555 
514   AddDataSet("pi-",he_t,   he_in,  e1, 38);       556   AddDataSet("pi-",he_t,   he_in,  e1, 38);
515   AddDataSet("pi+",he_t,   he_in,  e1, 38);       557   AddDataSet("pi+",he_t,   he_in,  e1, 38);
516   AddDataSet("pi-",be_m_t, be_m_in, e1, 38);      558   AddDataSet("pi-",be_m_t, be_m_in, e1, 38);
517   AddDataSet("pi+",be_p_t, be_p_in, e1, 38);      559   AddDataSet("pi+",be_p_t, be_p_in, e1, 38);
518   AddDataSet("pi-",c_m_t,  c_m_in,  e2, 39);      560   AddDataSet("pi-",c_m_t,  c_m_in,  e2, 39);
519   AddDataSet("pi+",c_p_t,  c_p_in,  e2, 39);      561   AddDataSet("pi+",c_p_t,  c_p_in,  e2, 39);
520   AddDataSet("pi-",n_m_t,  n_m_in,  e2, 39);      562   AddDataSet("pi-",n_m_t,  n_m_in,  e2, 39);
521   AddDataSet("pi+",n_p_t,  n_p_in,  e2, 39);      563   AddDataSet("pi+",n_p_t,  n_p_in,  e2, 39);
522   AddDataSet("pi-",o_m_t,  o_m_in,  e3, 31);      564   AddDataSet("pi-",o_m_t,  o_m_in,  e3, 31);
523   AddDataSet("pi+",o_p_t,  o_p_in,  e3, 31);      565   AddDataSet("pi+",o_p_t,  o_p_in,  e3, 31);
524   AddDataSet("pi-",na_m_t, na_m_in, e3, 31);      566   AddDataSet("pi-",na_m_t, na_m_in, e3, 31);
525   AddDataSet("pi+",na_p_t, na_p_in, e3, 31);      567   AddDataSet("pi+",na_p_t, na_p_in, e3, 31);
526   AddDataSet("pi-",al_m_t, al_m_in, e3, 31);      568   AddDataSet("pi-",al_m_t, al_m_in, e3, 31);
527   AddDataSet("pi+",al_p_t, al_p_in, e3, 31);      569   AddDataSet("pi+",al_p_t, al_p_in, e3, 31);
528   AddDataSet("pi-",ca_m_t, ca_m_in, e3, 31);      570   AddDataSet("pi-",ca_m_t, ca_m_in, e3, 31);
529   AddDataSet("pi+",ca_p_t, ca_p_in, e3, 31);      571   AddDataSet("pi+",ca_p_t, ca_p_in, e3, 31);
530   AddDataSet("pi-",fe_m_t, fe_m_in, e4, 32);      572   AddDataSet("pi-",fe_m_t, fe_m_in, e4, 32);
531   AddDataSet("pi+",fe_p_t, fe_p_in, e4, 32);      573   AddDataSet("pi+",fe_p_t, fe_p_in, e4, 32);
532   AddDataSet("pi-",cu_m_t, cu_m_in, e4, 32);      574   AddDataSet("pi-",cu_m_t, cu_m_in, e4, 32);
533   AddDataSet("pi+",cu_p_t, cu_p_in, e4, 32);      575   AddDataSet("pi+",cu_p_t, cu_p_in, e4, 32);
534   AddDataSet("pi-",mo_m_t, mo_m_in, e5, 34);      576   AddDataSet("pi-",mo_m_t, mo_m_in, e5, 34);
535   AddDataSet("pi+",mo_p_t, mo_p_in, e5, 34);      577   AddDataSet("pi+",mo_p_t, mo_p_in, e5, 34);
536   AddDataSet("pi-",cd_m_t, cd_m_in, e5, 34);      578   AddDataSet("pi-",cd_m_t, cd_m_in, e5, 34);
537   AddDataSet("pi+",cd_p_t, cd_p_in, e5, 34);      579   AddDataSet("pi+",cd_p_t, cd_p_in, e5, 34);
538   AddDataSet("pi-",sn_m_t, sn_m_in, e6, 35);      580   AddDataSet("pi-",sn_m_t, sn_m_in, e6, 35);
539   AddDataSet("pi+",sn_p_t, sn_p_in, e6, 35);      581   AddDataSet("pi+",sn_p_t, sn_p_in, e6, 35);
540   AddDataSet("pi-",w_m_t,  w_m_in,  e6, 35);      582   AddDataSet("pi-",w_m_t,  w_m_in,  e6, 35);
541   AddDataSet("pi+",w_p_t,  w_p_in,  e6, 35);      583   AddDataSet("pi+",w_p_t,  w_p_in,  e6, 35);
542   AddDataSet("pi-",pb_m_t, pb_m_in, e6, 35);      584   AddDataSet("pi-",pb_m_t, pb_m_in, e6, 35);
543   AddDataSet("pi+",pb_p_t, pb_p_in, e6, 35);      585   AddDataSet("pi+",pb_p_t, pb_p_in, e6, 35);
544   AddDataSet("pi-",u_m_t,  u_m_in,  e6, 35);      586   AddDataSet("pi-",u_m_t,  u_m_in,  e6, 35);
545   AddDataSet("pi+",u_p_t,  u_p_in,  e6, 35);      587   AddDataSet("pi+",u_p_t,  u_p_in,  e6, 35);
546 }                                                 588 }
547                                                   589 
548 void G4UPiNuclearCrossSection::CrossSectionDes    590 void G4UPiNuclearCrossSection::CrossSectionDescription(std::ostream& outFile) const
549 {                                                 591 {
550   outFile << "G4UPiNuclearCrossSection calcula    592   outFile << "G4UPiNuclearCrossSection calculates the total, elastic and\n"
551           << "inelastic cross sections for pio    593           << "inelastic cross sections for pion scattering from nuclei\n"
552           << "heavier than hydrogen.  It is ba    594           << "heavier than hydrogen.  It is based on the Barashenkov\n"
553           << "parameterization and is valid fo    595           << "parameterization and is valid for all incident energies.\n";
554 }                                                 596 }
555                                                   597 
556                                                   598