58 theCrossSections =
nullptr;
59 instanceOfWorker =
false;
61 instanceOfWorker =
true;
63 element_cache =
nullptr;
64 material_cache =
nullptr;
72 if (theCrossSections !=
nullptr && !instanceOfWorker) {
74 delete theCrossSections;
75 theCrossSections =
nullptr;
93 if (dp->
GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache)
97 element_cache = element;
98 material_cache = material;
118 "Attempt to use NeutronHP data for particles other than neutrons!!!");
128 if (theCrossSections ==
nullptr)
137 for (std::size_t i = 0; i < numberOfElements; ++i) {
150 "Attempt to use NeutronHP data for particles other than neutrons!!!");
164 G4cout <<
"Elastic Cross Section of Neutron HP" <<
G4endl;
165 G4cout <<
"(Pointwise cross-section at 0 Kelvin.)" <<
G4endl;
175 for (std::size_t i = 0; i < numberOfElements; ++i) {
179 for (ie = 0; ie < 130; ++ie) {
181 G4bool outOfRange =
false;
183 if (eKinetic < 20 * MeV) {
184 G4cout << eKinetic / eV <<
" "
185 << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange) / barn <<
G4endl;
206 if (eKinetic < aT * k_Boltzmann) {
212 return ((*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange)) * factor;
235 G4int size =
G4int(std::max(10., aT / 60 * kelvin));
241 || std::abs(buffer - result / std::max(1, counter))
244 if (counter != 0) buffer = result / counter;
245 while (counter < size)
249 boosted.
Lorentz(theNeutron, aThermalNuc);
251 aXsection = (*((*theCrossSections)(index))).GetValue(theEkin, outOfRange);
254 aXsection *= (targetVelocity - neutronVelocity).mag() / neutronVMag;
281 outFile <<
"High Precision cross data based on Evaluated Nuclear Data Files (ENDF) for elastic "
282 "reaction of neutrons below 20MeV\n";
std::vector< G4Element * > G4ElementTable
G4GLOB_DLL std::ostream G4cout
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4ThreeVector GetMomentum() const
static G4ElementTable * GetElementTable()
static size_t GetNumberOfElements()
static G4HadronicParameters * Instance()
G4double GetTemperature() const
static G4Neutron * Neutron()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ReactionProduct GetThermalNucleus(G4double aMass, G4double temp=-1) const
G4double GetPDGMass() const
G4PhysicsVector * MakePhysicsVector(const G4Element *thE, G4ParticleHPFissionData *theP)
static G4ParticleHPData * Instance(G4ParticleDefinition *projectile)
void DumpPhysicsTable(const G4ParticleDefinition &) override
G4ParticleHPElasticData()
~G4ParticleHPElasticData() override
void BuildPhysicsTable(const G4ParticleDefinition &) override
void CrossSectionDescription(std::ostream &) const override
void SetVerboseLevel(G4int) override
G4int GetVerboseLevel() const
G4bool IsIsoApplicable(const G4DynamicParticle *, G4int, G4int, const G4Element *, const G4Material *) override
G4double GetIsoCrossSection(const G4DynamicParticle *, G4int, G4int, const G4Isotope *, const G4Element *, const G4Material *) override
G4double GetCrossSection(const G4DynamicParticle *, const G4Element *, G4double aT)
G4PhysicsTable * GetElasticCrossSections() const
G4int GetVerboseLevel() const
void SetVerboseLevel(G4int i)
void RegisterElasticCrossSections(G4PhysicsTable *val)
static G4ParticleHPManager * GetInstance()
void push_back(G4PhysicsVector *)
static G4Pow * GetInstance()
G4double powA(G4double A, G4double y) const
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)
G4double GetMaxKinEnergy() const
void SetMaxKinEnergy(G4double value)
void SetMinKinEnergy(G4double value)
G4double GetMinKinEnergy() const