62 1, 4, 6, 9, 10, 12, 14, 16, 19, 20,
63 23, 24, 27, 28, 31, 32, 35, 36, 39, 40,
64 45, 46, 50, 50, 55, 54, 59, 58, 63, 64,
65 69, 70, 75, 0, 0, 0, 0, 0, 0, 90,
66 0, 92, 0, 0, 0, 102, 107, 106, 113, 112,
67 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
68 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69 0, 0, 181, 180, 0, 0, 0, 192, 197, 0,
70 0, 204, 209, 0, 0, 0, 0, 0, 0, 0,
74 1, 4, 7, 9, 11, 13, 15, 18, 19, 22,
75 23, 26, 27, 30, 31, 34, 37, 40, 41, 48,
76 45, 50, 51, 54, 55, 58, 59, 64, 65, 70,
77 71, 76, 75, 0, 0, 0, 0, 0, 0, 96,
78 0, 100, 0, 0, 0, 110, 109, 116, 115, 124,
79 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
80 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
81 0, 0, 181, 186, 0, 0, 0, 198, 197, 0,
82 0, 208, 209, 0, 0, 0, 0, 0, 0, 0,
89 #ifdef G4MULTITHREADED
105 G4Exception(
"G4ParticleInelasticXS::G4ParticleInelasticXS(..)",
"had015",
111 G4cout <<
"G4ParticleInelasticXS::G4ParticleInelasticXS for "
136 outFile <<
"G4ParticleInelasticXS calculates n, p, d, t, he3, he4 inelastic \n"
137 <<
"cross section on nuclei using data from the high precision\n"
138 <<
"neutron database. These data are simplified and smoothed over\n"
139 <<
"the resonance region in order to reduce CPU time.\n"
140 <<
"For high energy Glauber-Gribov cross section model is used\n";
172 if(!pv || ekin <= pv->Energy(0)) {
return xs; }
174 if(ekin <= pv->GetMaxEnergy()) {
175 xs = pv->
Value(ekin);
193 <<
" xs(bn)= " << xs/
CLHEP::barn <<
" element data for "
222 xs = pviso->
Value(ekin);
225 <<
" Target Z= " << Z <<
" A= " << A
234 if(pv) { xs = pv->
Value(ekin); }
237 <<
" Target Z= " << Z <<
" A= " << A
251 if(1 == nIso) {
return iso; }
264 for (j = 0; j<
nIso; ++j) {
265 sum += abundVector[j];
275 if(nn < nIso) {
temp.resize(nIso, 0.); }
277 for (j=0; j<
nIso; ++j) {
285 for (j = 0; j<
nIso; ++j) {
298 G4cout <<
"G4ParticleInelasticXS::BuildPhysicsTable for "
305 G4Exception(
"G4ParticleInelasticXS::BuildPhysicsTable(..)",
"had012",
311 #ifdef G4MULTITHREADED
319 #ifdef G4MULTITHREADED
330 char* path = getenv(
"G4NEUTRONXSDATA");
338 for(
size_t i=0; i<numOfElm; ++i) {
339 G4int Z = ((*theElmTable)[i])->GetZasInt();
343 if(!(
data->GetElementData(Z))) {
354 if(
data->GetElementData(Z)) {
return; }
355 const char* path =
p;
359 path = getenv(
"G4NEUTRONXSDATA");
361 G4Exception(
"G4ParticleInelasticXS::Initialise(..)",
"had013",
363 "Environment variable G4NEUTRONXSDATA is not defined");
369 std::ostringstream ost;
372 data->InitialiseForElement(Z, v);
381 data->InitialiseForComponent(Z, nmax);
384 std::ostringstream ost1;
385 ost1 << path <<
"/neutron/inel" << Z <<
"_" <<
A;
387 data->AddComponent(Z, A, v1);
407 if(sig2 > 0.) {
coeff[
Z] = sig1/sig2; }
414 std::ifstream filein(ost.str().c_str());
418 ed <<
"Data file <" << ost.str().c_str()
419 <<
"> is not opened!";
420 G4Exception(
"G4ParticleInelasticXS::RetrieveVector(..)",
"had014",
425 G4cout <<
"File " << ost.str()
426 <<
" is opened by G4ParticleInelasticXS" <<
G4endl;
432 ed <<
"Data file <" << ost.str().c_str()
433 <<
"> is not retrieved!";
434 G4Exception(
"G4ParticleInelasticXS::RetrieveVector(..)",
"had015",
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
G4double GetZandACrossSection(const G4DynamicParticle *, G4int Z, G4int A)
CLHEP::Hep3Vector G4ThreeVector
std::ostringstream G4ExceptionDescription
G4double * GetRelativeAbundanceVector() const
static constexpr double MeV
G4ComponentGGNuclNuclXsc * nnXsection
void SetKineticEnergy(G4double aEnergy)
G4double GetInelasticGlauberGribovXsc()
static G4double coeff[MAXZINELP]
G4ComponentGGHadronNucleusXsc * ggXsection
void Initialise(G4int Z, G4DynamicParticle *dp, const char *)
const G4String & GetParticleName() const
static const G4double emax
G4double Value(G4double theEnergy, size_t &lastidx) const
G4double GetInelasticGlauberGribovXsc()
G4double IsoCrossSection(G4double ekin, G4int Z, G4int A)
const XML_Char const XML_Char * data
static const G4int amin[MAXZINELP]
virtual G4bool Retrieve(std::ifstream &fIn, G4bool ascii) final
G4PhysicsVector * RetrieveVector(std::ostringstream &in, G4bool warn)
#define G4MUTEX_INITIALIZER
virtual ~G4ParticleInelasticXS()
G4double GetHadronNucleonXscPDG(const G4DynamicParticle *, const G4ParticleDefinition *)
std::vector< G4Element * > G4ElementTable
static constexpr double MeV
double A(double temperature)
G4double GetInelasticHadronNucleonXsc()
void SetForAllAtomsAndEnergies(G4bool val)
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
#define G4MUTEXUNLOCK(mutex)
const G4ParticleDefinition * particle
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4double GetMaxEnergy() const
G4ParticleInelasticXS(const G4ParticleDefinition *)
virtual const G4Isotope * SelectIsotope(const G4Element *, G4double kinEnergy)
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *)
#define G4MUTEXLOCK(mutex)
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso, const G4Element *elm, const G4Material *mat)
G4HadronNucleonXsc * fNucleon
const G4Isotope * GetIsotope(G4int iso) const
const G4ParticleDefinition * proton
static size_t GetNumberOfElements()
virtual void CrossSectionDescription(std::ostream &) const
std::vector< G4double > temp
static G4ElementData * data
static const G4int amax[MAXZINELP]
size_t GetVectorLength() const
static constexpr double barn
static G4NistManager * Instance()
static G4ElementTable * GetElementTable()
size_t GetNumberOfIsotopes() const