46G4double G4NucleiProperties::mass_proton = -1.;
47G4double G4NucleiProperties::mass_neutron = -1.;
48G4double G4NucleiProperties::mass_deuteron = -1.;
49G4double G4NucleiProperties::mass_triton = -1.;
50G4double G4NucleiProperties::mass_alpha = -1.;
51G4double 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;
277 mass -= Z*electron_mass_c2;
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);
G4DLLIMPORT std::ostream G4cerr
static G4double GetMassExcess(const G4int A, const G4int Z)
static bool 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()