Geant4  10.02.p03
G4NucleiProperties Class Reference

#include <G4NucleiProperties.hh>

Collaboration diagram for G4NucleiProperties:

Public Member Functions

 ~G4NucleiProperties ()
 
 G4NucleiProperties ()
 

Static Public Member Functions

static G4double GetNuclearMass (const G4double A, const G4double Z)
 
static G4double GetNuclearMass (const G4int A, const G4int Z)
 
static bool IsInStableTable (const G4double A, const G4double Z)
 
static bool IsInStableTable (const G4int A, const G4int Z)
 
static G4double GetBindingEnergy (const G4int A, const G4int Z)
 
static G4double GetBindingEnergy (const G4double A, const G4double Z)
 
static G4double GetMassExcess (const G4int A, const G4int Z)
 
static G4double GetMassExcess (const G4double A, const G4double Z)
 

Private Types

enum  { MaxZ = 120 }
 

Static Private Member Functions

static G4double GetAtomicMass (const G4double A, const G4double Z)
 
static G4double AtomicMass (G4double A, G4double Z)
 
static G4double NuclearMass (G4double A, G4double Z)
 
static G4double BindingEnergy (G4double A, G4double Z)
 
static G4double MassExcess (G4double A, G4double Z)
 

Static Private Attributes

static G4ThreadLocal G4double electronMass [MaxZ]
 
static G4ThreadLocal G4bool isIntialized
 
static G4ThreadLocal G4double mass_proton = -1.
 
static G4ThreadLocal G4double mass_neutron = -1.
 
static G4ThreadLocal G4double mass_deuteron = -1.
 
static G4ThreadLocal G4double mass_triton = -1.
 
static G4ThreadLocal G4double mass_alpha = -1.
 
static G4ThreadLocal G4double mass_He3 = -1.
 

Detailed Description

Definition at line 50 of file G4NucleiProperties.hh.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
MaxZ 

Definition at line 101 of file G4NucleiProperties.hh.

Constructor & Destructor Documentation

◆ ~G4NucleiProperties()

G4NucleiProperties::~G4NucleiProperties ( )
inline

Definition at line 59 of file G4NucleiProperties.hh.

59 { };

◆ G4NucleiProperties()

G4NucleiProperties::G4NucleiProperties ( )
inline

Definition at line 62 of file G4NucleiProperties.hh.

62 {};
Here is the call graph for this function:

Member Function Documentation

◆ AtomicMass()

G4double G4NucleiProperties::AtomicMass ( G4double  A,
G4double  Z 
)
staticprivate

Definition at line 252 of file G4NucleiProperties.cc.

253 {
254  const G4double hydrogen_mass_excess = G4NucleiPropertiesTableAME03::GetMassExcess(1,1);
255  const G4double neutron_mass_excess = G4NucleiPropertiesTableAME03::GetMassExcess(0,1);
256 
257  G4double mass =
258  (A-Z)*neutron_mass_excess + Z*hydrogen_mass_excess - BindingEnergy(A,Z) + A*amu_c2;
259 
260  return mass;
261 }
static G4double BindingEnergy(G4double A, G4double Z)
double A(double temperature)
Float_t Z
double G4double
Definition: G4Types.hh:76
float amu_c2
Definition: hepunit.py:277
static G4double GetMassExcess(G4int Z, G4int A)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BindingEnergy()

G4double G4NucleiProperties::BindingEnergy ( G4double  A,
G4double  Z 
)
staticprivate

Definition at line 283 of file G4NucleiProperties.cc.

284 {
285  //
286  // Weitzsaecker's Mass formula
287  //
288  G4int Npairing = G4int(A-Z)%2; // pairing
289  G4int Zpairing = G4int(Z)%2;
290  G4double binding =
291  - 15.67*A // nuclear volume
292  + 17.23*std::pow(A,2./3.) // surface energy
293  + 93.15*((A/2.-Z)*(A/2.-Z))/A // asymmetry
294  + 0.6984523*Z*Z*std::pow(A,-1./3.); // coulomb
295  if( Npairing == Zpairing ) binding += (Npairing+Zpairing-1) * 12.0 / std::sqrt(A); // pairing
296 
297  return -binding*MeV;
298 }
static const double MeV
Definition: G4SIunits.hh:211
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ GetAtomicMass()

