source: ELYSE/HEAD/source/DetectorConstruction.cxx@ 626

Last change on this file since 626 was 294, checked in by campagne, 19 years ago

Unuseful Sensitive Detector for the moment (JEC)

File size: 27.0 KB
Line 
1#include "ELYSE/DetectorConstruction.hh"
2
3// Geant 4
4#include "G4MaterialTable.hh"
5#include "G4ElementTable.hh"
6#include "G4Box.hh"
7#include "G4SubtractionSolid.hh"
8#include "G4VPhysicalVolume.hh"
9#include "G4OpticalSurface.hh"
10#include "G4LogicalVolume.hh"
11#include "G4LogicalSkinSurface.hh"
12#include "G4LogicalBorderSurface.hh"
13#include "G4PVPlacement.hh"
14#include "G4SDManager.hh"
15#include "G4Material.hh"
16#include "G4Element.hh"
17
18#include "G4GeometryManager.hh"
19#include "G4PhysicalVolumeStore.hh"
20#include "G4LogicalVolumeStore.hh"
21#include "G4SolidStore.hh"
22#include "G4RunManager.hh"
23#include "G4Colour.hh"
24#include "G4VisAttributes.hh"
25
26//ELYSE
27//#include "ELYSE/TrappingVolume.hh"
28#include "ELYSE/DetectorMessenger.hh"
29#include "ELYSE/Cast.hh"
30#include "ELYSE/Analysis.hh"
31
32ELYSE::DetectorConstruction::DetectorConstruction() {
33
34 //-----------------
35 // Create Materials
36 //-----------------
37
38 ConstructMaterials();
39
40 //-----------------
41 // Initilize SD pointers
42 //-----------------
43
44 // aTrappingVolume = 0;
45
46 //-----------------
47 // Volume/Surface lengths/size (default)
48 //-----------------
49
50 //The Hall
51 expHall_x = expHall_y = expHall_z = 1.0*m;
52 //The target volume
53 water_x = water_y = water_z = 10.0*cm;
54 //tyvek sheet thickness
55 tyvek_thickness = 1.0*mm;
56 //glass tank thickness
57 glass_thickness = 5.0*mm;
58
59
60 updated = true;
61
62 //-----------------
63 // Make the detector messenger to allow changing geometry
64 //-----------------
65
66 messenger = new DetectorMessenger(this);
67
68
69}//Ctor
70
71//----------------------------------------------------------------------------------------------
72ELYSE::DetectorConstruction::~DetectorConstruction(){
73 delete messenger;
74}
75
76//-----------------------------------------------------------------------------------------------
77
78G4VPhysicalVolume* ELYSE::DetectorConstruction::Construct() {
79
80 //-----------------------
81 // The Solids
82 //-----------------------
83
84 //-----------------------
85 // A box of water delimited by a tyvek sheet and surrounding by a glass tank and then a air volume sensitive
86 //-----------------------
87
88
89 G4Box* solidExpHall = new G4Box("expHall",
90 expHall_x/2.,
91 expHall_y/2.,
92 expHall_z/2.);
93
94
95 G4Box* solidGlassVol = new G4Box("GlassVol",
96 water_x/2.+ glass_thickness,
97 water_y/2.+ glass_thickness,
98 water_z/2.+ glass_thickness
99 );
100
101
102 G4Box* solidTyvek = new G4Box("TyvekSheet",
103 water_x/2.+tyvek_thickness,
104 water_y/2.+tyvek_thickness,
105 water_z/2.+tyvek_thickness
106 );
107
108 G4Box* solidWaterTank = new G4Box("waterTank",water_x/2.,water_y/2.,water_z/2.);
109
110
111
112 //JEC 22/2/07 test to avoid Substraction and use simple immersion
113 // G4SubtractionSolid* solidGlassVol = new G4SubtractionSolid("GlassVol",solidGlassFull,solidTyvekFull);
114
115 //Make the tyvek volume as an subtraction to define a proper tyvek volume for the oprtical surface
116 //overwise we would have done a tyvek volume and place inside a water volume...
117 //G4SubtractionSolid* solidTyvek = new G4SubtractionSolid("TyvekSheet",solidTyvekFull,solidWaterTank);
118
119
120 //-----------------------
121 // The Logical and Physical volumes
122 // The vizualization attributes are defined in scripts/Styles/ELYSE.styles
123 //-----------------------
124
125
126
127 G4LogicalVolume* logicExpHall =
128 new G4LogicalVolume(solidExpHall,
129 G4Material::GetMaterial("Air"),
130 "expHall",
131 0,0,0);
132
133 G4VPhysicalVolume* physicExpHall =
134 new G4PVPlacement(0,G4ThreeVector(),
135 logicExpHall,
136 "expHall",
137 0,false,0);
138
139
140 G4LogicalVolume* logicGlassVol
141 = new G4LogicalVolume(solidGlassVol,G4Material::GetMaterial("Glass"),"GlassVol",0,0,0);
142
143
144 new G4PVPlacement(0,G4ThreeVector(),logicGlassVol,"GlassVol",
145 logicExpHall,false,0);
146
147
148 G4LogicalVolume* logicTyvek
149 = new G4LogicalVolume(solidTyvek,G4Material::GetMaterial("Tyvek"),"TyvekSheet",0,0,0);
150
151 new G4PVPlacement(0,G4ThreeVector(),logicTyvek,"TyvekSheet",
152 logicGlassVol,false,0);
153
154 G4LogicalVolume* logicWaterTank
155 = new G4LogicalVolume(solidWaterTank,G4Material::GetMaterial("Water"),"waterTank",0,0,0);
156
157
158 new G4PVPlacement(0,G4ThreeVector(),logicWaterTank,"waterTank",
159 logicTyvek,false,0);
160
161
162 G4LogicalSkinSurface* waterTyvekInter = new G4LogicalSkinSurface("waterTyvekInterface",
163 logicWaterTank,OpWaterTyvekSurface);
164 //Dump
165 if(waterTyvekInter->GetLogicalVolume() == logicWaterTank)
166 G4cout << "(JEC) water-Tyvek x-check logical: Ok" << G4endl;
167 ((G4OpticalSurface*)
168 (G4LogicalSkinSurface::GetSurface(logicWaterTank)->GetSurfaceProperty()))->DumpInfo();
169
170
171 //JEC 22/2/07 use a Skin envelop for the transition Tyvek-Glass
172 //JEC Not sure that for the moment it is useful: To be Fixed
173 new G4LogicalSkinSurface("waterTyvekInterface",
174 logicWaterTank,OpTyvekGlassSurface);
175
176
177 //--------------
178 // Make sensitive detectors (this is quite artificial for the moment 13/2/07)
179 //--------------
180
181// G4SDManager* SDman = G4SDManager::GetSDMpointer();
182
183// if (!aTrappingVolume) {
184// //JEC 25/1/06 add the "this" pointer, so WCSD can access to the PMT location wo static functions
185// aTrappingVolume = new TrappingVolume( "/ELYSE/TrappingVolume", this );
186// SDman->AddNewDetector( aTrappingVolume );
187// }
188// logicGlassVol->SetGlasstiveDetector( aTrappingVolume );
189
190
191
192 // Return the pointer to the physical experimental hall
193 return physicExpHall;
194} //Construct
195
196//---------------------------------------------------------------------------------------------
197void ELYSE::DetectorConstruction::ConstructMaterials() {
198
199 //---Vaccuum
200 G4double density = universe_mean_density; //from PhysicalConstants.h
201 G4double pressure = 1.e-19*pascal;
202 G4double temperature = 0.1*kelvin;
203 G4double a = 1.01*g/mole;
204 new G4Material("Vaccuum", 1., a, density,
205 kStateGas,temperature,pressure);
206
207 //---Water
208
209 a = 1.01*g/mole;
210 G4Element* elH
211 = new G4Element("Hydrgen","H", 1,a);
212
213 a = 16.00*g/mole;
214 G4Element* elO
215 = new G4Element("Oxygen","O", 8,a);
216
217 density = 1.00*g/cm3;
218 G4Material* Water
219 = new G4Material("Water",density,2);
220 Water->AddElement(elH, 2);
221 Water->AddElement(elO, 1);
222
223 //---Air
224
225 a = 14.01*g/mole;
226 G4Element* elN
227 = new G4Element("Nitrogen","N", 7,a);
228
229 density = 1.290*mg/cm3;
230 G4Material* Air
231 = new G4Material("Air",density,2);
232 Air->AddElement(elN, 70.*perCent);
233 Air->AddElement(elO, 30.*perCent);
234
235
236 //---Glass
237 a = 28.09*g/mole;
238 G4Element* elSi = new G4Element("Silicon", "Si", 14., a);
239
240 density = 2.20*g/cm3;
241 G4Material* SiO2 = new G4Material("SiO2",density,2);
242 SiO2->AddElement(elSi, 1);
243 SiO2->AddElement(elO , 2);
244
245 a = 10.81*g/mole;
246 G4Element* elB = new G4Element("Boron", "B", 5, a);
247
248 density = 2.46*g/cm3;
249 G4Material* B2O3 = new G4Material("B2O3",density,2);
250 B2O3->AddElement(elB, 2);
251 B2O3->AddElement(elO, 3);
252
253 a = 22.99*g/mole;
254 G4Element* elNa = new G4Element("Sodium", "Na", 11, a);
255
256 density = 2.27*g/cm3;
257 G4Material* Na2O = new G4Material("Na2O",density,2);
258 Na2O->AddElement(elNa, 2);
259 Na2O->AddElement(elO, 1);
260
261 a = 26.98*g/mole;
262 G4Element* elAl = new G4Element("Aluminum", "Al", 13, a);
263
264 density = 4.00*g/cm3;
265 G4Material* Al2O3 = new G4Material("Al2O3",density,2);
266 Al2O3->AddElement(elAl, 2);
267 Al2O3->AddElement(elO, 3);
268
269 density = 2.23*g/cm3;
270 G4Material* Glass = new G4Material("Glass",density,4);
271
272 Glass->AddMaterial(SiO2, 80.6*perCent);
273 Glass->AddMaterial(B2O3, 13.0*perCent);
274 Glass->AddMaterial(Na2O, 4.0*perCent);
275 Glass->AddMaterial(Al2O3, 2.4*perCent);
276
277
278 //---Tyvek
279 //JEC + SDC: 9/2/07 use Auger Liner definition
280 a= 12.01*g/mole;
281 G4Element* elC
282 = new G4Element("Carbon","C", 6,a);
283
284 density = 0.94*g/cm3;
285 G4Material* Tyvek = new G4Material("Tyvek",density,2);
286 Tyvek->AddElement(elC, 2);
287 Tyvek->AddElement(elH, 4);
288
289
290 // -------------------------------------------------------------
291 // Generate & Add Material Properties Table
292 // -------------------------------------------------------------
293
294 const G4int NUMENTRIES_general=60; //number of energy bins to simulate material properties
295
296 //--------------
297 //-------- Water
298 //--------------
299
300 G4double ENERGY_water[NUMENTRIES_general] =
301 { 1.56962*eV, 1.58974*eV, 1.61039*eV, 1.63157*eV,
302 1.65333*eV, 1.67567*eV, 1.69863*eV, 1.72222*eV,
303 1.74647*eV, 1.77142*eV, 1.79710*eV, 1.82352*eV,
304 1.85074*eV, 1.87878*eV, 1.90769*eV, 1.93749*eV,
305 1.96825*eV, 1.99999*eV, 2.03278*eV, 2.06666*eV,
306 2.10169*eV, 2.13793*eV, 2.17543*eV, 2.21428*eV,
307 2.25454*eV, 2.29629*eV, 2.33962*eV, 2.38461*eV,
308 2.43137*eV, 2.47999*eV, 2.53061*eV, 2.58333*eV,
309 2.63829*eV, 2.69565*eV, 2.75555*eV, 2.81817*eV,
310 2.88371*eV, 2.95237*eV, 3.02438*eV, 3.09999*eV,
311 3.17948*eV, 3.26315*eV, 3.35134*eV, 3.44444*eV,
312 3.54285*eV, 3.64705*eV, 3.75757*eV, 3.87499*eV,
313 3.99999*eV, 4.13332*eV, 4.27585*eV, 4.42856*eV,
314 4.59258*eV, 4.76922*eV, 4.95999*eV, 5.16665*eV,
315 5.39129*eV, 5.63635*eV, 5.90475*eV, 6.19998*eV };
316
317 G4double RINDEX1[NUMENTRIES_general] =
318 { 1.32885, 1.32906, 1.32927, 1.32948, 1.3297, 1.32992, 1.33014,
319 1.33037, 1.3306, 1.33084, 1.33109, 1.33134, 1.3316, 1.33186, 1.33213,
320 1.33241, 1.3327, 1.33299, 1.33329, 1.33361, 1.33393, 1.33427, 1.33462,
321 1.33498, 1.33536, 1.33576, 1.33617, 1.3366, 1.33705, 1.33753, 1.33803,
322 1.33855, 1.33911, 1.3397, 1.34033, 1.341, 1.34172, 1.34248, 1.34331,
323 1.34419, 1.34515, 1.3462, 1.34733, 1.34858, 1.34994, 1.35145, 1.35312,
324 1.35498, 1.35707, 1.35943, 1.36211, 1.36518, 1.36872, 1.37287, 1.37776,
325 1.38362, 1.39074, 1.39956, 1.41075, 1.42535 };
326
327 G4double ABSORPTION_water[NUMENTRIES_general] =
328 {25.3504*cm, 31.7938*cm, 39.9915*cm, 50.454*cm, 63.85*cm,
329 81.0584*cm, 103.24*cm, 131.93*cm, 169.172*cm, 217.694*cm,
330 224.921*cm, 249.688*cm, 262.674*cm, 273*cm, 321.13*cm, 339.789*cm,
331 351.617*cm, 363.108*cm, 385.802*cm, 461.042*cm, 707.714*cm,
332 1038.42*cm, 1383.7*cm, 1558.36*cm, 1722.65*cm, 1939.11*cm,
333 2092.49*cm, 2240.14*cm, 2962.96*cm, 4967.03*cm, 6368.58*cm,
334 8207.56*cm, 10634.2*cm, 13855.3*cm, 18157.3*cm, 23940.2*cm,
335 31766*cm, 42431.6*cm, 57074.9*cm, 77335.9*cm, 105598*cm,
336 145361*cm, 192434*cm, 183898*cm, 176087*cm, 168913*cm, 162301*cm,
337 156187*cm, 150516*cm, 145243*cm, 140327*cm, 135733*cm, 131430*cm,
338 127392*cm, 123594*cm, 120016*cm, 116640*cm, 113448*cm, 110426*cm,
339 107562*cm};
340
341 // M Fechner: Rayleigh scattering -- as of version 4.6.2 of GEANT,
342 // one may use one's own Rayleigh scattering lengths (the buffer is no
343 // longer overwritten for "water", see 4.6.2 release notes)
344
345 // RAYFF = 1/ARAS, for those of you who know SKdetsim...
346 // actually that's not quite right because the scattering models
347 // are different; in G4 there is no scattering depolarization
348 // std value at SK = 0.6. But Mie scattering is implemented
349 // in SKdetsim and not in G4
350
351 // april 2005 : reduced reflections, let's increase scattering...
352 // G4double RAYFF = 1.0/1.65;
353 G4double RAYFF = 1.0/1.5;
354
355 G4double RAYLEIGH_water[NUMENTRIES_general] = {
356 167024.4*cm*RAYFF, 158726.7*cm*RAYFF, 150742*cm*RAYFF,
357 143062.5*cm*RAYFF, 135680.2*cm*RAYFF, 128587.4*cm*RAYFF,
358 121776.3*cm*RAYFF, 115239.5*cm*RAYFF, 108969.5*cm*RAYFF,
359 102958.8*cm*RAYFF, 97200.35*cm*RAYFF, 91686.86*cm*RAYFF,
360 86411.33*cm*RAYFF, 81366.79*cm*RAYFF, 76546.42*cm*RAYFF,
361 71943.46*cm*RAYFF, 67551.29*cm*RAYFF, 63363.36*cm*RAYFF,
362 59373.25*cm*RAYFF, 55574.61*cm*RAYFF, 51961.24*cm*RAYFF,
363 48527.00*cm*RAYFF, 45265.87*cm*RAYFF, 42171.94*cm*RAYFF,
364 39239.39*cm*RAYFF, 36462.50*cm*RAYFF, 33835.68*cm*RAYFF,
365 31353.41*cm*RAYFF, 29010.30*cm*RAYFF, 26801.03*cm*RAYFF,
366 24720.42*cm*RAYFF, 22763.36*cm*RAYFF, 20924.88*cm*RAYFF,
367 19200.07*cm*RAYFF, 17584.16*cm*RAYFF, 16072.45*cm*RAYFF,
368 14660.38*cm*RAYFF, 13343.46*cm*RAYFF, 12117.33*cm*RAYFF,
369 10977.70*cm*RAYFF, 9920.416*cm*RAYFF, 8941.407*cm*RAYFF,
370 8036.711*cm*RAYFF, 7202.470*cm*RAYFF, 6434.927*cm*RAYFF,
371 5730.429*cm*RAYFF, 5085.425*cm*RAYFF, 4496.467*cm*RAYFF,
372 3960.210*cm*RAYFF, 3473.413*cm*RAYFF, 3032.937*cm*RAYFF,
373 2635.746*cm*RAYFF, 2278.907*cm*RAYFF, 1959.588*cm*RAYFF,
374 1675.064*cm*RAYFF, 1422.710*cm*RAYFF, 1200.004*cm*RAYFF,
375 1004.528*cm*RAYFF, 833.9666*cm*RAYFF, 686.1063*cm*RAYFF
376 };
377
378 // SDC: new parameters for scintillation
379
380 G4double SCINTILFAST[NUMENTRIES_general] =
381 { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
382 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
383 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
384 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
385 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
386 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
387 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
388 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
389 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
390 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
391
392
393 G4double SCINTILSLOW[NUMENTRIES_general] =
394 { 0 , 0 , 0 , 0 , 0 , 0 , 0,
395 0 , 0 , 0 , 0 , 0 , 0 ,
396 0 , 0 , 0 , 0 , 0 , 0 ,
397 0.505 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 ,
398 6.5 , 7.5 , 8.5 , 8.5 , 7.5 , 6.5 ,
399 5 , 3.5 , 2.5 , 1.5 , 0.505 , 0.505 ,
400 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 ,
401 7.5 , 8.5 , 8.5 , 7.5 , 6.5 , 5.5 ,
402 4.5 , 0 , 0 , 0 , 0 , 0 ,
403 0 , 0 , 0 , 0 , 0 };
404
405 G4MaterialPropertiesTable *myMPT1 = new G4MaterialPropertiesTable();
406 myMPT1->AddProperty("RINDEX", ENERGY_water, RINDEX1, NUMENTRIES_general);
407 myMPT1->AddProperty("ABSLENGTH",ENERGY_water, ABSORPTION_water, NUMENTRIES_general);
408
409 myMPT1->AddProperty("FASTCOMPONENT",ENERGY_water,SCINTILFAST,NUMENTRIES_general);
410 myMPT1->AddProperty("SLOWCOMPONENT",ENERGY_water,SCINTILSLOW,NUMENTRIES_general);
411
412 // M Fechner: new, don't let G4 compute it.
413 myMPT1->AddProperty("RAYLEIGH",ENERGY_water,RAYLEIGH_water,NUMENTRIES_general);
414
415 //SDC : scintillation part if needed (G4 exemple ???)
416 myMPT1->AddConstProperty("SCINTILLATIONYIELD",50./MeV);
417 myMPT1->AddConstProperty("RESOLUTIONSCALE",1.0);
418 myMPT1->AddConstProperty("FASTTIMECONSTANT", 1.*ns);
419 myMPT1->AddConstProperty("SLOWTIMECONSTANT",10.*ns);
420 myMPT1->AddConstProperty("YIELDRATIO",0.8);
421
422
423 Water->SetMaterialPropertiesTable(myMPT1);
424
425 // G4cout << "ConstructMaterial: Dump Water properties" << G4endl;
426 // myMPT1->DumpTable();
427
428
429 //--------------
430 //------------ Air
431 //--------------
432 G4double RINDEX_air[NUMENTRIES_general] =
433 { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
434 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
435 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
436 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
437 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
438 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
439 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
440 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
441 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
442 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
443
444 //utter fiction at this stage, does not matter
445 G4double RAYLEIGH_air[NUMENTRIES_general] =
446 { 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
447 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
448 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
449 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
450 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
451 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
452 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
453 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
454 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,
455 0.001*m,0.001*m,0.001*m,0.001*m,0.001*m,0.001*m};
456
457 G4double ABSORPTION_air[NUMENTRIES_general] =
458 { 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
459 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
460 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
461 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
462 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
463 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
464 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
465 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm, 1.0e-9*cm,
466 1.0e-9*cm, 1.0e-9*cm,1.0e-9*cm, 1.0e-9*cm};
467
468
469 G4MaterialPropertiesTable *myMPT2 = new G4MaterialPropertiesTable();
470 myMPT2->AddProperty("RINDEX", ENERGY_water, RINDEX_air, NUMENTRIES_general);
471 myMPT2->AddProperty("ABSLENGTH", ENERGY_water, ABSORPTION_air, NUMENTRIES_general);
472 myMPT2->AddProperty("RAYLEIGH",ENERGY_water, RAYLEIGH_air, NUMENTRIES_general);
473 Air->SetMaterialPropertiesTable(myMPT2);
474
475
476 //--------------
477 //---------------- Tyvek
478 //--------------
479 //JEC +SDC 9/2/07: introduce the Auger simulation of the liner
480
481 const G4int NUMENTRIES_tyvek = 30;
482
483 G4double ENERGY_tyvek[NUMENTRIES_tyvek] = {
484 2.08*eV , 2.16*eV , 2.19*eV , 2.23*eV , 2.27*eV , 2.32*eV , 2.36*eV , 2.41*eV , 2.46*eV , 2.50*eV ,
485 2.56*eV , 2.61*eV , 2.67*eV , 2.72*eV , 2.79*eV , 2.85*eV , 2.92*eV , 2.99*eV , 3.06*eV , 3.14*eV ,
486 3.22*eV , 3.31*eV , 3.4*eV , 3.49*eV , 3.59*eV , 3.7*eV , 3.81*eV , 3.94*eV , 4.07*eV , 4.20*eV };
487
488// //JEC 22/2/07 : This Absorbtion may be not useful ??? To be fixed
489// G4double ABSORPTION_Tyvek[NUMENTRIES_tyvek] =
490// { 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m ,
491// 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m ,
492// 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m , 10.0*m };
493
494// //JEC 22/2/07 ad hoc to make non 0 RINDEX in the OpBoundary process
495// //see Web http://www.mfa.org/_cameo/frontend/material_print.asp?name=polyethylene&type=description
496// G4double RINDEX_Tyvek[NUMENTRIES_tyvek] =
497// { 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 ,
498// 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 ,
499// 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 , 1.52 };
500
501// G4MaterialPropertiesTable *myMPT4 = new G4MaterialPropertiesTable();
502// myMPT4->AddProperty("ABSLENGTH", ENERGY_tyvek, ABSORPTION_Tyvek, NUMENTRIES_tyvek);
503// myMPT4->AddProperty("RINDEX" , ENERGY_tyvek, RINDEX_Tyvek , NUMENTRIES_tyvek);
504
505// Tyvek->SetMaterialPropertiesTable(myMPT4);
506
507
508 //--------------
509 //--------- Glass
510 //--------------
511
512// G4double RINDEX_glass[NUMENTRIES_general] =
513// { 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
514// 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
515// 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
516// 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
517// 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
518// 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
519// 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
520// 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
521// 1.600, 1.600 };
522
523 // JEC 22/2/07 test: 1.6 a 2. for a tracking test...
524 G4double RINDEX_glass[NUMENTRIES_general] =
525 { 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
526 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
527 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
528 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
529 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
530 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
531 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
532 1.600, 1.600, 1.600, 1.600, 1.600, 1.600, 1.600,
533 1.600, 1.600 };
534
535 //JEC: To do adapt to the # of entries and do not include quantum eff. of a PMTs... as in MEMPHYS case 9/2/07
536// G4double ABSORPTION_glass[NUMENTRIES] =
537// { 100.0*cm, 110.0*cm, 120.0*cm, 130.0*cm, 140.0*cm, 150.0*cm, 160.0*cm,
538// 165.0*cm, 170.0*cm, 175.0*cm, 180.0*cm, 185.0*cm, 190.0*cm, 195.0*cm,
539// 200.0*cm, 200.0*cm, 200.0*cm, 200.0*cm, 200.0*cm, 195.0*cm, 190.0*cm,
540// 185.0*cm, 180.0*cm, 175.0*cm, 170.0*cm, 160.0*cm, 150.0*cm, 140.0*cm,
541// 130.0*cm, 120.0*cm, 110.0*cm, 100.0*cm };
542
543 //JEC dummy values to be able to compile !!! 14/2/07
544 G4double ABSORPTION_glass[NUMENTRIES_general] =
545 { 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
546 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
547 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
548 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
549 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
550 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
551 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
552 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm, 150.0*cm,
553 150.0*cm, 150.0*cm,150.0*cm, 150.0*cm};
554
555
556
557 G4MaterialPropertiesTable *myMPT5 = new G4MaterialPropertiesTable();
558 myMPT5->AddProperty("RINDEX", ENERGY_water, RINDEX_glass, NUMENTRIES_general);
559 myMPT5->AddProperty("ABSLENGTH",ENERGY_water, ABSORPTION_glass, NUMENTRIES_general);
560 Glass->SetMaterialPropertiesTable(myMPT5);
561
562 // ------------- Surfaces --------------
563
564 //--------------------
565 // Water - Tyvek
566 //--------------------
567 //JEC 9/2/07: From the BackSheet Simulation in MEMPHYS/SK
568 //JEC + SDC: input properties from Auger
569
570 OpWaterTyvekSurface = new G4OpticalSurface("WaterTyvekSurface");
571 OpWaterTyvekSurface->SetType(dielectric_dielectric);
572 OpWaterTyvekSurface->SetModel(unified);
573 //OpWaterTyvekSurface->SetFinish(groundbackpainted);
574 //JEC why not groundfrontpainted instead? 22/2/07
575 OpWaterTyvekSurface->SetFinish(groundfrontpainted);
576 OpWaterTyvekSurface->SetSigmaAlpha( 0.17 );
577
578 //JEC + SDC 9/2/07 : adapted from Auger
579
580// const G4int NUMENTRIES_water_tyvek = 3;
581// G4double PP[NUMENTRIES_water_tyvek] = { 2.08*eV, 3.0*eV, 4.2*eV };
582 //JEC 23/2/07 no more RINDEX useful for groundfrontpainted surface
583 //G4double RINDEX2_tyvek[NUMENTRIES_water_tyvek] = { 0.0 , 0.0 , 0.0 }; //JEC ????
584
585 //JEC 23/2/07 extend to the entire energy domain of the REFLECTIVITY
586 //G4double SPECULARLOBECONSTANT[NUMENTRIES_water_tyvek] = { 0.2 , 0.2 , 0.2 };
587 G4double SPECULARLOBECONSTANT_tyvek[NUMENTRIES_tyvek] =
588 { 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 ,
589 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 ,
590 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 };
591
592
593 //JEC 23/2/07 by default = 0 so unuseful
594 //G4double SPECULARSPIKECONSTANT[NUMENTRIES_water_tyvek] = { 0.0 , 0.0 , 0.0 };
595 //G4double BACKSCATTERCONSTANT[NUMENTRIES_water_tyvek] = { 0.0 , 0.0 , 0.0 };
596 //JEC + SDC 9/2/07 adapted from Auger
597
598 G4double REFLECTIVITY_tyvek[NUMENTRIES_tyvek] =
599 { 0.968816 , 0.968427 , 0.967940 , 0.967357 , 0.967065 , 0.966870 , 0.966870 , 0.967162 , 0.967649 , 0.968524 ,
600 0.969497 , 0.970568 , 0.971541 , 0.972319 , 0.973000 , 0.973000 , 0.972319 , 0.970762 , 0.967940 , 0.963562 ,
601 0.957432 , 0.948967 , 0.938167 , 0.924350 , 0.908198 , 0.886208 , 0.861008 , 0.831039 , 0.795719 , 0.754561 };
602
603
604 G4MaterialPropertiesTable *myST1 = new G4MaterialPropertiesTable();
605 //myST1->AddProperty("RINDEX", ENERGY_tyvek, RINDEX2_tyvek, NUMENTRIES_water_tyvek);
606 // myST1->AddProperty("SPECULARLOBECONSTANT", PP, SPECULARLOBECONSTANT, NUMENTRIES_water_tyvek);
607 myST1->AddProperty("SPECULARLOBECONSTANT", ENERGY_tyvek, SPECULARLOBECONSTANT_tyvek, NUMENTRIES_tyvek);
608 //myST1->AddProperty("SPECULARSPIKECONSTANT", PP, SPECULARSPIKECONSTANT, NUMENTRIES_water_tyvek);
609 //myST1->AddProperty("BACKSCATTERCONSTANT", PP, BACKSCATTERCONSTANT, NUMENTRIES_water_tyvek);
610 myST1->AddProperty("REFLECTIVITY", ENERGY_tyvek, REFLECTIVITY_tyvek, NUMENTRIES_tyvek);
611 OpWaterTyvekSurface->SetMaterialPropertiesTable(myST1);
612
613
614 //------------------
615 //Tyvek - Glass
616 //------------------
617 //JEC 13/2/07 this is a stopping surface as the photocathode in MEMPHYS
618 // reflectivity = 0 && efficiency = 100% => absorption
619 //JEC 23/2/07 certainly unuseful since the water-tyvek is groundfrontpainted it do reflection or absorption so
620 // no optical photon can penetrate the Tyvek sheet. To be Fixed
621
622 OpTyvekGlassSurface = new G4OpticalSurface("TyvekGlassSurface");
623 OpTyvekGlassSurface->SetType(dielectric_metal); //as for LXe G4 example
624 OpTyvekGlassSurface->SetModel(glisur); //as for LXe G4 example
625 OpTyvekGlassSurface->SetFinish(polished);
626 const G4int NUM = 2;
627 G4double PP_tyvekglass[NUM] = { 1.0*eV, 5.0*eV };
628 G4double REFLECTIVITY_tyvekglass[NUM] = { 0.0, 0.0 };
629 G4double EFFICIENCY_tyvekglass[NUM] = { 1.0, 1.0 };
630
631 G4MaterialPropertiesTable *myST2 = new G4MaterialPropertiesTable();
632 myST2->AddProperty("REFLECTIVITY", PP_tyvekglass, REFLECTIVITY_tyvekglass, NUM);
633 myST2->AddProperty("EFFICIENCY", PP_tyvekglass, EFFICIENCY_tyvekglass, NUM);
634 OpTyvekGlassSurface->SetMaterialPropertiesTable(myST2);
635
636// //------------------
637// //Water - Air
638// //------------------
639
640// //JEC: 9/2/07 certainly from a G4 novice exercice ==> should be clarified
641// OpWaterAirSurface = new G4OpticalSurface("WaterAirSurface");
642// OpWaterAirSurface->SetType(dielectric_dielectric);
643// OpWaterAirSurface->SetFinish(ground);
644// OpWaterAirSurface->SetModel(unified);
645
646// const G4int num_WaterAir = 2;
647// G4double Ephoton_WaterAir[num_WaterAir] = {2.038*eV, 4.144*eV};
648// G4double RefractiveIndex_WaterAir[num_WaterAir] = {1.35, 1.40};
649// G4double SpecularLobe_WaterAir[num_WaterAir] = {0.3, 0.3};
650// G4double SpecularSpike_WaterAir[num_WaterAir] = {0.2, 0.2};
651// G4double Backscatter_WaterAir[num_WaterAir] = {0.2, 0.2};
652
653// G4MaterialPropertiesTable* myST11 = new G4MaterialPropertiesTable();
654
655// myST11->AddProperty("RINDEX", Ephoton_WaterAir, RefractiveIndex_WaterAir, num_WaterAir);
656// myST11->AddProperty("SPECULARLOBECONSTANT", Ephoton_WaterAir, SpecularLobe_WaterAir, num_WaterAir);
657// myST11->AddProperty("SPECULARSPIKECONSTANT", Ephoton_WaterAir, SpecularSpike_WaterAir, num_WaterAir);
658// myST11->AddProperty("BACKSCATTERCONSTANT", Ephoton_WaterAir, Backscatter_WaterAir, num_WaterAir);
659
660// OpWaterAirSurface->SetMaterialPropertiesTable(myST11);
661}//ConstructMaterials
662
663//-----------------------------------------------------------------------------------------------
664
665void ELYSE::DetectorConstruction::SetWaterDimensions(G4ThreeVector dim){
666 water_x = dim[0];
667 water_y = dim[1];
668 water_z = dim[2];
669 updated = true;
670}//SetWaterDimensions
671
672//-----------------------------------------------------------------------------------------------
673void ELYSE::DetectorConstruction::SetTyvekThickness(G4double thick) {
674 tyvek_thickness = thick;
675 updated = true;
676}//SetTyvekThickness
677//-----------------------------------------------------------------------------------------------
678
679void ELYSE::DetectorConstruction::UpdateGeometry() {
680 // clean-up previous geometry
681 G4GeometryManager::GetInstance()->OpenGeometry();
682
683 G4PhysicalVolumeStore::GetInstance()->Clean();
684 G4LogicalVolumeStore::GetInstance()->Clean();
685 G4SolidStore::GetInstance()->Clean();
686 G4LogicalSkinSurface::CleanSurfaceTable();
687 G4LogicalBorderSurface::CleanSurfaceTable();
688
689 //define new one
690 G4RunManager::GetRunManager()->DefineWorldVolume(Construct());
691 G4RunManager::GetRunManager()->GeometryHasBeenModified();
692
693 updated=false;
694}
Note: See TracBrowser for help on using the repository browser.