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.5)


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