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 /// \file optical/wls/src/WLSMaterials.cc << 28 /// \brief Implementation of the WLSMaterials << 29 // 27 // 30 // << 31 #include "WLSMaterials.hh" << 32 << 33 #include "G4NistManager.hh" << 34 #include "G4SystemOfUnits.hh" << 35 28 36 WLSMaterials* WLSMaterials::fInstance = nullpt << 29 #include "WLSMaterials.hh" 37 << 38 //....oooOO0OOooo........oooOO0OOooo........oo << 39 30 40 WLSMaterials::WLSMaterials() 31 WLSMaterials::WLSMaterials() 41 { 32 { 42 fNistMan = G4NistManager::Instance(); << 33 nistMan = G4NistManager::Instance(); 43 fNistMan->SetVerbose(2); << 34 >> 35 nistMan->SetVerbose(2); 44 36 45 CreateMaterials(); 37 CreateMaterials(); 46 } 38 } 47 39 48 //....oooOO0OOooo........oooOO0OOooo........oo << 49 << 50 WLSMaterials::~WLSMaterials() 40 WLSMaterials::~WLSMaterials() 51 { 41 { 52 delete fAir; << 42 delete PMMA; 53 delete fPMMA; << 43 delete Pethylene; 54 delete fPethylene; << 44 delete FPethylene; 55 delete fFPethylene; << 45 delete Polystyrene; 56 delete fPolystyrene; << 46 delete Silicone; 57 delete fSilicone; << 58 delete fCoating; << 59 } 47 } 60 48 61 //....oooOO0OOooo........oooOO0OOooo........oo << 49 WLSMaterials* WLSMaterials::instance = 0; 62 50 63 WLSMaterials* WLSMaterials::GetInstance() 51 WLSMaterials* WLSMaterials::GetInstance() 64 { 52 { 65 if (!fInstance) { << 53 if (instance == 0) 66 fInstance = new WLSMaterials(); << 54 { 67 } << 55 instance = new WLSMaterials(); 68 return fInstance; << 56 } >> 57 return instance; 69 } 58 } 70 59 71 //....oooOO0OOooo........oooOO0OOooo........oo << 72 << 73 G4Material* WLSMaterials::GetMaterial(const G4 60 G4Material* WLSMaterials::GetMaterial(const G4String material) 74 { 61 { 75 G4Material* mat = fNistMan->FindOrBuildMater << 62 G4Material* mat = nistMan->FindOrBuildMaterial(material); 76 63 77 if (!mat) mat = G4Material::GetMaterial(mate 64 if (!mat) mat = G4Material::GetMaterial(material); 78 if (!mat) { 65 if (!mat) { 79 G4ExceptionDescription ed; << 66 std::ostringstream o; 80 ed << "Material " << material << " not fou << 67 o << "Material " << material << " not found!"; 81 G4Exception("WLSMaterials::GetMaterial", " << 68 G4Exception("WLSMaterials::GetMaterial","", >> 69 FatalException,o.str().c_str()); 82 } 70 } 83 71 84 return mat; 72 return mat; 85 } 73 } 86 74 87 //....oooOO0OOooo........oooOO0OOooo........oo << 88 << 89 void WLSMaterials::CreateMaterials() 75 void WLSMaterials::CreateMaterials() 90 { 76 { 91 G4double density; 77 G4double density; 92 G4int ncomponents; 78 G4int ncomponents; 93 G4double fractionmass; 79 G4double fractionmass; 94 std::vector<G4int> natoms; 80 std::vector<G4int> natoms; 95 std::vector<G4double> fractionMass; 81 std::vector<G4double> fractionMass; 96 std::vector<G4String> elements; 82 std::vector<G4String> elements; 97 83 98 // Materials Definitions 84 // Materials Definitions 99 // ===================== 85 // ===================== 100 86 101 //------------------------------------------ 87 //-------------------------------------------------- 102 // Vacuum 88 // Vacuum 103 //------------------------------------------ 89 //-------------------------------------------------- 104 90 105 fNistMan->FindOrBuildMaterial("G4_Galactic") << 91 nistMan->FindOrBuildMaterial("G4_Galactic"); 106 92 107 //------------------------------------------ 93 //-------------------------------------------------- 108 // Air 94 // Air 109 //------------------------------------------ 95 //-------------------------------------------------- 110 96 111 fAir = fNistMan->FindOrBuildMaterial("G4_AIR << 97 Air = nistMan->FindOrBuildMaterial("G4_AIR"); 112 98 113 //------------------------------------------ 99 //-------------------------------------------------- 114 // WLSfiber PMMA 100 // WLSfiber PMMA 115 //------------------------------------------ 101 //-------------------------------------------------- 116 102 117 elements.push_back("C"); << 103 elements.push_back("C"); natoms.push_back(5); 118 natoms.push_back(5); << 104 elements.push_back("H"); natoms.push_back(8); 119 elements.push_back("H"); << 105 elements.push_back("O"); natoms.push_back(2); 120 natoms.push_back(8); << 121 elements.push_back("O"); << 122 natoms.push_back(2); << 123 106 124 density = 1.190 * g / cm3; << 107 density = 1.190*g/cm3; 125 108 126 fPMMA = fNistMan->ConstructNewMaterial("PMMA << 109 PMMA = nistMan-> >> 110 ConstructNewMaterial("PMMA", elements, natoms, density); 127 111 128 elements.clear(); 112 elements.clear(); 129 natoms.clear(); 113 natoms.clear(); 130 114 131 //------------------------------------------ 115 //-------------------------------------------------- 132 // Cladding (polyethylene) 116 // Cladding (polyethylene) 133 //------------------------------------------ 117 //-------------------------------------------------- 134 118 135 elements.push_back("C"); << 119 elements.push_back("C"); natoms.push_back(2); 136 natoms.push_back(2); << 120 elements.push_back("H"); natoms.push_back(4); 137 elements.push_back("H"); << 138 natoms.push_back(4); << 139 121 140 density = 1.200 * g / cm3; << 122 density = 1.200*g/cm3; 141 123 142 fPethylene = fNistMan->ConstructNewMaterial( << 124 Pethylene = nistMan-> >> 125 ConstructNewMaterial("Pethylene", elements, natoms, density); 143 126 144 elements.clear(); 127 elements.clear(); 145 natoms.clear(); 128 natoms.clear(); 146 129 147 //------------------------------------------ 130 //-------------------------------------------------- 148 // Double Cladding (fluorinated polyethylene 131 // Double Cladding (fluorinated polyethylene) 149 //------------------------------------------ 132 //-------------------------------------------------- 150 133 151 elements.push_back("C"); << 134 elements.push_back("C"); natoms.push_back(2); 152 natoms.push_back(2); << 135 elements.push_back("H"); natoms.push_back(4); 153 elements.push_back("H"); << 154 natoms.push_back(4); << 155 136 156 density = 1.400 * g / cm3; << 137 density = 1.400*g/cm3; 157 138 158 fFPethylene = fNistMan->ConstructNewMaterial << 139 FPethylene = nistMan-> >> 140 ConstructNewMaterial("FPethylene", elements, natoms, density); 159 141 160 elements.clear(); 142 elements.clear(); 161 natoms.clear(); 143 natoms.clear(); 162 144 163 //------------------------------------------ 145 //-------------------------------------------------- 164 // Polystyrene 146 // Polystyrene 165 //------------------------------------------ 147 //-------------------------------------------------- >> 148 >> 149 elements.push_back("C"); natoms.push_back(8); >> 150 elements.push_back("H"); natoms.push_back(8); 166 151 167 elements.push_back("C"); << 152 density = 1.050*g/cm3; 168 natoms.push_back(8); << 169 elements.push_back("H"); << 170 natoms.push_back(8); << 171 153 172 density = 1.050 * g / cm3; << 154 Polystyrene = nistMan-> 173 << 155 ConstructNewMaterial("Polystyrene", elements, natoms, density); 174 fPolystyrene = fNistMan->ConstructNewMateria << 175 156 176 elements.clear(); 157 elements.clear(); 177 natoms.clear(); 158 natoms.clear(); 178 159 179 //------------------------------------------ 160 //-------------------------------------------------- 180 // Silicone (Template for Optical Grease) 161 // Silicone (Template for Optical Grease) 181 //------------------------------------------ 162 //-------------------------------------------------- 182 163 183 elements.push_back("C"); << 164 elements.push_back("C"); natoms.push_back(2); 184 natoms.push_back(2); << 165 elements.push_back("H"); natoms.push_back(6); 185 elements.push_back("H"); << 166 186 natoms.push_back(6); << 167 density = 1.060*g/cm3; 187 << 188 density = 1.060 * g / cm3; << 189 168 190 fSilicone = fNistMan->ConstructNewMaterial(" << 169 Silicone = nistMan-> >> 170 ConstructNewMaterial("Silicone", elements, natoms, density); 191 171 192 elements.clear(); 172 elements.clear(); 193 natoms.clear(); 173 natoms.clear(); 194 174 195 //------------------------------------------ 175 //-------------------------------------------------- 196 // Aluminium 176 // Aluminium 197 //------------------------------------------ 177 //-------------------------------------------------- 198 178 199 fNistMan->FindOrBuildMaterial("G4_Al"); << 179 nistMan->FindOrBuildMaterial("G4_Al"); 200 180 201 //------------------------------------------ 181 //-------------------------------------------------- 202 // TiO2 182 // TiO2 203 //------------------------------------------ 183 //-------------------------------------------------- 204 184 205 elements.push_back("Ti"); << 185 elements.push_back("Ti"); natoms.push_back(1); 206 natoms.push_back(1); << 186 elements.push_back("O"); natoms.push_back(2); 207 elements.push_back("O"); << 208 natoms.push_back(2); << 209 187 210 density = 4.26 * g / cm3; << 188 density = 4.26*g/cm3; 211 189 212 G4Material* TiO2 = fNistMan->ConstructNewMat << 190 G4Material* TiO2 = nistMan-> >> 191 ConstructNewMaterial("TiO2", elements, natoms, density); 213 192 214 elements.clear(); 193 elements.clear(); 215 natoms.clear(); 194 natoms.clear(); 216 195 217 //------------------------------------------ 196 //-------------------------------------------------- 218 // Scintillator Coating - 15% TiO2 and 85% p 197 // Scintillator Coating - 15% TiO2 and 85% polystyrene by weight. 219 //------------------------------------------ 198 //-------------------------------------------------- 220 199 221 density = 1.52 * g / cm3; << 200 density = 1.52*g/cm3; 222 201 223 fCoating = new G4Material("Coating", density << 202 Coating = >> 203 new G4Material("Coating", density, ncomponents=2); 224 204 225 fCoating->AddMaterial(TiO2, fractionmass = 1 << 205 Coating->AddMaterial(TiO2, fractionmass = 15*perCent); 226 fCoating->AddMaterial(fPolystyrene, fraction << 206 Coating->AddMaterial(Polystyrene, fractionmass = 85*perCent); 227 207 228 // 208 // 229 // ------------ Generate & Add Material Prop 209 // ------------ Generate & Add Material Properties Table ------------ 230 // 210 // 231 211 232 std::vector<G4double> energy = { << 212 const G4int nEntries = 50; 233 2.00 * eV, 2.03 * eV, 2.06 * eV, 2.09 * eV << 234 2.24 * eV, 2.27 * eV, 2.30 * eV, 2.33 * eV << 235 2.48 * eV, 2.51 * eV, 2.54 * eV, 2.57 * eV << 236 2.72 * eV, 2.75 * eV, 2.78 * eV, 2.81 * eV << 237 2.96 * eV, 2.99 * eV, 3.02 * eV, 3.05 * eV << 238 3.20 * eV, 3.23 * eV, 3.26 * eV, 3.29 * eV << 239 3.44 * eV, 3.47 * eV}; << 240 213 241 std::vector<G4double> energySmall = {2.0 * e << 214 G4double PhotonEnergy[nEntries] = >> 215 {2.00*eV,2.03*eV,2.06*eV,2.09*eV,2.12*eV, >> 216 2.15*eV,2.18*eV,2.21*eV,2.24*eV,2.27*eV, >> 217 2.30*eV,2.33*eV,2.36*eV,2.39*eV,2.42*eV, >> 218 2.45*eV,2.48*eV,2.51*eV,2.54*eV,2.57*eV, >> 219 2.60*eV,2.63*eV,2.66*eV,2.69*eV,2.72*eV, >> 220 2.75*eV,2.78*eV,2.81*eV,2.84*eV,2.87*eV, >> 221 2.90*eV,2.93*eV,2.96*eV,2.99*eV,3.02*eV, >> 222 3.05*eV,3.08*eV,3.11*eV,3.14*eV,3.17*eV, >> 223 3.20*eV,3.23*eV,3.26*eV,3.29*eV,3.32*eV, >> 224 3.35*eV,3.38*eV,3.41*eV,3.44*eV,3.47*eV}; 242 225 243 //------------------------------------------ 226 //-------------------------------------------------- 244 // Air 227 // Air 245 //------------------------------------------ 228 //-------------------------------------------------- 246 229 247 std::vector<G4double> refractiveIndex = {1.0 << 230 G4double RefractiveIndex[nEntries] = >> 231 { 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, >> 232 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, >> 233 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, >> 234 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, >> 235 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00}; 248 236 249 auto mpt = new G4MaterialPropertiesTable(); << 237 G4MaterialPropertiesTable* MPT = new G4MaterialPropertiesTable(); 250 mpt->AddProperty("RINDEX", energySmall, refr << 238 MPT->AddProperty("RINDEX", PhotonEnergy, RefractiveIndex, nEntries); 251 239 252 fAir->SetMaterialPropertiesTable(mpt); << 240 Air->SetMaterialPropertiesTable(MPT); 253 241 254 //------------------------------------------ 242 //-------------------------------------------------- 255 // PMMA for WLSfibers 243 // PMMA for WLSfibers 256 //------------------------------------------ 244 //-------------------------------------------------- 257 245 258 std::vector<G4double> refractiveIndexWLSfibe << 246 G4double RefractiveIndexWLSfiber[nEntries] = 259 << 247 { 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 260 std::vector<G4double> absWLSfiber = { << 248 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 261 5.40 * m, 5.40 * m, 5.40 * m, 5.40 * m, 5. << 249 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 262 5.40 * m, 5.40 * m, 5.40 * m, 5.40 * m, 5. << 250 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 263 5.40 * m, 5.40 * m, 5.40 * m, 5.40 * m, 5. << 251 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60, 1.60}; 264 5.40 * m, 5.40 * m, 1.10 * m, 1.10 * m, 1. << 252 265 1. * mm, 1. * mm, 1. * mm, 1. * mm, 1. << 253 G4double AbsWLSfiber[nEntries] = 266 1. * mm, 1. * mm, 1. * mm, 1. * mm, 1. << 254 {5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m, 267 << 255 5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m, 268 std::vector<G4double> emissionFib = {0.05, 0 << 256 5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,5.40*m,1.10*m, 269 3.25, 3 << 257 1.10*m,1.10*m,1.10*m,1.10*m,1.10*m,1.10*m, 1.*mm, 1.*mm, 1.*mm, 1.*mm, 270 12.9, 1 << 258 1.*mm, 1.*mm, 1.*mm, 1.*mm, 1.*mm, 1.*mm, 1.*mm, 1.*mm, 1.*mm, 1.*mm}; 271 15.0, 9 << 259 272 0.00, 0 << 260 G4double EmissionFib[nEntries] = >> 261 {0.05, 0.10, 0.30, 0.50, 0.75, 1.00, 1.50, 1.85, 2.30, 2.75, >> 262 3.25, 3.80, 4.50, 5.20, 6.00, 7.00, 8.50, 9.50, 11.1, 12.4, >> 263 12.9, 13.0, 12.8, 12.3, 11.1, 11.0, 12.0, 11.0, 17.0, 16.9, >> 264 15.0, 9.00, 2.50, 1.00, 0.05, 0.00, 0.00, 0.00, 0.00, 0.00, >> 265 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}; 273 266 274 // Add entries into properties table 267 // Add entries into properties table 275 auto mptWLSfiber = new G4MaterialPropertiesT << 268 G4MaterialPropertiesTable* MPTWLSfiber = new G4MaterialPropertiesTable(); 276 mptWLSfiber->AddProperty("RINDEX", energySma << 269 MPTWLSfiber-> 277 mptWLSfiber->AddProperty("WLSABSLENGTH", ene << 270 AddProperty("RINDEX",PhotonEnergy,RefractiveIndexWLSfiber,nEntries); 278 mptWLSfiber->AddProperty("WLSCOMPONENT", ene << 271 // MPTWLSfiber->AddProperty("ABSLENGTH",PhotonEnergy,AbsWLSfiber,nEntries); 279 mptWLSfiber->AddConstProperty("WLSTIMECONSTA << 272 MPTWLSfiber->AddProperty("WLSABSLENGTH",PhotonEnergy,AbsWLSfiber,nEntries); >> 273 MPTWLSfiber->AddProperty("WLSCOMPONENT",PhotonEnergy,EmissionFib,nEntries); >> 274 MPTWLSfiber->AddConstProperty("WLSTIMECONSTANT", 0.5*ns); 280 275 281 fPMMA->SetMaterialPropertiesTable(mptWLSfibe << 276 PMMA->SetMaterialPropertiesTable(MPTWLSfiber); 282 277 283 //------------------------------------------ 278 //-------------------------------------------------- 284 // Polyethylene 279 // Polyethylene 285 //------------------------------------------ 280 //-------------------------------------------------- 286 281 287 std::vector<G4double> refractiveIndexClad1 = << 282 G4double RefractiveIndexClad1[nEntries] = 288 << 283 { 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 289 std::vector<G4double> absClad = {20.0 * m, 2 << 284 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, >> 285 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, >> 286 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, >> 287 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49, 1.49}; >> 288 >> 289 G4double AbsClad[nEntries] = >> 290 {20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m, >> 291 20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m, >> 292 20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m, >> 293 20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m, >> 294 20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m,20.0*m}; 290 295 291 // Add entries into properties table 296 // Add entries into properties table 292 auto mptClad1 = new G4MaterialPropertiesTabl << 297 G4MaterialPropertiesTable* MPTClad1 = new G4MaterialPropertiesTable(); 293 mptClad1->AddProperty("RINDEX", energySmall, << 298 MPTClad1->AddProperty("RINDEX",PhotonEnergy,RefractiveIndexClad1,nEntries); 294 mptClad1->AddProperty("ABSLENGTH", energySma << 299 MPTClad1->AddProperty("ABSLENGTH",PhotonEnergy,AbsClad,nEntries); 295 300 296 fPethylene->SetMaterialPropertiesTable(mptCl << 301 Pethylene->SetMaterialPropertiesTable(MPTClad1); 297 302 298 //------------------------------------------ 303 //-------------------------------------------------- 299 // Fluorinated Polyethylene 304 // Fluorinated Polyethylene 300 //------------------------------------------ 305 //-------------------------------------------------- 301 306 302 std::vector<G4double> refractiveIndexClad2 = << 307 G4double RefractiveIndexClad2[nEntries] = >> 308 { 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, >> 309 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, >> 310 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, >> 311 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, >> 312 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42, 1.42}; 303 313 304 // Add entries into properties table 314 // Add entries into properties table 305 auto mptClad2 = new G4MaterialPropertiesTabl << 315 G4MaterialPropertiesTable* MPTClad2 = new G4MaterialPropertiesTable(); 306 mptClad2->AddProperty("RINDEX", energySmall, << 316 MPTClad2->AddProperty("RINDEX",PhotonEnergy,RefractiveIndexClad2,nEntries); 307 mptClad2->AddProperty("ABSLENGTH", energySma << 317 MPTClad2->AddProperty("ABSLENGTH",PhotonEnergy,AbsClad,nEntries); 308 318 309 fFPethylene->SetMaterialPropertiesTable(mptC << 319 FPethylene->SetMaterialPropertiesTable(MPTClad2); 310 320 311 //------------------------------------------ 321 //-------------------------------------------------- 312 // Silicone 322 // Silicone 313 //------------------------------------------ 323 //-------------------------------------------------- 314 324 315 std::vector<G4double> refractiveIndexSilicon << 325 G4double RefractiveIndexSilicone[nEntries] = >> 326 { 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, >> 327 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, >> 328 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, >> 329 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, >> 330 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46, 1.46}; 316 331 317 // Add entries into properties table 332 // Add entries into properties table 318 auto mptSilicone = new G4MaterialPropertiesT << 333 G4MaterialPropertiesTable* MPTSilicone = new G4MaterialPropertiesTable(); 319 mptSilicone->AddProperty("RINDEX", energySma << 334 MPTSilicone-> 320 mptSilicone->AddProperty("ABSLENGTH", energy << 335 AddProperty("RINDEX",PhotonEnergy,RefractiveIndexSilicone,nEntries); >> 336 MPTSilicone->AddProperty("ABSLENGTH",PhotonEnergy,AbsClad,nEntries); 321 337 322 fSilicone->SetMaterialPropertiesTable(mptSil << 338 Silicone->SetMaterialPropertiesTable(MPTSilicone); 323 339 324 //------------------------------------------ 340 //-------------------------------------------------- 325 // Polystyrene 341 // Polystyrene 326 //------------------------------------------ 342 //-------------------------------------------------- 327 343 328 std::vector<G4double> refractiveIndexPS = {1 << 344 G4double RefractiveIndexPS[nEntries] = 329 << 345 { 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 330 std::vector<G4double> absPS = {2. * cm, 2. * << 346 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 331 << 347 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 332 std::vector<G4double> scintilFast = { << 348 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 333 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0. << 349 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50}; 334 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0. << 350 335 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1. << 351 G4double AbsPS[nEntries] = 336 << 352 {2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm, >> 353 2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm, >> 354 2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm, >> 355 2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm, >> 356 2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm,2.*cm}; >> 357 >> 358 G4double ScintilFast[nEntries] = >> 359 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, >> 360 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, >> 361 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, >> 362 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, >> 363 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; >> 364 337 // Add entries into properties table 365 // Add entries into properties table 338 auto mptPolystyrene = new G4MaterialProperti << 366 G4MaterialPropertiesTable* MPTPolystyrene = new G4MaterialPropertiesTable(); 339 mptPolystyrene->AddProperty("RINDEX", energy << 367 MPTPolystyrene->AddProperty("RINDEX",PhotonEnergy,RefractiveIndexPS,nEntries); 340 mptPolystyrene->AddProperty("ABSLENGTH", ene << 368 MPTPolystyrene->AddProperty("ABSLENGTH",PhotonEnergy,AbsPS,nEntries); 341 mptPolystyrene->AddProperty("SCINTILLATIONCO << 369 MPTPolystyrene-> 342 mptPolystyrene->AddConstProperty("SCINTILLAT << 370 AddProperty("FASTCOMPONENT",PhotonEnergy, ScintilFast,nEntries); 343 mptPolystyrene->AddConstProperty("RESOLUTION << 371 MPTPolystyrene->AddConstProperty("SCINTILLATIONYIELD",10./keV); 344 mptPolystyrene->AddConstProperty("SCINTILLAT << 372 MPTPolystyrene->AddConstProperty("RESOLUTIONSCALE",1.0); 345 << 373 MPTPolystyrene->AddConstProperty("FASTTIMECONSTANT", 10.*ns); 346 fPolystyrene->SetMaterialPropertiesTable(mpt << 374 >> 375 Polystyrene->SetMaterialPropertiesTable(MPTPolystyrene); 347 376 348 // Set the Birks Constant for the Polystyren 377 // Set the Birks Constant for the Polystyrene scintillator 349 fPolystyrene->GetIonisation()->SetBirksConst << 378 >> 379 Polystyrene->GetIonisation()->SetBirksConstant(0.126*mm/MeV); >> 380 350 } 381 } 351 382