G4double G4NucleiProperties::GetAtomicMass ( const G4double  A,
const G4double  Z 
)
staticprivate

Definition at line 189 of file G4NucleiProperties.cc.

190 {
191  if (A < 1 || Z < 0 || Z > A) {
192 #ifdef G4VERBOSE
193  if (G4ParticleTable::GetParticleTable()->GetVerboseLevel()>0) {
194  G4cout << "G4NucleiProperties::GetAtomicMass: Wrong values for A = "
195  << A << " and Z = " << Z << G4endl;
196  }
197 #endif
198  return 0.0;
199 
200  } else if (std::fabs(A - G4int(A)) > 1.e-10) {
201  return AtomicMass(A,Z);
202 
203  } else {
204  G4int iA = G4int(A);
205  G4int iZ = G4int(Z);
210  } else {
211  return AtomicMass(A,Z);
212  }
213  }
214 }
static G4double GetAtomicMass(G4int Z, G4int A)
static G4double AtomicMass(G4double A, G4double Z)
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
static G4ParticleTable * GetParticleTable()
static G4bool IsInTable(G4int Z, G4int A)
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetBindingEnergy() [1/2]

G4double G4NucleiProperties::GetBindingEnergy ( const G4int  A,
const G4int  Z 
)
static

Definition at line 223 of file G4NucleiProperties.cc.

224 {
225  if (A < 1 || Z < 0 || Z > A) {
226 #ifdef G4VERBOSE
227  if (G4ParticleTable::GetParticleTable()->GetVerboseLevel()>0) {
228  G4cout << "G4NucleiProperties::GetMassExccess: Wrong values for A = "
229  << A << " and Z = " << Z << G4endl;
230  }
231 #endif
232  return 0.0;
233 
234  } else {
239  }else {
240  return BindingEnergy(A,Z);
241  }
242 
243  }
244 }
static G4double BindingEnergy(G4double A, G4double Z)
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
static G4double GetBindingEnergy(G4int Z, G4int A)
Float_t Z
static G4double GetBindingEnergy(G4int Z, G4int A)
static G4ParticleTable * GetParticleTable()
static G4bool IsInTable(G4int Z, G4int A)
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetBindingEnergy() [2/2]

G4double G4NucleiProperties::GetBindingEnergy ( const G4double  A,
const G4double  Z 
)
static

Definition at line 216 of file G4NucleiProperties.cc.

217 {
218  G4int iA = G4int(A);
219  G4int iZ = G4int(Z);
220  return GetBindingEnergy(iA,iZ);
221 }
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
static G4double GetBindingEnergy(const G4int A, const G4int Z)
Here is the call graph for this function:

◆ GetMassExcess() [1/2]

G4double G4NucleiProperties::GetMassExcess ( const G4int  A,
const G4int  Z 
)
static

Definition at line 164 of file G4NucleiProperties.cc.

165 {
166  if (A < 1 || Z < 0 || Z > A) {
167 #ifdef G4VERBOSE
168  if (G4ParticleTable::GetParticleTable()->GetVerboseLevel()>0) {
169  G4cout << "G4NucleiProperties::GetMassExccess: Wrong values for A = "
170  << A << " and Z = " << Z << G4endl;
171  }
172 #endif
173  return 0.0;
174 
175  } else {
176 
181  } else {
182  return MassExcess(A,Z);
183  }
184  }
185 
186 }
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
static G4ParticleTable * GetParticleTable()
static G4bool IsInTable(G4int Z, G4int A)
#define G4endl
Definition: G4ios.hh:61
static G4double GetMassExcess(G4int Z, G4int A)
static G4double MassExcess(G4double A, G4double Z)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetMassExcess() [2/2]

G4double G4NucleiProperties::GetMassExcess ( const G4double  A,
const G4double  Z 
)
static

Definition at line 157 of file G4NucleiProperties.cc.

158 {
159  G4int iA = G4int(A);
160  G4int iZ = G4int(Z);
161  return GetMassExcess(iA,iZ);
162 }
int G4int
Definition: G4Types.hh:78
static G4double GetMassExcess(const G4int A, const G4int Z)
double A(double temperature)
Float_t Z
Here is the call graph for this function:

