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 G4cout <<
"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 G4cout <<
"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 G4cout <<
"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 G4cout <<
"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 G4cout <<
"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 G4cout <<
"G4NucleiProperties::NuclearMass: Wrong values for A = "
269 << A <<
" and Z = " << Z <<
G4endl;
278 mass += ( 14.4381*std::pow ( Z , 2.39 ) + 1.55468*1e-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);
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4double GetMassExcess(const G4int A, const G4int Z)
G4GLOB_DLL std::ostream G4cout
static bool IsInStableTable(const G4double A, const G4double Z)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
static G4double GetBindingEnergy(const G4int A, const G4int Z)