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