Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4NistManager.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// -------------------------------------------------------------------
29//
30// GEANT4 Class header file
31//
32// File name: G4NistManager
33//
34// Author: Vladimir Ivanchenko
35//
36// Creation date: 23.12.2004
37//
38// Modifications:
39// 27.02.06 V.Ivanchneko add GetAtomicMassAmu and ConstructNewGasMaterial
40// 11.05.06 V.Ivanchneko add warning flag to FindMaterial method
41// 17.10.06 V.Ivanchneko add methods: GetAtomicMass, GetNistElementNames,
42// GetNistMaterialNames
43// 02.05.07 V.Ivanchneko add GetNistFirstIsotopeN and GetNumberOfNistIsotopes
44// 28.07.07 V.Ivanchneko make simple methods inline
45// 28.10.07 V.Ivanchneko add state, T, P to maetrial build
46// 29.04.10 V.Ivanchneko add GetMeanIonisationEnergy method
47// 01.11.10 V.Ivanchneko add G4Pow for fast computations
48// 09.02.12 P.Gumplinger add ConstructNewIdealGasMaterial
49//
50// Class Description:
51//
52// A utility static class
53//
54
55// -------------------------------------------------------------------
56//
57// Class Description:
58//
59// Element data from the NIST DB on Atomic Weights and Isotope Compositions
60// http://physics.nist.gov/PhysRefData/Compositions/index.html
61//
62// -------------------------------------------------------------------
63//
64
65#ifndef G4NistManager_h
66#define G4NistManager_h 1
67
68#include <vector>
70
71#include "globals.hh"
72#include "G4Material.hh"
75#include "G4Pow.hh"
76
77class G4NistMessenger;
78
79//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
80//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
81
83{
84
85public:
86
87 static G4NistManager* Instance();
89
90 // Get G4Element by index
91 //
92 inline G4Element* GetElement(size_t index);
93
94 // Find or build G4Element by atomic number
95 //
96 inline G4Element* FindOrBuildElement(G4int Z, G4bool isotopes=true);
97
98 // Find or build G4Element by symbol
99 //
100 inline G4Element* FindOrBuildElement(const G4String& symb,
101 G4bool isotopes=true);
102
103 // Get number of elements
104 //
105 inline size_t GetNumberOfElements() const;
106
107 // Get atomic number by element symbol
108 //
109 inline G4int GetZ(const G4String& symb) const;
110
111 // Get atomic weight by element symbol - mean mass in units of amu of
112 // an atom with electron shell for the natural isotope composition
113 //
114 inline G4double GetAtomicMassAmu(const G4String& symb) const;
115
116 // Get atomic weight in atomic units - mean mass in units of amu of an atom
117 // with electron shell for the natural isotope composition
118 //
119 inline G4double GetAtomicMassAmu(G4int Z) const;
120
121 // Get mass of isotope without electron shell in Geant4 energy units
122 //
123 inline G4double GetIsotopeMass(G4int Z, G4int N) const;
124
125 // Get mass in Geant4 energy units of an atom of a particular isotope
126 // with the electron shell
127 //
128 inline G4double GetAtomicMass(G4int Z, G4int N) const;
129
130 // Get total ionisation energy of an atom
131 //
133
134 // Get N for the first natural isotope
135 //
136 inline G4int GetNistFirstIsotopeN(G4int Z) const;
137
138 // Get number of natural isotopes
139 //
140 inline G4int GetNumberOfNistIsotopes(G4int Z) const;
141
142 // Get natural isotope abandance
143 //
144 inline G4double GetIsotopeAbundance(G4int Z, G4int N) const;
145
146 // Print element by Z
147 //
148 inline void PrintElement(G4int Z);
149
150 // Print element from internal DB by symbol, if "all" - print all elements
151 //
152 void PrintElement(const G4String&);
153
154 // Print G4Element by name, if "all" - print all G4Elements
155 //
156 void PrintG4Element(const G4String&);
157
158 // Access to the vector of Geant4 predefined element names
159 //
160 inline const std::vector<G4String>& GetNistElementNames() const;
161
162 // Access mean ionisation energy for atoms (Z <= 98)
163 //
164 inline G4double GetMeanIonisationEnergy(G4int Z) const;
165
166 // Get G4Material by index
167 //
168 inline G4Material* GetMaterial(size_t index);
169
170 // Find or build a G4Material by name, from the Geant4 dataBase
171 //
172 inline G4Material* FindOrBuildMaterial(const G4String& name,
173 G4bool isotopes=true,
174 G4bool warning=false);
175
176 // Build G4Material with user defined name and density on base
177 // of a material from Geant4 dataBase
178 //
180 const G4String& basename,
181 G4double density = 0.0,
182 G4double temp = CLHEP::STP_Temperature,
183 G4double pres = CLHEP::STP_Pressure);
184
185 // Construct a G4Material from scratch by atome count
186 //
188 const G4String& name,
189 const std::vector<G4String>& elm,
190 const std::vector<G4int>& nbAtoms,
191 G4double dens,
192 G4bool isotopes=true,
193 G4State state = kStateSolid,
194 G4double temp = CLHEP::STP_Temperature,
195 G4double pressure = CLHEP::STP_Pressure);
196
197 // Construct a G4Material from scratch by fraction mass
198 //
200 const G4String& name,
201 const std::vector<G4String>& elm,
202 const std::vector<G4double>& weight,
203 G4double dens,
204 G4bool isotopes=true,
205 G4State state = kStateSolid,
206 G4double temp = CLHEP::STP_Temperature,
207 G4double pressure = CLHEP::STP_Pressure);
208
209 // Construct a gas G4Material from scratch by atome count
210 //
211 inline G4Material* ConstructNewGasMaterial(const G4String& name,
212 const G4String& nameNist,
213 G4double temp,
214 G4double pres,
215 G4bool isotopes=true);
216
217 // Construct an ideal gas G4Material from scratch by atom count
218 //
220 const G4String& name,
221 const std::vector<G4String>& elm,
222 const std::vector<G4int>& nbAtoms,
223 G4bool isotopes = true,
224 G4double temp = CLHEP::STP_Temperature,
225 G4double pressure = CLHEP::STP_Pressure);
226
227 // Get number of G4Materials
228 //
229 inline size_t GetNumberOfMaterials();
230
231 inline G4int GetVerbose();
232
233 void SetVerbose(G4int);
234
235 // Print G4Material by name
236 //
237 void PrintG4Material(const G4String&);
238
239 // Print predefined Geant4 materials:
240 // "simple" - only pure materials in basic state (Z = 1, ..., 98)
241 // "compound" - NIST compounds
242 // "hep" - HEP materials and compounds
243 // "all" - all
244 //
245 inline void ListMaterials(const G4String&);
246
247 // Access to the list of names of Geant4 predefined materials
248 //
249 inline const std::vector<G4String>& GetNistMaterialNames() const;
250
251 // Fast computation of Z^1/3
252 //
253 inline G4double GetZ13(G4double Z);
254 inline G4double GetZ13(G4int Z);
255
256 // Fast computation of A^0.27 for natuaral abandances
257 //
258 inline G4double GetA27(G4int Z);
259
260 // Fast computation of log(A)
261 //
262 inline G4double GetLOGA(G4double A);
263 inline G4double GetLOGZ(G4int Z);
264
265 // Fast computation of log(A) for natuaral abandances
266 //
267 inline G4double GetLOGA(G4int Z);
268
269private:
270
272 static G4NistManager* instance;
273
274 G4Pow* g4pow;
275 G4double POWERA27[101];
276 G4double LOGAZ[101];
277
278 std::vector<G4Element*> elements;
279 std::vector<G4Material*> materials;
280
281 size_t nElements;
282 size_t nMaterials;
283
284 G4int verbose;
285
286 G4NistElementBuilder* elmBuilder;
287 G4NistMaterialBuilder* matBuilder;
288 G4NistMessenger* messenger;
289
290};
291
292//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
293//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
294
296{
297 return nMaterials;
298}
299
300//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
301
303{
304 G4Element* elm = 0;
305 const G4ElementTable* theElementTable = G4Element::GetElementTable();
306 if(index < theElementTable->size()) { elm = (*theElementTable)[index]; }
307 return elm;
308}
309
310//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
311
312inline
314{
315 return elmBuilder->FindOrBuildElement(Z, isotopes);
316}
317
318//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
319
320inline
322 G4bool isotopes)
323{
324 return elmBuilder->FindOrBuildElement(symb, isotopes);
325}
326
327//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
328
330{
331 return nElements;
332}
333
334//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
335
336inline G4int G4NistManager::GetZ(const G4String& symb) const
337{
338 return elmBuilder->GetZ(symb);
339}
340
341//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
342
344{
345 return elmBuilder->GetAtomicMassAmu(symb);
346}
347
348//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
349
351{
352 return elmBuilder->GetAtomicMassAmu(Z);
353}
354
355//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
356
357inline
359{
360 return elmBuilder->GetIsotopeMass(Z, N);
361}
362
363//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
364
365inline
367{
368 return elmBuilder->GetAtomicMass(Z, N);
369}
370
371//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
372
373inline
375{
376 return elmBuilder->GetTotalElectronBindingEnergy(Z);
377}
378
379//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
380
381inline
383{
384 return elmBuilder->GetIsotopeAbundance(Z, N);
385}
386
387//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
388
389inline
391{
392 return elmBuilder->GetNistFirstIsotopeN(Z);
393}
394
395//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
396
397inline
399{
400 return elmBuilder->GetNumberOfNistIsotopes(Z);
401}
402
403//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
404
405inline
406const std::vector<G4String>& G4NistManager::GetNistElementNames() const
407{
408 return elmBuilder->GetElementNames();
409}
410
411//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
412
414{
415 return matBuilder->GetMeanIonisationEnergy(Z-1);
416}
417
418//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
419
421{
422 elmBuilder->PrintElement(Z);
423}
424
425//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
426
428{
429 const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable();
430 G4Material* mat = 0;
431 if(index < theMaterialTable->size()) mat = (*theMaterialTable)[index];
432 return mat;
433}
434
435//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
436
438{
439 return verbose;
440}
441
442//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
443
444inline
446 G4bool isotopes,
447 G4bool warning)
448{
449 return matBuilder->FindOrBuildMaterial(name, isotopes, warning);
450}
451
452//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
453
455 const G4String& name,
456 const std::vector<G4String>& elm,
457 const std::vector<G4int>& nbAtoms,
458 G4double dens,
459 G4bool isotopes,
460 G4State state,
461 G4double T,
462 G4double P)
463
464{
465 return
466 matBuilder->ConstructNewMaterial(name,elm,nbAtoms,dens,isotopes,state,T,P);
467}
468
469//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
470
472 const G4String& name,
473 const std::vector<G4String>& elm,
474 const std::vector<G4double>& w,
475 G4double dens,
476 G4bool isotopes,
477 G4State state,
478 G4double T,
479 G4double P)
480{
481 return matBuilder->ConstructNewMaterial(name,elm,w,dens,isotopes,state,T,P);
482}
483
484//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
485
487 const G4String& name,
488 const G4String& nameNist,
489 G4double temp, G4double pres,
490 G4bool isotopes)
491{
492 return matBuilder->ConstructNewGasMaterial(name,nameNist,
493 temp,pres,isotopes);
494}
495
496//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
497
499 const G4String& name,
500 const std::vector<G4String>& elm,
501 const std::vector<G4int>& nbAtoms,
502 G4bool isotopes,
503 G4double T,
504 G4double P)
505{
506 return
507 matBuilder->ConstructNewIdealGasMaterial(name,elm,nbAtoms,isotopes,T,P);
508}
509
510//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
511
513{
514 matBuilder->ListMaterials(list);
515}
516
517//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
518
519inline
520const std::vector<G4String>& G4NistManager::GetNistMaterialNames() const
521{
522 return matBuilder->GetMaterialNames();
523}
524
525//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
526
528{
529 return g4pow->A13(A);
530}
531
532//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
533
535{
536 return g4pow->Z13(Z);
537}
538
539//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
540
542{
543 G4double res = 0.0;
544 if(Z < 101) { res = POWERA27[Z]; }
545 return res;
546}
547
548//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
549
551{
552 return g4pow->logZ(Z);
553}
554
555//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
556
558{
559 return g4pow->logA(A);
560}
561
562//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
563
565{
566 G4double res = 0.0;
567 if(Z < 101) { res = LOGAZ[Z]; }
568 return res;
569}
570
571//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
572
573#endif
574
std::vector< G4Element * > G4ElementTable
std::vector< G4Material * > G4MaterialTable
G4State
Definition: G4Material.hh:114
@ kStateSolid
Definition: G4Material.hh:114
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
static const G4ElementTable * GetElementTable()
Definition: G4Element.cc:399
static const G4MaterialTable * GetMaterialTable()
Definition: G4Material.cc:562
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
G4Material * ConstructNewGasMaterial(const G4String &name, const G4String &nameNist, G4double temp, G4double pres, G4bool isotopes=true)
G4int GetNumberOfNistIsotopes(G4int Z) const
void PrintG4Element(const G4String &)
G4double GetTotalElectronBindingEnergy(G4int Z) const
G4double GetLOGA(G4double A)
G4Material * ConstructNewMaterial(const G4String &name, const std::vector< G4String > &elm, const std::vector< G4int > &nbAtoms, G4double dens, G4bool isotopes=true, G4State state=kStateSolid, G4double temp=CLHEP::STP_Temperature, G4double pressure=CLHEP::STP_Pressure)
G4double GetA27(G4int Z)
G4Material * GetMaterial(size_t index)
void ListMaterials(const G4String &)
G4double GetIsotopeMass(G4int Z, G4int N) const
void PrintElement(G4int Z)
const std::vector< G4String > & GetNistMaterialNames() const
G4int GetVerbose()
G4double GetAtomicMass(G4int Z, G4int N) const
size_t GetNumberOfMaterials()
G4double GetMeanIonisationEnergy(G4int Z) const
const std::vector< G4String > & GetNistElementNames() const
G4Material * ConstructNewIdealGasMaterial(const G4String &name, const std::vector< G4String > &elm, const std::vector< G4int > &nbAtoms, G4bool isotopes=true, G4double temp=CLHEP::STP_Temperature, G4double pressure=CLHEP::STP_Pressure)
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
G4double GetZ13(G4double Z)
G4int GetZ(const G4String &symb) const
G4int GetNistFirstIsotopeN(G4int Z) const
size_t GetNumberOfElements() const
static G4NistManager * Instance()
G4double GetLOGZ(G4int Z)
void SetVerbose(G4int)
G4double GetIsotopeAbundance(G4int Z, G4int N) const
G4Element * GetElement(size_t index)
G4Material * BuildMaterialWithNewDensity(const G4String &name, const G4String &basename, G4double density=0.0, G4double temp=CLHEP::STP_Temperature, G4double pres=CLHEP::STP_Pressure)
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
void PrintG4Material(const G4String &)
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetMeanIonisationEnergy(G4int index) const
G4Material * ConstructNewMaterial(const G4String &name, const std::vector< G4String > &elm, const std::vector< G4int > &nbAtoms, G4double dens, G4bool isotopes=true, G4State state=kStateSolid, G4double temp=CLHEP::STP_Temperature, G4double pressure=CLHEP::STP_Pressure)
G4Material * ConstructNewIdealGasMaterial(const G4String &name, const std::vector< G4String > &elm, const std::vector< G4int > &nbAtoms, G4bool isotopes=true, G4double temp=CLHEP::STP_Temperature, G4double pressure=CLHEP::STP_Pressure)
const std::vector< G4String > & GetMaterialNames() const
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=true)
void ListMaterials(const G4String &)
G4Material * ConstructNewGasMaterial(const G4String &name, const G4String &nameDB, G4double temp, G4double pres, G4bool isotopes=true)
Definition: G4Pow.hh:54
G4double A13(G4double A)
Definition: G4Pow.hh:115
G4double Z13(G4int Z)
Definition: G4Pow.hh:110
G4double logA(G4double A)
Definition: G4Pow.hh:151
G4double logZ(G4int Z)
Definition: G4Pow.hh:146