◆ GetNuclearMass() [1/2]

G4double G4NucleiProperties::GetNuclearMass ( const G4double  A,
const G4double  Z 
)
static

Definition at line 53 of file G4NucleiProperties.cc.

54 {
55  G4double mass=0.0;
56 
57  if (std::fabs(A - G4int(A)) > 1.e-10) {
58  mass = NuclearMass(A,Z);
59 
60  } else {
61  // use mass table
62  G4int iZ = G4int(Z);
63  G4int iA = G4int(A);
64  mass =GetNuclearMass(iA,iZ);
65  }
66 
67  return mass;
68 }
static G4double GetNuclearMass(const G4double A, const G4double Z)
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
static G4double NuclearMass(G4double A, G4double Z)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ GetNuclearMass() [2/2]

G4double G4NucleiProperties::GetNuclearMass ( const G4int  A,
const G4int  Z 
)
static

Definition at line 71 of file G4NucleiProperties.cc.

72 {
73  if (mass_proton <= 0.0 ) {
74  const G4ParticleDefinition * nucleus = 0;
75  nucleus = G4ParticleTable::GetParticleTable()->FindParticle("proton"); // proton
76  if (nucleus!=0) mass_proton = nucleus->GetPDGMass();
77  nucleus = G4ParticleTable::GetParticleTable()->FindParticle("neutron"); // neutron
78  if (nucleus!=0) mass_neutron = nucleus->GetPDGMass();
79  nucleus = G4ParticleTable::GetParticleTable()->FindParticle("deuteron"); // deuteron
80  if (nucleus!=0) mass_deuteron = nucleus->GetPDGMass();
81  nucleus = G4ParticleTable::GetParticleTable()->FindParticle("triton"); // triton
82  if (nucleus!=0) mass_triton = nucleus->GetPDGMass();
83  nucleus = G4ParticleTable::GetParticleTable()->FindParticle("alpha"); // alpha
84  if (nucleus!=0) mass_alpha = nucleus->GetPDGMass();
85  nucleus = G4ParticleTable::GetParticleTable()->FindParticle("He3"); // He3
86  if (nucleus!=0) mass_He3 = nucleus->GetPDGMass();
87 
88  }
89 
90  if (A < 1 || Z < 0 || Z > A) {
91 #ifdef G4VERBOSE
92  if (G4ParticleTable::GetParticleTable()->GetVerboseLevel()>0) {
93  G4cout << "G4NucleiProperties::GetNuclearMass: Wrong values for A = " << A
94  << " and Z = " << Z << G4endl;
95  }
96 #endif
97  return 0.0;
98  }
99 
100  G4double mass= -1.;
101  if ( (Z<=2) ) {
102  // light nuclei
103  if ( (Z==1)&&(A==1) ) {
104  mass = mass_proton;
105  } else if ( (Z==0)&&(A==1) ) {
106  mass = mass_neutron;
107  } else if ( (Z==1)&&(A==2) ) {
108  mass = mass_deuteron;
109  } else if ( (Z==1)&&(A==3) ) {
110  mass = mass_triton;
111  } else if ( (Z==2)&&(A==4) ) {
112  mass = mass_alpha;
113  } else if ( (Z==2)&&(A==3) ) {
114  mass = mass_He3;
115  }
116  }
117 
118  if (mass < 0.) {
120  // AME 03 table
123  // Theoretical table
125  } else {
126  mass = NuclearMass(G4double(A),G4double(Z));
127  }
128  }
129 
130  if (mass < 0.) mass = 0.0;
131  return mass;
132 }
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ThreadLocal G4double mass_deuteron
static G4ThreadLocal G4double mass_neutron
static G4double GetNuclearMass(G4int Z, G4int A)
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
static G4double NuclearMass(G4double A, G4double Z)
static G4ThreadLocal G4double mass_triton
static G4ThreadLocal G4double mass_proton
static G4ThreadLocal G4double mass_He3
static G4ParticleTable * GetParticleTable()
static G4bool IsInTable(G4int Z, G4int A)
static G4ThreadLocal G4double mass_alpha
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ IsInStableTable() [1/2]

