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

Applications | User Support | Publications | Collaboration