BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_GEMS_Run8_detailed_aligned.C
Go to the documentation of this file.
1/*
2 * Baranov D.
3 * 14.08.2020 (created)
4 * 18.01.2021 (updated)
5 * 02.03.2021 (updated): radius of hole in active zone (4.0 -> 6.0 cm)
6 * 12.12.2022 (updated): small GEM added
7 * Use this macro to create ROOT geometry for the FutureConfig2020 GEM configuration
8 * with passive volumes (frames, al. cable supports, ...)
9 *
10 */
11
12// Set Parameters of GEMS -------------------------------------------------------
13const Int_t NStations = 8; // stations in the detector
14const Int_t NMaxModules = 4; // max. number of modules in a station
15
16//(X-Y-Z)Positions of stations (sensitive volumes)
17const Double_t XStationPositions[NStations] = {+1.474 /*0*/, +2.614 /*1*/, +3.393 /*2*/, +4.699 /*3*/,
18 +6.337 /*4*/, +8.189 /*5*/, +9.893 /*6*/, +50.494 /*7*/};
19const Double_t YStationPositions[NStations] = {-0.086 /*0*/, -0.107 /*1*/, +0.003 /*2*/, -0.097 /*3*/,
20 -0.003 /*4*/, +0.0245 /*5*/, +0.022 /*6*/, -0.186 /*7*/};
21const Double_t ZStationPositions[NStations] = {+60.76 /*0*/, +92.242 /*1*/, +123.512 /*2*/, +154.692 /*3*/,
22 +185.989 /*4*/, +217.287 /*5*/, +248.401 /*6*/, +792.532 /*7*/};
23
24//(X-Y-Z)Shifts of modules in each station
26 {163.2 * 0.25, -163.2 * 0.25, 163.2 * 0.25, -163.2 * 0.25}, // st. 0
27 {163.2 * 0.25, -163.2 * 0.25, 163.2 * 0.25, -163.2 * 0.25}, // st. 1
28 {163.2 * 0.25, -163.2 * 0.25, 163.2 * 0.25, -163.2 * 0.25}, // st. 2
29 {163.2 * 0.25, -163.2 * 0.25, 163.2 * 0.25, -163.2 * 0.25}, // st. 3
30 {163.2 * 0.25, -163.2 * 0.25, 163.2 * 0.25, -163.2 * 0.25}, // st. 4
31 {163.2 * 0.25, -163.2 * 0.25, 163.2 * 0.25, -163.2 * 0.25}, // st. 5
32 {163.2 * 0.25, -163.2 * 0.25, 163.2 * 0.25, -163.2 * 0.25}, // st. 6
33 {0.0} // st. 7
34};
36 {+22.5, +22.5, -19.5, -19.5}, // st. 0
37 {+22.5, +22.5, -19.5, -19.5}, // st. 1
38 {+22.5, +22.5, -19.5, -19.5}, // st. 2
39 {+22.5, +22.5, -19.5, -19.5}, // st. 3
40 {+22.5, +22.5, -19.5, -19.5}, // st. 4
41 {+22.5, +22.5, -19.5, -19.5}, // st. 5
42 {+22.5, +22.5, -19.5, -19.5}, // st. 6
43 {0.0} // st. 7
44};
46 {+4.1, +4.1, 0.0, 0.0}, // st. 0
47 {0.0, 0.0, +4.1, +4.1}, // st. 1
48 {+4.1, +4.1, 0.0, 0.0}, // st. 2
49 {0.0, 0.0, +4.1, +4.1}, // st. 3
50 {+4.1, +4.1, 0.0, 0.0}, // st. 4
51 {0.0, 0.0, +4.1, +4.1}, // st. 5
52 {+4.1, +4.1, 0.0, 0.0}, // st. 6
53 {0.0} // st. 7
54};
55
56// alignment corrections --------------------------------------------------------
58 {2.28613e-01, 2.34606e-01, 3.70449e-01, 4.39267e-01, 2.67664e-01, 2.84859e-01, 3.41005e-01, 4.16753e-01},
59 {3.17030e-01, 2.45618e-01, 4.29878e-01, 4.29169e-01, 2.60443e-01, 1.79925e-01, 3.76252e-01, 3.71674e-01},
60 {1.25543e-01, 1.37935e-01, 2.77096e-01, 3.51704e-01, 2.16012e-01, 2.12139e-01, 2.88912e-01, 3.57699e-01},
61 {3.17647e-01, 2.36295e-01, 3.75431e-01, 3.80575e-01, 1.68884e-01, 8.80524e-02, 2.51805e-01, 2.56513e-01},
62 {-3.01883e-02, -2.87880e-02, 1.09744e-01, 1.90429e-01, 1.78162e-02, 1.32671e-02, 9.23760e-02, 1.67779e-01},
63 {1.43966e-01, 5.53303e-02, 2.48555e-01, 2.49193e-01, 3.88544e-02, -3.31393e-02, 7.96085e-02, 7.41273e-02},
64 {0., -5.63645e-04, 0.05, 8.74027e-04, 0., 3.60763e-03, 0.074, 1.49797e-01}};
66 {-2.40830e-01, -2.27117e-01, -4.41393e-01, -2.98662e-01, -1.47376e-01, -5.64919e-01, 3.60250e-02, -2.15290e-01},
67 {-4.83443e-01, -3.63780e-01, -3.52015e-01, -3.36903e-01, -1.14008e-01, -3.49136e-01, -2.14579e-01, -6.23524e-01},
68 {-1.91062e-01, -2.04515e-01, -3.79972e-01, -2.57092e-01, -1.01400e-01, -5.18137e-01, 5.39497e-02, -1.85679e-01},
69 {-4.55871e-01, -3.48696e-01, -2.33191e-01, -2.40044e-01, -5.37329e-02, -3.00596e-01, -1.98740e-01, -6.04983e-01},
70 {-2.31062e-01, -2.58276e-01, -4.03759e-01, -2.70196e-01, -8.53213e-02, -5.14891e-01, 3.15495e-02, -2.08464e-01},
71 {-2.58821e-01, -1.58621e-01, -9.84743e-02, -1.05756e-01, 1.54258e-01, -1.04935e-01, 1.83280e-02, -3.86622e-01},
72 {0., -5.86937e-03, -0.23, -1.45342e-01, 0., -3.98117e-01, 0.15, -1.04839e-01}};
73
75 {StsDX[0][0], StsDX[0][2], StsDX[0][4], StsDX[0][6]}, // st. 0
76 {StsDX[1][0], StsDX[1][2], StsDX[1][4], StsDX[1][6]}, // st. 1
77 {StsDX[2][0], StsDX[2][2], StsDX[2][4], StsDX[2][6]}, // st. 2
78 {StsDX[3][0], StsDX[3][2], StsDX[3][4], StsDX[3][6]}, // st. 3
79 {StsDX[4][0], StsDX[4][2], StsDX[4][4], StsDX[4][6]}, // st. 4
80 {StsDX[5][0], StsDX[5][2], StsDX[5][4], StsDX[5][6]}, // st. 5
81 {StsDX[6][0], StsDX[6][2], StsDX[6][4], StsDX[6][6]}, // st. 6
82 {0.0} // st. 7
83};
84
86 {StsDY[0][0], StsDY[0][2], StsDY[0][4], StsDY[0][6]}, // st. 0
87 {StsDY[1][0], StsDY[1][2], StsDY[1][4], StsDY[1][6]}, // st. 1
88 {StsDY[2][0], StsDY[2][2], StsDY[2][4], StsDY[2][6]}, // st. 2
89 {StsDY[3][0], StsDY[3][2], StsDY[3][4], StsDY[3][6]}, // st. 3
90 {StsDY[4][0], StsDY[4][2], StsDY[4][4], StsDY[4][6]}, // st. 4
91 {StsDY[5][0], StsDY[5][2], StsDY[5][4], StsDY[5][6]}, // st. 5
92 {StsDY[6][0], StsDY[6][2], StsDY[6][4], StsDY[6][6]}, // st. 6
93 {0.0} // st. 7
94};
95
97 {0.243654, 0.250775, 0.173749, 0.161366}, // st. 0
98 {-0.143876, -0.150758, 0.109959, 0.156433}, // st. 1
99 {-0.110145, -0.165981, -0.213889, -0.229543}, // st. 2
100 {0.103517, 0.036342, 0.086135, 0.0941369}, // st. 3
101 {-0.037648, -0.0941807, -0.180758, -0.176327}, // st. 4
102 {-0.0674491, -0.0367844, -0.0972473, -0.0584354}, // st. 5
103 {0, 0, 0, 0}, // st. 6
104 {0.0} // st. 7
105};
106//------------------------------------------------------------------------------
107
108/*
109 * Basic station:
110 *
111 * -------------------- --------------------
112 * | | |
113 * | module 0 | module 1 | ^ beam direction (Z)
114 * | | | /
115 * | ------------|-------------- | /
116 * | / | / | /
117 * | / | / |/
118 * -----------------------------------------
119 * | \ | \ |
120 * | \ | \ |
121 * | \___________|______________\ |
122 * | | |
123 * | | |
124 * | module 3 | module 4 |
125 * -----------------------------------------
126 *
127 */
128
129// rotations of stations around y-axis by 180 deg.
130const Bool_t YStationRotations[NStations] = {true /*0*/, false /*1*/, true /*2*/, false /*3*/,
131 true /*4*/, false /*5*/, true /*6*/, false /*7*/};
132
133// rotations of stations around x-axis by 180 deg.
134const Bool_t XStationRotations[NStations] = {false /*0*/, false /*1*/, false /*2*/, false /*3*/,
135 false /*4*/, false /*5*/, false /*6*/, false /*7*/};
136
137// GEM plane sizes (66x41 type) -------------------------------------------------
141
145//------------------------------------------------------------------------------
146
147// GEM plane sizes (163x45 type) ------------------------------------------------
148const Double_t XModuleSize_Station163x45 = 163.2 * 0.5; // 81.6
150const Double_t ZModuleSize_Station163x45 = 0.9; // sensitive volume
151const Double_t ZGEMSize_Station163x45 = 4.1; // common thickness of GEM (including sens. vol)
152
156//------------------------------------------------------------------------------
157
158// GEM plane sizes (163x39 type) ------------------------------------------------
159const Double_t XModuleSize_Station163x39 = 163.2 * 0.5; // 81.6
161const Double_t ZModuleSize_Station163x39 = 0.9; // sensitive volume
162const Double_t ZGEMSize_Station163x39 = 4.1; // common thickness of GEM (including sens. vol)
163
167//------------------------------------------------------------------------------
168
169// GEM plane sizes (10x10 type) -------------------------------------------------
172const Double_t ZModuleSize_Station10x10 = 0.9; // sensitive volume
173const Double_t ZGEMSize_Station10x10 = 4.1; // common thickness of GEM (including sens. vol)
174
178//------------------------------------------------------------------------------
179
180// GeoManager
182
183// media
198
199class FairGeoMedia;
200class FairGeoBuilder;
201
202TGeoVolume* CreateStation(TString station_name);
203TGeoVolume* CreateModule_Station66x41(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize);
204
207 Double_t xsize,
208 Double_t ysize,
209 Double_t zsize,
210 Double_t hole_radius);
213 Double_t dx,
214 Double_t dy,
215 Double_t dz,
216 Double_t hole_radius);
218
220 Double_t xsize,
221 Double_t ysize,
222 Double_t zsize,
223 Double_t hole_radius);
226 Double_t dx,
227 Double_t dy,
228 Double_t dz,
229 Double_t hole_radius);
231
232TGeoVolume* CreateModule_Station10x10(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize);
233
234void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
235{
236
237 // air medium
238 FairGeoMedium* mAir = geoMedia->getMedium("air");
239 if (!mAir)
240 Fatal("Main", "FairMedium air not found");
241 geoBuild->createMedium(mAir);
242 pMedAir = gGeoManager->GetMedium("air");
243 if (!pMedAir)
244 Fatal("Main", "Medium air not found");
245
246 // carbon medium
247 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
248 if (!mCarbon)
249 Fatal("Main", "FairMedium carbon not found");
250 geoBuild->createMedium(mCarbon);
251 pMedCarbon = gGeoManager->GetMedium("carbon");
252 if (!pMedCarbon)
253 Fatal("Main", "Medium carbon not found");
254
255 // fiberglass medium
256 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
257 if (!mFiberGlass)
258 Fatal("Main", "FairMedium fiberglass not found");
259 geoBuild->createMedium(mFiberGlass);
260 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
261 if (!pMedFiberGlass)
262 Fatal("Main", "Medium fiberglass not found");
263
264 // copper medium
265 FairGeoMedium* mCopper = geoMedia->getMedium("copper");
266 if (!mCopper)
267 Fatal("Main", "FairMedium copper not found");
268 geoBuild->createMedium(mCopper);
269 pMedCopper = gGeoManager->GetMedium("copper");
270 if (!pMedCopper)
271 Fatal("Main", "Medium copper not found");
272
273 // arco27020 medium
274 FairGeoMedium* mArCO27030 = geoMedia->getMedium("arco27030");
275 if (!mArCO27030)
276 Fatal("Main", "FairMedium arco27030 not found");
277 geoBuild->createMedium(mArCO27030);
278 pMedArCO27030 = gGeoManager->GetMedium("arco27030");
279 if (!pMedArCO27030)
280 Fatal("Main", "Medium arco27030 not found");
281
282 // ArC4H10_80_20 medium
283 FairGeoMedium* mArC4H10_80_20 = geoMedia->getMedium("ArC4H10_80_20");
284 if (!mArC4H10_80_20)
285 Fatal("Main", "FairMedium ArC4H10_80_20 not found");
286 geoBuild->createMedium(mArC4H10_80_20);
287 pMedArC4H10_80_20 = gGeoManager->GetMedium("ArC4H10_80_20");
289 Fatal("Main", "Medium ArC4H10_80_20 not found");
290
291 // aluminium medium
292 FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium");
293 if (!mAluminium)
294 Fatal("Main", "FairMedium aluminium not found");
295 geoBuild->createMedium(mAluminium);
296 pMedAluminium = gGeoManager->GetMedium("aluminium");
297 if (!pMedAluminium)
298 Fatal("Main", "Medium aluminium not found");
299
300 // epoxide compound (for GEM frames)
301 FairGeoMedium* mEpoxideCompound = geoMedia->getMedium("polyurethane_hd");
302 if (!mEpoxideCompound)
303 Fatal("Main", "FairMedium epoxideCompound not found");
304 geoBuild->createMedium(mEpoxideCompound);
305 pMedEpoxideCompound = gGeoManager->GetMedium("polyurethane_hd");
307 Fatal("Main", "Medium epoxideCompound not found");
308
309 // glue
310 FairGeoMedium* mGlue = geoMedia->getMedium("acrylic_glue");
311 if (!mGlue)
312 Fatal("Main", "FairMedium acrylic_glue not found");
313 geoBuild->createMedium(mGlue);
314 pMedGlue = gGeoManager->GetMedium("acrylic_glue");
315 if (!pMedGlue)
316 Fatal("Main", "Medium acrylic_glue not found");
317
318 // brass medium
319 FairGeoMedium* mBrass = geoMedia->getMedium("brass");
320 if (!mBrass)
321 Fatal("Main", "FairMedium brass not found");
322 geoBuild->createMedium(mBrass);
323 pMedBrass = gGeoManager->GetMedium("brass");
324 if (!pMedBrass)
325 Fatal("Main", "Medium brass not found");
326
327 // steel medium
328 FairGeoMedium* mSteel = geoMedia->getMedium("steel");
329 if (!mSteel)
330 Fatal("Main", "FairMedium steel not found");
331 geoBuild->createMedium(mSteel);
332 pMedSteel = gGeoManager->GetMedium("steel");
333 if (!pMedSteel)
334 Fatal("Main", "Medium steel not found");
335
336 // honeycomb medium
337 FairGeoMedium* mHoneyComb = geoMedia->getMedium("AramidHoneyComb");
338 if (!mHoneyComb)
339 Fatal("Main", "FairMedium AramidHoneyComb not found");
340 geoBuild->createMedium(mHoneyComb);
341 pMedHoneyComb = gGeoManager->GetMedium("AramidHoneyComb");
342 if (!pMedHoneyComb)
343 Fatal("Main", "Medium AramidHoneyComb not found");
344
345 // polyacetal medium ((polyoxymethylene))
346 FairGeoMedium* mPolyacetal = geoMedia->getMedium("polyacetal");
347 if (!mPolyacetal)
348 Fatal("Main", "FairMedium polyacetal not found");
349 geoBuild->createMedium(mPolyacetal);
350 pMedPolyacetal = gGeoManager->GetMedium("polyacetal");
351 if (!pMedPolyacetal)
352 Fatal("Main", "Medium polyacetal not found");
353
354 // polyamide medium
355 FairGeoMedium* mPolyamide = geoMedia->getMedium("polyamide");
356 if (!mPolyamide)
357 Fatal("Main", "FairMedium polyamide not found");
358 geoBuild->createMedium(mPolyamide);
359 pMedPolyamide = gGeoManager->GetMedium("polyamide");
360 if (!pMedPolyamide)
361 Fatal("Main", "Medium polyamide not found");
362}
363
365{
366
367 // ---- set working directory --------------------------------------------
368 TString gPath = gSystem->Getenv("VMCWORKDIR");
369
370 // ------- Geometry file name (output) ---------------------------------
371 const TString geoDetectorName = "GEMS";
372 const TString geoDetectorVersion = "Run8_detailed_aligned";
373 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
374
375 // ---- global geometry parameters ---------------------------------------
376 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
377 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
378
379 // ------- Load media from media file ----------------------------------
380 TString medFile = gPath + "/geometry/media.geo";
381 geoFace->setMediaFile(medFile);
382 geoFace->readMedia();
383 FairGeoMedia* geoMedia = geoFace->getMedia();
384 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
385
386 DefineRequiredMedia(geoMedia, geoBuild);
387 // -------------------------------------------------------------------------
388
389 // -------------- Create geometry and top volume ------------------------
390 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
391 gGeoMan->SetName(geoDetectorName + "_geom");
392 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
393 top->SetMedium(pMedAir);
394 gGeoMan->SetTopVolume(top);
395 // gGeoMan->SetTopVisible(1);
396 // -------------------------------------------------------------------------
397
398 // Define TOP Geometry
399 TGeoVolume* GEMS = new TGeoVolumeAssembly(geoDetectorName);
400 GEMS->SetMedium(pMedAir);
401
402 // for(Int_t istation = 0; istation < NStations; ++istation) {
403 for (Int_t istation = 0; istation < 8; ++istation) {
404
405 Int_t stationNum = istation;
406 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
407
408 // Applying alignment corrections to module shifts !!!!!!!!!!
409 for (Int_t imodule = 0; imodule < NMaxModules; ++imodule) {
410 XModuleShifts[istation][imodule] -= XAlignmentCorrections[istation][imodule];
411 YModuleShifts[istation][imodule] -= YAlignmentCorrections[istation][imodule];
412 ZModuleShifts[istation][imodule] += ZAlignmentCorrections[istation][imodule];
413 }
414
415 if (istation < 7) { // big GEMs
416 // upper part
417 TGeoVolume* module0 =
420 TGeoVolume* module1 =
423
424 TGeoVolume* layers0 = CreateLayersForModule_Station163x45(TString("layer0_") + station->GetName());
425 TGeoVolume* layers1 = CreateLayersForModule_Station163x45(TString("layer1_") + station->GetName());
426
427 TGeoVolume* frame_upper =
428 CreateFrameForHalfPlane_Station163x45(TString("frame_upper_") + station->GetName(), istation);
429
430 // lower part
431 TGeoVolume* module2 =
434 TGeoVolume* module3 =
437
438 TGeoVolume* layers2 = CreateLayersForModule_Station163x39(TString("layer3_") + station->GetName());
439 TGeoVolume* layers3 = CreateLayersForModule_Station163x39(TString("layer4_") + station->GetName());
440
441 TGeoVolume* frame_lower =
442 CreateFrameForHalfPlane_Station163x39(TString("frame_lower_") + station->GetName(), istation);
443
444 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
445 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
446 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
447
448 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
449 module1_transform->ReflectX(true);
450 module1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
451 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
452
453 TGeoCombiTrans* module2_transform = new TGeoCombiTrans();
454 module2_transform->ReflectY(true);
455 module2_transform->SetTranslation(XModuleShifts[stationNum][2], YModuleShifts[stationNum][2],
456 ZModuleShifts[stationNum][2] + ZModuleSize_Station163x39 * 0.5);
457
458 TGeoCombiTrans* module3_transform = new TGeoCombiTrans();
459 module3_transform->ReflectY(true);
460 module3_transform->ReflectX(true);
461 module3_transform->SetTranslation(XModuleShifts[stationNum][3], YModuleShifts[stationNum][3],
462 ZModuleShifts[stationNum][3] + ZModuleSize_Station163x39 * 0.5);
463
464 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
465 if (YStationRotations[stationNum] == true)
466 layers0_transform->ReflectZ(true);
467 if (XStationRotations[stationNum] == true)
468 layers0_transform->RotateX(180.0);
469 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
470 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
471
472 TGeoCombiTrans* layers1_transform = new TGeoCombiTrans();
473 if (YStationRotations[stationNum] == true)
474 layers1_transform->ReflectZ(true);
475 if (XStationRotations[stationNum] == true)
476 layers1_transform->RotateX(180.0);
477 layers1_transform->ReflectX(true);
478 layers1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
479 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
480
481 TGeoCombiTrans* layers2_transform = new TGeoCombiTrans();
482 layers2_transform->ReflectY(true);
483 if (YStationRotations[stationNum] == false)
484 layers2_transform->ReflectZ(true);
485 if (XStationRotations[stationNum] == true)
486 layers2_transform->RotateX(180.0);
487 layers2_transform->SetTranslation(XModuleShifts[stationNum][2], YModuleShifts[stationNum][2],
488 ZModuleShifts[stationNum][2] + ZModuleSize_Station163x45 * 0.5);
489
490 TGeoCombiTrans* layers3_transform = new TGeoCombiTrans();
491 layers3_transform->ReflectY(true);
492 layers3_transform->ReflectX(true);
493 if (YStationRotations[stationNum] == false)
494 layers3_transform->ReflectZ(true);
495 if (XStationRotations[stationNum] == true)
496 layers3_transform->RotateX(180.0);
497 layers3_transform->SetTranslation(XModuleShifts[stationNum][3], YModuleShifts[stationNum][3],
498 ZModuleShifts[stationNum][3] + ZModuleSize_Station163x45 * 0.5);
499
500 TGeoCombiTrans* frame_upper_transform = new TGeoCombiTrans();
501 if (YStationRotations[stationNum] == true)
502 frame_upper_transform->RotateY(180.0);
503 if (XStationRotations[stationNum] == true)
504 frame_upper_transform->RotateX(180.0);
505 frame_upper_transform->SetTranslation((XModuleShifts[stationNum][0] + XModuleShifts[stationNum][1]),
506 YModuleShifts[stationNum][0],
507 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
508
509 TGeoCombiTrans* frame_lower_transform = new TGeoCombiTrans();
510 frame_lower_transform->ReflectY(true);
511 if (YStationRotations[stationNum] == false)
512 frame_lower_transform->RotateY(180.0);
513 if (XStationRotations[stationNum] == true)
514 frame_lower_transform->RotateX(180.0);
515 frame_lower_transform->SetTranslation((XModuleShifts[stationNum][2] + XModuleShifts[stationNum][3]),
516 YModuleShifts[stationNum][2],
517 ZModuleShifts[stationNum][2] + ZModuleSize_Station163x45 * 0.5);
518
519 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
520 station->AddNode(module1, 0, new TGeoCombiTrans(*module1_transform)); // module
521 station->AddNode(module2, 0, new TGeoCombiTrans(*module2_transform)); // module
522 station->AddNode(module3, 0, new TGeoCombiTrans(*module3_transform)); // module
523
524 station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); // layers
525 station->AddNode(layers1, 0, new TGeoCombiTrans(*layers1_transform)); // layers
526 station->AddNode(layers2, 0, new TGeoCombiTrans(*layers2_transform)); // layers
527 station->AddNode(layers3, 0, new TGeoCombiTrans(*layers3_transform)); // layers
528
529 station->AddNode(frame_upper, 0, frame_upper_transform);
530 station->AddNode(frame_lower, 0, frame_lower_transform);
531 }
532
533 if (istation == 7) { // small GEM
534 TGeoVolume* module0 =
535 CreateModule_Station10x10(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station10x10,
537
538 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
539 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
540 ZModuleShifts[stationNum][0] + ZModuleSize_Station10x10 * 0.5);
541
542 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
543 }
544
545 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
546 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
547 ZStationPositions[stationNum]);
548
549 GEMS->AddNode(station, 0, station_transform);
550 }
551
552 top->AddNode(GEMS, 0);
554
555 // --------------- Finish -----------------------------------------------
556 gGeoMan->CloseGeometry();
557 // gGeoMan->CheckOverlaps(0.0001);
558 // gGeoMan->PrintOverlaps();
559 gGeoMan->Test();
560 // gGeoMan->RestoreMasterVolume();
561
562 TFile* geoFile = new TFile(geoFileName, "RECREATE");
563 top->Write();
564 geoFile->Close();
565 top->Draw("ogl");
566}
567
568//------------------------------------------------------------------------------
569
571{
572
573 TGeoVolume* stationA = new TGeoVolumeAssembly(station_name);
574 stationA->SetMedium(pMedAir);
575
576 return stationA;
577}
578
580{
581
582 // module shape
583 TGeoShape* moduleS = new TGeoBBox("moduleS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
584
585 // module volume
586 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
587
588 // medium
591 else
592 Fatal("Main", "Invalid medium for sensitive modules!");
593
594 // visual parameters
595 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
596 moduleV->SetTransparency(20);
597
598 return moduleV;
599}
600
602{
603
604 // frame shapes
605 TGeoShape* vertical_frameS =
606 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station66x41 * 0.5 + dy, dz * 0.5);
607 TGeoShape* horizontal_frameS =
608 new TGeoBBox("horizontal_frameS", XModuleSize_Station66x41 * 0.5, dy * 0.5, dz * 0.5);
609
610 // frame volumes
611 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
612 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
613 TGeoVolume* horizontal_frameV = new TGeoVolume(frame_name + "_horizontal_frameV", horizontal_frameS);
614
615 // media
616 TGeoMedium* frame_medium = pMedCarbon; // set medium
617 if (pMedCarbon) {
618 vertical_frameV->SetMedium(frame_medium);
619 horizontal_frameV->SetMedium(frame_medium);
620 } else
621 Fatal("Main", "Invalid medium for frames!");
622 if (pMedAir) {
623 composite_frameV->SetMedium(pMedAir);
624 } else
625 Fatal("Main", "Invalid medium for frames!");
626
627 // visual parameters
628 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
629 horizontal_frameV->SetLineColor(TColor::GetColor("#9999ff"));
630
631 // frame part positions in the frame
632 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
633 left_vertical_frame_position->SetTranslation(XModuleSize_Station66x41 * 0.5 + dXFrame_Station66x41 * 0.5, 0.0, 0.0);
634
635 TGeoCombiTrans* right_vertical_frame_position = new TGeoCombiTrans();
636 right_vertical_frame_position->SetTranslation(-XModuleSize_Station66x41 * 0.5 - dXFrame_Station66x41 * 0.5, 0.0,
637 0.0);
638
639 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
640 bottom_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station66x41 * 0.5 + dYFrame_Station66x41 * 0.5,
641 0.0);
642
643 TGeoCombiTrans* lower_horizontal_frame_position = new TGeoCombiTrans();
644 lower_horizontal_frame_position->SetTranslation(0.0, -YModuleSize_Station66x41 * 0.5 - dYFrame_Station66x41 * 0.5,
645 0.0);
646
647 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
648 composite_frameV->AddNode(vertical_frameV, 1, right_vertical_frame_position);
649 composite_frameV->AddNode(horizontal_frameV, 0, bottom_horizontal_frame_position);
650 composite_frameV->AddNode(horizontal_frameV, 1, lower_horizontal_frame_position);
651
652 return composite_frameV;
653}
654
656 Double_t xsize,
657 Double_t ysize,
658 Double_t zsize,
659 Double_t hole_radius)
660{
661
662 gRandom->SetSeed(0);
663 Int_t uniqueId = gRandom->Integer(100000);
664
665 // module shapes
666 TGeoShape* module_partS =
667 new TGeoBBox(TString("module_partS") + TString::Itoa(uniqueId, 10), xsize * 0.5, ysize * 0.5, zsize * 0.5);
668 TGeoShape* holeS =
669 new TGeoTube(TString("holeS") + TString::Itoa(uniqueId, 10), 0.0, hole_radius, zsize * 0.5 + 0.01);
670
671 TGeoTranslation* hole_module_trans = new TGeoTranslation(
672 TString("hole_module_trans_") + TString::Itoa(uniqueId, 10), -xsize * 0.5, -ysize * 0.5, 0.0);
673
674 hole_module_trans->RegisterYourself();
675
676 TString bool_expression_module = TString(module_partS->GetName()) + TString(" - ") + TString(holeS->GetName())
677 + TString(":") + TString(hole_module_trans->GetName());
678 TGeoCompositeShape* moduleS = new TGeoCompositeShape(bool_expression_module);
679
680 // module volume
681 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
682
683 // medium
686 else
687 Fatal("Main", "Invalid medium for sensitive modules!");
688
689 // visual parameters
690 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
691 moduleV->SetTransparency(20);
692
693 return moduleV;
694}
695//------------------------------------------------------------------------------
696
698{
699
700 // frame volumes
701 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
702 layers->SetMedium(pMedAir);
703
704 // Common parameters for all layers
705 Double_t layer_XSize = XModuleSize_Station163x45; // cm
706 Double_t layer_YSize = YModuleSize_Station163x45; // cm
707
708 Double_t layerFront_XSize = 80.85; // cm
709 Double_t layerFront_YSize = 44.2; // cm
710 Double_t layerFront_XShift = -0.375; // cm
711 Double_t layerFront_YShift = -0.2; // cm
712
713 Double_t layerBack_XSize = 80.71; // cm
714 Double_t layerBack_YSize = 44.2; // cm
715 Double_t layerBack_XShift = -0.445; // cm
716 Double_t layerBack_YShift = -0.2; // cm
717
718 // copper layer -------------------------------------------------------------
719 Double_t copperLayer_ZSize = 0.00655; // cm;
720 Double_t copperLayerHole_Radius = 6.0; // cm
721
722 // layer shape
723 TGeoShape* copperLayerFrontBlankS =
724 new TGeoBBox(TString("copperLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
725 layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
726 TGeoShape* copperLayerBackBlankS =
727 new TGeoBBox(TString("copperLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
728 layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
729
730 TGeoShape* copperLayerFrontHoleS =
731 new TGeoTube(TString("copperLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0, copperLayerHole_Radius,
732 copperLayer_ZSize * 0.5 + 0.01);
733 TGeoShape* copperLayerBackHoleS = new TGeoTube(TString("copperLayerBackHoleS") += TString("_") + layers->GetName(),
734 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
735
736 TGeoTranslation* copperLayerFrontHole_pos = new TGeoTranslation();
737 copperLayerFrontHole_pos->SetName(TString("copperLayerFrontHole_pos") += TString("_") + layers->GetName());
738 copperLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
739 copperLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
740 copperLayerFrontHole_pos->SetDz(0.0);
741 copperLayerFrontHole_pos->RegisterYourself();
742
743 TGeoTranslation* copperLayerBackHole_pos = new TGeoTranslation();
744 copperLayerBackHole_pos->SetName(TString("copperLayerBackHole_pos") += TString("_") + layers->GetName());
745 copperLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
746 copperLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
747 copperLayerBackHole_pos->SetDz(0.0);
748 copperLayerBackHole_pos->RegisterYourself();
749
750 TGeoCompositeShape* copperLayerFrontS = new TGeoCompositeShape();
751 copperLayerFrontS->SetName(TString("copperLayerFrontS") += TString("_") + layers->GetName());
752 {
753 TString expression = "copperLayerFrontBlankS";
754 expression += TString("_") + layers->GetName();
755 expression += "-copperLayerFrontHoleS";
756 expression += TString("_") + layers->GetName();
757 expression += ":copperLayerFrontHole_pos";
758 expression += TString("_") + layers->GetName();
759
760 copperLayerFrontS->MakeNode(expression);
761 copperLayerFrontS->ComputeBBox(); // need to compute a bounding box
762 }
763
764 TGeoCompositeShape* copperLayerBackS = new TGeoCompositeShape();
765 copperLayerBackS->SetName(TString("copperLayerBackS") += TString("_") + layers->GetName());
766 {
767 TString expression = "copperLayerBackBlankS";
768 expression += TString("_") + layers->GetName();
769 expression += "-copperLayerBackHoleS";
770 expression += TString("_") + layers->GetName();
771 expression += ":copperLayerBackHole_pos";
772 expression += TString("_") + layers->GetName();
773
774 copperLayerBackS->MakeNode(expression);
775 copperLayerBackS->ComputeBBox(); // need to compute a bounding box
776 }
777
778 TGeoVolume* copperLayerFrontV =
779 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
780 TGeoVolume* copperLayerBackV =
781 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
782
783 // volume medium
784 TGeoMedium* copperLayerV_medium = pMedCopper;
785 if (copperLayerV_medium) {
786 copperLayerFrontV->SetMedium(copperLayerV_medium);
787 copperLayerBackV->SetMedium(copperLayerV_medium);
788 } else
789 Fatal("Main", "Invalid medium for copperLayerV!");
790
791 // volume visual property (transparency)
792 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
793 copperLayerFrontV->SetTransparency(0);
794 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
795 copperLayerBackV->SetTransparency(0);
796
797 TGeoCombiTrans* copperLayerFront_transf[2];
798
799 copperLayerFront_transf[0] = new TGeoCombiTrans();
800 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
801 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
802 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize * 0.5);
803
804 TGeoCombiTrans* copperLayerBack_transf[1];
805
806 copperLayerBack_transf[0] = new TGeoCombiTrans();
807 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
808 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
809 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5);
810
811 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
812 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
813 //--------------------------------------------------------------------------
814
815 // glue layer ---------------------------------------------------------------
816 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
817 Double_t glueLayerHole_Radius = 6.0; // cm
818
819 // layer shape
820 TGeoShape* glueLayerFrontBlankS =
821 new TGeoBBox(TString("glueLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
822 layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
823 TGeoShape* glueLayerBackBlankS = new TGeoBBox(TString("glueLayerBackBlankS") += TString("_") + layers->GetName(),
824 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
825
826 TGeoShape* glueLayerFrontHoleS = new TGeoTube(TString("glueLayerFrontHoleS") += TString("_") + layers->GetName(),
827 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
828 TGeoShape* glueLayerBackHoleS = new TGeoTube(TString("glueLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
829 glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
830
831 TGeoTranslation* glueLayerFrontHole_pos = new TGeoTranslation();
832 glueLayerFrontHole_pos->SetName(TString("glueLayerFrontHole_pos") += TString("_") + layers->GetName());
833 glueLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
834 glueLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
835 glueLayerFrontHole_pos->SetDz(0.0);
836 glueLayerFrontHole_pos->RegisterYourself();
837
838 TGeoTranslation* glueLayerBackHole_pos = new TGeoTranslation();
839 glueLayerBackHole_pos->SetName(TString("glueLayerBackHole_pos") += TString("_") + layers->GetName());
840 glueLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
841 glueLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
842 glueLayerBackHole_pos->SetDz(0.0);
843 glueLayerBackHole_pos->RegisterYourself();
844
845 TGeoCompositeShape* glueLayerFrontS = new TGeoCompositeShape();
846 glueLayerFrontS->SetName(TString("glueLayerFrontS") += TString("_") + layers->GetName());
847 {
848 TString expression = "glueLayerFrontBlankS";
849 expression += TString("_") + layers->GetName();
850 expression += "-glueLayerFrontHoleS";
851 expression += TString("_") + layers->GetName();
852 expression += ":glueLayerFrontHole_pos";
853 expression += TString("_") + layers->GetName();
854
855 glueLayerFrontS->MakeNode(expression);
856 glueLayerFrontS->ComputeBBox(); // need to compute a bounding box
857 }
858
859 TGeoCompositeShape* glueLayerBackS = new TGeoCompositeShape();
860 glueLayerBackS->SetName(TString("glueLayerBackS") += TString("_") + layers->GetName());
861 {
862 TString expression = "glueLayerBackBlankS";
863 expression += TString("_") + layers->GetName();
864 expression += "-glueLayerBackHoleS";
865 expression += TString("_") + layers->GetName();
866 expression += ":glueLayerBackHole_pos";
867 expression += TString("_") + layers->GetName();
868
869 glueLayerBackS->MakeNode(expression);
870 glueLayerBackS->ComputeBBox(); // need to compute a bounding box
871 }
872
873 TGeoVolume* glueLayerFrontV =
874 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
875 TGeoVolume* glueLayerBackV =
876 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
877
878 // volume medium
879 TGeoMedium* glueLayerV_medium = pMedGlue;
880 if (glueLayerV_medium) {
881 glueLayerFrontV->SetMedium(glueLayerV_medium);
882 glueLayerBackV->SetMedium(glueLayerV_medium);
883 } else
884 Fatal("Main", "Invalid medium for glueLayerV!");
885
886 // volume visual property (transparency)
887 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
888 glueLayerFrontV->SetTransparency(0);
889 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
890 glueLayerBackV->SetTransparency(0);
891
892 TGeoCombiTrans* glueLayerFront_transf[1];
893
894 glueLayerFront_transf[0] = new TGeoCombiTrans();
895 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
896 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
897 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
898
899 TGeoCombiTrans* glueLayerBack_transf[1];
900
901 glueLayerBack_transf[0] = new TGeoCombiTrans();
902 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
903 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
904 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize * 0.5);
905
906 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
907 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
908 //--------------------------------------------------------------------------
909
910 // epoxide layer ------------------------------------------------------------
911 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
912 Double_t epoxideLayerHole_Radius = 6.0; // cm
913
914 // layer shape
915 TGeoShape* epoxideLayerFrontBlankS =
916 new TGeoBBox(TString("epoxideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
917 layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
918 TGeoShape* epoxideLayerBackBlankS =
919 new TGeoBBox(TString("epoxideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
920 layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
921
922 TGeoShape* epoxideLayerFrontHoleS =
923 new TGeoTube(TString("epoxideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
924 epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
925 TGeoShape* epoxideLayerBackHoleS =
926 new TGeoTube(TString("epoxideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0, epoxideLayerHole_Radius,
927 epoxideLayer_ZSize * 0.5 + 0.01);
928
929 TGeoTranslation* epoxideLayerFrontHole_pos = new TGeoTranslation();
930 epoxideLayerFrontHole_pos->SetName(TString("epoxideLayerFrontHole_pos") += TString("_") + layers->GetName());
931 epoxideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
932 epoxideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
933 epoxideLayerFrontHole_pos->SetDz(0.0);
934 epoxideLayerFrontHole_pos->RegisterYourself();
935
936 TGeoTranslation* epoxideLayerBackHole_pos = new TGeoTranslation();
937 epoxideLayerBackHole_pos->SetName(TString("epoxideLayerBackHole_pos") += TString("_") + layers->GetName());
938 epoxideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
939 epoxideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
940 epoxideLayerBackHole_pos->SetDz(0.0);
941 epoxideLayerBackHole_pos->RegisterYourself();
942
943 TGeoCompositeShape* epoxideLayerFrontS = new TGeoCompositeShape();
944 epoxideLayerFrontS->SetName(TString("epoxideLayerFrontS") += TString("_") + layers->GetName());
945 {
946 TString expression = "epoxideLayerFrontBlankS";
947 expression += TString("_") + layers->GetName();
948 expression += "-epoxideLayerFrontHoleS";
949 expression += TString("_") + layers->GetName();
950 expression += ":epoxideLayerFrontHole_pos";
951 expression += TString("_") + layers->GetName();
952
953 epoxideLayerFrontS->MakeNode(expression);
954 epoxideLayerFrontS->ComputeBBox(); // need to compute a bounding box
955 }
956
957 TGeoCompositeShape* epoxideLayerBackS = new TGeoCompositeShape();
958 epoxideLayerBackS->SetName(TString("epoxideLayerBackS") += TString("_") + layers->GetName());
959 {
960 TString expression = "epoxideLayerBackBlankS";
961 expression += TString("_") + layers->GetName();
962 expression += "-epoxideLayerBackHoleS";
963 expression += TString("_") + layers->GetName();
964 expression += ":epoxideLayerBackHole_pos";
965 expression += TString("_") + layers->GetName();
966
967 epoxideLayerBackS->MakeNode(expression);
968 epoxideLayerBackS->ComputeBBox(); // need to compute a bounding box
969 }
970
971 TGeoVolume* epoxideLayerFrontV =
972 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
973 TGeoVolume* epoxideLayerBackV =
974 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
975
976 // volume medium
977 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
978 if (epoxideLayerV_medium) {
979 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
980 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
981 } else
982 Fatal("Main", "Invalid medium for epoxideLayerV!");
983
984 // volume visual property (transparency)
985 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
986 epoxideLayerFrontV->SetTransparency(0);
987 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
988 epoxideLayerBackV->SetTransparency(0);
989
990 TGeoCombiTrans* epoxideLayerFront_transf[1];
991
992 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
993 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
994 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
995 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
996 + epoxideLayer_ZSize * 0.5);
997
998 TGeoCombiTrans* epoxideLayerBack_transf[1];
999
1000 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
1001 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
1002 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
1003 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
1004 - epoxideLayer_ZSize * 0.5);
1005
1006 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
1007 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
1008 //--------------------------------------------------------------------------
1009
1010 // honeycomb layer ----------------------------------------------------------
1011 // Double_t honeycombLayer_ZSize = 1.5-(0.05+0.00055+0.005+0.0125); //cm; half-thickness of all honeycomb layers
1012 Double_t honeycombLayer_ZSize = 1.5 - (0.06805); // cm; half-thickness of all honeycomb layers
1013 Double_t honeycombLayerHole_Radius = 6.0; // cm
1014
1015 // layer shape
1016 TGeoShape* honeycombLayerFrontBlankS =
1017 new TGeoBBox(TString("honeycombLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
1018 layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
1019 TGeoShape* honeycombLayerBackBlankS =
1020 new TGeoBBox(TString("honeycombLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
1021 layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
1022
1023 TGeoShape* honeycombLayerFrontHoleS =
1024 new TGeoTube(TString("honeycombLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
1025 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
1026 TGeoShape* honeycombLayerBackHoleS =
1027 new TGeoTube(TString("honeycombLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
1028 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
1029
1030 TGeoTranslation* honeycombLayerFrontHole_pos = new TGeoTranslation();
1031 honeycombLayerFrontHole_pos->SetName(TString("honeycombLayerFrontHole_pos") += TString("_") + layers->GetName());
1032 honeycombLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
1033 honeycombLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
1034 honeycombLayerFrontHole_pos->SetDz(0.0);
1035 honeycombLayerFrontHole_pos->RegisterYourself();
1036
1037 TGeoTranslation* honeycombLayerBackHole_pos = new TGeoTranslation();
1038 honeycombLayerBackHole_pos->SetName(TString("honeycombLayerBackHole_pos") += TString("_") + layers->GetName());
1039 honeycombLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
1040 honeycombLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
1041 honeycombLayerBackHole_pos->SetDz(0.0);
1042 honeycombLayerBackHole_pos->RegisterYourself();
1043
1044 TGeoCompositeShape* honeycombLayerFrontS = new TGeoCompositeShape();
1045 honeycombLayerFrontS->SetName(TString("honeycombLayerFrontS") += TString("_") + layers->GetName());
1046 {
1047 TString expression = "honeycombLayerFrontBlankS";
1048 expression += TString("_") + layers->GetName();
1049 expression += "-honeycombLayerFrontHoleS";
1050 expression += TString("_") + layers->GetName();
1051 expression += ":honeycombLayerFrontHole_pos";
1052 expression += TString("_") + layers->GetName();
1053
1054 honeycombLayerFrontS->MakeNode(expression);
1055 honeycombLayerFrontS->ComputeBBox(); // need to compute a bounding box
1056 }
1057
1058 TGeoCompositeShape* honeycombLayerBackS = new TGeoCompositeShape();
1059 honeycombLayerBackS->SetName(TString("honeycombLayerBackS") += TString("_") + layers->GetName());
1060 {
1061 TString expression = "honeycombLayerBackBlankS";
1062 expression += TString("_") + layers->GetName();
1063 expression += "-honeycombLayerBackHoleS";
1064 expression += TString("_") + layers->GetName();
1065 expression += ":honeycombLayerBackHole_pos";
1066 expression += TString("_") + layers->GetName();
1067
1068 honeycombLayerBackS->MakeNode(expression);
1069 honeycombLayerBackS->ComputeBBox(); // need to compute a bounding box
1070 }
1071
1072 TGeoVolume* honeycombLayerFrontV =
1073 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
1074 TGeoVolume* honeycombLayerBackV =
1075 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
1076
1077 // volume medium
1078 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
1079 if (honeycombLayerV_medium) {
1080 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
1081 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
1082 } else
1083 Fatal("Main", "Invalid medium for honeycombLayerV!");
1084
1085 // volume visual property (transparency)
1086 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
1087 honeycombLayerFrontV->SetTransparency(0);
1088 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
1089 honeycombLayerBackV->SetTransparency(0);
1090
1091 TGeoCombiTrans* honeycombLayerFront_transf[1];
1092
1093 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
1094 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
1095 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
1096 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
1097 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
1098
1099 TGeoCombiTrans* honeycombLayerBack_transf[1];
1100
1101 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
1102 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
1103 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
1104 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
1105 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5);
1106
1107 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
1108 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
1109 //--------------------------------------------------------------------------
1110
1111 // polyamide layer ----------------------------------------------------------
1112 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
1113 Double_t polyamideLayerHole_Radius = 6.0; // cm
1114
1115 // layer shape
1116 TGeoShape* polyamideLayerFrontBlankS =
1117 new TGeoBBox(TString("polyamideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
1118 layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
1119 TGeoShape* polyamideLayerBackBlankS =
1120 new TGeoBBox(TString("polyamideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
1121 layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
1122
1123 TGeoShape* polyamideLayerFrontHoleS =
1124 new TGeoTube(TString("polyamideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
1125 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
1126 TGeoShape* polyamideLayerBackHoleS =
1127 new TGeoTube(TString("polyamideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
1128 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
1129
1130 TGeoTranslation* polyamideLayerFrontHole_pos = new TGeoTranslation();
1131 polyamideLayerFrontHole_pos->SetName(TString("polyamideLayerFrontHole_pos") += TString("_") + layers->GetName());
1132 polyamideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
1133 polyamideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
1134 polyamideLayerFrontHole_pos->SetDz(0.0);
1135 polyamideLayerFrontHole_pos->RegisterYourself();
1136
1137 TGeoTranslation* polyamideLayerBackHole_pos = new TGeoTranslation();
1138 polyamideLayerBackHole_pos->SetName(TString("polyamideLayerBackHole_pos") += TString("_") + layers->GetName());
1139 polyamideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
1140 polyamideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
1141 polyamideLayerBackHole_pos->SetDz(0.0);
1142 polyamideLayerBackHole_pos->RegisterYourself();
1143
1144 TGeoCompositeShape* polyamideLayerFrontS = new TGeoCompositeShape();
1145 polyamideLayerFrontS->SetName(TString("polyamideLayerFrontS") += TString("_") + layers->GetName());
1146 {
1147 TString expression = "polyamideLayerFrontBlankS";
1148 expression += TString("_") + layers->GetName();
1149 expression += "-polyamideLayerFrontHoleS";
1150 expression += TString("_") + layers->GetName();
1151 expression += ":polyamideLayerFrontHole_pos";
1152 expression += TString("_") + layers->GetName();
1153
1154 polyamideLayerFrontS->MakeNode(expression);
1155 polyamideLayerFrontS->ComputeBBox(); // need to compute a bounding box
1156 }
1157
1158 TGeoCompositeShape* polyamideLayerBackS = new TGeoCompositeShape();
1159 polyamideLayerBackS->SetName(TString("polyamideLayerBackS") += TString("_") + layers->GetName());
1160 {
1161 TString expression = "polyamideLayerBackBlankS";
1162 expression += TString("_") + layers->GetName();
1163 expression += "-polyamideLayerBackHoleS";
1164 expression += TString("_") + layers->GetName();
1165 expression += ":polyamideLayerBackHole_pos";
1166 expression += TString("_") + layers->GetName();
1167
1168 polyamideLayerBackS->MakeNode(expression);
1169 polyamideLayerBackS->ComputeBBox(); // need to compute a bounding box
1170 }
1171
1172 TGeoVolume* polyamideLayerFrontV =
1173 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
1174 TGeoVolume* polyamideLayerBackV =
1175 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
1176
1177 // volume medium
1178 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
1179 if (polyamideLayerV_medium) {
1180 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
1181 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
1182 } else
1183 Fatal("Main", "Invalid medium for polyamideLayerV!");
1184
1185 // volume visual property (transparency)
1186 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
1187 polyamideLayerFrontV->SetTransparency(0);
1188 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
1189 polyamideLayerBackV->SetTransparency(0);
1190
1191 TGeoCombiTrans* polyamideLayerFront_transf[1];
1192
1193 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
1194 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
1195 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
1196 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
1197 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
1198
1199 TGeoCombiTrans* polyamideLayerBack_transf[1];
1200
1201 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
1202 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
1203 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
1204 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
1205 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5);
1206
1207 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
1208 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
1209 //--------------------------------------------------------------------------
1210
1211 return layers;
1212}
1213
1214//------------------------------------------------------------------------------
1216 Double_t dx,
1217 Double_t dy,
1218 Double_t dz,
1219 Double_t hole_radius)
1220{
1221
1222 // frame shapes
1223 TGeoShape* vertical_frameS =
1224 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station163x45 * 0.5 + dy, dz * 0.5);
1225 TGeoShape* horizontal_upper_frameS =
1226 new TGeoBBox("horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5, dy * 0.5, dz * 0.5);
1227 TGeoShape* horizontal_bottom_frameS = new TGeoBBox(
1228 "horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5 - hole_radius * 0.5, dy * 0.5, dz * 0.5);
1229
1230 // frame volumes
1231 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
1232 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
1233 TGeoVolume* horizontal_upper_frameV =
1234 new TGeoVolume(frame_name + "_horizontal_upper_frameV", horizontal_upper_frameS);
1235 TGeoVolume* horizontal_bottom_frameV =
1236 new TGeoVolume(frame_name + "_horizontal_bottom_frameV", horizontal_bottom_frameS);
1237
1238 // media
1239 TGeoMedium* frame_medium = pMedCarbon; // set medium
1240 if (pMedCarbon) {
1241 vertical_frameV->SetMedium(frame_medium);
1242 horizontal_upper_frameV->SetMedium(frame_medium);
1243 horizontal_bottom_frameV->SetMedium(frame_medium);
1244 } else
1245 Fatal("Main", "Invalid medium for frames!");
1246 if (pMedAir) {
1247 composite_frameV->SetMedium(pMedAir);
1248 } else
1249 Fatal("Main", "Invalid medium for frames!");
1250
1251 // visual parameters
1252 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
1253 horizontal_upper_frameV->SetLineColor(TColor::GetColor("#9999ff"));
1254 horizontal_bottom_frameV->SetLineColor(TColor::GetColor("#9999ff"));
1255
1256 // frame part positions in the frame
1257 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
1258 left_vertical_frame_position->SetTranslation(XModuleSize_Station163x45 * 0.5 + dXFrame_Station163x45 * 0.5, 0.0,
1259 0.0);
1260
1261 TGeoCombiTrans* upper_horizontal_frame_position = new TGeoCombiTrans();
1262 upper_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station163x45 * 0.5 + dYFrame_Station163x45 * 0.5,
1263 0.0);
1264
1265 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
1266 bottom_horizontal_frame_position->SetTranslation(
1267 hole_radius * 0.5, -YModuleSize_Station163x45 * 0.5 - dYFrame_Station163x45 * 0.5, 0.0);
1268
1269 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
1270 composite_frameV->AddNode(horizontal_upper_frameV, 0, upper_horizontal_frame_position);
1271 composite_frameV->AddNode(horizontal_bottom_frameV, 0, bottom_horizontal_frame_position);
1272
1273 return composite_frameV;
1274}
1275
1276//------------------------------------------------------------------------------
1278{
1279
1280 // frame volumes
1281 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
1282 frames->SetMedium(pMedAir);
1283
1284 // back lower epoxide frame -------------------------------------------------
1285 Double_t backLowerEpoxideFrame_XSize = 161.42; // cm
1286 Double_t backLowerEpoxideFrame_YSize = 2.2; // cm
1287 Double_t backLowerEpoxideFrame_ZSize = 1.5; // cm
1288
1289 Double_t backLowerEpoxideFrameArch_Rmin = 4.0;
1290 Double_t backLowerEpoxideFrameArch_Rmax = 6.0;
1291 Double_t backLowerEpoxideFrameArch_ZSize = backLowerEpoxideFrame_ZSize;
1292
1293 TGeoShape* backLowerEpoxideFrameHalfS =
1294 new TGeoBBox(TString("backLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
1295 (backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5,
1296 backLowerEpoxideFrame_YSize * 0.5, backLowerEpoxideFrame_ZSize * 0.5);
1297 TGeoShape* backLowerEpoxideFrameArchS = new TGeoTubeSeg(
1298 TString("backLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), backLowerEpoxideFrameArch_Rmin,
1299 backLowerEpoxideFrameArch_Rmax, backLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
1300
1301 TGeoTranslation* backLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
1302 backLowerEpoxideFrameHalf_pos1->SetName("backLowerEpoxideFrameHalf1_pos1");
1303 backLowerEpoxideFrameHalf_pos1->SetDx(
1304 +((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
1305 backLowerEpoxideFrameHalf_pos1->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1306 backLowerEpoxideFrameHalf_pos1->SetDz(0.0);
1307 backLowerEpoxideFrameHalf_pos1->RegisterYourself();
1308
1309 TGeoTranslation* backLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
1310 backLowerEpoxideFrameHalf_pos2->SetName("backLowerEpoxideFrameHalf1_pos2");
1311 backLowerEpoxideFrameHalf_pos2->SetDx(
1312 -((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
1313 backLowerEpoxideFrameHalf_pos2->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1314 backLowerEpoxideFrameHalf_pos2->SetDz(0.0);
1315 backLowerEpoxideFrameHalf_pos2->RegisterYourself();
1316
1317 TGeoTranslation* backLowerEpoxideFrameArch_pos = new TGeoTranslation();
1318 backLowerEpoxideFrameArch_pos->SetName("backLowerEpoxideFrameArch_pos");
1319 backLowerEpoxideFrameArch_pos->SetDx(0.0);
1320 backLowerEpoxideFrameArch_pos->SetDy(0.0);
1321 backLowerEpoxideFrameArch_pos->SetDz(0.0);
1322 backLowerEpoxideFrameArch_pos->RegisterYourself();
1323
1324 TGeoCompositeShape* backLowerEpoxideFrameS = new TGeoCompositeShape();
1325 backLowerEpoxideFrameS->SetName(TString("backLowerEpoxideFrameS") += TString("_") + frames->GetName());
1326 {
1327 TString expression = "backLowerEpoxideFrameHalfS";
1328 expression += TString("_") + frames->GetName();
1329 expression += ":backLowerEpoxideFrameHalf1_pos1";
1330 expression += "+backLowerEpoxideFrameHalfS";
1331 expression += TString("_") + frames->GetName();
1332 expression += ":backLowerEpoxideFrameHalf1_pos2";
1333 expression += "+backLowerEpoxideFrameArchS";
1334 expression += TString("_") + frames->GetName();
1335 expression += ":backLowerEpoxideFrameArch_pos";
1336
1337 backLowerEpoxideFrameS->MakeNode(expression);
1338 backLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1339 }
1340
1341 TGeoVolume* backLowerEpoxideFrameV =
1342 new TGeoVolume(TString("backLowerEpoxideFrameV") += TString("_") + frames->GetName(), backLowerEpoxideFrameS);
1343
1344 // volume medium
1345 TGeoMedium* backLowerEpoxideFrameV_medium = pMedEpoxideCompound;
1346 if (backLowerEpoxideFrameV_medium) {
1347 backLowerEpoxideFrameV->SetMedium(backLowerEpoxideFrameV_medium);
1348 } else
1349 Fatal("Main", "Invalid medium for backLowerEpoxideFrameV!");
1350
1351 // volume visual property (transparency)
1352 backLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1353 backLowerEpoxideFrameV->SetTransparency(0);
1354
1355 TGeoCombiTrans* backLowerEpoxideFrame_transf[1];
1356
1357 backLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
1358 backLowerEpoxideFrame_transf[0]->SetDx(0.0);
1359 backLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
1360 backLowerEpoxideFrame_transf[0]->SetDz(+(backLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1361
1362 // alignment corrections
1363 backLowerEpoxideFrame_transf[0]->SetDx(backLowerEpoxideFrame_transf[0]->GetTranslation()[0] + 0.3);
1364 backLowerEpoxideFrame_transf[0]->SetDy(backLowerEpoxideFrame_transf[0]->GetTranslation()[1] - 0.5);
1365 backLowerEpoxideFrame_transf[0]->SetDz(backLowerEpoxideFrame_transf[0]->GetTranslation()[2] - 0.0);
1366
1367 if (istation == 2 || istation == 4) {
1368 backLowerEpoxideFrame_transf[0]->SetDx(backLowerEpoxideFrame_transf[0]->GetTranslation()[0] + 0.0);
1369 backLowerEpoxideFrame_transf[0]->SetDy(backLowerEpoxideFrame_transf[0]->GetTranslation()[1] - 0.0);
1370 backLowerEpoxideFrame_transf[0]->SetDz(backLowerEpoxideFrame_transf[0]->GetTranslation()[2] + 0.12);
1371 }
1372
1373 frames->AddNode(backLowerEpoxideFrameV, 0, backLowerEpoxideFrame_transf[0]);
1374 //--------------------------------------------------------------------------
1375
1376 // front lower epoxide frame -------------------------------------------------
1377 Double_t frontLowerEpoxideFrame_XSize = 161.7; // cm
1378 Double_t frontLowerEpoxideFrame_YSize = 2.2; // cm
1379 Double_t frontLowerEpoxideFrame_ZSize = 1.6; // cm
1380
1381 Double_t frontLowerEpoxideFrameArch_Rmin = 4.0;
1382 Double_t frontLowerEpoxideFrameArch_Rmax = 6.0;
1383 Double_t frontLowerEpoxideFrameArch_ZSize = frontLowerEpoxideFrame_ZSize;
1384
1385 TGeoShape* frontLowerEpoxideFrameHalfS =
1386 new TGeoBBox(TString("frontLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
1387 (frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5,
1388 frontLowerEpoxideFrame_YSize * 0.5, frontLowerEpoxideFrame_ZSize * 0.5);
1389 TGeoShape* frontLowerEpoxideFrameArchS = new TGeoTubeSeg(
1390 TString("frontLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), frontLowerEpoxideFrameArch_Rmin,
1391 frontLowerEpoxideFrameArch_Rmax, frontLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
1392
1393 TGeoTranslation* frontLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
1394 frontLowerEpoxideFrameHalf_pos1->SetName("frontLowerEpoxideFrameHalf1_pos1");
1395 frontLowerEpoxideFrameHalf_pos1->SetDx(
1396 +((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
1397 + frontLowerEpoxideFrameArch_Rmin));
1398 frontLowerEpoxideFrameHalf_pos1->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1399 frontLowerEpoxideFrameHalf_pos1->SetDz(0.0);
1400 frontLowerEpoxideFrameHalf_pos1->RegisterYourself();
1401
1402 TGeoTranslation* frontLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
1403 frontLowerEpoxideFrameHalf_pos2->SetName("frontLowerEpoxideFrameHalf1_pos2");
1404 frontLowerEpoxideFrameHalf_pos2->SetDx(
1405 -((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
1406 + frontLowerEpoxideFrameArch_Rmin));
1407 frontLowerEpoxideFrameHalf_pos2->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1408 frontLowerEpoxideFrameHalf_pos2->SetDz(0.0);
1409 frontLowerEpoxideFrameHalf_pos2->RegisterYourself();
1410
1411 TGeoTranslation* frontLowerEpoxideFrameArch_pos = new TGeoTranslation();
1412 frontLowerEpoxideFrameArch_pos->SetName("frontLowerEpoxideFrameArch_pos");
1413 frontLowerEpoxideFrameArch_pos->SetDx(0.0);
1414 frontLowerEpoxideFrameArch_pos->SetDy(0.0);
1415 frontLowerEpoxideFrameArch_pos->SetDz(0.0);
1416 frontLowerEpoxideFrameArch_pos->RegisterYourself();
1417
1418 TGeoCompositeShape* frontLowerEpoxideFrameS = new TGeoCompositeShape();
1419 frontLowerEpoxideFrameS->SetName(TString("frontLowerEpoxideFrameS") += TString("_") + frames->GetName());
1420 {
1421 TString expression = "frontLowerEpoxideFrameHalfS";
1422 expression += TString("_") + frames->GetName();
1423 expression += ":frontLowerEpoxideFrameHalf1_pos1";
1424 expression += "+frontLowerEpoxideFrameHalfS";
1425 expression += TString("_") + frames->GetName();
1426 expression += ":frontLowerEpoxideFrameHalf1_pos2";
1427 expression += "+frontLowerEpoxideFrameArchS";
1428 expression += TString("_") + frames->GetName();
1429 expression += ":frontLowerEpoxideFrameArch_pos";
1430
1431 frontLowerEpoxideFrameS->MakeNode(expression);
1432 frontLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1433 }
1434
1435 TGeoVolume* frontLowerEpoxideFrameV =
1436 new TGeoVolume(TString("frontLowerEpoxideFrameV") += TString("_") + frames->GetName(), frontLowerEpoxideFrameS);
1437
1438 // volume medium
1439 TGeoMedium* frontLowerEpoxideFrameV_medium = pMedEpoxideCompound;
1440 if (frontLowerEpoxideFrameV_medium) {
1441 frontLowerEpoxideFrameV->SetMedium(frontLowerEpoxideFrameV_medium);
1442 } else
1443 Fatal("Main", "Invalid medium for frontLowerEpoxideFrameV!");
1444
1445 // volume visual property (transparency)
1446 frontLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1447 frontLowerEpoxideFrameV->SetTransparency(0);
1448
1449 TGeoCombiTrans* frontLowerEpoxideFrame_transf[1];
1450
1451 frontLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
1452 frontLowerEpoxideFrame_transf[0]->SetDx(0.0);
1453 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
1454 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1455
1456 if (istation == 5) {
1457 frontLowerEpoxideFrame_transf[0]->SetDx(backLowerEpoxideFrame_transf[0]->GetTranslation()[0] + 0.0);
1458 frontLowerEpoxideFrame_transf[0]->SetDy(backLowerEpoxideFrame_transf[0]->GetTranslation()[1] - 0.25);
1459 frontLowerEpoxideFrame_transf[0]->SetDz(backLowerEpoxideFrame_transf[0]->GetTranslation()[2] - 0.0);
1460 }
1461
1462 if (istation == 1) {
1463 frontLowerEpoxideFrame_transf[0]->SetDx(0);
1464 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5) - 0.0);
1465 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
1466 - 0.007);
1467 }
1468
1469 if (istation == 0) {
1470 frontLowerEpoxideFrame_transf[0]->SetDx(0);
1471 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5) - 0.0);
1472 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
1473 - 0.008);
1474 }
1475 if (istation == 3) {
1476 frontLowerEpoxideFrame_transf[0]->SetDx(0);
1477 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5) - 0.0);
1478 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
1479 - 0.07);
1480 }
1481
1482 frames->AddNode(frontLowerEpoxideFrameV, 0, frontLowerEpoxideFrame_transf[0]);
1483 //--------------------------------------------------------------------------
1484
1485 // back side epoxide frame --------------------------------------------------
1486 Double_t backSideEpoxideFramePart_XSize = 9.2; // cm
1487 Double_t backSideEpoxideFramePart_YSize = 52.6; // cm
1488 Double_t backSideEpoxideFramePart_ZSize = 1.6; // cm
1489
1490 Double_t backSideEpoxideFrame_XDistBetweenParts = 162.82; // cm
1491
1492 TGeoShape* backSideEpoxideFramePartS = new TGeoBBox(
1493 TString("backSideEpoxideFramePartS") += TString("_") + frames->GetName(), backSideEpoxideFramePart_XSize * 0.5,
1494 backSideEpoxideFramePart_YSize * 0.5, backSideEpoxideFramePart_ZSize * 0.5);
1495
1496 TGeoTranslation* backSideEpoxideFramePart_pos1 = new TGeoTranslation();
1497 backSideEpoxideFramePart_pos1->SetName("backSideEpoxideFramePart_pos1");
1498 backSideEpoxideFramePart_pos1->SetDx(
1499 +(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
1500 backSideEpoxideFramePart_pos1->SetDy(0.0);
1501 backSideEpoxideFramePart_pos1->SetDz(0.0);
1502 backSideEpoxideFramePart_pos1->RegisterYourself();
1503
1504 TGeoTranslation* backSideEpoxideFramePart_pos2 = new TGeoTranslation();
1505 backSideEpoxideFramePart_pos2->SetName("backSideEpoxideFramePart_pos2");
1506 backSideEpoxideFramePart_pos2->SetDx(
1507 -(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
1508 backSideEpoxideFramePart_pos2->SetDy(0.0);
1509 backSideEpoxideFramePart_pos2->SetDz(0.0);
1510 backSideEpoxideFramePart_pos2->RegisterYourself();
1511
1512 TGeoCompositeShape* backSideEpoxideFrameS = new TGeoCompositeShape();
1513 backSideEpoxideFrameS->SetName(TString("backSideEpoxideFrameS") += TString("_") + frames->GetName());
1514 {
1515 TString expression = "backSideEpoxideFramePartS";
1516 expression += TString("_") + frames->GetName();
1517 expression += ":backSideEpoxideFramePart_pos1";
1518 expression += "+backSideEpoxideFramePartS";
1519 expression += TString("_") + frames->GetName();
1520 expression += ":backSideEpoxideFramePart_pos2";
1521
1522 backSideEpoxideFrameS->MakeNode(expression);
1523 backSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1524 }
1525
1526 TGeoVolume* backSideEpoxideFrameV =
1527 new TGeoVolume(TString("backSideEpoxideFrameV") += TString("_") + frames->GetName(), backSideEpoxideFrameS);
1528
1529 // volume medium
1530 TGeoMedium* backSideEpoxideFrameV_medium = pMedEpoxideCompound;
1531 if (backSideEpoxideFrameV_medium) {
1532 backSideEpoxideFrameV->SetMedium(backSideEpoxideFrameV_medium);
1533 } else
1534 Fatal("Main", "Invalid medium for backSideEpoxideFrameV!");
1535
1536 // volume visual property (transparency)
1537 backSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1538 backSideEpoxideFrameV->SetTransparency(0);
1539
1540 TGeoCombiTrans* backSideEpoxideFrame_transf[1];
1541
1542 backSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
1543 backSideEpoxideFrame_transf[0]->SetDx(0.0);
1544 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1545 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1546 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1547
1548 if (istation == 5) {
1549 backSideEpoxideFrame_transf[0]->SetDx(0.0);
1550 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1551 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/ + 0.0);
1552 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5)
1553 + 0.1);
1554 }
1555
1556 if (istation == 2 || istation == 4) {
1557 backSideEpoxideFrame_transf[0]->SetDx(0.0);
1558 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1559 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/ + 0.0);
1560 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5)
1561 + 0.06);
1562 }
1563
1564 frames->AddNode(backSideEpoxideFrameV, 0, backSideEpoxideFrame_transf[0]);
1565 //--------------------------------------------------------------------------
1566
1567 // back upper epoxide frame -------------------------------------------------
1568 Double_t backUpperEpoxideFrame_XSize = 161.42; // cm
1569 Double_t backUpperEpoxideFrame_YSize = 6.2; // cm
1570 Double_t backUpperEpoxideFrame_ZSize = 1.6; // cm
1571
1572 TGeoShape* backUpperEpoxideFrameS =
1573 new TGeoBBox("backUpperEpoxideFrameS", backUpperEpoxideFrame_XSize * 0.5, backUpperEpoxideFrame_YSize * 0.5,
1574 backUpperEpoxideFrame_ZSize * 0.5);
1575
1576 TGeoVolume* backUpperEpoxideFrameV =
1577 new TGeoVolume(TString("backUpperEpoxideFrameV") += TString("_") + frames->GetName(), backUpperEpoxideFrameS);
1578
1579 // volume medium
1580 TGeoMedium* backUpperEpoxideFrameV_medium = pMedEpoxideCompound;
1581 if (backUpperEpoxideFrameV_medium) {
1582 backUpperEpoxideFrameV->SetMedium(backUpperEpoxideFrameV_medium);
1583 } else
1584 Fatal("Main", "Invalid medium for backUpperEpoxideFrameV!");
1585
1586 // volume visual property (transparency)
1587 backUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1588 backUpperEpoxideFrameV->SetTransparency(0);
1589
1590 TGeoCombiTrans* backUpperEpoxideFrame_transf[1];
1591
1592 backUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
1593 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
1594 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1595 - 0.6 /*shift*/);
1596 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1597
1598 if (istation == 5) {
1599 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
1600 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1601 - 0.6 /*shift*/);
1602 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5)
1603 + 0.1);
1604 }
1605
1606 if (istation == 2 || istation == 4) {
1607 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
1608 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1609 - 0.6 /*shift*/);
1610 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5)
1611 + 0.06);
1612 }
1613
1614 frames->AddNode(backUpperEpoxideFrameV, 0, backUpperEpoxideFrame_transf[0]);
1615 //--------------------------------------------------------------------------
1616
1617 // front side epoxide frame -------------------------------------------------
1618 Double_t frontSideEpoxideFramePart_XSize = 3.5; // cm
1619 Double_t frontSideEpoxideFramePart_YSize = 49.9; // cm
1620 Double_t frontSideEpoxideFramePart_ZSize = 1.6; // cm
1621
1622 Double_t frontSideEpoxideFrame_XDistBetweenParts = 162.7; // cm
1623
1624 TGeoShape* frontSideEpoxideFramePartS =
1625 new TGeoBBox(TString("frontSideEpoxideFramePartS") += TString("_") + frames->GetName(),
1626 frontSideEpoxideFramePart_XSize * 0.5, frontSideEpoxideFramePart_YSize * 0.5,
1627 frontSideEpoxideFramePart_ZSize * 0.5);
1628
1629 TGeoTranslation* frontSideEpoxideFramePart_pos1 = new TGeoTranslation();
1630 frontSideEpoxideFramePart_pos1->SetName("frontSideEpoxideFramePart_pos1");
1631 frontSideEpoxideFramePart_pos1->SetDx(
1632 +(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
1633 frontSideEpoxideFramePart_pos1->SetDy(0.0);
1634 frontSideEpoxideFramePart_pos1->SetDz(0.0);
1635 frontSideEpoxideFramePart_pos1->RegisterYourself();
1636
1637 TGeoTranslation* frontSideEpoxideFramePart_pos2 = new TGeoTranslation();
1638 frontSideEpoxideFramePart_pos2->SetName("frontSideEpoxideFramePart_pos2");
1639 frontSideEpoxideFramePart_pos2->SetDx(
1640 -(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
1641 frontSideEpoxideFramePart_pos2->SetDy(0.0);
1642 frontSideEpoxideFramePart_pos2->SetDz(0.0);
1643 frontSideEpoxideFramePart_pos2->RegisterYourself();
1644
1645 TGeoCompositeShape* frontSideEpoxideFrameS = new TGeoCompositeShape();
1646 frontSideEpoxideFrameS->SetName(TString("frontSideEpoxideFrameS") += TString("_") + frames->GetName());
1647 {
1648 TString expression = "frontSideEpoxideFramePartS";
1649 expression += TString("_") + frames->GetName();
1650 expression += ":frontSideEpoxideFramePart_pos1";
1651 expression += "+frontSideEpoxideFramePartS";
1652 expression += TString("_") + frames->GetName();
1653 expression += ":frontSideEpoxideFramePart_pos2";
1654
1655 frontSideEpoxideFrameS->MakeNode(expression);
1656 frontSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1657 }
1658
1659 TGeoVolume* frontSideEpoxideFrameV =
1660 new TGeoVolume(TString("frontSideEpoxideFrameV") += TString("_") + frames->GetName(), frontSideEpoxideFrameS);
1661
1662 // volume medium
1663 TGeoMedium* frontSideEpoxideFrameV_medium = pMedEpoxideCompound;
1664 if (frontSideEpoxideFrameV_medium) {
1665 frontSideEpoxideFrameV->SetMedium(frontSideEpoxideFrameV_medium);
1666 } else
1667 Fatal("Main", "Invalid medium for frontSideEpoxideFrameV!");
1668
1669 // volume visual property (transparency)
1670 frontSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1671 frontSideEpoxideFrameV->SetTransparency(0);
1672
1673 TGeoCombiTrans* frontSideEpoxideFrame_transf[1];
1674
1675 frontSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
1676 frontSideEpoxideFrame_transf[0]->SetDx(0.0);
1677 frontSideEpoxideFrame_transf[0]->SetDy(+((frontSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1678 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1679 frontSideEpoxideFrame_transf[0]->SetDz(-(frontSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5)
1680 - 0.1);
1681
1682 frames->AddNode(frontSideEpoxideFrameV, 0, frontSideEpoxideFrame_transf[0]);
1683 //--------------------------------------------------------------------------
1684
1685 // front upper epoxide frame -------------------------------------------------
1686 Double_t frontUpperEpoxideFrame_XSize = 161.7; // cm
1687 Double_t frontUpperEpoxideFrame_YSize = 3.5; // cm
1688 Double_t frontUpperEpoxideFrame_ZSize = 1.6; // cm
1689
1690 TGeoShape* frontUpperEpoxideFrameS =
1691 new TGeoBBox("frontUpperEpoxideFrameS", frontUpperEpoxideFrame_XSize * 0.5, frontUpperEpoxideFrame_YSize * 0.5,
1692 frontUpperEpoxideFrame_ZSize * 0.5);
1693
1694 TGeoVolume* frontUpperEpoxideFrameV =
1695 new TGeoVolume(TString("frontUpperEpoxideFrameV") += TString("_") + frames->GetName(), frontUpperEpoxideFrameS);
1696
1697 // volume medium
1698 TGeoMedium* frontUpperEpoxideFrameV_medium = pMedEpoxideCompound;
1699 if (frontUpperEpoxideFrameV_medium) {
1700 frontUpperEpoxideFrameV->SetMedium(frontUpperEpoxideFrameV_medium);
1701 } else
1702 Fatal("Main", "Invalid medium for frontUpperEpoxideFrameV!");
1703
1704 // volume visual property (transparency)
1705 frontUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1706 frontUpperEpoxideFrameV->SetTransparency(0);
1707
1708 TGeoCombiTrans* frontUpperEpoxideFrame_transf[1];
1709
1710 frontUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
1711 frontUpperEpoxideFrame_transf[0]->SetDx(0.0);
1712 frontUpperEpoxideFrame_transf[0]->SetDy(+(frontUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1713 - 0.6 /*shift*/);
1714 frontUpperEpoxideFrame_transf[0]->SetDz(-(frontUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5)
1715 - 0.068);
1716
1717 frames->AddNode(frontUpperEpoxideFrameV, 0, frontUpperEpoxideFrame_transf[0]);
1718 //--------------------------------------------------------------------------
1719
1720 // alum. cable support ------------------------------------------------------
1721 Double_t alumCableSupportPart_XSize = 3.0; // cm
1722 Double_t alumCableSupportPart_YSize = 41.3; // cm
1723 Double_t alumCableSupportPart_ZSize = 0.2; // cm
1724
1725 Double_t alumCableSupport_XDistBetweenParts = 164.82; // cm
1726
1727 TGeoShape* alumCableSupportPartS = new TGeoBBox(
1728 TString("alumCableSupportPartS") += TString("_") + frames->GetName(), alumCableSupportPart_XSize * 0.5,
1729 alumCableSupportPart_YSize * 0.5, alumCableSupportPart_ZSize * 0.5);
1730
1731 TGeoTranslation* alumCableSupportPart_pos1 = new TGeoTranslation();
1732 alumCableSupportPart_pos1->SetName("alumCableSupportPart_pos1");
1733 alumCableSupportPart_pos1->SetDx(+(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
1734 alumCableSupportPart_pos1->SetDy(0.0);
1735 alumCableSupportPart_pos1->SetDz(0.0);
1736 alumCableSupportPart_pos1->RegisterYourself();
1737
1738 TGeoTranslation* alumCableSupportPart_pos2 = new TGeoTranslation();
1739 alumCableSupportPart_pos2->SetName("alumCableSupportPart_pos2");
1740 alumCableSupportPart_pos2->SetDx(-(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
1741 alumCableSupportPart_pos2->SetDy(0.0);
1742 alumCableSupportPart_pos2->SetDz(0.0);
1743 alumCableSupportPart_pos2->RegisterYourself();
1744
1745 TGeoCompositeShape* alumCableSupportS = new TGeoCompositeShape();
1746 alumCableSupportS->SetName(TString("alumCableSupportS") += TString("_") + frames->GetName());
1747 {
1748 TString expression = "alumCableSupportPartS";
1749 expression += TString("_") + frames->GetName();
1750 expression += ":alumCableSupportPart_pos1";
1751 expression += "+alumCableSupportPartS";
1752 expression += TString("_") + frames->GetName();
1753 expression += ":alumCableSupportPart_pos2";
1754
1755 alumCableSupportS->MakeNode(expression);
1756 alumCableSupportS->ComputeBBox(); // need to compute a bounding box
1757 }
1758
1759 TGeoVolume* alumCableSupportV =
1760 new TGeoVolume(TString("alumCableSupportV") += TString("_") + frames->GetName(), alumCableSupportS);
1761
1762 // volume medium
1763 TGeoMedium* alumCableSupportV_medium = pMedAluminium;
1764 if (alumCableSupportV_medium) {
1765 alumCableSupportV->SetMedium(alumCableSupportV_medium);
1766 } else
1767 Fatal("Main", "Invalid medium for alumCableSupportV!");
1768
1769 // volume visual property (transparency)
1770 alumCableSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
1771 alumCableSupportV->SetTransparency(0);
1772
1773 TGeoCombiTrans* alumCableSupport_transf[1];
1774
1775 alumCableSupport_transf[0] = new TGeoCombiTrans();
1776 alumCableSupport_transf[0]->SetDx(0.0);
1777 alumCableSupport_transf[0]->SetDy(+((alumCableSupportPart_YSize - YModuleSize_Station163x45) * 0.5)
1778 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1779 alumCableSupport_transf[0]->SetDz(-(alumCableSupportPart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5
1780 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
1781
1782 frames->AddNode(alumCableSupportV, 0, alumCableSupport_transf[0]);
1783 //--------------------------------------------------------------------------
1784
1785 // amplifier upper block ----------------------------------------------------
1786 Double_t amplifierUpperBlockPart1_XSize = 161.44; // cm
1787 Double_t amplifierUpperBlockPart1_YSize = 0.6; // cm
1788 Double_t amplifierUpperBlockPart1_ZSize = 8.41; // cm
1789
1790 Double_t amplifierUpperBlockPart2_XSize = 161.16; // cm
1791 Double_t amplifierUpperBlockPart2_YSize = 0.6; // cm
1792 Double_t amplifierUpperBlockPart2_ZSize = 8.41; // cm
1793
1794 TGeoShape* amplifierUpperBlockPart1S = new TGeoBBox(
1795 TString("amplifierUpperBlockPart1S") += TString("_") + frames->GetName(), amplifierUpperBlockPart1_XSize * 0.5,
1796 amplifierUpperBlockPart1_YSize * 0.5, amplifierUpperBlockPart1_ZSize * 0.5);
1797 TGeoShape* amplifierUpperBlockPart2S = new TGeoBBox(
1798 TString("amplifierUpperBlockPart2S") += TString("_") + frames->GetName(), amplifierUpperBlockPart2_XSize * 0.5,
1799 amplifierUpperBlockPart2_YSize * 0.5, amplifierUpperBlockPart2_ZSize * 0.5);
1800
1801 TGeoTranslation* amplifierUpperBlockPart1_pos = new TGeoTranslation();
1802 amplifierUpperBlockPart1_pos->SetName("amplifierUpperBlockPart1_pos");
1803 amplifierUpperBlockPart1_pos->SetDx(0.0);
1804 amplifierUpperBlockPart1_pos->SetDy(0.0);
1805 amplifierUpperBlockPart1_pos->SetDz(0.0);
1806 amplifierUpperBlockPart1_pos->RegisterYourself();
1807
1808 TGeoTranslation* amplifierUpperBlockPart2_pos = new TGeoTranslation();
1809 amplifierUpperBlockPart2_pos->SetName("amplifierUpperBlockPart2_pos");
1810 amplifierUpperBlockPart2_pos->SetDx(-0.76);
1811 amplifierUpperBlockPart2_pos->SetDy(
1812 -(amplifierUpperBlockPart1_YSize * 0.5 + amplifierUpperBlockPart2_YSize * 0.5 + 0.33));
1813 amplifierUpperBlockPart2_pos->SetDz(0.0);
1814 amplifierUpperBlockPart2_pos->RegisterYourself();
1815
1816 TGeoCompositeShape* amplifierUpperBlockS = new TGeoCompositeShape();
1817 amplifierUpperBlockS->SetName(TString("amplifierUpperBlockS") += TString("_") + frames->GetName());
1818 {
1819 TString expression = "amplifierUpperBlockPart1S";
1820 expression += TString("_") + frames->GetName();
1821 expression += ":amplifierUpperBlockPart1_pos";
1822 expression += "+amplifierUpperBlockPart1S";
1823 expression += TString("_") + frames->GetName();
1824 expression += ":amplifierUpperBlockPart2_pos";
1825
1826 amplifierUpperBlockS->MakeNode(expression);
1827 amplifierUpperBlockS->ComputeBBox(); // need to compute a bounding box
1828 }
1829
1830 TGeoVolume* amplifierUpperBlockV =
1831 new TGeoVolume(TString("amplifierUpperBlockV") += TString("_") + frames->GetName(), amplifierUpperBlockS);
1832
1833 // volume medium
1834 TGeoMedium* amplifierUpperBlockV_medium = pMedFiberGlass;
1835 if (amplifierUpperBlockV_medium) {
1836 amplifierUpperBlockV->SetMedium(amplifierUpperBlockV_medium);
1837 } else
1838 Fatal("Main", "Invalid medium for amplifierUpperBlockV!");
1839
1840 // volume visual property (transparency)
1841 amplifierUpperBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1842 amplifierUpperBlockV->SetTransparency(0);
1843
1844 TGeoCombiTrans* amplifierUpperBlock_transf[1];
1845
1846 amplifierUpperBlock_transf[0] = new TGeoCombiTrans();
1847 amplifierUpperBlock_transf[0]->SetDx(0.0);
1848 amplifierUpperBlock_transf[0]->SetDy(+(YModuleSize_Station163x45 * 0.5 + backUpperEpoxideFrame_YSize)
1849 - 1.0 /*shift*/);
1850 amplifierUpperBlock_transf[0]->SetDz(-(amplifierUpperBlockPart1_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
1851
1852 frames->AddNode(amplifierUpperBlockV, 0, amplifierUpperBlock_transf[0]);
1853 //--------------------------------------------------------------------------
1854
1855 // amplifier side block -----------------------------------------------------
1856 Double_t amplifierSideBlockPartBig_XSize = 0.6; // cm
1857 Double_t amplifierSideBlockPartBig_YSize = 33.9; // cm
1858 Double_t amplifierSideBlockPartBig_ZSize = 8.41; // cm
1859
1860 Double_t amplifierSideBlockPartSmall_XSize = 0.6; // cm
1861 Double_t amplifierSideBlockPartSmall_YSize = 27.05; // cm
1862 Double_t amplifierSideBlockPartSmall_ZSize = 8.41; // cm
1863
1864 TGeoShape* amplifierSideBlockPartBigS =
1865 new TGeoBBox(TString("amplifierSideBlockPartBigS") += TString("_") + frames->GetName(),
1866 amplifierSideBlockPartBig_XSize * 0.5, amplifierSideBlockPartBig_YSize * 0.5,
1867 amplifierSideBlockPartBig_ZSize * 0.5);
1868 TGeoShape* amplifierSideBlockPartSmallS =
1869 new TGeoBBox(TString("amplifierSideBlockPartSmallS") += TString("_") + frames->GetName(),
1870 amplifierSideBlockPartSmall_XSize * 0.5, amplifierSideBlockPartSmall_YSize * 0.5,
1871 amplifierSideBlockPartSmall_ZSize * 0.5);
1872
1873 TGeoTranslation* amplifierSideBlockPartBig_pos = new TGeoTranslation();
1874 amplifierSideBlockPartBig_pos->SetName("amplifierSideBlockPartBig_pos");
1875 amplifierSideBlockPartBig_pos->SetDx(0.0);
1876 amplifierSideBlockPartBig_pos->SetDy(0.0);
1877 amplifierSideBlockPartBig_pos->SetDz(0.0);
1878 amplifierSideBlockPartBig_pos->RegisterYourself();
1879
1880 TGeoTranslation* amplifierSideBlockPartSmall_pos = new TGeoTranslation();
1881 amplifierSideBlockPartSmall_pos->SetName("amplifierSideBlockPartSmall_pos");
1882 amplifierSideBlockPartSmall_pos->SetDx(
1883 +(amplifierSideBlockPartBig_XSize * 0.5 + amplifierSideBlockPartSmall_XSize * 0.5 + 1.72));
1884 amplifierSideBlockPartSmall_pos->SetDy(+0.05);
1885 amplifierSideBlockPartSmall_pos->SetDz(0.0);
1886 amplifierSideBlockPartSmall_pos->RegisterYourself();
1887
1888 TGeoCompositeShape* amplifierSideBlockS = new TGeoCompositeShape();
1889 amplifierSideBlockS->SetName(TString("amplifierSideBlockS") += TString("_") + frames->GetName());
1890 {
1891 TString expression = "amplifierSideBlockPartBigS";
1892 expression += TString("_") + frames->GetName();
1893 expression += ":amplifierSideBlockPartBig_pos";
1894 expression += "+amplifierSideBlockPartSmallS";
1895 expression += TString("_") + frames->GetName();
1896 expression += ":amplifierSideBlockPartSmall_pos";
1897
1898 amplifierSideBlockS->MakeNode(expression);
1899 amplifierSideBlockS->ComputeBBox(); // need to compute a bounding box
1900 }
1901
1902 TGeoVolume* amplifierSideBlockV =
1903 new TGeoVolume(TString("amplifierSideBlockV") += TString("_") + frames->GetName(), amplifierSideBlockS);
1904
1905 // volume medium
1906 TGeoMedium* amplifierSideBlockV_medium = pMedFiberGlass;
1907 if (amplifierSideBlockV_medium) {
1908 amplifierSideBlockV->SetMedium(amplifierSideBlockV_medium);
1909 } else
1910 Fatal("Main", "Invalid medium for amplifierSideBlockV!");
1911
1912 // volume visual property (transparency)
1913 amplifierSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1914 amplifierSideBlockV->SetTransparency(0);
1915
1916 TGeoCombiTrans* amplifierSideBlock_transf[2];
1917
1918 amplifierSideBlock_transf[0] = new TGeoCombiTrans();
1919 amplifierSideBlock_transf[0]->SetDx(+86.47 /*shift*/);
1920 amplifierSideBlock_transf[0]->SetDy(-5.5);
1921 amplifierSideBlock_transf[0]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5
1922 - 0.4 /*shift*/);
1923
1924 amplifierSideBlock_transf[1] = new TGeoCombiTrans();
1925 amplifierSideBlock_transf[1]->RotateY(180.0);
1926 amplifierSideBlock_transf[1]->SetDx(-86.47 /*shift*/);
1927 amplifierSideBlock_transf[1]->SetDy(-5.5);
1928 amplifierSideBlock_transf[1]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5
1929 - 0.4 /*shift*/);
1930
1931 frames->AddNode(amplifierSideBlockV, 0, amplifierSideBlock_transf[0]);
1932 frames->AddNode(amplifierSideBlockV, 1, amplifierSideBlock_transf[1]);
1933 //--------------------------------------------------------------------------
1934
1935 // upper PCB (Printed Circuit Board) ----------------------------------------
1936 Double_t upperPcb_XSize = 177.22; // cm
1937 Double_t upperPcb_YSize = 0.3; // cm
1938 Double_t upperPcb_ZSize = 4.0; // cm
1939
1940 TGeoShape* upperPcbS = new TGeoBBox("upperPcbS", upperPcb_XSize * 0.5, upperPcb_YSize * 0.5, upperPcb_ZSize * 0.5);
1941
1942 TGeoVolume* upperPcbV = new TGeoVolume(TString("upperPcbV") += TString("_") + frames->GetName(), upperPcbS);
1943
1944 // volume medium
1945 TGeoMedium* upperPcbV_medium = pMedFiberGlass;
1946 if (upperPcbV_medium) {
1947 upperPcbV->SetMedium(upperPcbV_medium);
1948 } else
1949 Fatal("Main", "Invalid medium for upperPcbV!");
1950
1951 // volume visual property (transparency)
1952 upperPcbV->SetLineColor(TColor::GetColor("#88ff88"));
1953 upperPcbV->SetTransparency(0);
1954
1955 TGeoCombiTrans* upperPcb_transf[1];
1956
1957 upperPcb_transf[0] = new TGeoCombiTrans();
1958 upperPcb_transf[0]->SetDx(+0.1 /*shift*/);
1959 upperPcb_transf[0]->SetDy(+(upperPcb_YSize * 0.5 + 23.5 /*shift*/));
1960 upperPcb_transf[0]->SetDz(-(upperPcb_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5 - ZModuleSize_Station163x45
1961 - frontSideEpoxideFramePart_ZSize - 0.1);
1962
1963 frames->AddNode(upperPcbV, 0, upperPcb_transf[0]);
1964 //--------------------------------------------------------------------------
1965
1966 // side PCB -----------------------------------------------------------------
1967 Double_t sidePcbPart_XSize = 0.3; // cm
1968 Double_t sidePcbPart_YSize = 35.05; // cm
1969 Double_t sidePcbPart_ZSize = 4.0; // cm
1970
1971 TGeoShape* sidePcbPartS = new TGeoBBox(TString("sidePcbPartS") += TString("_") + frames->GetName(),
1972 sidePcbPart_XSize * 0.5, sidePcbPart_YSize * 0.5, sidePcbPart_ZSize * 0.5);
1973
1974 TGeoTranslation* sidePcbPart_pos1 = new TGeoTranslation();
1975 sidePcbPart_pos1->SetName("sidePcbPart_pos1");
1976 sidePcbPart_pos1->SetDx(0.0);
1977 sidePcbPart_pos1->SetDy(0.0);
1978 sidePcbPart_pos1->SetDz(0.0);
1979 sidePcbPart_pos1->RegisterYourself();
1980
1981 TGeoTranslation* sidePcbPart_pos2 = new TGeoTranslation();
1982 sidePcbPart_pos2->SetName("sidePcbPart_pos2");
1983 sidePcbPart_pos2->SetDx(+(sidePcbPart_XSize + 6.1 /*shift*/));
1984 sidePcbPart_pos2->SetDy(0.0);
1985 sidePcbPart_pos2->SetDz(0.0);
1986 sidePcbPart_pos2->RegisterYourself();
1987
1988 TGeoCompositeShape* sidePcbS = new TGeoCompositeShape();
1989 sidePcbS->SetName(TString("sidePcbS") += TString("_") + frames->GetName());
1990 {
1991 TString expression = "sidePcbPartS";
1992 expression += TString("_") + frames->GetName();
1993 expression += ":sidePcbPart_pos1";
1994 expression += "+sidePcbPartS";
1995 expression += TString("_") + frames->GetName();
1996 expression += ":sidePcbPart_pos2";
1997
1998 sidePcbS->MakeNode(expression);
1999 sidePcbS->ComputeBBox(); // need to compute a bounding box
2000 }
2001
2002 TGeoVolume* sidePcbV = new TGeoVolume(TString("sidePcbV") += TString("_") + frames->GetName(), sidePcbS);
2003
2004 // volume medium
2005 TGeoMedium* sidePcbV_medium = pMedFiberGlass;
2006 if (sidePcbV_medium) {
2007 sidePcbV->SetMedium(sidePcbV_medium);
2008 } else
2009 Fatal("Main", "Invalid medium for sidePcbV!");
2010
2011 // volume visual property (transparency)
2012 sidePcbV->SetLineColor(TColor::GetColor("#88ff88"));
2013 sidePcbV->SetTransparency(0);
2014
2015 TGeoCombiTrans* sidePcb_transf[2];
2016
2017 sidePcb_transf[0] = new TGeoCombiTrans();
2018 sidePcb_transf[0]->SetDx(+(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
2019 sidePcb_transf[0]->SetDy(-6.8 /*shift*/);
2020 sidePcb_transf[0]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
2021 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
2022
2023 sidePcb_transf[1] = new TGeoCombiTrans();
2024 sidePcb_transf[1]->RotateY(180.0);
2025 sidePcb_transf[1]->SetDx(-(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
2026 sidePcb_transf[1]->SetDy(-6.8 /*shift*/);
2027 sidePcb_transf[1]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
2028 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
2029
2030 frames->AddNode(sidePcbV, 0, sidePcb_transf[0]);
2031 frames->AddNode(sidePcbV, 1, sidePcb_transf[1]);
2032 //--------------------------------------------------------------------------
2033
2034 // alum. side support -------------------------------------------------------
2035 Double_t alumSideSupport_XSize = 4.8; // cm
2036 Double_t alumSideSupport_YSize = 52.6; // cm
2037 Double_t alumSideSupport_ZSize = 0.4; // cm
2038
2039 TGeoShape* alumSideSupportS = new TGeoBBox("alumSideSupportS", alumSideSupport_XSize * 0.5,
2040 alumSideSupport_YSize * 0.5, alumSideSupport_ZSize * 0.5);
2041
2042 TGeoVolume* alumSideSupportV =
2043 new TGeoVolume(TString("alumSideSupportV") += TString("_") + frames->GetName(), alumSideSupportS);
2044
2045 // volume medium
2046 TGeoMedium* alumSideSupportV_medium = pMedAluminium;
2047 if (alumSideSupportV_medium) {
2048 alumSideSupportV->SetMedium(alumSideSupportV_medium);
2049 } else
2050 Fatal("Main", "Invalid medium for alumSideSupportV!");
2051
2052 // volume visual property (transparency)
2053 alumSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
2054 alumSideSupportV->SetTransparency(0);
2055
2056 TGeoCombiTrans* alumSideSupport_transf[2];
2057
2058 alumSideSupport_transf[0] = new TGeoCombiTrans();
2059 alumSideSupport_transf[0]->SetDx(+(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
2060 alumSideSupport_transf[0]->SetDy(+1.8);
2061 alumSideSupport_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
2062
2063 alumSideSupport_transf[1] = new TGeoCombiTrans();
2064 alumSideSupport_transf[1]->SetDx(-(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
2065 alumSideSupport_transf[1]->SetDy(+1.8 /*shift*/);
2066 alumSideSupport_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
2067
2068 frames->AddNode(alumSideSupportV, 0, alumSideSupport_transf[0]);
2069 frames->AddNode(alumSideSupportV, 1, alumSideSupport_transf[1]);
2070 //--------------------------------------------------------------------------
2071
2072 // bosch shape --------------------------------------------------------------
2073 Double_t boschShape_XSize = 2.25; // cm
2074 Double_t boschShape_YSize = 52.6; // cm
2075 Double_t boschShape_ZSize = 2.25; // cm
2076
2077 TGeoShape* boschShapeS =
2078 new TGeoBBox("boschShapeS", boschShape_XSize * 0.5, boschShape_YSize * 0.5, boschShape_ZSize * 0.5);
2079
2080 TGeoVolume* boschShapeV = new TGeoVolume(TString("boschShapeV") += TString("_") + frames->GetName(), boschShapeS);
2081
2082 // volume medium
2083 TGeoMedium* boschShapeV_medium = pMedAluminium;
2084 if (boschShapeV_medium) {
2085 boschShapeV->SetMedium(boschShapeV_medium);
2086 } else
2087 Fatal("Main", "Invalid medium for boschShapeV!");
2088
2089 // volume visual property (transparency)
2090 boschShapeV->SetLineColor(TColor::GetColor("#ffcccc"));
2091 boschShapeV->SetTransparency(0);
2092
2093 TGeoCombiTrans* boschShape_transf[2];
2094
2095 boschShape_transf[0] = new TGeoCombiTrans();
2096 boschShape_transf[0]->SetDx(+(boschShape_XSize * 0.5 + 90.86 /*shift*/));
2097 boschShape_transf[0]->SetDy(+1.8 /*shift*/);
2098 boschShape_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
2099
2100 boschShape_transf[1] = new TGeoCombiTrans();
2101 boschShape_transf[1]->SetDx(-(boschShape_XSize * 0.5 + 90.86 /*shift*/));
2102 boschShape_transf[1]->SetDy(+1.8 /*shift*/);
2103 boschShape_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
2104
2105 // frames->AddNode(boschShapeV, 0, boschShape_transf[0]);
2106 // frames->AddNode(boschShapeV, 1, boschShape_transf[1]);
2107 //--------------------------------------------------------------------------
2108
2109 // polyacetal shape ---------------------------------------------------------
2110 Double_t insidePolyacetalShapeUpper_XSize = 11.46; // cm
2111 Double_t insidePolyacetalShapeUpper_YSize = 52.6; // cm
2112 Double_t insidePolyacetalShapeUpper_ZSize = 3.0; // cm
2113 Double_t insidePolyacetalShapeUpper_XDistBetweenParts = 186.22; // cm
2114
2115 Double_t outsidePolyacetalShapeUpper_XSize = 23.5; // cm
2116 Double_t outsidePolyacetalShapeUpper_YSize = 5.405; // cm
2117 Double_t outsidePolyacetalShapeUpper_ZSize = 3.0; // cm
2118 Double_t outsidePolyacetalShapeUpper_XDistBetweenParts = 209.14; // cm
2119
2120 Double_t insidePolyacetalShapeLower_XSize = 8.4; // cm
2121 Double_t insidePolyacetalShapeLower_YSize = 52.6; // cm
2122 Double_t insidePolyacetalShapeLower_ZSize = 3.0; // cm
2123 Double_t insidePolyacetalShapeLower_XDistBetweenParts = 186.22; // cm
2124
2125 Double_t outsidePolyacetalShapeLower_XSize = 26.7; // cm
2126 Double_t outsidePolyacetalShapeLower_YSize = 24.4; // cm
2127 Double_t outsidePolyacetalShapeLower_ZSize = 3.0; // cm
2128 Double_t outsidePolyacetalShapeLower_XDistBetweenParts = 203.02; // cm
2129
2130 TGeoShape* insidePolyacetalShapeUpperS =
2131 new TGeoBBox("insidePolyacetalShapeUpperS", insidePolyacetalShapeUpper_XSize * 0.5,
2132 insidePolyacetalShapeUpper_YSize * 0.5, insidePolyacetalShapeUpper_ZSize * 0.5);
2133 TGeoShape* outsidePolyacetalShapeUpperS =
2134 new TGeoBBox("outsidePolyacetalShapeUpperS", outsidePolyacetalShapeUpper_XSize * 0.5,
2135 outsidePolyacetalShapeUpper_YSize * 0.5, outsidePolyacetalShapeUpper_ZSize * 0.5);
2136 TGeoShape* insidePolyacetalShapeLowerS =
2137 new TGeoBBox("insidePolyacetalShapeLowerS", insidePolyacetalShapeLower_XSize * 0.5,
2138 insidePolyacetalShapeLower_YSize * 0.5, insidePolyacetalShapeLower_ZSize * 0.5);
2139 TGeoShape* outsidePolyacetalShapeLowerS =
2140 new TGeoBBox("outsidePolyacetalShapeLowerS", outsidePolyacetalShapeLower_XSize * 0.5,
2141 outsidePolyacetalShapeLower_YSize * 0.5, outsidePolyacetalShapeLower_ZSize * 0.5);
2142
2143 TGeoVolume* insidePolyacetalShapeUpperV = new TGeoVolume(
2144 TString("insidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), insidePolyacetalShapeUpperS);
2145 TGeoVolume* outsidePolyacetalShapeUpperV = new TGeoVolume(
2146 TString("outsidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), outsidePolyacetalShapeUpperS);
2147 TGeoVolume* insidePolyacetalShapeLowerV = new TGeoVolume(
2148 TString("insidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), insidePolyacetalShapeLowerS);
2149 TGeoVolume* outsidePolyacetalShapeLowerV = new TGeoVolume(
2150 TString("outsidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), outsidePolyacetalShapeLowerS);
2151
2152 // volume medium
2153 TGeoMedium* polyacetalShapeV_medium = pMedPolyacetal;
2154 if (polyacetalShapeV_medium) {
2155 insidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
2156 outsidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
2157 insidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
2158 outsidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
2159 } else
2160 Fatal("Main", "Invalid medium for insidePolyacetalShapeUpperV!");
2161
2162 // volume visual property (transparency)
2163 insidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
2164 insidePolyacetalShapeUpperV->SetTransparency(0);
2165 outsidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
2166 outsidePolyacetalShapeUpperV->SetTransparency(0);
2167 insidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
2168 insidePolyacetalShapeLowerV->SetTransparency(0);
2169 outsidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
2170 outsidePolyacetalShapeLowerV->SetTransparency(0);
2171
2172 TGeoCombiTrans* insidePolyacetalShapeUpper_transf[2];
2173
2174 insidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
2175 insidePolyacetalShapeUpper_transf[0]->SetDx(
2176 +(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2177 insidePolyacetalShapeUpper_transf[0]->SetDy(+1.8 /*shift*/);
2178 insidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
2179
2180 insidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
2181 insidePolyacetalShapeUpper_transf[1]->SetDx(
2182 -(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2183 insidePolyacetalShapeUpper_transf[1]->SetDy(+1.8 /*shift*/);
2184 insidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
2185
2186 TGeoCombiTrans* outsidePolyacetalShapeUpper_transf[2];
2187
2188 outsidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
2189 outsidePolyacetalShapeUpper_transf[0]->SetDx(
2190 +(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2191 outsidePolyacetalShapeUpper_transf[0]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
2192 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
2193 outsidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
2194
2195 outsidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
2196 outsidePolyacetalShapeUpper_transf[1]->SetDx(
2197 -(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2198 outsidePolyacetalShapeUpper_transf[1]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
2199 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
2200 outsidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
2201
2202 TGeoCombiTrans* insidePolyacetalShapeLower_transf[2];
2203
2204 insidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
2205 insidePolyacetalShapeLower_transf[0]->SetDx(
2206 +(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2207 insidePolyacetalShapeLower_transf[0]->SetDy(+1.8 /*shift*/);
2208 insidePolyacetalShapeLower_transf[0]->SetDz(0.0);
2209
2210 insidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
2211 insidePolyacetalShapeLower_transf[1]->SetDx(
2212 -(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2213 insidePolyacetalShapeLower_transf[1]->SetDy(+1.8 /*shift*/);
2214 insidePolyacetalShapeLower_transf[1]->SetDz(0.0);
2215
2216 TGeoCombiTrans* outsidePolyacetalShapeLower_transf[2];
2217
2218 outsidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
2219 outsidePolyacetalShapeLower_transf[0]->SetDx(
2220 +(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2221 outsidePolyacetalShapeLower_transf[0]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
2222 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
2223 outsidePolyacetalShapeLower_transf[0]->SetDz(0.0);
2224
2225 outsidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
2226 outsidePolyacetalShapeLower_transf[1]->SetDx(
2227 -(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2228 outsidePolyacetalShapeLower_transf[1]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
2229 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
2230 outsidePolyacetalShapeLower_transf[1]->SetDz(0.0);
2231
2232 if (TString(frames->GetName()).Contains("upper")) {
2233 frames->AddNode(insidePolyacetalShapeUpperV, 0, insidePolyacetalShapeUpper_transf[0]);
2234 frames->AddNode(insidePolyacetalShapeUpperV, 1, insidePolyacetalShapeUpper_transf[1]);
2235 frames->AddNode(outsidePolyacetalShapeUpperV, 0, outsidePolyacetalShapeUpper_transf[0]);
2236 frames->AddNode(outsidePolyacetalShapeUpperV, 1, outsidePolyacetalShapeUpper_transf[1]);
2237 }
2238
2239 if (TString(frames->GetName()).Contains("lower")) {
2240 frames->AddNode(insidePolyacetalShapeLowerV, 0, insidePolyacetalShapeLower_transf[0]);
2241 frames->AddNode(insidePolyacetalShapeLowerV, 1, insidePolyacetalShapeLower_transf[1]);
2242 frames->AddNode(outsidePolyacetalShapeLowerV, 0, outsidePolyacetalShapeLower_transf[0]);
2243 frames->AddNode(outsidePolyacetalShapeLowerV, 1, outsidePolyacetalShapeLower_transf[1]);
2244 }
2245
2246 //--------------------------------------------------------------------------
2247
2248 // lower fiberglass block ---------------------------------------------------
2249 Double_t lowerFiberGlassBlock_XSize = 165.1; // cm
2250 Double_t lowerFiberGlassBlock_YSize = 1.75; // cm
2251 Double_t lowerFiberGlassBlock_ZSize = 0.9; // cm
2252
2253 Double_t lowerFiberGlassBlockArch_Rmin = 4.0;
2254 Double_t lowerFiberGlassBlockArch_Rmax = 5.75;
2255 Double_t lowerFiberGlassBlockArch_ZSize = lowerFiberGlassBlock_ZSize;
2256
2257 TGeoShape* lowerFiberGlassBlockHalfS =
2258 new TGeoBBox(TString("lowerFiberGlassBlockHalfS") += TString("_") + frames->GetName(),
2259 (lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5,
2260 lowerFiberGlassBlock_YSize * 0.5, lowerFiberGlassBlock_ZSize * 0.5);
2261 TGeoShape* lowerFiberGlassBlockArchS = new TGeoTubeSeg(
2262 TString("lowerFiberGlassBlockArchS") += TString("_") + frames->GetName(), lowerFiberGlassBlockArch_Rmin,
2263 lowerFiberGlassBlockArch_Rmax, lowerFiberGlassBlockArch_ZSize * 0.5, 0.0, 180.0);
2264
2265 TGeoTranslation* lowerFiberGlassBlockHalf_pos1 = new TGeoTranslation();
2266 lowerFiberGlassBlockHalf_pos1->SetName("lowerFiberGlassBlockHalf_pos1");
2267 lowerFiberGlassBlockHalf_pos1->SetDx(
2268 +((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
2269 lowerFiberGlassBlockHalf_pos1->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
2270 lowerFiberGlassBlockHalf_pos1->SetDz(0.0);
2271 lowerFiberGlassBlockHalf_pos1->RegisterYourself();
2272
2273 TGeoTranslation* lowerFiberGlassBlockHalf_pos2 = new TGeoTranslation();
2274 lowerFiberGlassBlockHalf_pos2->SetName("lowerFiberGlassBlockHalf_pos2");
2275 lowerFiberGlassBlockHalf_pos2->SetDx(
2276 -((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
2277 lowerFiberGlassBlockHalf_pos2->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
2278 lowerFiberGlassBlockHalf_pos2->SetDz(0.0);
2279 lowerFiberGlassBlockHalf_pos2->RegisterYourself();
2280
2281 TGeoTranslation* lowerFiberGlassBlockArch_pos = new TGeoTranslation();
2282 lowerFiberGlassBlockArch_pos->SetName("lowerFiberGlassBlockArch_pos");
2283 lowerFiberGlassBlockArch_pos->SetDx(0.0);
2284 lowerFiberGlassBlockArch_pos->SetDy(0.0);
2285 lowerFiberGlassBlockArch_pos->SetDz(0.0);
2286 lowerFiberGlassBlockArch_pos->RegisterYourself();
2287
2288 TGeoCompositeShape* lowerFiberGlassBlockS = new TGeoCompositeShape();
2289 lowerFiberGlassBlockS->SetName(TString("lowerFiberGlassBlockS") += TString("_") + frames->GetName());
2290 {
2291 TString expression = "lowerFiberGlassBlockHalfS";
2292 expression += TString("_") + frames->GetName();
2293 expression += ":lowerFiberGlassBlockHalf_pos1";
2294 expression += "+lowerFiberGlassBlockHalfS";
2295 expression += TString("_") + frames->GetName();
2296 expression += ":lowerFiberGlassBlockHalf_pos2";
2297 expression += "+lowerFiberGlassBlockArchS";
2298 expression += TString("_") + frames->GetName();
2299 expression += ":lowerFiberGlassBlockArch_pos";
2300
2301 lowerFiberGlassBlockS->MakeNode(expression);
2302 lowerFiberGlassBlockS->ComputeBBox(); // need to compute a bounding box
2303 }
2304
2305 TGeoVolume* lowerFiberGlassBlockV =
2306 new TGeoVolume(TString("lowerFiberGlassBlockV") += TString("_") + frames->GetName(), lowerFiberGlassBlockS);
2307
2308 // volume medium
2309 TGeoMedium* lowerFiberGlassBlockV_medium = pMedFiberGlass;
2310 if (lowerFiberGlassBlockV_medium) {
2311 lowerFiberGlassBlockV->SetMedium(lowerFiberGlassBlockV_medium);
2312 } else
2313 Fatal("Main", "Invalid medium for lowerFiberGlassBlockV!");
2314
2315 // volume visual property (transparency)
2316 lowerFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
2317 lowerFiberGlassBlockV->SetTransparency(0);
2318
2319 TGeoCombiTrans* lowerFiberGlassBlock_transf[1];
2320
2321 lowerFiberGlassBlock_transf[0] = new TGeoCombiTrans();
2322 lowerFiberGlassBlock_transf[0]->SetDx(+0.0);
2323 lowerFiberGlassBlock_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5) - 0.0);
2324 lowerFiberGlassBlock_transf[0]->SetDz(0.0);
2325
2326 if (istation == 3) {
2327 lowerFiberGlassBlock_transf[0]->SetDx(lowerFiberGlassBlock_transf[0]->GetTranslation()[0] + 0.1);
2328 lowerFiberGlassBlock_transf[0]->SetDy(lowerFiberGlassBlock_transf[0]->GetTranslation()[1] - 0.3);
2329 lowerFiberGlassBlock_transf[0]->SetDz(lowerFiberGlassBlock_transf[0]->GetTranslation()[2] - 0.1);
2330 }
2331 if (istation == 1) {
2332 lowerFiberGlassBlock_transf[0]->SetDx(lowerFiberGlassBlock_transf[0]->GetTranslation()[0] + 0.0);
2333 lowerFiberGlassBlock_transf[0]->SetDy(lowerFiberGlassBlock_transf[0]->GetTranslation()[1] - 0.0);
2334 lowerFiberGlassBlock_transf[0]->SetDz(lowerFiberGlassBlock_transf[0]->GetTranslation()[2] - 0.0069);
2335 }
2336 if (istation == 5) {
2337 lowerFiberGlassBlock_transf[0]->SetDx(lowerFiberGlassBlock_transf[0]->GetTranslation()[0] + 0.0);
2338 lowerFiberGlassBlock_transf[0]->SetDy(lowerFiberGlassBlock_transf[0]->GetTranslation()[1] - 0.0);
2339 lowerFiberGlassBlock_transf[0]->SetDz(lowerFiberGlassBlock_transf[0]->GetTranslation()[2] + 0.0306);
2340 }
2341
2342 frames->AddNode(lowerFiberGlassBlockV, 0, lowerFiberGlassBlock_transf[0]);
2343 //--------------------------------------------------------------------------
2344
2345 // side fiberglass block ----------------------------------------------------
2346 Double_t sideFiberGlassBlockPart_XSize = 1.45; // cm
2347 Double_t sideFiberGlassBlockPart_YSize = 49.4; // cm
2348 Double_t sideFiberGlassBlockPart_ZSize = 0.89; // cm
2349
2350 TGeoShape* sideFiberGlassBlockS =
2351 new TGeoBBox("sideFiberGlassBlockS", sideFiberGlassBlockPart_XSize * 0.5, sideFiberGlassBlockPart_YSize * 0.5,
2352 sideFiberGlassBlockPart_ZSize * 0.5);
2353
2354 TGeoVolume* sideFiberGlassBlockV =
2355 new TGeoVolume(TString("sideFiberGlassBlockV") += TString("_") + frames->GetName(), sideFiberGlassBlockS);
2356
2357 // volume medium
2358 TGeoMedium* sideFiberGlassBlockV_medium = pMedFiberGlass;
2359 if (sideFiberGlassBlockV_medium) {
2360 sideFiberGlassBlockV->SetMedium(sideFiberGlassBlockV_medium);
2361 } else
2362 Fatal("Main", "Invalid medium for sideFiberGlassBlockV!");
2363
2364 // volume visual property (transparency)
2365 sideFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
2366 sideFiberGlassBlockV->SetTransparency(0);
2367
2368 TGeoCombiTrans* sideFiberGlassBlock_transf[2];
2369
2370 sideFiberGlassBlock_transf[0] = new TGeoCombiTrans();
2371 sideFiberGlassBlock_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5)
2372 + 0.1);
2373 sideFiberGlassBlock_transf[0]->SetDy(+0.45 /*shift*/);
2374 sideFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
2375
2376 sideFiberGlassBlock_transf[1] = new TGeoCombiTrans();
2377 sideFiberGlassBlock_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
2378 sideFiberGlassBlock_transf[1]->SetDy(+0.45 /*shift*/);
2379 sideFiberGlassBlock_transf[1]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
2380
2381 frames->AddNode(sideFiberGlassBlockV, 0, sideFiberGlassBlock_transf[0]);
2382 frames->AddNode(sideFiberGlassBlockV, 1, sideFiberGlassBlock_transf[1]);
2383 //--------------------------------------------------------------------------
2384
2385 // upper fiberglass block ---------------------------------------------------
2386 Double_t upperFiberGlassBlock_XSize = 165.1; // cm
2387 Double_t upperFiberGlassBlock_YSize = 1.45; // cm
2388 Double_t upperFiberGlassBlock_ZSize = 0.89; // cm
2389
2390 TGeoShape* upperFiberGlassBlockS = new TGeoBBox("upperFiberGlassBlockS", upperFiberGlassBlock_XSize * 0.5,
2391 upperFiberGlassBlock_YSize * 0.5, upperFiberGlassBlock_ZSize * 0.5);
2392
2393 TGeoVolume* upperFiberGlassBlockV =
2394 new TGeoVolume(TString("upperFiberGlassBlockV") += TString("_") + frames->GetName(), upperFiberGlassBlockS);
2395
2396 // volume medium
2397 TGeoMedium* upperFiberGlassBlockV_medium = pMedFiberGlass;
2398 if (upperFiberGlassBlockV_medium) {
2399 upperFiberGlassBlockV->SetMedium(upperFiberGlassBlockV_medium);
2400 } else
2401 Fatal("Main", "Invalid medium for upperFiberGlassBlockV!");
2402
2403 // volume visual property (transparency)
2404 upperFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
2405 upperFiberGlassBlockV->SetTransparency(0);
2406
2407 TGeoCombiTrans* upperFiberGlassBlock_transf[1];
2408
2409 upperFiberGlassBlock_transf[0] = new TGeoCombiTrans();
2410 upperFiberGlassBlock_transf[0]->SetDx(0.0);
2411 upperFiberGlassBlock_transf[0]->SetDy(
2412 +(sideFiberGlassBlockPart_YSize * 0.5 - upperFiberGlassBlock_YSize * 0.5 + 0.45 /*shift*/));
2413 upperFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
2414
2415 frames->AddNode(upperFiberGlassBlockV, 0, upperFiberGlassBlock_transf[0]);
2416 //--------------------------------------------------------------------------
2417
2418 // brass layer --------------------------------------------------------------
2419 Double_t upperBrasslayer_XSize = 165.1; // cm
2420 Double_t upperBrasslayer_YSize = 1.45; // cm
2421 Double_t upperBrasslayer_ZSize = 0.005; // cm
2422
2423 Double_t sideBrasslayer_XSize = 1.45; // cm
2424 Double_t sideBrasslayer_YSize = 49.4; // cm
2425 Double_t sideBrasslayer_ZSize = 0.005; // cm
2426
2427 TGeoShape* upperBrasslayerS = new TGeoBBox("upperBrasslayerS", upperBrasslayer_XSize * 0.5,
2428 upperBrasslayer_YSize * 0.5, upperBrasslayer_ZSize * 0.5);
2429 TGeoShape* sideBrasslayerS = new TGeoBBox("sideBrasslayerS", sideBrasslayer_XSize * 0.5, sideBrasslayer_YSize * 0.5,
2430 sideBrasslayer_ZSize * 0.5);
2431
2432 TGeoVolume* upperBrasslayerV =
2433 new TGeoVolume(TString("upperBrasslayerV") += TString("_") + frames->GetName(), upperBrasslayerS);
2434 TGeoVolume* sideBrasslayerV =
2435 new TGeoVolume(TString("sideBrasslayerV") += TString("_") + frames->GetName(), sideBrasslayerS);
2436
2437 // volume medium
2438 TGeoMedium* upperBrasslayerV_medium = pMedBrass;
2439 if (upperBrasslayerV_medium) {
2440 upperBrasslayerV->SetMedium(upperBrasslayerV_medium);
2441 sideBrasslayerV->SetMedium(upperBrasslayerV_medium);
2442 } else
2443 Fatal("Main", "Invalid medium for upperBrasslayerV_medium!");
2444
2445 // volume visual property (transparency)
2446 upperBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
2447 upperBrasslayerV->SetTransparency(0);
2448 sideBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
2449 sideBrasslayerV->SetTransparency(0);
2450
2451 TGeoCombiTrans* upperBrasslayer_transf[1];
2452
2453 upperBrasslayer_transf[0] = new TGeoCombiTrans();
2454 upperBrasslayer_transf[0]->SetDx(0.0);
2455 upperBrasslayer_transf[0]->SetDy(
2456 +(sideFiberGlassBlockPart_YSize * 0.5 - upperBrasslayer_YSize * 0.5 + 0.45 /*shift*/));
2457 upperBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
2458
2459 TGeoCombiTrans* sideBrasslayer_transf[2];
2460
2461 sideBrasslayer_transf[0] = new TGeoCombiTrans();
2462 sideBrasslayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
2463 sideBrasslayer_transf[0]->SetDy(+0.45 /*shift*/);
2464 sideBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
2465
2466 sideBrasslayer_transf[1] = new TGeoCombiTrans();
2467 sideBrasslayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
2468 sideBrasslayer_transf[1]->SetDy(+0.45 /*shift*/);
2469 sideBrasslayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
2470
2471 frames->AddNode(upperBrasslayerV, 0, upperBrasslayer_transf[0]);
2472
2473 frames->AddNode(sideBrasslayerV, 0, sideBrasslayer_transf[0]);
2474 frames->AddNode(sideBrasslayerV, 1, sideBrasslayer_transf[1]);
2475 //--------------------------------------------------------------------------
2476
2477 // steel layer --------------------------------------------------------------
2478 Double_t upperSteellayer_XSize = 165.1; // cm
2479 Double_t upperSteellayer_YSize = 1.45; // cm
2480 Double_t upperSteellayer_ZSize = 0.005; // cm
2481
2482 Double_t sideSteellayer_XSize = 1.45; // cm
2483 Double_t sideSteellayer_YSize = 49.4; // cm
2484 Double_t sideSteellayer_ZSize = 0.005; // cm
2485
2486 TGeoShape* upperSteellayerS = new TGeoBBox("upperSteellayerS", upperSteellayer_XSize * 0.5,
2487 upperSteellayer_YSize * 0.5, upperSteellayer_ZSize * 0.5);
2488 TGeoShape* sideSteellayerS = new TGeoBBox("sideSteellayerS", sideSteellayer_XSize * 0.5, sideSteellayer_YSize * 0.5,
2489 sideSteellayer_ZSize * 0.5);
2490
2491 TGeoVolume* upperSteellayerV =
2492 new TGeoVolume(TString("upperSteellayerV") += TString("_") + frames->GetName(), upperSteellayerS);
2493 TGeoVolume* sideSteellayerV =
2494 new TGeoVolume(TString("sideSteellayerV") += TString("_") + frames->GetName(), sideSteellayerS);
2495
2496 // volume medium
2497 TGeoMedium* upperSteellayerV_medium = pMedSteel;
2498 if (upperSteellayerV_medium) {
2499 upperSteellayerV->SetMedium(upperSteellayerV_medium);
2500 sideSteellayerV->SetMedium(upperSteellayerV_medium);
2501 } else
2502 Fatal("Main", "Invalid medium for upperSteellayerV_medium!");
2503
2504 // volume visual property (transparency)
2505 upperSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
2506 upperSteellayerV->SetTransparency(0);
2507 sideSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
2508 sideSteellayerV->SetTransparency(0);
2509
2510 TGeoCombiTrans* upperSteellayer_transf[1];
2511
2512 upperSteellayer_transf[0] = new TGeoCombiTrans();
2513 upperSteellayer_transf[0]->SetDx(0.0);
2514 upperSteellayer_transf[0]->SetDy(
2515 +(sideFiberGlassBlockPart_YSize * 0.5 - upperSteellayer_YSize * 0.5 + 0.45 /*shift*/));
2516 upperSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperSteellayer_ZSize * 0.5 + 0.005 /*shift*/);
2517
2518 TGeoCombiTrans* sideSteellayer_transf[2];
2519
2520 sideSteellayer_transf[0] = new TGeoCombiTrans();
2521 sideSteellayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
2522 sideSteellayer_transf[0]->SetDy(+0.45 /*shift*/);
2523 sideSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
2524
2525 sideSteellayer_transf[1] = new TGeoCombiTrans();
2526 sideSteellayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
2527 sideSteellayer_transf[1]->SetDy(+0.45 /*shift*/);
2528 sideSteellayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
2529
2530 frames->AddNode(upperSteellayerV, 0, upperSteellayer_transf[0]);
2531
2532 frames->AddNode(sideSteellayerV, 0, sideSteellayer_transf[0]);
2533 frames->AddNode(sideSteellayerV, 1, sideSteellayer_transf[1]);
2534 //--------------------------------------------------------------------------
2535
2536 return frames;
2537}
2538//------------------------------------------------------------------------------
2539
2541 Double_t xsize,
2542 Double_t ysize,
2543 Double_t zsize,
2544 Double_t hole_radius)
2545{
2546
2547 return CreateModule_Station163x45(module_name, xsize, ysize, zsize, hole_radius);
2548}
2549//------------------------------------------------------------------------------
2550
2552{
2553
2554 // frame volumes
2555 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
2556 layers->SetMedium(pMedAir);
2557
2558 // Common parameters for all layers
2559 Double_t layer_XSize = XModuleSize_Station163x39; // cm
2560 Double_t layer_YSize = YModuleSize_Station163x39; // cm
2561
2562 Double_t layerFront_XSize = 80.85; // cm
2563 Double_t layerFront_YSize = 38.2; // cm
2564 Double_t layerFront_XShift = -0.375; // cm
2565 Double_t layerFront_YShift = -0.2; // cm
2566
2567 Double_t layerBack_XSize = 80.71; // cm
2568 Double_t layerBack_YSize = 38.2; // cm
2569 Double_t layerBack_XShift = -0.445; // cm
2570 Double_t layerBack_YShift = -0.2; // cm
2571
2572 // copper layer -------------------------------------------------------------
2573 Double_t copperLayer_ZSize = 0.00655; // cm;
2574 Double_t copperLayerHole_Radius = 6.0; // cm
2575
2576 // layer shape
2577 TGeoShape* copperLayerFrontBlankS =
2578 new TGeoBBox(TString("copperLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
2579 layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
2580 TGeoShape* copperLayerBackBlankS =
2581 new TGeoBBox(TString("copperLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
2582 layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
2583
2584 TGeoShape* copperLayerFrontHoleS =
2585 new TGeoTube(TString("copperLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0, copperLayerHole_Radius,
2586 copperLayer_ZSize * 0.5 + 0.01);
2587 TGeoShape* copperLayerBackHoleS = new TGeoTube(TString("copperLayerBackHoleS") += TString("_") + layers->GetName(),
2588 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
2589
2590 TGeoTranslation* copperLayerFrontHole_pos = new TGeoTranslation();
2591 copperLayerFrontHole_pos->SetName(TString("copperLayerFrontHole_pos") += TString("_") + layers->GetName());
2592 copperLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2593 copperLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2594 copperLayerFrontHole_pos->SetDz(0.0);
2595 copperLayerFrontHole_pos->RegisterYourself();
2596
2597 TGeoTranslation* copperLayerBackHole_pos = new TGeoTranslation();
2598 copperLayerBackHole_pos->SetName(TString("copperLayerBackHole_pos") += TString("_") + layers->GetName());
2599 copperLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2600 copperLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2601 copperLayerBackHole_pos->SetDz(0.0);
2602 copperLayerBackHole_pos->RegisterYourself();
2603
2604 TGeoCompositeShape* copperLayerFrontS = new TGeoCompositeShape();
2605 copperLayerFrontS->SetName(TString("copperLayerFrontS") += TString("_") + layers->GetName());
2606 {
2607 TString expression = "copperLayerFrontBlankS";
2608 expression += TString("_") + layers->GetName();
2609 expression += "-copperLayerFrontHoleS";
2610 expression += TString("_") + layers->GetName();
2611 expression += ":copperLayerFrontHole_pos";
2612 expression += TString("_") + layers->GetName();
2613
2614 copperLayerFrontS->MakeNode(expression);
2615 copperLayerFrontS->ComputeBBox(); // need to compute a bounding box
2616 }
2617
2618 TGeoCompositeShape* copperLayerBackS = new TGeoCompositeShape();
2619 copperLayerBackS->SetName(TString("copperLayerBackS") += TString("_") + layers->GetName());
2620 {
2621 TString expression = "copperLayerBackBlankS";
2622 expression += TString("_") + layers->GetName();
2623 expression += "-copperLayerBackHoleS";
2624 expression += TString("_") + layers->GetName();
2625 expression += ":copperLayerBackHole_pos";
2626 expression += TString("_") + layers->GetName();
2627
2628 copperLayerBackS->MakeNode(expression);
2629 copperLayerBackS->ComputeBBox(); // need to compute a bounding box
2630 }
2631
2632 TGeoVolume* copperLayerFrontV =
2633 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
2634 TGeoVolume* copperLayerBackV =
2635 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
2636
2637 // volume medium
2638 TGeoMedium* copperLayerV_medium = pMedCopper;
2639 if (copperLayerV_medium) {
2640 copperLayerFrontV->SetMedium(copperLayerV_medium);
2641 copperLayerBackV->SetMedium(copperLayerV_medium);
2642 } else
2643 Fatal("Main", "Invalid medium for copperLayerV!");
2644
2645 // volume visual property (transparency)
2646 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
2647 copperLayerFrontV->SetTransparency(0);
2648 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
2649 copperLayerBackV->SetTransparency(0);
2650
2651 TGeoCombiTrans* copperLayerFront_transf[2];
2652
2653 copperLayerFront_transf[0] = new TGeoCombiTrans();
2654 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
2655 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
2656 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize * 0.5);
2657
2658 TGeoCombiTrans* copperLayerBack_transf[1];
2659
2660 copperLayerBack_transf[0] = new TGeoCombiTrans();
2661 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
2662 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
2663 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize * 0.5);
2664
2665 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
2666 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
2667 //--------------------------------------------------------------------------
2668
2669 // glue layer ---------------------------------------------------------------
2670 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
2671 Double_t glueLayerHole_Radius = 6.0; // cm
2672
2673 // layer shape
2674 TGeoShape* glueLayerFrontBlankS =
2675 new TGeoBBox(TString("glueLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
2676 layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
2677 TGeoShape* glueLayerBackBlankS = new TGeoBBox(TString("glueLayerBackBlankS") += TString("_") + layers->GetName(),
2678 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
2679
2680 TGeoShape* glueLayerFrontHoleS = new TGeoTube(TString("glueLayerFrontHoleS") += TString("_") + layers->GetName(),
2681 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
2682 TGeoShape* glueLayerBackHoleS = new TGeoTube(TString("glueLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
2683 glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
2684
2685 TGeoTranslation* glueLayerFrontHole_pos = new TGeoTranslation();
2686 glueLayerFrontHole_pos->SetName(TString("glueLayerFrontHole_pos") += TString("_") + layers->GetName());
2687 glueLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2688 glueLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2689 glueLayerFrontHole_pos->SetDz(0.0);
2690 glueLayerFrontHole_pos->RegisterYourself();
2691
2692 TGeoTranslation* glueLayerBackHole_pos = new TGeoTranslation();
2693 glueLayerBackHole_pos->SetName(TString("glueLayerBackHole_pos") += TString("_") + layers->GetName());
2694 glueLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2695 glueLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2696 glueLayerBackHole_pos->SetDz(0.0);
2697 glueLayerBackHole_pos->RegisterYourself();
2698
2699 TGeoCompositeShape* glueLayerFrontS = new TGeoCompositeShape();
2700 glueLayerFrontS->SetName(TString("glueLayerFrontS") += TString("_") + layers->GetName());
2701 {
2702 TString expression = "glueLayerFrontBlankS";
2703 expression += TString("_") + layers->GetName();
2704 expression += "-glueLayerFrontHoleS";
2705 expression += TString("_") + layers->GetName();
2706 expression += ":glueLayerFrontHole_pos";
2707 expression += TString("_") + layers->GetName();
2708
2709 glueLayerFrontS->MakeNode(expression);
2710 glueLayerFrontS->ComputeBBox(); // need to compute a bounding box
2711 }
2712
2713 TGeoCompositeShape* glueLayerBackS = new TGeoCompositeShape();
2714 glueLayerBackS->SetName(TString("glueLayerBackS") += TString("_") + layers->GetName());
2715 {
2716 TString expression = "glueLayerBackBlankS";
2717 expression += TString("_") + layers->GetName();
2718 expression += "-glueLayerBackHoleS";
2719 expression += TString("_") + layers->GetName();
2720 expression += ":glueLayerBackHole_pos";
2721 expression += TString("_") + layers->GetName();
2722
2723 glueLayerBackS->MakeNode(expression);
2724 glueLayerBackS->ComputeBBox(); // need to compute a bounding box
2725 }
2726
2727 TGeoVolume* glueLayerFrontV =
2728 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
2729 TGeoVolume* glueLayerBackV =
2730 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
2731
2732 // volume medium
2733 TGeoMedium* glueLayerV_medium = pMedGlue;
2734 if (glueLayerV_medium) {
2735 glueLayerFrontV->SetMedium(glueLayerV_medium);
2736 glueLayerBackV->SetMedium(glueLayerV_medium);
2737 } else
2738 Fatal("Main", "Invalid medium for glueLayerV!");
2739
2740 // volume visual property (transparency)
2741 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
2742 glueLayerFrontV->SetTransparency(0);
2743 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
2744 glueLayerBackV->SetTransparency(0);
2745
2746 TGeoCombiTrans* glueLayerFront_transf[1];
2747
2748 glueLayerFront_transf[0] = new TGeoCombiTrans();
2749 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
2750 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
2751 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
2752
2753 TGeoCombiTrans* glueLayerBack_transf[1];
2754
2755 glueLayerBack_transf[0] = new TGeoCombiTrans();
2756 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
2757 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
2758 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize * 0.5);
2759
2760 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
2761 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
2762 //--------------------------------------------------------------------------
2763
2764 // epoxide layer ------------------------------------------------------------
2765 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
2766 Double_t epoxideLayerHole_Radius = 6.0; // cm
2767
2768 // layer shape
2769 TGeoShape* epoxideLayerFrontBlankS =
2770 new TGeoBBox(TString("epoxideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
2771 layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
2772 TGeoShape* epoxideLayerBackBlankS =
2773 new TGeoBBox(TString("epoxideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
2774 layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
2775
2776 TGeoShape* epoxideLayerFrontHoleS =
2777 new TGeoTube(TString("epoxideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
2778 epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
2779 TGeoShape* epoxideLayerBackHoleS =
2780 new TGeoTube(TString("epoxideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0, epoxideLayerHole_Radius,
2781 epoxideLayer_ZSize * 0.5 + 0.01);
2782
2783 TGeoTranslation* epoxideLayerFrontHole_pos = new TGeoTranslation();
2784 epoxideLayerFrontHole_pos->SetName(TString("epoxideLayerFrontHole_pos") += TString("_") + layers->GetName());
2785 epoxideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2786 epoxideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2787 epoxideLayerFrontHole_pos->SetDz(0.0);
2788 epoxideLayerFrontHole_pos->RegisterYourself();
2789
2790 TGeoTranslation* epoxideLayerBackHole_pos = new TGeoTranslation();
2791 epoxideLayerBackHole_pos->SetName(TString("epoxideLayerBackHole_pos") += TString("_") + layers->GetName());
2792 epoxideLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2793 epoxideLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2794 epoxideLayerBackHole_pos->SetDz(0.0);
2795 epoxideLayerBackHole_pos->RegisterYourself();
2796
2797 TGeoCompositeShape* epoxideLayerFrontS = new TGeoCompositeShape();
2798 epoxideLayerFrontS->SetName(TString("epoxideLayerFrontS") += TString("_") + layers->GetName());
2799 {
2800 TString expression = "epoxideLayerFrontBlankS";
2801 expression += TString("_") + layers->GetName();
2802 expression += "-epoxideLayerFrontHoleS";
2803 expression += TString("_") + layers->GetName();
2804 expression += ":epoxideLayerFrontHole_pos";
2805 expression += TString("_") + layers->GetName();
2806
2807 epoxideLayerFrontS->MakeNode(expression);
2808 epoxideLayerFrontS->ComputeBBox(); // need to compute a bounding box
2809 }
2810
2811 TGeoCompositeShape* epoxideLayerBackS = new TGeoCompositeShape();
2812 epoxideLayerBackS->SetName(TString("epoxideLayerBackS") += TString("_") + layers->GetName());
2813 {
2814 TString expression = "epoxideLayerBackBlankS";
2815 expression += TString("_") + layers->GetName();
2816 expression += "-epoxideLayerBackHoleS";
2817 expression += TString("_") + layers->GetName();
2818 expression += ":epoxideLayerBackHole_pos";
2819 expression += TString("_") + layers->GetName();
2820
2821 epoxideLayerBackS->MakeNode(expression);
2822 epoxideLayerBackS->ComputeBBox(); // need to compute a bounding box
2823 }
2824
2825 TGeoVolume* epoxideLayerFrontV =
2826 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
2827 TGeoVolume* epoxideLayerBackV =
2828 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
2829
2830 // volume medium
2831 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
2832 if (epoxideLayerV_medium) {
2833 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
2834 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
2835 } else
2836 Fatal("Main", "Invalid medium for epoxideLayerV!");
2837
2838 // volume visual property (transparency)
2839 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
2840 epoxideLayerFrontV->SetTransparency(0);
2841 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
2842 epoxideLayerBackV->SetTransparency(0);
2843
2844 TGeoCombiTrans* epoxideLayerFront_transf[1];
2845
2846 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
2847 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
2848 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
2849 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
2850 + epoxideLayer_ZSize * 0.5);
2851
2852 TGeoCombiTrans* epoxideLayerBack_transf[1];
2853
2854 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
2855 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
2856 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
2857 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
2858 - epoxideLayer_ZSize * 0.5);
2859
2860 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
2861 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
2862 //--------------------------------------------------------------------------
2863
2864 // honeycomb layer ----------------------------------------------------------
2865 // Double_t honeycombLayer_ZSize = 1.5-(0.05+0.00055+0.005+0.0125); //cm; half-thickness of all honeycomb layers
2866 Double_t honeycombLayer_ZSize = 1.5 - (0.06805); // cm; half-thickness of all honeycomb layers
2867 Double_t honeycombLayerHole_Radius = 6.0; // cm
2868
2869 // layer shape
2870 TGeoShape* honeycombLayerFrontBlankS =
2871 new TGeoBBox(TString("honeycombLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
2872 layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
2873 TGeoShape* honeycombLayerBackBlankS =
2874 new TGeoBBox(TString("honeycombLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
2875 layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
2876
2877 TGeoShape* honeycombLayerFrontHoleS =
2878 new TGeoTube(TString("honeycombLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
2879 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
2880 TGeoShape* honeycombLayerBackHoleS =
2881 new TGeoTube(TString("honeycombLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
2882 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
2883
2884 TGeoTranslation* honeycombLayerFrontHole_pos = new TGeoTranslation();
2885 honeycombLayerFrontHole_pos->SetName(TString("honeycombLayerFrontHole_pos") += TString("_") + layers->GetName());
2886 honeycombLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2887 honeycombLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2888 honeycombLayerFrontHole_pos->SetDz(0.0);
2889 honeycombLayerFrontHole_pos->RegisterYourself();
2890
2891 TGeoTranslation* honeycombLayerBackHole_pos = new TGeoTranslation();
2892 honeycombLayerBackHole_pos->SetName(TString("honeycombLayerBackHole_pos") += TString("_") + layers->GetName());
2893 honeycombLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2894 honeycombLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2895 honeycombLayerBackHole_pos->SetDz(0.0);
2896 honeycombLayerBackHole_pos->RegisterYourself();
2897
2898 TGeoCompositeShape* honeycombLayerFrontS = new TGeoCompositeShape();
2899 honeycombLayerFrontS->SetName(TString("honeycombLayerFrontS") += TString("_") + layers->GetName());
2900 {
2901 TString expression = "honeycombLayerFrontBlankS";
2902 expression += TString("_") + layers->GetName();
2903 expression += "-honeycombLayerFrontHoleS";
2904 expression += TString("_") + layers->GetName();
2905 expression += ":honeycombLayerFrontHole_pos";
2906 expression += TString("_") + layers->GetName();
2907
2908 honeycombLayerFrontS->MakeNode(expression);
2909 honeycombLayerFrontS->ComputeBBox(); // need to compute a bounding box
2910 }
2911
2912 TGeoCompositeShape* honeycombLayerBackS = new TGeoCompositeShape();
2913 honeycombLayerBackS->SetName(TString("honeycombLayerBackS") += TString("_") + layers->GetName());
2914 {
2915 TString expression = "honeycombLayerBackBlankS";
2916 expression += TString("_") + layers->GetName();
2917 expression += "-honeycombLayerBackHoleS";
2918 expression += TString("_") + layers->GetName();
2919 expression += ":honeycombLayerBackHole_pos";
2920 expression += TString("_") + layers->GetName();
2921
2922 honeycombLayerBackS->MakeNode(expression);
2923 honeycombLayerBackS->ComputeBBox(); // need to compute a bounding box
2924 }
2925
2926 TGeoVolume* honeycombLayerFrontV =
2927 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
2928 TGeoVolume* honeycombLayerBackV =
2929 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
2930
2931 // volume medium
2932 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
2933 if (honeycombLayerV_medium) {
2934 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
2935 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
2936 } else
2937 Fatal("Main", "Invalid medium for honeycombLayerV!");
2938
2939 // volume visual property (transparency)
2940 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
2941 honeycombLayerFrontV->SetTransparency(0);
2942 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
2943 honeycombLayerBackV->SetTransparency(0);
2944
2945 TGeoCombiTrans* honeycombLayerFront_transf[1];
2946
2947 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
2948 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
2949 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
2950 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
2951 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
2952
2953 TGeoCombiTrans* honeycombLayerBack_transf[1];
2954
2955 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
2956 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
2957 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
2958 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
2959 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5);
2960
2961 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
2962 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
2963 //--------------------------------------------------------------------------
2964
2965 // polyamide layer ----------------------------------------------------------
2966 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
2967 Double_t polyamideLayerHole_Radius = 6.0; // cm
2968
2969 // layer shape
2970 TGeoShape* polyamideLayerFrontBlankS =
2971 new TGeoBBox(TString("polyamideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
2972 layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
2973 TGeoShape* polyamideLayerBackBlankS =
2974 new TGeoBBox(TString("polyamideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
2975 layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
2976
2977 TGeoShape* polyamideLayerFrontHoleS =
2978 new TGeoTube(TString("polyamideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
2979 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
2980 TGeoShape* polyamideLayerBackHoleS =
2981 new TGeoTube(TString("polyamideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
2982 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
2983
2984 TGeoTranslation* polyamideLayerFrontHole_pos = new TGeoTranslation();
2985 polyamideLayerFrontHole_pos->SetName(TString("polyamideLayerFrontHole_pos") += TString("_") + layers->GetName());
2986 polyamideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2987 polyamideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2988 polyamideLayerFrontHole_pos->SetDz(0.0);
2989 polyamideLayerFrontHole_pos->RegisterYourself();
2990
2991 TGeoTranslation* polyamideLayerBackHole_pos = new TGeoTranslation();
2992 polyamideLayerBackHole_pos->SetName(TString("polyamideLayerBackHole_pos") += TString("_") + layers->GetName());
2993 polyamideLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2994 polyamideLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2995 polyamideLayerBackHole_pos->SetDz(0.0);
2996 polyamideLayerBackHole_pos->RegisterYourself();
2997
2998 TGeoCompositeShape* polyamideLayerFrontS = new TGeoCompositeShape();
2999 polyamideLayerFrontS->SetName(TString("polyamideLayerFrontS") += TString("_") + layers->GetName());
3000 {
3001 TString expression = "polyamideLayerFrontBlankS";
3002 expression += TString("_") + layers->GetName();
3003 expression += "-polyamideLayerFrontHoleS";
3004 expression += TString("_") + layers->GetName();
3005 expression += ":polyamideLayerFrontHole_pos";
3006 expression += TString("_") + layers->GetName();
3007
3008 polyamideLayerFrontS->MakeNode(expression);
3009 polyamideLayerFrontS->ComputeBBox(); // need to compute a bounding box
3010 }
3011
3012 TGeoCompositeShape* polyamideLayerBackS = new TGeoCompositeShape();
3013 polyamideLayerBackS->SetName(TString("polyamideLayerBackS") += TString("_") + layers->GetName());
3014 {
3015 TString expression = "polyamideLayerBackBlankS";
3016 expression += TString("_") + layers->GetName();
3017 expression += "-polyamideLayerBackHoleS";
3018 expression += TString("_") + layers->GetName();
3019 expression += ":polyamideLayerBackHole_pos";
3020 expression += TString("_") + layers->GetName();
3021
3022 polyamideLayerBackS->MakeNode(expression);
3023 polyamideLayerBackS->ComputeBBox(); // need to compute a bounding box
3024 }
3025
3026 TGeoVolume* polyamideLayerFrontV =
3027 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
3028 TGeoVolume* polyamideLayerBackV =
3029 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
3030
3031 // volume medium
3032 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
3033 if (polyamideLayerV_medium) {
3034 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
3035 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
3036 } else
3037 Fatal("Main", "Invalid medium for polyamideLayerV!");
3038
3039 // volume visual property (transparency)
3040 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
3041 polyamideLayerFrontV->SetTransparency(0);
3042 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
3043 polyamideLayerBackV->SetTransparency(0);
3044
3045 TGeoCombiTrans* polyamideLayerFront_transf[1];
3046
3047 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
3048 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
3049 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
3050 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3051 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
3052
3053 TGeoCombiTrans* polyamideLayerBack_transf[1];
3054
3055 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
3056 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
3057 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
3058 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
3059 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5);
3060
3061 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
3062 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
3063 //--------------------------------------------------------------------------
3064
3065 return layers;
3066}
3067//------------------------------------------------------------------------------
3068
3070{
3071
3072 // frame volumes
3073 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
3074 frames->SetMedium(pMedAir);
3075
3076 // back lower epoxide frame -------------------------------------------------
3077 Double_t backLowerEpoxideFrame_XSize = 161.42; // cm
3078 Double_t backLowerEpoxideFrame_YSize = 2.2; // cm
3079 Double_t backLowerEpoxideFrame_ZSize = 1.4; // cm
3080
3081 Double_t backLowerEpoxideFrameArch_Rmin = 4.0;
3082 Double_t backLowerEpoxideFrameArch_Rmax = 6.0;
3083 Double_t backLowerEpoxideFrameArch_ZSize = backLowerEpoxideFrame_ZSize;
3084
3085 TGeoShape* backLowerEpoxideFrameHalfS =
3086 new TGeoBBox(TString("backLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3087 (backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5,
3088 backLowerEpoxideFrame_YSize * 0.5, backLowerEpoxideFrame_ZSize * 0.5);
3089 TGeoShape* backLowerEpoxideFrameArchS = new TGeoTubeSeg(
3090 TString("backLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), backLowerEpoxideFrameArch_Rmin,
3091 backLowerEpoxideFrameArch_Rmax, backLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3092
3093 TGeoTranslation* backLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3094 backLowerEpoxideFrameHalf_pos1->SetName("backLowerEpoxideFrameHalf1_pos1");
3095 backLowerEpoxideFrameHalf_pos1->SetDx(
3096 +((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3097 backLowerEpoxideFrameHalf_pos1->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3098 backLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3099 backLowerEpoxideFrameHalf_pos1->RegisterYourself();
3100
3101 TGeoTranslation* backLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3102 backLowerEpoxideFrameHalf_pos2->SetName("backLowerEpoxideFrameHalf1_pos2");
3103 backLowerEpoxideFrameHalf_pos2->SetDx(
3104 -((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3105 backLowerEpoxideFrameHalf_pos2->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3106 backLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3107 backLowerEpoxideFrameHalf_pos2->RegisterYourself();
3108
3109 TGeoTranslation* backLowerEpoxideFrameArch_pos = new TGeoTranslation();
3110 backLowerEpoxideFrameArch_pos->SetName("backLowerEpoxideFrameArch_pos");
3111 backLowerEpoxideFrameArch_pos->SetDx(0.0);
3112 backLowerEpoxideFrameArch_pos->SetDy(0.0);
3113 backLowerEpoxideFrameArch_pos->SetDz(0.0);
3114 backLowerEpoxideFrameArch_pos->RegisterYourself();
3115
3116 TGeoCompositeShape* backLowerEpoxideFrameS = new TGeoCompositeShape();
3117 backLowerEpoxideFrameS->SetName(TString("backLowerEpoxideFrameS") += TString("_") + frames->GetName());
3118 {
3119 TString expression = "backLowerEpoxideFrameHalfS";
3120 expression += TString("_") + frames->GetName();
3121 expression += ":backLowerEpoxideFrameHalf1_pos1";
3122 expression += "+backLowerEpoxideFrameHalfS";
3123 expression += TString("_") + frames->GetName();
3124 expression += ":backLowerEpoxideFrameHalf1_pos2";
3125 expression += "+backLowerEpoxideFrameArchS";
3126 expression += TString("_") + frames->GetName();
3127 expression += ":backLowerEpoxideFrameArch_pos";
3128
3129 backLowerEpoxideFrameS->MakeNode(expression);
3130 backLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3131 }
3132
3133 TGeoVolume* backLowerEpoxideFrameV =
3134 new TGeoVolume(TString("backLowerEpoxideFrameV") += TString("_") + frames->GetName(), backLowerEpoxideFrameS);
3135
3136 // volume medium
3137 TGeoMedium* backLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3138 if (backLowerEpoxideFrameV_medium) {
3139 backLowerEpoxideFrameV->SetMedium(backLowerEpoxideFrameV_medium);
3140 } else
3141 Fatal("Main", "Invalid medium for backLowerEpoxideFrameV!");
3142
3143 // volume visual property (transparency)
3144 backLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3145 backLowerEpoxideFrameV->SetTransparency(0);
3146
3147 TGeoCombiTrans* backLowerEpoxideFrame_transf[1];
3148
3149 backLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3150 backLowerEpoxideFrame_transf[0]->SetDx(-0.15);
3151 backLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5) - 0.45);
3152 backLowerEpoxideFrame_transf[0]->SetDz(+(backLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
3153 + 0.015);
3154
3155 frames->AddNode(backLowerEpoxideFrameV, 0, backLowerEpoxideFrame_transf[0]);
3156 //--------------------------------------------------------------------------
3157
3158 // front lower epoxide frame -------------------------------------------------
3159 Double_t frontLowerEpoxideFrame_XSize = 161.7; // cm
3160 Double_t frontLowerEpoxideFrame_YSize = 2.2; // cm
3161 Double_t frontLowerEpoxideFrame_ZSize = 1.5; // cm
3162
3163 Double_t frontLowerEpoxideFrameArch_Rmin = 4.0;
3164 Double_t frontLowerEpoxideFrameArch_Rmax = 6.0;
3165 Double_t frontLowerEpoxideFrameArch_ZSize = frontLowerEpoxideFrame_ZSize;
3166
3167 TGeoShape* frontLowerEpoxideFrameHalfS =
3168 new TGeoBBox(TString("frontLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3169 (frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5,
3170 frontLowerEpoxideFrame_YSize * 0.5, frontLowerEpoxideFrame_ZSize * 0.5);
3171 TGeoShape* frontLowerEpoxideFrameArchS = new TGeoTubeSeg(
3172 TString("frontLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), frontLowerEpoxideFrameArch_Rmin,
3173 frontLowerEpoxideFrameArch_Rmax, frontLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3174
3175 TGeoTranslation* frontLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3176 frontLowerEpoxideFrameHalf_pos1->SetName("frontLowerEpoxideFrameHalf1_pos1");
3177 frontLowerEpoxideFrameHalf_pos1->SetDx(
3178 +((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3179 + frontLowerEpoxideFrameArch_Rmin));
3180 frontLowerEpoxideFrameHalf_pos1->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3181 frontLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3182 frontLowerEpoxideFrameHalf_pos1->RegisterYourself();
3183
3184 TGeoTranslation* frontLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3185 frontLowerEpoxideFrameHalf_pos2->SetName("frontLowerEpoxideFrameHalf1_pos2");
3186 frontLowerEpoxideFrameHalf_pos2->SetDx(
3187 -((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3188 + frontLowerEpoxideFrameArch_Rmin));
3189 frontLowerEpoxideFrameHalf_pos2->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3190 frontLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3191 frontLowerEpoxideFrameHalf_pos2->RegisterYourself();
3192
3193 TGeoTranslation* frontLowerEpoxideFrameArch_pos = new TGeoTranslation();
3194 frontLowerEpoxideFrameArch_pos->SetName("frontLowerEpoxideFrameArch_pos");
3195 frontLowerEpoxideFrameArch_pos->SetDx(0.0);
3196 frontLowerEpoxideFrameArch_pos->SetDy(0.0);
3197 frontLowerEpoxideFrameArch_pos->SetDz(0.0);
3198 frontLowerEpoxideFrameArch_pos->RegisterYourself();
3199
3200 TGeoCompositeShape* frontLowerEpoxideFrameS = new TGeoCompositeShape();
3201 frontLowerEpoxideFrameS->SetName(TString("frontLowerEpoxideFrameS") += TString("_") + frames->GetName());
3202 {
3203 TString expression = "frontLowerEpoxideFrameHalfS";
3204 expression += TString("_") + frames->GetName();
3205 expression += ":frontLowerEpoxideFrameHalf1_pos1";
3206 expression += "+frontLowerEpoxideFrameHalfS";
3207 expression += TString("_") + frames->GetName();
3208 expression += ":frontLowerEpoxideFrameHalf1_pos2";
3209 expression += "+frontLowerEpoxideFrameArchS";
3210 expression += TString("_") + frames->GetName();
3211 expression += ":frontLowerEpoxideFrameArch_pos";
3212
3213 frontLowerEpoxideFrameS->MakeNode(expression);
3214 frontLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3215 }
3216
3217 TGeoVolume* frontLowerEpoxideFrameV =
3218 new TGeoVolume(TString("frontLowerEpoxideFrameV") += TString("_") + frames->GetName(), frontLowerEpoxideFrameS);
3219
3220 // volume medium
3221 TGeoMedium* frontLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3222 if (frontLowerEpoxideFrameV_medium) {
3223 frontLowerEpoxideFrameV->SetMedium(frontLowerEpoxideFrameV_medium);
3224 } else
3225 Fatal("Main", "Invalid medium for frontLowerEpoxideFrameV!");
3226
3227 // volume visual property (transparency)
3228 frontLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3229 frontLowerEpoxideFrameV->SetTransparency(0);
3230
3231 TGeoCombiTrans* frontLowerEpoxideFrame_transf[1];
3232
3233 frontLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3234 frontLowerEpoxideFrame_transf[0]->SetDx(-0.2);
3235 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5) - 0.2);
3236 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
3237 - 0.1);
3238
3239 frames->AddNode(frontLowerEpoxideFrameV, 0, frontLowerEpoxideFrame_transf[0]);
3240 //--------------------------------------------------------------------------
3241
3242 // back side epoxide frame --------------------------------------------------
3243 Double_t backSideEpoxideFramePart_XSize = 9.2; // cm
3244 Double_t backSideEpoxideFramePart_YSize = 52.6 - 6.0; // cm
3245 Double_t backSideEpoxideFramePart_ZSize = 1.5; // cm
3246
3247 Double_t backSideEpoxideFrame_XDistBetweenParts = 163.42; // cm
3248
3249 TGeoShape* backSideEpoxideFramePartS = new TGeoBBox(
3250 TString("backSideEpoxideFramePartS") += TString("_") + frames->GetName(), backSideEpoxideFramePart_XSize * 0.5,
3251 backSideEpoxideFramePart_YSize * 0.5, backSideEpoxideFramePart_ZSize * 0.5);
3252
3253 TGeoTranslation* backSideEpoxideFramePart_pos1 = new TGeoTranslation();
3254 backSideEpoxideFramePart_pos1->SetName("backSideEpoxideFramePart_pos1_low_plane");
3255 backSideEpoxideFramePart_pos1->SetDx(
3256 +(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3257 backSideEpoxideFramePart_pos1->SetDy(0.0);
3258 backSideEpoxideFramePart_pos1->SetDz(0.0);
3259 backSideEpoxideFramePart_pos1->RegisterYourself();
3260
3261 TGeoTranslation* backSideEpoxideFramePart_pos2 = new TGeoTranslation();
3262 backSideEpoxideFramePart_pos2->SetName("backSideEpoxideFramePart_pos2_low_plane");
3263 backSideEpoxideFramePart_pos2->SetDx(
3264 -(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3265 backSideEpoxideFramePart_pos2->SetDy(0.0);
3266 backSideEpoxideFramePart_pos2->SetDz(0.0);
3267 backSideEpoxideFramePart_pos2->RegisterYourself();
3268
3269 TGeoCompositeShape* backSideEpoxideFrameS = new TGeoCompositeShape();
3270 backSideEpoxideFrameS->SetName(TString("backSideEpoxideFrameS") += TString("_") + frames->GetName());
3271 {
3272 TString expression = "backSideEpoxideFramePartS";
3273 expression += TString("_") + frames->GetName();
3274 expression += ":backSideEpoxideFramePart_pos1_low_plane";
3275 expression += "+backSideEpoxideFramePartS";
3276 expression += TString("_") + frames->GetName();
3277 expression += ":backSideEpoxideFramePart_pos2_low_plane";
3278
3279 backSideEpoxideFrameS->MakeNode(expression);
3280 backSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3281 }
3282
3283 TGeoVolume* backSideEpoxideFrameV =
3284 new TGeoVolume(TString("backSideEpoxideFrameV") += TString("_") + frames->GetName(), backSideEpoxideFrameS);
3285
3286 // volume medium
3287 TGeoMedium* backSideEpoxideFrameV_medium = pMedEpoxideCompound;
3288 if (backSideEpoxideFrameV_medium) {
3289 backSideEpoxideFrameV->SetMedium(backSideEpoxideFrameV_medium);
3290 } else
3291 Fatal("Main", "Invalid medium for backSideEpoxideFrameV!");
3292
3293 // volume visual property (transparency)
3294 backSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3295 backSideEpoxideFrameV->SetTransparency(0);
3296
3297 TGeoCombiTrans* backSideEpoxideFrame_transf[1];
3298
3299 backSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
3300 backSideEpoxideFrame_transf[0]->SetDx(0.0);
3301 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x39) * 0.5)
3302 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3303 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5));
3304
3305 frames->AddNode(backSideEpoxideFrameV, 0, backSideEpoxideFrame_transf[0]);
3306 //--------------------------------------------------------------------------
3307
3308 // back upper epoxide frame -------------------------------------------------
3309 Double_t backUpperEpoxideFrame_XSize = 161.42; // cm
3310 Double_t backUpperEpoxideFrame_YSize = 6.2; // cm
3311 Double_t backUpperEpoxideFrame_ZSize = 1.6; // cm
3312
3313 TGeoShape* backUpperEpoxideFrameS =
3314 new TGeoBBox("backUpperEpoxideFrameS", backUpperEpoxideFrame_XSize * 0.5, backUpperEpoxideFrame_YSize * 0.5,
3315 backUpperEpoxideFrame_ZSize * 0.5);
3316
3317 TGeoVolume* backUpperEpoxideFrameV =
3318 new TGeoVolume(TString("backUpperEpoxideFrameV") += TString("_") + frames->GetName(), backUpperEpoxideFrameS);
3319
3320 // volume medium
3321 TGeoMedium* backUpperEpoxideFrameV_medium = pMedEpoxideCompound;
3322 if (backUpperEpoxideFrameV_medium) {
3323 backUpperEpoxideFrameV->SetMedium(backUpperEpoxideFrameV_medium);
3324 } else
3325 Fatal("Main", "Invalid medium for backUpperEpoxideFrameV!");
3326
3327 // volume visual property (transparency)
3328 backUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3329 backUpperEpoxideFrameV->SetTransparency(0);
3330
3331 TGeoCombiTrans* backUpperEpoxideFrame_transf[1];
3332
3333 backUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
3334 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
3335 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x39 * 0.5)
3336 - 0.6 /*shift*/ + 0.2);
3337 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
3338 + 0.005);
3339
3340 frames->AddNode(backUpperEpoxideFrameV, 0, backUpperEpoxideFrame_transf[0]);
3341 //--------------------------------------------------------------------------
3342
3343 // front side epoxide frame -------------------------------------------------
3344 Double_t frontSideEpoxideFramePart_XSize = 3.5; // cm
3345 Double_t frontSideEpoxideFramePart_YSize = 49.9 - 6.0; // cm
3346 Double_t frontSideEpoxideFramePart_ZSize = 1.5; // cm
3347
3348 Double_t frontSideEpoxideFrame_XDistBetweenParts = 161.7; // cm
3349
3350 TGeoShape* frontSideEpoxideFramePartS =
3351 new TGeoBBox(TString("frontSideEpoxideFramePartS") += TString("_") + frames->GetName(),
3352 frontSideEpoxideFramePart_XSize * 0.5, frontSideEpoxideFramePart_YSize * 0.5,
3353 frontSideEpoxideFramePart_ZSize * 0.5);
3354
3355 TGeoTranslation* frontSideEpoxideFramePart_pos1 = new TGeoTranslation();
3356 frontSideEpoxideFramePart_pos1->SetName("frontSideEpoxideFramePart_pos1");
3357 frontSideEpoxideFramePart_pos1->SetDx(
3358 +(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3359 frontSideEpoxideFramePart_pos1->SetDy(0.0);
3360 frontSideEpoxideFramePart_pos1->SetDz(0.0);
3361 frontSideEpoxideFramePart_pos1->RegisterYourself();
3362
3363 TGeoTranslation* frontSideEpoxideFramePart_pos2 = new TGeoTranslation();
3364 frontSideEpoxideFramePart_pos2->SetName("frontSideEpoxideFramePart_pos2");
3365 frontSideEpoxideFramePart_pos2->SetDx(
3366 -(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3367 frontSideEpoxideFramePart_pos2->SetDy(0.0);
3368 frontSideEpoxideFramePart_pos2->SetDz(0.0);
3369 frontSideEpoxideFramePart_pos2->RegisterYourself();
3370
3371 TGeoCompositeShape* frontSideEpoxideFrameS = new TGeoCompositeShape();
3372 frontSideEpoxideFrameS->SetName(TString("frontSideEpoxideFrameS") += TString("_") + frames->GetName());
3373 {
3374 TString expression = "frontSideEpoxideFramePartS";
3375 expression += TString("_") + frames->GetName();
3376 expression += ":frontSideEpoxideFramePart_pos1";
3377 expression += "+frontSideEpoxideFramePartS";
3378 expression += TString("_") + frames->GetName();
3379 expression += ":frontSideEpoxideFramePart_pos2";
3380
3381 frontSideEpoxideFrameS->MakeNode(expression);
3382 frontSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3383 }
3384
3385 TGeoVolume* frontSideEpoxideFrameV =
3386 new TGeoVolume(TString("frontSideEpoxideFrameV") += TString("_") + frames->GetName(), frontSideEpoxideFrameS);
3387
3388 // volume medium
3389 TGeoMedium* frontSideEpoxideFrameV_medium = pMedEpoxideCompound;
3390 if (frontSideEpoxideFrameV_medium) {
3391 frontSideEpoxideFrameV->SetMedium(frontSideEpoxideFrameV_medium);
3392 } else
3393 Fatal("Main", "Invalid medium for frontSideEpoxideFrameV!");
3394
3395 // volume visual property (transparency)
3396 frontSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3397 frontSideEpoxideFrameV->SetTransparency(0);
3398
3399 TGeoCombiTrans* frontSideEpoxideFrame_transf[1];
3400
3401 frontSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
3402 frontSideEpoxideFrame_transf[0]->SetDx(0.0);
3403 frontSideEpoxideFrame_transf[0]->SetDy(+((frontSideEpoxideFramePart_YSize - YModuleSize_Station163x39) * 0.5)
3404 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3405 frontSideEpoxideFrame_transf[0]->SetDz(-(frontSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
3406 - 0.05);
3407
3408 frames->AddNode(frontSideEpoxideFrameV, 0, frontSideEpoxideFrame_transf[0]);
3409 //--------------------------------------------------------------------------
3410
3411 // front upper epoxide frame -------------------------------------------------
3412 Double_t frontUpperEpoxideFrame_XSize = 161.7; // cm
3413 Double_t frontUpperEpoxideFrame_YSize = 3.5; // cm
3414 Double_t frontUpperEpoxideFrame_ZSize = 1.6; // cm
3415
3416 TGeoShape* frontUpperEpoxideFrameS =
3417 new TGeoBBox("frontUpperEpoxideFrameS", frontUpperEpoxideFrame_XSize * 0.5, frontUpperEpoxideFrame_YSize * 0.5,
3418 frontUpperEpoxideFrame_ZSize * 0.5);
3419
3420 TGeoVolume* frontUpperEpoxideFrameV =
3421 new TGeoVolume(TString("frontUpperEpoxideFrameV") += TString("_") + frames->GetName(), frontUpperEpoxideFrameS);
3422
3423 // volume medium
3424 TGeoMedium* frontUpperEpoxideFrameV_medium = pMedEpoxideCompound;
3425 if (frontUpperEpoxideFrameV_medium) {
3426 frontUpperEpoxideFrameV->SetMedium(frontUpperEpoxideFrameV_medium);
3427 } else
3428 Fatal("Main", "Invalid medium for frontUpperEpoxideFrameV!");
3429
3430 // volume visual property (transparency)
3431 frontUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3432 frontUpperEpoxideFrameV->SetTransparency(0);
3433
3434 TGeoCombiTrans* frontUpperEpoxideFrame_transf[1];
3435
3436 frontUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
3437 frontUpperEpoxideFrame_transf[0]->SetDx(0.0);
3438 frontUpperEpoxideFrame_transf[0]->SetDy(+(frontUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x39 * 0.5)
3439 - 0.6 /*shift*/);
3440 frontUpperEpoxideFrame_transf[0]->SetDz(-(frontUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5)
3441 - 0.05);
3442
3443 frames->AddNode(frontUpperEpoxideFrameV, 0, frontUpperEpoxideFrame_transf[0]);
3444 //--------------------------------------------------------------------------
3445
3446 // alum. cable support ------------------------------------------------------
3447 Double_t alumCableSupportPart_XSize = 3.0; // cm
3448 Double_t alumCableSupportPart_YSize = 41.3 - 6.0; // cm
3449 Double_t alumCableSupportPart_ZSize = 0.2; // cm
3450
3451 Double_t alumCableSupport_XDistBetweenParts = 164.82; // cm
3452
3453 TGeoShape* alumCableSupportPartS = new TGeoBBox(
3454 TString("alumCableSupportPartS") += TString("_") + frames->GetName(), alumCableSupportPart_XSize * 0.5,
3455 alumCableSupportPart_YSize * 0.5, alumCableSupportPart_ZSize * 0.5);
3456
3457 TGeoTranslation* alumCableSupportPart_pos1 = new TGeoTranslation();
3458 alumCableSupportPart_pos1->SetName("alumCableSupportPart_pos1");
3459 alumCableSupportPart_pos1->SetDx(+(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
3460 alumCableSupportPart_pos1->SetDy(0.0);
3461 alumCableSupportPart_pos1->SetDz(0.0);
3462 alumCableSupportPart_pos1->RegisterYourself();
3463
3464 TGeoTranslation* alumCableSupportPart_pos2 = new TGeoTranslation();
3465 alumCableSupportPart_pos2->SetName("alumCableSupportPart_pos2");
3466 alumCableSupportPart_pos2->SetDx(-(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
3467 alumCableSupportPart_pos2->SetDy(0.0);
3468 alumCableSupportPart_pos2->SetDz(0.0);
3469 alumCableSupportPart_pos2->RegisterYourself();
3470
3471 TGeoCompositeShape* alumCableSupportS = new TGeoCompositeShape();
3472 alumCableSupportS->SetName(TString("alumCableSupportS") += TString("_") + frames->GetName());
3473 {
3474 TString expression = "alumCableSupportPartS";
3475 expression += TString("_") + frames->GetName();
3476 expression += ":alumCableSupportPart_pos1";
3477 expression += "+alumCableSupportPartS";
3478 expression += TString("_") + frames->GetName();
3479 expression += ":alumCableSupportPart_pos2";
3480
3481 alumCableSupportS->MakeNode(expression);
3482 alumCableSupportS->ComputeBBox(); // need to compute a bounding box
3483 }
3484
3485 TGeoVolume* alumCableSupportV =
3486 new TGeoVolume(TString("alumCableSupportV") += TString("_") + frames->GetName(), alumCableSupportS);
3487
3488 // volume medium
3489 TGeoMedium* alumCableSupportV_medium = pMedAluminium;
3490 if (alumCableSupportV_medium) {
3491 alumCableSupportV->SetMedium(alumCableSupportV_medium);
3492 } else
3493 Fatal("Main", "Invalid medium for alumCableSupportV!");
3494
3495 // volume visual property (transparency)
3496 alumCableSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
3497 alumCableSupportV->SetTransparency(0);
3498
3499 TGeoCombiTrans* alumCableSupport_transf[1];
3500
3501 alumCableSupport_transf[0] = new TGeoCombiTrans();
3502 alumCableSupport_transf[0]->SetDx(0.0);
3503 alumCableSupport_transf[0]->SetDy(+((alumCableSupportPart_YSize - YModuleSize_Station163x39) * 0.5)
3504 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3505 alumCableSupport_transf[0]->SetDz(-(alumCableSupportPart_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5
3506 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
3507
3508 frames->AddNode(alumCableSupportV, 0, alumCableSupport_transf[0]);
3509 //--------------------------------------------------------------------------
3510
3511 // amplifier upper block ----------------------------------------------------
3512 Double_t amplifierUpperBlockPart1_XSize = 161.44; // cm
3513 Double_t amplifierUpperBlockPart1_YSize = 0.6; // cm
3514 Double_t amplifierUpperBlockPart1_ZSize = 8.41; // cm
3515
3516 Double_t amplifierUpperBlockPart2_XSize = 161.16; // cm
3517 Double_t amplifierUpperBlockPart2_YSize = 0.6; // cm
3518 Double_t amplifierUpperBlockPart2_ZSize = 8.41; // cm
3519
3520 TGeoShape* amplifierUpperBlockPart1S = new TGeoBBox(
3521 TString("amplifierUpperBlockPart1S") += TString("_") + frames->GetName(), amplifierUpperBlockPart1_XSize * 0.5,
3522 amplifierUpperBlockPart1_YSize * 0.5, amplifierUpperBlockPart1_ZSize * 0.5);
3523 TGeoShape* amplifierUpperBlockPart2S = new TGeoBBox(
3524 TString("amplifierUpperBlockPart2S") += TString("_") + frames->GetName(), amplifierUpperBlockPart2_XSize * 0.5,
3525 amplifierUpperBlockPart2_YSize * 0.5, amplifierUpperBlockPart2_ZSize * 0.5);
3526
3527 TGeoTranslation* amplifierUpperBlockPart1_pos = new TGeoTranslation();
3528 amplifierUpperBlockPart1_pos->SetName("amplifierUpperBlockPart1_pos");
3529 amplifierUpperBlockPart1_pos->SetDx(0.0);
3530 amplifierUpperBlockPart1_pos->SetDy(0.0);
3531 amplifierUpperBlockPart1_pos->SetDz(0.0);
3532 amplifierUpperBlockPart1_pos->RegisterYourself();
3533
3534 TGeoTranslation* amplifierUpperBlockPart2_pos = new TGeoTranslation();
3535 amplifierUpperBlockPart2_pos->SetName("amplifierUpperBlockPart2_pos");
3536 amplifierUpperBlockPart2_pos->SetDx(-0.76);
3537 amplifierUpperBlockPart2_pos->SetDy(
3538 -(amplifierUpperBlockPart1_YSize * 0.5 + amplifierUpperBlockPart2_YSize * 0.5 + 0.33));
3539 amplifierUpperBlockPart2_pos->SetDz(0.0);
3540 amplifierUpperBlockPart2_pos->RegisterYourself();
3541
3542 TGeoCompositeShape* amplifierUpperBlockS = new TGeoCompositeShape();
3543 amplifierUpperBlockS->SetName(TString("amplifierUpperBlockS") += TString("_") + frames->GetName());
3544 {
3545 TString expression = "amplifierUpperBlockPart1S";
3546 expression += TString("_") + frames->GetName();
3547 expression += ":amplifierUpperBlockPart1_pos";
3548 expression += "+amplifierUpperBlockPart1S";
3549 expression += TString("_") + frames->GetName();
3550 expression += ":amplifierUpperBlockPart2_pos";
3551
3552 amplifierUpperBlockS->MakeNode(expression);
3553 amplifierUpperBlockS->ComputeBBox(); // need to compute a bounding box
3554 }
3555
3556 TGeoVolume* amplifierUpperBlockV =
3557 new TGeoVolume(TString("amplifierUpperBlockV") += TString("_") + frames->GetName(), amplifierUpperBlockS);
3558
3559 // volume medium
3560 TGeoMedium* amplifierUpperBlockV_medium = pMedFiberGlass;
3561 if (amplifierUpperBlockV_medium) {
3562 amplifierUpperBlockV->SetMedium(amplifierUpperBlockV_medium);
3563 } else
3564 Fatal("Main", "Invalid medium for amplifierUpperBlockV!");
3565
3566 // volume visual property (transparency)
3567 amplifierUpperBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
3568 amplifierUpperBlockV->SetTransparency(0);
3569
3570 TGeoCombiTrans* amplifierUpperBlock_transf[1];
3571
3572 amplifierUpperBlock_transf[0] = new TGeoCombiTrans();
3573 amplifierUpperBlock_transf[0]->SetDx(0.0);
3574 amplifierUpperBlock_transf[0]->SetDy(+(YModuleSize_Station163x39 * 0.5 + backUpperEpoxideFrame_YSize)
3575 - 1.0 /*shift*/);
3576 amplifierUpperBlock_transf[0]->SetDz(-(amplifierUpperBlockPart1_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5);
3577
3578 frames->AddNode(amplifierUpperBlockV, 0, amplifierUpperBlock_transf[0]);
3579 //--------------------------------------------------------------------------
3580
3581 // amplifier side block -----------------------------------------------------
3582 Double_t amplifierSideBlockPartBig_XSize = 0.6; // cm
3583 Double_t amplifierSideBlockPartBig_YSize = 33.9; // cm
3584 Double_t amplifierSideBlockPartBig_ZSize = 8.41; // cm
3585
3586 Double_t amplifierSideBlockPartSmall_XSize = 0.6; // cm
3587 Double_t amplifierSideBlockPartSmall_YSize = 27.05; // cm
3588 Double_t amplifierSideBlockPartSmall_ZSize = 8.41; // cm
3589
3590 TGeoShape* amplifierSideBlockPartBigS =
3591 new TGeoBBox(TString("amplifierSideBlockPartBigS") += TString("_") + frames->GetName(),
3592 amplifierSideBlockPartBig_XSize * 0.5, amplifierSideBlockPartBig_YSize * 0.5,
3593 amplifierSideBlockPartBig_ZSize * 0.5);
3594 TGeoShape* amplifierSideBlockPartSmallS =
3595 new TGeoBBox(TString("amplifierSideBlockPartSmallS") += TString("_") + frames->GetName(),
3596 amplifierSideBlockPartSmall_XSize * 0.5, amplifierSideBlockPartSmall_YSize * 0.5,
3597 amplifierSideBlockPartSmall_ZSize * 0.5);
3598
3599 TGeoTranslation* amplifierSideBlockPartBig_pos = new TGeoTranslation();
3600 amplifierSideBlockPartBig_pos->SetName("amplifierSideBlockPartBig_pos");
3601 amplifierSideBlockPartBig_pos->SetDx(0.0);
3602 amplifierSideBlockPartBig_pos->SetDy(0.0);
3603 amplifierSideBlockPartBig_pos->SetDz(0.0);
3604 amplifierSideBlockPartBig_pos->RegisterYourself();
3605
3606 TGeoTranslation* amplifierSideBlockPartSmall_pos = new TGeoTranslation();
3607 amplifierSideBlockPartSmall_pos->SetName("amplifierSideBlockPartSmall_pos");
3608 amplifierSideBlockPartSmall_pos->SetDx(
3609 +(amplifierSideBlockPartBig_XSize * 0.5 + amplifierSideBlockPartSmall_XSize * 0.5 + 1.72));
3610 amplifierSideBlockPartSmall_pos->SetDy(+0.05);
3611 amplifierSideBlockPartSmall_pos->SetDz(0.0);
3612 amplifierSideBlockPartSmall_pos->RegisterYourself();
3613
3614 TGeoCompositeShape* amplifierSideBlockS = new TGeoCompositeShape();
3615 amplifierSideBlockS->SetName(TString("amplifierSideBlockS") += TString("_") + frames->GetName());
3616 {
3617 TString expression = "amplifierSideBlockPartBigS";
3618 expression += TString("_") + frames->GetName();
3619 expression += ":amplifierSideBlockPartBig_pos";
3620 expression += "+amplifierSideBlockPartSmallS";
3621 expression += TString("_") + frames->GetName();
3622 expression += ":amplifierSideBlockPartSmall_pos";
3623
3624 amplifierSideBlockS->MakeNode(expression);
3625 amplifierSideBlockS->ComputeBBox(); // need to compute a bounding box
3626 }
3627
3628 TGeoVolume* amplifierSideBlockV =
3629 new TGeoVolume(TString("amplifierSideBlockV") += TString("_") + frames->GetName(), amplifierSideBlockS);
3630
3631 // volume medium
3632 TGeoMedium* amplifierSideBlockV_medium = pMedFiberGlass;
3633 if (amplifierSideBlockV_medium) {
3634 amplifierSideBlockV->SetMedium(amplifierSideBlockV_medium);
3635 } else
3636 Fatal("Main", "Invalid medium for amplifierSideBlockV!");
3637
3638 // volume visual property (transparency)
3639 amplifierSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
3640 amplifierSideBlockV->SetTransparency(0);
3641
3642 TGeoCombiTrans* amplifierSideBlock_transf[2];
3643
3644 amplifierSideBlock_transf[0] = new TGeoCombiTrans();
3645 amplifierSideBlock_transf[0]->SetDx(+86.47 /*shift*/);
3646 amplifierSideBlock_transf[0]->SetDy(-5.5 + 6.0 * 0.5);
3647 amplifierSideBlock_transf[0]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5
3648 - 0.4 /*shift*/);
3649
3650 amplifierSideBlock_transf[1] = new TGeoCombiTrans();
3651 amplifierSideBlock_transf[1]->RotateY(180.0);
3652 amplifierSideBlock_transf[1]->SetDx(-86.47 /*shift*/);
3653 amplifierSideBlock_transf[1]->SetDy(-5.5 + 6.0 * 0.5);
3654 amplifierSideBlock_transf[1]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5
3655 - 0.4 /*shift*/);
3656
3657 frames->AddNode(amplifierSideBlockV, 0, amplifierSideBlock_transf[0]);
3658 frames->AddNode(amplifierSideBlockV, 1, amplifierSideBlock_transf[1]);
3659 //--------------------------------------------------------------------------
3660
3661 // upper PCB (Printed Circuit Board) ----------------------------------------
3662 Double_t upperPcb_XSize = 177.22; // cm
3663 Double_t upperPcb_YSize = 0.3; // cm
3664 Double_t upperPcb_ZSize = 4.0; // cm
3665
3666 TGeoShape* upperPcbS = new TGeoBBox("upperPcbS", upperPcb_XSize * 0.5, upperPcb_YSize * 0.5, upperPcb_ZSize * 0.5);
3667
3668 TGeoVolume* upperPcbV = new TGeoVolume(TString("upperPcbV") += TString("_") + frames->GetName(), upperPcbS);
3669
3670 // volume medium
3671 TGeoMedium* upperPcbV_medium = pMedFiberGlass;
3672 if (upperPcbV_medium) {
3673 upperPcbV->SetMedium(upperPcbV_medium);
3674 } else
3675 Fatal("Main", "Invalid medium for upperPcbV!");
3676
3677 // volume visual property (transparency)
3678 upperPcbV->SetLineColor(TColor::GetColor("#88ff88"));
3679 upperPcbV->SetTransparency(0);
3680
3681 TGeoCombiTrans* upperPcb_transf[1];
3682
3683 upperPcb_transf[0] = new TGeoCombiTrans();
3684 upperPcb_transf[0]->SetDx(+0.1 /*shift*/);
3685 upperPcb_transf[0]->SetDy(+(upperPcb_YSize * 0.5 + 23.5 /*shift*/) - 6.0 * 0.5);
3686 upperPcb_transf[0]->SetDz(-(upperPcb_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5 - ZModuleSize_Station163x39
3687 - frontSideEpoxideFramePart_ZSize - 0.2);
3688
3689 frames->AddNode(upperPcbV, 0, upperPcb_transf[0]);
3690 //--------------------------------------------------------------------------
3691
3692 // side PCB -----------------------------------------------------------------
3693 Double_t sidePcbPart_XSize = 0.3; // cm
3694 Double_t sidePcbPart_YSize = 35.05; // cm
3695 Double_t sidePcbPart_ZSize = 4.0; // cm
3696
3697 TGeoShape* sidePcbPartS = new TGeoBBox(TString("sidePcbPartS") += TString("_") + frames->GetName(),
3698 sidePcbPart_XSize * 0.5, sidePcbPart_YSize * 0.5, sidePcbPart_ZSize * 0.5);
3699
3700 TGeoTranslation* sidePcbPart_pos1 = new TGeoTranslation();
3701 sidePcbPart_pos1->SetName("sidePcbPart_pos1");
3702 sidePcbPart_pos1->SetDx(0.0);
3703 sidePcbPart_pos1->SetDy(0.0);
3704 sidePcbPart_pos1->SetDz(0.0);
3705 sidePcbPart_pos1->RegisterYourself();
3706
3707 TGeoTranslation* sidePcbPart_pos2 = new TGeoTranslation();
3708 sidePcbPart_pos2->SetName("sidePcbPart_pos2");
3709 sidePcbPart_pos2->SetDx(+(sidePcbPart_XSize + 6.1 /*shift*/));
3710 sidePcbPart_pos2->SetDy(0.0);
3711 sidePcbPart_pos2->SetDz(0.0);
3712 sidePcbPart_pos2->RegisterYourself();
3713
3714 TGeoCompositeShape* sidePcbS = new TGeoCompositeShape();
3715 sidePcbS->SetName(TString("sidePcbS") += TString("_") + frames->GetName());
3716 {
3717 TString expression = "sidePcbPartS";
3718 expression += TString("_") + frames->GetName();
3719 expression += ":sidePcbPart_pos1";
3720 expression += "+sidePcbPartS";
3721 expression += TString("_") + frames->GetName();
3722 expression += ":sidePcbPart_pos2";
3723
3724 sidePcbS->MakeNode(expression);
3725 sidePcbS->ComputeBBox(); // need to compute a bounding box
3726 }
3727
3728 TGeoVolume* sidePcbV = new TGeoVolume(TString("sidePcbV") += TString("_") + frames->GetName(), sidePcbS);
3729
3730 // volume medium
3731 TGeoMedium* sidePcbV_medium = pMedFiberGlass;
3732 if (sidePcbV_medium) {
3733 sidePcbV->SetMedium(sidePcbV_medium);
3734 } else
3735 Fatal("Main", "Invalid medium for sidePcbV!");
3736
3737 // volume visual property (transparency)
3738 sidePcbV->SetLineColor(TColor::GetColor("#88ff88"));
3739 sidePcbV->SetTransparency(0);
3740
3741 TGeoCombiTrans* sidePcb_transf[2];
3742
3743 sidePcb_transf[0] = new TGeoCombiTrans();
3744 sidePcb_transf[0]->SetDx(+(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
3745 sidePcb_transf[0]->SetDy(-6.8 /*shift*/ + 6.0 * 0.5);
3746 sidePcb_transf[0]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x39 * 0.5
3747 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
3748
3749 sidePcb_transf[1] = new TGeoCombiTrans();
3750 sidePcb_transf[1]->RotateY(180.0);
3751 sidePcb_transf[1]->SetDx(-(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
3752 sidePcb_transf[1]->SetDy(-6.8 /*shift*/ + 6.0 * 0.5);
3753 sidePcb_transf[1]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x39 * 0.5
3754 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
3755
3756 frames->AddNode(sidePcbV, 0, sidePcb_transf[0]);
3757 frames->AddNode(sidePcbV, 1, sidePcb_transf[1]);
3758 //--------------------------------------------------------------------------
3759
3760 // alum. side support -------------------------------------------------------
3761 Double_t alumSideSupport_XSize = 4.8; // cm
3762 Double_t alumSideSupport_YSize = 52.6 - 6.0; // cm
3763 Double_t alumSideSupport_ZSize = 0.4; // cm
3764
3765 TGeoShape* alumSideSupportS = new TGeoBBox("alumSideSupportS", alumSideSupport_XSize * 0.5,
3766 alumSideSupport_YSize * 0.5, alumSideSupport_ZSize * 0.5);
3767
3768 TGeoVolume* alumSideSupportV =
3769 new TGeoVolume(TString("alumSideSupportV") += TString("_") + frames->GetName(), alumSideSupportS);
3770
3771 // volume medium
3772 TGeoMedium* alumSideSupportV_medium = pMedAluminium;
3773 if (alumSideSupportV_medium) {
3774 alumSideSupportV->SetMedium(alumSideSupportV_medium);
3775 } else
3776 Fatal("Main", "Invalid medium for alumSideSupportV!");
3777
3778 // volume visual property (transparency)
3779 alumSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
3780 alumSideSupportV->SetTransparency(0);
3781
3782 TGeoCombiTrans* alumSideSupport_transf[2];
3783
3784 alumSideSupport_transf[0] = new TGeoCombiTrans();
3785 alumSideSupport_transf[0]->SetDx(+(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
3786 alumSideSupport_transf[0]->SetDy(+1.8);
3787 alumSideSupport_transf[0]->SetDz(+(ZModuleSize_Station163x39 * 0.5 - alumSideSupport_ZSize * 0.5));
3788
3789 alumSideSupport_transf[1] = new TGeoCombiTrans();
3790 alumSideSupport_transf[1]->SetDx(-(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
3791 alumSideSupport_transf[1]->SetDy(+1.8 /*shift*/);
3792 alumSideSupport_transf[1]->SetDz(+(ZModuleSize_Station163x39 * 0.5 - alumSideSupport_ZSize * 0.5));
3793
3794 frames->AddNode(alumSideSupportV, 0, alumSideSupport_transf[0]);
3795 frames->AddNode(alumSideSupportV, 1, alumSideSupport_transf[1]);
3796 //--------------------------------------------------------------------------
3797
3798 // bosch shape --------------------------------------------------------------
3799 Double_t boschShape_XSize = 2.25; // cm
3800 Double_t boschShape_YSize = 52.6 - 6.0; // cm
3801 Double_t boschShape_ZSize = 2.25; // cm
3802
3803 TGeoShape* boschShapeS =
3804 new TGeoBBox("boschShapeS", boschShape_XSize * 0.5, boschShape_YSize * 0.5, boschShape_ZSize * 0.5);
3805
3806 TGeoVolume* boschShapeV = new TGeoVolume(TString("boschShapeV") += TString("_") + frames->GetName(), boschShapeS);
3807
3808 // volume medium
3809 TGeoMedium* boschShapeV_medium = pMedAluminium;
3810 if (boschShapeV_medium) {
3811 boschShapeV->SetMedium(boschShapeV_medium);
3812 } else
3813 Fatal("Main", "Invalid medium for boschShapeV!");
3814
3815 // volume visual property (transparency)
3816 boschShapeV->SetLineColor(TColor::GetColor("#ffcccc"));
3817 boschShapeV->SetTransparency(0);
3818
3819 TGeoCombiTrans* boschShape_transf[2];
3820
3821 boschShape_transf[0] = new TGeoCombiTrans();
3822 boschShape_transf[0]->SetDx(+(boschShape_XSize * 0.5 + 90.86 /*shift*/));
3823 boschShape_transf[0]->SetDy(+1.8 /*shift*/);
3824 boschShape_transf[0]->SetDz(+(ZModuleSize_Station163x39 * 0.5 + boschShape_ZSize * 0.5));
3825
3826 boschShape_transf[1] = new TGeoCombiTrans();
3827 boschShape_transf[1]->SetDx(-(boschShape_XSize * 0.5 + 90.86 /*shift*/));
3828 boschShape_transf[1]->SetDy(+1.8 /*shift*/);
3829 boschShape_transf[1]->SetDz(+(ZModuleSize_Station163x39 * 0.5 + boschShape_ZSize * 0.5));
3830
3831 // frames->AddNode(boschShapeV, 0, boschShape_transf[0]);
3832 // frames->AddNode(boschShapeV, 1, boschShape_transf[1]);
3833 //--------------------------------------------------------------------------
3834
3835 // polyacetal shape ---------------------------------------------------------
3836 Double_t insidePolyacetalShapeUpper_XSize = 11.46; // cm
3837 Double_t insidePolyacetalShapeUpper_YSize = 52.6; // cm
3838 Double_t insidePolyacetalShapeUpper_ZSize = 3.0; // cm
3839 Double_t insidePolyacetalShapeUpper_XDistBetweenParts = 186.22; // cm
3840
3841 Double_t outsidePolyacetalShapeUpper_XSize = 23.5; // cm
3842 Double_t outsidePolyacetalShapeUpper_YSize = 5.405; // cm
3843 Double_t outsidePolyacetalShapeUpper_ZSize = 3.0; // cm
3844 Double_t outsidePolyacetalShapeUpper_XDistBetweenParts = 209.14; // cm
3845
3846 Double_t insidePolyacetalShapeLower_XSize = 8.4; // cm
3847 Double_t insidePolyacetalShapeLower_YSize = 52.6 - 6.0; // cm
3848 Double_t insidePolyacetalShapeLower_ZSize = 3.0; // cm
3849 Double_t insidePolyacetalShapeLower_XDistBetweenParts = 186.22; // cm
3850
3851 Double_t outsidePolyacetalShapeLower_XSize = 26.7; // cm
3852 Double_t outsidePolyacetalShapeLower_YSize = 24.4; // cm
3853 Double_t outsidePolyacetalShapeLower_ZSize = 3.0; // cm
3854 Double_t outsidePolyacetalShapeLower_XDistBetweenParts = 203.02; // cm
3855
3856 TGeoShape* insidePolyacetalShapeUpperS =
3857 new TGeoBBox("insidePolyacetalShapeUpperS", insidePolyacetalShapeUpper_XSize * 0.5,
3858 insidePolyacetalShapeUpper_YSize * 0.5, insidePolyacetalShapeUpper_ZSize * 0.5);
3859 TGeoShape* outsidePolyacetalShapeUpperS =
3860 new TGeoBBox("outsidePolyacetalShapeUpperS", outsidePolyacetalShapeUpper_XSize * 0.5,
3861 outsidePolyacetalShapeUpper_YSize * 0.5, outsidePolyacetalShapeUpper_ZSize * 0.5);
3862 TGeoShape* insidePolyacetalShapeLowerS =
3863 new TGeoBBox("insidePolyacetalShapeLowerS", insidePolyacetalShapeLower_XSize * 0.5,
3864 insidePolyacetalShapeLower_YSize * 0.5, insidePolyacetalShapeLower_ZSize * 0.5);
3865 TGeoShape* outsidePolyacetalShapeLowerS =
3866 new TGeoBBox("outsidePolyacetalShapeLowerS", outsidePolyacetalShapeLower_XSize * 0.5,
3867 outsidePolyacetalShapeLower_YSize * 0.5, outsidePolyacetalShapeLower_ZSize * 0.5);
3868
3869 TGeoVolume* insidePolyacetalShapeUpperV = new TGeoVolume(
3870 TString("insidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), insidePolyacetalShapeUpperS);
3871 TGeoVolume* outsidePolyacetalShapeUpperV = new TGeoVolume(
3872 TString("outsidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), outsidePolyacetalShapeUpperS);
3873 TGeoVolume* insidePolyacetalShapeLowerV = new TGeoVolume(
3874 TString("insidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), insidePolyacetalShapeLowerS);
3875 TGeoVolume* outsidePolyacetalShapeLowerV = new TGeoVolume(
3876 TString("outsidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), outsidePolyacetalShapeLowerS);
3877
3878 // volume medium
3879 TGeoMedium* polyacetalShapeV_medium = pMedPolyacetal;
3880 if (polyacetalShapeV_medium) {
3881 insidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
3882 outsidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
3883 insidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
3884 outsidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
3885 } else
3886 Fatal("Main", "Invalid medium for insidePolyacetalShapeUpperV!");
3887
3888 // volume visual property (transparency)
3889 insidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
3890 insidePolyacetalShapeUpperV->SetTransparency(0);
3891 outsidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
3892 outsidePolyacetalShapeUpperV->SetTransparency(0);
3893 insidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
3894 insidePolyacetalShapeLowerV->SetTransparency(0);
3895 outsidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
3896 outsidePolyacetalShapeLowerV->SetTransparency(0);
3897
3898 TGeoCombiTrans* insidePolyacetalShapeUpper_transf[2];
3899
3900 insidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
3901 insidePolyacetalShapeUpper_transf[0]->SetDx(
3902 +(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3903 insidePolyacetalShapeUpper_transf[0]->SetDy(+1.8 /*shift*/);
3904 insidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
3905
3906 insidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
3907 insidePolyacetalShapeUpper_transf[1]->SetDx(
3908 -(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3909 insidePolyacetalShapeUpper_transf[1]->SetDy(+1.8 /*shift*/);
3910 insidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
3911
3912 TGeoCombiTrans* outsidePolyacetalShapeUpper_transf[2];
3913
3914 outsidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
3915 outsidePolyacetalShapeUpper_transf[0]->SetDx(
3916 +(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3917 outsidePolyacetalShapeUpper_transf[0]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
3918 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
3919 outsidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
3920
3921 outsidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
3922 outsidePolyacetalShapeUpper_transf[1]->SetDx(
3923 -(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3924 outsidePolyacetalShapeUpper_transf[1]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
3925 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
3926 outsidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
3927
3928 TGeoCombiTrans* insidePolyacetalShapeLower_transf[2];
3929
3930 insidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
3931 insidePolyacetalShapeLower_transf[0]->SetDx(
3932 +(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3933 insidePolyacetalShapeLower_transf[0]->SetDy(+1.8 /*shift*/);
3934 insidePolyacetalShapeLower_transf[0]->SetDz(0.0);
3935
3936 insidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
3937 insidePolyacetalShapeLower_transf[1]->SetDx(
3938 -(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3939 insidePolyacetalShapeLower_transf[1]->SetDy(+1.8 /*shift*/);
3940 insidePolyacetalShapeLower_transf[1]->SetDz(0.0);
3941
3942 TGeoCombiTrans* outsidePolyacetalShapeLower_transf[2];
3943
3944 outsidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
3945 outsidePolyacetalShapeLower_transf[0]->SetDx(
3946 +(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3947 outsidePolyacetalShapeLower_transf[0]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
3948 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
3949 outsidePolyacetalShapeLower_transf[0]->SetDz(0.0);
3950
3951 outsidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
3952 outsidePolyacetalShapeLower_transf[1]->SetDx(
3953 -(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3954 outsidePolyacetalShapeLower_transf[1]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
3955 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
3956 outsidePolyacetalShapeLower_transf[1]->SetDz(0.0);
3957
3958 if (TString(frames->GetName()).Contains("upper")) {
3959 frames->AddNode(insidePolyacetalShapeUpperV, 0, insidePolyacetalShapeUpper_transf[0]);
3960 frames->AddNode(insidePolyacetalShapeUpperV, 1, insidePolyacetalShapeUpper_transf[1]);
3961 frames->AddNode(outsidePolyacetalShapeUpperV, 0, outsidePolyacetalShapeUpper_transf[0]);
3962 frames->AddNode(outsidePolyacetalShapeUpperV, 1, outsidePolyacetalShapeUpper_transf[1]);
3963 }
3964
3965 if (TString(frames->GetName()).Contains("lower")) {
3966 frames->AddNode(insidePolyacetalShapeLowerV, 0, insidePolyacetalShapeLower_transf[0]);
3967 frames->AddNode(insidePolyacetalShapeLowerV, 1, insidePolyacetalShapeLower_transf[1]);
3968 frames->AddNode(outsidePolyacetalShapeLowerV, 0, outsidePolyacetalShapeLower_transf[0]);
3969 frames->AddNode(outsidePolyacetalShapeLowerV, 1, outsidePolyacetalShapeLower_transf[1]);
3970 }
3971
3972 //--------------------------------------------------------------------------
3973
3974 // lower fiberglass block ---------------------------------------------------
3975 Double_t lowerFiberGlassBlock_XSize = 165.1; // cm
3976 Double_t lowerFiberGlassBlock_YSize = 1.75; // cm
3977 Double_t lowerFiberGlassBlock_ZSize = 0.9; // cm
3978
3979 Double_t lowerFiberGlassBlockArch_Rmin = 4.0;
3980 Double_t lowerFiberGlassBlockArch_Rmax = 5.75;
3981 Double_t lowerFiberGlassBlockArch_ZSize = lowerFiberGlassBlock_ZSize;
3982
3983 TGeoShape* lowerFiberGlassBlockHalfS =
3984 new TGeoBBox(TString("lowerFiberGlassBlockHalfS") += TString("_") + frames->GetName(),
3985 (lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5,
3986 lowerFiberGlassBlock_YSize * 0.5, lowerFiberGlassBlock_ZSize * 0.5);
3987 TGeoShape* lowerFiberGlassBlockArchS = new TGeoTubeSeg(
3988 TString("lowerFiberGlassBlockArchS") += TString("_") + frames->GetName(), lowerFiberGlassBlockArch_Rmin,
3989 lowerFiberGlassBlockArch_Rmax, lowerFiberGlassBlockArch_ZSize * 0.5, 0.0, 180.0);
3990
3991 TGeoTranslation* lowerFiberGlassBlockHalf_pos1 = new TGeoTranslation();
3992 lowerFiberGlassBlockHalf_pos1->SetName("lowerFiberGlassBlockHalf_pos1");
3993 lowerFiberGlassBlockHalf_pos1->SetDx(
3994 +((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
3995 lowerFiberGlassBlockHalf_pos1->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
3996 lowerFiberGlassBlockHalf_pos1->SetDz(0.0);
3997 lowerFiberGlassBlockHalf_pos1->RegisterYourself();
3998
3999 TGeoTranslation* lowerFiberGlassBlockHalf_pos2 = new TGeoTranslation();
4000 lowerFiberGlassBlockHalf_pos2->SetName("lowerFiberGlassBlockHalf_pos2");
4001 lowerFiberGlassBlockHalf_pos2->SetDx(
4002 -((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
4003 lowerFiberGlassBlockHalf_pos2->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
4004 lowerFiberGlassBlockHalf_pos2->SetDz(0.0);
4005 lowerFiberGlassBlockHalf_pos2->RegisterYourself();
4006
4007 TGeoTranslation* lowerFiberGlassBlockArch_pos = new TGeoTranslation();
4008 lowerFiberGlassBlockArch_pos->SetName("lowerFiberGlassBlockArch_pos");
4009 lowerFiberGlassBlockArch_pos->SetDx(0.0);
4010 lowerFiberGlassBlockArch_pos->SetDy(0.0);
4011 lowerFiberGlassBlockArch_pos->SetDz(0.0);
4012 lowerFiberGlassBlockArch_pos->RegisterYourself();
4013
4014 TGeoCompositeShape* lowerFiberGlassBlockS = new TGeoCompositeShape();
4015 lowerFiberGlassBlockS->SetName(TString("lowerFiberGlassBlockS") += TString("_") + frames->GetName());
4016 {
4017 TString expression = "lowerFiberGlassBlockHalfS";
4018 expression += TString("_") + frames->GetName();
4019 expression += ":lowerFiberGlassBlockHalf_pos1";
4020 expression += "+lowerFiberGlassBlockHalfS";
4021 expression += TString("_") + frames->GetName();
4022 expression += ":lowerFiberGlassBlockHalf_pos2";
4023 expression += "+lowerFiberGlassBlockArchS";
4024 expression += TString("_") + frames->GetName();
4025 expression += ":lowerFiberGlassBlockArch_pos";
4026
4027 lowerFiberGlassBlockS->MakeNode(expression);
4028 lowerFiberGlassBlockS->ComputeBBox(); // need to compute a bounding box
4029 }
4030
4031 TGeoVolume* lowerFiberGlassBlockV =
4032 new TGeoVolume(TString("lowerFiberGlassBlockV") += TString("_") + frames->GetName(), lowerFiberGlassBlockS);
4033
4034 // volume medium
4035 TGeoMedium* lowerFiberGlassBlockV_medium = pMedFiberGlass;
4036 if (lowerFiberGlassBlockV_medium) {
4037 lowerFiberGlassBlockV->SetMedium(lowerFiberGlassBlockV_medium);
4038 } else
4039 Fatal("Main", "Invalid medium for lowerFiberGlassBlockV!");
4040
4041 // volume visual property (transparency)
4042 lowerFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4043 lowerFiberGlassBlockV->SetTransparency(0);
4044
4045 TGeoCombiTrans* lowerFiberGlassBlock_transf[1];
4046
4047 lowerFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4048 lowerFiberGlassBlock_transf[0]->SetDx(+0.0);
4049 lowerFiberGlassBlock_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5) - 0.25 - 0.1);
4050 lowerFiberGlassBlock_transf[0]->SetDz(0.0);
4051
4052 frames->AddNode(lowerFiberGlassBlockV, 0, lowerFiberGlassBlock_transf[0]);
4053 //--------------------------------------------------------------------------
4054
4055 // side fiberglass block ----------------------------------------------------
4056 Double_t sideFiberGlassBlockPart_XSize = 1.45; // cm
4057 Double_t sideFiberGlassBlockPart_YSize = 49.4 - 6.0; // cm
4058 Double_t sideFiberGlassBlockPart_ZSize = 0.89; // cm
4059
4060 TGeoShape* sideFiberGlassBlockS =
4061 new TGeoBBox("sideFiberGlassBlockS", sideFiberGlassBlockPart_XSize * 0.5, sideFiberGlassBlockPart_YSize * 0.5,
4062 sideFiberGlassBlockPart_ZSize * 0.5);
4063
4064 TGeoVolume* sideFiberGlassBlockV =
4065 new TGeoVolume(TString("sideFiberGlassBlockV") += TString("_") + frames->GetName(), sideFiberGlassBlockS);
4066
4067 // volume medium
4068 TGeoMedium* sideFiberGlassBlockV_medium = pMedFiberGlass;
4069 if (sideFiberGlassBlockV_medium) {
4070 sideFiberGlassBlockV->SetMedium(sideFiberGlassBlockV_medium);
4071 } else
4072 Fatal("Main", "Invalid medium for sideFiberGlassBlockV!");
4073
4074 // volume visual property (transparency)
4075 sideFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4076 sideFiberGlassBlockV->SetTransparency(0);
4077
4078 TGeoCombiTrans* sideFiberGlassBlock_transf[2];
4079
4080 sideFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4081 sideFiberGlassBlock_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4082 sideFiberGlassBlock_transf[0]->SetDy(+0.45 /*shift*/);
4083 sideFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4084
4085 sideFiberGlassBlock_transf[1] = new TGeoCombiTrans();
4086 sideFiberGlassBlock_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4087 sideFiberGlassBlock_transf[1]->SetDy(+0.45 /*shift*/);
4088 sideFiberGlassBlock_transf[1]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4089
4090 frames->AddNode(sideFiberGlassBlockV, 0, sideFiberGlassBlock_transf[0]);
4091 frames->AddNode(sideFiberGlassBlockV, 1, sideFiberGlassBlock_transf[1]);
4092 //--------------------------------------------------------------------------
4093
4094 // upper fiberglass block ---------------------------------------------------
4095 Double_t upperFiberGlassBlock_XSize = 165.1; // cm
4096 Double_t upperFiberGlassBlock_YSize = 1.45; // cm
4097 Double_t upperFiberGlassBlock_ZSize = 0.89; // cm
4098
4099 TGeoShape* upperFiberGlassBlockS = new TGeoBBox("upperFiberGlassBlockS", upperFiberGlassBlock_XSize * 0.5,
4100 upperFiberGlassBlock_YSize * 0.5, upperFiberGlassBlock_ZSize * 0.5);
4101
4102 TGeoVolume* upperFiberGlassBlockV =
4103 new TGeoVolume(TString("upperFiberGlassBlockV") += TString("_") + frames->GetName(), upperFiberGlassBlockS);
4104
4105 // volume medium
4106 TGeoMedium* upperFiberGlassBlockV_medium = pMedFiberGlass;
4107 if (upperFiberGlassBlockV_medium) {
4108 upperFiberGlassBlockV->SetMedium(upperFiberGlassBlockV_medium);
4109 } else
4110 Fatal("Main", "Invalid medium for upperFiberGlassBlockV!");
4111
4112 // volume visual property (transparency)
4113 upperFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4114 upperFiberGlassBlockV->SetTransparency(0);
4115
4116 TGeoCombiTrans* upperFiberGlassBlock_transf[1];
4117
4118 upperFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4119 upperFiberGlassBlock_transf[0]->SetDx(0.0);
4120 upperFiberGlassBlock_transf[0]->SetDy(
4121 +(sideFiberGlassBlockPart_YSize * 0.5 - upperFiberGlassBlock_YSize * 0.5 + 0.45 /*shift*/));
4122 upperFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4123
4124 frames->AddNode(upperFiberGlassBlockV, 0, upperFiberGlassBlock_transf[0]);
4125 //--------------------------------------------------------------------------
4126
4127 // brass layer --------------------------------------------------------------
4128 Double_t upperBrasslayer_XSize = 165.1; // cm
4129 Double_t upperBrasslayer_YSize = 1.45; // cm
4130 Double_t upperBrasslayer_ZSize = 0.005; // cm
4131
4132 Double_t sideBrasslayer_XSize = 1.45; // cm
4133 Double_t sideBrasslayer_YSize = 49.4 - 6.0; // cm
4134 Double_t sideBrasslayer_ZSize = 0.005; // cm
4135
4136 TGeoShape* upperBrasslayerS = new TGeoBBox("upperBrasslayerS", upperBrasslayer_XSize * 0.5,
4137 upperBrasslayer_YSize * 0.5, upperBrasslayer_ZSize * 0.5);
4138 TGeoShape* sideBrasslayerS = new TGeoBBox("sideBrasslayerS", sideBrasslayer_XSize * 0.5, sideBrasslayer_YSize * 0.5,
4139 sideBrasslayer_ZSize * 0.5);
4140
4141 TGeoVolume* upperBrasslayerV =
4142 new TGeoVolume(TString("upperBrasslayerV") += TString("_") + frames->GetName(), upperBrasslayerS);
4143 TGeoVolume* sideBrasslayerV =
4144 new TGeoVolume(TString("sideBrasslayerV") += TString("_") + frames->GetName(), sideBrasslayerS);
4145
4146 // volume medium
4147 TGeoMedium* upperBrasslayerV_medium = pMedBrass;
4148 if (upperBrasslayerV_medium) {
4149 upperBrasslayerV->SetMedium(upperBrasslayerV_medium);
4150 sideBrasslayerV->SetMedium(upperBrasslayerV_medium);
4151 } else
4152 Fatal("Main", "Invalid medium for upperBrasslayerV_medium!");
4153
4154 // volume visual property (transparency)
4155 upperBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4156 upperBrasslayerV->SetTransparency(0);
4157 sideBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4158 sideBrasslayerV->SetTransparency(0);
4159
4160 TGeoCombiTrans* upperBrasslayer_transf[1];
4161
4162 upperBrasslayer_transf[0] = new TGeoCombiTrans();
4163 upperBrasslayer_transf[0]->SetDx(0.0);
4164 upperBrasslayer_transf[0]->SetDy(
4165 +(sideFiberGlassBlockPart_YSize * 0.5 - upperBrasslayer_YSize * 0.5 + 0.45 /*shift*/));
4166 upperBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + upperBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4167
4168 TGeoCombiTrans* sideBrasslayer_transf[2];
4169
4170 sideBrasslayer_transf[0] = new TGeoCombiTrans();
4171 sideBrasslayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4172 sideBrasslayer_transf[0]->SetDy(+0.45 /*shift*/);
4173 sideBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4174
4175 sideBrasslayer_transf[1] = new TGeoCombiTrans();
4176 sideBrasslayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4177 sideBrasslayer_transf[1]->SetDy(+0.45 /*shift*/);
4178 sideBrasslayer_transf[1]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4179
4180 frames->AddNode(upperBrasslayerV, 0, upperBrasslayer_transf[0]);
4181
4182 frames->AddNode(sideBrasslayerV, 0, sideBrasslayer_transf[0]);
4183 frames->AddNode(sideBrasslayerV, 1, sideBrasslayer_transf[1]);
4184 //--------------------------------------------------------------------------
4185
4186 // steel layer --------------------------------------------------------------
4187 Double_t upperSteellayer_XSize = 165.1; // cm
4188 Double_t upperSteellayer_YSize = 1.45; // cm
4189 Double_t upperSteellayer_ZSize = 0.005; // cm
4190
4191 Double_t sideSteellayer_XSize = 1.45; // cm
4192 Double_t sideSteellayer_YSize = 49.4 - 6.0; // cm
4193 Double_t sideSteellayer_ZSize = 0.005; // cm
4194
4195 TGeoShape* upperSteellayerS = new TGeoBBox("upperSteellayerS", upperSteellayer_XSize * 0.5,
4196 upperSteellayer_YSize * 0.5, upperSteellayer_ZSize * 0.5);
4197 TGeoShape* sideSteellayerS = new TGeoBBox("sideSteellayerS", sideSteellayer_XSize * 0.5, sideSteellayer_YSize * 0.5,
4198 sideSteellayer_ZSize * 0.5);
4199
4200 TGeoVolume* upperSteellayerV =
4201 new TGeoVolume(TString("upperSteellayerV") += TString("_") + frames->GetName(), upperSteellayerS);
4202 TGeoVolume* sideSteellayerV =
4203 new TGeoVolume(TString("sideSteellayerV") += TString("_") + frames->GetName(), sideSteellayerS);
4204
4205 // volume medium
4206 TGeoMedium* upperSteellayerV_medium = pMedSteel;
4207 if (upperSteellayerV_medium) {
4208 upperSteellayerV->SetMedium(upperSteellayerV_medium);
4209 sideSteellayerV->SetMedium(upperSteellayerV_medium);
4210 } else
4211 Fatal("Main", "Invalid medium for upperSteellayerV_medium!");
4212
4213 // volume visual property (transparency)
4214 upperSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4215 upperSteellayerV->SetTransparency(0);
4216 sideSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4217 sideSteellayerV->SetTransparency(0);
4218
4219 TGeoCombiTrans* upperSteellayer_transf[1];
4220
4221 upperSteellayer_transf[0] = new TGeoCombiTrans();
4222 upperSteellayer_transf[0]->SetDx(0.0);
4223 upperSteellayer_transf[0]->SetDy(
4224 +(sideFiberGlassBlockPart_YSize * 0.5 - upperSteellayer_YSize * 0.5 + 0.45 /*shift*/));
4225 upperSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + upperSteellayer_ZSize * 0.5 + 0.005 /*shift*/);
4226
4227 TGeoCombiTrans* sideSteellayer_transf[2];
4228
4229 sideSteellayer_transf[0] = new TGeoCombiTrans();
4230 sideSteellayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4231 sideSteellayer_transf[0]->SetDy(+0.45 /*shift*/);
4232 sideSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideSteellayer_ZSize * 0.5);
4233
4234 sideSteellayer_transf[1] = new TGeoCombiTrans();
4235 sideSteellayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4236 sideSteellayer_transf[1]->SetDy(+0.45 /*shift*/);
4237 sideSteellayer_transf[1]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideSteellayer_ZSize * 0.5);
4238
4239 frames->AddNode(upperSteellayerV, 0, upperSteellayer_transf[0]);
4240
4241 frames->AddNode(sideSteellayerV, 0, sideSteellayer_transf[0]);
4242 frames->AddNode(sideSteellayerV, 1, sideSteellayer_transf[1]);
4243 //--------------------------------------------------------------------------
4244
4245 return frames;
4246}
4247//------------------------------------------------------------------------------
4248
4250{
4251
4252 // module shape
4253 TGeoShape* moduleS = new TGeoBBox("moduleS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
4254
4255 // module volume
4256 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
4257
4258 // medium
4260 moduleV->SetMedium(pMedArC4H10_80_20);
4261 else
4262 Fatal("Main", "Invalid medium for sensitive modules!");
4263
4264 // visual parameters
4265 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
4266 moduleV->SetTransparency(20);
4267
4268 return moduleV;
4269}
4270//------------------------------------------------------------------------------
bool Bool_t
int Int_t
double Double_t
constexpr Bool_t kTRUE
void Fatal(const char *location, const char *msgfmt,...)
R__EXTERN TGeoManager * gGeoManager
#define gROOT
R__EXTERN TRandom * gRandom
R__EXTERN TSystem * gSystem
static Int_t GetColor(const char *hexcolor)
void Close(Option_t *option="") override
void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE) override
void SetDz(Double_t dz) override
void RotateY(Double_t angle) override
void SetDy(Double_t dy) override
void SetDx(Double_t dx) override
void RotateX(Double_t angle) override
void SetTranslation(const TGeoTranslation &tr)
void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE) override
void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE) override
void ComputeBBox() override
void MakeNode(const char *expression)
virtual void RegisterYourself()
const char * GetName() const override
void SetDy(Double_t dy) override
void SetDz(Double_t dz) override
void SetDx(Double_t dx) override
void SetVisContainers(Bool_t flag=kTRUE) override
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
void Draw(Option_t *option="") override
void SetTransparency(Char_t transparency=0)
virtual void SetMedium(TGeoMedium *medium)
void SetLineColor(Color_t lcolor) override
const char * GetName() const override
virtual void SetName(const char *name)
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
static TString Itoa(Int_t value, Int_t base)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
const Double_t dYFrame_Station163x45
const Double_t dXFrame_Station66x41
const Double_t dZFrame_Station66x41
const Double_t ZModuleSize_Station66x41
const Double_t YStationPositions[NStations]
const Double_t dYFrame_Station66x41
const Double_t ZModuleSize_Station163x45
const Double_t dXFrame_Station163x45
const Double_t YModuleSize_Station163x45
Double_t XModuleShifts[NStations][NMaxModules]
const Double_t dZFrame_Station163x45
const Double_t ZStationPositions[NStations]
Double_t ZModuleShifts[NStations][NMaxModules]
const Double_t YModuleSize_Station66x41
const Double_t XModuleSize_Station163x45
const Double_t XModuleSize_Station66x41
const Double_t XStationPositions[NStations]
Double_t YModuleShifts[NStations][NMaxModules]
const Bool_t XStationRotations[NStations]
const Bool_t YStationRotations[NStations]
const Double_t StsDY[NStations][8]
const Double_t XAlignmentCorrections[NStations][NMaxModules]
const Double_t YAlignmentCorrections[NStations][NMaxModules]
const Double_t ZAlignmentCorrections[NStations][NMaxModules]
const Double_t StsDX[NStations][8]
const Double_t ZModuleSize_Station10x10
const Double_t dYFrame_Station10x10
const Double_t XModuleSize_Station10x10
const Double_t YModuleSize_Station10x10
const Double_t dYFrame_Station163x39
const Double_t ZGEMSize_Station10x10
const Double_t dXFrame_Station10x10
const Double_t dXFrame_Station163x39
const Double_t XModuleSize_Station163x39
const Double_t YModuleSize_Station163x39
const Double_t ZGEMSize_Station163x39
const Double_t ZModuleSize_Station163x39
const Double_t dZFrame_Station163x39
const Double_t dZFrame_Station10x10
const Double_t ZGEMSize_Station163x45
TGeoVolume * CreateFrameForHalfPlane_Station163x39(TString frame_name, Int_t istation)
TGeoVolume * CreateLayersForModule_Station163x39(TString layer_name)
TGeoVolume * CreateLayersForModule_Station163x45(TString layer_name)
TGeoVolume * CreateFrameForHalfPlane_Station163x45(TString frame_name, Int_t istation)
TGeoVolume * CreateModule_Station10x10(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize)
TGeoVolume * CreateModule_Station66x41(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize)
TGeoVolume * CreateFrameForModule_Station163x45(TString frame_name, Double_t dx, Double_t dy, Double_t dz, Double_t hole_radius)
TGeoVolume * CreateStation(TString station_name)
TGeoVolume * CreateModule_Station163x45(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize, Double_t hole_radius)
TGeoVolume * CreateFrameForModule_Station163x39(TString frame_name, Double_t dx, Double_t dy, Double_t dz, Double_t hole_radius)
void DefineRequiredMedia(FairGeoMedia *geoMedia, FairGeoBuilder *geoBuild)
TGeoVolume * CreateFrameForModule_Station66x41(TString frame_name, Double_t dx, Double_t dy, Double_t dz)
void create_rootgeom_GEMS_Run8_detailed_aligned()
TGeoVolume * CreateModule_Station163x39(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize, Double_t hole_radius)