Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 25 26 //-------------------------------------------- 26 //--------------------------------------------------------------------------- 27 // 27 // 28 // ClassName: G4Element 28 // ClassName: G4Element 29 // 29 // 30 // Description: Contains element properties 30 // Description: Contains element properties 31 // 31 // 32 // Class description: 32 // Class description: 33 // 33 // 34 // An element is a chemical element either dir 34 // An element is a chemical element either directly defined in terms of 35 // its characteristics: its name, symbol, 35 // its characteristics: its name, symbol, 36 // Z (effective atomic nu 36 // Z (effective atomic number) 37 // N (effective number of 37 // N (effective number of nucleons) 38 // A (effective mass of a 38 // A (effective mass of a mole) 39 // or in terms of a collection of constituent 39 // or in terms of a collection of constituent isotopes with specified 40 // relative abundance (i.e. fraction of nb of 40 // relative abundance (i.e. fraction of nb of atoms per volume). 41 // 41 // 42 // Quantities, with physical meaning or not, w 42 // Quantities, with physical meaning or not, which are constant in a given 43 // element are computed and stored here as Der 43 // element are computed and stored here as Derived data members. 44 // 44 // 45 // The class contains as a private static memb 45 // The class contains as a private static member the table of defined 46 // elements (an ordered vector of elements). 46 // elements (an ordered vector of elements). 47 // 47 // 48 // Elements can be assembled singly or in mixt 48 // Elements can be assembled singly or in mixtures into materials used 49 // in volume definitions via the G4Material cl 49 // in volume definitions via the G4Material class. 50 // 50 // 51 // It is strongly recommended do not delete G4 51 // It is strongly recommended do not delete G4Element instance in the 52 // user code. All G4Elements will be automatic 52 // user code. All G4Elements will be automatically deleted at the end 53 // of Geant4 session 53 // of Geant4 session 54 54 55 // 09-07-96, new data members added by L.Urban 55 // 09-07-96, new data members added by L.Urban 56 // 17-01-97, aesthetic rearrangement, M.Maire 56 // 17-01-97, aesthetic rearrangement, M.Maire 57 // 20-01-97, Tsai formula for the rad length, 57 // 20-01-97, Tsai formula for the rad length, M.Maire 58 // 21-01-97, remove mixture flag, M.Maire 58 // 21-01-97, remove mixture flag, M.Maire 59 // 24-01-97, new data member: fTaul 59 // 24-01-97, new data member: fTaul 60 // new method: ComputeIonisationPara 60 // new method: ComputeIonisationPara, M.Maire 61 // 20-03-97, corrected initialization of point 61 // 20-03-97, corrected initialization of pointers, M.Maire 62 // 27-06-97, new function GetIsotope(int), M.M 62 // 27-06-97, new function GetIsotope(int), M.Maire 63 // 24-02-98, fWeightVector becomes fRelativeAb 63 // 24-02-98, fWeightVector becomes fRelativeAbundanceVector 64 // 27-04-98, atomic shell stuff, V. Grichine 64 // 27-04-98, atomic shell stuff, V. Grichine 65 // 09-07-98, Ionisation parameters removed fro 65 // 09-07-98, Ionisation parameters removed from the class, M.Maire 66 // 04-08-98, new method GetElement(elementName 66 // 04-08-98, new method GetElement(elementName), M.Maire 67 // 16-11-98, Subshell -> Shell, mma 67 // 16-11-98, Subshell -> Shell, mma 68 // 30-03-01, suppression of the warning messag 68 // 30-03-01, suppression of the warning message in GetElement 69 // 17-07-01, migration to STL, M. Verderi 69 // 17-07-01, migration to STL, M. Verderi 70 // 13-09-01, stl migration. Suppression of the 70 // 13-09-01, stl migration. Suppression of the data member fIndexInTable 71 // 14-09-01, fCountUse: nb of materials which 71 // 14-09-01, fCountUse: nb of materials which use this element 72 // 26-02-02, fIndexInTable renewed 72 // 26-02-02, fIndexInTable renewed 73 // 01-04-05, new data member fIndexZ to count 73 // 01-04-05, new data member fIndexZ to count the number of elements with same Z 74 // 17-10-06: Add Get/Set fNaturalAbundance (V. 74 // 17-10-06: Add Get/Set fNaturalAbundance (V.Ivanchenko) 75 // 17.09.09, add fNbOfShellElectrons and metho 75 // 17.09.09, add fNbOfShellElectrons and methods (V. Grichine) 76 76 77 #ifndef G4ELEMENT_HH 77 #ifndef G4ELEMENT_HH 78 #define G4ELEMENT_HH 1 78 #define G4ELEMENT_HH 1 79 79 80 #include "G4ElementTable.hh" 80 #include "G4ElementTable.hh" 81 #include "G4ElementVector.hh" 81 #include "G4ElementVector.hh" 82 #include "G4IonisParamElm.hh" 82 #include "G4IonisParamElm.hh" 83 #include "G4Isotope.hh" 83 #include "G4Isotope.hh" 84 #include "G4IsotopeVector.hh" 84 #include "G4IsotopeVector.hh" 85 #include "G4ios.hh" 85 #include "G4ios.hh" 86 #include "globals.hh" 86 #include "globals.hh" 87 87 88 #include <vector> 88 #include <vector> 89 89 90 class G4Element 90 class G4Element 91 { 91 { 92 public: // with description 92 public: // with description 93 // Constructor to Build an element directly; 93 // Constructor to Build an element directly; no reference to isotopes 94 G4Element(const G4String& name, // its name 94 G4Element(const G4String& name, // its name 95 const G4String& symbol, // its symbol 95 const G4String& symbol, // its symbol 96 G4double Zeff, // atomic number 96 G4double Zeff, // atomic number 97 G4double Aeff); // mass of mole 97 G4double Aeff); // mass of mole 98 98 99 // Constructor to Build an element from isot 99 // Constructor to Build an element from isotopes via AddIsotope 100 G4Element(const G4String& name, // its name 100 G4Element(const G4String& name, // its name 101 const G4String& symbol, // its symbol 101 const G4String& symbol, // its symbol 102 G4int nbIsotopes); // nb of isotopes 102 G4int nbIsotopes); // nb of isotopes 103 103 104 virtual ~G4Element(); 104 virtual ~G4Element(); 105 105 106 G4Element(G4Element&) = delete; 106 G4Element(G4Element&) = delete; 107 const G4Element& operator=(const G4Element&) 107 const G4Element& operator=(const G4Element&) = delete; 108 108 109 // Add an isotope to the element 109 // Add an isotope to the element 110 void AddIsotope(G4Isotope* isotope, // isot 110 void AddIsotope(G4Isotope* isotope, // isotope 111 G4double RelativeAbundance); // fraction 111 G4double RelativeAbundance); // fraction of nb of 112 // atomes pe 112 // atomes per volume 113 113 114 // Retrieval methods 114 // Retrieval methods 115 inline const G4String& GetName() const { ret 115 inline const G4String& GetName() const { return fName; } 116 inline const G4String& GetSymbol() const { r 116 inline const G4String& GetSymbol() const { return fSymbol; } 117 117 118 // Atomic number 118 // Atomic number 119 inline G4double GetZ() const { return fZeff; 119 inline G4double GetZ() const { return fZeff; } 120 inline G4int GetZasInt() const { return fZ; 120 inline G4int GetZasInt() const { return fZ; } 121 121 122 // Atomic weight in atomic units 122 // Atomic weight in atomic units 123 inline G4double GetN() const { return fNeff; 123 inline G4double GetN() const { return fNeff; } 124 inline G4double GetAtomicMassAmu() const { r 124 inline G4double GetAtomicMassAmu() const { return fNeff; } 125 125 126 // Mass of a mole in Geant4 units for atoms 126 // Mass of a mole in Geant4 units for atoms with atomic shell 127 inline G4double GetA() const { return fAeff; 127 inline G4double GetA() const { return fAeff; } 128 128 129 inline G4bool GetNaturalAbundanceFlag() cons 129 inline G4bool GetNaturalAbundanceFlag() const; 130 130 131 inline void SetNaturalAbundanceFlag(G4bool); 131 inline void SetNaturalAbundanceFlag(G4bool); 132 132 133 // the number of atomic shells in this eleme 133 // the number of atomic shells in this element: 134 inline G4int GetNbOfAtomicShells() const { r 134 inline G4int GetNbOfAtomicShells() const { return fNbOfAtomicShells; } 135 135 136 // the binding energy of the shell, ground s 136 // the binding energy of the shell, ground shell index=0 137 G4double GetAtomicShell(G4int index) const; 137 G4double GetAtomicShell(G4int index) const; 138 138 139 // the number of electrons at the shell, gro 139 // the number of electrons at the shell, ground shell index=0 140 G4int GetNbOfShellElectrons(G4int index) con 140 G4int GetNbOfShellElectrons(G4int index) const; 141 141 142 // number of isotopes constituing this eleme 142 // number of isotopes constituing this element: 143 inline std::size_t GetNumberOfIsotopes() con << 143 inline size_t GetNumberOfIsotopes() const { return fNumberOfIsotopes; } 144 144 145 // vector of pointers to isotopes constituin 145 // vector of pointers to isotopes constituing this element: 146 inline G4IsotopeVector* GetIsotopeVector() c 146 inline G4IsotopeVector* GetIsotopeVector() const { return theIsotopeVector; } 147 147 148 // vector of relative abundance of each isot 148 // vector of relative abundance of each isotope: 149 inline G4double* GetRelativeAbundanceVector( 149 inline G4double* GetRelativeAbundanceVector() const { return fRelativeAbundanceVector; } 150 150 151 inline const G4Isotope* GetIsotope(G4int iso 151 inline const G4Isotope* GetIsotope(G4int iso) const { return (*theIsotopeVector)[iso]; } 152 152 153 // the (static) Table of Elements: 153 // the (static) Table of Elements: 154 static const G4ElementTable* GetElementTable << 154 static G4ElementTable* GetElementTable(); 155 155 156 static std::size_t GetNumberOfElements(); << 156 static size_t GetNumberOfElements(); 157 157 158 // the index of this element in the Table: 158 // the index of this element in the Table: 159 inline std::size_t GetIndex() const { return << 159 inline size_t GetIndex() const { return fIndexInTable; } 160 160 161 // return pointer to an element, given its n 161 // return pointer to an element, given its name: 162 static G4Element* GetElement(const G4String& 162 static G4Element* GetElement(const G4String& name, G4bool warning = true); 163 163 164 // Coulomb correction factor: 164 // Coulomb correction factor: 165 inline G4double GetfCoulomb() const { return 165 inline G4double GetfCoulomb() const { return fCoulomb; } 166 166 167 // Tsai formula for the radiation length: 167 // Tsai formula for the radiation length: 168 inline G4double GetfRadTsai() const { return 168 inline G4double GetfRadTsai() const { return fRadTsai; } 169 169 170 // pointer to ionisation parameters: 170 // pointer to ionisation parameters: 171 inline G4IonisParamElm* GetIonisation() cons 171 inline G4IonisParamElm* GetIonisation() const { return fIonisation; } 172 172 173 // printing methods 173 // printing methods 174 friend std::ostream& operator<<(std::ostream 174 friend std::ostream& operator<<(std::ostream&, const G4Element*); 175 friend std::ostream& operator<<(std::ostream 175 friend std::ostream& operator<<(std::ostream&, const G4Element&); 176 friend std::ostream& operator<<(std::ostream 176 friend std::ostream& operator<<(std::ostream&, const G4ElementTable&); 177 friend std::ostream& operator<<(std::ostream 177 friend std::ostream& operator<<(std::ostream&, const G4ElementVector&); 178 178 179 inline void SetName(const G4String& name) { 179 inline void SetName(const G4String& name) { fName = name; } 180 180 181 G4bool operator==(const G4Element&) const = 181 G4bool operator==(const G4Element&) const = delete; 182 G4bool operator!=(const G4Element&) const = 182 G4bool operator!=(const G4Element&) const = delete; 183 183 184 private: 184 private: 185 void InitializePointers(); 185 void InitializePointers(); 186 void ComputeDerivedQuantities(); 186 void ComputeDerivedQuantities(); 187 void ComputeCoulombFactor(); 187 void ComputeCoulombFactor(); 188 void ComputeLradTsaiFactor(); 188 void ComputeLradTsaiFactor(); 189 void AddNaturalIsotopes(); 189 void AddNaturalIsotopes(); 190 190 191 // Mutable access to the element table. << 192 static G4ElementTable& GetElementTableRef(); << 193 << 194 // Basic data members (which define an Eleme 191 // Basic data members (which define an Element) 195 192 196 G4String fName; // name 193 G4String fName; // name 197 G4String fSymbol; // symbol 194 G4String fSymbol; // symbol 198 G4double fZeff; // Effective atomic number 195 G4double fZeff; // Effective atomic number 199 G4double fNeff; // Effective number of nucl 196 G4double fNeff; // Effective number of nucleons 200 G4double fAeff; // Effective mass of a mole 197 G4double fAeff; // Effective mass of a mole 201 G4int fZ; 198 G4int fZ; 202 199 203 G4int fNbOfAtomicShells; // number of atom 200 G4int fNbOfAtomicShells; // number of atomic shells 204 G4double* fAtomicShells; // Pointer to atom 201 G4double* fAtomicShells; // Pointer to atomic shell binding energies 205 G4int* fNbOfShellElectrons; // Pointer to t 202 G4int* fNbOfShellElectrons; // Pointer to the number of subshell electrons 206 203 207 G4int fNumberOfIsotopes; // Number of isoto 204 G4int fNumberOfIsotopes; // Number of isotopes added to the element 208 G4IsotopeVector* theIsotopeVector; // vecto 205 G4IsotopeVector* theIsotopeVector; // vector of constituent isotopes of the element 209 G4double* fRelativeAbundanceVector; // Frac 206 G4double* fRelativeAbundanceVector; // Fraction nb of atomes per volume 210 // for 207 // for each constituent 211 208 212 // Set up the static Table of Elements 209 // Set up the static Table of Elements 213 std::size_t fIndexInTable; << 210 static G4ElementTable theElementTable; >> 211 size_t fIndexInTable; 214 G4bool fNaturalAbundance; 212 G4bool fNaturalAbundance; 215 213 216 // Derived data members (computed from the b 214 // Derived data members (computed from the basic data members) 217 215 218 G4double fCoulomb; // Coulomb correction fa 216 G4double fCoulomb; // Coulomb correction factor 219 G4double fRadTsai; // Tsai formula for the 217 G4double fRadTsai; // Tsai formula for the radiation length 220 G4IonisParamElm* fIonisation; // Pointer to 218 G4IonisParamElm* fIonisation; // Pointer to ionisation parameters 221 }; 219 }; 222 220 223 inline G4bool G4Element::GetNaturalAbundanceFl 221 inline G4bool G4Element::GetNaturalAbundanceFlag() const { return fNaturalAbundance; } 224 222 225 inline void G4Element::SetNaturalAbundanceFlag 223 inline void G4Element::SetNaturalAbundanceFlag(G4bool val) { fNaturalAbundance = val; } 226 224 227 #endif 225 #endif 228 226