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 11.0.p4)


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