58 #ifndef G4NucleiProperties_USE_OLD_AME_TABLE
59 G4bool G4NucleiProperties::use_old_evaluation =
false;
61 G4bool G4NucleiProperties::use_old_evaluation =
true;
68 if (std::fabs(A -
G4int(A)) > 1.e-10) {
69 mass = NuclearMass(A,Z);
84 if (mass_proton <= 0.0 ) {
87 if (nucleus!=0) mass_proton = nucleus->
GetPDGMass();
89 if (nucleus!=0) mass_neutron = nucleus->
GetPDGMass();
91 if (nucleus!=0) mass_deuteron = nucleus->
GetPDGMass();
93 if (nucleus!=0) mass_triton = nucleus->
GetPDGMass();
95 if (nucleus!=0) mass_alpha = nucleus->
GetPDGMass();
97 if (nucleus!=0) mass_He3 = nucleus->
GetPDGMass();
101 if (A < 1 || Z < 0 || Z > A) {
104 G4cout <<
"G4NucleiProperties::GetNuclearMass: Wrong values for A = " << A
105 <<
" and Z = " << Z <<
G4endl;
114 if ( (Z==1)&&(A==1) ) {
116 }
else if ( (Z==0)&&(A==1) ) {
118 }
else if ( (Z==1)&&(A==2) ) {
119 mass = mass_deuteron;
120 }
else if ( (Z==1)&&(A==3) ) {
122 }
else if ( (Z==2)&&(A==4) ) {
124 }
else if ( (Z==2)&&(A==3) ) {
130 G4bool inAMETable =
false;
131 if ( ! use_old_evaluation ) {
132 inAMETable = G4NucleiPropertiesTableAME12::IsInTable(Z,A);
134 inAMETable = G4NucleiPropertiesTableAME03::IsInTable(Z,A);
138 if ( ! use_old_evaluation ) {
139 mass = G4NucleiPropertiesTableAME12::GetNuclearMass(Z,A);
141 mass = G4NucleiPropertiesTableAME03::GetNuclearMass(Z,A);
143 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)){
145 mass = G4NucleiPropertiesTheoreticalTable::GetNuclearMass(Z,A);
151 if (mass < 0.) mass = 0.0;
164 if (A < 1 || Z < 0 || Z > A) {
167 G4cout <<
"G4NucleiProperties::IsInStableTable: Wrong values for A = "
168 << A <<
" and Z = " << Z <<
G4endl;
174 if ( ! use_old_evaluation ) {
175 return G4NucleiPropertiesTableAME12::IsInTable(Z,A);
177 return G4NucleiPropertiesTableAME03::IsInTable(Z,A);
190 if (A < 1 || Z < 0 || Z > A) {
193 G4cout <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = "
194 << A <<
" and Z = " << Z <<
G4endl;
201 G4bool inAMETable =
false;
202 if ( ! use_old_evaluation ) {
203 inAMETable = G4NucleiPropertiesTableAME12::IsInTable(Z,A);
205 inAMETable = G4NucleiPropertiesTableAME03::IsInTable(Z,A);
209 if ( ! use_old_evaluation ) {
210 return G4NucleiPropertiesTableAME12::GetMassExcess(Z,A);
212 return G4NucleiPropertiesTableAME03::GetMassExcess(Z,A);
214 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)){
215 return G4NucleiPropertiesTheoreticalTable::GetMassExcess(Z,A);
217 return MassExcess(A,Z);
226 if (A < 1 || Z < 0 || Z > A) {
229 G4cout <<
"G4NucleiProperties::GetAtomicMass: Wrong values for A = "
230 << A <<
" and Z = " << Z <<
G4endl;
235 }
else if (std::fabs(A -
G4int(A)) > 1.e-10) {
236 return AtomicMass(A,Z);
241 G4bool inAMETable =
false;
242 if ( ! use_old_evaluation ) {
243 inAMETable = G4NucleiPropertiesTableAME12::IsInTable(Z,A);
245 inAMETable = G4NucleiPropertiesTableAME03::IsInTable(Z,A);
248 if ( ! use_old_evaluation ) {
249 return G4NucleiPropertiesTableAME12::GetAtomicMass(Z,A);
251 return G4NucleiPropertiesTableAME03::GetAtomicMass(Z,A);
253 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(iZ,iA)){
254 return G4NucleiPropertiesTheoreticalTable::GetAtomicMass(iZ,iA);
256 return AtomicMass(A,Z);
270 if (A < 1 || Z < 0 || Z > A) {
273 G4cout <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = "
274 << A <<
" and Z = " << Z <<
G4endl;
280 G4bool inAMETable =
false;
281 if ( ! use_old_evaluation ) {
282 inAMETable = G4NucleiPropertiesTableAME12::IsInTable(Z,A);
284 inAMETable = G4NucleiPropertiesTableAME03::IsInTable(Z,A);
287 if ( ! use_old_evaluation ) {
288 return G4NucleiPropertiesTableAME12::GetBindingEnergy(Z,A);
290 return G4NucleiPropertiesTableAME03::GetBindingEnergy(Z,A);
292 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)) {
293 return G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(Z,A);
295 return BindingEnergy(A,Z);
304 return GetAtomicMass(A,Z) - A*
amu_c2;
313 if ( ! use_old_evaluation ) {
314 hydrogen_mass_excess = G4NucleiPropertiesTableAME12::GetMassExcess(1,1);
315 neutron_mass_excess = G4NucleiPropertiesTableAME12::GetMassExcess(0,1);
317 hydrogen_mass_excess = G4NucleiPropertiesTableAME03::GetMassExcess(1,1);
318 neutron_mass_excess = G4NucleiPropertiesTableAME03::GetMassExcess(0,1);
322 (A-
Z)*neutron_mass_excess + Z*hydrogen_mass_excess - BindingEnergy(A,Z) + A*
amu_c2;
329 if (A < 1 || Z < 0 || Z > A) {
332 G4cout <<
"G4NucleiProperties::NuclearMass: Wrong values for A = "
333 << A <<
" and Z = " << Z <<
G4endl;
342 mass += ( 14.4381*std::pow ( Z , 2.39 ) + 1.55468*1e-6*std::pow ( Z , 5.35 ) )*
eV;
356 + 17.23*std::pow(A,2./3.)
357 + 93.15*((A/2.-
Z)*(A/2.-Z))/A
358 + 0.6984523*Z*Z*std::pow(A,-1./3.);
359 if( Npairing == Zpairing ) binding += (Npairing+Zpairing-1) * 12.0 / std::sqrt(A);
366 use_old_evaluation = val;
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static constexpr double electron_mass_c2
static void UseOldAMETable(G4bool val=true)
static G4double GetMassExcess(const G4int A, const G4int Z)
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
static bool IsInStableTable(const G4double A, const G4double Z)
static constexpr double eV
static constexpr double amu_c2
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
static G4double GetBindingEnergy(const G4int A, const G4int Z)
static constexpr double MeV