G4QNeutronElasticCrossSection.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id$
00028 //
00029 //
00030 // G4 Physics class: G4QNeutronElasticCrossSection for nA elastic cross sections
00031 // Created: M.V. Kossov, CERN/ITEP(Moscow), 10-OCT-01
00032 // The last update: M.V. Kossov, CERN/ITEP (Moscow) 12-Jan-10 (from G4QElCrSect)
00033 //
00034 // -------------------------------------------------------------------------------
00035 // Short description: Interaction cross-sections for the G4QElastic process
00036 // -------------------------------------------------------------------------------
00037 
00038 //#define debug
00039 //#define isodebug
00040 //#define pdebug
00041 //#define ppdebug
00042 //#define tdebug
00043 //#define sdebug
00044 
00045 #include "G4QNeutronElasticCrossSection.hh"
00046 #include "G4SystemOfUnits.hh"
00047 
00048 // Initialization of the static parameters
00049 const G4int G4QNeutronElasticCrossSection::nPoints=128;//#ofPt in the AMDB tabs(>anyPar)(D)
00050 const G4int G4QNeutronElasticCrossSection::nLast=nPoints-1;// the Last Element in table (D)
00051 G4double  G4QNeutronElasticCrossSection::lPMin=-8.;  // Min tabulated log Momentum      (D)
00052 G4double  G4QNeutronElasticCrossSection::lPMax= 8.;  // Max tabulated log Momentum      (D)
00053 G4double  G4QNeutronElasticCrossSection::dlnP=(lPMax-lPMin)/nLast;// Log step in table  (D)
00054 G4bool    G4QNeutronElasticCrossSection::onlyCS=true;// Flag to calc only CS (not Si/Bi)(L)
00055 G4double  G4QNeutronElasticCrossSection::lastSIG=0.; // Last calculated cross section   (L)
00056 G4double  G4QNeutronElasticCrossSection::lastLP=-10.;// Last log(momOfIncidentHadron)   (L)
00057 G4double  G4QNeutronElasticCrossSection::lastTM=0.;  // Last t_maximum                  (L)
00058 G4double  G4QNeutronElasticCrossSection::theSS=0.;   // The Last sq.slope of 1st difMax (L)
00059 G4double  G4QNeutronElasticCrossSection::theS1=0.;   // The Last mantissa of 1st difMax (L)
00060 G4double  G4QNeutronElasticCrossSection::theB1=0.;   // The Last slope of 1st difr. Max (L)
00061 G4double  G4QNeutronElasticCrossSection::theS2=0.;   // The Last mantissa of 2nd difMax (L)
00062 G4double  G4QNeutronElasticCrossSection::theB2=0.;   // The Last slope of 2nd difr. Max (L)
00063 G4double  G4QNeutronElasticCrossSection::theS3=0.;   // The Last mantissa of 3d difrMax (L)
00064 G4double  G4QNeutronElasticCrossSection::theB3=0.;   // The Last slope of 3d difructMax (L)
00065 G4double  G4QNeutronElasticCrossSection::theS4=0.;   // The Last mantissa of 4th difMax (L)
00066 G4double  G4QNeutronElasticCrossSection::theB4=0.;   // The Last slope of 4th difr. Max (L)
00067 G4int     G4QNeutronElasticCrossSection::lastTZ=0;   // Last atomic number of the target
00068 G4int     G4QNeutronElasticCrossSection::lastTN=0;   // Last # of neutrons in the target
00069 G4double  G4QNeutronElasticCrossSection::lastPIN=0.; // Last initialized max momentum
00070 G4double* G4QNeutronElasticCrossSection::lastCST=0;  // Elastic cross-section table
00071 G4double* G4QNeutronElasticCrossSection::lastPAR=0;  // Parameters of FunctionalCalculation
00072 G4double* G4QNeutronElasticCrossSection::lastSST=0;  // E-dep of sq.slope of the 1st difMax
00073 G4double* G4QNeutronElasticCrossSection::lastS1T=0;  // E-dep of mantissa of the 1st difMax
00074 G4double* G4QNeutronElasticCrossSection::lastB1T=0;  // E-dep of theSlope of the 1st difMax
00075 G4double* G4QNeutronElasticCrossSection::lastS2T=0;  // E-dep of mantissa of the 2nd difMax
00076 G4double* G4QNeutronElasticCrossSection::lastB2T=0;  // E-dep of theSlope of the 2nd difMax
00077 G4double* G4QNeutronElasticCrossSection::lastS3T=0;  // E-dep of mantissa of the 3d difrMax
00078 G4double* G4QNeutronElasticCrossSection::lastB3T=0;  // E-dep of the slope of the 3d difMax
00079 G4double* G4QNeutronElasticCrossSection::lastS4T=0;  // E-dep of mantissa of the 4th difMax
00080 G4double* G4QNeutronElasticCrossSection::lastB4T=0;  // E-dep of theSlope of the 4th difMax
00081 G4int     G4QNeutronElasticCrossSection::lastN=0;    // The last N of calculated nucleus
00082 G4int     G4QNeutronElasticCrossSection::lastZ=0;    // The last Z of calculated nucleus
00083 G4double  G4QNeutronElasticCrossSection::lastP=0.;   // Last used in cross section Momentum
00084 G4double  G4QNeutronElasticCrossSection::lastTH=0.;  // Last threshold momentum
00085 G4double  G4QNeutronElasticCrossSection::lastCS=0.;  // Last value of the Cross Section
00086 G4int     G4QNeutronElasticCrossSection::lastI=0;    // The last position in the DAMDB
00087 
00088 std::vector<G4double*> G4QNeutronElasticCrossSection::PAR; // Vector of params forFunctCalc
00089 std::vector<G4double*> G4QNeutronElasticCrossSection::CST; // Vector of cross-section table
00090 std::vector<G4double*> G4QNeutronElasticCrossSection::SST; // Vector of the 1st sq. slope
00091 std::vector<G4double*> G4QNeutronElasticCrossSection::S1T; // Vector of the first mantissa
00092 std::vector<G4double*> G4QNeutronElasticCrossSection::B1T; // Vector of the first slope
00093 std::vector<G4double*> G4QNeutronElasticCrossSection::S2T; // Vector of the secon mantissa
00094 std::vector<G4double*> G4QNeutronElasticCrossSection::B2T; // Vector of the second slope
00095 std::vector<G4double*> G4QNeutronElasticCrossSection::S3T; // Vector of the third mantissa
00096 std::vector<G4double*> G4QNeutronElasticCrossSection::B3T; // Vector of the third slope
00097 std::vector<G4double*> G4QNeutronElasticCrossSection::S4T; // Vector of the 4th mantissa
00098 std::vector<G4double*> G4QNeutronElasticCrossSection::B4T; // Vector of the 4th slope
00099 
00100 G4QNeutronElasticCrossSection::G4QNeutronElasticCrossSection()
00101 {
00102 }
00103 
00104 G4QNeutronElasticCrossSection::~G4QNeutronElasticCrossSection()
00105 {
00106   std::vector<G4double*>::iterator pos;
00107   for (pos=CST.begin(); pos<CST.end(); pos++)
00108   { delete [] *pos; }
00109   CST.clear();
00110   for (pos=PAR.begin(); pos<PAR.end(); pos++)
00111   { delete [] *pos; }
00112   PAR.clear();
00113   for (pos=SST.begin(); pos<SST.end(); pos++)
00114   { delete [] *pos; }
00115   SST.clear();
00116   for (pos=S1T.begin(); pos<S1T.end(); pos++)
00117   { delete [] *pos; }
00118   S1T.clear();
00119   for (pos=B1T.begin(); pos<B1T.end(); pos++)
00120   { delete [] *pos; }
00121   B1T.clear();
00122   for (pos=S2T.begin(); pos<S2T.end(); pos++)
00123   { delete [] *pos; }
00124   S2T.clear();
00125   for (pos=B2T.begin(); pos<B2T.end(); pos++)
00126   { delete [] *pos; }
00127   B2T.clear();
00128   for (pos=S3T.begin(); pos<S3T.end(); pos++)
00129   { delete [] *pos; }
00130   S3T.clear();
00131   for (pos=B3T.begin(); pos<B3T.end(); pos++)
00132   { delete [] *pos; }
00133   B3T.clear();
00134   for (pos=S4T.begin(); pos<S4T.end(); pos++)
00135   { delete [] *pos; }
00136   S4T.clear();
00137   for (pos=B4T.begin(); pos<B4T.end(); pos++)
00138   { delete [] *pos; }
00139   B4T.clear();
00140 }
00141 
00142 // Returns Pointer to the G4VQCrossSection class
00143 G4VQCrossSection* G4QNeutronElasticCrossSection::GetPointer()
00144 {
00145   static G4QNeutronElasticCrossSection theCrossSection;//*StatBody of the QEl CrossSection*
00146   return &theCrossSection;
00147 }
00148 
00149 // The main member function giving the collision cross section (P is in IU, CS is in mb)
00150 // Make pMom in independent units ! (Now it is MeV)
00151 G4double G4QNeutronElasticCrossSection::GetCrossSection(G4bool fCS, G4double pMom,
00152                                                         G4int tgZ, G4int tgN, G4int pPDG)
00153 {
00154   static std::vector <G4int>    colN;  // Vector of N for calculated nuclei (isotops)
00155   static std::vector <G4int>    colZ;  // Vector of Z for calculated nuclei (isotops)
00156   static std::vector <G4double> colP;  // Vector of last momenta for the reaction
00157   static std::vector <G4double> colTH; // Vector of energy thresholds for the reaction
00158   static std::vector <G4double> colCS; // Vector of last cross sections for the reaction
00159   // ***---*** End of the mandatory Static Definitions of the Associative Memory ***---***
00160   G4double pEn=pMom;
00161   onlyCS=fCS;
00162 #ifdef debug
00163   G4cout<<"G4QNElCS::GetCS:>>> f="<<fCS<<", p="<<pMom<<", Z="<<tgZ<<"("<<lastZ<<") ,N="
00164         <<tgN<<"("<<lastN<<"), T="<<pEn<<"("<<lastTH<<")"<<",Sz="<<colN.size()<<G4endl;
00165   //CalculateCrossSection(fCS,-27,j,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00166 #endif
00167   if(pPDG!=2112)
00168   {
00169     G4cout<<"G4QNeutronElCS::GetCS: *** Found pPDG="<<pPDG<<" =--=> CS=0"<<G4endl;
00170     //CalculateCrossSection(fCS,-27,j,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00171     return 0.;                         // projectile PDG=0 is a mistake (?!) @@
00172   }
00173   G4bool in=false;                     // By default the isotope must be found in the AMDB
00174   lastP   = 0.;                      // New momentum history (nothing to compare with)
00175   lastN   = tgN;                     // The last N of the calculated nucleus
00176   lastZ   = tgZ;                     // The last Z of the calculated nucleus
00177   lastI   = colN.size();             // Size of the Associative Memory DB in the heap
00178   if(lastI) for(G4int i=0; i<lastI; i++) // Loop over proj/tgZ/tgN lines of DB
00179   {                                  // The nucleus with projPDG is found in AMDB
00180     if(colN[i]==tgN && colZ[i]==tgZ) // Isotope is foind in AMDB
00181     {
00182       lastI=i;
00183       lastTH =colTH[i];              // Last THreshold (A-dependent)
00184 #ifdef debug
00185       G4cout<<"G4QNeutElCS::GetCS:Found,P="<<pMom<<",Threshold="<<lastTH<<",i="<<i<<G4endl;
00186       //CalculateCrossSection(fCS,-27,i,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00187 #endif
00188       if(pEn<=lastTH)
00189       {
00190 #ifdef debug
00191         G4cout<<"G4QNeutElCS::GetCS:Found,T="<<pEn<<"<Threshold="<<lastTH<<",CS=0"<<G4endl;
00192         //CalculateCrossSection(fCS,-27,i,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00193 #endif
00194         return 0.;                   // Energy is below the Threshold value
00195       }
00196       lastP  =colP [i];                // Last Momentum  (A-dependent)
00197       lastCS =colCS[i];                // Last CrossSect (A-dependent)
00198       //  if(std::fabs(lastP/pMom-1.)<tolerance) //VI (do not use tolerance)
00199       if(lastP == pMom)              // Do not recalculate
00200       {
00201 #ifdef debug
00202         G4cout<<"G4QNeutronElasticCS::GetCrosS:P="<<pMom<<",CS="<<lastCS*millibarn<<G4endl;
00203 #endif
00204         CalculateCrossSection(fCS,-1,i,pPDG,lastZ,lastN,pMom); // Update param's only
00205         return lastCS*millibarn;     // Use theLastCS
00206       }
00207       in = true;                       // This is the case when the isotop is found in DB
00208       // Momentum pMom is in IU ! @@ Units
00209 #ifdef debug
00210       G4cout<<"G4QNElCrS::G:UpdateDB,P="<<pMom<<",f="<<fCS<<",I="<<lastI<<",i="<<i<<G4endl;
00211 #endif
00212       lastCS=CalculateCrossSection(fCS,-1,i,pPDG,lastZ,lastN,pMom); // read & update
00213 #ifdef debug
00214       G4cout<<"G4QNeutronElCS::GetCrosSec:*****>New (inDB) Calculated CS="<<lastCS<<G4endl;
00215       //CalculateCrossSection(fCS,-27,i,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00216 #endif
00217       if(lastCS<=0. && pEn>lastTH)    // Correct the threshold
00218       {
00219 #ifdef debug
00220         G4cout<<"G4QNeutronElCS::GetCS:New,T="<<pEn<<"(CS=0) > Threshold="<<lastTH<<G4endl;
00221 #endif
00222         lastTH=pEn;
00223       }
00224       break;                           // Go out of the LOOP with found lastI
00225     }
00226 #ifdef debug
00227     G4cout<<"---G4QNeutronElasticCrossSection::GetCrosSec:pPDG="<<pPDG<<",i="<<i<<",N="
00228           <<colN[i]<<",Z["<<i<<"]="<<colZ[i]<<G4endl;
00229     //CalculateCrossSection(fCS,-27,i,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00230 #endif
00231   }
00232   if(!in)                            // This nucleus has not been calculated previously
00233   {
00234 #ifdef debug
00235     G4cout<<"G4QNElCrS::GetCrosSec:CalcNew P="<<pMom<<",f="<<fCS<<",lastI="<<lastI<<G4endl;
00236 #endif
00238     lastCS=CalculateCrossSection(fCS,0,lastI,pPDG,lastZ,lastN,pMom);//calculate&create
00239     if(lastCS<=0.)
00240     {
00241       lastTH = ThresholdEnergy(tgZ, tgN); // The Threshold Energy which is now the last
00242 #ifdef debug
00243       G4cout<<"G4QNeutronElCrosSect::GetCrossSect: NewThresh="<<lastTH<<",T="<<pEn<<G4endl;
00244 #endif
00245       if(pEn>lastTH)
00246       {
00247 #ifdef debug
00248         G4cout<<"G4QNeutElCS::GetCS: First T="<<pEn<<"(CS=0) > Threshold="<<lastTH<<G4endl;
00249 #endif
00250         lastTH=pEn;
00251       }
00252     }
00253 #ifdef debug
00254     G4cout<<"G4QNElCrS::GetCrosSec: New CS="<<lastCS<<",lZ="<<lastN<<",lN="<<lastZ<<G4endl;
00255     //CalculateCrossSection(fCS,-27,lastI,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00256 #endif
00257     colN.push_back(tgN);
00258     colZ.push_back(tgZ);
00259     colP.push_back(pMom);
00260     colTH.push_back(lastTH);
00261     colCS.push_back(lastCS);
00262 #ifdef debug
00263     G4cout<<"G4QNElCrS::GetCS:1st,P="<<pMom<<"(MeV),CS="<<lastCS*millibarn<<"(mb)"<<G4endl;
00264     //CalculateCrossSection(fCS,-27,lastI,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00265 #endif
00266     return lastCS*millibarn;
00267   } // End of creation of the new set of parameters
00268   else
00269   {
00270 #ifdef debug
00271     G4cout<<"G4QNeutronElasticCrossSection::GetCS: Update lastI="<<lastI<<G4endl;
00272 #endif
00273     colP[lastI]=pMom;
00274     colCS[lastI]=lastCS;
00275   }
00276 #ifdef debug
00277   G4cout<<"G4QNElCS::GetCrSec:End,P="<<pMom<<"(MeV),CS="<<lastCS*millibarn<<"(mb)"<<G4endl;
00278   //CalculateCrossSection(fCS,-27,lastI,pPDG,lastZ,lastN,pMom); // DUMMY TEST
00279   G4cout<<"G4QNeutronElasticCrossSection::GetCrSec:***End***, onlyCS="<<onlyCS<<G4endl;
00280 #endif
00281   return lastCS*millibarn;
00282 }
00283 
00284 // Calculation of total elastic cross section (p in IU, CS in mb) @@ Units (?)
00285 // F=0 - create AMDB, F=-1 - read&update AMDB, F=1 - update AMDB (sinchro with higher AMDB)
00286 G4double G4QNeutronElasticCrossSection::CalculateCrossSection(G4bool CS, G4int F,G4int I,
00287                                              G4int PDG, G4int tgZ, G4int tgN, G4double pIU)
00288 {
00289   // *** Begin of Associative Memory DB for acceleration of the cross section calculations
00290   static std::vector <G4double>  PIN;   // Vector of max initialized log(P) in the table
00291   // *** End of Static Definitions (Associative Memory Data Base) ***
00292   G4double pMom=pIU/GeV;                // All calculations are in GeV
00293   onlyCS=CS;                            // Flag to calculate only CS (not Si/Bi)
00294 #ifdef debug
00295   G4cout<<"G4QNeutronElasticCrosS::CalcCS:->onlyCS="<<onlyCS<<",F="<<F<<",p="<<pIU<<G4endl;
00296 #endif
00297   lastLP=std::log(pMom);                // Make a logarithm of the momentum for calculation
00298   if(F)                                 // This isotope was found in AMDB =>RETRIEVE/UPDATE
00299   {
00300     if(F<0)                             // the AMDB must be loded
00301     {
00302       lastPIN = PIN[I];                 // Max log(P) initialised for this table set
00303       lastPAR = PAR[I];                 // Pointer to the parameter set
00304       lastCST = CST[I];                 // Pointer to the total sross-section table
00305       lastSST = SST[I];                 // Pointer to the first squared slope
00306       lastS1T = S1T[I];                 // Pointer to the first mantissa
00307       lastB1T = B1T[I];                 // Pointer to the first slope
00308       lastS2T = S2T[I];                 // Pointer to the second mantissa
00309       lastB2T = B2T[I];                 // Pointer to the second slope
00310       lastS3T = S3T[I];                 // Pointer to the third mantissa
00311       lastB3T = B3T[I];                 // Pointer to the rhird slope
00312       lastS4T = S4T[I];                 // Pointer to the 4-th mantissa
00313       lastB4T = B4T[I];                 // Pointer to the 4-th slope
00314 #ifdef debug
00315       G4cout<<"G4QNElasticCS::CalcCS: DB is updated for I="<<I<<",*,PIN4="<<PIN[4]<<G4endl;
00316 #endif
00317     }
00318 #ifdef debug
00319     G4cout<<"G4QNeutronElasticCrosS::CalcCS:*read*, LP="<<lastLP<<",PIN="<<lastPIN<<G4endl;
00320 #endif
00321     if(lastLP>lastPIN && lastLP<lPMax)
00322     {
00323       lastPIN=GetPTables(lastLP,lastPIN,PDG,tgZ,tgN);// Can update upper logP-Limit in tabs
00324 #ifdef debug
00325       G4cout<<"G4QNElCrS::CalcCS:updated(I),LP="<<lastLP<<"<IN["<<I<<"]="<<lastPIN<<G4endl;
00326 #endif
00327       PIN[I]=lastPIN;                   // Remember the new P-Limit of the tables
00328     }
00329   }
00330   else                                  // This isotope wasn't initialized => CREATE
00331   {
00332     lastPAR = new G4double[nPoints];    // Allocate memory for parameters of CS function
00333     lastPAR[nLast]=0;                   // Initialization for VALGRIND
00334     lastCST = new G4double[nPoints];    // Allocate memory for Tabulated CS function    
00335     lastSST = new G4double[nPoints];    // Allocate memory for Tabulated first sqaredSlope 
00336     lastS1T = new G4double[nPoints];    // Allocate memory for Tabulated first mantissa 
00337     lastB1T = new G4double[nPoints];    // Allocate memory for Tabulated first slope    
00338     lastS2T = new G4double[nPoints];    // Allocate memory for Tabulated second mantissa
00339     lastB2T = new G4double[nPoints];    // Allocate memory for Tabulated second slope   
00340     lastS3T = new G4double[nPoints];    // Allocate memory for Tabulated third mantissa 
00341     lastB3T = new G4double[nPoints];    // Allocate memory for Tabulated third slope    
00342     lastS4T = new G4double[nPoints];    // Allocate memory for Tabulated 4-th mantissa 
00343     lastB4T = new G4double[nPoints];    // Allocate memory for Tabulated 4-th slope    
00344 #ifdef debug
00345     G4cout<<"G4QNeutronElasticCrosS::CalcCS:*ini*,lastLP="<<lastLP<<",min="<<lPMin<<G4endl;
00346 #endif
00347     lastPIN = GetPTables(lastLP,lPMin,PDG,tgZ,tgN); // Returns the new P-limit for tables
00348 #ifdef debug
00349     G4cout<<"G4QNElCS::CalcCS:i,Z="<<tgZ<<",N="<<tgN<<",PDG="<<PDG<<",LP"<<lastPIN<<G4endl;
00350 #endif
00351     PIN.push_back(lastPIN);             // Fill parameters of CS function to AMDB
00352     PAR.push_back(lastPAR);             // Fill parameters of CS function to AMDB
00353     CST.push_back(lastCST);             // Fill Tabulated CS function to AMDB    
00354     SST.push_back(lastSST);             // Fill Tabulated first sq.slope to AMDB 
00355     S1T.push_back(lastS1T);             // Fill Tabulated first mantissa to AMDB 
00356     B1T.push_back(lastB1T);             // Fill Tabulated first slope to AMDB    
00357     S2T.push_back(lastS2T);             // Fill Tabulated second mantissa to AMDB 
00358     B2T.push_back(lastB2T);             // Fill Tabulated second slope to AMDB    
00359     S3T.push_back(lastS3T);             // Fill Tabulated third mantissa to AMDB 
00360     B3T.push_back(lastB3T);             // Fill Tabulated third slope to AMDB    
00361     S4T.push_back(lastS4T);             // Fill Tabulated 4-th mantissa to AMDB 
00362     B4T.push_back(lastB4T);             // Fill Tabulated 4-th slope to AMDB    
00363   } // End of creation/update of the new set of parameters and tables
00364   // =-------= NOW Update (if necessary) and Calculate the Cross Section =---------=
00365 #ifdef debug
00366   G4cout<<"G4QNElCrS::CalcCS:?update?,LP="<<lastLP<<",IN="<<lastPIN<<",ML="<<lPMax<<G4endl;
00367 #endif
00368   if(lastLP>lastPIN && lastLP<lPMax)
00369   {
00370     lastPIN = GetPTables(lastLP,lastPIN,PDG,tgZ,tgN);
00371 #ifdef debug
00372     G4cout<<"G4QNeutronElCrS::CalcCS:*updated(O)*, LP="<<lastLP<<" < IN="<<lastPIN<<G4endl;
00373 #endif
00374   }
00375 #ifdef debug
00376   G4cout<<"G4QNEltCrS::CalcCS: lastLP="<<lastLP<<",lPM="<<lPMin<<",lPIN="<<lastPIN<<G4endl;
00377 #endif
00378   if(!onlyCS) lastTM=GetQ2max(PDG, tgZ, tgN, pMom); // Calculate (-t)_max=Q2_max (GeV2)
00379 #ifdef debug
00380   G4cout<<"G4QNeutElastCroSec::CalcCS:oCS="<<onlyCS<<",-t="<<lastTM<<",p="<<lastLP<<G4endl;
00381 #endif
00382   if(lastLP>lPMin && lastLP<=lastPIN)   // Linear fit is made using precalculated tables
00383   {
00384     if(lastLP==lastPIN)
00385     {
00386       G4double shift=(lastLP-lPMin)/dlnP+.000001; // Log distance from lPMin
00387       G4int    blast=static_cast<int>(shift); // this is a bin number of the lower edge (0)
00388       if(blast<0 || blast>=nLast) G4cout<<"G4QNeutElCS::CCS:b="<<blast<<","<<nLast<<G4endl;
00389       lastSIG = lastCST[blast];
00390       if(!onlyCS)                       // Skip the differential cross-section parameters
00391       {
00392         theSS  = lastSST[blast];
00393         theS1  = lastS1T[blast];
00394         theB1  = lastB1T[blast];
00395         theS2  = lastS2T[blast];
00396         theB2  = lastB2T[blast];
00397         theS3  = lastS3T[blast];
00398         theB3  = lastB3T[blast];
00399         theS4  = lastS4T[blast];
00400         theB4  = lastB4T[blast];
00401       }
00402 #ifdef debug
00403       G4cout<<"G4QNeutronElasticCrossSection::CalcCS:(E)S1="<<theS1<<",B1="<<theB1<<G4endl;
00404 #endif
00405     }
00406     else
00407     {
00408       G4double shift=(lastLP-lPMin)/dlnP;        // a shift from the beginning of the table
00409       G4int    blast=static_cast<int>(shift);    // the lower bin number
00410       if(blast<0)   blast=0;
00411       if(blast>=nLast) blast=nLast-1;            // low edge of the last bin
00412       shift-=blast;                              // step inside the unit bin
00413       G4int lastL=blast+1;                       // the upper bin number
00414       G4double SIGL=lastCST[blast];              // the basic value of the cross-section
00415       lastSIG= SIGL+shift*(lastCST[lastL]-SIGL); // calculated total elastic cross-section
00416 #ifdef debug
00417       G4cout<<"G4QNeutronElCS::CalcCrossSection: Sig="<<lastSIG<<", P="<<pMom<<", Z="<<tgZ
00418             <<", N="<<tgN<<", PDG="<<PDG<<", onlyCS="<<onlyCS<<G4endl;
00419 #endif
00420       if(!onlyCS)                       // Skip the differential cross-section parameters
00421       {
00422         G4double SSTL=lastSST[blast];           // the low bin of the first squared slope
00423         theSS=SSTL+shift*(lastSST[lastL]-SSTL); // the basic value of the first sq.slope
00424         G4double S1TL=lastS1T[blast];           // the low bin of the first mantissa
00425         theS1=S1TL+shift*(lastS1T[lastL]-S1TL); // the basic value of the first mantissa
00426         G4double B1TL=lastB1T[blast];           // the low bin of the first slope
00427 #ifdef debug
00428         G4cout<<"G4QNeutronElCrS::CalcCrossSection:bl="<<blast<<",ls="<<lastL<<",SL="<<S1TL
00429               <<",SU="<<lastS1T[lastL]<<",BL="<<B1TL<<",BU="<<lastB1T[lastL]<<G4endl;
00430 #endif
00431         theB1=B1TL+shift*(lastB1T[lastL]-B1TL); // the basic value of the first slope
00432         G4double S2TL=lastS2T[blast];           // the low bin of the second mantissa
00433         theS2=S2TL+shift*(lastS2T[lastL]-S2TL); // the basic value of the second mantissa
00434         G4double B2TL=lastB2T[blast];           // the low bin of the second slope
00435         theB2=B2TL+shift*(lastB2T[lastL]-B2TL); // the basic value of the second slope
00436         G4double S3TL=lastS3T[blast];           // the low bin of the third mantissa
00437         theS3=S3TL+shift*(lastS3T[lastL]-S3TL); // the basic value of the third mantissa
00438 #ifdef debug
00439         G4cout<<"G4QNElCS::CCS: s3l="<<S3TL<<",sh3="<<shift<<",s3h="<<lastS3T[lastL]<<",b="
00440               <<blast<<",l="<<lastL<<G4endl;
00441 #endif
00442         G4double B3TL=lastB3T[blast];           // the low bin of the third slope
00443         theB3=B3TL+shift*(lastB3T[lastL]-B3TL); // the basic value of the third slope
00444         G4double S4TL=lastS4T[blast];           // the low bin of the 4-th mantissa
00445         theS4=S4TL+shift*(lastS4T[lastL]-S4TL); // the basic value of the 4-th mantissa
00446 #ifdef debug
00447         G4cout<<"G4QNElCS::CCS: s4l="<<S4TL<<",sh4="<<shift<<",s4h="<<lastS4T[lastL]<<",b="
00448               <<blast<<",l="<<lastL<<G4endl;
00449 #endif
00450         G4double B4TL=lastB4T[blast];           // the low bin of the 4-th slope
00451         theB4=B4TL+shift*(lastB4T[lastL]-B4TL); // the basic value of the 4-th slope
00452       }
00453 #ifdef debug
00454       G4cout<<"G4QNeutronElasticCrossSection::CalcCS:(I)S1="<<theS1<<",B1="<<theB1<<G4endl;
00455 #endif
00456     }
00457   }
00458   else lastSIG=GetTabValues(lastLP, PDG, tgZ, tgN); // Direct calculation beyond the table
00459   if(lastSIG<0.) lastSIG = 0.;                   // @@ a Warning print can be added
00460 #ifdef debug
00461   G4cout<<"G4QNeutronElasticCrossSection::CalculateCS: END, onlyCS="<<onlyCS<<G4endl;
00462 #endif
00463   return lastSIG;
00464 }
00465 
00466 // It has parameter sets for all tZ/tN/PDG, using them the tables can be created/updated
00467 G4double G4QNeutronElasticCrossSection::GetPTables(G4double LP, G4double ILP, G4int PDG,
00468                                                    G4int tgZ, G4int tgN)
00469 {
00470   // @@ At present all nA==pA ---------> Each neucleus can have not more than 51 parameters
00471   static const G4double pwd=2727;
00472   const G4int n_npel=24;                // #of parameters for np-elastic (<nPoints=128)
00473   const G4int n_ppel=32;                // #of parameters for pp-elastic (<nPoints=128)
00474   //                      -0- -1-  -2- -3- -4-  -5- -6- -7- -8- -9--10--11--12--13- -14-
00475   G4double np_el[n_npel]={12.,.05,.0001,5.,.35,6.75,.14,19.,.6,6.75,.14,13.,.14,.6,.00013,
00476                           75.,.001,7.2,4.32,.012,2.5,0.0,12.,.34};
00477   //                      -15--16--17- -18- -19--20--21--22--23-
00478   //                       -0-   -1-  -2- -3- -4- -5-  -6-  -7-  -8--9--10--11--12--13-
00479   G4double pp_el[n_ppel]={2.865,18.9,.6461,3.,9.,.425,.4276,.0022,5.,74.,3.,3.4,.2,.17,
00480                           .001,8.,.055,3.64,5.e-5,4000.,1500.,.46,1.2e6,3.5e6,5.e-5,1.e10,
00481                           8.5e8,1.e10,1.1,3.4e6,6.8e6,0.};
00482   //                      -14--15- -16- -17- -18-  -19- -20- -21- -22-  -23-   -24-  -25-
00483   //                       -26- -27-  -28- -29- -30- -31-
00484   //==> n (Z=0)
00485   static const G4int N0=1; // *** Not used (fake)***
00486   static const G4double pZ0N1[7]={0., 0., 0., 0., 0., 0., 0.}; // Not used (fake)
00487   static const std::pair<G4int, const G4double*> Z0N1(1,pZ0N1);
00488   static const std::pair<G4int, const G4double*> Z0[N0]={Z0N1};
00489   //==> H (Z=1) *** protons are treated separately ***
00490   static const G4int N1=3;
00491   static const G4double pZ1N0[7]={0., 0., 0., 0., 0., 0., 0.}; // Not used (fake)
00492   static const std::pair<G4int, const G4double*> Z1N0(0,pZ1N0);
00493   static const G4double pZ1N1[7]={6.E-5, 4., .055, 1.1E-8, .008, 1.2E-8, .019};
00494   static const std::pair<G4int, const G4double*> Z1N1(1,pZ1N1);
00495   static const G4double pZ1N2[7]={6.E-5, 2.2, .051, 1.E-8, .04, 9.E-8, .0075};
00496   static const std::pair<G4int, const G4double*> Z1N2(2,pZ1N2);
00497   static const std::pair<G4int, const G4double*> Z1[N1]={Z1N0, Z1N1, Z1N2};
00498   //==> He(Z=2)
00499   static const G4int N2=2;
00500   static const G4double pZ2N1[7]={6.E-5, 3., .06, 4.E-9, .03, 7.E-8, .015};
00501   static const std::pair<G4int, const G4double*> Z2N1(1,pZ2N1);
00502   static const G4double pZ2N2[7]={3.E-4, .23, 1., 1.5E-9, 2.E-02, 1.E-8, .003};
00503   static const std::pair<G4int, const G4double*> Z2N2(2,pZ2N2);
00504   static const std::pair<G4int, const G4double*> Z2[N2]={Z2N1, Z2N2};
00505   //==> Li(Z=3)
00506   static const G4int N3=2;
00507   static const G4double pZ3N3[7]={3.1E-7, 1.7, 1.3E-4, 1.E-8, .02, 1.1E-7, .0023};
00508   static const std::pair<G4int, const G4double*> Z3N1(3,pZ3N3);
00509   static const G4double pZ3N4[7]={1.3E-6, 1.8, 7.6E-4, 9.E-9, .03, 1.E-7, .0029};
00510   static const std::pair<G4int, const G4double*> Z3N2(4,pZ3N4);
00511   static const std::pair<G4int, const G4double*> Z3[N3]={Z3N1, Z3N2};
00512   //==> Be(Z=4)
00513   static const G4int N4=2;
00514   static const G4double pZ4N3[7]={2.E-4, 1.4, 2.7, 0., .02, 5.E-8, 0.};
00515   static const std::pair<G4int, const G4double*> Z4N3(3,pZ4N3);
00516   static const G4double pZ4N5[7]={1.E-6, 5.7, .0011, 3.E-9, .007, 2.E-8, .016};
00517   static const std::pair<G4int, const G4double*> Z4N5(5,pZ4N5);
00518   static const std::pair<G4int, const G4double*> Z4[N4]={Z4N3,Z4N5};
00519   //==> B (Z=5)
00520   static const G4int N5=2;
00521   static const G4double pZ5N5[7]={8.E-7, 5., 3.4E-4, 7.E-9, 1.E-02, 1.E-07, .0053};
00522   static const std::pair<G4int, const G4double*> Z5N5(5,pZ5N5);
00523   static const G4double pZ5N6[7]={4.8E-6, 6.6, .0035, 4.E-9, .003, 1.E-8, .012};
00524   static const std::pair<G4int, const G4double*> Z5N6(6,pZ5N6);
00525   static const std::pair<G4int, const G4double*> Z5[N5]={Z5N5, Z5N6};
00526   //==> C (Z=6) *** Only nat (C13=C12=C_nat) ***
00527   static const G4int N6=2;
00528   static const G4double pZ6N6[7]={4.9E-6, 6.6, .0035, 4.E-9, .002, 6.E-9, .011};
00529   static const std::pair<G4int, const G4double*> Z6N6(6,pZ6N6);
00530   static const G4double pZ6N7[7]={4.9E-6, 6.6, .0035, 4.E-9, .002, 6.E-9, .011};
00531   static const std::pair<G4int, const G4double*> Z6N7(7,pZ6N7);
00532   static const std::pair<G4int, const G4double*> Z6[N6]={Z6N6, Z6N7};
00533   //==> N (Z=7)
00534   static const G4int N7=2;
00535   static const G4double pZ7N7[7]={4.9E-6, 1.6, .03, .4E-9, .02, 6.E-8, .021};
00536   static const std::pair<G4int, const G4double*> Z7N7(7,pZ7N7);
00537   static const G4double pZ7N8[7]={2.5E-6, 5., .0021, 2.5E-9, .015, 5.E-8, .009};
00538   static const std::pair<G4int, const G4double*> Z7N8(8,pZ7N8);
00539   static const std::pair<G4int, const G4double*> Z7[N7]={Z7N7, Z7N8};
00540   //==> O (Z=8) (O18=O17, No data)
00541   static const G4int N8=3;
00542   static const G4double pZ8N8[7]={2.5E-6, 5.3, .0018, 3.E-9, .01, 1.5E-8, .0075};
00543   static const std::pair<G4int, const G4double*> Z8N8(8,pZ8N8);
00544   static const G4double pZ8N9[7]={1.4E-6, 2.1, .0025, 1.3E-9, .02, 1.3E-7, .0072};
00545   static const std::pair<G4int, const G4double*> Z8N9(9,pZ8N9);
00546   static const G4double pZ8N10[7]={1.4E-6, 2.1, .0025, 1.3E-9, .02, 1.3E-7, .0072};
00547   static const std::pair<G4int, const G4double*> Z8N10(10,pZ8N10);
00548   static const std::pair<G4int, const G4double*> Z8[N8]={Z8N8, Z8N9, Z8N10};
00549   //==> F (Z=9)
00550   static const G4int N9=1;
00551   static const G4double pZ9N10[7]={1.4E-6, 7.5, 6.7E-4, 4.E-9, 2.E-5, 7.E-12, .0066};
00552   static const std::pair<G4int, const G4double*> Z9N10(10,pZ9N10);
00553   static const std::pair<G4int, const G4double*> Z9[N9]={Z9N10};
00554   //==> Ne(Z=10) *** No data *** (Ne20=Na22, Ne21=F19, Ne22=Na22)
00555   static const G4int N10=3;
00556   static const G4double pZ10N10[7]={1.4E-5, 7., .01, 0., 3.E-11, 7.E-24, .12};
00557   static const std::pair<G4int, const G4double*> Z10N10(10,pZ10N10);
00558   static const G4double pZ10N11[7]={1.4E-6, 7.5, 6.7E-4, 4.E-9, 2.E-5, 7.E-12, .0066};
00559   static const std::pair<G4int, const G4double*> Z10N11(11,pZ10N11);
00560   static const G4double pZ10N12[7]={1.4E-5, 7., .01, 0., 3.E-11, 7.E-24, .12};
00561   static const std::pair<G4int, const G4double*> Z10N12(12,pZ10N12);
00562   static const std::pair<G4int, const G4double*> Z10[N10]={Z10N10, Z10N11, Z10N12};
00563   //==> Na(Z=11)
00564   static const G4int N11=2;
00565   static const G4double pZ11N11[7]={1.4E-5, 7., .01, 0., 3.E-11, 7.E-24, .12};
00566   static const std::pair<G4int, const G4double*> Z11N11(11,pZ11N11);
00567   static const G4double pZ11N12[7]={1.4E-6, 7.6, 6.E-4, 5.E-9, 7.E-9, 3.E-18, .0056};
00568   static const std::pair<G4int, const G4double*> Z11N12(12,pZ11N12);
00569   static const std::pair<G4int, const G4double*> Z11[N11]={Z11N11, Z11N12};
00570   //==> Mg(Z=12)
00571   static const G4int N12=3;
00572   static const G4double pZ12N12[7]={8.E-7, 3., .001, 1.8E-9, .0015, .2E-9, .006};
00573   static const std::pair<G4int, const G4double*> Z12N12(12,pZ12N12);
00574   static const G4double pZ12N13[7]={8.E-7, 7., 3.E-4, 6.E-9, .006, 4.E-8, .0042};
00575   static const std::pair<G4int, const G4double*> Z12N13(13,pZ12N13);
00576   static const G4double pZ12N14[7]={1.2E-6, 6.8, 5.E-4, 5.E-9, .007, 2.E-8, .0044};
00577   static const std::pair<G4int, const G4double*> Z12N14(14,pZ12N14);
00578   static const std::pair<G4int, const G4double*> Z12[N12]={Z12N12, Z12N13, Z12N14};
00579   //==> Al(Z=13)
00580   static const G4int N13=1;
00581   static const G4double pZ13N14[7]={3.E-7, 5., 8.4E-5, 7.E-9, .008, 2.E-8, .0022};
00582   static const std::pair<G4int, const G4double*> Z13N14(14,pZ13N14);
00583   static const std::pair<G4int, const G4double*> Z13[N13]={Z13N14};
00584   //==> Si(Z=14)
00585   static const G4int N14=3;
00586   static const G4double pZ14N14[7]={1.2E-6, 6., 4.E-4, 6.E-9, .012, 8.E-8, .0029};
00587   static const std::pair<G4int, const G4double*> Z14N14(14,pZ14N14);
00588   static const G4double pZ14N15[7]={2.4E-6, 4., .0016, 3.E-9, .018, 6.E-8, .0037};
00589   static const std::pair<G4int, const G4double*> Z14N15(15,pZ14N15);
00590   static const G4double pZ14N16[7]={6.E-7, 4., 3.7E-4, 3.E-9, .018, 6.E-8, .0036};
00591   static const std::pair<G4int, const G4double*> Z14N16(16,pZ14N16);
00592   static const std::pair<G4int, const G4double*> Z14[N14]={Z14N14, Z14N15, Z14N16};
00593   //==> P (Z=15)
00594   static const G4int N15=1;
00595   static const G4double pZ15N16[7]={6.E-7, 3., 8.2E-4, 1.4E-9, .03, 8.E-8, .0059};
00596   static const std::pair<G4int, const G4double*> Z15N16(16,pZ15N16);
00597   static const std::pair<G4int, const G4double*> Z15[N15]={Z15N16};
00598   //==> S (Z=16)
00599   static const G4int N16=4;
00600   static const G4double pZ16N16[7]={6.E-7, 3., 1.9E-4, 5.E-9, .03, 6.E-8, .0013};
00601   static const std::pair<G4int, const G4double*> Z16N16(16,pZ16N16);
00602   static const G4double pZ16N17[7]={2.4E-6, 3., .0023, 2.E-9, .03, 6.5E-8, .004};
00603   static const std::pair<G4int, const G4double*> Z16N17(17,pZ16N17);
00604   static const G4double pZ16N18[7]={2.4E-6, 1.6, .0031, 1.4E-9, .03, 4.E-08, .0028};
00605   static const std::pair<G4int, const G4double*> Z16N18(18,pZ16N18);
00606   static const G4double pZ16N20[7]={2.4E-6, 3.1, .0017, 2.5E-9, .03, 5.E-08, .0029};
00607   static const std::pair<G4int, const G4double*> Z16N20(20,pZ16N20);
00608   static const std::pair<G4int, const G4double*> Z16[N16]={Z16N16, Z16N17, Z16N18, Z16N20};
00609   //==> Cl(Z=17)
00610   static const G4int N17=2;
00611   static const G4double pZ17N18[7]={1.2E-7, .04, .062, 3.E-12, 3.E-02, 3.E-08, .027};
00612   static const std::pair<G4int, const G4double*> Z17N18(18,pZ17N18);
00613   static const G4double pZ17N20[7]={1.2E-7, 2., 6.8E-5, 2.7E-9, .03, 4.E-8, .0015};
00614   static const std::pair<G4int, const G4double*> Z17N20(20,pZ17N20);
00615   static const std::pair<G4int, const G4double*> Z17[N17]={Z17N18, Z17N20};
00616   //==> Ar(Z=18)
00617   static const G4int N18=3;
00618   static const G4double pZ18N18[7]={1.2E-7, .52, .017, 1.1E-11, .03, 3.E-8, .095};
00619   static const std::pair<G4int, const G4double*> Z18N18(18,pZ18N18);
00620   static const G4double pZ18N20[7]={1.2E-07, .09, .012, 1.8E-11, .03, 3.E-8, .011};
00621   static const std::pair<G4int, const G4double*> Z18N20(20,pZ18N20);
00622   static const G4double pZ18N22[7]={1.2E-7, .65, 1.2E-4, 1.5E-9, .03, 5.E-8, 8.E-4};
00623   static const std::pair<G4int, const G4double*> Z18N22(22,pZ18N22);
00624   static const std::pair<G4int, const G4double*> Z18[N18]={Z18N18, Z18N20, Z18N22};
00625   //==> K (Z=19)
00626   static const G4int N19=3;
00627   static const G4double pZ19N20[7]={1.2E-7, 1.3, 1.9E-4, .9E-9, .04, 5.5E-8, .0026};
00628   static const std::pair<G4int, const G4double*> Z19N20(20,pZ19N20);
00629   static const G4double pZ19N21[7]={1.6E-7, 1.2, 3.7E-4, .8E-9, .04, 6.5E-8, .0034};
00630   static const std::pair<G4int, const G4double*> Z19N21(21,pZ19N21);
00631   static const G4double pZ19N22[7]={6.E-8, 1.3, 1.2E-4, .9E-9, .04, 6.E-8, .0031};
00632   static const std::pair<G4int, const G4double*> Z19N22(22,pZ19N22);
00633   static const std::pair<G4int, const G4double*> Z19[N19]={Z19N20, Z19N21, Z19N22};
00634   //==> Ca(Z=20)
00635   static const G4int N20=6;
00636   static const G4double pZ20N20[7]={2.4E-7, 3.4, 2.1E-4, 1.5E-9, .035, 6.E-8, .0037};
00637   static const std::pair<G4int, const G4double*> Z20N20(20,pZ20N20);
00638   static const G4double pZ20N22[7]={6.E-8, 2.7, 2.7E-5, 3.E-9, .035, 6.E-8, .0014};
00639   static const std::pair<G4int, const G4double*> Z20N22(22,pZ20N22);
00640   static const G4double pZ20N23[7]={1.5E-8, 1.8, 3.4E-5, .6E-9, .04, 6.E-8, .0049};
00641   static const std::pair<G4int, const G4double*> Z20N23(23,pZ20N23);
00642   static const G4double pZ20N24[7]={3.E-6, 5., .002, 2.E-9, .03, 7.E-8, .0038};
00643   static const std::pair<G4int, const G4double*> Z20N24(24,pZ20N24);
00644   static const G4double pZ20N26[7]={1.7E-5, 18., .0027, 1.E-8, 2.E-7, 7.E-17, .0047};
00645   static const std::pair<G4int, const G4double*> Z20N26(26,pZ20N26);
00646   static const G4double pZ20N28[7]={7.6E-6, .4, .07, .13E-9, .05, 4.E-8, .0042};
00647   static const std::pair<G4int, const G4double*> Z20N28(28,pZ20N28);
00648   static const std::pair<G4int, const G4double*> Z20[N20]={Z20N20, Z20N22, Z20N23,
00649                                                            Z20N24, Z20N26, Z20N28};
00650   //==> Sc(Z=21)
00651   static const G4int N21=1;
00652   static const G4double pZ21N24[7]={3.6E-9, 1.5, 5.2E-5, .1E-9, .05, 1.E-7, .025};
00653   static const std::pair<G4int, const G4double*> Z21N24(24,pZ21N24);
00654   static const std::pair<G4int, const G4double*> Z21[N21]={Z21N24};
00655   //==> Ti(Z=22)
00656   static const G4int N22=5;
00657   static const G4double pZ22N24[7]={2.8E-8, 1.8, 5.6E-5, .6E-9, .05, 8.E-8, .0042};
00658   static const std::pair<G4int, const G4double*> Z22N24(24,pZ22N24);
00659   static const G4double pZ22N25[7]={3.1E-9, 1.6, 6.E-6, .8E-9, .04, 8.E-8, .0036};
00660   static const std::pair<G4int, const G4double*> Z22N25(25,pZ22N25);
00661   static const G4double pZ22N26[7]={3.E-9, 4., 3.2E-6, 1.4E-9, .05, 2.E-7, .0048};
00662   static const std::pair<G4int, const G4double*> Z22N26(26,pZ22N26);
00663   static const G4double pZ22N27[7]={1.E-8, 2., 3.4E-6, 4.5E-9, .05, 8.E-8, 7.7E-4};
00664   static const std::pair<G4int, const G4double*> Z22N27(27,pZ22N27);
00665   static const G4double pZ22N28[7]={4.E-7, 4., 3.7E-4, 1.E-09, .05, 1.E-7, .0041};
00666   static const std::pair<G4int, const G4double*> Z22N28(28,pZ22N28);
00667   static const std::pair<G4int, const G4double*> Z22[N22]={Z22N24, Z22N25, Z22N26,
00668                                                          Z22N27, Z22N28};
00669   //==> V (Z=23) *** Only nat *** (v50=v51=v_nat)
00670   static const G4int N23=2;
00671   static const G4double pZ23N27[7]={.3E-9, 2., 8.E-7, .55E-9, .07, 1.7E-7, .0055};
00672   static const std::pair<G4int, const G4double*> Z23N27(27,pZ23N27);
00673   static const G4double pZ23N28[7]={.3E-9, 2., 8.E-7, .55E-9, .07, 1.7E-7, .0055};
00674   static const std::pair<G4int, const G4double*> Z23N28(28,pZ23N28);
00675   static const std::pair<G4int, const G4double*> Z23[N23]={Z23N27, Z23N28};
00676   //==> Cr(Z=24)
00677   static const G4int N24=4;
00678   static const G4double pZ24N26[7]={1.2E-9, 2.8, 1.E-6, 1.7E-9, .07, 1.7E-7, .0026};
00679   static const std::pair<G4int, const G4double*> Z24N26(26,pZ24N26);
00680   static const G4double pZ24N28[7]={4.4E-6, 11., .0012, 5.E-9, .04, 3.E-7, .0032};
00681   static const std::pair<G4int, const G4double*> Z24N28(28,pZ24N28);
00682   static const G4double pZ24N29[7]={1.8E-9, 2.4, 6.3E-6, .5E-9, .07, 2.E-7, .0085};
00683   static const std::pair<G4int, const G4double*> Z24N29(29,pZ24N29);
00684   static const G4double pZ24N30[7]={4.8E-8, 2.8, 4.4E-5, 1.4E-9, .07, 2.E-7, .0027};
00685   static const std::pair<G4int, const G4double*> Z24N30(30,pZ24N30);
00686   static const std::pair<G4int, const G4double*> Z24[N24]={Z24N26, Z24N28, Z24N29, Z24N30};
00687   //==> Mn(Z=25)
00688   static const G4int N25=1;
00689   static const G4double pZ25N30[7]={6.5E-11, 1.4, 1.E-7, .8E-9, .07, 1.7E-7, .0022};
00690   static const std::pair<G4int, const G4double*> Z25N30(30,pZ25N30);
00691   static const std::pair<G4int, const G4double*> Z25[N25]={Z25N30};
00692   //==> Fe(Z=26)
00693   static const G4int N26=4;
00694   static const G4double pZ26N28[7]={3.9E-8, 5., 1.7E-5, 3.E-9, .07, 3.E-7, .0023};
00695   static const std::pair<G4int, const G4double*> Z26N28(28,pZ26N28);
00696   static const G4double pZ26N30[7]={5.E-9, .4, 1.5E-4, 4.E-11, .1, 3.E-7, .012};
00697   static const std::pair<G4int, const G4double*> Z26N30(30,pZ26N30);
00698   static const G4double pZ26N31[7]={.5E-9, .5, 2.6E-6, .3E-9, .11, 5.E-7, .0027};
00699   static const std::pair<G4int, const G4double*> Z26N31(31,pZ26N31);
00700   static const G4double pZ26N32[7]={1.E-7, 3.1, 1.E-4, 1.3E-9, .11, 5.E-7, .0031};
00701   static const std::pair<G4int, const G4double*> Z26N32(32,pZ26N32);
00702   static const std::pair<G4int, const G4double*> Z26[N26]={Z26N28, Z26N30, Z26N31, Z26N32};
00703   //==> Co(Z=27)
00704   static const G4int N27=2;
00705   static const G4double pZ27N31[7]={4.E-7, 3., .004, 0., .11, 4.5E-7, .07};
00706   static const std::pair<G4int, const G4double*> Z27N31(31,pZ27N31);
00707   static const G4double pZ27N32[7]={4.E-7, 5., 5.E-4, 1.2E-9, .13, 6.E-7, .006};
00708   static const std::pair<G4int, const G4double*> Z27N32(32,pZ27N32);
00709   static const std::pair<G4int, const G4double*> Z27[N27]={Z27N32, Z27N31};
00710   //==> Ni(Z=28)
00711   static const G4int N28=6;
00712   static const G4double pZ28N30[7]={1.E-7, 2.5, .001, .14E-9, .13, 6.E-7, .025};
00713   static const std::pair<G4int, const G4double*> Z28N30(30,pZ28N30);
00714   static const G4double pZ28N31[7]={1.E-7, 19., 1.2E-5, 1.E-8, 4.E-12, 3.E-22, .0024};
00715   static const std::pair<G4int, const G4double*> Z28N31(31,pZ28N31);
00716   static const G4double pZ28N32[7]={1.E-8, 2.5, 3.9E-6, 3.5E-9, .13, 6.E-7, .001};
00717   static const std::pair<G4int, const G4double*> Z28N32(32,pZ28N32);
00718   static const G4double pZ28N33[7]={5.E-9, 2.6, 1.5E-5, .42E-9, .13, 7.E-7, .008};
00719   static const std::pair<G4int, const G4double*> Z28N33(33,pZ28N33);
00720   static const G4double pZ28N34[7]={.24E-9, 2., 1.2E-6, .25E-9, .13, 6.E-7, .0094};
00721   static const std::pair<G4int, const G4double*> Z28N34(34,pZ28N34);
00722   static const G4double pZ28N36[7]={1.E-8, 3., 5.5E-8, 2.8E-7, .12, 6.E-7, 1.6E-5};
00723   static const std::pair<G4int, const G4double*> Z28N36(36,pZ28N36);
00724   static const std::pair<G4int, const G4double*> Z28[N28]={Z28N30, Z28N31, Z28N32, Z28N33,
00725                                                            Z28N34, Z28N36};
00726   //==> Cu(Z=29)
00727   static const G4int N29=2;
00728   static const G4double pZ29N34[7]={1.1E-7, 3.5, 1.6E-4, .9E-9, .13, 7.E-7, .005};
00729   static const std::pair<G4int, const G4double*> Z29N34(34,pZ29N34);
00730   static const G4double pZ29N36[7]={1.1E-7, 3.5, 4.3E-4, .3E-9, .13, 7.E-7, .013};
00731   static const std::pair<G4int, const G4double*> Z29N36(36,pZ29N36);
00732   static const std::pair<G4int, const G4double*> Z29[N29]={Z29N34, Z29N36};
00733   //==> Zn(Z=30) *** Only nat *** (zn64=zn66=zn67=zn68=zn70=zn_nat)
00734   static const G4int N30=5;
00735   static const G4double pZ30N34[7]={1.1E-7, 4., 1.2E-4, 1.2E-9, .17, 7.E-7, .004};
00736   static const std::pair<G4int, const G4double*> Z30N34(34,pZ30N34);
00737   static const G4double pZ30N36[7]={1.1E-7, 4., 1.2E-4, 1.2E-9, .17, 7.E-7, .004};
00738   static const std::pair<G4int, const G4double*> Z30N36(36,pZ30N36);
00739   static const G4double pZ30N37[7]={1.1E-7, 4., 1.2E-4, 1.2E-9, .17, 7.E-7, .004};
00740   static const std::pair<G4int, const G4double*> Z30N37(37,pZ30N37);
00741   static const G4double pZ30N38[7]={1.1E-7, 4., 1.2E-4, 1.2E-9, .17, 7.E-7, .004};
00742   static const std::pair<G4int, const G4double*> Z30N38(38,pZ30N38);
00743   static const G4double pZ30N40[7]={1.1E-7, 4., 1.2E-4, 1.2E-9, .17, 7.E-7, .004};
00744   static const std::pair<G4int, const G4double*> Z30N40(40,pZ30N40);
00745   static const std::pair<G4int, const G4double*> Z30[N30]={Z30N34, Z30N36, Z30N37,
00746                                                            Z30N38, Z30N40};
00747   //==> Ga(Z=31)
00748   static const G4int N31=2;
00749   static const G4double pZ31N38[7]={5.E-8, 3.7, 1.1E-4, .55E-9, .17, 8.4E-7, .0076};
00750   static const std::pair<G4int, const G4double*> Z31N38(38,pZ31N38);
00751   static const G4double pZ31N40[7]={1.E-8, 3.1, 1.7E-5, .7E-9, .17, 9.E-7, .0048};
00752   static const std::pair<G4int, const G4double*> Z31N40(40,pZ31N40);
00753   static const std::pair<G4int, const G4double*> Z31[N31]={Z31N38, Z31N40};
00754   //==> Ge(Z=32)
00755   static const G4int N32=5;
00756   static const G4double pZ32N38[7]={5.E-5, 4., .17, .35E-9, .17, 9.E-7, .013};
00757   static const std::pair<G4int, const G4double*> Z32N38(38,pZ32N38);
00758   static const G4double pZ32N40[7]={5.E-7, 4.4, .001, .6E-9, .17, 9.E-7, .008};
00759   static const std::pair<G4int, const G4double*> Z32N40(40,pZ32N40);
00760   static const G4double pZ32N41[7]={5.E-9, 3., 8.E-6, .7E-9, .17, 1.E-6, .0043};
00761   static const std::pair<G4int, const G4double*> Z32N41(41,pZ32N41);
00762   static const G4double pZ32N42[7]={1.E-7, 4.2, 1.7E-4, .7E-9, .17, 1.E-6, .0065};
00763   static const std::pair<G4int, const G4double*> Z32N42(42,pZ32N42);
00764   static const G4double pZ32N44[7]={1.E-6, 4.6, .0018, .6E-9, .17, 1.E-6, .0073};
00765   static const std::pair<G4int, const G4double*> Z32N44(44,pZ32N44);
00766   static const std::pair<G4int, const G4double*> Z32[N32]={Z32N38, Z32N40, Z32N41,
00767                                                            Z32N42, Z32N44};
00768   //==> As(Z=33)
00769   static const G4int N33=2;
00770   static const G4double pZ33N41[7]={1.E-8, 3.4, 1.5E-5, .72E-9, .17, 1.E-6, .0045};
00771   static const std::pair<G4int, const G4double*> Z33N41(41,pZ33N41);
00772   static const G4double pZ33N42[7]={1.E-8, 4.1, 1.3E-5, .75E-9, .2, 1.2E-6, .0048};
00773   static const std::pair<G4int, const G4double*> Z33N42(42,pZ33N42);
00774   static const std::pair<G4int, const G4double*> Z33[N33]={Z33N41, Z33N42};
00775   //==> Se(Z=34)
00776   static const G4int N34=7;
00777   static const G4double pZ34N40[7]={6.E-8, 7.2, 6.E-5, 1.E-9, .32, 2.E-6, .0063};
00778   static const std::pair<G4int, const G4double*> Z34N40(40,pZ34N40);
00779   static const G4double pZ34N42[7]={4.E-5, 7.4, .1, .43E-9, .34, 2.1E-6, .016};
00780   static const std::pair<G4int, const G4double*> Z34N42(42,pZ34N42);
00781   static const G4double pZ34N43[7]={1.E-7, 6.2, 1.4E-4, .9E-9, .34, 2.1E-6, .0075};
00782   static const std::pair<G4int, const G4double*> Z34N43(43,pZ34N43);
00783   static const G4double pZ34N44[7]={1.E-7, 6.6, 1.3E-4, .9E-9, .34, 2.1E-6, .0075};
00784   static const std::pair<G4int, const G4double*> Z34N44(44,pZ34N44);
00785   static const G4double pZ34N45[7]={5.E-8, 6.6, 4.8E-5, 1.2E-9, .4, 2.6E-6, .0055};
00786   static const std::pair<G4int, const G4double*> Z34N45(45,pZ34N45);
00787   static const G4double pZ34N46[7]={2.E-7, 7.7, 1.3E-4, 1.7E-9, .34, 2.1E-6, .0043};
00788   static const std::pair<G4int, const G4double*> Z34N46(46,pZ34N46);
00789   static const G4double pZ34N48[7]={2.E-7, 8.3, 1.2E-4, 1.7E-9, .34, 2.1E-6, .0043};
00790   static const std::pair<G4int, const G4double*> Z34N48(48,pZ34N48);
00791   static const std::pair<G4int, const G4double*> Z34[N34]={Z34N40, Z34N42, Z34N43, Z34N44,
00792                                                            Z34N45, Z34N46, Z34N48};
00793   //==> Br(Z=35)
00794   static const G4int N35=2;
00795   static const G4double pZ35N44[7]={5.E-8, 6., 2.8E-5, 2.E-9, .34, 2.1E-6, .0028};
00796   static const std::pair<G4int, const G4double*> Z35N44(44,pZ35N44);
00797   static const G4double pZ35N46[7]={4.E-8, 6.2, 3.7E-5, 1.1E-9, .34, 2.1E-6, .0049};
00798   static const std::pair<G4int, const G4double*> Z35N46(46,pZ35N46);
00799   static const std::pair<G4int, const G4double*> Z35[N35]={Z35N44, Z35N46};
00800   //==> Kr(Z=36)
00801   static const G4int N36=7;
00802   static const G4double pZ36N42[7]={1.6E-7, 6.8, 2.E-4, .8E-9, .35, 2.1E-6, .0076};
00803   static const std::pair<G4int, const G4double*> Z36N42(42,pZ36N42);
00804   static const G4double pZ36N44[7]={1.6E-7, 7.3, 1.6E-4, 1.E-9, .35, 2.1E-6, .0062};
00805   static const std::pair<G4int, const G4double*> Z36N44(44,pZ36N44);
00806   static const G4double pZ36N46[7]={1.6E-7, 7.3, 3.3E-4, .7E-9, .35, 2.1E-6, .013};
00807   static const std::pair<G4int, const G4double*> Z36N46(46,pZ36N46);
00808   static const G4double pZ36N47[7]={1.6E-6, 7.3, .003, .6E-9, .35, 2.1E-6, .011};
00809   static const std::pair<G4int, const G4double*> Z36N47(47,pZ36N47);
00810   static const G4double pZ36N48[7]={1.6E-7, 7.8, 7.6E-5, 2.E-9, .35, 2.1E-6, .0031};
00811   static const std::pair<G4int, const G4double*> Z36N48(48,pZ36N48);
00812   static const G4double pZ36N49[7]={6.E-7, 8., 4.8E-4, 1.4E-9, .27, 2.1E-6, .0053};
00813   static const std::pair<G4int, const G4double*> Z36N49(49,pZ36N49);
00814   static const G4double pZ36N50[7]={4.E-7, 8.1, 2.7E-4, 1.6E-9, .35, 2.1E-6, .0045};
00815   static const std::pair<G4int, const G4double*> Z36N50(50,pZ36N50);
00816   static const std::pair<G4int, const G4double*> Z36[N36]={Z36N42, Z36N44, Z36N46,
00817                                                            Z36N47, Z36N48, Z36N49, Z36N50};
00818   //==> Rb(Z=37)
00819   static const G4int N37=3;
00820   static const G4double pZ37N48[7]={1.6E-7, 7.2, 1.4E-4, 1.2E-9, .35, 2.1E-6, .0052};
00821   static const std::pair<G4int, const G4double*> Z37N48(48,pZ37N48);
00822   static const G4double pZ37N49[7]={8.E-8, 7.1, 4.7E-5, 1.6E-9, .27, 2.1E-6, .0034};
00823   static const std::pair<G4int, const G4double*> Z37N49(49,pZ37N49);
00824   static const G4double pZ37N50[7]={1.E-7, 8., 5.5E-5, 1.9E-9, .27, 1.5E-6, .0036};
00825   static const std::pair<G4int, const G4double*> Z37N50(50,pZ37N50);
00826   static const std::pair<G4int, const G4double*> Z37[N37]={Z37N48, Z37N49, Z37N50};
00827   //==> Sr(Z=38)
00828   static const G4int N38=6;
00829   static const G4double pZ38N46[7]={8.E-8, 7.3, 6.E-5, 1.3E-9, .27, 2.E-6, .0045};
00830   static const std::pair<G4int, const G4double*> Z38N46(46,pZ38N46);
00831   static const G4double pZ38N48[7]={8.E-8, 9.7, 2.3E-5, 3.5E-9, .4, 2.7E-6, .0023};
00832   static const std::pair<G4int, const G4double*> Z38N48(48,pZ38N48);
00833   static const G4double pZ38N49[7]={2.6E-7, 9.5, 1.9E-4, 1.5E-9, .4, 2.7E-6, .0057};
00834   static const std::pair<G4int, const G4double*> Z38N49(49,pZ38N49);
00835   static const G4double pZ38N50[7]={2.6E-7, 9.5, 2.E-4, 1.4E-9, .37, 3.2E-6, .0059};
00836   static const std::pair<G4int, const G4double*> Z38N50(50,pZ38N50);
00837   static const G4double pZ38N51[7]={1.3E-7, 9.9, 7.5E-5, 1.7E-9, .37, 3.2E-6, .0046};
00838   static const std::pair<G4int, const G4double*> Z38N51(51,pZ38N51);
00839   static const G4double pZ38N52[7]={2.6E-7, 9.6, 1.6E-4, 1.8E-9, .37, 2.7E06, .0047};
00840   static const std::pair<G4int, const G4double*> Z38N52(52,pZ38N52);
00841   static const std::pair<G4int, const G4double*> Z38[N38]={Z38N46, Z38N48, Z38N49, Z38N50,
00842                                                            Z38N51, Z38N52};
00843   //==> Y (Z=39)
00844   static const G4int N39=3;
00845   static const G4double pZ39N50[7]={2.6E-7, 9.9, 2.E-4, 1.1E-9, .37, 3.2E-6, .0062};
00846   static const std::pair<G4int, const G4double*> Z39N50(50,pZ39N50);
00847   static const G4double pZ39N51[7]={2.7E-5, 20., .013, 2.2E-9, .37, 1.9E-6, .0078};
00848   static const std::pair<G4int, const G4double*> Z39N51(51,pZ39N51);
00849   static const G4double pZ39N52[7]={2.E-7, 9.6, 1.2E-4, 1.7E-9, .37, 3.E-6, .0046};
00850   static const std::pair<G4int, const G4double*> Z39N52(52,pZ39N52);
00851   static const std::pair<G4int, const G4double*> Z39[N39]={Z39N50, Z39N51, Z39N52};
00852   //==> Zr(Z=40)
00853   static const G4int N40=7;
00854   static const G4double pZ40N50[7]={1.E-7, 9., 6.2E-5, 1.7E-9, .3, 3.E-6, .0044};
00855   static const std::pair<G4int, const G4double*> Z40N50(50,pZ40N50);
00856   static const G4double pZ40N51[7]={5.E-7, 9.8, 5.E-4, 1.E-9, .25, 2.1E-6, .0079};
00857   static const std::pair<G4int, const G4double*> Z40N51(51,pZ40N51);
00858   static const G4double pZ40N52[7]={3.E-7, 9.6, 2.2E-4, 1.2E-9, .25, 2.2E-6, .0056};
00859   static const std::pair<G4int, const G4double*> Z40N52(52,pZ40N52);
00860   static const G4double pZ40N53[7]={2.E-7, 9.6, 1.2E-4, 1.6E-9, .38, 2.9E-6, .0046};
00861   static const std::pair<G4int, const G4double*> Z40N53(53,pZ40N53);
00862   static const G4double pZ40N54[7]={2.E-7, 9.6, 1.8E-4, 1.1E-9, .25, 2.1E-6, .0067};
00863   static const std::pair<G4int, const G4double*> Z40N54(54,pZ40N54);
00864   static const G4double pZ40N55[7]={1.8E-7, 9.4, 1.1E-4, 1.6E-9, .33, 2.3E-6, .0045};
00865   static const std::pair<G4int, const G4double*> Z40N55(55,pZ40N55);
00866   static const G4double pZ40N56[7]={1.8E-7, 9.4, 1.1E-4, 1.6E-9, .2, 1.5E-6, .0045};
00867   static const std::pair<G4int, const G4double*> Z40N56(56,pZ40N56);
00868   static const std::pair<G4int, const G4double*> Z40[N40]={Z40N50, Z40N51, Z40N52, Z40N53,
00869                                                            Z40N54, Z40N55, Z40N56};
00870   //==> Nb(Z=41)
00871   static const G4int N41=3;
00872   static const G4double pZ41N52[7]={2.6E-7, 8.3, 2.E-4, 1.2E-9, .4, 4.E-6, .0051};
00873   static const std::pair<G4int, const G4double*> Z41N52(52,pZ41N52);
00874   static const G4double pZ41N53[7]={2.E-7, 8.3, 1.6E-4, 1.4E-9, .35, 2.5E-6, .0051};
00875   static const std::pair<G4int, const G4double*> Z41N53(53,pZ41N53);
00876   static const G4double pZ41N54[7]={1.5E-7, 8.6, 1.E-4, 1.5E-9, .35, 2.5E-6, .0045};
00877   static const std::pair<G4int, const G4double*> Z41N54(54,pZ41N54);
00878   static const std::pair<G4int, const G4double*> Z41[N41]={Z41N52, Z41N52, Z41N52};
00879   //==> Mo(Z=42)
00880   static const G4int N42=8;
00881   static const G4double pZ42N50[7]={2.E-7, 10., 1.1E-4, 1.8E-9, .3, 2.7E-6, .0044};
00882   static const std::pair<G4int, const G4double*> Z42N50(50,pZ42N50);
00883   static const G4double pZ42N52[7]={2.1E-7, 10., 1.2E-4, 1.7E-9, .3, 2.8E-6, .0046};
00884   static const std::pair<G4int, const G4double*> Z42N52(52,pZ42N52);
00885   static const G4double pZ42N53[7]={3.E-7, 10., 1.9E-4, 1.5E-9, .29, 3.E-6, .005};
00886   static const std::pair<G4int, const G4double*> Z42N53(53,pZ42N53);
00887   static const G4double pZ42N54[7]={1.5E-7, 10., 7.1E-5, 2.1E-9, .29, 2.9E-6, .0037};
00888   static const std::pair<G4int, const G4double*> Z42N54(54,pZ42N54);
00889   static const G4double pZ42N55[7]={1.9E-7, 9., 1.4E-4, 1.3E-9, .29, 2.8E-6, .0052};
00890   static const std::pair<G4int, const G4double*> Z42N55(55,pZ42N55);
00891   static const G4double pZ42N56[7]={1.9E-7, 9.9, 1.1E-4, 1.8E-9, .29, 2.4E-6, .0044};
00892   static const std::pair<G4int, const G4double*> Z42N56(56,pZ42N56);
00893   static const G4double pZ42N57[7]={1.4E-7, 8., 1.E-4, 1.4E-9, .34, 2.5E-6, .0044};
00894   static const std::pair<G4int, const G4double*> Z42N57(57,pZ42N57);
00895   static const G4double pZ42N58[7]={1.8E-7, 9.5, 1.E-4, 1.7E-9, .27, 2.2E-6, .0041};
00896   static const std::pair<G4int, const G4double*> Z42N58(58,pZ42N58);
00897   static const std::pair<G4int, const G4double*> Z42[N42]={Z42N50, Z42N52, Z42N53, Z42N54,
00898                                                            Z42N55, Z42N56, Z42N57, Z42N58};
00899   //==> Tc(Z=43)
00900   static const G4int N43=1;
00901   static const G4double pZ43N56[7]={1.E-7, 8., 7.2E-5, 1.4E-9, .24, 2.5E-6, .0044};
00902   static const std::pair<G4int, const G4double*> Z43N56(56,pZ43N56);
00903   static const std::pair<G4int, const G4double*> Z43[N43]={Z43N56};
00904   //==> Ru(Z=44)
00905   static const G4int N44=9;
00906   static const G4double pZ44N52[7]={1.9E-7, 10., 1.E-4, 2.1E-9, .4, 4.E-6, .004};
00907   static const std::pair<G4int, const G4double*> Z44N52(52,pZ44N52);
00908   static const G4double pZ44N54[7]={1.5E-7, 10., 7.7E-5, 2.1E-9, .29, 2.9E-6, .004};
00909   static const std::pair<G4int, const G4double*> Z44N54(54,pZ44N54);
00910   static const G4double pZ44N55[7]={1.8E-7, 10., 6.6E-5, 2.6E-9, .47, 4.6E-6, .0028};
00911   static const std::pair<G4int, const G4double*> Z44N55(55,pZ44N55);
00912   static const G4double pZ44N56[7]={1.8E-6, 10., .0017, 1.1E-9, .47, 6.E-6, .0073};
00913   static const std::pair<G4int, const G4double*> Z44N56(56,pZ44N56);
00914   static const G4double pZ44N57[7]={1.8E-7, 7.8, 1.3E-4, 1.4E-9, .42, 5.E-6, .0043};
00915   static const std::pair<G4int, const G4double*> Z44N57(57,pZ44N57);
00916   static const G4double pZ44N58[7]={1.7E-6, 9.8, .0015, 1.2E-9, .32, 4.E-6, .0065};
00917   static const std::pair<G4int, const G4double*> Z44N58(58,pZ44N58);
00918   static const G4double pZ44N59[7]={3.3E-7, 8.7, 1.9E-4, 1.6E-9, .32, 3.8E-6, .0038};
00919   static const std::pair<G4int, const G4double*> Z44N59(59,pZ44N59);
00920   static const G4double pZ44N60[7]={3.E-7, 8.7, 1.8E-4, 1.6E-9, .3, 3.2E-6, .004};
00921   static const std::pair<G4int, const G4double*> Z44N60(60,pZ44N60);
00922   static const G4double pZ44N61[7]={3.E-7, 8.8, 1.4E-4, 1.9E-9, .3, 3.2E-6, .003};
00923   static const std::pair<G4int, const G4double*> Z44N61(61,pZ44N61);
00924   static const std::pair<G4int, const G4double*> Z44[N44]={Z44N52, Z44N54, Z44N55, Z44N56,
00925                                                            Z44N57, Z44N58, Z44N59, Z44N60,
00926                                                            Z44N61};
00927   //==> Rh(Z=45)
00928   static const G4int N45=2;
00929   static const G4double pZ45N58[7]={8.E-8, 8.7, 4.E-5, 1.8E-9, .29, 2.9E-6, .0033};
00930   static const std::pair<G4int, const G4double*> Z45N58(58,pZ45N58);
00931   static const G4double pZ45N60[7]={8.E-8, 8.7, .09, 1.3E-12, .29, 2.9E-6, 7.};
00932   static const std::pair<G4int, const G4double*> Z45N60(60,pZ45N60);
00933   static const std::pair<G4int, const G4double*> Z45[N45]={Z45N58, Z45N60};
00934   //==> Pd(Z=46)
00935   static const G4int N46=7;
00936   static const G4double pZ46N56[7]={2.E-7, 9.9, 1.2E-4, 1.5E-9, .35, 3.3E-6, .0045};
00937   static const std::pair<G4int, const G4double*> Z46N56(56,pZ46N56);
00938   static const G4double pZ46N58[7]={2.E-7, 9.9, 9.5E-5, 1.8E-9, .4, 4.E-6, .0036};
00939   static const std::pair<G4int, const G4double*> Z46N58(58,pZ46N58);
00940   static const G4double pZ46N59[7]={5.6E-7, 9., 4.6E-4, 1.2E-9, .5, 4.8E-6, .0056};
00941   static const std::pair<G4int, const G4double*> Z46N59(59,pZ46N59);
00942   static const G4double pZ46N60[7]={2.4E-7, 9.2, 1.2E-4, 1.8E-9, .47, 4.6E-6, .0035};
00943   static const std::pair<G4int, const G4double*> Z46N60(60,pZ46N60);
00944   static const G4double pZ46N61[7]={1.2E-7, 9.2, 4.4E-5, 2.8E-9, .5, 4.3E-6, .0025};
00945   static const std::pair<G4int, const G4double*> Z46N61(61,pZ46N61);
00946   static const G4double pZ46N62[7]={1.2E-7, 9.2, 3.2E-5, 3.4E-9, .48, 4.5E-6, .0018};
00947   static const std::pair<G4int, const G4double*> Z46N62(62,pZ46N62);
00948   static const G4double pZ46N64[7]={4.E-7, 9.1, 2.5E-4, 1.5E-9, .48, 4.7E-6, .0042};
00949   static const std::pair<G4int, const G4double*> Z46N64(64,pZ46N64);
00950   static const std::pair<G4int, const G4double*> Z46[N46]={Z46N56, Z46N58, Z46N59,
00951                                                            Z46N60, Z46N61, Z46N62, Z46N64};
00952   //==> Ag(Z=47)
00953   static const G4int N47=4;
00954   static const G4double pZ47N60[7]={1.4E-6, 9.7, .0011, 1.4E-9, .55, 5.E-6, .0056};
00955   static const std::pair<G4int, const G4double*> Z47N60(60,pZ47N60);
00956   static const G4double pZ47N62[7]={3.E-8, 8.7, 8.5E-6, 3.5E-9, .6, 5.6E-6, .0018};
00957   static const std::pair<G4int, const G4double*> Z47N62(62,pZ47N62);
00958   static const G4double pZ47N63[7]={3.E-6, 9.5, .002, 1.5E-9, .58, 5.E-6, .0047};
00959   static const std::pair<G4int, const G4double*> Z47N63(63,pZ47N63);
00960   static const G4double pZ47N64[7]={1.5E-7, 9., 9.E-5, 1.7E-9, .58, 5.6E-6, .0039};
00961   static const std::pair<G4int, const G4double*> Z47N64(64,pZ47N64);
00962   static const std::pair<G4int, const G4double*> Z47[N47]={Z47N60, Z47N62, Z47N63, Z47N64};
00963   //==> Cd(Z=48)
00964   static const G4int N48=9;
00965   static const G4double pZ48N58[7]={2.9E-7, 10., 1.3E-4, 1.9E-9, .4, 3.8E-6, .0034};
00966   static const std::pair<G4int, const G4double*> Z48N58(58,pZ48N58);
00967   static const G4double pZ48N60[7]={2.3E-7, 10., 8.2E-5, 2.5E-9, .5, 4.7E-6, .0026};
00968   static const std::pair<G4int, const G4double*> Z48N60(60,pZ48N60);
00969   static const G4double pZ48N62[7]={2.3E-7, 10., 9.9E-5, 2.5E-9, .5, 4.7E-6, .0031};
00970   static const std::pair<G4int, const G4double*> Z48N62(62,pZ48N62);
00971   static const G4double pZ48N63[7]={8.4E-7, 11., 4.3E-4, 1.8E-9, .5, 4.5E-6, .0042};
00972   static const std::pair<G4int, const G4double*> Z48N63(63,pZ48N63);
00973   static const G4double pZ48N64[7]={4.E-7, 11., 1.8E-4, 1.8E-9, .5, 4.6E-6, .0036};
00974   static const std::pair<G4int, const G4double*> Z48N64(64,pZ48N64);
00975   static const G4double pZ48N65[7]={1.6E-6, 12., .001, 0., .5, 4.6E-6, .013};
00976   static const std::pair<G4int, const G4double*> Z48N65(65,pZ48N65);
00977   static const G4double pZ48N66[7]={3.E-7, 11., 1.2E-4, 1.9E-9, .5, 4.6E-6, .0031};
00978   static const std::pair<G4int, const G4double*> Z48N66(66,pZ48N66);
00979   static const G4double pZ48N67[7]={3.8E-7, 11., 1.7E-4, 2.E-9, .6, 6.6E-6, .0035};
00980   static const std::pair<G4int, const G4double*> Z48N67(67,pZ48N67);
00981   static const G4double pZ48N68[7]={6.E-7, 11., 3.3E-4, 1.9E-9, .5, 4.6E-6, .0043};
00982   static const std::pair<G4int, const G4double*> Z48N68(68,pZ48N68);
00983   static const std::pair<G4int, const G4double*> Z48[N48]={Z48N58, Z48N60, Z48N62, Z48N63,
00984                                                            Z48N64, Z48N65, Z48N66, Z48N67,
00985                                                            Z48N68};
00986   //==> In(Z=49)
00987   static const G4int N49=2;
00988   static const G4double pZ49N64[7]={2.7E-7, 12., 8.1E-5, 2.7E-9, .5, 5.E-6, .0026};
00989   static const std::pair<G4int, const G4double*> Z49N64(64,pZ49N64);
00990   static const G4double pZ49N66[7]={2.7E-7, 12., 5.5E-5, 4.E-9, .5, 5.E-6, .0018};
00991   static const std::pair<G4int, const G4double*> Z49N66(66,pZ49N66);
00992   static const std::pair<G4int, const G4double*> Z49[N49]={Z49N64, Z49N66};
00993   //==> Sn(Z=50)
00994   static const G4int N50=14;
00995   static const G4double pZ50N62[7]={4.E-7, 11., 1.6E-4, 2.2E-9, .5, 4.5E-6, .0032};
00996   static const std::pair<G4int, const G4double*> Z50N62(62,pZ50N62);
00997   static const G4double pZ50N63[7]={4.1E-7, 11., 1.6E-4, 2.4E-9, .54, 6.E-6, .0031};
00998   static const std::pair<G4int, const G4double*> Z50N63(63,pZ50N63);
00999   static const G4double pZ50N64[7]={5.E-7, 12., 1.9E-4, 2.2E-9, .5, 4.4E-6, .0032};
01000   static const std::pair<G4int, const G4double*> Z50N64(64,pZ50N64);
01001   static const G4double pZ50N65[7]={1.E-5, 12., .0077, 1.4E-9, .5, 5.E-6, .0066};
01002   static const std::pair<G4int, const G4double*> Z50N65(65,pZ50N65);
01003   static const G4double pZ50N66[7]={5.E-7, 12., 1.8E-4, 2.4E-9, .5, 5.E-6, .0031};
01004   static const std::pair<G4int, const G4double*> Z50N66(66,pZ50N66);
01005   static const G4double pZ50N67[7]={1.E-6, 12., 4.4E-4, 1.8E-9, .5, 5.E-6, .0037};
01006   static const std::pair<G4int, const G4double*> Z50N67(67,pZ50N67);
01007   static const G4double pZ50N68[7]={5.E-7, 12., 2.E-4, 2.4E-9, .5, 5.E-6, .0033};
01008   static const std::pair<G4int, const G4double*> Z50N68(68,pZ50N68);
01009   static const G4double pZ50N69[7]={6.E-7, 12., 2.5E-4, 2.E-9, .5, 5.E-6, .0035};
01010   static const std::pair<G4int, const G4double*> Z50N69(69,pZ50N69);
01011   static const G4double pZ50N70[7]={1.E-6, 12., 4.7E-4, 2.E-9, .5, 5.E-6, .0039};
01012   static const std::pair<G4int, const G4double*> Z50N70(70,pZ50N70);
01013   static const G4double pZ50N72[7]={1.E-6, 12., 3.7E-4, 2.2E-9, .5, 5.E-6, .0031};
01014   static const std::pair<G4int, const G4double*> Z50N72(72,pZ50N72);
01015   static const G4double pZ50N73[7]={5.E-7, 12., 1.7E-4, 2.8E-9, .5, 5.E-6, .0028};
01016   static const std::pair<G4int, const G4double*> Z50N73(73,pZ50N73);
01017   static const G4double pZ50N74[7]={5.E-7, 12., 2.E-4, 2.E-9, .5, 5.E-6, .0033};
01018   static const std::pair<G4int, const G4double*> Z50N74(74,pZ50N74);
01019   static const G4double pZ50N75[7]={5.E-7, 12., 1.9E-4, 2.8E-9, .5, 5.E-6, .003};
01020   static const std::pair<G4int, const G4double*> Z50N75(75,pZ50N75);
01021   static const G4double pZ50N76[7]={5.E-7, 12., 1.7E-4, 2.8E-9, .5, 5.E-6, .0028};
01022   static const std::pair<G4int, const G4double*> Z50N76(76,pZ50N76);
01023   static const std::pair<G4int, const G4double*> Z50[N50]={Z50N62, Z50N63, Z50N64, Z50N65,
01024                                                            Z50N66, Z50N67, Z50N68, Z50N69,
01025                                                            Z50N70, Z50N72, Z50N73, Z50N74,
01026                                                            Z50N75, Z50N76};
01027   //==> Sb(Z=51)
01028   static const G4int N51=5;
01029   static const G4double pZ51N70[7]={6.E-7, 12., 2.E-4, 2.8E-9, .5, 5.E-6, .0028};
01030   static const std::pair<G4int, const G4double*> Z51N70(70,pZ51N70);
01031   static const G4double pZ51N72[7]={6.E-7, 12., 1.9E-4, 3.E-9, .5, 5.E-6, .0025};
01032   static const std::pair<G4int, const G4double*> Z51N72(72,pZ51N72);
01033   static const G4double pZ51N73[7]={1.1E-6, 12., 3.5E-4, 2.9E-9, .5, 5.E-6, .0026};
01034   static const std::pair<G4int, const G4double*> Z51N73(73,pZ51N73);
01035   static const G4double pZ51N74[7]={5.5E-7, 12., 1.9E-4, 2.9E-9, .5, 5.E-6, .0027};
01036   static const std::pair<G4int, const G4double*> Z51N74(74,pZ51N74);
01037   static const G4double pZ51N75[7]={6.E-7, 12., 2.E-4, 2.9E-9, .5, 5.E-6, .0027};
01038   static const std::pair<G4int, const G4double*> Z51N75(75,pZ51N75);
01039   static const std::pair<G4int, const G4double*> Z51[N51]={Z51N70, Z51N72, Z51N73, Z51N74,
01040                                                            Z51N75};
01041   //==> Te(Z=52)
01042   static const G4int N52=11;
01043   static const G4double pZ52N68[7]={2.7E-7, 12., 8.4E-5, 3.2E-9, 1., 8.E-6, .0026};
01044   static const std::pair<G4int, const G4double*> Z52N68(68,pZ52N68);
01045   static const G4double pZ52N70[7]={2.7E-7, 12., 3.8E-5, 6.E-9, 1., 8.E-6, .0012};
01046   static const std::pair<G4int, const G4double*> Z52N70(70,pZ52N70);
01047   static const G4double pZ52N71[7]={2.7E-8, 12., 1.8E-6, 2.E-8, 1., 8.E-6, 4.8E-4};
01048   static const std::pair<G4int, const G4double*> Z52N71(71,pZ52N71);
01049   static const G4double pZ52N72[7]={2.6E-6, 14., .0014, 2.E-9, 1., 9.E-6, .005};
01050   static const std::pair<G4int, const G4double*> Z52N72(72,pZ52N72);
01051   static const G4double pZ52N73[7]={1.E-6, 14., 2.4E-4, 3.9E-9, 1., 9.E-6, .0022};
01052   static const std::pair<G4int, const G4double*> Z52N73(73,pZ52N73);
01053   static const G4double pZ52N74[7]={8.E-7, 14., 2.3E-4, 3.6E-9, 1.4, 1.3E-5, .0028};
01054   static const std::pair<G4int, const G4double*> Z52N74(74,pZ52N74);
01055   static const G4double pZ52N75[7]={8.E-7, 14., 2.1E-4, 3.6E-9, 1.4, 1.3E-5, .0025};
01056   static const std::pair<G4int, const G4double*> Z52N75(75,pZ52N75);
01057   static const G4double pZ52N76[7]={8.E-7, 14., 2.5E-4, 3.E-9, 1.4, 1.3E-5, .003};
01058   static const std::pair<G4int, const G4double*> Z52N76(76,pZ52N76);
01059   static const G4double pZ52N77[7]={5.E-7, 15., 1.2E-4, 4.3E-9, 1.4, 1.4E-5, .0023};
01060   static const std::pair<G4int, const G4double*> Z52N77(77,pZ52N77);
01061   static const G4double pZ52N78[7]={8.E-7, 14., 2.7E-4, 2.7E-9, 1.4, 1.3E-5, .0031};
01062   static const std::pair<G4int, const G4double*> Z52N78(78,pZ52N78);
01063   static const G4double pZ52N80[7]={4.7E-7, 14., 1.8E-4, 2.2E-9, .83, 1.E-5, .0036};
01064   static const std::pair<G4int, const G4double*> Z52N80(80,pZ52N80);
01065   static const std::pair<G4int, const G4double*> Z52[N52]={Z52N68, Z52N70, Z52N71, Z52N72,
01066                                                            Z52N73, Z52N74, Z52N75, Z52N76,
01067                                                            Z52N77, Z52N78, Z52N80};
01068   //==> I (Z=53)
01069   static const G4int N53=5;
01070   static const G4double pZ53N74[7]={9.4E-7, 14., 2.5E-4, 3.E-9, .7, 7.3E-6, .0025};
01071   static const std::pair<G4int, const G4double*> Z53N74(74,pZ53N74);
01072   static const G4double pZ53N76[7]={2.1E-5, 14., .015, 1.1E-9, 1.1, 1.E-5, .007};
01073   static const std::pair<G4int, const G4double*> Z53N76(76,pZ53N76);
01074   static const G4double pZ53N77[7]={1.1E-6, 14., 2.4E-4, 3.3E-9, .9, 1.E-5, .0021};
01075   static const std::pair<G4int, const G4double*> Z53N77(77,pZ53N77);
01076   static const G4double pZ53N78[7]={5.5E-7, 14., 1.5E-4, 3.7E-9, 1.2, 1.2E-5, .0024};
01077   static const std::pair<G4int, const G4double*> Z53N78(78,pZ53N78);
01078   static const G4double pZ53N82[7]={3.2E-6, 14., .0017, 1.8E-9, .8, 8.E-6, .0024};
01079   static const std::pair<G4int, const G4double*> Z53N82(82,pZ53N82);
01080   static const std::pair<G4int, const G4double*> Z53[N53]={Z53N74, Z53N76, Z53N77, Z53N78,
01081                                                            Z53N82};
01082   //==> Xe(Z=54)
01083   static const G4int N54=12;
01084   static const G4double pZ54N69[7]={3.E-6, 14., 8.E-4, 3.7E-9, .9, 1.1E-5, .15};
01085   static const std::pair<G4int, const G4double*> Z54N69(69,pZ54N69);
01086   static const G4double pZ54N70[7]={1.5E-7, 14., 1.4E-6, 9.E-8, .7, 8.E-6, 9.5E-5};
01087   static const std::pair<G4int, const G4double*> Z54N70(70,pZ54N70);
01088   static const G4double pZ54N72[7]={1.5E-6, 14., 5.6E-4, 3.E-9, 1.2, 1.1E-5, .0036};
01089   static const std::pair<G4int, const G4double*> Z54N72(72,pZ54N72);
01090   static const G4double pZ54N74[7]={1.8E-6, 14., 8.8E-4, 2.E-9, 1.3, 1.2E-5, .0047};
01091   static const std::pair<G4int, const G4double*> Z54N74(74,pZ54N74);
01092   static const G4double pZ54N75[7]={1.E-6, 14., 2.6E-4, 3.7E-9, 1.5, 1.4E-5, .0024};
01093   static const std::pair<G4int, const G4double*> Z54N75(75,pZ54N75);
01094   static const G4double pZ54N76[7]={1.8E-6, 14., 8.E-4, 2.E-9, 1.2, 1.4E-5, .0042};
01095   static const std::pair<G4int, const G4double*> Z54N76(76,pZ54N76);
01096   static const G4double pZ54N77[7]={2.3E-7, 14., 1.9E-5, 9.E-9, 1.2, 1.4E-5, 7.7E-4};
01097   static const std::pair<G4int, const G4double*> Z54N77(77,pZ54N77);
01098   static const G4double pZ54N78[7]={6.E-7, 14., 1.6E-4, 3.E-9, 1.2, 1.4E-5, .0025};
01099   static const std::pair<G4int, const G4double*> Z54N78(78,pZ54N78);
01100   static const G4double pZ54N79[7]={6.E-7, 14., 1.6E-4, 3.3E-9, 1.6, 1.5E-5, .0024};
01101   static const std::pair<G4int, const G4double*> Z54N79(79,pZ54N79);
01102   static const G4double pZ54N80[7]={6.6E-7, 14., 2.1E-4, 2.5E-9, 1.2, 1.4E-5, .003};
01103   static const std::pair<G4int, const G4double*> Z54N80(80,pZ54N80);
01104   static const G4double pZ54N81[7]={.03, 40., 2.1, 2.5E-9, 1.E-16, 6.E-36, 140.};
01105   static const std::pair<G4int, const G4double*> Z54N81(81,pZ54N81);
01106   static const G4double pZ54N82[7]={3.1E-6, 14., .0019, 1.6E-9, 1., 1.3E-5, .0054};
01107   static const std::pair<G4int, const G4double*> Z54N82(82,pZ54N82);
01108   static const std::pair<G4int, const G4double*> Z54[N54]={Z54N69, Z54N70, Z54N72, Z54N74,
01109                                                            Z54N75, Z54N76, Z54N77, Z54N78,
01110                                                            Z54N79, Z54N80, Z54N81, Z54N82};
01111   //==> Cs(Z=55)
01112   static const G4int N55=5;
01113   static const G4double pZ55N78[7]={1.4E-6, 14., 4.E-4, 3.E-9, 1.2, 1.4E-5, .0026};
01114   static const std::pair<G4int, const G4double*> Z55N78(78,pZ55N78);
01115   static const G4double pZ55N79[7]={.028, 14., 44., .5E-9, 1.2, 1.3E-5, .015};
01116   static const std::pair<G4int, const G4double*> Z55N79(79,pZ55N79);
01117   static const G4double pZ55N80[7]={2.E-6, 14., 9.5E-4, 2.E-9, 1.2, 1.4E-5, .0042};
01118   static const std::pair<G4int, const G4double*> Z55N80(80,pZ55N80);
01119   static const G4double pZ55N81[7]={2.5E-7, 14., 6.5E-5, 3.8E-9, 1.2, 1.4E-5, .0023};
01120   static const std::pair<G4int, const G4double*> Z55N81(81,pZ55N81);
01121   static const G4double pZ55N82[7]={2.5E-7, 14., 6.5E-5, 3.8E-9, 1.2, 1.4E-5, .0023};
01122   static const std::pair<G4int, const G4double*> Z55N82(82,pZ55N82);
01123   static const std::pair<G4int, const G4double*> Z55[N55]={Z55N78, Z55N79, Z55N80, Z55N81,
01124                                                            Z55N82};
01125   //==> Ba(Z=56)
01126   static const G4int N56=9;
01127   static const G4double pZ56N74[7]={4.E-7, 14., 2.8E-5, 1.2E-8, 1.2, 1.5E-5, 6.6E-4};
01128   static const std::pair<G4int, const G4double*> Z56N74(74,pZ56N74);
01129   static const G4double pZ56N76[7]={4.E-6, 14., .0022, 1.4E-9, 1.3, 1.6E-5, .0053};
01130   static const std::pair<G4int, const G4double*> Z56N76(76,pZ56N76);
01131   static const G4double pZ56N77[7]={2.E-7, 14., 3.7E-5, 5.E-9, 1.1, 1.5E-5, .0016};
01132   static const std::pair<G4int, const G4double*> Z56N77(77,pZ56N77);
01133   static const G4double pZ56N78[7]={1.6E-6, 14., 6.E-4, 2.E-9, 1.3, 1.6E-5, .0033};
01134   static const std::pair<G4int, const G4double*> Z56N78(78,pZ56N78);
01135   static const G4double pZ56N79[7]={5.E-7, 17., 8.E-5, 4.5E-9, 1.3, 1.6E-5, .0018};
01136   static const std::pair<G4int, const G4double*> Z56N79(79,pZ56N79);
01137   static const G4double pZ56N80[7]={2.E-6, 20., 3.E-4, 6.E-9, 1.3, 1.8E-5, .0019};
01138   static const std::pair<G4int, const G4double*> Z56N80(80,pZ56N80);
01139   static const G4double pZ56N81[7]={5.8E-6, 20., .0018, 3.E-9, 1.3, 1.7E-5, .0041};
01140   static const std::pair<G4int, const G4double*> Z56N81(81,pZ56N81);
01141   static const G4double pZ56N82[7]={2.7E-6, 20., 5.5E-4, 4.E-9, 1.4, 2.E-5, .0027};
01142   static const std::pair<G4int, const G4double*> Z56N82(82,pZ56N82);
01143   static const G4double pZ56N84[7]={1.1E-6, 21., 1.E-4, 9.E-9, 2., 2.7E-5, .0012};
01144   static const std::pair<G4int, const G4double*> Z56N84(84,pZ56N84);
01145   static const std::pair<G4int, const G4double*> Z56[N56]={Z56N74, Z56N76, Z56N77, Z56N78,
01146                                                            Z56N79, Z56N80, Z56N81, Z56N82,
01147                                                            Z56N84};
01148   //==> La(Z=57)
01149   static const G4int N57=3;
01150   static const G4double pZ57N81[7]={2.7E-6, 20., .0017, 1.1E-9, 1.4, 2.E-5, .0083};
01151   static const std::pair<G4int, const G4double*> Z57N81(81,pZ57N81);
01152   static const G4double pZ57N82[7]={5.4E-6, 20., .0027, 1.5E-9, 1., 1.5E-5, .0065};
01153   static const std::pair<G4int, const G4double*> Z57N82(82,pZ57N82);
01154   static const G4double pZ57N83[7]={2.7E-6, 20., 2.6E-4, 6.E-9, 1.4, 2.E-5, .0012};
01155   static const std::pair<G4int, const G4double*> Z57N83(83,pZ57N83);
01156   static const std::pair<G4int, const G4double*> Z57[N57]={Z57N81, Z57N82, Z57N83};
01157   //==> Ce(Z=58)
01158   static const G4int N58=8;
01159   static const G4double pZ58N78[7]={1.8E-6, 20., 3.7E-4, 4.E-9, 1.4, 2.E-5, .0028};
01160   static const std::pair<G4int, const G4double*> Z58N78(78,pZ58N78);
01161   static const G4double pZ58N80[7]={1.8E-6, 18., 2.6E-4, 6.E-9, 1.3, 2.1E-5, .0017};
01162   static const std::pair<G4int, const G4double*> Z58N80(80,pZ58N80);
01163   static const G4double pZ58N81[7]={.0018, 18., 2.9, .6E-9, 1.3, 2.E-5, .02};
01164   static const std::pair<G4int, const G4double*> Z58N81(81,pZ58N81);
01165   static const G4double pZ58N82[7]={1.8E-6, 18., 3.7E-4, 5.E-9, 1.3, 2.E-5, .0024};
01166   static const std::pair<G4int, const G4double*> Z58N82(82,pZ58N82);
01167   static const G4double pZ58N83[7]={7.2E-6, 20., .0025, 2.3E-9, 1.1, 1.7E-5, .0045};
01168   static const std::pair<G4int, const G4double*> Z58N83(83,pZ58N83);
01169   static const G4double pZ58N84[7]={1.2E-6, 18., 2.E-4, 6.E-9, 1.5, 1.9E-5, .0018};
01170   static const std::pair<G4int, const G4double*> Z58N84(84,pZ58N84);
01171   static const G4double pZ58N85[7]={1.2E-6, 16., 6.E-4, 1.7E-9, 1.4, 2.E-5, .0053};
01172   static const std::pair<G4int, const G4double*> Z58N85(85,pZ58N85);
01173   static const G4double pZ58N86[7]={6.E-7, 18., 1.E-4, 6.E-9, 1.5, 1.9E-5, .0018};
01174   static const std::pair<G4int, const G4double*> Z58N86(86,pZ58N86);
01175   static const std::pair<G4int, const G4double*> Z58[N58]={Z58N78, Z58N80, Z58N81, Z58N82,
01176                                                            Z58N83, Z58N84, Z58N85, Z58N86};
01177   //==> Pr(Z=59)
01178   static const G4int N59=3;
01179   static const G4double pZ59N82[7]={9.5E-7, 16., 1.6E-4, 4.E-9, 1.4, 2.E-5, .0017};
01180   static const std::pair<G4int, const G4double*> Z59N82(82,pZ59N82);
01181   static const G4double pZ59N83[7]={9.5E-7, 16., 1.9E-4, 4.E-9, 1.4, 1.9E-5, .0021};
01182   static const std::pair<G4int, const G4double*> Z59N83(83,pZ59N83);
01183   static const G4double pZ59N84[7]={9.5E-6, 16., .019, .4E-9, 2., 2.4E-5, .021};
01184   static const std::pair<G4int, const G4double*> Z59N84(84,pZ59N84);
01185   static const std::pair<G4int, const G4double*> Z59[N59]={Z59N82, Z59N83, Z59N84};
01186   //==> Nd(Z=60)
01187   static const G4int N60=8;
01188   static const G4double pZ60N82[7]={9.6E-6, 21., .0036, 2.3E-9, 1.4, 2.E-5, .0052};
01189   static const std::pair<G4int, const G4double*> Z60N82(82,pZ60N82);
01190   static const G4double pZ60N83[7]={9.6E-4, 20., 4., .25E-9, 1.4, 2.E-5, .052};
01191   static const std::pair<G4int, const G4double*> Z60N83(83,pZ60N83);
01192   static const G4double pZ60N84[7]={4.8E-7, 21., 3.3E-5, 1.E-08, 1.3, 2.2E-5, 9.E-4};
01193   static const std::pair<G4int, const G4double*> Z60N84(84,pZ60N84);
01194   static const G4double pZ60N85[7]={.0048, 20., 4.5, .9E-9, 1.3, 2.E-5, .012};
01195   static const std::pair<G4int, const G4double*> Z60N85(85,pZ60N85);
01196   static const G4double pZ60N86[7]={1.2E-6, 16., 7.7E-4, 1.5E-9, 1.3, 1.8E-5, .0066};
01197   static const std::pair<G4int, const G4double*> Z60N86(86,pZ60N86);
01198   static const G4double pZ60N87[7]={.0012, 15., 8.4, .1E-9, 1.3, 1.5E-5, .071};
01199   static const std::pair<G4int, const G4double*> Z60N87(87,pZ60N87);
01200   static const G4double pZ60N88[7]={1.5E-7, 16., 4.1E-5, 2.5E-9, 1.3, 1.6E-5, .0027};
01201   static const std::pair<G4int, const G4double*> Z60N88(88,pZ60N88);
01202   static const G4double pZ60N90[7]={1.5E-7, 16., 4.3E-5, 2.5E-9, 1.3, 1.6E-5, .0029};
01203   static const std::pair<G4int, const G4double*> Z60N90(90,pZ60N90);
01204   static const std::pair<G4int, const G4double*> Z60[N60]={Z60N82, Z60N83, Z60N84, Z60N85,
01205                                                            Z60N86, Z60N87, Z60N88, Z60N90};
01206   //==> Pm(Z=61)
01207   static const G4int N61=3;
01208   static const G4double pZ61N86[7]={6.E-7, 16., 8.E-4, .6E-9, 3., 2.8E-5, .014};
01209   static const std::pair<G4int, const G4double*> Z61N86(86,pZ61N86);
01210   static const G4double pZ61N87[7]={6.2E-8, 16., 1.2E-5, 4.E-9, 2.2, 2.5E-5, .0019};
01211   static const std::pair<G4int, const G4double*> Z61N87(87,pZ61N87);
01212   static const G4double pZ61N88[7]={3.2E-8, 16., 6.4E-6, 4.E-9, 2.2, 2.5E-5, .002};
01213   static const std::pair<G4int, const G4double*> Z61N88(88,pZ61N88);
01214   static const std::pair<G4int, const G4double*> Z61[N61]={Z61N86, Z61N87, Z61N88};
01215   //==> Sm(Z=62)
01216   static const G4int N62=9;
01217   static const G4double pZ62N82[7]={1.2E-7, 16., 2.1E-5, 5.E-9, 1.4, 2.E-5, .0017};
01218   static const std::pair<G4int, const G4double*> Z62N82(82,pZ62N82);
01219   static const G4double pZ62N85[7]={1.2E-7, 16., 5.3E-5, 1.5E-9, 1.3, 1.7E-5, .0045};
01220   static const std::pair<G4int, const G4double*> Z62N85(85,pZ62N85);
01221   static const G4double pZ62N86[7]={6.E-8, 16., 1.7E-5, 3.E-9, 1.3, 1.7E-5, .0028};
01222   static const std::pair<G4int, const G4double*> Z62N86(86,pZ62N86);
01223   static const G4double pZ62N87[7]={6.E-8, 15., 5.2E-4, .11E-9, 1.3, 1.5E-5, .074};
01224   static const std::pair<G4int, const G4double*> Z62N87(87,pZ62N87);
01225   static const G4double pZ62N88[7]={6.E-7, 16., 8.6E-4, .7E-9, 1.3, 1.7E-5, .015};
01226   static const std::pair<G4int, const G4double*> Z62N88(88,pZ62N88);
01227   static const G4double pZ62N89[7]={6.E-7, 16., 5.E-4, 0., 1.3, 1.6E-5, .053};
01228   static const std::pair<G4int, const G4double*> Z62N89(89,pZ62N89);
01229   static const G4double pZ62N90[7]={6.E-8, 15., 1.3E-5, 4.5E-9, 1.3, 1.7E-5, .0019};
01230   static const std::pair<G4int, const G4double*> Z62N90(90,pZ62N90);
01231   static const G4double pZ62N91[7]={6.E-8, 15., 1.5E-5, 2.E-9, 1.3, 1.6E-5, .0024};
01232   static const std::pair<G4int, const G4double*> Z62N91(91,pZ62N91);
01233   static const G4double pZ62N92[7]={1.2E-7, 15., 8.6E-5, 1.2E-9, 1.3, 1.6E-5, .007};
01234   static const std::pair<G4int, const G4double*> Z62N92(92,pZ62N92);
01235   static const std::pair<G4int, const G4double*> Z62[N62]={Z62N82, Z62N85, Z62N86, Z62N87,
01236                                                            Z62N88, Z62N89, Z62N90, Z62N91,
01237                                                            Z62N92};
01238   //==> Eu(Z=63)
01239   static const G4int N63=7;
01240   static const G4double pZ63N88[7]={6.E-8, 15., 2.8E-5, 2.E-9, 1.3, 1.5E-5, .0046};
01241   static const std::pair<G4int, const G4double*> Z63N88(88,pZ63N88);
01242   static const G4double pZ63N89[7]={6.E-7, 15., .0011, .5E-9, 2.4, 2.4E-5, .017};
01243   static const std::pair<G4int, const G4double*> Z63N89(89,pZ63N89);
01244   static const G4double pZ63N90[7]={3.E-7, 15., 1.8E-4, 1.1E-9, 1., 1.2E-5, .0054};
01245   static const std::pair<G4int, const G4double*> Z63N90(90,pZ63N90);
01246   static const G4double pZ63N91[7]={4.1E-7, 15., 1.4E-4, 1.9E-9, 1., 1.4E-5, .0032};
01247   static const std::pair<G4int, const G4double*> Z63N91(91,pZ63N91);
01248   static const G4double pZ63N92[7]={5.E-8, 15., 2.4E-5, 2.8E-9, 1., 1.3E-5, .0037};
01249   static const std::pair<G4int, const G4double*> Z63N92(92,pZ63N92);
01250   static const G4double pZ63N93[7]={4.1E-8, 17., 1.6E-5, 2.E-9, 3.3, 3.4E-5, .004};
01251   static const std::pair<G4int, const G4double*> Z63N93(93,pZ63N93);
01252   static const G4double pZ63N94[7]={4.2E-8, 17., 1.6E-5, 2.E-9, 1.2, 1.6E-5, .004};
01253   static const std::pair<G4int, const G4double*> Z63N94(94,pZ63N94);
01254   static const std::pair<G4int, const G4double*> Z63[N63]={Z63N88, Z63N89, Z63N90, Z63N91,
01255                                                            Z63N92, Z63N93, Z63N94};
01256   //==> Gd(Z=64)
01257   static const G4int N64=8;
01258   static const G4double pZ64N88[7]={4.2E-8, 14., 2.E-4, 0., 1.2, 1.3E-5, .19};
01259   static const std::pair<G4int, const G4double*> Z64N88(88,pZ64N88);
01260   static const G4double pZ64N89[7]={2.E-6, 14., .0016, 1.4E-9, 1.6, 1.6E-5, .0057};
01261   static const std::pair<G4int, const G4double*> Z64N89(89,pZ64N89);
01262   static const G4double pZ64N90[7]={1.7E-7, 12., 8.4E-5, 2.E-9, 1.8, 2.2E-5, .0035};
01263   static const std::pair<G4int, const G4double*> Z64N90(90,pZ64N90);
01264   static const G4double pZ64N91[7]={1.7E-7, 13., 5.E-4, .3E-9, 1.7, 1.9E-5, .026};
01265   static const std::pair<G4int, const G4double*> Z64N91(91,pZ64N91);
01266   static const G4double pZ64N92[7]={1.7E-7, 13., 7.E-5, 2.5E-9, 1.8, 2.2E-5, .003};
01267   static const std::pair<G4int, const G4double*> Z64N92(92,pZ64N92);
01268   static const G4double pZ64N93[7]={1.7E-6, 12., .002, 0., 1.7, 1.8E-5, .47};
01269   static const std::pair<G4int, const G4double*> Z64N93(93,pZ64N93);
01270   static const G4double pZ64N94[7]={3.4E-7, 13., 1.5E-4, 2.E-9, 1.8, 2.3E-5, .0034};
01271   static const std::pair<G4int, const G4double*> Z64N94(94,pZ64N94);
01272   static const G4double pZ64N96[7]={2.6E-6, 13., .0019, 1.2E-9, 1., 1.2E-5, .0056};
01273   static const std::pair<G4int, const G4double*> Z64N96(96,pZ64N96);
01274   static const std::pair<G4int, const G4double*> Z64[N64]={Z64N88, Z64N89, Z64N90, Z64N91,
01275                                                            Z64N92, Z64N93, Z64N94, Z64N96};
01276   //==> Tb(Z=65)
01277   static const G4int N65=2;
01278   static const G4double pZ65N94[7]={9.E-7, 16., 3.9E-4, 1.7E-9, 2., 2.2E-5, .0042};
01279   static const std::pair<G4int, const G4double*> Z65N94(94,pZ65N94);
01280   static const G4double pZ65N95[7]={4.5E-7, 16., 1.1E-4, 3.E-9, 1.7, 2.2E-5, .0024};
01281   static const std::pair<G4int, const G4double*> Z65N95(95,pZ65N95);
01282   static const std::pair<G4int, const G4double*> Z65[N65]={Z65N94, Z65N94};
01283   //==> Dy(Z=66)
01284   static const G4int N66=7;
01285   static const G4double pZ66N90[7]={1.2E-7, 13., 4.E-5, 3.E-9, 1.2, 1.4E-5, .0025};
01286   static const std::pair<G4int, const G4double*> Z66N90(90,pZ66N90);
01287   static const G4double pZ66N92[7]={1.2E-7, 13., 6.7E-5, 2.E-9, 1., 1.1E-5, .004};
01288   static const std::pair<G4int, const G4double*> Z66N92(92,pZ66N92);
01289   static const G4double pZ66N94[7]={1.2E-7, 13., 5.3E-5, 1.6E-9, 1., 1.1E-5, .0034};
01290   static const std::pair<G4int, const G4double*> Z66N94(94,pZ66N94);
01291   static const G4double pZ66N95[7]={1.2E-6, 13., .0017, .7E-9, 1.3, 1.3E-5, .011};
01292   static const std::pair<G4int, const G4double*> Z66N95(95,pZ66N95);
01293   static const G4double pZ66N96[7]={1.2E-7, 13., 8.E-6, 1.5E-7, 1., 1.1E-5, 1.E-4};
01294   static const std::pair<G4int, const G4double*> Z66N96(96,pZ66N96);
01295   static const G4double pZ66N97[7]={1.5E-7, 13., 4.E-5, 4.E-9, 1.3, 1.3E-5, .002};
01296   static const std::pair<G4int, const G4double*> Z66N97(97,pZ66N97);
01297   static const G4double pZ66N98[7]={3.E-7, 13., .001, 4.E-9, 1.3, 1.3E-5, .23};
01298   static const std::pair<G4int, const G4double*> Z66N98(98,pZ66N98);
01299   static const std::pair<G4int, const G4double*> Z66[N66]={Z66N90, Z66N92, Z66N94, Z66N95,
01300                                                            Z66N96, Z66N97, Z66N98};
01301   //==> Ho(Z=67)
01302   static const G4int N67=2;
01303   static const G4double pZ67N98[7]={3.E-7, 13., 2.2E-4, 1.5E-9, 1., 1.E-5, .0054};
01304   static const std::pair<G4int, const G4double*> Z67N98(98,pZ67N98);
01305   static const G4double pZ67N99[7]={7.5E-8, 13., 2.6E-5, 4.5E-9, 1.5, 1.5E-5, .0021};
01306   static const std::pair<G4int, const G4double*> Z67N99(99,pZ67N99);
01307   static const std::pair<G4int, const G4double*> Z67[N67]={Z67N98, Z67N99};
01308   //==> Er(Z=68)
01309   static const G4int N68=6;
01310   static const G4double pZ68N94[7]={1.2E-7, 13., 7.8E-5, 1.6E-9, .9, 9.E-6, .005};
01311   static const std::pair<G4int, const G4double*> Z68N94(94,pZ68N94);
01312   static const G4double pZ68N96[7]={1.2E-7, 13., 8.5E-5, 1.2E-9, .9, 8.E-6, .0055};
01313   static const std::pair<G4int, const G4double*> Z68N96(96,pZ68N96);
01314   static const G4double pZ68N98[7]={1.E-6, 13., .0011, .8E-9, .9, 8.E-6, .0087};
01315   static const std::pair<G4int, const G4double*> Z68N98(98,pZ68N98);
01316   static const G4double pZ68N99[7]={1.2E-7, 13., 2.5E-5, 4.5E-9, .9, 9.E-6, .0015};
01317   static const std::pair<G4int, const G4double*> Z68N99(99,pZ68N99);
01318   static const G4double pZ68N100[7]={2.E-6, 13., .0015, 1.1E-9, .9, 8.E-6, .0058};
01319   static const std::pair<G4int, const G4double*> Z68N100(100,pZ68N100);
01320   static const G4double pZ68N102[7]={2.E-6, 13., .0018, 1.E-9, .9, 8.E-6, .007};
01321   static const std::pair<G4int, const G4double*> Z68N102(102,pZ68N102);
01322   static const std::pair<G4int, const G4double*> Z68[N68]={Z68N94, Z68N96, Z68N98,
01323                                                            Z68N99, Z68N100, Z68N102};
01324   //==> Tm(Z=69) *** No data *** (Tm169=Er167)
01325   static const G4int N69=1;
01326   static const G4double pZ69N100[7]={1.2E-7, 13., 2.5E-5, 4.5E-9, .9, 9.E-6, .0015};
01327   static const std::pair<G4int, const G4double*> Z69N100(100,pZ69N100);
01328   static const std::pair<G4int, const G4double*> Z69[N69]={Z69N100};
01329   //==> Yb(Z=70) *** No data *** (Yb168=Er166, Yb170=Er168, Yb171=Er167, Yb172=Er170,
01330   //                              Yb173=Hf177, Yb174=Hf176, Yb176=Hf178)
01331   static const G4int N70=7;
01332   static const G4double pZ70N98[7]={1.E-6, 13., .0011, .8E-9, .9, 8.E-6, .0087};
01333   static const std::pair<G4int, const G4double*> Z70N98(98,pZ70N98);
01334   static const G4double pZ70N100[7]={2.E-6, 13., .0015, 1.1E-9, .9, 8.E-6, .0058};
01335   static const std::pair<G4int, const G4double*> Z70N100(100,pZ70N100);
01336   static const G4double pZ70N101[7]={1.2E-7, 13., 2.5E-5, 4.5E-9, .9, 9.E-6, .0015};
01337   static const std::pair<G4int, const G4double*> Z70N101(101,pZ70N101);
01338   static const G4double pZ70N102[7]={2.E-6, 13., .0018, 1.E-9, .9, 8.E-6, .007};
01339   static const std::pair<G4int, const G4double*> Z70N102(102,pZ70N102);
01340   static const G4double pZ70N103[7]={5.E-7, 18., .01, 1.7E-6, 1.2, 1.4E-5, 1.4E-5};
01341   static const std::pair<G4int, const G4double*> Z70N103(103,pZ70N103);
01342   static const G4double pZ70N104[7]={5.E-7, 18., 1.9E-4, 2.5E-9, 1.2, 1.4E-5, .004};
01343   static const std::pair<G4int, const G4double*> Z70N104(104,pZ70N104);
01344   static const G4double pZ70N106[7]={5.E-7, 18., 1.3E-4, 2.E-9, 1.2, 1.4E-5, .0027};
01345   static const std::pair<G4int, const G4double*> Z70N106(106,pZ70N106);
01346   static const std::pair<G4int, const G4double*> Z70[N70]={Z70N98, Z70N100, Z70N101,
01347                                                            Z70N102, Z70N103, Z70N104,
01348                                                            Z70N106};
01349   //==> Lu(Z=71)
01350   static const G4int N71=2;
01351   static const G4double pZ71N104[7]={5.E-7, 18., 1.8E-4, 2.E-9, .9, 9.E-6, .0036};
01352   static const std::pair<G4int, const G4double*> Z71N104(104,pZ71N104);
01353   static const G4double pZ71N105[7]={2.5E-7, 18., 9.E-5, 1.E-8, .9, 9.E-6, .0016};
01354   static const std::pair<G4int, const G4double*> Z71N105(105,pZ71N105);
01355   static const std::pair<G4int, const G4double*> Z71[N71]={Z71N104, Z71N105};
01356   //==> Hf(Z=72)
01357   static const G4int N72=6;
01358   static const G4double pZ72N102[7]={1.E-6, 18., 8.8E-4, .8E-9, 1., 1.1E-5, .0092};
01359   static const std::pair<G4int, const G4double*> Z72N102(102,pZ72N102);
01360   static const G4double pZ72N104[7]={5.E-7, 18., 1.9E-4, 2.5E-9, 1.2, 1.4E-5, .004};
01361   static const std::pair<G4int, const G4double*> Z72N104(104,pZ72N104);
01362   static const G4double pZ72N105[7]={5.E-7, 18., .01, 1.7E-6, 1.2, 1.4E-5, 1.4E-5};
01363   static const std::pair<G4int, const G4double*> Z72N105(105,pZ72N105);
01364   static const G4double pZ72N106[7]={5.E-7, 18., 1.3E-4, 2.E-9, 1.2, 1.4E-5, .0027};
01365   static const std::pair<G4int, const G4double*> Z72N106(106,pZ72N106);
01366   static const G4double pZ72N107[7]={2.5E-7, 18., 1.E-4, 2.E-9, 1.2, 1.5E-5, .0041};
01367   static const std::pair<G4int, const G4double*> Z72N107(107,pZ72N107);
01368   static const G4double pZ72N108[7]={1.E-6, 18., .0012, .6E-9, 1.2, 1.5E-5, .012};
01369   static const std::pair<G4int, const G4double*> Z72N108(108,pZ72N108);
01370   static const std::pair<G4int, const G4double*> Z72[N72]={Z72N102, Z72N104, Z72N105,
01371                                                            Z72N106, Z72N107, Z72N108};
01372   //==> Ta(Z=73)
01373   static const G4int N73=2;
01374   static const G4double pZ73N108[7]={5.E-7, 18., 1.7E-4, 2.E-9, 1.2, 1.4E-5, .0035};
01375   static const std::pair<G4int, const G4double*> Z73N108(108,pZ73N108);
01376   static const G4double pZ73N109[7]={1.E-6, 14., .002, .3E-9, 1.3, 1.5E-5, .016};
01377   static const std::pair<G4int, const G4double*> Z73N109(109,pZ73N109);
01378   static const std::pair<G4int, const G4double*> Z73[N73]={Z73N108, Z73N108};
01379   //==> W (Z=74) *** W180 only bad TENDL-2008 *** (W180=Hf178)
01380   static const G4int N74=5;
01381   static const G4double pZ74N106[7]={5.E-7, 18., 1.3E-4, 2.E-9, 1.2, 1.4E-5, .0027};
01382   static const std::pair<G4int, const G4double*> Z74N106(106,pZ74N106);
01383   static const G4double pZ74N108[7]={4.E-6, 14., .0034, .9E-9, 1.3, 1.4E-5, .0067};
01384   static const std::pair<G4int, const G4double*> Z74N108(108,pZ74N108);
01385   static const G4double pZ74N109[7]={1.2E-7, 14., 3.E-5, 3.E-9, 1.3, 1.4E-5, .0019};
01386   static const std::pair<G4int, const G4double*> Z74N109(109,pZ74N109);
01387   static const G4double pZ74N110[7]={1.2E-7, 14., 3.6E-5, 2.E-9, 1.3, 1.3E-5, .0024};
01388   static const std::pair<G4int, const G4double*> Z74N110(110,pZ74N110);
01389   static const G4double pZ74N112[7]={1.2E-7, 14., 3.E-5, 1.3E-7, 1.3, 1.3E-5, 1.4E-4};
01390   static const std::pair<G4int, const G4double*> Z74N112(112,pZ74N112);
01391   static const std::pair<G4int, const G4double*> Z74[N74]={Z74N106, Z74N108, Z74N109,
01392                                                            Z74N110, Z74N112};
01393   //==> Re(Z=75)
01394   static const G4int N75=2;
01395   static const G4double pZ75N110[7]={1.2E-7, 14., 8.E-5, 1.2E-9, 1.3, 1.5E-5, .005};
01396   static const std::pair<G4int, const G4double*> Z75N110(110,pZ75N110);
01397   static const G4double pZ75N112[7]={1.2E-7, 14., 8.8E-5, 1.1E-9, 1.3, 1.5E-5, .0055};
01398   static const std::pair<G4int, const G4double*> Z75N112(112,pZ75N112);
01399   static const std::pair<G4int, const G4double*> Z75[N75]={Z75N110, Z75N112};
01400   //==> Os(Z=76) *** No data *** (Os184=W182, Os186=W184, Os187=Re187, Os188=W186,
01401   //                              Os189=Re187, Os190=Os192=W186)
01402   static const G4int N76=7;
01403   static const G4double pZ76N108[7]={4.E-6, 14., .0034, .9E-9, 1.3, 1.4E-5, .0067};
01404   static const std::pair<G4int, const G4double*> Z76N108(108,pZ76N108);
01405   static const G4double pZ76N110[7]={1.2E-7, 14., 3.6E-5, 2.E-9, 1.3, 1.3E-5, .0024};
01406   static const std::pair<G4int, const G4double*> Z76N110(110,pZ76N110);
01407   static const G4double pZ76N111[7]={1.2E-7, 14., 8.8E-5, 1.1E-9, 1.3, 1.5E-5, .0055};
01408   static const std::pair<G4int, const G4double*> Z76N111(111,pZ76N111);
01409   static const G4double pZ76N112[7]={1.2E-7, 14., 3.E-5, 1.3E-7, 1.3, 1.3E-5, 1.4E-4};
01410   static const std::pair<G4int, const G4double*> Z76N112(112,pZ76N112);
01411   static const G4double pZ76N113[7]={1.2E-7, 14., 8.8E-5, 1.1E-9, 1.3, 1.5E-5, .0055};
01412   static const std::pair<G4int, const G4double*> Z76N113(113,pZ76N113);
01413   static const G4double pZ76N114[7]={1.2E-7, 14., 3.E-5, 1.3E-7, 1.3, 1.3E-5, 1.4E-4};
01414   static const std::pair<G4int, const G4double*> Z76N114(114,pZ76N114);
01415   static const G4double pZ76N116[7]={1.2E-7, 14., 3.E-5, 1.3E-7, 1.3, 1.3E-5, 1.4E-4};
01416   static const std::pair<G4int, const G4double*> Z76N116(116,pZ76N116);
01417   static const std::pair<G4int, const G4double*> Z76[N76]={Z76N108, Z76N110, Z76N111,
01418                                                            Z76N112, Z76N113, Z76N114,
01419                                                            Z76N116};
01420   //==> Ir(Z=77)
01421   static const G4int N77=2;
01422   static const G4double pZ77N114[7]={4.8E-7, 14., 5.2E-4, .7E-9, 1.5, 1.7E-5, .0082};
01423   static const std::pair<G4int, const G4double*> Z77N114(114,pZ77N114);
01424   static const G4double pZ77N116[7]={4.8E-7, 14., 4.5E-4, .8E-9, 1.8, 2.3E-5, .0073};
01425   static const std::pair<G4int, const G4double*> Z77N116(116,pZ77N116);
01426   static const std::pair<G4int, const G4double*> Z77[N77]={Z77N114, Z77N116};
01427   //==> Pt(Z=78) *** No data *** (Pt190=Pt192=Pt194=Hg196, Pt195=Hg199, Pt196=Hg198,
01428   //                              Pt198=Hg200)
01429   static const G4int N78=6;
01430   static const G4double pZ78N112[7]={6.E-8, 19., 3.3E-4, .1E-9, 1.6, 1.8E-5, .06};
01431   static const std::pair<G4int, const G4double*> Z78N112(112,pZ78N112);
01432   static const G4double pZ78N114[7]={6.E-8, 19., 3.3E-4, .1E-9, 1.6, 1.8E-5, .06};
01433   static const std::pair<G4int, const G4double*> Z78N114(114,pZ78N114);
01434   static const G4double pZ78N116[7]={6.E-8, 19., 3.3E-4, .1E-9, 1.6, 1.8E-5, .06};
01435   static const std::pair<G4int, const G4double*> Z78N116(116,pZ78N116);
01436   static const G4double pZ78N117[7]={9.6E-7, 20., .001, .2E-9, 1.6, 2.E-5, .037};
01437   static const std::pair<G4int, const G4double*> Z78N117(117,pZ78N117);
01438   static const G4double pZ78N118[7]={2.4E-7, 20., 1.6E-4, 1.3E-9, 1.6, 1.8E-5, .007};
01439   static const std::pair<G4int, const G4double*> Z78N118(118,pZ78N118);
01440   static const G4double pZ78N120[7]={2.E-6, 19., .0015, .9E-9, 1.6, 1.8E-5, .0078};
01441   static const std::pair<G4int, const G4double*> Z78N120(120,pZ78N120);
01442   static const std::pair<G4int, const G4double*> Z78[N78]={Z78N112, Z78N114, Z78N116,
01443                                                            Z78N117, Z78N118, Z78N120};
01444   //==> Au(Z=79)
01445   static const G4int N79=1;
01446   static const G4double pZ79N118[7]={2.4E-7, 19., 1.E-4, 1.4E-9, 1.3, 1.7E-5, .0042};
01447   static const std::pair<G4int, const G4double*> Z79N118(118,pZ79N118);
01448   static const std::pair<G4int, const G4double*> Z79[N79]={Z79N118};
01449   //==> Hg(Z=80)
01450   static const G4int N80=7;
01451   static const G4double pZ80N116[7]={6.E-8, 19., 3.3E-4, .1E-9, 1.6, 1.8E-5, .06};
01452   static const std::pair<G4int, const G4double*> Z80N116(116,pZ80N116);
01453   static const G4double pZ80N118[7]={2.4E-7, 20., 1.6E-4, 1.3E-9, 1.6, 1.8E-5, .007};
01454   static const std::pair<G4int, const G4double*> Z80N118(118,pZ80N118);
01455   static const G4double pZ80N119[7]={9.6E-7, 20., .001, .2E-9, 1.6, 2.E-5, .037};
01456   static const std::pair<G4int, const G4double*> Z80N119(119,pZ80N119);
01457   static const G4double pZ80N120[7]={2.E-6, 19., .0015, .9E-9, 1.6, 1.8E-5, .0078};
01458   static const std::pair<G4int, const G4double*> Z80N120(120,pZ80N120);
01459   static const G4double pZ80N121[7]={1.E-6, 20., 7.E-4, 1.E-9, 1.6, 1.8E-5, .0076};
01460   static const std::pair<G4int, const G4double*> Z80N121(121,pZ80N121);
01461   static const G4double pZ80N122[7]={2.E-6, 18., .0016, .8E-9, 1.6, 1.8E-5, .0078};
01462   static const std::pair<G4int, const G4double*> Z80N122(122,pZ80N122);
01463   static const G4double pZ80N124[7]={2.0E-6, 18., .0032, .4E-9, 1.6, 1.8E-5, .016};
01464   static const std::pair<G4int, const G4double*> Z80N124(124,pZ80N124);
01465   static const std::pair<G4int, const G4double*> Z80[N80]={Z80N116, Z80N118, Z80N119,
01466                                                            Z80N120, Z80N121, Z80N122,
01467                                                            Z80N124};
01468   //==> Tl(Z=81) *** No data *** (Tl203=Au196, Tl198=Bi209)
01469   static const G4int N81=2;
01470   static const G4double pZ81N122[7]={2.4E-7, 19., 1.E-4, 1.4E-9, 1.3, 1.7E-5, .0042};
01471   static const std::pair<G4int, const G4double*> Z81N122(122,pZ81N122);
01472   static const G4double pZ81N124[7]={};
01473   static const std::pair<G4int, const G4double*> Z81N124(124,pZ81N124);
01474   static const std::pair<G4int, const G4double*> Z81[N81]={Z81N122, Z81N124};
01475   //==> Pb(Z=82)
01476   static const G4int N82=4;
01477   static const G4double pZ82N122[7]={4.E-6, 20., .0022, 1.E-9, 1.6, 1.8E-5, .0058};
01478   static const std::pair<G4int, const G4double*> Z82N122(122,pZ82N122);
01479   static const G4double pZ82N124[7]={4.E-6, 20., .0022, 1.E-9, 1.6, 1.8E-5, .0058};
01480   static const std::pair<G4int, const G4double*> Z82N124(124,pZ82N124);
01481   static const G4double pZ82N125[7]={2.E-6, 20., .0011, 1.2E-9, 1.6, 1.8E-5, .0056};
01482   static const std::pair<G4int, const G4double*> Z82N125(125,pZ82N125);
01483   static const G4double pZ82N126[7]={4.E-6, 20., .0023, 1.2E-9, 1.6, 1.8E-5, .0058};
01484   static const std::pair<G4int, const G4double*> Z82N126(126,pZ82N126);
01485   static const std::pair<G4int, const G4double*> Z82[N82]={Z82N122, Z82N124, Z82N125,
01486                                                            Z82N126};
01487   //==> Bi(Z=83)
01488   static const G4int N83=1;
01489   static const G4double pZ83N126[7]={8.E-7, 23., 3.3E-4, 1.8E-9, 1.6, 1.8E-5, .005};
01490   static const std::pair<G4int, const G4double*> Z83N126(126,pZ83N126);
01491   static const std::pair<G4int, const G4double*> Z83[N83]={Z83N126};
01492   //==> Po(Z=84) *** No data *** (Po209=Pb207)
01493   static const G4int N84=1;
01494   static const G4double pZ84N125[7]={2.E-6, 20., .0011, 1.2E-9, 1.6, 1.8E-5, .0056};
01495   static const std::pair<G4int, const G4double*> Z84N125(125,pZ84N125);
01496   static const std::pair<G4int, const G4double*> Z84[N84]={Z84N125};
01497   //==> At(Z=85) *** No data *** (At210=Pb207)
01498   static const G4int N85=1;
01499   static const G4double pZ85N125[7]={2.E-6, 20., .0011, 1.2E-9, 1.6, 1.8E-5, .0056};
01500   static const std::pair<G4int, const G4double*> Z85N125(125,pZ85N125);
01501   static const std::pair<G4int, const G4double*> Z85[N85]={Z85N125};
01502   //==> Rn(Z=86) *** No data *** (Rn222=Ra224)
01503   static const G4int N86=1;
01504   static const G4double pZ86N136[7]={1.E-7, 23., 5.5E-5, 1.2E-9, 1.6, 1.8E-5, .0062};
01505   static const std::pair<G4int, const G4double*> Z86N136(136,pZ86N136);
01506   static const std::pair<G4int, const G4double*> Z86[N86]={Z86N136};
01507   //==> Fr(Z=87) *** No data *** (Fr223=Ac225)
01508   static const G4int N87=1;
01509   static const G4double pZ87N136[7]={2.E-7, 23., 1.1E-4, 1.2E-9, 1.6, 1.8E-5, .0062};
01510   static const std::pair<G4int, const G4double*> Z87N136(136,pZ87N136);
01511   static const std::pair<G4int, const G4double*> Z87[N87]={Z87N136};
01512   //==> Ra(Z=88)
01513   static const G4int N88=4;
01514   static const G4double pZ88N135[7]={1.E-7, 23., 5.5E-5, 1.2E-9, 1.6, 1.8E-5, .0062};
01515   static const std::pair<G4int, const G4double*> Z88N135(135,pZ88N135);
01516   static const G4double pZ88N136[7]={1.E-7, 23., 5.5E-5, 1.2E-9, 1.6, 1.8E-5, .0062};
01517   static const std::pair<G4int, const G4double*> Z88N136(136,pZ88N136);
01518   static const G4double pZ88N137[7]={1.E-7, 23., 5.5E-5, 1.2E-9, 1.6, 1.8E-5, .0062};
01519   static const std::pair<G4int, const G4double*> Z88N137(137,pZ88N137);
01520   static const G4double pZ88N138[7]={4.E-7, 23., 1.7E-4, 1.5E-9, 1.6, 1.8E-5, .005};
01521   static const std::pair<G4int, const G4double*> Z88N138(138,pZ88N138);
01522   static const std::pair<G4int, const G4double*> Z88[N88]={Z88N135, Z88N136, Z88N137,
01523                                                            Z88N138};
01524   //==> Ac(Z=89)
01525   static const G4int N89=3;
01526   static const G4double pZ89N136[7]={2.E-7, 23., 1.1E-4, 1.2E-9, 1.6, 1.8E-5, .0062};
01527   static const std::pair<G4int, const G4double*> Z89N136(136,pZ89N136);
01528   static const G4double pZ89N137[7]={4.E-7, 23., 2.2E-4, 1.2E-9, 1.6, 1.8E-5, .0062};
01529   static const std::pair<G4int, const G4double*> Z89N137(137,pZ89N137);
01530   static const G4double pZ89N138[7]={1.E-7, 23., 5.5E-5, 1.2E-9, 1.6, 1.8E-5, .0062};
01531   static const std::pair<G4int, const G4double*> Z89N138(138,pZ89N138);
01532   static const std::pair<G4int, const G4double*> Z89[N89]={Z89N136, Z89N137, Z89N138};
01533   //==> Th(Z=90)
01534   static const G4int N90=7;
01535   static const G4double pZ90N137[7]={4.E-7, 23., 2.2E-4, 1.2E-9, 1.6, 1.8E-5, .0062};
01536   static const std::pair<G4int, const G4double*> Z90N137(137,pZ90N137);
01537   static const G4double pZ90N138[7]={1.E-6, 23., .0016, .4E-9, 3., 3.E-5, .019};
01538   static const std::pair<G4int, const G4double*> Z90N138(138,pZ90N138);
01539   static const G4double pZ90N139[7]={2.5E-7, 23., 1.1E-4, 1.4E-9, 2.4, 2.7E-5, .0049};
01540   static const std::pair<G4int, const G4double*> Z90N139(139,pZ90N139);
01541   static const G4double pZ90N140[7]={1.2E-7, 23., 3.E-5, 2.E-9, 3., 3.E-5, .003};
01542   static const std::pair<G4int, const G4double*> Z90N140(140,pZ90N140);
01543   static const G4double pZ90N142[7]={4.E-6, 23., .0023, 1.1E-9, 1.8, 2.3E-5, .0064};
01544   static const std::pair<G4int, const G4double*> Z90N142(142,pZ90N142);
01545   static const G4double pZ90N143[7]={9.4E-7, 23., 5.4E-4, 1.1E-9, 3., 3.E-5, .0066};
01546   static const std::pair<G4int, const G4double*> Z90N143(143,pZ90N143);
01547   static const G4double pZ90N144[7]={2.5E-7, 23., 1.4E-4, 1.1E-9, 3., 3.E-5, .0066};
01548   static const std::pair<G4int, const G4double*> Z90N144(144,pZ90N144);
01549   static const std::pair<G4int, const G4double*> Z90[N90]={Z90N137, Z90N138, Z90N139,
01550                                                            Z90N140, Z90N142, Z90N143,
01551                                                            Z90N144};
01552   //==> Pa(Z=91)
01553   static const G4int N91=3;
01554   static const G4double pZ91N140[7]={1.E-5, 23., .0052, 1.6E-9, 1.8, 2.3E-5, .0057};
01555   static const std::pair<G4int, const G4double*> Z91N140(140,pZ91N140);
01556   static const G4double pZ91N141[7]={8.E-6, 23., .006, 0., 3.5, 3.5E-5, .021};
01557   static const std::pair<G4int, const G4double*> Z91N141(141,pZ91N141);
01558   static const G4double pZ91N142[7]={8.E-6, 23., .0042, 1.E-9, 2., 2.5E-5, .006};
01559   static const std::pair<G4int, const G4double*> Z91N142(142,pZ91N142);
01560   static const std::pair<G4int, const G4double*> Z91[N91]={Z91N140, Z91N141, Z91N142};
01561   //==> U (Z=92)
01562   static const G4int N92=10;
01563   static const G4double pZ92N140[7]={1.4E-6, 20., 8.E-4, 1.5E-9, 2.5, 2.8E-5, .0055};
01564   static const std::pair<G4int, const G4double*> Z92N140(140,pZ92N140);
01565   static const G4double pZ92N141[7]={5.6E-6, 20., .0033, 1.E-9, 2.5, 2.8E-5, .006};
01566   static const std::pair<G4int, const G4double*> Z92N141(141,pZ92N141);
01567   static const G4double pZ92N142[7]={5.6E-6, 20., .0034, 0., 2.5, 2.8E-5, .0072};
01568   static const std::pair<G4int, const G4double*> Z92N142(142,pZ92N142);
01569   static const G4double pZ92N143[7]={5.6E-6, 20., .0032, 0., 2., 2.3E-5, .006};
01570   static const std::pair<G4int, const G4double*> Z92N143(143,pZ92N143);
01571   static const G4double pZ92N144[7]={3.6E-7, 20., 1.6E-4, 1.3E-9, 2.2, 2.7E-5, .0043};
01572   static const std::pair<G4int, const G4double*> Z92N144(144,pZ92N144);
01573   static const G4double pZ92N145[7]={3.6E-6, 20., .003, 0., 2.2, 2.7E-5, .045};
01574   static const std::pair<G4int, const G4double*> Z92N145(145,pZ92N145);
01575   static const G4double pZ92N146[7]={3.6E-7, 20., 1.6E-4, 1.3E-9, 2.2, 2.7E-5, .0043};
01576   static const std::pair<G4int, const G4double*> Z92N146(146,pZ92N146);
01577   static const G4double pZ92N147[7]={3.6E-6, 20., .0014, 1.3E-9, 2.2, 2.7E-5, 12.};
01578   static const std::pair<G4int, const G4double*> Z92N147(147,pZ92N147);
01579   static const G4double pZ92N148[7]={3.4E-7, 20., 1.3E-4, 1.3E-9, 2.2, 2.8E-5, .0036};
01580   static const std::pair<G4int, const G4double*> Z92N148(148,pZ92N148);
01581   static const G4double pZ92N149[7]={3.3E-7, 20., 1.5E-4, 1.2E-9, 3., 3.4E-5, .0044};
01582   static const std::pair<G4int, const G4double*> Z92N149(149,pZ92N149);
01583   static const std::pair<G4int, const G4double*> Z92[N92]={Z92N140, Z92N141, Z92N142,
01584                                                            Z92N143, Z92N144, Z92N145,
01585                                                            Z92N146, Z92N147, Z92N148,
01586                                                            Z92N146};
01587   //==> Np(Z=93)
01588   static const G4int N93=5;
01589   static const G4double pZ93N142[7]={3.4E-6, 20., .002, 1.3E-9, 3., 3.3E-5, .0056};
01590   static const std::pair<G4int, const G4double*> Z93N142(142,pZ93N142);
01591   static const G4double pZ93N143[7]={3.4E-6, 20., .002, 1.6E-9, 3.5, 3.6E-5, .005};
01592   static const std::pair<G4int, const G4double*> Z93N143(143,pZ93N143);
01593   static const G4double pZ93N144[7]={6.8E-6, 18., .0052, .8E-9, 2.4, 3.E-5, .0072};
01594   static const std::pair<G4int, const G4double*> Z93N144(144,pZ93N144);
01595   static const G4double pZ93N145[7]={3.4E-6, 20., .002, 1.E-9, 3.5, 3.6E-5, .006};
01596   static const std::pair<G4int, const G4double*> Z93N145(145,pZ93N145);
01597   static const G4double pZ93N146[7]={3.4E-6, 20., .002, 1.5E-9, 3.5, 3.6E-5, .0053};
01598   static const std::pair<G4int, const G4double*> Z93N146(146,pZ93N146);
01599   static const std::pair<G4int, const G4double*> Z93[N93]={Z93N142, Z93N143, Z93N144,
01600                                                            Z93N145, Z93N146};
01601   //==> Pu(Z=94)
01602   static const G4int N94=10;
01603   static const G4double pZ94N142[7]={6.8E-7, 16., 4.5E-4, 1.7E-9, 2.6, 3.E-5, .0047};
01604   static const std::pair<G4int, const G4double*> Z94N142(142,pZ94N142);
01605   static const G4double pZ94N143[7]={6.8E-6, 18., .0044, .9E-9, 3.3, 3.5E-5, .0058};
01606   static const std::pair<G4int, const G4double*> Z94N143(143,pZ94N143);
01607   static const G4double pZ94N144[7]={6.8E-7, 16., 6.E-4, 0., 2.7, 2.6E-5, .0082};
01608   static const std::pair<G4int, const G4double*> Z94N144(144,pZ94N144);
01609   static const G4double pZ94N145[7]={2.6E-6, 16., .0017, 1.8E-9, 1.8, 2.E-5, .004};
01610   static const std::pair<G4int, const G4double*> Z94N145(145,pZ94N145);
01611   static const G4double pZ94N146[7]={2.5E-7, 20., 9.E-5, 3.6E-8, 3.4, 3.8E-5, 5.4E-4};
01612   static const std::pair<G4int, const G4double*> Z94N146(146,pZ94N146);
01613   static const G4double pZ94N147[7]={1.4E-5, 16., .01, .8E-9, 2.7, 2.6E-5, .0055};
01614   static const std::pair<G4int, const G4double*> Z94N147(147,pZ94N147);
01615   static const G4double pZ94N148[7]={3.4E-7, 20., 1.3E-4, 1.2E-9, 3.2, 3.E-5, .0036};
01616   static const std::pair<G4int, const G4double*> Z94N148(148,pZ94N148);
01617   static const G4double pZ94N149[7]={5.2E-6, 20., .0035, .4E-9, 2.3, 3.E-5, .0095};
01618   static const std::pair<G4int, const G4double*> Z94N149(149,pZ94N149);
01619   static const G4double pZ94N150[7]={3.3E-7, 20., 1.6E-4, 1.2E-9, 3., 3.E-5, .0046};
01620   static const std::pair<G4int, const G4double*> Z94N150(150,pZ94N150);
01621   static const G4double pZ94N152[7]={2.5E-6, 16., .0018, 1.2E-9, 3., 3.1E-5, .0052};
01622   static const std::pair<G4int, const G4double*> Z94N152(152,pZ94N152);
01623   static const std::pair<G4int, const G4double*> Z94[N94]={Z94N142, Z94N143, Z94N144,
01624                                                            Z94N145, Z94N146, Z94N147,
01625                                                            Z94N148, Z94N149, Z94N150,
01626                                                            Z94N152};
01627   //==> Am(Z=95)
01628   static const G4int N95=4;
01629   static const G4double pZ95N156[7]={2.5E-6, 18., .0016, .9E-9, 2., 2.3E-5, .0058};
01630   static const std::pair<G4int, const G4double*> Z95N156(156,pZ95N156);
01631   static const G4double pZ95N157[7]={5.E-6, 18., .003, 2.7E-9, 2., 2.3E-5, .0039};
01632   static const std::pair<G4int, const G4double*> Z95N157(157,pZ95N157);
01633   static const G4double pZ95N158[7]={5.E-6, 19., .0033, 2.6E-9, 2., 2.3E-5, .0044};
01634   static const std::pair<G4int, const G4double*> Z95N158(158,pZ95N158);
01635   static const G4double pZ95N159[7]={5.E-5, 20., .029, 1.1E-9, 2., 2.3E-5, .0057};
01636   static const std::pair<G4int, const G4double*> Z95N159(159,pZ95N159);
01637   static const std::pair<G4int, const G4double*> Z95[N95]={Z95N156, Z95N157, Z95N158,
01638                                                            Z95N159};
01639   //==> Cm(Z=96)
01640   static const G4int N96=10;
01641   static const G4double pZ96N145[7]={5.E-5, 22., .027, 1.1E-9, 2.2, 2.2E-5, .006};
01642   static const std::pair<G4int, const G4double*> Z96N145(145,pZ96N145);
01643   static const G4double pZ96N146[7]={5.E-5, 24., .027, 2.E-9, 2.2, 2.2E-5, .0055};
01644   static const std::pair<G4int, const G4double*> Z96N146(146,pZ96N146);
01645   static const G4double pZ96N147[7]={5.E-5, 22., .025, 2.5E-9, 2.2, 2.4E-5, .0044};
01646   static const std::pair<G4int, const G4double*> Z96N147(147,pZ96N147);
01647   static const G4double pZ96N148[7]={5.E-5, 23., .028, 1.9E-9, 2.2, 3.E-5, .0055};
01648   static const std::pair<G4int, const G4double*> Z96N148(148,pZ96N148);
01649   static const G4double pZ96N149[7]={5.E-5, 23., .025, 1.6E-9, 3., 3.5E-5, .0054};
01650   static const std::pair<G4int, const G4double*> Z96N149(149,pZ96N149);
01651   static const G4double pZ96N150[7]={5.E-5, 24., .026, 2.E-9, 3., 3.6E-5, .0045};
01652   static const std::pair<G4int, const G4double*> Z96N150(150,pZ96N150);
01653   static const G4double pZ96N151[7]={5.E-5, 24., .022, 2.4E-9, 3., 3.6E-5, .0039};
01654   static const std::pair<G4int, const G4double*> Z96N151(151,pZ96N151);
01655   static const G4double pZ96N152[7]={6.5E-7, 25., 2.E-4, 3.4E-9, 3., 3.6E-5, .003};
01656   static const std::pair<G4int, const G4double*> Z96N152(152,pZ96N152);
01657   static const G4double pZ96N153[7]={1.6E-6, 21., 7.E-4, 1.4E-9, 3., 3.6E-5, .0045};
01658   static const std::pair<G4int, const G4double*> Z96N153(153,pZ96N153);
01659   static const G4double pZ96N154[7]={1.3E-5, 16., .016, 0., 3., 3.6E-5, .017};
01660   static const std::pair<G4int, const G4double*> Z96N154(154,pZ96N154);
01661   static const std::pair<G4int, const G4double*> Z96[N96]={Z96N145, Z96N146, Z96N147,
01662                                                            Z96N148, Z96N149, Z96N150,
01663                                                            Z96N151, Z96N152, Z96N153,
01664                                                            Z96N154};
01665   //==> Bk(Z=97)
01666   static const G4int N97=2;
01667   static const G4double pZ97N152[7]={6.5E-7, 22., 3.5E-4, 2.7E-9, 3., 4.E-5, .004};
01668   static const std::pair<G4int, const G4double*> Z97N152(152,pZ97N152);
01669   static const G4double pZ97N153[7]={6.5E-6, 22., .0036, 1.E-9, 2.7, 4.E-5, .006};
01670   static const std::pair<G4int, const G4double*> Z97N153(153,pZ97N153);
01671   static const std::pair<G4int, const G4double*> Z97[N97]={Z97N152, Z97N153};
01672   //==> Cf(Z=98)
01673   static const G4int N98=6;
01674   static const G4double pZ98N151[7]={6.5E-6, 22., .0035, .9E-9, 3., 4.E-5, .0068};
01675   static const std::pair<G4int, const G4double*> Z98N151(151,pZ98N151);
01676   static const G4double pZ98N152[7]={1.3E-6, 22., 7.E-4, 2.E-9, 2.7, 4.E-5, .0045};
01677   static const std::pair<G4int, const G4double*> Z98N152(152,pZ98N152);
01678   static const G4double pZ98N153[7]={2.6E-6, 22., .0014, 2.1E-9, 2.7, 4.E-5, .0044};
01679   static const std::pair<G4int, const G4double*> Z98N153(153,pZ98N153);
01680   static const G4double pZ98N154[7]={2.6E-6, 22., .0014, 1.3E-9, 2.7, 4.E-5, .0054};
01681   static const std::pair<G4int, const G4double*> Z98N154(154,pZ98N154);
01682   static const G4double pZ98N155[7]={2.6E-5, 22., .03, 0., 2.7, 4.E-5, .03};
01683   static const std::pair<G4int, const G4double*> Z98N155(155,pZ98N155);
01684   static const G4double pZ98N156[7]={5.2E-7, 22., 2.6E-4, 1.3E-9, 2.7, 4.E-5, .005};
01685   static const std::pair<G4int, const G4double*> Z98N156(156,pZ98N156);
01686   static const std::pair<G4int, const G4double*> Z98[N98]={Z98N151, Z98N152, Z98N153,
01687                                                            Z98N154, Z98N155, Z98N156};
01688  
01689   static const G4int NZ=99; // #of Elements covered by CHIPS elastic
01690   static const std::pair<G4int, const G4double*>* Pars[NZ]={Z0,Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,
01691     Z10,Z11,Z12,Z13,Z14,Z15,Z16,Z17,Z18,Z19,Z20,Z21,Z22,Z23,Z24,Z25,Z26,Z27,Z28,Z29,Z30,
01692     Z31,Z32,Z33,Z34,Z35,Z36,Z37,Z38,Z39,Z40,Z41,Z42,Z43,Z44,Z45,Z46,Z47,Z48,Z49,Z50,Z51,
01693     Z52,Z53,Z54,Z55,Z56,Z57,Z58,Z59,Z60,Z61,Z62,Z63,Z64,Z65,Z66,Z67,Z68,Z69,Z70,Z71,Z72,
01694     Z73,Z74,Z75,Z76,Z77,Z78,Z79,Z80,Z81,Z82,Z83,Z84,Z85,Z86,Z87,Z88,Z89,Z90,Z91,Z92,Z93,
01695     Z94,Z95,Z96,Z97,Z98};
01696   static const G4int NIso[NZ]={N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,
01697     N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34,N35,N36,N37,
01698     N38,N39,N40,N41,N42,N43,N44,N45,N46,N47,N48,N49,N50,N51,N52,N53,N54,N55,N56,N57,N58,
01699     N59,N60,N61,N62,N63,N64,N65,N66,N67,N68,N69,N70,N71,N72,N73,N74,N75,N76,N77,N78,N79,
01700     N80,N81,N82,N83,N84,N85,N86,N87,N88,N89,N90,N91,N92,N93,N94,N95,N96,N97,N98};
01701   if(PDG==2112)
01702   {
01703     // --- Total np elastic cross section cs & s1/b1 (t), s2/b2 (u) --- NotTuned for highE
01704     //p2=p*p;p3=p2*p;sp=sqrt(p);p2s=p2*sp;lp=log(p);dl1=lp-(5.=par(3));p4=p2*p2; p=|3-mom|
01705     //CS=12./(p2s+.05*p+.0001/sqrt(sp))+.35/p+(6.75+.14*dl1*dl1+19./p)/(1.+.6/p4);
01706     //  par(0)   par(1) par(2)        par(4) par(5) par(6)     par(7)     par(8)
01707     //s1=(6.75+.14*dl2*dl2+13./p)/(1.+.14/p4)+.6/(p4+.00013), s2=(75.+.001/p4/p)/p3
01708     //  par(9) par(10)   par(11)     par(12) par(13) par(14)  par(15) par(16)
01709     //b1=(7.2+4.32/(p4*p4+.012*p3))/(1.+2.5/p4), ss=0., b2=12./(p*sp+.34)
01710     //par(17) par(18)    par(19)       par(20)  par(21)   par(22)   par(23)
01711     //
01712     if(lastPAR[nLast]!=pwd) // A unique flag to avoid the repeatable definition
01713     {
01714       if ( tgZ == 1 && tgN == 0 )
01715       {
01716         for (G4int ip=0; ip<n_npel; ip++) lastPAR[ip]=np_el[ip]; // np
01717       }
01718       else if ( tgZ == 0 && tgN == 1 )
01719       {
01720         for (G4int ip=0; ip<n_ppel; ip++) lastPAR[ip]=pp_el[ip]; // nn
01721       }
01722       else
01723       {
01724         G4double a=tgZ+tgN;
01725         G4double ala=std::log(a); // for powers of a
01726         G4double sa=std::sqrt(a);
01727         G4double ssa=std::sqrt(sa);
01728         G4double asa=a*sa;
01729         G4double a2=a*a;
01730         G4double a3=a2*a;
01731         G4double a4=a3*a;
01732         G4double a5=a4*a;
01733         G4double a6=a4*a2;
01734         G4double a7=a6*a;
01735         G4double a8=a7*a;
01736         G4double a9=a8*a;
01737         G4double a10=a5*a5;
01738         G4double a12=a6*a6;
01739         G4double a14=a7*a7;
01740         G4double a16=a8*a8;
01741         G4double a17=a16*a;
01742         G4double a32=a16*a16;
01743         // Reaction cross-section parameters (na_el.f)
01744         lastPAR[ 0]=5./(1.+22./asa);                                          // p1
01745         lastPAR[ 1]=4.8*std::exp(ala*1.14)/(1.+3.6/a3);                       // p2
01746         lastPAR[ 2]=1./(1.+.004*a4)+2.E-6*a3/(1.+1.3E-6*a3);                  // p3
01747         lastPAR[ 3]=.07*asa/(1.+.009*a2);                                     // o4
01748         lastPAR[ 5]=1.7*a;                                                    // p5
01749         lastPAR[ 6]=5.5E-6*std::exp(ala*1.3);                                 // p6
01750         lastPAR[13]=0.;                                                       // reserved
01751         lastPAR[14]=0.;                                                       // reserved
01752         G4int nn=NIso[tgZ];
01753 #ifdef pdebug
01754           G4cout<<"G4QNElCrS::CalcCS: Z="<<tgZ<<", nIs="<<nn<<G4endl;
01755 #endif
01756         G4bool nfound=true;
01757         if(nn) for (G4int in=0; in<nn; in++)
01758         {
01759           std::pair<G4int, const G4double*> curIs=Pars[tgZ][in];
01760           G4int cn=curIs.first;
01761 #ifdef pdebug
01762            G4cout<<"G4QNElCrS::CalcCS: N="<<tgN<<", cn="<<cn<<G4endl;
01763 #endif
01764           if(cn == tgN)
01765           {
01766             const G4double* curT=curIs.second;
01767             lastPAR[ 4]=curT[0];                                           // p4
01768             lastPAR[ 7]=curT[1];                                           // p7
01769             lastPAR[ 8]=curT[2];                                           // p8
01770             lastPAR[ 9]=curT[3];                                           // p9
01771             lastPAR[10]=curT[4];                                           // p10
01772             lastPAR[11]=curT[5];                                           // p11
01773             lastPAR[12]=curT[6];                                           // p12
01774 #ifdef pdebug
01775                 G4cout<<"G4QNElCrS::CalcCS: Parameters are filled, p12="<<lastPAR[12]<<G4endl;
01776 #endif
01777             nfound = false;
01778             break;
01779           }
01780         }
01781         if(nfound) 
01782         {
01783           G4cout<<"-Warning-G4QNeutronElasticCrossSection::CalcCS: Z="<<tgZ<<", N="<<tgN
01784                 <<" isotope is not implemented in CHIPS"<<G4endl; // Put default values:
01785           lastPAR[ 4]=5.2E-7;                                              // p4
01786           lastPAR[ 7]=22.;                                                 // p7
01787           lastPAR[ 8]=.00026;                                              // p8
01788           lastPAR[ 9]=1.3E-9;                                              // p9
01789           lastPAR[10]=2.7;                                                 // p10
01790           lastPAR[11]=4.E-5;                                               // p11
01791           lastPAR[12]=.005;                                                // p12          
01792         }
01793         // @@ the differential cross-section is parameterized separately for A>6 & A<7
01794         if(a<6.5)
01795         {
01796           G4double a28=a16*a12;
01797           // The main pre-exponent      (pel_sg)
01798           lastPAR[15]=4000*a;                                // p1
01799           lastPAR[16]=1.2e7*a8+380*a17;                      // p2
01800           lastPAR[17]=.7/(1.+4.e-12*a16);                    // p3
01801           lastPAR[18]=2.5/a8/(a4+1.e-16*a32);                // p4
01802           lastPAR[19]=.28*a;                                 // p5
01803           lastPAR[20]=1.2*a2+2.3;                            // p6
01804           lastPAR[21]=3.8/a;                                 // p7
01805           // The main slope             (pel_sl)
01806           lastPAR[22]=.01/(1.+.0024*a5);                     // p1
01807           lastPAR[23]=.2*a;                                  // p2
01808           lastPAR[24]=9.e-7/(1.+.035*a5);                    // p3
01809           lastPAR[25]=(42.+2.7e-11*a16)/(1.+.14*a);          // p4
01810           // The main quadratic         (pel_sh)
01811           lastPAR[26]=2.25*a3;                               // p1
01812           lastPAR[27]=18.;                                   // p2
01813           lastPAR[28]=.0024*a8/(1.+2.6e-4*a7);              // p3
01814           lastPAR[29]=3.5e-36*a32*a8/(1.+5.e-15*a32/a);      // p4
01815           lastPAR[30]=1.e5/(a8+2.5e12/a16);                  // p1
01816           lastPAR[31]=8.e7/(a12+1.e-27*a28*a28);             // p2 
01817           lastPAR[32]=.0006*a3;                              // p3
01818           // The 1st max slope          (pel_qs)
01819           lastPAR[33]=10.+4.e-8*a12*a;                       // p1
01820           lastPAR[34]=.114;                                  // p2
01821           lastPAR[35]=.003;                                  // p3
01822           lastPAR[36]=2.e-23;                                // p4
01823           // The effective pre-exponent (pel_ss)
01824           lastPAR[37]=1./(1.+.0001*a8);                      // p1
01825           lastPAR[38]=1.5e-4/(1.+5.e-6*a12);                 // p2
01826           lastPAR[39]=.03;                                   // p3
01827           // The effective slope        (pel_sb)
01828           lastPAR[40]=a/2;                                   // p1
01829           lastPAR[41]=2.e-7*a4;                              // p2
01830           lastPAR[42]=4.;                                    // p3
01831           lastPAR[43]=64./a3;                                // p4
01832           // The gloria pre-exponent    (pel_us)
01833           lastPAR[44]=1.e8*std::exp(.32*asa);                // p1
01834           lastPAR[45]=20.*std::exp(.45*asa);                 // p2
01835           lastPAR[46]=7.e3+2.4e6/a5;                         // p3
01836           lastPAR[47]=2.5e5*std::exp(.085*a3);               // p4
01837           lastPAR[48]=2.5*a;                                 // p5
01838           // The gloria slope           (pel_ub)
01839           lastPAR[49]=920.+.03*a8*a3;                        // p1
01840           lastPAR[50]=93.+.0023*a12;                         // p2
01841 #ifdef debug
01842          G4cout<<"G4QNElCrS::CalcCS:la "<<lastPAR[44]<<", "<<lastPAR[45]<<", "<<lastPAR[46]
01843                <<", "<<lastPAR[48]<<", "<<lastPAR[49]<<", "<<lastPAR[50]<<G4endl;
01844 #endif
01845         }
01846         else
01847         {
01848           G4double p1a10=2.2e-28*a10;
01849           G4double r4a16=6.e14/a16;
01850           G4double s4a16=r4a16*r4a16;
01851           // a24
01852           // a36
01853           // The main pre-exponent      (peh_sg)
01854           lastPAR[15]=4.5*std::pow(a,1.15);                  // p1
01855           lastPAR[16]=.06*std::pow(a,.6);                    // p2
01856           lastPAR[17]=.6*a/(1.+2.e15/a16);                   // p3
01857           lastPAR[18]=.17/(a+9.e5/a3+1.5e33/a32);            // p4
01858           lastPAR[19]=(.001+7.e-11*a5)/(1.+4.4e-11*a5);      // p5
01859           lastPAR[20]=(p1a10*p1a10+2.e-29)/(1.+2.e-22*a12);  // p6
01860           // The main slope             (peh_sl)
01861           lastPAR[21]=400./a12+2.e-22*a9;                    // p1
01862           lastPAR[22]=1.e-32*a12/(1.+5.e22/a14);             // p2
01863           lastPAR[23]=1000./a2+9.5*sa*ssa;                   // p3
01864           lastPAR[24]=4.e-6*a*asa+1.e11/a16;                 // p4
01865           lastPAR[25]=(120./a+.002*a2)/(1.+2.e14/a16);       // p5
01866           lastPAR[26]=9.+100./a;                             // p6
01867           // The main quadratic         (peh_sh)
01868           lastPAR[27]=.002*a3+3.e7/a6;                       // p1
01869           lastPAR[28]=7.e-15*a4*asa;                         // p2
01870           lastPAR[29]=9000./a4;                              // p3
01871           // The 1st max pre-exponent   (peh_qq)
01872           lastPAR[30]=.0011*asa/(1.+3.e34/a32/a4);           // p1
01873           lastPAR[31]=1.e-5*a2+2.e14/a16;                    // p2
01874           lastPAR[32]=1.2e-11*a2/(1.+1.5e19/a12);            // p3
01875           lastPAR[33]=.016*asa/(1.+5.e16/a16);               // p4
01876           // The 1st max slope          (peh_qs)
01877           lastPAR[34]=.002*a4/(1.+7.e7/std::pow(a-6.83,14)); // p1
01878           lastPAR[35]=2.e6/a6+7.2/std::pow(a,.11);           // p2
01879           lastPAR[36]=11.*a3/(1.+7.e23/a16/a8);              // p3
01880           lastPAR[37]=100./asa;                              // p4
01881           // The 2nd max pre-exponent   (peh_ss)
01882           lastPAR[38]=(.1+4.4e-5*a2)/(1.+5.e5/a4);           // p1
01883           lastPAR[39]=3.5e-4*a2/(1.+1.e8/a8);                // p2
01884           lastPAR[40]=1.3+3.e5/a4;                           // p3
01885           lastPAR[41]=500./(a2+50.)+3;                       // p4
01886           lastPAR[42]=1.e-9/a+s4a16*s4a16;                   // p5
01887           // The 2nd max slope          (peh_sb)
01888           lastPAR[43]=.4*asa+3.e-9*a6;                       // p1
01889           lastPAR[44]=.0005*a5;                              // p2
01890           lastPAR[45]=.002*a5;                               // p3
01891           lastPAR[46]=10.;                                   // p4
01892           // The effective pre-exponent (peh_us)
01893           lastPAR[47]=.05+.005*a;                            // p1
01894           lastPAR[48]=7.e-8/sa;                              // p2
01895           lastPAR[49]=.8*sa;                                 // p3
01896           lastPAR[50]=.02*sa;                                // p4
01897           lastPAR[51]=1.e8/a3;                               // p5
01898           lastPAR[52]=3.e32/(a32+1.e32);                     // p6
01899           // The effective slope        (peh_ub)
01900           lastPAR[53]=24.;                                   // p1
01901           lastPAR[54]=20./sa;                                // p2
01902           lastPAR[55]=7.e3*a/(sa+1.);                        // p3
01903           lastPAR[56]=900.*sa/(1.+500./a3);                  // p4
01904 #ifdef debug
01905          G4cout<<"G4QNElCrS::CalcCS:ha "<<lastPAR[47]<<", "<<lastPAR[48]<<", "<<lastPAR[49]
01906                <<", "<<lastPAR[50]<<", "<<lastPAR[51]<<", "<<lastPAR[52]<<G4endl;
01907 #endif
01908         }
01909         // Parameter for lowEnergyNeutrons
01910         lastPAR[57]=1.e15+2.e27/a4/(1.+2.e-18*a16);
01911       }
01912       lastPAR[nLast]=pwd;
01913       // and initialize the zero element of the table
01914       G4double lp=lPMin;                                      // ln(momentum)
01915       G4bool memCS=onlyCS;                                    // ??
01916       onlyCS=false;
01917       lastCST[0]=GetTabValues(lp, PDG, tgZ, tgN); // Calculate AMDB tables
01918       onlyCS=memCS;
01919       lastSST[0]=theSS;
01920       lastS1T[0]=theS1;
01921       lastB1T[0]=theB1;
01922       lastS2T[0]=theS2;
01923       lastB2T[0]=theB2;
01924       lastS3T[0]=theS3;
01925       lastB3T[0]=theB3;
01926       lastS4T[0]=theS4;
01927       lastB4T[0]=theB4;
01928 #ifdef debug
01929       G4cout<<"G4QNeutronElasticCrossSection::GetPTables: ip=0(init), lp="<<lp<<", S1="
01930             <<theS1<<",B1="<<theB1<<",S2="<<theS2<<",B2="<<theB3<<",S3="<<theS3
01931             <<",B3="<<theB3<<",S4="<<theS4<<",B4="<<theB4<<G4endl;
01932 #endif
01933     }
01934     if(LP>ILP)
01935     {
01936       G4int ini = static_cast<int>((ILP-lPMin+.000001)/dlnP)+1; // already inited till this
01937       if(ini<0) ini=0;
01938       if(ini<nPoints)
01939       {
01940         G4int fin = static_cast<int>((LP-lPMin)/dlnP)+1; // final bin of initialization
01941         if(fin>=nPoints) fin=nLast;               // Limit of the tabular initialization
01942         if(fin>=ini)
01943         {
01944           G4double lp=0.;
01945           for(G4int ip=ini; ip<=fin; ip++)        // Calculate tabular CS,S1,B1,S2,B2,S3,B3
01946           {
01947             lp=lPMin+ip*dlnP;                     // ln(momentum)
01948             G4bool memCS=onlyCS;
01949             onlyCS=false;
01950             lastCST[ip]=GetTabValues(lp, PDG, tgZ, tgN); // Calculate AMDB tables (ret CS)
01951             onlyCS=memCS;
01952             lastSST[ip]=theSS;
01953             lastS1T[ip]=theS1;
01954             lastB1T[ip]=theB1;
01955             lastS2T[ip]=theS2;
01956             lastB2T[ip]=theB2;
01957             lastS3T[ip]=theS3;
01958             lastB3T[ip]=theB3;
01959             lastS4T[ip]=theS4;
01960             lastB4T[ip]=theB4;
01961 #ifdef debug
01962             G4cout<<"G4QNeutronElasticCrossSection::GetPTables: ip="<<ip<<", lp="<<lp
01963                   <<", S1="<<theS1<<", B1="<<theB1<<", S2="<<theS2<<", B2="<<theB2<<", S3="
01964                   <<theS3<<", B3="<<theB3<<", S4="<<theS4<<", B4="<<theB4<<G4endl;
01965 #endif
01966           }
01967           return lp;
01968         }
01969         else G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetPTables: PDG="<<PDG
01970                    <<", Z="<<tgZ<<", N="<<tgN<<", i="<<ini<<" > fin="<<fin<<", LP="<<LP
01971                    <<" > ILP="<<ILP<<" nothing is done!"<<G4endl;
01972       }
01973       else G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetPTables: PDG="<<PDG<<", Z="
01974                  <<tgZ<<", N="<<tgN<<", i="<<ini<<">= max="<<nPoints<<", LP="<<LP
01975                  <<" > ILP="<<ILP<<", lPMax="<<lPMax<<" nothing is done!"<<G4endl;
01976     }
01977 #ifdef debug
01978     else G4cout<<"*Warning*G4QNeutronElasticCrossSect::GetPTables: PDG="<<PDG<<", Z="<<tgZ
01979                <<", N="<<tgN<<", LP="<<LP<<" <= ILP="<<ILP<<" nothing is done!"<<G4endl;
01980 #endif
01981   }
01982   else
01983   {
01984     // G4cout<<"*Error*G4QNeutronElasticCrossSection::GetPTables: PDG="<<PDG<<", Z="<<tgZ
01985     //       <<", N="<<tgN<<", while it is defined only for PDG=2112(n)"<<G4endl;
01986     // throw G4QException("G4QNeutronElasticCrossSection::GetPTables:only nA're implemented");
01987     G4ExceptionDescription ed;
01988     ed << "PDG = " << PDG << ", Z = " << tgZ <<", N = " << tgN
01989        << ", while it is defined only for PDG=2112 (n)" << G4endl;
01990     G4Exception("G4QNeutronElasticCrossSection::GetPTables()", "HAD_CHPS_0000",
01991                 FatalException, ed);
01992   }
01993   return ILP;
01994 }
01995 
01996 // Returns Q2=-t in independent units (MeV^2) (all internal calculations are in GeV)
01997 G4double G4QNeutronElasticCrossSection::GetExchangeT(G4int tgZ, G4int tgN, G4int PDG)
01998 {
01999   static const G4double GeVSQ=gigaelectronvolt*gigaelectronvolt;
02000   static const G4double third=1./3.;
02001   static const G4double fifth=1./5.;
02002   static const G4double sevth=1./7.;
02003 #ifdef tdebug
02004   G4cout<<"G4QNeutElCrS::GetExcT:F="<<onlyCS<<",Z="<<tgZ<<",N="<<tgN<<",PDG="<<PDG<<G4endl;
02005 #endif
02006   if(PDG!=2112) G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExT:PDG="<<PDG<<G4endl;
02007   if(onlyCS) G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExchangeT:onCS=1"<<G4endl;
02008   if(lastLP<-4.3) return lastTM*GeVSQ*G4UniformRand();// S-wave for p<14 MeV/c (kinE<.1MeV)
02009   G4double q2=0.;
02010   if(tgZ==1 && tgN==0)                // ===> n+p=n+p
02011   {
02012 #ifdef tdebug
02013     G4cout<<"G4QNeutronElasticCrS::GetExchangeT: TM="<<lastTM<<",S1="<<theS1<<",B1="<<theB1
02014           <<",S2="<<theS2<<",B2="<<theB2<<",GeV2="<<GeVSQ<<G4endl;
02015 #endif
02016     G4double E1=lastTM*theB1;
02017     G4double R1=(1.-std::exp(-E1));
02018 #ifdef tdebug
02019     G4double ts1=-std::log(1.-R1)/theB1;
02020     G4double ds1=std::fabs(ts1-lastTM)/lastTM;
02021     if(ds1>.0001)
02022       G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExT:1n "<<ts1<<"#"<<lastTM<<",d="
02023             <<ds1<<",R1="<<R1<<",E1="<<E1<<G4endl;
02024 #endif
02025     G4double E2=lastTM*theB2;
02026     G4double R2=(1.-std::exp(-E2));
02027 #ifdef tdebug
02028     G4double ts2=-std::log(1.-R2)/theB2;
02029     G4double ds2=std::fabs(ts2-lastTM)/lastTM;
02030     if(ds2>.0001)
02031       G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExT:2n "<<ts2<<"#"<<lastTM<<",d="
02032             <<ds2<<",R2="<<R2<<",E2="<<E2<<G4endl;
02033 #endif
02034     //G4double E3=lastTM*theB3;
02035     //G4double R3=(1.-std::exp(-E3));
02036 #ifdef tdebug
02037     //G4double ts3=-std::log(1.-R3)/theB3;
02038     //G4double ds3=std::fabs(ts3-lastTM)/lastTM;
02039     //if(ds3>.01)G4cout<<"Warn*G4QNElCS::GetExT:3n="<<ts3<<"#"<<lastTM<<",d="<<ds3<<G4endl;
02040 #endif
02041     G4double I1=R1*theS1;
02042     G4double I2=R2*theS2/theB2;
02043     //G4double I3=R3*theS3/theB3;
02044     G4double I12=I1+I2;
02045     //G4double rand=(I12+I3)*G4UniformRand();
02046     G4double rand=I12*G4UniformRand();
02047     if     (rand<I1 )
02048     {
02049       G4double ran=R1*G4UniformRand();
02050       if(ran>1.) ran=1.;
02051       q2=-std::log(1.-ran)/theB1;       // t-chan
02052     }
02053     else
02054     {
02055       G4double ran=R2*G4UniformRand();
02056       if(ran>1.) ran=1.;
02057       q2=lastTM+std::log(1.-ran)/theB2; // u-chan (ChEx)
02058     }
02059   }
02060   else
02061   {
02062     G4double a=tgZ+tgN;
02063 #ifdef tdebug
02064     G4cout<<"G4QNeutronElCroSec::GetExT:a="<<a<<",t="<<lastTM<<",S1="<<theS1<<",B1="<<theB1
02065           <<",SS="<<theSS<<",S2="<<theS2<<",B2="<<theB2<<",S3="<<theS3<<",B3="<<theB3
02066           <<",S4="<<theS4<<",B4="<<theB4<<G4endl;
02067 #endif
02068     G4double E1=lastTM*(theB1+lastTM*theSS);
02069     G4double R1=(1.-std::exp(-E1));
02070     G4double tss=theSS+theSS; // for future solution of quadratic equation (imediate check)
02071 #ifdef tdebug
02072     G4double ts1=-std::log(1.-R1)/theB1;
02073     if(std::fabs(tss)>1.e-7) ts1=(std::sqrt(theB1*(theB1+(tss+tss)*ts1))-theB1)/tss;
02074     G4double ds1=(ts1-lastTM)/lastTM;
02075     if(ds1>.0001)
02076       G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExT:1a "<<ts1<<"#"<<lastTM<<",d="
02077             <<ds1<<",R1="<<R1<<",E1="<<E1<<G4endl;
02078 #endif
02079     G4double tm2=lastTM*lastTM;
02080     G4double E2=lastTM*tm2*theB2;                   // power 3 for lowA, 5 for HighA (1st)
02081     if(a>6.5)E2*=tm2;                               // for heavy nuclei
02082     G4double R2=(1.-std::exp(-E2));
02083 #ifdef tdebug
02084     G4double ts2=-std::log(1.-R2)/theB2;
02085     if(a<6.5)ts2=std::pow(ts2,third);
02086     else     ts2=std::pow(ts2,fifth);
02087     G4double ds2=std::fabs(ts2-lastTM)/lastTM;
02088     if(ds2>.0001)
02089       G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExT:2a "<<ts2<<"#"<<lastTM<<",d="
02090             <<ds2<<",R2="<<R2<<",E2="<<E2<<G4endl;
02091 #endif
02092     G4double E3=lastTM*theB3;
02093     if(a>6.5)E3*=tm2*tm2*tm2;                       // power 1 for lowA, 7 (2nd) for HighA
02094     G4double R3=(1.-std::exp(-E3));
02095 #ifdef tdebug
02096     G4double ts3=-std::log(1.-R3)/theB3;
02097     if(a>6.5)ts3=std::pow(ts3,sevth);
02098     G4double ds3=std::fabs(ts3-lastTM)/lastTM;
02099     if(ds3>.0001)
02100       G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExT:3a "<<ts3<<"#"<<lastTM<<",d="
02101             <<ds3<<",R3="<<R3<<",E3="<<E3<<G4endl;
02102 #endif
02103     G4double E4=lastTM*theB4;
02104     G4double R4=(1.-std::exp(-E4));
02105 #ifdef tdebug
02106     G4double ts4=-std::log(1.-R4)/theB4;
02107     G4double ds4=std::fabs(ts4-lastTM)/lastTM;
02108     if(ds4>.0001)
02109       G4cout<<"*Warning*G4QNeutronElasticCrissSection::GetExT:4a "<<ts4<<"#"<<lastTM<<",d="
02110             <<ds4<<",R4="<<R4<<",E4="<<E4<<G4endl;
02111 #endif
02112     G4double I1=R1*theS1;
02113     G4double I2=R2*theS2;
02114     G4double I3=R3*theS3;
02115     G4double I4=R4*theS4;
02116     G4double I12=I1+I2;
02117     G4double I13=I12+I3;
02118     G4double rand=(I13+I4)*G4UniformRand();
02119 #ifdef tdebug
02120     G4cout<<"G4QNElCS::GtExT:1="<<I1<<",2="<<I2<<",3="<<I3<<",4="<<I4<<",r="<<rand<<G4endl;
02121 #endif
02122     if(rand<I1)
02123     {
02124       G4double ran=R1*G4UniformRand();
02125       if(ran>1.) ran=1.;
02126       q2=-std::log(1.-ran)/theB1;
02127       if(std::fabs(tss)>1.e-7) q2=(std::sqrt(theB1*(theB1+(tss+tss)*q2))-theB1)/tss;
02128 #ifdef tdebug
02129       G4cout<<"G4QNElCS::GetET:Q2="<<q2<<",ss="<<tss/2<<",b1="<<theB1<<",t1="<<ts1<<G4endl;
02130 #endif
02131     }
02132     else if(rand<I12)
02133     {
02134       G4double ran=R2*G4UniformRand();
02135       if(ran>1.) ran=1.;
02136       q2=-std::log(1.-ran)/theB2;
02137       if(q2<0.) q2=0.;
02138       if(a<6.5) q2=std::pow(q2,third);
02139       else      q2=std::pow(q2,fifth);
02140 #ifdef tdebug
02141       G4cout<<"G4QNElCS::GetExT: Q2="<<q2<<",r2="<<R2<<", b2="<<theB2<<",t2="<<ts2<<G4endl;
02142 #endif
02143     }
02144     else if(rand<I13)
02145     {
02146       G4double ran=R3*G4UniformRand();
02147       if(ran>1.) ran=1.;
02148       q2=-std::log(1.-ran)/theB3;
02149       if(q2<0.) q2=0.;
02150       if(a>6.5) q2=std::pow(q2,sevth);
02151 #ifdef tdebug
02152       G4cout<<"G4QNElCS::GetExT:Q2="<<q2<<", r3="<<R2<<", b3="<<theB2<<",t3="<<ts2<<G4endl;
02153 #endif
02154     }
02155     else
02156     {
02157       G4double ran=R4*G4UniformRand();
02158       if(ran>1.) ran=1.;
02159       q2=-std::log(1.-ran)/theB4;
02160       if(a<6.5) q2=lastTM-q2;                    // u reduced for lightA (starts from 0)
02161 #ifdef tdebug
02162       G4cout<<"G4QNElCS::GetET:Q2="<<q2<<",m="<<lastTM<<",b4="<<theB3<<",t4="<<ts3<<G4endl;
02163 #endif
02164     }
02165   }
02166   if(q2<0.) q2=0.;
02167   if(!(q2>=-1.||q2<=1.)) G4cout<<"*NAN*G4QNeutronElCroSect::GetExchangeT: -t="<<q2<<G4endl;
02168   if(q2>lastTM)
02169   {
02170 #ifdef tdebug
02171     G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetExT:-t="<<q2<<" >"<<lastTM<<G4endl;
02172 #endif
02173     q2=lastTM;
02174   }
02175   return q2*GeVSQ;
02176 }
02177 
02178 // Returns B in independent units (MeV^-2) (all internal calculations are in GeV) see ExT
02179 G4double G4QNeutronElasticCrossSection::GetSlope(G4int tgZ, G4int tgN, G4int PDG)
02180 {
02181   static const G4double GeVSQ=gigaelectronvolt*gigaelectronvolt;
02182 #ifdef tdebug
02183   G4cout<<"G4QNeutrElCS::GetSlope:"<<onlyCS<<", Z="<<tgZ<<",N="<<tgN<<",PDG="<<PDG<<G4endl;
02184 #endif
02185   if(onlyCS) G4cout<<"Warning*G4QNeutronElasticCrossSection::GetSlope:onlyCS=true"<<G4endl;
02186   if(lastLP<-4.3) return 0.;          // S-wave for p<14 MeV/c (kinE<.1MeV)
02187   if(PDG!=2112)
02188   {
02189     // G4cout<<"*Error*G4QNeutronElasticCrossSection::GetSlope: PDG="<<PDG<<", Z="<<tgZ
02190     //       <<", N="<<tgN<<", while it is defined only for PDG=2112"<<G4endl;
02191     // throw G4QException("G4QNeutronElasticCrossSection::GetSlope: only nA are implemented");
02192     G4ExceptionDescription ed;
02193     ed << "PDG = " << PDG << ", Z = " << tgZ << ", N = " << tgN
02194        <<", while it is defined only for PDG=2112 (n) " << G4endl;
02195     G4Exception("G4QNeutronElasticCrossSection::GetSlope()", "HAD_CHPS_0000",
02196                 FatalException, ed);
02197   }
02198   if(theB1<0.) theB1=0.;
02199   if(!(theB1>=-1.||theB1<=1.))G4cout<<"*NAN*G4QNeutElasticCrosS::Getslope:"<<theB1<<G4endl;
02200   return theB1/GeVSQ;
02201 }
02202 
02203 // Returns half max(Q2=-t) in independent units (MeV^2)
02204 G4double G4QNeutronElasticCrossSection::GetHMaxT()
02205 {
02206   static const G4double HGeVSQ=gigaelectronvolt*gigaelectronvolt/2.;
02207   return lastTM*HGeVSQ;
02208 }
02209 
02210 // lastLP is used, so calculating tables, one need to remember and then recover lastLP
02211 G4double G4QNeutronElasticCrossSection::GetTabValues(G4double lp, G4int PDG, G4int tgZ,
02212                                                      G4int tgN)
02213 {
02214   if(PDG!=2112) G4cout<<"*Warning*G4QNeutronElasticCrossSection::GetTaV:PDG="<<PDG<<G4endl;
02215   if(tgZ<0 || tgZ>92)
02216   {
02217     G4cout<<"*Warning*G4QNElasticCrS::GetTabValue: (1-92) No isotopes for Z="<<tgZ<<G4endl;
02218     return 0.;
02219   }
02220   G4int iZ=tgZ-1; // Z index
02221   if(iZ<0)
02222   {
02223     iZ=0;         // conversion of the neutron target to the proton target
02224     tgZ=1;
02225     tgN=0;
02226   }
02227   //if(nN[iZ][0] < 0)
02228   //{
02229 #ifdef isodebug
02230   //  G4cout<<"*Warning*G4QNeutronElasticCS::GetTabValue: No isotopes for Z="<<tgZ<<G4endl;
02231 #endif
02232   //  return 0.;
02233   //}
02234 #ifdef debug
02235   G4cout<<"G4QNElasticCS::GetTabVal:lp="<<lp<<",Z="<<tgZ<<",N="<<tgN<<",PDG="<<PDG<<G4endl;
02236 #endif
02237   G4double p=std::exp(lp);              // momentum
02238   G4double sp=std::sqrt(p);             // sqrt(p)
02239   G4double p2=p*p;            
02240   G4double p3=p2*p;
02241   G4double p4=p3*p;
02242   if ( tgZ == 1 && tgN == 0 )  // np
02243   {
02244     G4double ssp=std::sqrt(sp);           // sqrt(sqrt(p))=p^.25
02245     G4double p2s=p2*sp;
02246     G4double dl1=lp-lastPAR[3];
02247     theSS=lastPAR[27];
02248     theS1=(lastPAR[9]+lastPAR[10]*dl1*dl1+lastPAR[11]/p)/(1.+lastPAR[12]/p4)
02249           +lastPAR[13]/(p4+lastPAR[14]);
02250     theB1=(lastPAR[17]+lastPAR[18]/(p4*p4+lastPAR[19]*p3))/(1.+lastPAR[20]/p4);
02251     theS2=(lastPAR[15]+lastPAR[16]/p4/p)/p3;
02252     theB2=lastPAR[22]/(p*sp+lastPAR[23]); 
02253     theS3=0.;
02254     theB3=0.; 
02255     theS4=0.;
02256     theB4=0.; 
02257 #ifdef tdebug
02258     G4cout<<"G4QNeutronElasticCroS::GetTableValues:(np) TM="<<lastTM<<",S1="<<theS1<<",B1="
02259           <<theB1<<",S2="<<theS2<<",B2="<<theB2<<",S3="<<theS1<<",B3="<<theB1<<G4endl;
02260 #endif
02261     // Returns the total elastic pp cross-section (to avoid spoiling lastSIG)
02262     return lastPAR[0]/(p2s+lastPAR[1]*p+lastPAR[2]/ssp)+lastPAR[4]/p
02263            +(lastPAR[5]+lastPAR[6]*dl1*dl1+lastPAR[7]/p)/(1.+lastPAR[8]/p4);
02264 
02265   }
02266   else
02267   {
02268     G4double p5=p4*p;
02269     G4double p6=p5*p;
02270     G4double p8=p6*p2;
02271     G4double p10=p8*p2;
02272     G4double p12=p10*p2;
02273     G4double p16=p8*p8;
02274     G4double dl=lp-5.;
02275     G4double a=tgZ+tgN;
02276     G4double pah=std::pow(p,a/2);
02277     G4double pa=pah*pah;
02278     G4double pa2=pa*pa;
02279     if(a<6.5)
02280     {
02281       theS1=lastPAR[15]/(1.+lastPAR[16]*p4*pa)+lastPAR[17]/(p4+lastPAR[18]*p4/pa2)+
02282             (lastPAR[19]*dl*dl+lastPAR[20])/(1.+lastPAR[21]/p2);
02283       theB1=(lastPAR[22]+lastPAR[23]*p2)/(p4+lastPAR[24]/pah)+lastPAR[25];
02284       theSS=lastPAR[26]/(1.+lastPAR[27]/p2)+lastPAR[28]/(p6/pa+lastPAR[29]/p16);
02285       theS2=lastPAR[30]/(pa/p2+lastPAR[31]/p4)+lastPAR[32];
02286       theB2=lastPAR[33]*std::pow(p,lastPAR[34])+lastPAR[35]/(p8+lastPAR[36]/p16);
02287       theS3=lastPAR[37]/(pa*p+lastPAR[38]/pa)+lastPAR[39];
02288       theB3=lastPAR[40]/(p3+lastPAR[41]/p6)+lastPAR[42]/(1.+lastPAR[43]/p2);
02289       theS4=p2*(pah*lastPAR[44]*std::exp(-pah*lastPAR[45])+
02290                 lastPAR[46]/(1.+lastPAR[47]*std::pow(p,lastPAR[48])));
02291       theB4=lastPAR[49]*pa/p2/(1.+pa*lastPAR[50]);
02292 #ifdef tdebug
02293       G4cout<<"G4QNElCS::GetTabV: lA, p="<<p<<",S1="<<theS1<<",B1="<<theB1<<",SS="<<theSS
02294             <<",S2="<<theS2<<",B2="<<theB2<<",S3="<<theS3<<",B3="<<theB3<<",S4="<<theS4
02295             <<",B4="<<theB4<<G4endl;
02296 #endif
02297     }
02298     else
02299     {
02300       theS1=lastPAR[15]/(1.+lastPAR[16]/p4)+lastPAR[17]/(p4+lastPAR[18]/p2)+
02301             lastPAR[19]/(p5+lastPAR[20]/p16);
02302       theB1=(lastPAR[21]/p8+lastPAR[25])/(p+lastPAR[22]/std::pow(p,lastPAR[26]))+
02303             lastPAR[23]/(1.+lastPAR[24]/p4);
02304       theSS=lastPAR[27]/(p4/std::pow(p,lastPAR[29])+lastPAR[28]/p4);
02305       theS2=lastPAR[30]/p4/(std::pow(p,lastPAR[31])+lastPAR[32]/p12)+lastPAR[33];
02306       theB2=lastPAR[34]/std::pow(p,lastPAR[35])+lastPAR[36]/std::pow(p,lastPAR[37]);
02307       theS3=lastPAR[38]/std::pow(p,lastPAR[41])/(1.+lastPAR[42]/p12)+
02308             lastPAR[39]/(1.+lastPAR[40]/p6);
02309       theB3=lastPAR[43]/p8+lastPAR[44]/p2+lastPAR[45]/(1.+lastPAR[46]/p8);
02310       theS4=(lastPAR[47]/p4+lastPAR[52]/p)/(1.+lastPAR[48]/p10)+
02311             (lastPAR[49]+lastPAR[50]*dl*dl)/(1.+lastPAR[51]/p12);
02312       theB4=lastPAR[53]/(1.+lastPAR[54]/p)+lastPAR[55]*p4/(1.+lastPAR[56]*p5);
02313 #ifdef tdebug
02314       G4cout<<"G4QNElCS::GetTabV: hA, p="<<p<<",S1="<<theS1<<",B1="<<theB1<<",SS="<<theSS
02315             <<",S2="<<theS2<<",B2="<<theB2<<",S3="<<theS3<<",B3="<<theB3<<",S4="<<theS4
02316             <<",B4="<<theB4<<G4endl;
02317 #endif
02318     }
02319     // Returns the total elastic (n/p)A cross-section (to avoid spoiling lastSIG)
02320 #ifdef tdebug
02321     G4cout<<"G4QNeutronElCS::GetTabV: PDG="<<PDG<<",P="<<p<<",N="<<tgN<<",Z="<<tgZ<<G4endl;
02322 #endif
02323 #ifdef pdebug
02324     G4cout<<"G4QNElCS::GetTV: p="<<p<<",P12="<<lastPAR[12]<<",N="<<tgN<<",Z="<<tgZ<<G4endl;
02325 #endif
02326     //         p1(p6)          p2(p7)          p3(p4)       o4(p8)       (p9)p5
02327     return (lastPAR[0]*dl*dl+lastPAR[1])/(1.+lastPAR[2]/p+lastPAR[3]/p4)+lastPAR[5]/
02328              (p3+lastPAR[6]/p3)+lastPAR[7]/(p2+lastPAR[4]/(p2+lastPAR[8])+lastPAR[9]/p)+
02329            lastPAR[10]/(p5+lastPAR[11]/p2)+lastPAR[12]/p;
02330     //         p10             p11             p12
02331   }
02332   return 0.;
02333 } // End of GetTableValues
02334 
02335 // Returns max -t=Q2 (GeV^2) for the momentum pP(GeV) and the target nucleus (tgN,tgZ)
02336 G4double G4QNeutronElasticCrossSection::GetQ2max(G4int PDG, G4int tgZ, G4int tgN,
02337                                                  G4double pP)
02338 {
02339   static const G4double mNeut= G4QPDGCode(2112).GetMass()*.001; // MeV to GeV
02340   static const G4double mProt= G4QPDGCode(2212).GetMass()*.001; // MeV to GeV
02341   //static const G4double mLamb= G4QPDGCode(3122).GetMass()*.001; // MeV to GeV
02342   //static const G4double mHe3 = G4QPDGCode(2112).GetNuclMass(2,1,0)*.001; // MeV to GeV
02343   //static const G4double mAlph = G4QPDGCode(2112).GetNuclMass(2,2,0)*.001; // MeV to GeV
02344   //static const G4double mDeut = G4QPDGCode(2112).GetNuclMass(1,1,0)*.001; // MeV to GeV
02345   //static const G4double mProt2= mProt*mProt;
02346   static const G4double mNeut2= mNeut*mNeut;
02347   //static const G4double mDeut2= mDeut*mDeut;
02348   G4double pP2=pP*pP;                                 // squared momentum of the projectile
02349   if(tgZ==0 && tgN==1)
02350   {
02351     G4double tMid=std::sqrt(pP2+mNeut2)*mNeut-mNeut2;  // CMS 90deg value of -t=Q2 (GeV^2)
02352     return tMid+tMid;
02353   }
02354   else if(tgZ || tgN)                   // ---> nA
02355   {
02356     G4double mt=mProt;                                 // Target mass in GeV
02357     if(tgN||tgZ>1) mt=G4QPDGCode(90000000+tgZ*1000+tgN).GetMass()*.001; // Target mass GeV
02358     G4double dmt=mt+mt;
02359     G4double s_value=dmt*std::sqrt(pP2+mNeut2)+mNeut2+mt*mt; // Mondelstam s (in GeV^2)
02360     return dmt*dmt*pP2/s_value;
02361   }
02362   else
02363   {
02364     // G4cout<<"*Error*G4QNeutronElasticCrossSection::GetQ2max:PDG="<<PDG<<", Z="<<tgZ<<", N="
02365     //       <<tgN<<", while it is defined only for n projectiles & Z_target>0"<<G4endl;
02366     // throw G4QException("G4QNeutronElasticCrossSection::GetQ2max: only nA implemented");
02367     G4ExceptionDescription ed;
02368     ed << "PDG = " << PDG << ", Z = " << tgZ << ", N =" << tgN
02369        <<", while it is defined only for n projectiles & Z_target>0" << G4endl;
02370     G4Exception("G4QNeutronElasticCrossSection::GetQ2max()", "HAD_CHPS_0000",
02371                 FatalException, ed);
02372     return 0;
02373   }
02374 }

Generated on Mon May 27 17:49:37 2013 for Geant4 by  doxygen 1.4.7