Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4NistElementBuilder.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id$
27
28#ifndef G4NistElementBuilder_h
29#define G4NistElementBuilder_h 1
30
31//---------------------------------------------------------------------------
32//
33// ClassName: G4NistElementBuilder
34//
35// Description: Utility class to hold and manipulate G4Elements defined from
36// Nist data base
37//
38// Author: V.Ivanchenko 21.11.2004
39//
40// Modifications:
41// 27.02.06 V.Ivanchenko Return m=0 if Z&N combination is out of NIST
42// 27.02.06 V.Ivanchenko add GetAtomicMassAmu
43// 17.10.06 V.Ivanchenko add GetAtomicMass and GetNistElementNames methods
44// 02.05.07 V.Ivanchenko add GetNistFirstIsotopeN and GetNumberOfNistIsotopes
45// 06.08.08 V.Ivanchenko add binding energy parameterisation and use isotope
46// mass in G4 units
47//
48//----------------------------------------------------------------------------
49//
50// Class Description:
51//
52// Element data from the NIST DB on Atomic Weights and Isotope Compositions
53// http://physics.nist.gov/PhysRefData/Compositions/index.html
54//
55//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
56
57#include <vector>
59
60#include "globals.hh"
61
62//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
63
65const G4int maxAbundance = 3500;
66
67class G4Element;
68
70{
71public:
72
75
76 // Find or build a G4Element by atomic number
77 G4Element* FindOrBuildElement (G4int Z, G4bool buildIsotopes = true);
78
79 // Find or build a G4Element by symbol
81 G4bool buildIsotopes = true);
82 // print element information
83 void PrintElement (G4int Z);
84
85 // Access to the vector of Geant4 predefined element names
86 const std::vector<G4String>& GetElementNames() const;
87
88 // Get atomic number by element symbol
89 G4int GetZ(const G4String& symb);
90
91 // Get atomic weight in atomic units by element symbol
93
94 // Get atomic weight in atomic units - mean mass in units of amu of an atom
95 // with electron shell for the natural isotope composition
97
98 // Get mass of isotope without electron shell in Geant4 energy units
100
101 // Get mass in Geant4 energy units of an atom of a particular isotope
102 // with the electron shell
103 inline G4double GetAtomicMass(G4int Z, G4int N);
104
105 // Get total ionisation energy of an atom
107
108 // Get natural isotope abandance
110
111 // Get N for the first natural isotope
113
114 // Get number of natural isotopes
116
117 // Get max Z in the Geant4 element database
118 inline G4int GetMaxNumElements();
119
120 inline void SetVerbose(G4int);
121
122private:
123
124 void Initialise();
125
126 // Add element parameters to internal G4 database:
127 // Z - atomic number, N - number of nucleons, A - atomic mass (amu),
128 // sigmaA - accuracy of mass in last digits, W - natural abandances (percent)
129 void AddElement(const G4String& symbol, G4int Z, G4int NumberOfIsotopes,
130 const G4int& N, const G4double& A, const G4double& sigmaA,
131 const G4double& W);
132
133 // Build a G4Element from the G4 dataBase
134 G4Element* BuildElement(G4int Z, G4bool buildIsotopes);
135
136private:
137
138 G4String elmSymbol [maxNumElements];
139 G4double atomicMass [maxNumElements]; // amu
140 G4double bindingEnergy [maxNumElements];
141 G4int nIsotopes [maxNumElements];
142 G4int nFirstIsotope [maxNumElements];
143 G4int idxIsotopes [maxNumElements];
144
145 G4int elmIndex [maxNumElements];
146
147 G4double massIsotopes [maxAbundance]; // G4 units
148 G4double sigMass [maxAbundance]; // G4 units
149 G4double relAbundance [maxAbundance];
150
151 G4int index;
152 G4int verbose;
153 G4bool first;
154
155 std::vector<G4String> elmNames;
156};
157
158//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
159//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
160
162{
163 G4double a = 0.0;
164 if(Z>0 && Z<maxNumElements) { a = atomicMass[Z]; }
165 return a;
166}
167
168//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
169
171{
172 G4double mass = 0.0;
173 G4int i = N - nFirstIsotope[Z];
174 if(i >= 0 && i <nIsotopes[Z]) {mass = massIsotopes[i + idxIsotopes[Z]];}
175 return mass;
176}
177
178//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
179
181{
182 G4double mass = 0.0;
183 G4int i = N - nFirstIsotope[Z];
184 if(i >= 0 && i <nIsotopes[Z]) {
185 mass = massIsotopes[i + idxIsotopes[Z]] + Z*CLHEP::electron_mass_c2 - bindingEnergy[Z];
186 }
187 return mass;
188}
189
190//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
191
192inline
194{
195 return bindingEnergy[Z];
196}
197
198
199//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
200
202{
203 G4double x = 0.0;
204 G4int i = N - nFirstIsotope[Z];
205 if(i >= 0 && i <nIsotopes[Z]) {x = relAbundance[i + idxIsotopes[Z]];}
206 return x;
207}
208
209//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
210
212{
213 return nFirstIsotope[Z];
214}
215
216//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
217
219{
220 return nIsotopes[Z];
221}
222
223//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
224
225inline
226const std::vector<G4String>& G4NistElementBuilder::GetElementNames() const
227{
228 return elmNames;
229}
230
231//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
232
234{
235 return maxNumElements-1;
236}
237
238//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
239
241{
242 verbose = val;
243}
244
245//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
246
247
248#endif
const G4int maxNumElements
const G4int maxAbundance
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4int GetZ(const G4String &symb)
G4Element * FindOrBuildElement(G4int Z, G4bool buildIsotopes=true)
G4int GetNumberOfNistIsotopes(G4int Z)
G4double GetIsotopeAbundance(G4int Z, G4int N)
G4double GetIsotopeMass(G4int Z, G4int N)
G4int GetNistFirstIsotopeN(G4int Z)
G4double GetAtomicMassAmu(const G4String &symb)
G4double GetAtomicMass(G4int Z, G4int N)
const std::vector< G4String > & GetElementNames() const
G4double GetTotalElectronBindingEnergy(G4int Z) const