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 2, 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,
87 #ifdef G4MULTITHREADED
97 G4cout <<
"G4NeutronCaptureXS::G4NeutronCaptureXS: Initialise for Z < "
112 outFile <<
"G4NeutronCaptureXS calculates the neutron capture cross sections\n"
113 <<
"on nuclei using data from the high precision neutron database.\n"
114 <<
"These data are simplified and smoothed over the resonance region\n"
115 <<
"in order to reduce CPU time. G4NeutronCaptureXS is set to zero\n"
116 <<
"above 20 MeV for all targets. Cross section is zero also for Z>92.\n";
140 if(ekin >
emax) {
return xs; }
147 if(!pv) {
return xs; }
151 xs = (*pv)[0]*std::sqrt(e1/ekin);
152 }
else if(ekin <= pv->GetMaxEnergy()) {
153 xs = pv->LogVectorValue(ekin, logEkin);
178 if(eKin >
emax) {
return xs; }
189 if(!pv) {
return xs; }
196 xs = (*pviso)[1]*std::sqrt(e1/ekin);
197 }
else if(ekin <= pviso->GetMaxEnergy()) {
201 G4cout <<
"G4NeutronCaptureXS::IsoXS: Ekin(MeV)= " << ekin/
MeV
202 <<
" xs(b)= " << xs/
barn
203 <<
" Z= " << Z <<
" A= " << A <<
G4endl;
211 xs = (*pv)[1]*std::sqrt(e1/ekin);
212 }
else if(ekin <= pv->GetMaxEnergy()) {
213 xs = pv->LogVectorValue(ekin, logEkin);
216 G4cout <<
"G4NeutronCaptureXS::IsoXS: Ekin(MeV)= " << ekin/
MeV
217 <<
" xs(b)= " << xs/
barn
218 <<
" Z= " << Z <<
" A= " << A <<
" no iso XS" <<
G4endl;
231 if(1 == nIso) {
return iso; }
243 for (j = 0; j<nIso; ++j) {
244 sum += abundVector[j];
253 if(nn < nIso) {
temp.resize(nIso, 0.); }
255 for (j=0; j<nIso; ++j) {
261 for (j = 0; j<nIso; ++j) {
274 G4cout <<
"G4NeutronCaptureXS::BuildPhysicsTable for "
280 <<
" only neutron is allowed";
281 G4Exception(
"G4NeutronCaptureXS::BuildPhysicsTable(..)",
"had012",
287 #ifdef G4MULTITHREADED
293 data->SetName(
"NeutronCapture");
295 #ifdef G4MULTITHREADED
306 size_t numOfCouples = theCoupleTable->GetTableSize();
307 for(
size_t j=0; j<numOfCouples; ++j) {
308 auto mat = theCoupleTable->GetMaterialCutsCouple(j)->GetMaterial();
309 auto elmVec =
mat->GetElementVector();
310 size_t numOfElem =
mat->GetNumberOfElements();
311 for (
size_t ie = 0; ie < numOfElem; ++ie) {
324 pv =
data->GetElementData(Z);
334 char* path = std::getenv(
"G4PARTICLEXSDATA");
336 std::ostringstream ost;
337 ost << path <<
"/neutron/cap";
340 G4Exception(
"G4NeutronCaptureXS::Initialise(..)",
"had013",
342 "Environment variable G4PARTICLEXSDATA is not defined");
350 #ifdef G4MULTITHREADED
352 if(!
data->GetElementData(Z)) {
355 #ifdef G4MULTITHREADED
363 if(
data->GetElementData(Z)) {
return; }
366 std::ostringstream ost;
369 data->InitialiseForElement(Z, v);
374 data->InitialiseForComponent(Z, nmax);
377 std::ostringstream ost1;
380 data->AddComponent(Z, A, v);
389 std::ifstream filein(ost.str().c_str());
393 ed <<
"Data file <" << ost.str().c_str()
394 <<
"> is not opened!";
395 G4Exception(
"G4NeutronCaptureXS::RetrieveVector(..)",
"had014",
400 G4cout <<
"File " << ost.str()
401 <<
" is opened by G4NeutronCaptureXS" <<
G4endl;
407 ed <<
"Data file <" << ost.str().c_str()
408 <<
"> is not retrieved!";
409 G4Exception(
"G4NeutronCaptureXS::RetrieveVector(..)",
"had015",