Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 27 #ifndef G4NistMaterialBuilder_h 28 #define G4NistMaterialBuilder_h 1 29 30 //-------------------------------------------- 31 // 32 // ClassName: G4NistMaterialBuilder 33 // 34 // Description: Utility class to hold and mani 35 // 36 // Author: V.Ivanchenko 21.11.2004 37 // 38 // Modifications: 39 // 31.10.05 Add chemical effect and gas proper 40 // 27.02.06 V.Ivanchneko add ConstructNewGasMa 41 // 11.05.06 V.Ivanchneko add warning flag to F 42 // 27.07.06 V.Ivanchneko set defaul warning=tr 43 // 27.07.07 V.Ivanchneko add matIndex vector t 44 // 28.07.07 V.Ivanchneko add BuildMaterial met 45 // 29.04.10 V.Ivanchneko add GetMeanIonisation 46 // 09.02.12 P.Gumplinger add ConstructNewIdeal 47 // 48 //-------------------------------------------- 49 // 50 // Class Description: 51 // 52 // Element data from the NIST DB on Atomic Wei 53 // http://physics.nist.gov/PhysRefData/Composi 54 // 55 56 #include "G4Material.hh" 57 #include "globals.hh" 58 59 #include <CLHEP/Units/PhysicalConstants.h> 60 61 #include <vector> 62 63 class G4NistElementBuilder; 64 65 class G4NistMaterialBuilder 66 { 67 public: 68 G4NistMaterialBuilder(G4NistElementBuilder*, 69 70 ~G4NistMaterialBuilder() = default; 71 72 // Find or build a G4Material by name, from 73 inline G4Material* FindMaterial(const G4Stri 74 G4Material* FindOrBuildMaterial(const G4Stri 75 76 // Find or build a simple material via atomi 77 inline G4Material* FindSimpleMaterial(G4int 78 G4Material* FindOrBuildSimpleMaterial(G4int 79 80 // construct a G4Material from scratch by at 81 G4Material* ConstructNewMaterial(const G4Str 82 const std::vector<G4int>& nbAtoms, G4doubl 83 G4double temp = NTP_Temperature, G4double 84 85 // construct a G4Material from scratch by fr 86 G4Material* ConstructNewMaterial(const G4Str 87 const std::vector<G4double>& weight, G4dou 88 G4double temp = NTP_Temperature, G4double 89 90 // construct a gas G4Material from scratch b 91 G4Material* ConstructNewGasMaterial( 92 const G4String& name, const G4String& name 93 94 // Construct an ideal gas G4Material from sc 95 G4Material* ConstructNewIdealGasMaterial(con 96 const std::vector<G4int>& nbAtoms, G4doubl 97 G4double pressure = CLHEP::STP_Pressure); 98 99 // verbosity level defined by G4NistManager 100 void SetVerbose(G4int val); 101 102 // cout predefined materials: 103 // "simple" - only pure materials in basic s 104 // "compound" - NIST compounds 105 // "hep" - HEP materials and compounds 106 // "biochemical" - bio-chemical materials 107 // "all" - all 108 void ListMaterials(const G4String&) const; 109 110 // cout lists of predefined materials 111 void ListNistSimpleMaterials() const; 112 void ListNistCompoundMaterials() const; 113 void ListHepMaterials() const; 114 void ListSpaceMaterials() const; 115 void ListBioChemicalMaterials() const; 116 117 // access to the list of names of Geant4 pre 118 const std::vector<G4String>& GetMaterialName 119 120 // access to the NIST mean ionisation potent 121 inline G4double GetMeanIonisationEnergy(G4in 122 inline G4double GetNominalDensity(G4int inde 123 124 G4bool operator==(const G4NistMaterialBuilde 125 G4bool operator!=(const G4NistMaterialBuilde 126 G4NistMaterialBuilder(const G4NistMaterialBu 127 const G4NistMaterialBuilder& operator=(const 128 129 private: 130 void Initialise(); 131 void NistSimpleMaterials(); 132 void NistCompoundMaterials(); 133 void NistCompoundMaterials2(); 134 void HepAndNuclearMaterials(); 135 void SpaceMaterials(); 136 void BioChemicalMaterials(); 137 138 // add parameters of material from NIST DB t 139 // density in g/cm3, mean ionisation potenti 140 // 141 void AddMaterial(const G4String& nameMat, G4 142 G4int ncomp = 1, G4State = kStateSolid, G4 143 144 void AddGas(const G4String& nameMat, G4doubl 145 146 void AddElementByWeightFraction(G4int Z, G4d 147 void AddElementByAtomCount(G4int Z, G4int); 148 149 void AddElementByWeightFraction(const G4Stri 150 void AddElementByAtomCount(const G4String& n 151 152 // build a G4Material from dataBase 153 G4Material* BuildNistMaterial(const G4String 154 G4Material* BuildMaterial(G4int idx); 155 156 void DumpElm(G4int) const; 157 void DumpMix(G4int) const; 158 159 private: 160 G4NistElementBuilder* elmBuilder; 161 162 G4int verbose; 163 G4int nMaterials{0}; 164 G4int nComponents{0}; 165 G4int nCurrent{0}; 166 G4int nElementary; 167 G4int nNIST; 168 G4int nHEP; 169 G4int nSpace; 170 171 std::vector<G4String> names; 172 std::vector<G4String> chFormulas; 173 174 std::vector<G4double> densities; 175 std::vector<G4double> ionPotentials; 176 std::vector<G4State> states; 177 std::vector<G4double> fractions; 178 std::vector<G4bool> atomCount; 179 std::vector<G4int> components; 180 std::vector<G4int> indexes; 181 std::vector<G4int> elements; 182 std::vector<G4int> matIndex; 183 std::vector<G4bool> STP; 184 185 std::vector<G4int> idxGas; 186 std::vector<G4double> gasTemperature; 187 std::vector<G4double> gasPressure; 188 }; 189 190 inline const std::vector<G4String>& G4NistMate 191 { 192 return names; 193 } 194 195 inline G4double G4NistMaterialBuilder::GetMean 196 { 197 return (index >= 0 && index < nMaterials) ? 198 } 199 200 inline G4double G4NistMaterialBuilder::GetNomi 201 { 202 return (index >= 0 && index < nMaterials) ? 203 } 204 205 inline G4Material* G4NistMaterialBuilder::Find 206 { 207 const G4MaterialTable* theMaterialTable = G4 208 G4Material* ptr = nullptr; 209 for (auto& mat : *theMaterialTable) { 210 if (name == mat->GetName()) { 211 ptr = mat; 212 break; 213 } 214 } 215 return ptr; 216 } 217 218 inline G4Material* G4NistMaterialBuilder::Find 219 { 220 return (Z > 0 && Z < nElementary) ? FindMate 221 } 222 223 #endif 224