46 G4double G4NucleiProperties::mass_proton = -1.;
47 G4double G4NucleiProperties::mass_neutron = -1.;
48 G4double G4NucleiProperties::mass_deuteron = -1.;
49 G4double G4NucleiProperties::mass_triton = -1.;
50 G4double G4NucleiProperties::mass_alpha = -1.;
51 G4double G4NucleiProperties::mass_He3 = -1.;
57 if (std::fabs(A -
G4int(A)) > 1.
e-10) {
58 mass = NuclearMass(A,Z);
73 if (mass_proton <= 0.0 ) {
76 if (nucleus!=0) mass_proton = nucleus->
GetPDGMass();
78 if (nucleus!=0) mass_neutron = nucleus->
GetPDGMass();
80 if (nucleus!=0) mass_deuteron = nucleus->
GetPDGMass();
82 if (nucleus!=0) mass_triton = nucleus->
GetPDGMass();
84 if (nucleus!=0) mass_alpha = nucleus->
GetPDGMass();
86 if (nucleus!=0) mass_He3 = nucleus->
GetPDGMass();
90 if (A < 1 || Z < 0 || Z > A) {
93 G4cerr <<
"G4NucleiProperties::GetNuclearMass: Wrong values for A = " << A
94 <<
" and Z = " << Z <<
G4endl;
103 if ( (Z==1)&&(A==1) ) {
105 }
else if ( (Z==0)&&(A==1) ) {
107 }
else if ( (Z==1)&&(A==2) ) {
108 mass = mass_deuteron;
109 }
else if ( (Z==1)&&(A==3) ) {
111 }
else if ( (Z==2)&&(A==4) ) {
113 }
else if ( (Z==2)&&(A==3) ) {
119 if (G4NucleiPropertiesTableAME03::IsInTable(Z,A)) {
121 mass = G4NucleiPropertiesTableAME03::GetNuclearMass(Z,A);
122 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)){
124 mass = G4NucleiPropertiesTheoreticalTable::GetNuclearMass(Z,A);
130 if (mass < 0.) mass = 0.0;
143 if (A < 1 || Z < 0 || Z > A) {
146 G4cerr <<
"G4NucleiProperties::IsInStableTable: Wrong values for A = "
147 << A <<
" and Z = " << Z <<
G4endl;
153 return G4NucleiPropertiesTableAME03::IsInTable(Z,A);
166 if (A < 1 || Z < 0 || Z > A) {
169 G4cerr <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = "
170 << A <<
" and Z = " << Z <<
G4endl;
177 if (G4NucleiPropertiesTableAME03::IsInTable(Z,A)){
178 return G4NucleiPropertiesTableAME03::GetMassExcess(Z,A);
179 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)){
180 return G4NucleiPropertiesTheoreticalTable::GetMassExcess(Z,A);
182 return MassExcess(A,Z);
191 if (A < 1 || Z < 0 || Z > A) {
194 G4cerr <<
"G4NucleiProperties::GetAtomicMass: Wrong values for A = "
195 << A <<
" and Z = " << Z <<
G4endl;
200 }
else if (std::fabs(A -
G4int(A)) > 1.
e-10) {
201 return AtomicMass(A,Z);
206 if (G4NucleiPropertiesTableAME03::IsInTable(iZ,iA)) {
207 return G4NucleiPropertiesTableAME03::GetAtomicMass(iZ,iA);
208 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(iZ,iA)){
209 return G4NucleiPropertiesTheoreticalTable::GetAtomicMass(iZ,iA);
211 return AtomicMass(A,Z);
225 if (A < 1 || Z < 0 || Z > A) {
228 G4cerr <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = "
229 << A <<
" and Z = " << Z <<
G4endl;
235 if (G4NucleiPropertiesTableAME03::IsInTable(Z,A)) {
236 return G4NucleiPropertiesTableAME03::GetBindingEnergy(Z,A);
237 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)) {
238 return G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(Z,A);
240 return BindingEnergy(A,Z);
249 return GetAtomicMass(A,Z) - A*
amu_c2;
254 const G4double hydrogen_mass_excess = G4NucleiPropertiesTableAME03::GetMassExcess(1,1);
255 const G4double neutron_mass_excess = G4NucleiPropertiesTableAME03::GetMassExcess(0,1);
258 (A-
Z)*neutron_mass_excess + Z*hydrogen_mass_excess - BindingEnergy(A,Z) + A*
amu_c2;
265 if (A < 1 || Z < 0 || Z > A) {
268 G4cerr <<
"G4NucleiProperties::NuclearMass: Wrong values for A = "
269 << A <<
" and Z = " << Z <<
G4endl;
278 mass += ( 14.4381*std::pow ( Z , 2.39 ) + 1.55468*1
e-6*std::pow ( Z , 5.35 ) )*
eV;
292 + 17.23*std::pow(A,2./3.)
293 + 93.15*((A/2.-
Z)*(A/2.-Z))/A
294 + 0.6984523*Z*Z*std::pow(A,-1./3.);
295 if( Npairing == Zpairing ) binding += (Npairing+Zpairing-1) * 12.0 / std::sqrt(A);