source: trunk/source/materials/include/G4Element.hh@ 1272

Last change on this file since 1272 was 1196, checked in by garnier, 16 years ago

update CVS release candidate geant4.9.3.01

File size: 9.6 KB
RevLine 
[822]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//
[1196]27// $Id: G4Element.hh,v 1.27 2009/09/19 14:13:03 vnivanch Exp $
28// GEANT4 tag $Name: materials-V09-02-18 $
[822]29//
30
31// class description
32//
33// An element is a chemical element either directly defined in terms of
34// its charactaristics: its name, symbol,
35// Z (effective atomic number)
36// N (effective number of nucleons)
37// A (effective mass of a mole)
38// or in terms of a collection of constituent isotopes with specified
39// relative abundance (i.e. fraction of nb of atomes per volume).
40//
41// Quantities, with physical meaning or not, which are constant in a given
42// element are computed and stored here as Derived data members.
43//
44// The class contains as a private static member the table of defined
45// elements (an ordered vector of elements).
46//
47// Elements can be assembled singly or in mixtures into materials used
48// in volume definitions via the G4Material class.
49//
50
51//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
52
53// 09-07-96, new data members added by L.Urban
54// 17-01-97, aesthetic rearrangement, M.Maire
55// 20-01-97, Tsai formula for the rad length, M.Maire
56// 21-01-97, remove mixture flag, M.Maire
57// 24-01-97, new data member: fTaul
58// new method: ComputeIonisationPara, M.Maire
59// 20-03-97, corrected initialization of pointers, M.Maire
60// 27-06-97, new function GetIsotope(int), M.Maire
61// 24-02-98, fWeightVector becomes fRelativeAbundanceVector
62// 27-04-98, atomic shell stuff, V. Grichine
63// 09-07-98, Ionisation parameters removed from the class, M.Maire
64// 04-08-98, new method GetElement(elementName), M.Maire
65// 16-11-98, Subshell -> Shell, mma
66// 30-03-01, suppression of the warning message in GetElement
67// 17-07-01, migration to STL, M. Verderi
68// 13-09-01, stl migration. Suppression of the data member fIndexInTable
69// 14-09-01, fCountUse: nb of materials which use this element
70// 26-02-02, fIndexInTable renewed
71// 01-04-05, new data member fIndexZ to count the number of elements with same Z
72// 17-10-06: Add Get/Set fNaturalAbandances (V.Ivanchenko)
[1196]73// 17.09.09, add fNbOfShellElectrons and methods (V. Grichine)
[822]74//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
75
76#ifndef G4ELEMENT_HH
77#define G4ELEMENT_HH
78
79#include "globals.hh"
80#include <vector>
81#include "G4ios.hh"
82#include "G4Isotope.hh"
83#include "G4AtomicShells.hh"
84#include "G4IonisParamElm.hh"
85#include "G4IsotopeVector.hh"
86#include "G4ElementTable.hh"
87
88//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
89
90class G4Element
91{
92public: // with description
93
94 //
95 // Constructor to Build an element directly; no reference to isotopes
96 //
97 G4Element(const G4String& name, //its name
98 const G4String& symbol, //its symbol
99 G4double Zeff, //atomic number
100 G4double Aeff); //mass of mole
101
102 //
103 // Constructor to Build an element from isotopes via AddIsotope
104 //
105 G4Element(const G4String& name, //its name
106 const G4String& symbol, //its symbol
107 G4int nbIsotopes); //nb of isotopes
108
109 //
110 // Add an isotope to the element
111 //
112 void AddIsotope(G4Isotope* isotope, //isotope
113 G4double RelativeAbundance); //fraction of nb of
114 //atomes per volume
115 virtual ~G4Element();
116
117 //
118 // retrieval methods
119 //
[921]120 const G4String& GetName() const {return fName;}
121 const G4String& GetSymbol() const {return fSymbol;}
122 G4double GetZ() const {return fZeff;} //atomic number
123 G4double GetN() const {return fNeff;} //number of nucleons
124 G4double GetA() const {return fAeff;} //mass of a mole
[822]125 G4bool GetNaturalAbandancesFlag();
126
127 void SetNaturalAbandancesFlag(G4bool);
128
129 //the number of atomic shells in this element:
130 //
[921]131 G4int GetNbOfAtomicShells() const {return fNbOfAtomicShells;}
[822]132
[1196]133 //the binding energy of the shell, ground shell index=0
[822]134 //
[1196]135 G4double GetAtomicShell(G4int index) const;
136
137 //the number of electrons at the shell, ground shell index=0
138 //
139 G4int GetNbOfShellElectrons(G4int index) const;
[822]140
141 //number of isotopes constituing this element:
142 //
[921]143 size_t GetNumberOfIsotopes() const {return fNumberOfIsotopes;}
[822]144
145 //vector of pointers to isotopes constituing this element:
146 //
[921]147 G4IsotopeVector* GetIsotopeVector() const {return theIsotopeVector;}
[822]148
149 //vector of relative abundance of each isotope:
150 //
151 G4double* GetRelativeAbundanceVector() const
[921]152 {return fRelativeAbundanceVector;}
[822]153
154 const G4Isotope* GetIsotope(G4int iso) const
[921]155 {return (*theIsotopeVector)[iso];}
[822]156
157 //the (static) Table of Elements:
158 //
159 static
160 const G4ElementTable* GetElementTable();
161
162 static
163 size_t GetNumberOfElements();
164
165 //the index of this element in the Table:
166 //
[921]167 size_t GetIndex() const {return fIndexInTable;}
[822]168
169 //return pointer to an element, given its name:
170 //
171 static
172 G4Element* GetElement(G4String name, G4bool warning=true);
173
174 //count number of materials which use this element
175 //
[921]176 G4int GetCountUse() const {return fCountUse;}
177 void increaseCountUse() {fCountUse++;}
178 void decreaseCountUse() {fCountUse--;}
[822]179
180 //count elements with same Z
181 //
[921]182 G4int GetIndexZ() const {return fIndexZ;}
[822]183
184 //Coulomb correction factor:
185 //
[921]186 G4double GetfCoulomb() const {return fCoulomb;}
[822]187
188 //Tsai formula for the radiation length:
189 //
[921]190 G4double GetfRadTsai() const {return fRadTsai;}
[822]191
192 //pointer to ionisation parameters:
193 //
[921]194 G4IonisParamElm* GetIonisation() const {return fIonisation;}
[822]195
196 // printing methods
197 //
198 friend std::ostream& operator<<(std::ostream&, G4Element*);
199 friend std::ostream& operator<<(std::ostream&, G4Element&);
200 friend std::ostream& operator<<(std::ostream&, G4ElementTable);
201
202public: // without description
203
204 G4int operator==(const G4Element&) const;
205 G4int operator!=(const G4Element&) const;
206
207 G4Element(__void__&);
208 // Fake default constructor for usage restricted to direct object
209 // persistency for clients requiring preallocation of memory for
210 // persistifiable objects.
211
[921]212 void SetName(const G4String& name) {fName=name;}
213
[822]214private:
215
216 G4Element(G4Element&);
217 const G4Element & operator=(const G4Element&);
218
219private:
220
221 void InitializePointers();
222 void ComputeDerivedQuantities();
223 void ComputeCoulombFactor();
224 void ComputeLradTsaiFactor();
225
226private:
227
228 //
229 // Basic data members (which define an Element)
230 //
231 G4String fName; // name
232 G4String fSymbol; // symbol
233 G4double fZeff; // Effective atomic number
234 G4double fNeff; // Effective number of nucleons
235 G4double fAeff; // Effective mass of a mole
236
237 G4int fNbOfAtomicShells; // number of atomic shells
238 G4double* fAtomicShells ; // Pointer to atomic shell binding energies
[1196]239 G4int* fNbOfShellElectrons; // pointer to the number of subshell electrons
[822]240
241 // Isotope vector contains constituent isotopes of the element
242 size_t fNumberOfIsotopes; // Number of isotopes added to the element
243 G4IsotopeVector* theIsotopeVector;
244 G4double* fRelativeAbundanceVector; // Fraction nb of atomes per volume
245 // for each constituent
246 G4int fCountUse; // nb of materials which use this element
247 G4int fIndexZ; // index for elements with same Z
248
249 // Set up the static Table of Elements
250 static G4ElementTable theElementTable;
251 size_t fIndexInTable;
252 G4bool fNaturalAbandances;
253
254 //
255 // Derived data members (computed from the basic data members)
256 //
257 G4double fCoulomb; // Coulomb correction factor
258 G4double fRadTsai; // Tsai formula for the radiation length
259 G4IonisParamElm* fIonisation; // Pointer to ionisation parameters
260};
261
262inline G4bool G4Element::GetNaturalAbandancesFlag()
263{
264 return fNaturalAbandances;
265}
266
267inline void G4Element::SetNaturalAbandancesFlag(G4bool val)
268{
269 fNaturalAbandances = val;
270}
271
272//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
273
274#endif
Note: See TracBrowser for help on using the repository browser.