G4bool G4NucleiProperties::IsInStableTable ( const G4double  A,
const G4double  Z 
)
static

Definition at line 134 of file G4NucleiProperties.cc.

135 {
136  G4int iA = G4int(A);
137  G4int iZ = G4int(Z);
138  return IsInStableTable(iA, iZ);
139 }
int G4int
Definition: G4Types.hh:78
double A(double temperature)
Float_t Z
static bool IsInStableTable(const G4double A, const G4double Z)
Here is the caller graph for this function:

◆ IsInStableTable() [2/2]

G4bool G4NucleiProperties::IsInStableTable ( const G4int  A,
const G4int  Z 
)
static

Definition at line 141 of file G4NucleiProperties.cc.

142 {
143  if (A < 1 || Z < 0 || Z > A) {
144 #ifdef G4VERBOSE
145  if (G4ParticleTable::GetParticleTable()->GetVerboseLevel()>0) {
146  G4cout << "G4NucleiProperties::IsInStableTable: Wrong values for A = "
147  << A << " and Z = " << Z << G4endl;
148  }
149 #endif
150  return false;
151  }
152 
154 
155 }
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
static G4ParticleTable * GetParticleTable()
static G4bool IsInTable(G4int Z, G4int A)
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:

◆ MassExcess()

G4double G4NucleiProperties::MassExcess ( G4double  A,
G4double  Z 
)
staticprivate

Definition at line 247 of file G4NucleiProperties.cc.

248 {
249  return GetAtomicMass(A,Z) - A*amu_c2;
250 }
static G4double GetAtomicMass(const G4double A, const G4double Z)
double A(double temperature)
Float_t Z
float amu_c2
Definition: hepunit.py:277
Here is the call graph for this function:
Here is the caller graph for this function:

◆ NuclearMass()

G4double G4NucleiProperties::NuclearMass ( G4double  A,
G4double  Z 
)
staticprivate

Definition at line 263 of file G4NucleiProperties.cc.

264 {
265  if (A < 1 || Z < 0 || Z > A) {
266 #ifdef G4VERBOSE
267  if (G4ParticleTable::GetParticleTable()->GetVerboseLevel()>0) {
268  G4cout << "G4NucleiProperties::NuclearMass: Wrong values for A = "
269  << A << " and Z = " << Z << G4endl;
270  }
271 #endif
272  return 0.0;
273  }
274 
275  G4double mass = AtomicMass(A,Z);
276  // atomic mass is converted to nuclear mass according formula in AME03
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;
279 
280  return mass;
281 }
static G4double AtomicMass(G4double A, G4double Z)
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
Float_t Z
float electron_mass_c2
Definition: hepunit.py:274
static const double eV
Definition: G4SIunits.hh:212
static G4ParticleTable * GetParticleTable()
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ electronMass

G4ThreadLocal G4double G4NucleiProperties::electronMass[MaxZ]
staticprivate

Definition at line 102 of file G4NucleiProperties.hh.

◆ isIntialized

G4ThreadLocal G4bool G4NucleiProperties::isIntialized
staticprivate

Definition at line 105 of file G4NucleiProperties.hh.

◆ mass_alpha

G4ThreadLocal G4double G4NucleiProperties::mass_alpha = -1.
staticprivate

Definition at line 110 of file G4NucleiProperties.hh.

◆ mass_deuteron

G4ThreadLocal G4double G4NucleiProperties::mass_deuteron = -1.
staticprivate

Definition at line 108 of file G4NucleiProperties.hh.

◆ mass_He3

G4ThreadLocal G4double G4NucleiProperties::mass_He3 = -1.
staticprivate

Definition at line 111 of file G4NucleiProperties.hh.

◆ mass_neutron

G4ThreadLocal G4double G4NucleiProperties::mass_neutron = -1.
staticprivate

Definition at line 107 of file G4NucleiProperties.hh.

◆ mass_proton

G4ThreadLocal G4double G4NucleiProperties::mass_proton = -1.
staticprivate

Definition at line 106 of file G4NucleiProperties.hh.

◆ mass_triton

G4ThreadLocal G4double G4NucleiProperties::mass_triton = -1.
staticprivate

Definition at line 109 of file G4NucleiProperties.hh.


The documentation for this class was generated from the following files: