53 if (std::fabs(
A -
G4int(
A)) > 1.e-10) {
54 mass = NuclearMass(
A, Z);
67 if (mass_proton <= 0.0) {
70 if (nucleus !=
nullptr) mass_neutron = nucleus->
GetPDGMass();
73 if (nucleus !=
nullptr) mass_deuteron = nucleus->
GetPDGMass();
76 if (nucleus !=
nullptr) mass_triton = nucleus->
GetPDGMass();
79 if (nucleus !=
nullptr) mass_alpha = nucleus->
GetPDGMass();
82 if (nucleus !=
nullptr) mass_He3 = nucleus->
GetPDGMass();
85 if (nucleus !=
nullptr) mass_proton = nucleus->
GetPDGMass();
88 if (
A < 1 || Z < 0 || Z >
A) {
91 G4cout <<
"G4NucleiProperties::GetNuclearMass: Wrong values for A = " <<
A <<
" and Z = " << Z
101 if ((Z == 1) && (
A == 1)) {
104 else if ((Z == 0) && (
A == 1)) {
107 else if ((Z == 1) && (
A == 2)) {
108 mass = mass_deuteron;
110 else if ((Z == 1) && (
A == 3)) {
113 else if ((Z == 2) && (
A == 4)) {
116 else if ((Z == 2) && (
A == 3)) {
122 if (G4NucleiPropertiesTableAME12::IsInTable(Z,
A)) {
124 mass = G4NucleiPropertiesTableAME12::GetNuclearMass(Z,
A);
126 else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,
A)) {
128 mass = G4NucleiPropertiesTheoreticalTable::GetNuclearMass(Z,
A);
131 mass =
A * mass_proton;
134 mass =
A * mass_neutron;
141 if (mass < 0.) mass = 0.0;
154 if (
A < 1 || Z < 0 || Z >
A) {
157 G4cout <<
"G4NucleiProperties::IsInStableTable: Wrong values for A = " <<
A
158 <<
" and Z = " << Z <<
G4endl;
164 return G4NucleiPropertiesTableAME12::IsInTable(Z,
A);
176 if (
A < 1 || Z < 0 || Z >
A) {
179 G4cout <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = " <<
A <<
" and Z = " << Z
186 if (G4NucleiPropertiesTableAME12::IsInTable(Z,
A)) {
188 return G4NucleiPropertiesTableAME12::GetMassExcess(Z,
A);
190 if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,
A)) {
191 return G4NucleiPropertiesTheoreticalTable::GetMassExcess(Z,
A);
193 return MassExcess(
A, Z);
198 if (
A < 1 || Z < 0 || Z >
A) {
201 G4cout <<
"G4NucleiProperties::GetAtomicMass: Wrong values for A = " <<
A <<
" and Z = " << Z
207 if (std::fabs(
A -
G4int(
A)) > 1.e-10) {
208 return AtomicMass(
A, Z);
213 if (G4NucleiPropertiesTableAME12::IsInTable(Z,
A)) {
214 return G4NucleiPropertiesTableAME12::GetAtomicMass(Z,
A);
216 if (G4NucleiPropertiesTheoreticalTable::IsInTable(iZ, iA)) {
217 return G4NucleiPropertiesTheoreticalTable::GetAtomicMass(iZ, iA);
219 return AtomicMass(
A, Z);
231 if (
A < 1 || Z < 0 || Z >
A) {
234 G4cout <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = " <<
A <<
" and Z = " << Z
241 if (G4NucleiPropertiesTableAME12::IsInTable(Z,
A)) {
242 return G4NucleiPropertiesTableAME12::GetBindingEnergy(Z,
A);
244 if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,
A)) {
245 return G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(Z,
A);
247 return BindingEnergy(
A, Z);
252 return GetAtomicMass(
A, Z) -
A * amu_c2;
259 hydrogen_mass_excess = G4NucleiPropertiesTableAME12::GetMassExcess(1, 1);
260 neutron_mass_excess = G4NucleiPropertiesTableAME12::GetMassExcess(0, 1);
262 (
A - Z) * neutron_mass_excess + Z * hydrogen_mass_excess - BindingEnergy(
A, Z) +
A * amu_c2;
268 if (
A < 1 || Z < 0 || Z >
A) {
271 G4cout <<
"G4NucleiProperties::NuclearMass: Wrong values for A = " <<
A <<
" and Z = " << Z
283 mass -= Z * electron_mass_c2;
284 mass += (14.4381 * std::pow(Z, 2.39) + 1.55468 * 1e-6 * std::pow(Z, 5.35)) * eV;
297 + 17.23 * std::pow(
A, 2. / 3.)
298 + 93.15 * ((
A / 2. - Z) * (
A / 2. - Z)) /
A
299 + 0.6984523 * Z * Z * std::pow(
A, -1. / 3.);
300 if (Npairing == Zpairing) {
301 binding += (Npairing + Zpairing - 1) * 12.0 / std::sqrt(
A);
G4GLOB_DLL std::ostream G4cout
static G4double GetMassExcess(const G4int A, const G4int Z)
static G4bool IsInStableTable(const G4double A, const G4double Z)
static G4double GetBindingEnergy(const G4int A, const G4int Z)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetPDGMass() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()