61 1, 4, 6, 9, 10, 12, 14, 16, 19, 20,
62 23, 24, 27, 28, 31, 32, 35, 36, 39, 40,
63 45, 46, 50, 50, 55, 54, 59, 58, 63, 64,
64 69, 70, 75, 0, 0, 0, 0, 0, 0, 90,
65 0, 92, 0, 0, 0, 102, 107, 106, 113, 112,
66 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
68 0, 0, 181, 180, 0, 0, 0, 192, 197, 0,
69 0, 204, 209, 0, 0, 0, 0, 0, 0, 0,
73 1, 4, 7, 9, 11, 13, 15, 18, 19, 22,
74 23, 26, 27, 30, 31, 34, 37, 40, 41, 48,
75 45, 50, 51, 54, 55, 58, 59, 64, 65, 70,
76 71, 76, 75, 0, 0, 0, 0, 0, 0, 96,
77 0, 100, 0, 0, 0, 110, 109, 116, 115, 124,
78 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
79 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
80 0, 0, 181, 186, 0, 0, 0, 198, 197, 0,
81 0, 208, 209, 0, 0, 0, 0, 0, 0, 0,
86 #ifdef G4MULTITHREADED
96 G4cout <<
"G4NeutronCaptureXS::G4NeutronCaptureXS: Initialise for Z < "
109 outFile <<
"G4NeutronCaptureXS calculates the neutron capture cross sections\n"
110 <<
"on nuclei using data from the high precision neutron database.\n"
111 <<
"These data are simplified and smoothed over the resonance region\n"
112 <<
"in order to reduce CPU time. G4NeutronCaptureXS is set to zero\n"
113 <<
"above 20 MeV for all targets. Cross section is zero also for Z>92.\n";
142 if(!pv) {
return xs; }
145 if(ekin < e1) { xs = (*pv)[0]*std::sqrt(e1/ekin); }
146 else if(ekin <= pv->GetMaxEnergy()) { xs = pv->
Value(ekin); }
172 if(ekin < e1) { xs = (*pviso)[1]*std::sqrt(e1/ekin); }
173 else if(ekin <= pviso->GetMaxEnergy()) { xs = pviso->
Value(ekin); }
175 G4cout <<
"G4NeutronCaptureXS::IsoXS: Ekin(MeV)= " << ekin/
MeV
176 <<
" xs(b)= " << xs/
barn
177 <<
" Z= " << Z <<
" A= " << A <<
G4endl;
185 if(ekin < e1) { xs = (*pv)[1]*std::sqrt(e1/ekin); }
186 else if(ekin <= pv->GetMaxEnergy()) { xs = pv->
Value(ekin); }
188 G4cout <<
"G4NeutronCaptureXS::IsoXS: Ekin(MeV)= " << ekin/
MeV
189 <<
" xs(b)= " << xs/
barn
190 <<
" Z= " << Z <<
" A= " << A <<
G4endl;
214 for (j = 0; j<
nIso; ++j) {
215 sum += abundVector[j];
223 if(nn < nIso) {
temp.resize(nIso, 0.); }
225 for (j=0; j<
nIso; ++j) {
231 for (j = 0; j<
nIso; ++j) {
246 G4cout <<
"G4NeutronCaptureXS::BuildPhysicsTable for "
252 <<
" only neutron is allowed";
253 G4Exception(
"G4NeutronCaptureXS::BuildPhysicsTable(..)",
"had012",
259 #ifdef G4MULTITHREADED
265 data->SetName(
"NeutronCapture");
267 #ifdef G4MULTITHREADED
278 char* path = getenv(
"G4NEUTRONXSDATA");
283 for(
size_t i=0; i<numOfElm; ++i) {
284 G4int Z = ((*theElmTable)[i])->GetZasInt();
297 const char* path =
p;
301 path = getenv(
"G4NEUTRONXSDATA");
304 "Environment variable G4NEUTRONXSDATA is not defined");
310 std::ostringstream ost;
311 ost << path <<
"/neutron/cap" <<
Z ;
313 data->InitialiseForElement(Z, v);
318 data->InitialiseForComponent(Z, nmax);
321 std::ostringstream ost1;
322 ost1 << path <<
"/neutron/cap" << Z <<
"_" <<
A;
324 data->AddComponent(Z, A, v);
333 std::ifstream filein(ost.str().c_str());
337 ed <<
"Data file <" << ost.str().c_str()
338 <<
"> is not opened!";
339 G4Exception(
"G4NeutronCaptureXS::RetrieveVector(..)",
"had014",
344 G4cout <<
"File " << ost.str()
345 <<
" is opened by G4NeutronCaptureXS" <<
G4endl;
351 ed <<
"Data file <" << ost.str().c_str()
352 <<
"> is not retrieved!";
353 G4Exception(
"G4NeutronCaptureXS::RetrieveVector(..)",
"had015",
G4double Energy(size_t index) const
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *)
virtual ~G4NeutronCaptureXS()
std::vector< G4double > temp
std::ostringstream G4ExceptionDescription
G4double * GetRelativeAbundanceVector() const
static constexpr double MeV
static const G4int amin[MAXZCAPTURE]
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
static const G4int amax[MAXZCAPTURE]
const G4String & GetParticleName() const
static const G4double emax
virtual void CrossSectionDescription(std::ostream &) const
G4double Value(G4double theEnergy, size_t &lastidx) const
const XML_Char const XML_Char * data
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso, const G4Element *elm, const G4Material *mat)
virtual G4bool Retrieve(std::ifstream &fIn, G4bool ascii) final
#define G4MUTEX_INITIALIZER
virtual const G4Isotope * SelectIsotope(const G4Element *, G4double kinEnergy)
std::vector< G4Element * > G4ElementTable
double A(double temperature)
static constexpr double eV
static G4ElementData * data
#define G4_DECLARE_XS_FACTORY(cross_section)
#define G4MUTEXUNLOCK(mutex)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
void Initialise(G4int Z, const char *)
static constexpr double barn
#define G4MUTEXLOCK(mutex)
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
const G4Isotope * GetIsotope(G4int iso) const
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
static size_t GetNumberOfElements()
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *)
G4PhysicsVector * RetrieveVector(std::ostringstream &in, G4bool warn)
G4double IsoCrossSection(G4double ekin, G4int Z, G4int A)
static G4ElementTable * GetElementTable()
size_t GetNumberOfIsotopes() const