Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
WLSMaterials Class Reference

#include <Doxymodules_optical.h>

Public Member Functions

 ~WLSMaterials ()
 
G4MaterialGetMaterial (const G4String)
 

Static Public Member Functions

static WLSMaterialsGetInstance ()
 

Private Member Functions

 WLSMaterials ()
 
void CreateMaterials ()
 

Private Attributes

G4NistManagerfNistMan = nullptr
 
G4MaterialfAir = nullptr
 
G4MaterialfPMMA = nullptr
 
G4MaterialfPethylene = nullptr
 
G4MaterialfFPethylene = nullptr
 
G4MaterialfPolystyrene = nullptr
 
G4MaterialfSilicone = nullptr
 
G4MaterialfCoating = nullptr
 

Static Private Attributes

static WLSMaterialsfInstance = nullptr
 

Detailed Description

Definition at line 90 of file Doxymodules_optical.h.

Constructor & Destructor Documentation

◆ ~WLSMaterials()

WLSMaterials::~WLSMaterials ( )

Definition at line 50 of file WLSMaterials.cc.

51{
52 delete fAir;
53 delete fPMMA;
54 delete fPethylene;
55 delete fFPethylene;
56 delete fPolystyrene;
57 delete fSilicone;
58 delete fCoating;
59}
G4Material * fPethylene
G4Material * fPMMA
G4Material * fAir
G4Material * fPolystyrene
G4Material * fFPethylene
G4Material * fSilicone
G4Material * fCoating

◆ WLSMaterials()

WLSMaterials::WLSMaterials ( )
private

Definition at line 40 of file WLSMaterials.cc.

41{
42 fNistMan = G4NistManager::Instance();
43 fNistMan->SetVerbose(2);
44
46}
void CreateMaterials()
G4NistManager * fNistMan

Member Function Documentation

◆ GetInstance()

WLSMaterials * WLSMaterials::GetInstance ( )
static

Definition at line 63 of file WLSMaterials.cc.

64{
65 if(!fInstance)
66 {
67 fInstance = new WLSMaterials();
68 }
69 return fInstance;
70}
static WLSMaterials * fInstance

◆ GetMaterial()

G4Material * WLSMaterials::GetMaterial ( const G4String  material)

Definition at line 74 of file WLSMaterials.cc.

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}

◆ CreateMaterials()

void WLSMaterials::CreateMaterials ( )
private

Definition at line 92 of file WLSMaterials.cc.

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}

Member Data Documentation

◆ fInstance

WLSMaterials * WLSMaterials::fInstance = nullptr
staticprivate

Definition at line 54 of file WLSMaterials.hh.

◆ fNistMan

G4NistManager* WLSMaterials::fNistMan = nullptr
private

Definition at line 56 of file WLSMaterials.hh.

◆ fAir

G4Material* WLSMaterials::fAir = nullptr
private

Definition at line 58 of file WLSMaterials.hh.

◆ fPMMA

G4Material* WLSMaterials::fPMMA = nullptr
private

Definition at line 59 of file WLSMaterials.hh.

◆ fPethylene

G4Material* WLSMaterials::fPethylene = nullptr
private

Definition at line 60 of file WLSMaterials.hh.

◆ fFPethylene

G4Material* WLSMaterials::fFPethylene = nullptr
private

Definition at line 61 of file WLSMaterials.hh.

◆ fPolystyrene

G4Material* WLSMaterials::fPolystyrene = nullptr
private

Definition at line 62 of file WLSMaterials.hh.

◆ fSilicone

G4Material* WLSMaterials::fSilicone = nullptr
private

Definition at line 63 of file WLSMaterials.hh.

◆ fCoating

G4Material* WLSMaterials::fCoating = nullptr
private

Definition at line 64 of file WLSMaterials.hh.


The documentation for this class was generated from the following files:

Applications | User Support | Publications | Collaboration