64 const G4int G4NeutronInelasticXS::amin[] = {
 
   66   0, 0, 6, 0,10,12,14,16, 0, 0, 
 
   67   0, 0, 0,28, 0, 0, 0,36, 0,40, 
 
   68   0, 0, 0, 0, 0,54, 0,58,63,64, 
 
   69   0,70, 0, 0, 0, 0, 0, 0, 0,90, 
 
   70   0, 0, 0, 0, 0, 0,107,106, 0,112, 
 
   71   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 
   72   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 
   73   0, 0, 0,180, 0, 0, 0, 0, 0, 0, 
 
   74   0,204, 0, 0, 0, 0, 0, 0, 0, 0, 
 
   76 const G4int G4NeutronInelasticXS::amax[] = {
 
   78   0, 0, 7, 0,11,13,15,18, 0, 0, 
 
   79   0, 0, 0,30, 0, 0, 0,40, 0,48, 
 
   80   0, 0, 0, 0, 0,58, 0,64,65,70, 
 
   81   0,76, 0, 0, 0, 0, 0, 0, 0,96, 
 
   82   0, 0, 0, 0, 0, 0,109,116, 0,124, 
 
   83   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 
   84   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 
   85   0, 0, 0,186, 0, 0, 0, 0, 0, 0, 
 
   86   0,208, 0, 0, 0, 0, 0, 0, 0, 0, 
 
   89 G4double G4NeutronInelasticXS::coeff[] = {1.0};
 
   99     G4cout << 
"G4NeutronInelasticXS::G4NeutronInelasticXS Initialise for Z < "  
  113   if(isMaster) { 
delete data; 
data = 0; }
 
  118   outFile << 
"G4NeutronInelasticXS calculates the neutron inelastic scattering\n" 
  119           << 
"cross section on nuclei using data from the high precision\n" 
  120           << 
"neutron database.  These data are simplified and smoothed over\n" 
  121           << 
"the resonance region in order to reduce CPU time.\n" 
  122           << 
"G4NeutronInelasticXS is valid for energies up to 20 MeV, for\n" 
  123           << 
"nuclei through U.\n";
 
  149   else if(Z < 1)    { Z = 1; }
 
  160     pv = 
data->GetElementData(Z);
 
  161     if(!pv) { 
return xs; }
 
  165   if(ekin <= e1) { 
return xs; }
 
  170     xs = pv->
Value(ekin); 
 
  180     G4cout  << 
"ekin= " << ekin << 
",  XSinel= " << xs << 
G4endl;
 
  192   else if(Z < 1)    { Z = 1; }
 
  210     pv = 
data->GetElementData(Z);
 
  214   if(pv && amin[Z] > 0  && A >= amin[Z] && A <= amax[Z]) {
 
  215     pv = 
data->GetComponentDataByIndex(Z, A - amin[Z]);
 
  216     if(pv && ekin > pv->
Energy(0)) { xs = pv->
Value(ekin); }
 
  245       for (j = 0; j<
nIso; ++j) {
 
  246     sum += abundVector[j];
 
  248       iso = (*isoVector)[j];
 
  255       if(!
data->GetElementData(Z)) { Initialise(Z); }
 
  256       size_t nn = temp.size();
 
  257       if(nn < nIso) { temp.resize(nIso, 0.); }
 
  259       for (j=0; j<
nIso; ++j) {
 
  262         sum += abundVector[j]*IsoCrossSection(kinEnergy, Z, 
 
  263                           (*isoVector)[j]->GetN());
 
  267       for (j = 0; j<
nIso; ++j) {
 
  269           iso = (*isoVector)[j];
 
  282     G4cout << 
"G4NeutronInelasticXS::BuildPhysicsTable for "  
  288        << 
" only neutron is allowed";
 
  289     G4Exception(
"G4NeutronInelasticXS::BuildPhysicsTable(..)",
"had012",
 
  297     data->SetName(
"NeutronInelastic");
 
  306     char* path = getenv(
"G4NEUTRONXSDATA");
 
  315       for(
size_t i=0; i<numOfElm; ++i) {
 
  321     if(!(
data->GetElementData(Z))) { 
 
  322       Initialise(Z, dynParticle, path); 
 
  334   if(
data->GetElementData(Z) || Z < 1 || Z >= 
MAXZINEL) { 
return; }
 
  335   const char* path = 
p;
 
  339     path = getenv(
"G4NEUTRONXSDATA");
 
  341       G4Exception(
"G4NeutronInelasticXS::Initialise(..)",
"had013",
 
  343                   "Environment variable G4NEUTRONXSDATA is not defined");
 
  356   std::ostringstream ost;
 
  357   ost << path << 
"/inelast" << 
Z ;
 
  359   data->InitialiseForElement(Z, v);
 
  367     size_t nmax = (size_t)(amax[Z]-amin[Z]+1);
 
  368     data->InitialiseForComponent(Z, nmax);
 
  370     for(
G4int A=amin[Z]; A<=amax[
Z]; ++
A) {
 
  371       std::ostringstream ost1;
 
  372       ost1 << path << 
"/inelast" << Z << 
"_" << 
A;
 
  374       data->AddComponent(Z, A, v1); 
 
  390   if(sig2 > 0.) { coeff[
Z] = sig1/sig2; } 
 
  391   if(!dp) { 
delete dynParticle; }
 
  395 G4NeutronInelasticXS::RetrieveVector(std::ostringstream& ost, 
G4bool warn)
 
  398   std::ifstream filein(ost.str().c_str());
 
  402       ed << 
"Data file <" << ost.str().c_str()
 
  403      << 
"> is not opened!";
 
  404       G4Exception(
"G4NeutronInelasticXS::RetrieveVector(..)",
"had014",
 
  409       G4cout << 
"File " << ost.str() 
 
  410          << 
" is opened by G4NeutronInelasticXS" << 
G4endl;
 
  416       ed << 
"Data file <" << ost.str().c_str()
 
  417      << 
"> is not retrieved!";
 
  418       G4Exception(
"G4NeutronInelasticXS::RetrieveVector(..)",
"had015",
 
virtual ~G4NeutronInelasticXS()
 
size_t GetNumberOfIsotopes() const 
 
G4double GetMaxEnergy() const 
 
std::vector< G4Isotope * > G4IsotopeVector
 
std::ostringstream G4ExceptionDescription
 
G4double GetKineticEnergy() const 
 
CLHEP::Hep3Vector G4ThreeVector
 
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *)
 
size_t GetVectorLength() const 
 
G4double GetInelasticGlauberGribovXsc()
 
static G4NistManager * Instance()
 
const G4String & GetParticleName() const 
 
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
 
const XML_Char const XML_Char * data
 
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
 
G4GLOB_DLL std::ostream G4cout
 
double A(double temperature)
 
static size_t GetNumberOfElements()
 
virtual G4bool Retrieve(std::ifstream &fIn, G4bool ascii) final
 
G4double * GetRelativeAbundanceVector() const 
 
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso, const G4Element *elm, const G4Material *mat)
 
static G4Neutron * Neutron()
 
G4double Energy(size_t index) const 
 
G4double Value(G4double theEnergy, size_t &lastidx) const 
 
void SetKineticEnergy(G4double aEnergy)
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static const G4double emax
 
G4IsotopeVector * GetIsotopeVector() const 
 
#define G4_DECLARE_XS_FACTORY(cross_section)
 
virtual void CrossSectionDescription(std::ostream &) const 
 
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *)
 
virtual G4Isotope * SelectIsotope(const G4Element *, G4double kinEnergy)
 
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
 
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
 
std::vector< G4Element * > G4ElementTable
 
static G4ElementTable * GetElementTable()
 
G4double GetInelasticHadronNucleonXsc()