54 if (std::fabs(
A -
G4int(
A)) > 1.e-10)
56 mass = NuclearMass(
A,
Z);
72 if (mass_proton <= 0.0 )
76 if (nucleus!=
nullptr) mass_neutron = nucleus->
GetPDGMass();
79 if (nucleus!=
nullptr) mass_deuteron = nucleus->
GetPDGMass();
82 if (nucleus!=
nullptr) mass_triton = nucleus->
GetPDGMass();
85 if (nucleus!=
nullptr) mass_alpha = nucleus->
GetPDGMass();
88 if (nucleus!=
nullptr) mass_He3 = nucleus->
GetPDGMass();
91 if (nucleus!=
nullptr) mass_proton = nucleus->
GetPDGMass();
94 if (
A < 1 || Z < 0 || Z >
A)
99 G4cout <<
"G4NucleiProperties::GetNuclearMass: Wrong values for A = "
110 if ( (
Z==1)&&(
A==1) ) {
112 }
else if ( (
Z==0)&&(
A==1) ) {
114 }
else if ( (
Z==1)&&(
A==2) ) {
115 mass = mass_deuteron;
116 }
else if ( (
Z==1)&&(
A==3) ) {
118 }
else if ( (
Z==2)&&(
A==4) ) {
120 }
else if ( (
Z==2)&&(
A==3) ) {
127 if ( G4NucleiPropertiesTableAME12::IsInTable(
Z,
A) ) {
129 mass = G4NucleiPropertiesTableAME12::GetNuclearMass(
Z,
A);
130 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(
Z,
A)){
132 mass = G4NucleiPropertiesTheoreticalTable::GetNuclearMass(
Z,
A);
133 }
else if (
Z ==
A ) {
134 mass =
A*mass_proton;
135 }
else if( 0 ==
Z ) {
136 mass =
A*mass_neutron;
142 if (mass < 0.) mass = 0.0;
155 if (
A < 1 || Z < 0 || Z >
A)
160 G4cout <<
"G4NucleiProperties::IsInStableTable: Wrong values for A = "
167 return G4NucleiPropertiesTableAME12::IsInTable(
Z,
A);
179 if (
A < 1 || Z < 0 || Z >
A)
184 G4cout <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = "
194 if ( G4NucleiPropertiesTableAME12::IsInTable(
Z,
A) ){
196 return G4NucleiPropertiesTableAME12::GetMassExcess(
Z,
A);
197 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(
Z,
A)){
198 return G4NucleiPropertiesTheoreticalTable::GetMassExcess(
Z,
A);
200 return MassExcess(
A,
Z);
208 if (
A < 1 || Z < 0 || Z >
A)
213 G4cout <<
"G4NucleiProperties::GetAtomicMass: Wrong values for A = "
220 else if (std::fabs(
A -
G4int(
A)) > 1.e-10)
222 return AtomicMass(
A,
Z);
228 if ( G4NucleiPropertiesTableAME12::IsInTable(
Z,
A) ) {
229 return G4NucleiPropertiesTableAME12::GetAtomicMass(
Z,
A);
230 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(iZ,iA)){
231 return G4NucleiPropertiesTheoreticalTable::GetAtomicMass(iZ,iA);
233 return AtomicMass(
A,
Z);
248 if (
A < 1 || Z < 0 || Z >
A)
253 G4cout <<
"G4NucleiProperties::GetMassExccess: Wrong values for A = "
262 if ( G4NucleiPropertiesTableAME12::IsInTable(
Z,
A) ) {
263 return G4NucleiPropertiesTableAME12::GetBindingEnergy(
Z,
A);
264 }
else if (G4NucleiPropertiesTheoreticalTable::IsInTable(
Z,
A)) {
265 return G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(
Z,
A);
267 return BindingEnergy(
A,
Z);
274 return GetAtomicMass(
A,
Z) -
A*amu_c2;
281 hydrogen_mass_excess = G4NucleiPropertiesTableAME12::GetMassExcess(1,1);
282 neutron_mass_excess = G4NucleiPropertiesTableAME12::GetMassExcess(0,1);
284 +
Z*hydrogen_mass_excess - BindingEnergy(
A,
Z) +
A*amu_c2;
290 if (
A < 1 || Z < 0 || Z >
A)
295 G4cout <<
"G4NucleiProperties::NuclearMass: Wrong values for A = "
307 mass -=
Z*electron_mass_c2;
308 mass += ( 14.4381*std::pow (
Z , 2.39 )
309 + 1.55468*1e-6*std::pow (
Z , 5.35 ) )*eV;
323 + 17.23*std::pow(
A,2./3.)
324 + 93.15*((
A/2.-
Z)*(
A/2.-
Z))/
A
325 + 0.6984523*
Z*
Z*std::pow(
A,-1./3.);
326 if( Npairing == Zpairing )
328 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()