Geant4 Cross Reference |
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 // Previous authors: G. Guerrieri, S. Guatelli, and M. G. Pia, INFN Genova, Italy 27 // Authors (since 2007): S. Guatelli, University of Wollongong, Australia 28 // 29 30 #include "G4HumanPhantomMaterial.hh" 31 #include "globals.hh" 32 #include "G4SystemOfUnits.hh" 33 #include "G4MaterialPropertiesTable.hh" 34 #include "G4MaterialPropertyVector.hh" 35 #include "G4MaterialTable.hh" 36 #include "Randomize.hh" 37 #include "G4RunManager.hh" 38 #include "G4Element.hh" 39 #include "G4ElementTable.hh" 40 41 G4HumanPhantomMaterial::G4HumanPhantomMaterial(): 42 fWater(nullptr), fSoft(nullptr), fSkeleton(nullptr), fLung(nullptr), fAdipose(nullptr), fGlandular(nullptr), 43 fAdipose_glandular(nullptr) 44 {;} 45 46 G4HumanPhantomMaterial::~G4HumanPhantomMaterial() 47 {;} 48 49 void G4HumanPhantomMaterial::DefineMaterials() 50 { 51 // Define required materials 52 53 G4double A; // atomic mass 54 G4double Z; // atomic number 55 G4double d; // density 56 57 // General elements 58 59 A = 1.01*g/mole; 60 auto* elH = new G4Element ("Hydrogen","H",Z = 1.,A); 61 62 A = 12.011*g/mole; 63 auto* elC = new G4Element("Carbon","C",Z = 6.,A); 64 65 A = 14.01*g/mole; 66 auto* elN = new G4Element("Nitrogen","N",Z = 7.,A); 67 68 A = 16.00*g/mole; 69 auto* elO = new G4Element("Oxygen","O",Z = 8.,A); 70 71 A = 22.99*g/mole; 72 auto* elNa = new G4Element("Sodium","Na",Z = 11.,A); 73 74 A = 24.305*g/mole; 75 auto* elMg = new G4Element("Magnesium","Mg",Z = 12.,A); 76 77 A = 30.974*g/mole; 78 auto* elP = new G4Element("Phosphorus","P",Z = 15.,A); 79 80 A = 32.064*g/mole; 81 auto* elS = new G4Element("Sulfur","S",Z = 16.,A); 82 83 A = 35.453*g/mole; 84 auto* elCl = new G4Element("Chlorine","Cl",Z = 17.,A); 85 86 A = 39.098*g/mole; 87 auto* elK = new G4Element("Potassium","K",Z = 19.,A); 88 89 A = 40.08*g/mole; 90 auto* elCa = new G4Element("Calcium","Ca",Z = 20.,A); 91 92 A = 55.85*g/mole; 93 auto* elFe = new G4Element("Iron","Fe",Z = 26.,A); 94 95 A = 65.38*g/mole; 96 auto* elZn = new G4Element("Zinc","Zn",Z = 30.,A); 97 98 A = 85.47 *g/mole; 99 auto* elRb = new G4Element("Rb","Rb",Z = 37.,A); 100 101 A = 87.62 *g/mole; 102 auto* elSr = new G4Element("Sr","Sr",Z = 38.,A); 103 104 A = 91.22 *g/mole; 105 auto* elZr = new G4Element("Zr","Zr",Z = 40.,A); 106 107 A = 207.19 *g/mole; 108 auto* elPb = new G4Element("Lead","Pb", Z = 82.,A); 109 110 // Water 111 d = 1.000*g/cm3; 112 fWater = new G4Material("Water",d,2); 113 fWater->AddElement(elH,2); 114 fWater->AddElement(elO,1); 115 fWater->GetIonisation()->SetMeanExcitationEnergy(75.0*eV); 116 117 // MIRD soft tissue 118 d = 0.9869 *g/cm3; 119 fSoft = new G4Material("soft_tissue",d,16); 120 fSoft->AddElement(elH,0.1047); 121 fSoft->AddElement(elC,0.2302); 122 fSoft->AddElement(elN,0.0234); 123 fSoft->AddElement(elO,0.6321); 124 fSoft->AddElement(elNa,0.0013); 125 fSoft->AddElement(elMg,0.00015); 126 fSoft->AddElement(elP,0.0024); 127 fSoft->AddElement(elS,0.0022); 128 fSoft->AddElement(elCl,0.0014); 129 fSoft->AddElement(elK,0.0021); 130 fSoft->AddElement(elFe,0.000063); 131 fSoft->AddElement(elZn,0.000032); 132 fSoft->AddElement(elRb,0.0000057); 133 fSoft->AddElement(elSr,0.00000034); 134 fSoft->AddElement(elZr,0.000008); 135 fSoft->AddElement(elPb,0.00000016); 136 137 // MIRD Skeleton 138 139 d = 1.4862*g/cm3; 140 fSkeleton = new G4Material("skeleton",d,15); 141 fSkeleton -> AddElement(elH,0.0704); 142 fSkeleton -> AddElement(elC,0.2279); 143 fSkeleton -> AddElement(elN,0.0387); 144 fSkeleton -> AddElement(elO,0.4856); 145 fSkeleton -> AddElement(elNa,0.0032); 146 fSkeleton -> AddElement(elMg,0.0011); 147 fSkeleton -> AddElement(elP,0.0694); 148 fSkeleton -> AddElement(elS,0.0017); 149 fSkeleton -> AddElement(elCl,0.0014); 150 fSkeleton -> AddElement(elK,0.0015); 151 fSkeleton -> AddElement(elCa,0.0991); 152 fSkeleton -> AddElement(elFe,0.00008); 153 fSkeleton -> AddElement(elZn,0.000048); 154 fSkeleton -> AddElement(elSr,0.000032); 155 fSkeleton -> AddElement(elPb,0.000011); 156 157 // MIRD lung material 158 d = 0.2958 *g/cm3; 159 fLung = new G4Material("lung_material", d,16); 160 fLung -> AddElement(elH, 0.1021); 161 fLung -> AddElement(elC, 0.1001); 162 fLung -> AddElement(elN,0.028); 163 fLung -> AddElement(elO,0.7596); 164 fLung -> AddElement(elNa,0.0019); 165 fLung -> AddElement(elMg,0.000074); 166 fLung -> AddElement(elP,0.00081); 167 fLung -> AddElement(elS,0.0023); 168 fLung -> AddElement(elCl,0.0027); 169 fLung -> AddElement(elK,0.0020); 170 fLung -> AddElement(elCa,0.00007); 171 fLung -> AddElement(elFe,0.00037); 172 fLung -> AddElement(elZn,0.000011); 173 fLung -> AddElement(elRb,0.0000037); 174 fLung -> AddElement(elSr,0.000000059); 175 fLung -> AddElement(elPb,0.00000041); 176 177 G4double density_adipose = 0.93 *g/cm3; 178 fAdipose = new G4Material("adipose", density_adipose,8); 179 fAdipose -> AddElement(elH, 0.112); 180 fAdipose -> AddElement(elC, 0.619); 181 fAdipose -> AddElement(elN, 0.017); 182 fAdipose -> AddElement(elO, 0.251); 183 fAdipose -> AddElement(elS, 0.00025); 184 fAdipose -> AddElement(elP, 0.00025); 185 fAdipose -> AddElement(elK, 0.00025); 186 fAdipose -> AddElement(elCa,0.00025); 187 188 G4double density_glandular = 1.04 * g/cm3; 189 fGlandular = new G4Material("glandular", density_glandular,8); 190 fGlandular -> AddElement(elH, 0.1); 191 fGlandular -> AddElement(elC,0.184); 192 fGlandular -> AddElement(elN, 0.032); 193 fGlandular -> AddElement(elO, 0.679); 194 fGlandular -> AddElement(elS, 0.00125); 195 fGlandular -> AddElement(elP, 0.00125); 196 fGlandular -> AddElement(elK, 0.00125); 197 fGlandular -> AddElement(elCa,0.00125); 198 199 200 d = (density_adipose * 0.5) + (density_glandular * 0.5); 201 fAdipose_glandular = new G4Material("adipose_glandular", d, 2); 202 fAdipose_glandular -> AddMaterial(fAdipose, 0.5); 203 fAdipose_glandular -> AddMaterial(fGlandular, 0.5); 204 205 // Air 206 d = 1.290*mg/cm3; 207 auto* matAir = new G4Material("Air",d,2); 208 matAir->AddElement(elN,0.7); 209 matAir->AddElement(elO,0.3); 210 } 211 212 G4Material* G4HumanPhantomMaterial::GetMaterial(G4String material) 213 { 214 // Returns a material 215 G4Material* pttoMaterial = G4Material::GetMaterial(material); 216 return pttoMaterial; 217 } 218