41 const auto mass =
static_cast<std::uint32_t
>(atomicMass);
42 const auto charge =
static_cast<std::uint32_t
>(chargeNumber);
43 return (mass * (mass + 1)) / 2 + charge;
47G4FermiNucleiProperties::G4FermiNucleiProperties()
49 for (
auto a = 1; a < MAX_A; ++a) {
50 for (
auto z = 0; z <= a; ++z) {
51 const auto atomicMass = G4FermiAtomicMass(a);
52 const auto chargeNumber = G4FermiChargeNumber(z);
66 >=
static_cast<std::uint32_t
>(chargeNumber),
67 "invalid nuclei A = " << atomicMass <<
", Z = " << chargeNumber);
69 const auto slot = GetSlot(atomicMass, chargeNumber);
70 if (slot < nucleiMasses_.size() && nucleiMasses_[slot].isCached) {
71 return nucleiMasses_[slot].mass;
80 if (atomicMass < 1_m || chargeNumber < 0_c
81 ||
static_cast<std::uint32_t
>(chargeNumber)
82 >
static_cast<std::uint32_t
>(atomicMass))
87 const auto slot = GetSlot(atomicMass, chargeNumber);
89 return slot < nucleiMasses_.size() && nucleiMasses_[slot].isStable;
96 const auto slot = GetSlot(atomicMass, chargeNumber);
97 if (slot >= nucleiMasses_.size()) {
98 nucleiMasses_.resize(slot +
static_cast<std::uint32_t
>(atomicMass));
101 nucleiMasses_[slot] = G4FermiMassData{
#define FERMI_ASSERT_MSG(COND, MSG)
void InsertNuclei(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, G4double mass, G4bool isStable=true)
static G4bool IsInStableTable(const G4double A, const G4double Z)
static G4double GetNuclearMass(const G4double A, const G4double Z)