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