66 1, 4, 6, 9, 10, 12, 14, 16, 19, 20,
67 23, 24, 27, 28, 31, 32, 35, 36, 39, 40,
68 45, 46, 50, 50, 55, 54, 59, 58, 63, 64,
69 69, 70, 75, 0, 0, 0, 0, 0, 0, 90,
70 0, 92, 0, 0, 0, 102, 107, 106, 113, 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, 181, 180, 0, 0, 0, 192, 197, 0,
74 0, 204, 209, 0, 0, 0, 0, 0, 0, 0,
78 1, 4, 7, 9, 11, 13, 15, 18, 19, 22,
79 23, 26, 27, 30, 31, 34, 37, 40, 41, 48,
80 45, 50, 51, 54, 55, 58, 59, 64, 65, 70,
81 71, 76, 75, 0, 0, 0, 0, 0, 0, 96,
82 0, 100, 0, 0, 0, 110, 109, 116, 115, 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, 181, 186, 0, 0, 0, 198, 197, 0,
86 0, 208, 209, 0, 0, 0, 0, 0, 0, 0,
93 #ifdef G4MULTITHREADED
103 G4cout <<
"G4NeutronInelasticXS::G4NeutronInelasticXS Initialise for Z < "
122 outFile <<
"G4NeutronInelasticXS calculates the neutron inelastic scattering\n"
123 <<
"cross section on nuclei using data from the high precision\n"
124 <<
"neutron database. These data are simplified and smoothed over\n"
125 <<
"the resonance region in order to reduce CPU time.\n"
126 <<
"For high energy Glauber-Gribov cross section model is used\n";
158 if(!pv || ekin <= pv->Energy(0)) {
return xs; }
160 if(ekin <= pv->GetMaxEnergy()) {
161 xs = pv->
Value(ekin);
204 xs = pviso->
Value(ekin);
206 G4cout <<
"IsoXS: Z= " << Z <<
" A= " << A
215 if(pv) { xs = pv->
Value(ekin); }
217 G4cout <<
"IsoXS: Z= " << Z <<
" A= " << A
231 if(1 == nIso) {
return iso; }
244 for (j = 0; j<
nIso; ++j) {
245 sum += abundVector[j];
256 if(nn < nIso) {
temp.resize(nIso, 0.); }
258 for (j=0; j<
nIso; ++j) {
266 for (j = 0; j<
nIso; ++j) {
279 G4cout <<
"G4NeutronInelasticXS::BuildPhysicsTable for "
285 <<
" only neutron is allowed";
286 G4Exception(
"G4NeutronInelasticXS::BuildPhysicsTable(..)",
"had012",
292 #ifdef G4MULTITHREADED
298 data->SetName(
"NeutronInelastic");
300 #ifdef G4MULTITHREADED
311 char* path = getenv(
"G4NEUTRONXSDATA");
319 for(
size_t i=0; i<numOfElm; ++i) {
320 G4int Z = ((*theElmTable)[i])->GetZasInt();
324 if(!(
data->GetElementData(Z))) {
336 if(
data->GetElementData(Z) || Z < 1 || Z >=
MAXZINEL) {
return; }
337 const char* path =
p;
341 path = getenv(
"G4NEUTRONXSDATA");
343 G4Exception(
"G4NeutronInelasticXS::Initialise(..)",
"had013",
345 "Environment variable G4NEUTRONXSDATA is not defined");
350 std::ostringstream ost;
351 ost << path <<
"/neutron/inel" <<
Z ;
353 data->InitialiseForElement(Z, v);
362 data->InitialiseForComponent(Z, nmax);
365 std::ostringstream ost1;
366 ost1 << path <<
"/neutron/inel" << Z <<
"_" <<
A;
368 data->AddComponent(Z, A, v1);
385 if(sig2 > 0.) {
coeff[
Z] = sig1/sig2; }
392 std::ifstream filein(ost.str().c_str());
396 ed <<
"Data file <" << ost.str().c_str()
397 <<
"> is not opened!";
398 G4Exception(
"G4NeutronInelasticXS::RetrieveVector(..)",
"had014",
403 G4cout <<
"File " << ost.str()
404 <<
" is opened by G4NeutronInelasticXS" <<
G4endl;
410 ed <<
"Data file <" << ost.str().c_str()
411 <<
"> is not retrieved!";
412 G4Exception(
"G4NeutronInelasticXS::RetrieveVector(..)",
"had015",
static G4double coeff[MAXZINEL]
G4HadronNucleonXsc * fNucleon
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
CLHEP::Hep3Vector G4ThreeVector
std::ostringstream G4ExceptionDescription
G4double * GetRelativeAbundanceVector() const
static constexpr double MeV
void SetKineticEnergy(G4double aEnergy)
G4double GetInelasticGlauberGribovXsc()
static const G4int amax[MAXZINEL]
const G4String & GetParticleName() const
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso, const G4Element *elm, const G4Material *mat)
void Initialise(G4int Z, G4DynamicParticle *dp, const char *)
std::vector< G4double > temp
static const G4double emax
G4double Value(G4double theEnergy, size_t &lastidx) const
G4ComponentGGHadronNucleusXsc * ggXsection
virtual void CrossSectionDescription(std::ostream &) const
const XML_Char const XML_Char * data
virtual G4bool Retrieve(std::ifstream &fIn, G4bool ascii) final
static const G4int amin[MAXZINEL]
virtual ~G4NeutronInelasticXS()
#define G4MUTEX_INITIALIZER
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
G4PhysicsVector * RetrieveVector(std::ostringstream &in, G4bool warn)
std::vector< G4Element * > G4ElementTable
static constexpr double MeV
double A(double temperature)
G4double IsoCrossSection(G4double ekin, G4int Z, G4int A)
G4double GetInelasticHadronNucleonXsc()
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *)
#define G4_DECLARE_XS_FACTORY(cross_section)
#define G4MUTEXUNLOCK(mutex)
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double GetMaxEnergy() const
static G4Neutron * Neutron()
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
static G4ElementData * data
#define G4MUTEXLOCK(mutex)
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
virtual const G4Isotope * SelectIsotope(const G4Element *, G4double kinEnergy)
const G4Isotope * GetIsotope(G4int iso) const
static size_t GetNumberOfElements()
const G4ParticleDefinition * proton
size_t GetVectorLength() const
static constexpr double barn
static G4NistManager * Instance()
static G4ElementTable * GetElementTable()
size_t GetNumberOfIsotopes() const