Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4NistManager.hh
이 파일의 문서화 페이지로 가기
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: G4NistManager.hh 105820 2017-08-22 08:03:26Z gcosmo $
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"
73 #include "G4NistElementBuilder.hh"
74 #include "G4NistMaterialBuilder.hh"
75 #include "G4Pow.hh"
76 #include "G4Threading.hh"
77 
78 class G4NistMessenger;
79 
80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
82 
84 {
85 
86 public:
87 
88  static G4NistManager* Instance();
90 
91  // Get G4Element by index
92  //
93  inline G4Element* GetElement(size_t index) const;
94 
95  // Find or build G4Element by atomic number
96  //
97  inline G4Element* FindElement(G4int Z) const;
98  inline G4Element* FindOrBuildElement(G4int Z, G4bool isotopes=true);
99 
100  // Find or build G4Element by symbol
101  //
102  inline G4Element* FindOrBuildElement(const G4String& symb,
103  G4bool isotopes=true);
104 
105  // Get number of elements
106  //
107  inline size_t GetNumberOfElements() const;
108 
109  // Get atomic number by element symbol
110  //
111  inline G4int GetZ(const G4String& symb) const;
112 
113  // Get atomic weight by element symbol - mean mass in units of amu of
114  // an atom with electron shell for the natural isotope composition
115  //
116  inline G4double GetAtomicMassAmu(const G4String& symb) const;
117 
118  // Get atomic weight in atomic units - mean mass in units of amu of an atom
119  // with electron shell for the natural isotope composition
120  //
121  inline G4double GetAtomicMassAmu(G4int Z) const;
122 
123  // Get mass of isotope without electron shell in Geant4 energy units
124  //
125  inline G4double GetIsotopeMass(G4int Z, G4int N) const;
126 
127  // Get mass in Geant4 energy units of an atom of a particular isotope
128  // with the electron shell
129  //
130  inline G4double GetAtomicMass(G4int Z, G4int N) const;
131 
132  // Get total ionisation energy of an atom
133  //
135 
136  // Get N for the first natural isotope
137  //
138  inline G4int GetNistFirstIsotopeN(G4int Z) const;
139 
140  // Get number of natural isotopes
141  //
142  inline G4int GetNumberOfNistIsotopes(G4int Z) const;
143 
144  // Get natural isotope abundance
145  //
146  inline G4double GetIsotopeAbundance(G4int Z, G4int N) const;
147 
148  // Print element by Z
149  //
150  inline void PrintElement(G4int Z) const;
151 
152  // Print element from internal DB by symbol, if "all" - print all elements
153  //
154  void PrintElement(const G4String&) const;
155 
156  // Print G4Element by name, if "all" - print all G4Elements
157  //
158  void PrintG4Element(const G4String&) const;
159 
160  // Access to the vector of Geant4 predefined element names
161  //
162  inline const std::vector<G4String>& GetNistElementNames() const;
163 
164  // Access mean ionisation energy for atoms (Z <= 98) by its index
165  //
166  inline G4double GetMeanIonisationEnergy(G4int Z) const;
167 
168  // Access nominal density by atomic number for simple materials and
169  // by the index for other NIST materials
170  //
171  inline G4double GetNominalDensity(G4int Z) const;
172 
173  // Get G4Material by index
174  //
175  inline G4Material* GetMaterial(size_t index) const;
176 
177  // Find or build a G4Material by name, from the Geant4 dataBase
178  //
179  inline G4Material* FindMaterial(const G4String& name) const;
180  inline G4Material* FindOrBuildMaterial(const G4String& name,
181  G4bool isotopes=true,
182  G4bool warning=false);
183 
184  // Find or build a simple material via atomic number
185  //
186  inline G4Material* FindSimpleMaterial(G4int Z) const;
188  G4bool warning=false);
189 
190  // Build G4Material with user defined name and density on base
191  // of a material from Geant4 dataBase
192  //
194  const G4String& basename,
195  G4double density = 0.0,
196  G4double temp = NTP_Temperature,
197  G4double pres = CLHEP::STP_Pressure);
198 
199  // Construct a G4Material from scratch by atome count
200  //
202  const G4String& name,
203  const std::vector<G4String>& elm,
204  const std::vector<G4int>& nbAtoms,
205  G4double dens,
206  G4bool isotopes=true,
207  G4State state = kStateSolid,
208  G4double temp = NTP_Temperature,
209  G4double pressure = CLHEP::STP_Pressure);
210 
211  // Construct a G4Material from scratch by fraction mass
212  //
214  const G4String& name,
215  const std::vector<G4String>& elm,
216  const std::vector<G4double>& weight,
217  G4double dens,
218  G4bool isotopes=true,
219  G4State state = kStateSolid,
220  G4double temp = NTP_Temperature,
221  G4double pressure = CLHEP::STP_Pressure);
222 
223  // Construct a gas G4Material from scratch by atome count
224  //
225  inline G4Material* ConstructNewGasMaterial(const G4String& name,
226  const G4String& nameNist,
227  G4double temp,
228  G4double pres,
229  G4bool isotopes=true);
230 
231  // Construct an ideal gas G4Material from scratch by atom count
232  //
234  const G4String& name,
235  const std::vector<G4String>& elm,
236  const std::vector<G4int>& nbAtoms,
237  G4bool isotopes = true,
238  G4double temp = NTP_Temperature,
239  G4double pressure = CLHEP::STP_Pressure);
240 
241  // Get number of G4Materials
242  //
243  inline size_t GetNumberOfMaterials() const;
244 
245  inline G4int GetVerbose() const;
246 
247  void SetVerbose(G4int);
248 
249  // Print G4Material by name
250  //
251  void PrintG4Material(const G4String&) const;
252 
253  // Print predefined Geant4 materials:
254  // "simple" - only pure materials in basic state (Z = 1, ..., 98)
255  // "compound" - NIST compounds
256  // "hep" - HEP materials and compounds
257  // "bio" - bio-medical materials and compounds
258  // "all" - all
259  //
260  inline void ListMaterials(const G4String&) const;
261 
262  // Access to the list of names of Geant4 predefined materials
263  //
264  inline const std::vector<G4String>& GetNistMaterialNames() const;
265 
266  // Fast computation of Z^1/3
267  //
268  inline G4double GetZ13(G4double Z) const;
269  inline G4double GetZ13(G4int Z) const;
270 
271  // Fast computation of A^0.27 for natuaral abundances
272  //
273  inline G4double GetA27(G4int Z) const;
274 
275  // Fast computation of log(A)
276  //
277  inline G4double GetLOGZ(G4int Z) const;
278  inline G4double GetLOGAMU(G4int Z) const;
279 
280 private:
281 
282  explicit G4NistManager();
284 
288 
289  std::vector<G4Element*> elements;
290  std::vector<G4Material*> materials;
291 
292  size_t nElements;
293  size_t nMaterials;
294 
296 
300 
301 #ifdef G4MULTITHREADED
302  static G4Mutex nistManagerMutex;
303 #endif
304 };
305 
306 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
307 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
308 
310 {
311  return nMaterials;
312 }
313 
314 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
315 
316 inline G4Element* G4NistManager::GetElement(size_t index) const
317 {
318  const G4ElementTable* theElementTable = G4Element::GetElementTable();
319  return (index < theElementTable->size()) ? (*theElementTable)[index] : nullptr;
320 }
321 
322 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
323 
324 inline
326 {
327  return elmBuilder->FindElement(Z);
328 }
329 
330 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
331 
332 inline
334 {
335  return elmBuilder->FindOrBuildElement(Z, isotopes);
336 }
337 
338 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
339 
340 inline
342  G4bool isotopes)
343 {
344  return elmBuilder->FindOrBuildElement(symb, isotopes);
345 }
346 
347 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
348 
350 {
351  return nElements;
352 }
353 
354 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
355 
356 inline G4int G4NistManager::GetZ(const G4String& symb) const
357 {
358  return elmBuilder->GetZ(symb);
359 }
360 
361 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
362 
364 {
365  return elmBuilder->GetAtomicMassAmu(symb);
366 }
367 
368 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
369 
371 {
372  return elmBuilder->GetAtomicMassAmu(Z);
373 }
374 
375 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
376 
377 inline
379 {
380  return elmBuilder->GetIsotopeMass(Z, N);
381 }
382 
383 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
384 
385 inline
387 {
388  return elmBuilder->GetAtomicMass(Z, N);
389 }
390 
391 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
392 
393 inline
395 {
397 }
398 
399 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
400 
401 inline
403 {
404  return elmBuilder->GetIsotopeAbundance(Z, N);
405 }
406 
407 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
408 
409 inline
411 {
412  return elmBuilder->GetNistFirstIsotopeN(Z);
413 }
414 
415 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
416 
417 inline
419 {
421 }
422 
423 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
424 
425 inline
426 const std::vector<G4String>& G4NistManager::GetNistElementNames() const
427 {
428  return elmBuilder->GetElementNames();
429 }
430 
431 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
432 
434 {
436 }
437 
438 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
439 
441 {
442  return matBuilder->GetNominalDensity(Z);
443 }
444 
445 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
446 
448 {
450 }
451 
452 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
453 
454 inline G4Material* G4NistManager::GetMaterial(size_t index) const
455 {
456  const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable();
457  return (index < theMaterialTable->size()) ? (*theMaterialTable)[index] : nullptr;
458 }
459 
460 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
461 
463 {
464  return verbose;
465 }
466 
467 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
468 
469 inline
471 {
472  return matBuilder->FindMaterial(name);
473 }
474 
475 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
476 
477 inline
479  G4bool isotopes,
480  G4bool warning)
481 {
482  return matBuilder->FindOrBuildMaterial(name, isotopes, warning);
483 }
484 
485 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
486 
487 inline
489 {
490  return matBuilder->FindSimpleMaterial(Z);
491 }
492 
493 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
494 
495 inline
497 {
498  return matBuilder->FindOrBuildSimpleMaterial(Z, warning);
499 }
500 
501 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
502 
504  const G4String& name,
505  const std::vector<G4String>& elm,
506  const std::vector<G4int>& nbAtoms,
507  G4double dens,
508  G4bool isotopes,
509  G4State state,
510  G4double T,
511  G4double P)
512 
513 {
514  return
515  matBuilder->ConstructNewMaterial(name,elm,nbAtoms,dens,isotopes,state,T,P);
516 }
517 
518 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
519 
521  const G4String& name,
522  const std::vector<G4String>& elm,
523  const std::vector<G4double>& w,
524  G4double dens,
525  G4bool isotopes,
526  G4State state,
527  G4double T,
528  G4double P)
529 {
530  return matBuilder->ConstructNewMaterial(name,elm,w,dens,isotopes,state,T,P);
531 }
532 
533 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
534 
536  const G4String& name,
537  const G4String& nameNist,
538  G4double temp, G4double pres,
539  G4bool isotopes)
540 {
541  return matBuilder->ConstructNewGasMaterial(name,nameNist,
542  temp,pres,isotopes);
543 }
544 
545 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
546 
548  const G4String& name,
549  const std::vector<G4String>& elm,
550  const std::vector<G4int>& nbAtoms,
551  G4bool isotopes,
552  G4double T,
553  G4double P)
554 {
555  return
556  matBuilder->ConstructNewIdealGasMaterial(name,elm,nbAtoms,isotopes,T,P);
557 }
558 
559 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
560 
561 inline void G4NistManager::ListMaterials(const G4String& list) const
562 {
563  matBuilder->ListMaterials(list);
564 }
565 
566 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
567 
568 inline
569 const std::vector<G4String>& G4NistManager::GetNistMaterialNames() const
570 {
571  return matBuilder->GetMaterialNames();
572 }
573 
574 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
575 
577 {
578  return g4pow->A13(A);
579 }
580 
581 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
582 
584 {
585  return g4pow->Z13(Z);
586 }
587 
588 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
589 
591 {
592  return (0 <= Z && Z < 101) ? POWERA27[Z] : 0.0;
593 }
594 
595 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
596 
598 {
599  return g4pow->logZ(Z);
600 }
601 
602 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
603 
605 {
606  return (0 <= Z && Z < 101) ? LOGAZ[Z] : 0.0;
607 }
608 
609 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
610 
611 #endif
612 
G4Material * FindOrBuildSimpleMaterial(G4int Z, G4bool warning)
const XML_Char * name
Definition: expat.h:151
G4NistElementBuilder * elmBuilder
G4double logZ(G4int Z) const
Definition: G4Pow.hh:149
void ListMaterials(const G4String &) const
G4double GetTotalElectronBindingEnergy(G4int Z) const
G4int GetNistFirstIsotopeN(G4int Z) const
G4Element * GetElement(size_t index) const
G4double Z13(G4int Z) const
Definition: G4Pow.hh:132
G4double A13(G4double A) const
Definition: G4Pow.cc:138
static const G4double NTP_Temperature
Definition: G4Material.hh:117
static G4MaterialTable * GetMaterialTable()
Definition: G4Material.cc:593
G4NistMessenger * messenger
void PrintElement(G4int Z) const
G4int GetNumberOfNistIsotopes(G4int Z) const
void PrintG4Element(const G4String &) const
std::vector< G4Element * > elements
G4Material * FindMaterial(const G4String &name) const
G4double GetAtomicMass(G4int Z, G4int N) const
G4double GetNominalDensity(G4int Z) const
G4int GetVerbose() const
G4double GetLOGZ(G4int Z) const
G4Material * GetMaterial(size_t index) const
G4double GetAtomicMassAmu(const G4String &symb) const
G4double GetLOGAMU(G4int Z) const
G4Material * BuildMaterialWithNewDensity(const G4String &name, const G4String &basename, G4double density=0.0, G4double temp=NTP_Temperature, G4double pres=CLHEP::STP_Pressure)
G4int GetZ(const G4String &symb) const
static constexpr double STP_Pressure
std::vector< G4Material * > materials
const std::vector< G4String > & GetElementNames() const
Float_t Z
void SetVerbose(G4int)
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
const std::vector< G4String > & GetNistElementNames() const
G4double GetIsotopeMass(G4int Z, G4int N) const
G4Material * ConstructNewGasMaterial(const G4String &name, const G4String &nameNist, G4double temp, G4double pres, G4bool isotopes=true)
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
G4double GetAtomicMass(G4int Z, G4int N) const
G4Element * FindElement(G4int Z) const
void PrintG4Material(const G4String &) const
**D E S C R I P T I O N
void ListMaterials(const G4String &) 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=NTP_Temperature, G4double pressure=CLHEP::STP_Pressure)
G4Material * ConstructNewGasMaterial(const G4String &name, const G4String &nameDB, G4double temp, G4double pres, G4bool isotopes=true)
G4double GetAtomicMassAmu(const G4String &symb) const
G4double LOGAZ[101]
G4double GetIsotopeAbundance(G4int Z, G4int N) const
G4double GetIsotopeAbundance(G4int Z, G4int N) const
G4int GetNumberOfNistIsotopes(G4int Z) const
std::vector< G4Element * > G4ElementTable
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
double A(double temperature)
G4Material * FindOrBuildSimpleMaterial(G4int Z, G4bool warning=false)
G4Element * FindOrBuildElement(G4int Z, G4bool buildIsotopes=true)
G4Material * FindSimpleMaterial(G4int Z) const
G4double GetNominalDensity(G4int index) const
const std::vector< G4String > & GetNistMaterialNames() const
G4double GetTotalElectronBindingEnergy(G4int Z) const
G4double GetIsotopeMass(G4int Z, G4int N) const
std::vector< G4Material * > G4MaterialTable
static double P[]
G4double GetMeanIonisationEnergy(G4int index) const
double weight
Definition: plottest35.C:25
int G4int
Definition: G4Types.hh:78
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=true)
G4double GetA27(G4int Z) const
Definition: G4Pow.hh:56
G4Material * ConstructNewIdealGasMaterial(const G4String &name, const std::vector< G4String > &elm, const std::vector< G4int > &nbAtoms, G4bool isotopes=true, G4double temp=NTP_Temperature, G4double pressure=CLHEP::STP_Pressure)
size_t GetNumberOfMaterials() const
G4double GetMeanIonisationEnergy(G4int Z) const
G4NistMaterialBuilder * matBuilder
G4Material * ConstructNewIdealGasMaterial(const G4String &name, const std::vector< G4String > &elm, const std::vector< G4int > &nbAtoms, G4bool isotopes=true, G4double temp=NTP_Temperature, G4double pressure=CLHEP::STP_Pressure)
G4double GetZ13(G4double Z) const
G4Element * FindElement(G4int Z) const
size_t GetNumberOfElements() const
void PrintElement(G4int Z) 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=NTP_Temperature, G4double pressure=CLHEP::STP_Pressure)
G4State
Definition: G4Material.hh:115
G4int GetZ(const G4String &symb) const
static G4NistManager * instance
const std::vector< G4String > & GetMaterialNames() const
G4Material * FindMaterial(const G4String &name) const
G4Material * FindSimpleMaterial(G4int Z) const
G4double POWERA27[101]
static G4NistManager * Instance()
static G4ElementTable * GetElementTable()
Definition: G4Element.cc:398
std::mutex G4Mutex
Definition: G4Threading.hh:84
G4int GetNistFirstIsotopeN(G4int Z) const