57G4bool G4NeutronHPCaptureData::fLock =
true;
68 emax = 20.*CLHEP::MeV;
75 if (
nullptr != theCrossSections)
77 delete theCrossSections;
78 theCrossSections =
nullptr;
97 material == material_cache)
101 element_cache = element;
102 material_cache = material;
119 if (!isFirst) {
return; }
123 <<
" only neutron is allowed";
124 G4Exception(
"G4NeutronHPCaptureData::BuildPhysicsTable(..)",
"had012",
131 if (theCrossSections !=
nullptr) {
133 delete theCrossSections;
140 for (std::size_t i = 0; i < numberOfElements; ++i) {
141 auto elm = (*theElementTable)[i];
144 G4cout <<
"ElementIndex " << elm->GetIndex() <<
" "
145 << elm->GetName() <<
G4endl;
170 G4cout <<
"Capture Cross Section of Neutron HP" <<
G4endl;
171 G4cout <<
"(Pointwise cross-section at 0 Kelvin.)" <<
G4endl;
180 for (std::size_t i = 0; i < numberOfElements; ++i) {
196 if (eKinetic >= emax) {
return 0.0; }
200 return (*((*theCrossSections)(idx))).Value(eKinetic);
212 / CLHEP::neutron_mass_c2;
220 G4int size =
G4int(std::max(10., aT / 60 * kelvin));
225 while (counter == 0 ||
226 std::abs(buffer - result / std::max(1, counter)) > 0.03 * buffer)
229 if (counter != 0) buffer = result / counter;
230 while (counter < size)
234 boosted.
Lorentz(theNeutron, aThermalNuc);
236 aXsection = (*((*theCrossSections)(idx))).Value(theEkin);
239 aXsection *= (targetVelocity - neutronVelocity).mag() / neutronVMag;
256 outF <<
"High Precision cross data based on Evaluated Nuclear Data Files"
257 <<
" (ENDF) for radiative capture reaction of neutrons below 20 MeV";
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
#define G4MUTEX_INITIALIZER
G4GLOB_DLL std::ostream G4cout
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4ThreeVector GetMomentum() const
static G4ElementTable * GetElementTable()
static size_t GetNumberOfElements()
G4double GetTemperature() const
~G4NeutronHPCaptureData() override
G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *, const G4Material *) override
G4double GetCrossSection(const G4DynamicParticle *, const G4Element *, G4double aT)
void DumpPhysicsTable(const G4ParticleDefinition &) override
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *, const G4Element *, const G4Material *) override
void BuildPhysicsTable(const G4ParticleDefinition &) override
void CrossSectionDescription(std::ostream &) const override
static G4Neutron * Neutron()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ReactionProduct GetThermalNucleus(G4double aMass, G4double temp=-1) const
G4double GetPDGMass() const
const G4String & GetParticleName() const
G4PhysicsVector * MakePhysicsVector(const G4Element *thE, G4ParticleHPFissionData *theP)
static G4ParticleHPData * Instance(G4ParticleDefinition *projectile)
G4int GetVerboseLevel() const
void RegisterCaptureCrossSections(G4PhysicsTable *val)
static G4ParticleHPManager * GetInstance()
G4bool GetNeglectDoppler() const
void push_back(G4PhysicsVector *)
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4double GetKineticEnergy() const
G4ThreeVector GetMomentum() const
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
void SetKineticEnergy(const G4double en)