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

Last change on this file since 632 was 294, checked in by campagne, 17 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.