WCSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
WCSimDetectorConfigs.cc
Go to the documentation of this file.
1 // -*- mode:c++; tab-width:4; -*-
3 #include "WCSimPMTObject.hh"
4 #include "globals.hh"
5 #include "G4SystemOfUnits.hh"
6 #include "G4PhysicalConstants.hh"
7 
8 /***********************************************************
9  *
10  * This file contains the setup functions for various
11  * detector configurations. These can be set up by
12  * default in WCSimDetectorConstruction.cc or called
13  * in mac files by adding them to WCSimDetectorMessenger.cc.
14  *
15  * Sourcefile for the WCSimDetectorConstruction class
16  *
17  ***********************************************************/
18 
19 
20 
22 {
23  WCDetectorName = "SuperK";
24  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
26 
27  WCPMTName = PMT->GetPMTName();
29  WCPMTRadius = PMT->GetRadius();
30  WCIDDiameter = 33.6815*m; //16.900*2*cos(2*pi*rad/75)*m; //inner detector diameter
31  WCIDHeight = 36.200*m; //"" "" height
32  WCBarrelPMTOffset = 0.0715*m; //offset from vertical
34  WCBarrelNRings = 17.;
37  WCCapPMTSpacing = 0.707*m; // distance between centers of top and bottom pmts
38  WCCapEdgeLimit = 16.9*m;
39  WCBlackSheetThickness = 2.0*cm;
40  WCAddGd = false;
41 }
42 
43 
44 // Note: the actual coverage is 20.27%
46 {
47  WCDetectorName = "SuperK_20inchPMT_20perCent";
48  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
50  WCPMTName = PMT->GetPMTName();
52  WCPMTRadius = PMT->GetRadius();
53  WCIDDiameter = 33.6815*m; //16.900*2*cos(2*pi*rad/75)*m; //inner detector diameter
54  WCIDHeight = 36.200*m; //"" "" height
55  WCBarrelPMTOffset = 0.0715*m; //offset from vertical
58  WCPMTPercentCoverage = 20.27;
62  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
63  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
64  WCBlackSheetThickness = 2.0*cm;
65  WCAddGd = false;
66 }
67 
68 
69 // Note: the actual coverage is 20.27%
71 {
72  WCDetectorName = "SuperK_20inchBandL_20perCent";
73  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
74  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine20inchHQE", WCIDCollectionName);
75  WCPMTName = PMT->GetPMTName();
77  WCPMTRadius = PMT->GetRadius();
78  WCIDDiameter = 33.6815*m; //16.900*2*cos(2*pi*rad/75)*m; //inner detector diameter
79  WCIDHeight = 36.200*m; //"" "" height
80  WCBarrelPMTOffset = 0.0715*m; //offset from vertical
83  WCPMTPercentCoverage = 20.27;
87  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
88  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
89  WCBlackSheetThickness = 2.0*cm;
90  WCAddGd = false;
91 }
92 
93 
94 // Note: the actual coverage is 14.59%
96 {
97  WCDetectorName = "SuperK_12inchBandL_15perCent";
98  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
99  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine12inchHQE", WCIDCollectionName);
100  WCPMTName = PMT->GetPMTName();
102  WCPMTRadius = PMT->GetRadius();
103  WCIDDiameter = 33.6815*m; //16.900*2*cos(2*pi*rad/75)*m; //inner detector diameter
104  WCIDHeight = 36.200*m; //"" "" height
105  WCBarrelPMTOffset = 0.0715*m; //offset from vertical
108  WCPMTPercentCoverage = 14.59;
112  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
113  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
114  WCBlackSheetThickness = 2.0*cm;
115  WCAddGd = false;
116 }
117 
118 
119 // Note: the actual coverage is 13.51%
121 {
122  WCDetectorName = "SuperK_20inchBandL_14perCent";
123  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
124  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine20inchHQE", WCIDCollectionName);
125  WCPMTName = PMT->GetPMTName();
127  WCPMTRadius = PMT->GetRadius();
128  WCIDDiameter = 33.6815*m; //16.900*2*cos(2*pi*rad/75)*m; //inner detector diameter
129  WCIDHeight = 36.200*m; //"" "" height
130  WCBarrelPMTOffset = 0.0715*m; //offset from vertical
133  WCPMTPercentCoverage = 13.51;
137  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
138  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
139  WCBlackSheetThickness = 2.0*cm;
140  WCAddGd = false;
141 }
142 
144 {
145  WCDetectorName = "Cylinder_60x74_20inchBandL_14perCent()";
146  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
147  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine20inchHQE", WCIDCollectionName);
148  WCPMTName = PMT->GetPMTName();
150  WCPMTRadius = PMT->GetRadius();
151  WCIDDiameter = 74.0*m;
152  WCIDHeight = 60.0*m;
153  WCBarrelPMTOffset = WCPMTRadius; //offset from vertical
156  WCPMTPercentCoverage = 13.51;
160  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
161  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
162  WCBlackSheetThickness = 2.0*cm;
163  WCAddGd = false;
164 }
165 
167 {
168  WCDetectorName = "Cylinder_60x74_20inchBandL_40perCent";
169  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
170  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine20inchHQE", WCIDCollectionName);
171  WCPMTName = PMT->GetPMTName();
173  WCPMTRadius = PMT->GetRadius();
174  WCIDDiameter = 74.0*m;
175  WCIDHeight = 60.0*m;
176  WCBarrelPMTOffset = WCPMTRadius; //offset from vertical
179  WCPMTPercentCoverage = 40.0;
183  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
184  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
185  WCBlackSheetThickness = 2.0*cm;
186  WCAddGd = false;
187 }
188 
190 {
191  WCDetectorName = "Cylinder_12inchHPD_15perCent";
192  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
193  // cylindrical detector with a height of 100m and a diameter of 69m
194  // with 12" HPD and 14.59% photocoverage
195  WCSimPMTObject * PMT = CreatePMTObject("HPD12inchHQE", WCIDCollectionName);
196  WCPMTName = PMT->GetPMTName();
198  WCPMTRadius = PMT->GetRadius();
199  WCIDDiameter = 69.0*m;
200  WCIDHeight = 100.0*m;
201  WCBarrelPMTOffset = WCPMTRadius; //offset from vertical
204  WCPMTPercentCoverage = 14.59;
208  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
209  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
210  WCBlackSheetThickness = 2.0*cm;
211  WCAddGd = false;
212 }
213 
215 {
216  WCDetectorName = "HyperK";
217  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
218  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine20inchHQE", WCIDCollectionName);
219  WCPMTName = PMT->GetPMTName();
221  WCPMTRadius = PMT->GetRadius();
222  WCIDDiameter = 70.8*m; // = 74m - 2*(60cm ID wall + 1m OD)
223  WCIDHeight = 54.8*m; // = 60m - 2*(60cm ID wall + 2m OD)
224  WCBarrelPMTOffset = WCPMTRadius; //offset from vertical
227  WCPMTPercentCoverage = 40.0;
231  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
232  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
233  WCBlackSheetThickness = 2.0*cm;
234  WCAddGd = false;
235 
236 }
237 
239 {
240  WCDetectorName = "HyperKWithOD";
241  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
242  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine20inchHQE", WCIDCollectionName);
243  WCPMTName = PMT->GetPMTName();
245  WCPMTRadius = PMT->GetRadius();
246  WCIDDiameter = 70.8*m; // = 74m - 2*(60cm ID wall + 1m OD)
247  WCIDHeight = 54.8*m; // = 60m - 2*(60cm ID wall + 2m OD)
248  WCBarrelPMTOffset = WCPMTRadius; //offset from vertical
251  WCPMTPercentCoverage = 40.0;
255  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
256  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
257  WCBlackSheetThickness = 2.0*cm;
258  WCAddGd = false;
259 
261  // Cave Parameters --- Beta version //
263  CaveTyvekSheetThickness = 1.0*mm; // Quite Standard I guess
264 
266  // OD Parameters --- Beta version //
268  isODConstructed = true;
269 
270  // OD Dimensions //
271  WCODLateralWaterDepth = 1.*m;
272  WCODHeightWaterDepth = 2.*m;
273  WCODDeadSpace = 600.*mm;
274  WCODTyvekSheetThickness = 1.0*mm; // Quite standard I guess
276 
277  // OD PMTs //
278  WCODCollectionName = WCDetectorName + "-glassFaceWCPMT_OD";
279  WCSimPMTObject *PMTOD = CreatePMTObject("PMT8inch", WCODCollectionName);
280  WCPMTODName = PMTOD->GetPMTName();
282  WCPMTODRadius = PMTOD->GetRadius();
283 
284  // OD Coverage on barrel side //
287 
288  // OD Coverage on caps //
289  WCPMTODPercentCoverage = 1.0; //default 1%
290  // NOTE : If you set WCPMTODperCellHorizontal=0 and WCPMTODperCellVertical=0,
291  // then method ComputeWCODPMT() inside ConstructCylinder will automatically compute
292  // the nb of PMTs to put on barrel side according to WCPMTODPercentCoverage
293 
294  // Shift between PMTs inside a cell //
295  WCODPMTShift = 0.*cm;
296 
297  // OD caps //
298  // WCODCapPMTSpacing = 100*cm;
299  WCODCapPMTSpacing = (pi*WCIDDiameter/(round(WCIDDiameter*sqrt(pi*WCPMTODPercentCoverage)/(10.0*WCPMTODRadius))));
300  WCODCapEdgeLimit = WCIDDiameter/2.0 - WCPMTODRadius;
301 
302 }
303 
305 {
306  WCDetectorName = "HyperK_20perCent";
307  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
308  WCSimPMTObject * PMT = CreatePMTObject("BoxandLine20inchHQE", WCIDCollectionName);
309  WCPMTName = PMT->GetPMTName();
311  WCPMTRadius = PMT->GetRadius();
312  WCIDDiameter = 70.8*m; // = 74m - 2*(60cm ID wall + 1m OD)
313  WCIDHeight = 54.8*m; // = 60m - 2*(60cm ID wall + 2m OD)
314  WCBarrelPMTOffset = WCPMTRadius; //offset from vertical
317  WCPMTPercentCoverage = 20.0;
321  WCCapPMTSpacing = (pi*WCIDDiameter/WCBarrelNumPMTHorizontal); // distance between centers of top and bottom pmts
322  WCCapEdgeLimit = WCIDDiameter/2.0 - WCPMTRadius;
323  WCBlackSheetThickness = 2.0*cm;
324  WCAddGd = false;
325 }
326 
328 {
329  WCDetectorName = "EggShapedHyperK";
330  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
331  WCODCollectionName = WCDetectorName + "-glassFaceWCPMT_OD";
332  WCSimPMTObject * PMT = CreatePMTObject("PMT20inch", WCIDCollectionName);
333  WCSimPMTObject * outerPMT = CreatePMTObject("PMT8inch", WCODCollectionName);
334  WCPMTName = PMT->GetPMTName();
336  innerPMT_Radius = PMT->GetRadius();
337  waterTank_TopR = 32000.*mm;
338  waterTank_BotR = 30000.*mm;
339  waterTank_Height = 48000.*mm;
340  waterTank_UpperA = 8000.*mm;
341  waterTank_LowerB = 6000.*mm;
342  waterTank_Length = 49500.*mm;
343 
344  innerPMT_TopR = 29095.*mm;
345  innerPMT_BotR = 27095.*mm;
346  innerPMT_TopW = 12038.*mm;
347  innerPMT_BotW = 11004.*mm;
348  innerPMT_Height = 21095.*mm;
349  innerPMT_Rpitch = 990.*mm;
350  innerPMT_Apitch = 990.*mm;
351 
352  outerPMT_Name = outerPMT->GetPMTName();
353  outerPMT_Expose = outerPMT->GetExposeHeight();
354  outerPMT_Radius = outerPMT->GetRadius();
355  outerPMT_TopR = innerPMT_TopR + 900.*mm;
356  outerPMT_BotR = innerPMT_BotR + 900.*mm;
357  outerPMT_TopW = 12394.*mm;
358  outerPMT_BotW = 11319.*mm;
359  outerPMT_Height = innerPMT_Height + 900.*mm;
363 
364  blackSheetThickness = 20.*mm;
365 
366  innerPMT_TopN = 0;
367  innerPMT_BotN = 0;
368 
369  isEggShapedHyperK = true; // Tell DetectorConstruction to build egg-shaped HK geometry
370 
372 }
373 
375 {
376  WCDetectorName = "EggShapedHyperK_withHPD";
377  WCIDCollectionName = WCDetectorName +"-glassFaceWCPMT";
378  WCODCollectionName = WCDetectorName + "-glassFaceWCPMT_OD";
379  WCSimPMTObject * PMT = CreatePMTObject("HPD20inchHQE", WCIDCollectionName);
380  WCSimPMTObject * outerPMT = CreatePMTObject("PMT8inch", WCODCollectionName);
381  WCPMTName = PMT->GetPMTName();
383  innerPMT_Radius = PMT->GetRadius();
384  waterTank_TopR = 32000.*mm;
385  waterTank_BotR = 30000.*mm;
386  waterTank_Height = 48000.*mm;
387  waterTank_UpperA = 8000.*mm;
388  waterTank_LowerB = 6000.*mm;
389  waterTank_Length = 49500.*mm;
390 
391  innerPMT_TopR = 29095.*mm;
392  innerPMT_BotR = 27095.*mm;
393  innerPMT_TopW = 12038.*mm;
394  innerPMT_BotW = 11004.*mm;
395  innerPMT_Height = 21095.*mm;
396  innerPMT_Rpitch = 990.*mm;
397  innerPMT_Apitch = 990.*mm;
398 
399 
400  outerPMT_Expose = outerPMT->GetExposeHeight();
401  outerPMT_Radius = outerPMT->GetRadius();
402  outerPMT_TopR = innerPMT_TopR + 900.*mm;
403  outerPMT_BotR = innerPMT_BotR + 900.*mm;
404  outerPMT_TopW = 12394.*mm;
405  outerPMT_BotW = 11319.*mm;
406  outerPMT_Height = innerPMT_Height + 900.*mm;
410 
411  blackSheetThickness = 20.*mm;
412 
413  innerPMT_TopN = 0;
414  innerPMT_BotN = 0;
415 
416  isEggShapedHyperK = true; // Tell DetectorConstruction to build egg-shaped HK geometry
417 
419 }
420 
421 
428 {
430  WCPosition = 0.;
432 }
433 
434 
435 
WCSimPMTObject * CreatePMTObject(G4String, G4String)
virtual G4double GetExposeHeight()=0
virtual G4double GetRadius()=0
virtual G4String GetPMTName()=0