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