BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_GEMS_Run9_v2.C
Go to the documentation of this file.
1/*
2 * ROOT geometry for the GEM detector RUN-9 (v.2)
3 *
4 * Version: 2.0
5 *
6 * Features:
7 * - Module width updated to 81.52 cm, corresponding to 1019 straight strips.
8 * - Previous version (v.1) used 81.6 cm, corresponding to 1020 straight strips.
9 *
10 * Configuration:
11 * The type of geometry to create (basic or detailed) can be selected
12 * via the global flag DETAILED_ROOT_GEOMETRY.
13 *
14 * Author: Baranov D.
15 * Date: 30.07.2026
16 */
17
18const Bool_t DETAILED_ROOT_GEOMETRY = true; // create detailed geometry
19
20// Set Parameters of GEMS -------------------------------------------------------
21const Int_t NStations = 8; // stations in the detector
22const Int_t NMaxModules = 4; // max. number of modules in a station
23
24// X-position of the hole center for the plane closest to the target (in a station)
26 +1.419, // 0 st. (M15)
27 +2.529, // 1 st. (M10)
28 +3.408, // 2 st. (M14)
29 +4.697, // 3 st. (M8)
30 +6.335, // 4 st. (M16)
31 +8.213, // 5 st. (M7)
32 +9.784, // 6 st. (M12)
33 +50.494 // 7 st. (small GEM)
34};
35
36// Y-position of the hole center for the plane closest to the target (in a station)
38 -0.032, // 0 st. (M15)
39 +0.123, // 1 st. (M10)
40 +0.026, // 2 st. (M14)
41 -0.013, // 3 st. (M8),
42 -0.026, // 4 st. (M16)
43 +0.058, // 5 st. (M7)
44 -0.048, // 6 st. (M12)
45 -0.186 // 7 st. (small GEM)
46};
47
48// Z-position of gas volume for the plane closest to the target (in a station)
50 +61.107, // 0 st. (M15)
51 +92.313, // 1 st. (M10)
52 +123.541, // 2 st. (M14)
53 +154.778, // 3 st. (M8)
54 +185.458, // 4 st. (M16)
55 +217.141, // 5 st. (M7)
56 +248.367, // 6 st. (M12)
57 +792.532 // 7 st. (small GEM)
58};
59
60// Shifts for the second plane in a station relative to the closest half-plane
62 +0.111, // 0 st. (M6)
63 +0.142, // 1 st. (M13)
64 +0.081, // 2 st. (M11)
65 +0.100, // 3 st. (M18)
66 +0.092, // 4 st. (M5)
67 +0.113, // 5 st. (M17)
68 +0.155, // 6 st. (M9)
69 +0.0 // 7 st. (small GEM)
70};
72 +0.008, // 0 st. (M6)
73 -0.100, // 1 st. (M13)
74 +0.048, // 2 st. (M11)
75 +0.042, // 3 st. (M18)
76 +0.109, // 4 st. (M5)
77 -0.089, // 5 st. (M17)
78 +0.168, // 6 st. (M9)
79 +0.0 // 7 st. (small GEM)
80};
82 +4.691, // 0 st. (M6)
83 +4.158, // 1 st. (M13)
84 +4.672, // 2 st. (M11)
85 +4.124, // 3 st. (M18)
86 +4.683, // 4 st. (M5)
87 +3.995, // 5 st. (M17)
88 +4.063, // 6 st. (M9)
89 +0.0 // 7 st. (small GEM)
90};
91
92//(X-Y-Z)Shifts of modules in each station
94 {163.04 * 0.25 + xShift[0], -163.04 * 0.25 + xShift[0], // 0 st. (upper h. plane)
95 163.04 * 0.25, -163.04 * 0.25}, // 0 st. (lower h. plane)
96
97 {163.04 * 0.25, -163.04 * 0.25, // 1 st. (upper h. plane)
98 163.04 * 0.25 + xShift[1], -163.04 * 0.25 + xShift[1]}, // 1 st. (lower h. plane)
99
100 {163.04 * 0.25 + xShift[2], -163.04 * 0.25 + xShift[2], // 2 st. (upper h. plane)
101 163.04 * 0.25, -163.04 * 0.25}, // 2 st. (lower h. plane)
102
103 {163.04 * 0.25, -163.04 * 0.25, // 3 st. (upper h. plane)
104 163.04 * 0.25 + xShift[3], -163.04 * 0.25 + xShift[3]}, // 3 st. (lower h. plane)
105
106 {163.04 * 0.25 + xShift[4], -163.04 * 0.25 + xShift[4], // 4 st. (upper h. plane)
107 163.04 * 0.25, -163.04 * 0.25}, // 4 st. (lower h. plane)
108
109 {163.04 * 0.25, -163.04 * 0.25, // 5 st. (upper h. plane)
110 163.04 * 0.25 + xShift[5], -163.04 * 0.25 + xShift[5]}, // 5 st. (lower h. plane)
111
112 {163.04 * 0.25 + xShift[6], -163.04 * 0.25 + xShift[6], // 6 st. (upper h. plane)
113 163.04 * 0.25, -163.04 * 0.25}, // 6 st. (lower h. plane)
114
115 {0.0} // 7 st.
116};
118 {+22.5 + yShift[0], +22.5 + yShift[0], // 0 st. (upper h. plane)
119 -19.5, -19.5}, // 0 st. (lower h. plane)
120
121 {+22.5, +22.5, // 1 st. (upper h. plane)
122 -19.5 + yShift[1], -19.5 + yShift[1]}, // 1 st. (lower h. plane)
123
124 {+22.5 + yShift[2], +22.5 + yShift[2], // 2 st. (upper h. plane)
125 -19.5, -19.5}, // 2 st. (lower h. plane)
126
127 {+22.5, +22.5, // 3 st. (upper h. plane)
128 -19.5 + yShift[3], -19.5 + yShift[3]}, // 3 st. (lower h. plane)
129
130 {+22.5 + yShift[4], +22.5 + yShift[4], // 4 st. (upper h. plane)
131 -19.5, -19.5}, // 4 st. (lower h. plane)
132
133 {+22.5, +22.5, // 5 st. (upper h. plane)
134 -19.5 + yShift[5], -19.5 + yShift[5]}, // 5 st. (lower h. plane)
135
136 {+22.5 + yShift[6], +22.5 + yShift[6], // 6 st. (upper h. plane)
137 -19.5, -19.5}, // 6 st. (lower h. plane)
138
139 {0.0} // 7 st.
140};
142 {zShift[0], zShift[0], 0.0, 0.0}, // 0 st.
143 {0.0, 0.0, zShift[1], zShift[1]}, // 1 st.
144 {zShift[2], zShift[2], 0.0, 0.0}, // 2 st.
145 {0.0, 0.0, zShift[3], zShift[3]}, // 3 st.
146 {zShift[4], zShift[4], 0.0, 0.0}, // 4 st.
147 {0.0, 0.0, zShift[5], zShift[5]}, // 5 st.
148 {zShift[6], zShift[6], 0.0, 0.0}, // 6 st.
149 {0.0} // 7 st.
150};
151
152/*
153 * Basic station:
154 *
155 * -------------------- --------------------
156 * | | |
157 * | module 0 | module 1 | ^ beam direction (Z)
158 * | | | /
159 * | ------------|-------------- | /
160 * | / | / | /
161 * | / | / |/
162 * -----------------------------------------
163 * | \ | \ |
164 * | \ | \ |
165 * | \___________|______________\ |
166 * | | |
167 * | | |
168 * | module 2 | module 3 |
169 * -----------------------------------------
170 *
171 */
172
173// rotations of stations around y-axis by 180 deg.
174const Bool_t YStationRotations[NStations] = {true /*0*/, false /*1*/, true /*2*/, false /*3*/,
175 true /*4*/, false /*5*/, true /*6*/, false /*7*/};
176
177// rotations of stations around x-axis by 180 deg.
178const Bool_t XStationRotations[NStations] = {false /*0*/, false /*1*/, false /*2*/, false /*3*/,
179 false /*4*/, false /*5*/, false /*6*/, false /*7*/};
180
181// GEM plane sizes (163x45 type) ------------------------------------------------
182const Double_t XModuleSize_Station163x45 = 163.04 * 0.5; // 81.52 (1019 straight strips)
184const Double_t ZModuleSize_Station163x45 = 0.9; // sensitive volume
185const Double_t ZGEMSize_Station163x45 = 3.9; // common thickness of GEM (including sens. vol)
186//------------------------------------------------------------------------------
187
188// GEM plane sizes (163x39 type) ------------------------------------------------
189const Double_t XModuleSize_Station163x39 = 163.04 * 0.5; // 81.52 (1019 straight strips)
191const Double_t ZModuleSize_Station163x39 = 0.9; // sensitive volume
192const Double_t ZGEMSize_Station163x39 = 3.9; // common thickness of GEM (including sens. vol)
193//------------------------------------------------------------------------------
194
195// GEM plane sizes (10x10 type) -------------------------------------------------
198const Double_t ZModuleSize_Station10x10 = 0.9; // sensitive volume
199//------------------------------------------------------------------------------
200
201// GeoManager
203
204// media
220
221class FairGeoMedia;
222class FairGeoBuilder;
223
224TGeoVolume* CreateStation(TString station_name);
225
227 Double_t xsize,
228 Double_t ysize,
229 Double_t zsize,
230 Double_t hole_radius);
233
235 Double_t xsize,
236 Double_t ysize,
237 Double_t zsize,
238 Double_t hole_radius);
241
242TGeoVolume* CreateModule_Station10x10(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize);
245
246void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
247{
248
249 // air medium
250 FairGeoMedium* mAir = geoMedia->getMedium("air");
251 if (!mAir)
252 Fatal("Main", "FairMedium air not found");
253 geoBuild->createMedium(mAir);
254 pMedAir = gGeoManager->GetMedium("air");
255 if (!pMedAir)
256 Fatal("Main", "Medium air not found");
257
258 // carbon medium
259 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
260 if (!mCarbon)
261 Fatal("Main", "FairMedium carbon not found");
262 geoBuild->createMedium(mCarbon);
263 pMedCarbon = gGeoManager->GetMedium("carbon");
264 if (!pMedCarbon)
265 Fatal("Main", "Medium carbon not found");
266
267 // fiberglass medium
268 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
269 if (!mFiberGlass)
270 Fatal("Main", "FairMedium fiberglass not found");
271 geoBuild->createMedium(mFiberGlass);
272 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
273 if (!pMedFiberGlass)
274 Fatal("Main", "Medium fiberglass not found");
275
276 // copper medium
277 FairGeoMedium* mCopper = geoMedia->getMedium("copper");
278 if (!mCopper)
279 Fatal("Main", "FairMedium copper not found");
280 geoBuild->createMedium(mCopper);
281 pMedCopper = gGeoManager->GetMedium("copper");
282 if (!pMedCopper)
283 Fatal("Main", "Medium copper not found");
284
285 // arco27020 medium
286 FairGeoMedium* mArCO27030 = geoMedia->getMedium("arco27030");
287 if (!mArCO27030)
288 Fatal("Main", "FairMedium arco27030 not found");
289 geoBuild->createMedium(mArCO27030);
290 pMedArCO27030 = gGeoManager->GetMedium("arco27030");
291 if (!pMedArCO27030)
292 Fatal("Main", "Medium arco27030 not found");
293
294 // ArC4H10_80_20 medium
295 FairGeoMedium* mArC4H10_80_20 = geoMedia->getMedium("ArC4H10_80_20");
296 if (!mArC4H10_80_20)
297 Fatal("Main", "FairMedium ArC4H10_80_20 not found");
298 geoBuild->createMedium(mArC4H10_80_20);
299 pMedArC4H10_80_20 = gGeoManager->GetMedium("ArC4H10_80_20");
301 Fatal("Main", "Medium ArC4H10_80_20 not found");
302
303 // aluminium medium
304 FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium");
305 if (!mAluminium)
306 Fatal("Main", "FairMedium aluminium not found");
307 geoBuild->createMedium(mAluminium);
308 pMedAluminium = gGeoManager->GetMedium("aluminium");
309 if (!pMedAluminium)
310 Fatal("Main", "Medium aluminium not found");
311
312 // epoxide compound (for GEM frames)
313 FairGeoMedium* mEpoxideCompound = geoMedia->getMedium("polyurethane_hd");
314 if (!mEpoxideCompound)
315 Fatal("Main", "FairMedium epoxideCompound not found");
316 geoBuild->createMedium(mEpoxideCompound);
317 pMedEpoxideCompound = gGeoManager->GetMedium("polyurethane_hd");
319 Fatal("Main", "Medium epoxideCompound not found");
320
321 // glue
322 FairGeoMedium* mGlue = geoMedia->getMedium("acrylic_glue");
323 if (!mGlue)
324 Fatal("Main", "FairMedium acrylic_glue not found");
325 geoBuild->createMedium(mGlue);
326 pMedGlue = gGeoManager->GetMedium("acrylic_glue");
327 if (!pMedGlue)
328 Fatal("Main", "Medium acrylic_glue not found");
329
330 // brass medium
331 FairGeoMedium* mBrass = geoMedia->getMedium("brass");
332 if (!mBrass)
333 Fatal("Main", "FairMedium brass not found");
334 geoBuild->createMedium(mBrass);
335 pMedBrass = gGeoManager->GetMedium("brass");
336 if (!pMedBrass)
337 Fatal("Main", "Medium brass not found");
338
339 // steel medium
340 FairGeoMedium* mSteel = geoMedia->getMedium("steel");
341 if (!mSteel)
342 Fatal("Main", "FairMedium steel not found");
343 geoBuild->createMedium(mSteel);
344 pMedSteel = gGeoManager->GetMedium("steel");
345 if (!pMedSteel)
346 Fatal("Main", "Medium steel not found");
347
348 // honeycomb medium
349 FairGeoMedium* mHoneyComb = geoMedia->getMedium("AramidHoneyComb");
350 if (!mHoneyComb)
351 Fatal("Main", "FairMedium AramidHoneyComb not found");
352 geoBuild->createMedium(mHoneyComb);
353 pMedHoneyComb = gGeoManager->GetMedium("AramidHoneyComb");
354 if (!pMedHoneyComb)
355 Fatal("Main", "Medium AramidHoneyComb not found");
356
357 // polyacetal medium ((polyoxymethylene))
358 FairGeoMedium* mPolyacetal = geoMedia->getMedium("polyacetal");
359 if (!mPolyacetal)
360 Fatal("Main", "FairMedium polyacetal not found");
361 geoBuild->createMedium(mPolyacetal);
362 pMedPolyacetal = gGeoManager->GetMedium("polyacetal");
363 if (!pMedPolyacetal)
364 Fatal("Main", "Medium polyacetal not found");
365
366 // polyamide medium
367 FairGeoMedium* mPolyamide = geoMedia->getMedium("polyamide");
368 if (!mPolyamide)
369 Fatal("Main", "FairMedium polyamide not found");
370 geoBuild->createMedium(mPolyamide);
371 pMedPolyamide = gGeoManager->GetMedium("polyamide");
372 if (!pMedPolyamide)
373 Fatal("Main", "Medium polyamide not found");
374
375 // kapton medium
376 FairGeoMedium* mKapton = geoMedia->getMedium("kapton");
377 if (!mKapton)
378 Fatal("Main", "FairMedium kapton not found");
379 geoBuild->createMedium(mKapton);
380 pMedKapton = gGeoManager->GetMedium("kapton");
381 if (!pMedKapton)
382 Fatal("Main", "Medium kapton not found");
383}
384
386{
387
388 // ---- set working directory --------------------------------------------
389 TString gPath = gSystem->Getenv("VMCWORKDIR");
390
391 // ------- Geometry file name (output) ---------------------------------
392 const TString geoDetectorName = "GEMS";
393 const TString geoDetectorVersion = DETAILED_ROOT_GEOMETRY ? "Run9_detailed_v2" : "Run9_v2";
394 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
395
396 // ---- global geometry parameters ---------------------------------------
397 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
398 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
399
400 // ------- Load media from media file ----------------------------------
401 TString medFile = gPath + "/geometry/media.geo";
402 geoFace->setMediaFile(medFile);
403 geoFace->readMedia();
404 FairGeoMedia* geoMedia = geoFace->getMedia();
405 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
406
407 DefineRequiredMedia(geoMedia, geoBuild);
408 // -------------------------------------------------------------------------
409
410 // -------------- Create geometry and top volume ------------------------
411 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
412 gGeoMan->SetName(geoDetectorName + "_geom");
413 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
414 top->SetMedium(pMedAir);
415 gGeoMan->SetTopVolume(top);
416 // gGeoMan->SetTopVisible(1);
417 // -------------------------------------------------------------------------
418
419 // Define TOP Geometry
420 TGeoVolume* GEMS = new TGeoVolumeAssembly(geoDetectorName);
421 GEMS->SetMedium(pMedAir);
422
423 for (Int_t istation = 0; istation < NStations; ++istation) {
424 // for(Int_t istation = 0; istation < 1; ++istation) {
425
426 Int_t stationNum = istation;
427 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10) + TString("_GEM"));
428
429 if (istation < 7) { // big GEMs
430 // upper part
431 TGeoVolume* module0 =
434 TGeoVolume* module1 =
437
438 TGeoVolume* layers0 = CreateLayersForModule_Station163x45(TString("layer0_") + station->GetName());
439 TGeoVolume* layers1 = CreateLayersForModule_Station163x45(TString("layer1_") + station->GetName());
440
441 TGeoVolume* frame_upper =
442 CreateFrameForHalfPlane_Station163x45(TString("frame_upper_") + station->GetName());
443
444 // lower part
445 TGeoVolume* module2 =
448 TGeoVolume* module3 =
451
452 TGeoVolume* layers2 = CreateLayersForModule_Station163x39(TString("layer2_") + station->GetName());
453 TGeoVolume* layers3 = CreateLayersForModule_Station163x39(TString("layer3_") + station->GetName());
454
455 TGeoVolume* frame_lower =
456 CreateFrameForHalfPlane_Station163x39(TString("frame_lower_") + station->GetName());
457
458 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
459 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
460 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
461
462 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
463 module1_transform->RotateY(180.0);
464 module1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
465 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
466
467 TGeoCombiTrans* module2_transform = new TGeoCombiTrans();
468 module2_transform->RotateX(180.0);
469 module2_transform->SetTranslation(XModuleShifts[stationNum][2], YModuleShifts[stationNum][2],
470 ZModuleShifts[stationNum][2] + ZModuleSize_Station163x39 * 0.5);
471
472 TGeoCombiTrans* module3_transform = new TGeoCombiTrans();
473 module3_transform->RotateX(180.0);
474 module3_transform->RotateY(180.0);
475 module3_transform->SetTranslation(XModuleShifts[stationNum][3], YModuleShifts[stationNum][3],
476 ZModuleShifts[stationNum][3] + ZModuleSize_Station163x39 * 0.5);
477
478 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
479 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
480 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
481
482 TGeoCombiTrans* layers1_transform = new TGeoCombiTrans();
483 layers1_transform->RotateY(180.0);
484 layers1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
485 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
486
487 TGeoCombiTrans* layers2_transform = new TGeoCombiTrans();
488 layers2_transform->RotateX(180.0);
489 layers2_transform->SetTranslation(XModuleShifts[stationNum][2], YModuleShifts[stationNum][2],
490 ZModuleShifts[stationNum][2] + ZModuleSize_Station163x39 * 0.5);
491
492 TGeoCombiTrans* layers3_transform = new TGeoCombiTrans();
493 layers3_transform->RotateX(180.0);
494 layers3_transform->RotateY(180.0);
495 layers3_transform->SetTranslation(XModuleShifts[stationNum][3], YModuleShifts[stationNum][3],
496 ZModuleShifts[stationNum][3] + ZModuleSize_Station163x39 * 0.5);
497
498 TGeoCombiTrans* frame_upper_transform = new TGeoCombiTrans();
499 if (YStationRotations[stationNum] == true)
500 frame_upper_transform->RotateY(180.0);
501 if (XStationRotations[stationNum] == true)
502 frame_upper_transform->RotateX(180.0);
503 frame_upper_transform->SetTranslation((XModuleShifts[stationNum][0] + XModuleShifts[stationNum][1]) * 0.5,
504 YModuleShifts[stationNum][0],
505 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
506
507 TGeoCombiTrans* frame_lower_transform = new TGeoCombiTrans();
508 frame_lower_transform->RotateZ(180.0);
509 if (YStationRotations[stationNum] == false)
510 frame_lower_transform->RotateY(180.0);
511 if (XStationRotations[stationNum] == true)
512 frame_lower_transform->RotateX(180.0);
513 frame_lower_transform->SetTranslation((XModuleShifts[stationNum][2] + XModuleShifts[stationNum][3]) * 0.5,
514 YModuleShifts[stationNum][2],
515 ZModuleShifts[stationNum][2] + ZModuleSize_Station163x39 * 0.5);
516
517 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
518 station->AddNode(module1, 0, new TGeoCombiTrans(*module1_transform)); // module
519 station->AddNode(module2, 0, new TGeoCombiTrans(*module2_transform)); // module
520 station->AddNode(module3, 0, new TGeoCombiTrans(*module3_transform)); // module
521
523 station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); // layers
524 station->AddNode(layers1, 0, new TGeoCombiTrans(*layers1_transform)); // layers
525 station->AddNode(layers2, 0, new TGeoCombiTrans(*layers2_transform)); // layers
526 station->AddNode(layers3, 0, new TGeoCombiTrans(*layers3_transform)); // layers
527
528 station->AddNode(frame_upper, 0, frame_upper_transform);
529 station->AddNode(frame_lower, 0, frame_lower_transform);
530 }
531 }
532
533 if (istation == 7) { // small GEM
534 TGeoVolume* module0 =
535 CreateModule_Station10x10(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station10x10,
537 TGeoVolume* layers0 = CreateLayersForModule_Station10x10(TString("layers0_") + station->GetName());
538 TGeoVolume* frames0 = CreateFrameForModule_Station10x10(TString("frames0_") + station->GetName());
539
540 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
541 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
542 ZModuleShifts[stationNum][0] + ZModuleSize_Station10x10 * 0.5);
543
544 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
545 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
546 ZModuleShifts[stationNum][0] + ZModuleSize_Station10x10 * 0.5);
547
548 TGeoCombiTrans* frames0_transform = new TGeoCombiTrans();
549 frames0_transform->SetTranslation((XModuleShifts[stationNum][0] + XModuleShifts[stationNum][1]),
550 YModuleShifts[stationNum][0], ZModuleSize_Station10x10 * 0.5);
551
552 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
553
555 station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); // layers
556 station->AddNode(frames0, 0, new TGeoCombiTrans(*frames0_transform)); // frame
557 }
558 }
559
560 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
561 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
562 ZStationPositions[stationNum]);
563
564 GEMS->AddNode(station, 0, station_transform);
565 }
566
567 top->AddNode(GEMS, 0);
569
570 // --------------- Finish -----------------------------------------------
571 gGeoMan->CloseGeometry();
572 gGeoMan->CheckOverlaps(0.0001);
573 gGeoMan->PrintOverlaps();
574 gGeoMan->Test();
575 // gGeoMan->RestoreMasterVolume();
576
577 TFile* geoFile = new TFile(geoFileName, "RECREATE");
578 top->Write();
579 geoFile->Close();
580 top->Draw("ogl");
581}
582
583//------------------------------------------------------------------------------
584
586{
587
588 TGeoVolume* stationA = new TGeoVolumeAssembly(station_name);
589 stationA->SetMedium(pMedAir);
590
591 return stationA;
592}
593
595 Double_t xsize,
596 Double_t ysize,
597 Double_t zsize,
598 Double_t hole_radius)
599{
600
601 gRandom->SetSeed(0);
602 Int_t uniqueId = gRandom->Integer(100000);
603
604 // module shapes
605 TGeoShape* module_partS =
606 new TGeoBBox(TString("module_partS_") + TString::Itoa(uniqueId, 10), xsize * 0.5, ysize * 0.5, zsize * 0.5);
607 TGeoShape* holeS =
608 new TGeoTube(TString("holeS_") + TString::Itoa(uniqueId, 10), 0.0, hole_radius, zsize * 0.5 + 0.01);
609
610 TGeoTranslation* hole_module_trans = new TGeoTranslation(
611 TString("hole_module_trans_") + TString::Itoa(uniqueId, 10), -xsize * 0.5, -ysize * 0.5, 0.0);
612
613 hole_module_trans->RegisterYourself();
614
615 TString bool_expression_module = TString(module_partS->GetName()) + TString(" - ") + TString(holeS->GetName())
616 + TString(":") + TString(hole_module_trans->GetName());
617 TGeoCompositeShape* moduleS = new TGeoCompositeShape(bool_expression_module);
618
619 // module volume
620 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
621
622 // medium
625 else
626 Fatal("Main", "Invalid medium for sensitive modules!");
627
628 // visual parameters
629 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
630 moduleV->SetTransparency(20);
631
632 return moduleV;
633}
634//--------------------------F----------------------------------------------------
635
637{
638
639 Int_t uniqueId = gRandom->Integer(100000);
640
641 // frame volumes
642 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
643 layers->SetMedium(pMedAir);
644
645 // Common parameters for all layers
646 Double_t layer_XSize = XModuleSize_Station163x45; // cm
647 Double_t layer_YSize = YModuleSize_Station163x45; // cm
648
649 Double_t layerFront_XSize = 80.71; // cm
650 Double_t layerFront_YSize = 44.2; // cm
651 Double_t layerFront_XShift = -0.445; // cm
652 Double_t layerFront_YShift = -0.2; // cm
653
654 Double_t layerBack_XSize = 80.71; // cm
655 Double_t layerBack_YSize = 44.2; // cm
656 Double_t layerBack_XShift = -0.445; // cm
657 Double_t layerBack_YShift = -0.2; // cm
658
659 // copper layer -------------------------------------------------------------
660 Double_t copperLayer_ZSize = 0.00655; // cm;
661 Double_t copperLayerHole_Radius = 6.0; // cm
662
663 // layer shape
664 TGeoShape* copperLayerFrontBlankS =
665 new TGeoBBox(TString("copperLayerFrontBlankS") +=
666 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
667 layerFront_XSize * 0.5, layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
668 TGeoShape* copperLayerBackBlankS =
669 new TGeoBBox(TString("copperLayerBackBlankS") +=
670 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
671 layerBack_XSize * 0.5, layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
672
673 TGeoShape* copperLayerFrontHoleS =
674 new TGeoTube(TString("copperLayerFrontHoleS") +=
675 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
676 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
677 TGeoShape* copperLayerBackHoleS =
678 new TGeoTube(TString("copperLayerBackHoleS") +=
679 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
680 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
681
682 TGeoTranslation* copperLayerFrontHole_pos = new TGeoTranslation();
683 copperLayerFrontHole_pos->SetName(TString("copperLayerFrontHole_pos") +=
684 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
685 copperLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
686 copperLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
687 copperLayerFrontHole_pos->SetDz(0.0);
688 copperLayerFrontHole_pos->RegisterYourself();
689
690 TGeoTranslation* copperLayerBackHole_pos = new TGeoTranslation();
691 copperLayerBackHole_pos->SetName(TString("copperLayerBackHole_pos") +=
692 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
693 copperLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
694 copperLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
695 copperLayerBackHole_pos->SetDz(0.0);
696 copperLayerBackHole_pos->RegisterYourself();
697
698 TGeoCompositeShape* copperLayerFrontS = new TGeoCompositeShape();
699 copperLayerFrontS->SetName(TString("copperLayerFrontS") +=
700 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
701 {
702 TString expression = "copperLayerFrontBlankS";
703 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
704 expression += "-copperLayerFrontHoleS";
705 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
706 expression += ":copperLayerFrontHole_pos";
707 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
708
709 copperLayerFrontS->MakeNode(expression);
710 copperLayerFrontS->ComputeBBox(); // need to compute a bounding box
711 }
712
713 TGeoCompositeShape* copperLayerBackS = new TGeoCompositeShape();
714 copperLayerBackS->SetName(TString("copperLayerBackS") +=
715 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
716 {
717 TString expression = "copperLayerBackBlankS";
718 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
719 expression += "-copperLayerBackHoleS";
720 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
721 expression += ":copperLayerBackHole_pos";
722 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
723
724 copperLayerBackS->MakeNode(expression);
725 copperLayerBackS->ComputeBBox(); // need to compute a bounding box
726 }
727
728 TGeoVolume* copperLayerFrontV =
729 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
730 TGeoVolume* copperLayerBackV =
731 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
732
733 // volume medium
734 TGeoMedium* copperLayerV_medium = pMedCopper;
735 if (copperLayerV_medium) {
736 copperLayerFrontV->SetMedium(copperLayerV_medium);
737 copperLayerBackV->SetMedium(copperLayerV_medium);
738 } else
739 Fatal("Main", "Invalid medium for copperLayerV!");
740
741 // volume visual property (transparency)
742 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
743 copperLayerFrontV->SetTransparency(0);
744 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
745 copperLayerBackV->SetTransparency(0);
746
747 TGeoCombiTrans* copperLayerFront_transf[2];
748
749 copperLayerFront_transf[0] = new TGeoCombiTrans();
750 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
751 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
752 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize * 0.5);
753
754 TGeoCombiTrans* copperLayerBack_transf[1];
755
756 copperLayerBack_transf[0] = new TGeoCombiTrans();
757 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
758 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
759 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5);
760
761 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
762 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
763 //--------------------------------------------------------------------------
764
765 // glue layer ---------------------------------------------------------------
766 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
767 Double_t glueLayerHole_Radius = 6.0; // cm
768
769 // layer shape
770 TGeoShape* glueLayerFrontBlankS =
771 new TGeoBBox(TString("glueLayerFrontBlankS") +=
772 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
773 layerFront_XSize * 0.5, layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
774 TGeoShape* glueLayerBackBlankS = new TGeoBBox(
775 TString("glueLayerBackBlankS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
776 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
777
778 TGeoShape* glueLayerFrontHoleS = new TGeoTube(
779 TString("glueLayerFrontHoleS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
780 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
781 TGeoShape* glueLayerBackHoleS = new TGeoTube(
782 TString("glueLayerBackHoleS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
783 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
784
785 TGeoTranslation* glueLayerFrontHole_pos = new TGeoTranslation();
786 glueLayerFrontHole_pos->SetName(TString("glueLayerFrontHole_pos") +=
787 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
788 glueLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
789 glueLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
790 glueLayerFrontHole_pos->SetDz(0.0);
791 glueLayerFrontHole_pos->RegisterYourself();
792
793 TGeoTranslation* glueLayerBackHole_pos = new TGeoTranslation();
794 glueLayerBackHole_pos->SetName(TString("glueLayerBackHole_pos") +=
795 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
796 glueLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
797 glueLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
798 glueLayerBackHole_pos->SetDz(0.0);
799 glueLayerBackHole_pos->RegisterYourself();
800
801 TGeoCompositeShape* glueLayerFrontS = new TGeoCompositeShape();
802 glueLayerFrontS->SetName(TString("glueLayerFrontS") +=
803 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
804 {
805 TString expression = "glueLayerFrontBlankS";
806 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
807 expression += "-glueLayerFrontHoleS";
808 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
809 expression += ":glueLayerFrontHole_pos";
810 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
811
812 glueLayerFrontS->MakeNode(expression);
813 glueLayerFrontS->ComputeBBox(); // need to compute a bounding box
814 }
815
816 TGeoCompositeShape* glueLayerBackS = new TGeoCompositeShape();
817 glueLayerBackS->SetName(TString("glueLayerBackS") +=
818 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
819 {
820 TString expression = "glueLayerBackBlankS";
821 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
822 expression += "-glueLayerBackHoleS";
823 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
824 expression += ":glueLayerBackHole_pos";
825 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
826
827 glueLayerBackS->MakeNode(expression);
828 glueLayerBackS->ComputeBBox(); // need to compute a bounding box
829 }
830
831 TGeoVolume* glueLayerFrontV =
832 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
833 TGeoVolume* glueLayerBackV =
834 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
835
836 // volume medium
837 TGeoMedium* glueLayerV_medium = pMedGlue;
838 if (glueLayerV_medium) {
839 glueLayerFrontV->SetMedium(glueLayerV_medium);
840 glueLayerBackV->SetMedium(glueLayerV_medium);
841 } else
842 Fatal("Main", "Invalid medium for glueLayerV!");
843
844 // volume visual property (transparency)
845 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
846 glueLayerFrontV->SetTransparency(0);
847 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
848 glueLayerBackV->SetTransparency(0);
849
850 TGeoCombiTrans* glueLayerFront_transf[1];
851
852 glueLayerFront_transf[0] = new TGeoCombiTrans();
853 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
854 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
855 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
856
857 TGeoCombiTrans* glueLayerBack_transf[1];
858
859 glueLayerBack_transf[0] = new TGeoCombiTrans();
860 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
861 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
862 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize * 0.5);
863
864 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
865 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
866 //--------------------------------------------------------------------------
867
868 // epoxide layer ------------------------------------------------------------
869 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
870 Double_t epoxideLayerHole_Radius = 6.0; // cm
871
872 // layer shape
873 TGeoShape* epoxideLayerFrontBlankS =
874 new TGeoBBox(TString("epoxideLayerFrontBlankS") +=
875 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
876 layerFront_XSize * 0.5, layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
877 TGeoShape* epoxideLayerBackBlankS =
878 new TGeoBBox(TString("epoxideLayerBackBlankS") +=
879 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
880 layerBack_XSize * 0.5, layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
881
882 TGeoShape* epoxideLayerFrontHoleS =
883 new TGeoTube(TString("epoxideLayerFrontHoleS") +=
884 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
885 0.0, epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
886 TGeoShape* epoxideLayerBackHoleS =
887 new TGeoTube(TString("epoxideLayerBackHoleS") +=
888 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
889 0.0, epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
890
891 TGeoTranslation* epoxideLayerFrontHole_pos = new TGeoTranslation();
892 epoxideLayerFrontHole_pos->SetName(TString("epoxideLayerFrontHole_pos") +=
893 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
894 epoxideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
895 epoxideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
896 epoxideLayerFrontHole_pos->SetDz(0.0);
897 epoxideLayerFrontHole_pos->RegisterYourself();
898
899 TGeoTranslation* epoxideLayerBackHole_pos = new TGeoTranslation();
900 epoxideLayerBackHole_pos->SetName(TString("epoxideLayerBackHole_pos") +=
901 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
902 epoxideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
903 epoxideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
904 epoxideLayerBackHole_pos->SetDz(0.0);
905 epoxideLayerBackHole_pos->RegisterYourself();
906
907 TGeoCompositeShape* epoxideLayerFrontS = new TGeoCompositeShape();
908 epoxideLayerFrontS->SetName(TString("epoxideLayerFrontS") +=
909 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
910 {
911 TString expression = "epoxideLayerFrontBlankS";
912 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
913 expression += "-epoxideLayerFrontHoleS";
914 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
915 expression += ":epoxideLayerFrontHole_pos";
916 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
917
918 epoxideLayerFrontS->MakeNode(expression);
919 epoxideLayerFrontS->ComputeBBox(); // need to compute a bounding box
920 }
921
922 TGeoCompositeShape* epoxideLayerBackS = new TGeoCompositeShape();
923 epoxideLayerBackS->SetName(TString("epoxideLayerBackS") +=
924 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
925 {
926 TString expression = "epoxideLayerBackBlankS";
927 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
928 expression += "-epoxideLayerBackHoleS";
929 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
930 expression += ":epoxideLayerBackHole_pos";
931 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
932
933 epoxideLayerBackS->MakeNode(expression);
934 epoxideLayerBackS->ComputeBBox(); // need to compute a bounding box
935 }
936
937 TGeoVolume* epoxideLayerFrontV = new TGeoVolume(
938 TString("epoxideLayerFrontV") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
939 epoxideLayerFrontS);
940 TGeoVolume* epoxideLayerBackV = new TGeoVolume(
941 TString("epoxideLayerBackV") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
942 epoxideLayerBackS);
943
944 // volume medium
945 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
946 if (epoxideLayerV_medium) {
947 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
948 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
949 } else
950 Fatal("Main", "Invalid medium for epoxideLayerV!");
951
952 // volume visual property (transparency)
953 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
954 epoxideLayerFrontV->SetTransparency(0);
955 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
956 epoxideLayerBackV->SetTransparency(0);
957
958 TGeoCombiTrans* epoxideLayerFront_transf[1];
959
960 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
961 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
962 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
963 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
964 + epoxideLayer_ZSize * 0.5);
965
966 TGeoCombiTrans* epoxideLayerBack_transf[1];
967
968 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
969 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
970 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
971 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
972 - epoxideLayer_ZSize * 0.5);
973
974 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
975 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
976 //--------------------------------------------------------------------------
977
978 // honeycomb layer ----------------------------------------------------------
979 // Double_t honeycombLayer_ZSize = 1.5-(0.05+0.00055+0.005+0.0125); //cm; half-thickness of all honeycomb layers
980 Double_t honeycombLayer_ZSize = 1.4 - (0.06805); // cm; half-thickness of all honeycomb layers
981 Double_t honeycombLayerHole_Radius = 6.0; // cm
982
983 // layer shape
984 TGeoShape* honeycombLayerFrontBlankS =
985 new TGeoBBox(TString("honeycombLayerFrontBlankS") +=
986 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
987 layerFront_XSize * 0.5, layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
988 TGeoShape* honeycombLayerBackBlankS =
989 new TGeoBBox(TString("honeycombLayerBackBlankS") +=
990 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
991 layerBack_XSize * 0.5, layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
992
993 TGeoShape* honeycombLayerFrontHoleS =
994 new TGeoTube(TString("honeycombLayerFrontHoleS") +=
995 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
996 0.0, honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
997 TGeoShape* honeycombLayerBackHoleS =
998 new TGeoTube(TString("honeycombLayerBackHoleS") +=
999 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
1000 0.0, honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
1001
1002 TGeoTranslation* honeycombLayerFrontHole_pos = new TGeoTranslation();
1003 honeycombLayerFrontHole_pos->SetName(TString("honeycombLayerFrontHole_pos") +=
1004 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1005 honeycombLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
1006 honeycombLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
1007 honeycombLayerFrontHole_pos->SetDz(0.0);
1008 honeycombLayerFrontHole_pos->RegisterYourself();
1009
1010 TGeoTranslation* honeycombLayerBackHole_pos = new TGeoTranslation();
1011 honeycombLayerBackHole_pos->SetName(TString("honeycombLayerBackHole_pos") +=
1012 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1013 honeycombLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
1014 honeycombLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
1015 honeycombLayerBackHole_pos->SetDz(0.0);
1016 honeycombLayerBackHole_pos->RegisterYourself();
1017
1018 TGeoCompositeShape* honeycombLayerFrontS = new TGeoCompositeShape();
1019 honeycombLayerFrontS->SetName(TString("honeycombLayerFrontS") +=
1020 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1021 {
1022 TString expression = "honeycombLayerFrontBlankS";
1023 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1024 expression += "-honeycombLayerFrontHoleS";
1025 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1026 expression += ":honeycombLayerFrontHole_pos";
1027 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1028
1029 honeycombLayerFrontS->MakeNode(expression);
1030 honeycombLayerFrontS->ComputeBBox(); // need to compute a bounding box
1031 }
1032
1033 TGeoCompositeShape* honeycombLayerBackS = new TGeoCompositeShape();
1034 honeycombLayerBackS->SetName(TString("honeycombLayerBackS") +=
1035 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1036 {
1037 TString expression = "honeycombLayerBackBlankS";
1038 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1039 expression += "-honeycombLayerBackHoleS";
1040 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1041 expression += ":honeycombLayerBackHole_pos";
1042 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1043
1044 honeycombLayerBackS->MakeNode(expression);
1045 honeycombLayerBackS->ComputeBBox(); // need to compute a bounding box
1046 }
1047
1048 TGeoVolume* honeycombLayerFrontV =
1049 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
1050 TGeoVolume* honeycombLayerBackV =
1051 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
1052
1053 // volume medium
1054 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
1055 if (honeycombLayerV_medium) {
1056 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
1057 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
1058 } else
1059 Fatal("Main", "Invalid medium for honeycombLayerV!");
1060
1061 // volume visual property (transparency)
1062 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
1063 honeycombLayerFrontV->SetTransparency(0);
1064 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
1065 honeycombLayerBackV->SetTransparency(0);
1066
1067 TGeoCombiTrans* honeycombLayerFront_transf[1];
1068
1069 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
1070 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
1071 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
1072 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
1073 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
1074
1075 TGeoCombiTrans* honeycombLayerBack_transf[1];
1076
1077 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
1078 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
1079 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
1080 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
1081 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5);
1082
1083 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
1084 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
1085 //--------------------------------------------------------------------------
1086
1087 // polyamide layer ----------------------------------------------------------
1088 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
1089 Double_t polyamideLayerHole_Radius = 6.0; // cm
1090
1091 // layer shape
1092 TGeoShape* polyamideLayerFrontBlankS =
1093 new TGeoBBox(TString("polyamideLayerFrontBlankS") +=
1094 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
1095 layerFront_XSize * 0.5, layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
1096 TGeoShape* polyamideLayerBackBlankS =
1097 new TGeoBBox(TString("polyamideLayerBackBlankS") +=
1098 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
1099 layerBack_XSize * 0.5, layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
1100
1101 TGeoShape* polyamideLayerFrontHoleS =
1102 new TGeoTube(TString("polyamideLayerFrontHoleS") +=
1103 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
1104 0.0, polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
1105 TGeoShape* polyamideLayerBackHoleS =
1106 new TGeoTube(TString("polyamideLayerBackHoleS") +=
1107 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
1108 0.0, polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
1109
1110 TGeoTranslation* polyamideLayerFrontHole_pos = new TGeoTranslation();
1111 polyamideLayerFrontHole_pos->SetName(TString("polyamideLayerFrontHole_pos") +=
1112 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1113 polyamideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
1114 polyamideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
1115 polyamideLayerFrontHole_pos->SetDz(0.0);
1116 polyamideLayerFrontHole_pos->RegisterYourself();
1117
1118 TGeoTranslation* polyamideLayerBackHole_pos = new TGeoTranslation();
1119 polyamideLayerBackHole_pos->SetName(TString("polyamideLayerBackHole_pos") +=
1120 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1121 polyamideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
1122 polyamideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
1123 polyamideLayerBackHole_pos->SetDz(0.0);
1124 polyamideLayerBackHole_pos->RegisterYourself();
1125
1126 TGeoCompositeShape* polyamideLayerFrontS = new TGeoCompositeShape();
1127 polyamideLayerFrontS->SetName(TString("polyamideLayerFrontS") +=
1128 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1129 {
1130 TString expression = "polyamideLayerFrontBlankS";
1131 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1132 expression += "-polyamideLayerFrontHoleS";
1133 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1134 expression += ":polyamideLayerFrontHole_pos";
1135 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1136
1137 polyamideLayerFrontS->MakeNode(expression);
1138 polyamideLayerFrontS->ComputeBBox(); // need to compute a bounding box
1139 }
1140
1141 TGeoCompositeShape* polyamideLayerBackS = new TGeoCompositeShape();
1142 polyamideLayerBackS->SetName(TString("polyamideLayerBackS") +=
1143 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
1144 {
1145 TString expression = "polyamideLayerBackBlankS";
1146 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1147 expression += "-polyamideLayerBackHoleS";
1148 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1149 expression += ":polyamideLayerBackHole_pos";
1150 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
1151
1152 polyamideLayerBackS->MakeNode(expression);
1153 polyamideLayerBackS->ComputeBBox(); // need to compute a bounding box
1154 }
1155
1156 TGeoVolume* polyamideLayerFrontV =
1157 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
1158 TGeoVolume* polyamideLayerBackV =
1159 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
1160
1161 // volume medium
1162 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
1163 if (polyamideLayerV_medium) {
1164 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
1165 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
1166 } else
1167 Fatal("Main", "Invalid medium for polyamideLayerV!");
1168
1169 // volume visual property (transparency)
1170 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
1171 polyamideLayerFrontV->SetTransparency(0);
1172 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
1173 polyamideLayerBackV->SetTransparency(0);
1174
1175 TGeoCombiTrans* polyamideLayerFront_transf[1];
1176
1177 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
1178 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
1179 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
1180 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
1181 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
1182
1183 TGeoCombiTrans* polyamideLayerBack_transf[1];
1184
1185 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
1186 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
1187 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
1188 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
1189 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5);
1190
1191 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
1192 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
1193 //--------------------------------------------------------------------------
1194
1195 return layers;
1196}
1197//------------------------------------------------------------------------------
1198
1200{
1201
1202 Int_t uniqueId = gRandom->Integer(100000);
1203
1204 // frame volumes
1205 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
1206 frames->SetMedium(pMedAir);
1207
1208 // back lower epoxide frame -------------------------------------------------
1209 Double_t backLowerEpoxideFrame_XSize = 161.42; // cm
1210 Double_t backLowerEpoxideFrame_YSize = 2.2; // cm
1211 Double_t backLowerEpoxideFrame_ZSize = 1.5; // cm
1212
1213 Double_t backLowerEpoxideFrameArch_Rmin = 4.0;
1214 Double_t backLowerEpoxideFrameArch_Rmax = 6.0;
1215 Double_t backLowerEpoxideFrameArch_ZSize = backLowerEpoxideFrame_ZSize;
1216
1217 TGeoShape* backLowerEpoxideFrameHalfS =
1218 new TGeoBBox(TString("backLowerEpoxideFrameHalfS") +=
1219 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1220 (backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5,
1221 backLowerEpoxideFrame_YSize * 0.5, backLowerEpoxideFrame_ZSize * 0.5);
1222 TGeoShape* backLowerEpoxideFrameArchS =
1223 new TGeoTubeSeg(TString("backLowerEpoxideFrameArchS") +=
1224 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1225 backLowerEpoxideFrameArch_Rmin, backLowerEpoxideFrameArch_Rmax,
1226 backLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
1227
1228 TGeoTranslation* backLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
1229 backLowerEpoxideFrameHalf_pos1->SetName(TString("backLowerEpoxideFrameHalf1_pos1") + TString("_")
1230 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1231 backLowerEpoxideFrameHalf_pos1->SetDx(
1232 +((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
1233 backLowerEpoxideFrameHalf_pos1->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1234 backLowerEpoxideFrameHalf_pos1->SetDz(0.0);
1235 backLowerEpoxideFrameHalf_pos1->RegisterYourself();
1236
1237 TGeoTranslation* backLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
1238 backLowerEpoxideFrameHalf_pos2->SetName(TString("backLowerEpoxideFrameHalf1_pos2") + TString("_")
1239 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1240 backLowerEpoxideFrameHalf_pos2->SetDx(
1241 -((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
1242 backLowerEpoxideFrameHalf_pos2->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1243 backLowerEpoxideFrameHalf_pos2->SetDz(0.0);
1244 backLowerEpoxideFrameHalf_pos2->RegisterYourself();
1245
1246 TGeoTranslation* backLowerEpoxideFrameArch_pos = new TGeoTranslation();
1247 backLowerEpoxideFrameArch_pos->SetName(TString("backLowerEpoxideFrameArch_pos") + TString("_")
1248 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1249 backLowerEpoxideFrameArch_pos->SetDx(0.0);
1250 backLowerEpoxideFrameArch_pos->SetDy(0.0);
1251 backLowerEpoxideFrameArch_pos->SetDz(0.0);
1252 backLowerEpoxideFrameArch_pos->RegisterYourself();
1253
1254 TGeoCompositeShape* backLowerEpoxideFrameS = new TGeoCompositeShape();
1255 backLowerEpoxideFrameS->SetName(TString("backLowerEpoxideFrameS") +=
1256 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1257 {
1258 TString expression = "backLowerEpoxideFrameHalfS";
1259 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1260 expression += ":backLowerEpoxideFrameHalf1_pos1";
1261 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1262 expression += "+backLowerEpoxideFrameHalfS";
1263 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1264 expression += ":backLowerEpoxideFrameHalf1_pos2";
1265 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1266 expression += "+backLowerEpoxideFrameArchS";
1267 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1268 expression += ":backLowerEpoxideFrameArch_pos";
1269 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1270
1271 backLowerEpoxideFrameS->MakeNode(expression);
1272 backLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1273 }
1274
1275 TGeoVolume* backLowerEpoxideFrameV =
1276 new TGeoVolume(TString("backLowerEpoxideFrameV") += TString("_") + frames->GetName(), backLowerEpoxideFrameS);
1277
1278 // volume medium
1279 TGeoMedium* backLowerEpoxideFrameV_medium = pMedEpoxideCompound;
1280 if (backLowerEpoxideFrameV_medium) {
1281 backLowerEpoxideFrameV->SetMedium(backLowerEpoxideFrameV_medium);
1282 } else
1283 Fatal("Main", "Invalid medium for backLowerEpoxideFrameV!");
1284
1285 // volume visual property (transparency)
1286 backLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1287 backLowerEpoxideFrameV->SetTransparency(0);
1288
1289 TGeoCombiTrans* backLowerEpoxideFrame_transf[1];
1290
1291 backLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
1292 backLowerEpoxideFrame_transf[0]->SetDx(0.0);
1293 backLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
1294 backLowerEpoxideFrame_transf[0]->SetDz(+(backLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1295
1296 frames->AddNode(backLowerEpoxideFrameV, 0, backLowerEpoxideFrame_transf[0]);
1297 //--------------------------------------------------------------------------
1298
1299 // front lower epoxide frame -------------------------------------------------
1300 Double_t frontLowerEpoxideFrame_XSize = 161.7; // cm
1301 Double_t frontLowerEpoxideFrame_YSize = 2.2; // cm
1302 Double_t frontLowerEpoxideFrame_ZSize = 1.6; // cm
1303
1304 Double_t frontLowerEpoxideFrameArch_Rmin = 4.0;
1305 Double_t frontLowerEpoxideFrameArch_Rmax = 6.0;
1306 Double_t frontLowerEpoxideFrameArch_ZSize = frontLowerEpoxideFrame_ZSize;
1307
1308 TGeoShape* frontLowerEpoxideFrameHalfS =
1309 new TGeoBBox(TString("frontLowerEpoxideFrameHalfS") +=
1310 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1311 (frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5,
1312 frontLowerEpoxideFrame_YSize * 0.5, frontLowerEpoxideFrame_ZSize * 0.5);
1313 TGeoShape* frontLowerEpoxideFrameArchS =
1314 new TGeoTubeSeg(TString("frontLowerEpoxideFrameArchS") +=
1315 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1316 frontLowerEpoxideFrameArch_Rmin, frontLowerEpoxideFrameArch_Rmax,
1317 frontLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
1318
1319 TGeoTranslation* frontLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
1320 frontLowerEpoxideFrameHalf_pos1->SetName(TString("frontLowerEpoxideFrameHalf1_pos1") + TString("_")
1321 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1322 frontLowerEpoxideFrameHalf_pos1->SetDx(
1323 +((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
1324 + frontLowerEpoxideFrameArch_Rmin));
1325 frontLowerEpoxideFrameHalf_pos1->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1326 frontLowerEpoxideFrameHalf_pos1->SetDz(0.0);
1327 frontLowerEpoxideFrameHalf_pos1->RegisterYourself();
1328
1329 TGeoTranslation* frontLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
1330 frontLowerEpoxideFrameHalf_pos2->SetName(TString("frontLowerEpoxideFrameHalf1_pos2") + TString("_")
1331 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1332 frontLowerEpoxideFrameHalf_pos2->SetDx(
1333 -((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
1334 + frontLowerEpoxideFrameArch_Rmin));
1335 frontLowerEpoxideFrameHalf_pos2->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1336 frontLowerEpoxideFrameHalf_pos2->SetDz(0.0);
1337 frontLowerEpoxideFrameHalf_pos2->RegisterYourself();
1338
1339 TGeoTranslation* frontLowerEpoxideFrameArch_pos = new TGeoTranslation();
1340 frontLowerEpoxideFrameArch_pos->SetName(TString("frontLowerEpoxideFrameArch_pos") + TString("_")
1341 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1342 frontLowerEpoxideFrameArch_pos->SetDx(0.0);
1343 frontLowerEpoxideFrameArch_pos->SetDy(0.0);
1344 frontLowerEpoxideFrameArch_pos->SetDz(0.0);
1345 frontLowerEpoxideFrameArch_pos->RegisterYourself();
1346
1347 TGeoCompositeShape* frontLowerEpoxideFrameS = new TGeoCompositeShape();
1348 frontLowerEpoxideFrameS->SetName(TString("frontLowerEpoxideFrameS") +=
1349 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1350 {
1351 TString expression = "frontLowerEpoxideFrameHalfS";
1352 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1353 expression += ":frontLowerEpoxideFrameHalf1_pos1";
1354 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1355 expression += "+frontLowerEpoxideFrameHalfS";
1356 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1357 expression += ":frontLowerEpoxideFrameHalf1_pos2";
1358 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1359 expression += "+frontLowerEpoxideFrameArchS";
1360 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1361 expression += ":frontLowerEpoxideFrameArch_pos";
1362 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1363
1364 frontLowerEpoxideFrameS->MakeNode(expression);
1365 frontLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1366 }
1367
1368 TGeoVolume* frontLowerEpoxideFrameV =
1369 new TGeoVolume(TString("frontLowerEpoxideFrameV") += TString("_") + frames->GetName(), frontLowerEpoxideFrameS);
1370
1371 // volume medium
1372 TGeoMedium* frontLowerEpoxideFrameV_medium = pMedEpoxideCompound;
1373 if (frontLowerEpoxideFrameV_medium) {
1374 frontLowerEpoxideFrameV->SetMedium(frontLowerEpoxideFrameV_medium);
1375 } else
1376 Fatal("Main", "Invalid medium for frontLowerEpoxideFrameV!");
1377
1378 // volume visual property (transparency)
1379 frontLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1380 frontLowerEpoxideFrameV->SetTransparency(0);
1381
1382 TGeoCombiTrans* frontLowerEpoxideFrame_transf[1];
1383
1384 frontLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
1385 frontLowerEpoxideFrame_transf[0]->SetDx(0.0);
1386 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
1387 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1388
1389 frames->AddNode(frontLowerEpoxideFrameV, 0, frontLowerEpoxideFrame_transf[0]);
1390 //--------------------------------------------------------------------------
1391
1392 // back side epoxide frame --------------------------------------------------
1393 Double_t backSideEpoxideFramePart_XSize = 9.2; // cm
1394 Double_t backSideEpoxideFramePart_YSize = 52.6; // cm
1395 Double_t backSideEpoxideFramePart_ZSize = 1.5; // cm
1396
1397 Double_t backSideEpoxideFrame_XDistBetweenParts = 161.42; // cm
1398
1399 TGeoShape* backSideEpoxideFramePartS =
1400 new TGeoBBox(TString("backSideEpoxideFramePartS") +=
1401 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1402 backSideEpoxideFramePart_XSize * 0.5, backSideEpoxideFramePart_YSize * 0.5,
1403 backSideEpoxideFramePart_ZSize * 0.5);
1404
1405 TGeoTranslation* backSideEpoxideFramePart_pos1 = new TGeoTranslation();
1406 backSideEpoxideFramePart_pos1->SetName(TString("backSideEpoxideFramePart_pos1") + TString("_")
1407 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1408 backSideEpoxideFramePart_pos1->SetDx(
1409 +(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
1410 backSideEpoxideFramePart_pos1->SetDy(0.0);
1411 backSideEpoxideFramePart_pos1->SetDz(0.0);
1412 backSideEpoxideFramePart_pos1->RegisterYourself();
1413
1414 TGeoTranslation* backSideEpoxideFramePart_pos2 = new TGeoTranslation();
1415 backSideEpoxideFramePart_pos2->SetName(TString("backSideEpoxideFramePart_pos2") + TString("_")
1416 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1417 backSideEpoxideFramePart_pos2->SetDx(
1418 -(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
1419 backSideEpoxideFramePart_pos2->SetDy(0.0);
1420 backSideEpoxideFramePart_pos2->SetDz(0.0);
1421 backSideEpoxideFramePart_pos2->RegisterYourself();
1422
1423 TGeoCompositeShape* backSideEpoxideFrameS = new TGeoCompositeShape();
1424 backSideEpoxideFrameS->SetName(TString("backSideEpoxideFrameS") +=
1425 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1426 {
1427 TString expression = "backSideEpoxideFramePartS";
1428 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1429 expression += ":backSideEpoxideFramePart_pos1";
1430 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1431 expression += "+backSideEpoxideFramePartS";
1432 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1433 expression += ":backSideEpoxideFramePart_pos2";
1434 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1435
1436 backSideEpoxideFrameS->MakeNode(expression);
1437 backSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1438 }
1439
1440 TGeoVolume* backSideEpoxideFrameV =
1441 new TGeoVolume(TString("backSideEpoxideFrameV") += TString("_") + frames->GetName(), backSideEpoxideFrameS);
1442
1443 // volume medium
1444 TGeoMedium* backSideEpoxideFrameV_medium = pMedEpoxideCompound;
1445 if (backSideEpoxideFrameV_medium) {
1446 backSideEpoxideFrameV->SetMedium(backSideEpoxideFrameV_medium);
1447 } else
1448 Fatal("Main", "Invalid medium for backSideEpoxideFrameV!");
1449
1450 // volume visual property (transparency)
1451 backSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1452 backSideEpoxideFrameV->SetTransparency(0);
1453
1454 TGeoCombiTrans* backSideEpoxideFrame_transf[1];
1455
1456 backSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
1457 backSideEpoxideFrame_transf[0]->SetDx(0.0);
1458 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1459 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1460 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1461
1462 frames->AddNode(backSideEpoxideFrameV, 0, backSideEpoxideFrame_transf[0]);
1463 //--------------------------------------------------------------------------
1464
1465 // back upper epoxide frame -------------------------------------------------
1466 Double_t backUpperEpoxideFrame_XSize = 161.42; // cm
1467 Double_t backUpperEpoxideFrame_YSize = 6.2; // cm
1468 Double_t backUpperEpoxideFrame_ZSize = 1.6; // cm
1469
1470 TGeoShape* backUpperEpoxideFrameS = new TGeoBBox(
1471 TString("backUpperEpoxideFrameS") +=
1472 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1473 backUpperEpoxideFrame_XSize * 0.5, backUpperEpoxideFrame_YSize * 0.5, backUpperEpoxideFrame_ZSize * 0.5);
1474
1475 TGeoVolume* backUpperEpoxideFrameV =
1476 new TGeoVolume(TString("backUpperEpoxideFrameV") += TString("_") + frames->GetName(), backUpperEpoxideFrameS);
1477
1478 // volume medium
1479 TGeoMedium* backUpperEpoxideFrameV_medium = pMedEpoxideCompound;
1480 if (backUpperEpoxideFrameV_medium) {
1481 backUpperEpoxideFrameV->SetMedium(backUpperEpoxideFrameV_medium);
1482 } else
1483 Fatal("Main", "Invalid medium for backUpperEpoxideFrameV!");
1484
1485 // volume visual property (transparency)
1486 backUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1487 backUpperEpoxideFrameV->SetTransparency(0);
1488
1489 TGeoCombiTrans* backUpperEpoxideFrame_transf[1];
1490
1491 backUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
1492 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
1493 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1494 - 0.6 /*shift*/);
1495 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1496
1497 frames->AddNode(backUpperEpoxideFrameV, 0, backUpperEpoxideFrame_transf[0]);
1498 //--------------------------------------------------------------------------
1499
1500 // front side epoxide frame -------------------------------------------------
1501 Double_t frontSideEpoxideFramePart_XSize = 3.5; // cm
1502 Double_t frontSideEpoxideFramePart_YSize = 49.9; // cm
1503 Double_t frontSideEpoxideFramePart_ZSize = 1.6; // cm
1504
1505 Double_t frontSideEpoxideFrame_XDistBetweenParts = 161.7; // cm
1506
1507 TGeoShape* frontSideEpoxideFramePartS =
1508 new TGeoBBox(TString("frontSideEpoxideFramePartS") +=
1509 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1510 frontSideEpoxideFramePart_XSize * 0.5, frontSideEpoxideFramePart_YSize * 0.5,
1511 frontSideEpoxideFramePart_ZSize * 0.5);
1512
1513 TGeoTranslation* frontSideEpoxideFramePart_pos1 = new TGeoTranslation();
1514 frontSideEpoxideFramePart_pos1->SetName(TString("frontSideEpoxideFramePart_pos1") + TString("_")
1515 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1516 frontSideEpoxideFramePart_pos1->SetDx(
1517 +(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
1518 frontSideEpoxideFramePart_pos1->SetDy(0.0);
1519 frontSideEpoxideFramePart_pos1->SetDz(0.0);
1520 frontSideEpoxideFramePart_pos1->RegisterYourself();
1521
1522 TGeoTranslation* frontSideEpoxideFramePart_pos2 = new TGeoTranslation();
1523 frontSideEpoxideFramePart_pos2->SetName(TString("frontSideEpoxideFramePart_pos2") + TString("_")
1524 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1525 frontSideEpoxideFramePart_pos2->SetDx(
1526 -(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
1527 frontSideEpoxideFramePart_pos2->SetDy(0.0);
1528 frontSideEpoxideFramePart_pos2->SetDz(0.0);
1529 frontSideEpoxideFramePart_pos2->RegisterYourself();
1530
1531 TGeoCompositeShape* frontSideEpoxideFrameS = new TGeoCompositeShape();
1532 frontSideEpoxideFrameS->SetName(TString("frontSideEpoxideFrameS") +=
1533 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1534 {
1535 TString expression = "frontSideEpoxideFramePartS";
1536 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1537 expression += ":frontSideEpoxideFramePart_pos1";
1538 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1539 expression += "+frontSideEpoxideFramePartS";
1540 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1541 expression += ":frontSideEpoxideFramePart_pos2";
1542 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1543
1544 frontSideEpoxideFrameS->MakeNode(expression);
1545 frontSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1546 }
1547
1548 TGeoVolume* frontSideEpoxideFrameV =
1549 new TGeoVolume(TString("frontSideEpoxideFrameV") += TString("_") + frames->GetName(), frontSideEpoxideFrameS);
1550
1551 // volume medium
1552 TGeoMedium* frontSideEpoxideFrameV_medium = pMedEpoxideCompound;
1553 if (frontSideEpoxideFrameV_medium) {
1554 frontSideEpoxideFrameV->SetMedium(frontSideEpoxideFrameV_medium);
1555 } else
1556 Fatal("Main", "Invalid medium for frontSideEpoxideFrameV!");
1557
1558 // volume visual property (transparency)
1559 frontSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1560 frontSideEpoxideFrameV->SetTransparency(0);
1561
1562 TGeoCombiTrans* frontSideEpoxideFrame_transf[1];
1563
1564 frontSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
1565 frontSideEpoxideFrame_transf[0]->SetDx(0.0);
1566 frontSideEpoxideFrame_transf[0]->SetDy(+((frontSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1567 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1568 frontSideEpoxideFrame_transf[0]->SetDz(-(frontSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1569
1570 frames->AddNode(frontSideEpoxideFrameV, 0, frontSideEpoxideFrame_transf[0]);
1571 //--------------------------------------------------------------------------
1572
1573 // front upper epoxide frame -------------------------------------------------
1574 Double_t frontUpperEpoxideFrame_XSize = 161.7; // cm
1575 Double_t frontUpperEpoxideFrame_YSize = 3.5; // cm
1576 Double_t frontUpperEpoxideFrame_ZSize = 1.6; // cm
1577
1578 TGeoShape* frontUpperEpoxideFrameS = new TGeoBBox(
1579 TString("frontUpperEpoxideFrameS") +=
1580 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1581 frontUpperEpoxideFrame_XSize * 0.5, frontUpperEpoxideFrame_YSize * 0.5, frontUpperEpoxideFrame_ZSize * 0.5);
1582
1583 TGeoVolume* frontUpperEpoxideFrameV =
1584 new TGeoVolume(TString("frontUpperEpoxideFrameV") += TString("_") + frames->GetName(), frontUpperEpoxideFrameS);
1585
1586 // volume medium
1587 TGeoMedium* frontUpperEpoxideFrameV_medium = pMedEpoxideCompound;
1588 if (frontUpperEpoxideFrameV_medium) {
1589 frontUpperEpoxideFrameV->SetMedium(frontUpperEpoxideFrameV_medium);
1590 } else
1591 Fatal("Main", "Invalid medium for frontUpperEpoxideFrameV!");
1592
1593 // volume visual property (transparency)
1594 frontUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1595 frontUpperEpoxideFrameV->SetTransparency(0);
1596
1597 TGeoCombiTrans* frontUpperEpoxideFrame_transf[1];
1598
1599 frontUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
1600 frontUpperEpoxideFrame_transf[0]->SetDx(0.0);
1601 frontUpperEpoxideFrame_transf[0]->SetDy(+(frontUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1602 - 0.6 /*shift*/);
1603 frontUpperEpoxideFrame_transf[0]->SetDz(-(frontUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1604
1605 frames->AddNode(frontUpperEpoxideFrameV, 0, frontUpperEpoxideFrame_transf[0]);
1606 //--------------------------------------------------------------------------
1607
1608 // alum. cable support ------------------------------------------------------
1609 Double_t alumCableSupportPart_XSize = 3.0; // cm
1610 Double_t alumCableSupportPart_YSize = 41.3; // cm
1611 Double_t alumCableSupportPart_ZSize = 0.2; // cm
1612
1613 Double_t alumCableSupport_XDistBetweenParts = 164.82; // cm
1614
1615 TGeoShape* alumCableSupportPartS = new TGeoBBox(
1616 TString("alumCableSupportPartS") +=
1617 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1618 alumCableSupportPart_XSize * 0.5, alumCableSupportPart_YSize * 0.5, alumCableSupportPart_ZSize * 0.5);
1619
1620 TGeoTranslation* alumCableSupportPart_pos1 = new TGeoTranslation();
1621 alumCableSupportPart_pos1->SetName(TString("alumCableSupportPart_pos1") + TString("_") + TString::Itoa(uniqueId, 10)
1622 + TString("_") + frames->GetName());
1623 alumCableSupportPart_pos1->SetDx(+(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
1624 alumCableSupportPart_pos1->SetDy(0.0);
1625 alumCableSupportPart_pos1->SetDz(0.0);
1626 alumCableSupportPart_pos1->RegisterYourself();
1627
1628 TGeoTranslation* alumCableSupportPart_pos2 = new TGeoTranslation();
1629 alumCableSupportPart_pos2->SetName(TString("alumCableSupportPart_pos2") + TString("_") + TString::Itoa(uniqueId, 10)
1630 + TString("_") + frames->GetName());
1631 alumCableSupportPart_pos2->SetDx(-(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
1632 alumCableSupportPart_pos2->SetDy(0.0);
1633 alumCableSupportPart_pos2->SetDz(0.0);
1634 alumCableSupportPart_pos2->RegisterYourself();
1635
1636 TGeoCompositeShape* alumCableSupportS = new TGeoCompositeShape();
1637 alumCableSupportS->SetName(TString("alumCableSupportS") += TString("_") + frames->GetName());
1638 {
1639 TString expression = "alumCableSupportPartS";
1640 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1641 expression += ":alumCableSupportPart_pos1";
1642 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1643 expression += "+alumCableSupportPartS";
1644 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1645 expression += ":alumCableSupportPart_pos2";
1646 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1647
1648 alumCableSupportS->MakeNode(expression);
1649 alumCableSupportS->ComputeBBox(); // need to compute a bounding box
1650 }
1651
1652 TGeoVolume* alumCableSupportV =
1653 new TGeoVolume(TString("alumCableSupportV") += TString("_") + frames->GetName(), alumCableSupportS);
1654
1655 // volume medium
1656 TGeoMedium* alumCableSupportV_medium = pMedAluminium;
1657 if (alumCableSupportV_medium) {
1658 alumCableSupportV->SetMedium(alumCableSupportV_medium);
1659 } else
1660 Fatal("Main", "Invalid medium for alumCableSupportV!");
1661
1662 // volume visual property (transparency)
1663 alumCableSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
1664 alumCableSupportV->SetTransparency(0);
1665
1666 TGeoCombiTrans* alumCableSupport_transf[1];
1667
1668 alumCableSupport_transf[0] = new TGeoCombiTrans();
1669 alumCableSupport_transf[0]->SetDx(0.0);
1670 alumCableSupport_transf[0]->SetDy(+((alumCableSupportPart_YSize - YModuleSize_Station163x45) * 0.5)
1671 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1672 alumCableSupport_transf[0]->SetDz(-(alumCableSupportPart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5
1673 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
1674
1675 frames->AddNode(alumCableSupportV, 0, alumCableSupport_transf[0]);
1676 //--------------------------------------------------------------------------
1677
1678 // amplifier upper block ----------------------------------------------------
1679 Double_t amplifierUpperBlockPart1_XSize = 161.44; // cm
1680 Double_t amplifierUpperBlockPart1_YSize = 0.6; // cm
1681 Double_t amplifierUpperBlockPart1_ZSize = 8.41; // cm
1682
1683 Double_t amplifierUpperBlockPart2_XSize = 161.16; // cm
1684 Double_t amplifierUpperBlockPart2_YSize = 0.6; // cm
1685 Double_t amplifierUpperBlockPart2_ZSize = 8.41; // cm
1686
1687 TGeoShape* amplifierUpperBlockPart1S =
1688 new TGeoBBox(TString("amplifierUpperBlockPart1S") +=
1689 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1690 amplifierUpperBlockPart1_XSize * 0.5, amplifierUpperBlockPart1_YSize * 0.5,
1691 amplifierUpperBlockPart1_ZSize * 0.5);
1692 TGeoShape* amplifierUpperBlockPart2S =
1693 new TGeoBBox(TString("amplifierUpperBlockPart2S") +=
1694 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1695 amplifierUpperBlockPart2_XSize * 0.5, amplifierUpperBlockPart2_YSize * 0.5,
1696 amplifierUpperBlockPart2_ZSize * 0.5);
1697
1698 TGeoTranslation* amplifierUpperBlockPart1_pos = new TGeoTranslation();
1699 amplifierUpperBlockPart1_pos->SetName(TString("amplifierUpperBlockPart1_pos") + TString("_")
1700 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1701 amplifierUpperBlockPart1_pos->SetDx(0.0);
1702 amplifierUpperBlockPart1_pos->SetDy(0.0);
1703 amplifierUpperBlockPart1_pos->SetDz(0.0);
1704 amplifierUpperBlockPart1_pos->RegisterYourself();
1705
1706 TGeoTranslation* amplifierUpperBlockPart2_pos = new TGeoTranslation();
1707 amplifierUpperBlockPart2_pos->SetName(TString("amplifierUpperBlockPart2_pos") + TString("_")
1708 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1709 amplifierUpperBlockPart2_pos->SetDx(-0.76);
1710 amplifierUpperBlockPart2_pos->SetDy(
1711 -(amplifierUpperBlockPart1_YSize * 0.5 + amplifierUpperBlockPart2_YSize * 0.5 + 0.33));
1712 amplifierUpperBlockPart2_pos->SetDz(0.0);
1713 amplifierUpperBlockPart2_pos->RegisterYourself();
1714
1715 TGeoCompositeShape* amplifierUpperBlockS = new TGeoCompositeShape();
1716 amplifierUpperBlockS->SetName(TString("amplifierUpperBlockS") +=
1717 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1718 {
1719 TString expression = "amplifierUpperBlockPart1S";
1720 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1721 expression += ":amplifierUpperBlockPart1_pos";
1722 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1723 expression += "+amplifierUpperBlockPart1S";
1724 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1725 expression += ":amplifierUpperBlockPart2_pos";
1726 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1727
1728 amplifierUpperBlockS->MakeNode(expression);
1729 amplifierUpperBlockS->ComputeBBox(); // need to compute a bounding box
1730 }
1731
1732 TGeoVolume* amplifierUpperBlockV =
1733 new TGeoVolume(TString("amplifierUpperBlockV") += TString("_") + frames->GetName(), amplifierUpperBlockS);
1734
1735 // volume medium
1736 TGeoMedium* amplifierUpperBlockV_medium = pMedFiberGlass;
1737 if (amplifierUpperBlockV_medium) {
1738 amplifierUpperBlockV->SetMedium(amplifierUpperBlockV_medium);
1739 } else
1740 Fatal("Main", "Invalid medium for amplifierUpperBlockV!");
1741
1742 // volume visual property (transparency)
1743 amplifierUpperBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1744 amplifierUpperBlockV->SetTransparency(0);
1745
1746 TGeoCombiTrans* amplifierUpperBlock_transf[1];
1747
1748 amplifierUpperBlock_transf[0] = new TGeoCombiTrans();
1749 amplifierUpperBlock_transf[0]->SetDx(0.0);
1750 amplifierUpperBlock_transf[0]->SetDy(+(YModuleSize_Station163x45 * 0.5 + backUpperEpoxideFrame_YSize)
1751 - 1.0 /*shift*/);
1752 amplifierUpperBlock_transf[0]->SetDz(-(amplifierUpperBlockPart1_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
1753
1754 frames->AddNode(amplifierUpperBlockV, 0, amplifierUpperBlock_transf[0]);
1755 //--------------------------------------------------------------------------
1756
1757 // amplifier side block -----------------------------------------------------
1758 Double_t amplifierSideBlockPartBig_XSize = 0.6; // cm
1759 Double_t amplifierSideBlockPartBig_YSize = 33.9; // cm
1760 Double_t amplifierSideBlockPartBig_ZSize = 8.41; // cm
1761
1762 Double_t amplifierSideBlockPartSmall_XSize = 0.6; // cm
1763 Double_t amplifierSideBlockPartSmall_YSize = 27.05; // cm
1764 Double_t amplifierSideBlockPartSmall_ZSize = 8.41; // cm
1765
1766 TGeoShape* amplifierSideBlockPartBigS =
1767 new TGeoBBox(TString("amplifierSideBlockPartBigS") +=
1768 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1769 amplifierSideBlockPartBig_XSize * 0.5, amplifierSideBlockPartBig_YSize * 0.5,
1770 amplifierSideBlockPartBig_ZSize * 0.5);
1771 TGeoShape* amplifierSideBlockPartSmallS =
1772 new TGeoBBox(TString("amplifierSideBlockPartSmallS") +=
1773 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1774 amplifierSideBlockPartSmall_XSize * 0.5, amplifierSideBlockPartSmall_YSize * 0.5,
1775 amplifierSideBlockPartSmall_ZSize * 0.5);
1776
1777 TGeoTranslation* amplifierSideBlockPartBig_pos = new TGeoTranslation();
1778 amplifierSideBlockPartBig_pos->SetName(TString("amplifierSideBlockPartBig_pos") + TString("_")
1779 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1780 amplifierSideBlockPartBig_pos->SetDx(0.0);
1781 amplifierSideBlockPartBig_pos->SetDy(0.0);
1782 amplifierSideBlockPartBig_pos->SetDz(0.0);
1783 amplifierSideBlockPartBig_pos->RegisterYourself();
1784
1785 TGeoTranslation* amplifierSideBlockPartSmall_pos = new TGeoTranslation();
1786 amplifierSideBlockPartSmall_pos->SetName(TString("amplifierSideBlockPartSmall_pos") + TString("_")
1787 + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
1788 amplifierSideBlockPartSmall_pos->SetDx(
1789 +(amplifierSideBlockPartBig_XSize * 0.5 + amplifierSideBlockPartSmall_XSize * 0.5 + 1.72));
1790 amplifierSideBlockPartSmall_pos->SetDy(+0.05);
1791 amplifierSideBlockPartSmall_pos->SetDz(0.0);
1792 amplifierSideBlockPartSmall_pos->RegisterYourself();
1793
1794 TGeoCompositeShape* amplifierSideBlockS = new TGeoCompositeShape();
1795 amplifierSideBlockS->SetName(TString("amplifierSideBlockS") += TString("_") + frames->GetName());
1796 {
1797 TString expression = "amplifierSideBlockPartBigS";
1798 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1799 expression += ":amplifierSideBlockPartBig_pos";
1800 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1801 expression += "+amplifierSideBlockPartSmallS";
1802 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1803 expression += ":amplifierSideBlockPartSmall_pos";
1804 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1805
1806 amplifierSideBlockS->MakeNode(expression);
1807 amplifierSideBlockS->ComputeBBox(); // need to compute a bounding box
1808 }
1809
1810 TGeoVolume* amplifierSideBlockV =
1811 new TGeoVolume(TString("amplifierSideBlockV") += TString("_") + frames->GetName(), amplifierSideBlockS);
1812
1813 // volume medium
1814 TGeoMedium* amplifierSideBlockV_medium = pMedFiberGlass;
1815 if (amplifierSideBlockV_medium) {
1816 amplifierSideBlockV->SetMedium(amplifierSideBlockV_medium);
1817 } else
1818 Fatal("Main", "Invalid medium for amplifierSideBlockV!");
1819
1820 // volume visual property (transparency)
1821 amplifierSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1822 amplifierSideBlockV->SetTransparency(0);
1823
1824 TGeoCombiTrans* amplifierSideBlock_transf[2];
1825
1826 amplifierSideBlock_transf[0] = new TGeoCombiTrans();
1827 amplifierSideBlock_transf[0]->SetDx(+86.47 /*shift*/);
1828 amplifierSideBlock_transf[0]->SetDy(-5.5);
1829 amplifierSideBlock_transf[0]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5
1830 - 0.4 /*shift*/);
1831
1832 amplifierSideBlock_transf[1] = new TGeoCombiTrans();
1833 amplifierSideBlock_transf[1]->RotateY(180.0);
1834 amplifierSideBlock_transf[1]->SetDx(-86.47 /*shift*/);
1835 amplifierSideBlock_transf[1]->SetDy(-5.5);
1836 amplifierSideBlock_transf[1]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5
1837 - 0.4 /*shift*/);
1838
1839 frames->AddNode(amplifierSideBlockV, 0, amplifierSideBlock_transf[0]);
1840 frames->AddNode(amplifierSideBlockV, 1, amplifierSideBlock_transf[1]);
1841 //--------------------------------------------------------------------------
1842
1843 // upper PCB (Printed Circuit Board) ----------------------------------------
1844 Double_t upperPcb_XSize = 177.22; // cm
1845 Double_t upperPcb_YSize = 0.3; // cm
1846 Double_t upperPcb_ZSize = 4.0; // cm
1847
1848 TGeoShape* upperPcbS = new TGeoBBox(TString("upperPcbS") +=
1849 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1850 upperPcb_XSize * 0.5, upperPcb_YSize * 0.5, upperPcb_ZSize * 0.5);
1851
1852 TGeoVolume* upperPcbV = new TGeoVolume(TString("upperPcbV") += TString("_") + frames->GetName(), upperPcbS);
1853
1854 // volume medium
1855 TGeoMedium* upperPcbV_medium = pMedFiberGlass;
1856 if (upperPcbV_medium) {
1857 upperPcbV->SetMedium(upperPcbV_medium);
1858 } else
1859 Fatal("Main", "Invalid medium for upperPcbV!");
1860
1861 // volume visual property (transparency)
1862 upperPcbV->SetLineColor(TColor::GetColor("#88ff88"));
1863 upperPcbV->SetTransparency(0);
1864
1865 TGeoCombiTrans* upperPcb_transf[1];
1866
1867 upperPcb_transf[0] = new TGeoCombiTrans();
1868 upperPcb_transf[0]->SetDx(+0.1 /*shift*/);
1869 upperPcb_transf[0]->SetDy(+(upperPcb_YSize * 0.5 + 23.5 /*shift*/));
1870 upperPcb_transf[0]->SetDz(-(upperPcb_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5 - ZModuleSize_Station163x45
1871 - frontSideEpoxideFramePart_ZSize);
1872
1873 frames->AddNode(upperPcbV, 0, upperPcb_transf[0]);
1874 //--------------------------------------------------------------------------
1875
1876 // side PCB -----------------------------------------------------------------
1877 Double_t sidePcbPart_XSize = 0.3; // cm
1878 Double_t sidePcbPart_YSize = 35.05; // cm
1879 Double_t sidePcbPart_ZSize = 4.0; // cm
1880
1881 TGeoShape* sidePcbPartS = new TGeoBBox(TString("sidePcbPartS") += TString("_") + TString::Itoa(uniqueId, 10)
1882 + TString("_") + frames->GetName(),
1883 sidePcbPart_XSize * 0.5, sidePcbPart_YSize * 0.5, sidePcbPart_ZSize * 0.5);
1884
1885 TGeoTranslation* sidePcbPart_pos1 = new TGeoTranslation();
1886 sidePcbPart_pos1->SetName(TString("sidePcbPart_pos1") + TString("_") + TString::Itoa(uniqueId, 10) + TString("_")
1887 + frames->GetName());
1888 sidePcbPart_pos1->SetDx(0.0);
1889 sidePcbPart_pos1->SetDy(0.0);
1890 sidePcbPart_pos1->SetDz(0.0);
1891 sidePcbPart_pos1->RegisterYourself();
1892
1893 TGeoTranslation* sidePcbPart_pos2 = new TGeoTranslation();
1894 sidePcbPart_pos2->SetName(TString("sidePcbPart_pos2") + TString("_") + TString::Itoa(uniqueId, 10) + TString("_")
1895 + frames->GetName());
1896 sidePcbPart_pos2->SetDx(+(sidePcbPart_XSize + 6.1 /*shift*/));
1897 sidePcbPart_pos2->SetDy(0.0);
1898 sidePcbPart_pos2->SetDz(0.0);
1899 sidePcbPart_pos2->RegisterYourself();
1900
1901 TGeoCompositeShape* sidePcbS = new TGeoCompositeShape();
1902 sidePcbS->SetName(TString("sidePcbS") += TString("_") + frames->GetName());
1903 {
1904 TString expression = "sidePcbPartS";
1905 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1906 expression += ":sidePcbPart_pos1";
1907 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1908 expression += "+sidePcbPartS";
1909 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1910 expression += ":sidePcbPart_pos2";
1911 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
1912
1913 sidePcbS->MakeNode(expression);
1914 sidePcbS->ComputeBBox(); // need to compute a bounding box
1915 }
1916
1917 TGeoVolume* sidePcbV = new TGeoVolume(TString("sidePcbV") += TString("_") + frames->GetName(), sidePcbS);
1918
1919 // volume medium
1920 TGeoMedium* sidePcbV_medium = pMedFiberGlass;
1921 if (sidePcbV_medium) {
1922 sidePcbV->SetMedium(sidePcbV_medium);
1923 } else
1924 Fatal("Main", "Invalid medium for sidePcbV!");
1925
1926 // volume visual property (transparency)
1927 sidePcbV->SetLineColor(TColor::GetColor("#88ff88"));
1928 sidePcbV->SetTransparency(0);
1929
1930 TGeoCombiTrans* sidePcb_transf[2];
1931
1932 sidePcb_transf[0] = new TGeoCombiTrans();
1933 sidePcb_transf[0]->SetDx(+(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
1934 sidePcb_transf[0]->SetDy(-6.8 /*shift*/);
1935 sidePcb_transf[0]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
1936 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
1937
1938 sidePcb_transf[1] = new TGeoCombiTrans();
1939 sidePcb_transf[1]->RotateY(180.0);
1940 sidePcb_transf[1]->SetDx(-(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
1941 sidePcb_transf[1]->SetDy(-6.8 /*shift*/);
1942 sidePcb_transf[1]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
1943 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
1944
1945 frames->AddNode(sidePcbV, 0, sidePcb_transf[0]);
1946 frames->AddNode(sidePcbV, 1, sidePcb_transf[1]);
1947 //--------------------------------------------------------------------------
1948
1949 // alum. side support -------------------------------------------------------
1950 Double_t alumSideSupport_XSize = 4.8; // cm
1951 Double_t alumSideSupport_YSize = 52.6; // cm
1952 Double_t alumSideSupport_ZSize = 0.4; // cm
1953
1954 TGeoShape* alumSideSupportS = new TGeoBBox(
1955 TString("alumSideSupportS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1956 alumSideSupport_XSize * 0.5, alumSideSupport_YSize * 0.5, alumSideSupport_ZSize * 0.5);
1957
1958 TGeoVolume* alumSideSupportV =
1959 new TGeoVolume(TString("alumSideSupportV") += TString("_") + frames->GetName(), alumSideSupportS);
1960
1961 // volume medium
1962 TGeoMedium* alumSideSupportV_medium = pMedAluminium;
1963 if (alumSideSupportV_medium) {
1964 alumSideSupportV->SetMedium(alumSideSupportV_medium);
1965 } else
1966 Fatal("Main", "Invalid medium for alumSideSupportV!");
1967
1968 // volume visual property (transparency)
1969 alumSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
1970 alumSideSupportV->SetTransparency(0);
1971
1972 TGeoCombiTrans* alumSideSupport_transf[2];
1973
1974 alumSideSupport_transf[0] = new TGeoCombiTrans();
1975 alumSideSupport_transf[0]->SetDx(+(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
1976 alumSideSupport_transf[0]->SetDy(+1.8);
1977 alumSideSupport_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
1978
1979 alumSideSupport_transf[1] = new TGeoCombiTrans();
1980 alumSideSupport_transf[1]->SetDx(-(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
1981 alumSideSupport_transf[1]->SetDy(+1.8 /*shift*/);
1982 alumSideSupport_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
1983
1984 frames->AddNode(alumSideSupportV, 0, alumSideSupport_transf[0]);
1985 frames->AddNode(alumSideSupportV, 1, alumSideSupport_transf[1]);
1986 //--------------------------------------------------------------------------
1987
1988 // bosch shape --------------------------------------------------------------
1989 Double_t boschShape_XSize = 2.25; // cm
1990 Double_t boschShape_YSize = 52.6; // cm
1991 Double_t boschShape_ZSize = 2.25; // cm
1992
1993 TGeoShape* boschShapeS = new TGeoBBox(TString("boschShapeS") +=
1994 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
1995 boschShape_XSize * 0.5, boschShape_YSize * 0.5, boschShape_ZSize * 0.5);
1996
1997 TGeoVolume* boschShapeV = new TGeoVolume(TString("boschShapeV") += TString("_") + frames->GetName(), boschShapeS);
1998
1999 // volume medium
2000 TGeoMedium* boschShapeV_medium = pMedAluminium;
2001 if (boschShapeV_medium) {
2002 boschShapeV->SetMedium(boschShapeV_medium);
2003 } else
2004 Fatal("Main", "Invalid medium for boschShapeV!");
2005
2006 // volume visual property (transparency)
2007 boschShapeV->SetLineColor(TColor::GetColor("#ffcccc"));
2008 boschShapeV->SetTransparency(0);
2009
2010 TGeoCombiTrans* boschShape_transf[2];
2011
2012 boschShape_transf[0] = new TGeoCombiTrans();
2013 boschShape_transf[0]->SetDx(+(boschShape_XSize * 0.5 + 90.86 /*shift*/));
2014 boschShape_transf[0]->SetDy(+1.8 /*shift*/);
2015 boschShape_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
2016
2017 boschShape_transf[1] = new TGeoCombiTrans();
2018 boschShape_transf[1]->SetDx(-(boschShape_XSize * 0.5 + 90.86 /*shift*/));
2019 boschShape_transf[1]->SetDy(+1.8 /*shift*/);
2020 boschShape_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
2021
2022 // frames->AddNode(boschShapeV, 0, boschShape_transf[0]);
2023 // frames->AddNode(boschShapeV, 1, boschShape_transf[1]);
2024 //--------------------------------------------------------------------------
2025
2026 // polyacetal shape ---------------------------------------------------------
2027 Double_t insidePolyacetalShapeUpper_XSize = 11.46; // cm
2028 Double_t insidePolyacetalShapeUpper_YSize = 52.6; // cm
2029 Double_t insidePolyacetalShapeUpper_ZSize = 3.0; // cm
2030 Double_t insidePolyacetalShapeUpper_XDistBetweenParts = 186.22; // cm
2031
2032 Double_t outsidePolyacetalShapeUpper_XSize = 23.5; // cm
2033 Double_t outsidePolyacetalShapeUpper_YSize = 5.405; // cm
2034 Double_t outsidePolyacetalShapeUpper_ZSize = 3.0; // cm
2035 Double_t outsidePolyacetalShapeUpper_XDistBetweenParts = 209.14; // cm
2036
2037 Double_t insidePolyacetalShapeLower_XSize = 8.4; // cm
2038 Double_t insidePolyacetalShapeLower_YSize = 52.6; // cm
2039 Double_t insidePolyacetalShapeLower_ZSize = 3.0; // cm
2040 Double_t insidePolyacetalShapeLower_XDistBetweenParts = 186.22; // cm
2041
2042 Double_t outsidePolyacetalShapeLower_XSize = 26.7; // cm
2043 Double_t outsidePolyacetalShapeLower_YSize = 24.4; // cm
2044 Double_t outsidePolyacetalShapeLower_ZSize = 3.0; // cm
2045 Double_t outsidePolyacetalShapeLower_XDistBetweenParts = 203.02; // cm
2046
2047 TGeoShape* insidePolyacetalShapeUpperS =
2048 new TGeoBBox(TString("insidePolyacetalShapeUpperS") +=
2049 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2050 insidePolyacetalShapeUpper_XSize * 0.5, insidePolyacetalShapeUpper_YSize * 0.5,
2051 insidePolyacetalShapeUpper_ZSize * 0.5);
2052 TGeoShape* outsidePolyacetalShapeUpperS =
2053 new TGeoBBox(TString("outsidePolyacetalShapeUpperS") +=
2054 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2055 outsidePolyacetalShapeUpper_XSize * 0.5, outsidePolyacetalShapeUpper_YSize * 0.5,
2056 outsidePolyacetalShapeUpper_ZSize * 0.5);
2057 TGeoShape* insidePolyacetalShapeLowerS =
2058 new TGeoBBox(TString("insidePolyacetalShapeLowerS") +=
2059 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2060 insidePolyacetalShapeLower_XSize * 0.5, insidePolyacetalShapeLower_YSize * 0.5,
2061 insidePolyacetalShapeLower_ZSize * 0.5);
2062 TGeoShape* outsidePolyacetalShapeLowerS =
2063 new TGeoBBox(TString("outsidePolyacetalShapeLowerS") +=
2064 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2065 outsidePolyacetalShapeLower_XSize * 0.5, outsidePolyacetalShapeLower_YSize * 0.5,
2066 outsidePolyacetalShapeLower_ZSize * 0.5);
2067
2068 TGeoVolume* insidePolyacetalShapeUpperV = new TGeoVolume(
2069 TString("insidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), insidePolyacetalShapeUpperS);
2070 TGeoVolume* outsidePolyacetalShapeUpperV = new TGeoVolume(
2071 TString("outsidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), outsidePolyacetalShapeUpperS);
2072 TGeoVolume* insidePolyacetalShapeLowerV = new TGeoVolume(
2073 TString("insidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), insidePolyacetalShapeLowerS);
2074 TGeoVolume* outsidePolyacetalShapeLowerV = new TGeoVolume(
2075 TString("outsidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), outsidePolyacetalShapeLowerS);
2076
2077 // volume medium
2078 TGeoMedium* polyacetalShapeV_medium = pMedPolyacetal;
2079 if (polyacetalShapeV_medium) {
2080 insidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
2081 outsidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
2082 insidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
2083 outsidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
2084 } else
2085 Fatal("Main", "Invalid medium for insidePolyacetalShapeUpperV!");
2086
2087 // volume visual property (transparency)
2088 insidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
2089 insidePolyacetalShapeUpperV->SetTransparency(0);
2090 outsidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
2091 outsidePolyacetalShapeUpperV->SetTransparency(0);
2092 insidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
2093 insidePolyacetalShapeLowerV->SetTransparency(0);
2094 outsidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
2095 outsidePolyacetalShapeLowerV->SetTransparency(0);
2096
2097 TGeoCombiTrans* insidePolyacetalShapeUpper_transf[2];
2098
2099 insidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
2100 insidePolyacetalShapeUpper_transf[0]->SetDx(
2101 +(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2102 insidePolyacetalShapeUpper_transf[0]->SetDy(+1.8 /*shift*/);
2103 insidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
2104
2105 insidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
2106 insidePolyacetalShapeUpper_transf[1]->SetDx(
2107 -(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2108 insidePolyacetalShapeUpper_transf[1]->SetDy(+1.8 /*shift*/);
2109 insidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
2110
2111 TGeoCombiTrans* outsidePolyacetalShapeUpper_transf[2];
2112
2113 outsidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
2114 outsidePolyacetalShapeUpper_transf[0]->SetDx(
2115 +(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2116 outsidePolyacetalShapeUpper_transf[0]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
2117 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
2118 outsidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
2119
2120 outsidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
2121 outsidePolyacetalShapeUpper_transf[1]->SetDx(
2122 -(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
2123 outsidePolyacetalShapeUpper_transf[1]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
2124 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
2125 outsidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
2126
2127 TGeoCombiTrans* insidePolyacetalShapeLower_transf[2];
2128
2129 insidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
2130 insidePolyacetalShapeLower_transf[0]->SetDx(
2131 +(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2132 insidePolyacetalShapeLower_transf[0]->SetDy(+1.8 /*shift*/);
2133 insidePolyacetalShapeLower_transf[0]->SetDz(0.0);
2134
2135 insidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
2136 insidePolyacetalShapeLower_transf[1]->SetDx(
2137 -(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2138 insidePolyacetalShapeLower_transf[1]->SetDy(+1.8 /*shift*/);
2139 insidePolyacetalShapeLower_transf[1]->SetDz(0.0);
2140
2141 TGeoCombiTrans* outsidePolyacetalShapeLower_transf[2];
2142
2143 outsidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
2144 outsidePolyacetalShapeLower_transf[0]->SetDx(
2145 +(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2146 outsidePolyacetalShapeLower_transf[0]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
2147 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
2148 outsidePolyacetalShapeLower_transf[0]->SetDz(0.0);
2149
2150 outsidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
2151 outsidePolyacetalShapeLower_transf[1]->SetDx(
2152 -(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
2153 outsidePolyacetalShapeLower_transf[1]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
2154 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
2155 outsidePolyacetalShapeLower_transf[1]->SetDz(0.0);
2156
2157 if (TString(frames->GetName()).Contains("upper")) {
2158 frames->AddNode(insidePolyacetalShapeUpperV, 0, insidePolyacetalShapeUpper_transf[0]);
2159 frames->AddNode(insidePolyacetalShapeUpperV, 1, insidePolyacetalShapeUpper_transf[1]);
2160 frames->AddNode(outsidePolyacetalShapeUpperV, 0, outsidePolyacetalShapeUpper_transf[0]);
2161 frames->AddNode(outsidePolyacetalShapeUpperV, 1, outsidePolyacetalShapeUpper_transf[1]);
2162 }
2163
2164 if (TString(frames->GetName()).Contains("lower")) {
2165 frames->AddNode(insidePolyacetalShapeLowerV, 0, insidePolyacetalShapeLower_transf[0]);
2166 frames->AddNode(insidePolyacetalShapeLowerV, 1, insidePolyacetalShapeLower_transf[1]);
2167 frames->AddNode(outsidePolyacetalShapeLowerV, 0, outsidePolyacetalShapeLower_transf[0]);
2168 frames->AddNode(outsidePolyacetalShapeLowerV, 1, outsidePolyacetalShapeLower_transf[1]);
2169 }
2170
2171 //--------------------------------------------------------------------------
2172
2173 // lower fiberglass block ---------------------------------------------------
2174 Double_t lowerFiberGlassBlock_XSize = 165.1; // cm
2175 Double_t lowerFiberGlassBlock_YSize = 1.75; // cm
2176 Double_t lowerFiberGlassBlock_ZSize = 0.9; // cm
2177
2178 Double_t lowerFiberGlassBlockArch_Rmin = 4.0;
2179 Double_t lowerFiberGlassBlockArch_Rmax = 5.75;
2180 Double_t lowerFiberGlassBlockArch_ZSize = lowerFiberGlassBlock_ZSize;
2181
2182 TGeoShape* lowerFiberGlassBlockHalfS =
2183 new TGeoBBox(TString("lowerFiberGlassBlockHalfS") +=
2184 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2185 (lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5,
2186 lowerFiberGlassBlock_YSize * 0.5, lowerFiberGlassBlock_ZSize * 0.5);
2187 TGeoShape* lowerFiberGlassBlockArchS = new TGeoTubeSeg(
2188 TString("lowerFiberGlassBlockArchS") +=
2189 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2190 lowerFiberGlassBlockArch_Rmin, lowerFiberGlassBlockArch_Rmax, lowerFiberGlassBlockArch_ZSize * 0.5, 0.0, 180.0);
2191
2192 TGeoTranslation* lowerFiberGlassBlockHalf_pos1 = new TGeoTranslation();
2193 lowerFiberGlassBlockHalf_pos1->SetName(TString("lowerFiberGlassBlockHalf_pos1") +=
2194 TString("_") + TString::Itoa(uniqueId, 10) + TString("_")
2195 + frames->GetName());
2196 lowerFiberGlassBlockHalf_pos1->SetDx(
2197 +((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
2198 lowerFiberGlassBlockHalf_pos1->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
2199 lowerFiberGlassBlockHalf_pos1->SetDz(0.0);
2200 lowerFiberGlassBlockHalf_pos1->RegisterYourself();
2201
2202 TGeoTranslation* lowerFiberGlassBlockHalf_pos2 = new TGeoTranslation();
2203 lowerFiberGlassBlockHalf_pos2->SetName(TString("lowerFiberGlassBlockHalf_pos2") +=
2204 TString("_") + TString::Itoa(uniqueId, 10) + TString("_")
2205 + frames->GetName());
2206 lowerFiberGlassBlockHalf_pos2->SetDx(
2207 -((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
2208 lowerFiberGlassBlockHalf_pos2->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
2209 lowerFiberGlassBlockHalf_pos2->SetDz(0.0);
2210 lowerFiberGlassBlockHalf_pos2->RegisterYourself();
2211
2212 TGeoTranslation* lowerFiberGlassBlockArch_pos = new TGeoTranslation();
2213 lowerFiberGlassBlockArch_pos->SetName(TString("lowerFiberGlassBlockArch_pos") +=
2214 TString("_") + TString::Itoa(uniqueId, 10) + TString("_")
2215 + frames->GetName());
2216 lowerFiberGlassBlockArch_pos->SetDx(0.0);
2217 lowerFiberGlassBlockArch_pos->SetDy(0.0);
2218 lowerFiberGlassBlockArch_pos->SetDz(0.0);
2219 lowerFiberGlassBlockArch_pos->RegisterYourself();
2220
2221 TGeoCompositeShape* lowerFiberGlassBlockS = new TGeoCompositeShape();
2222 lowerFiberGlassBlockS->SetName(TString("lowerFiberGlassBlockS") +=
2223 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName());
2224 {
2225 TString expression = "lowerFiberGlassBlockHalfS";
2226 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
2227 expression += ":lowerFiberGlassBlockHalf_pos1";
2228 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
2229 expression += "+lowerFiberGlassBlockHalfS";
2230 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
2231 expression += ":lowerFiberGlassBlockHalf_pos2";
2232 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
2233 expression += "+lowerFiberGlassBlockArchS";
2234 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
2235 expression += ":lowerFiberGlassBlockArch_pos";
2236 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName();
2237
2238 lowerFiberGlassBlockS->MakeNode(expression);
2239 lowerFiberGlassBlockS->ComputeBBox(); // need to compute a bounding box
2240 }
2241
2242 TGeoVolume* lowerFiberGlassBlockV =
2243 new TGeoVolume(TString("lowerFiberGlassBlockV") += TString("_") + frames->GetName(), lowerFiberGlassBlockS);
2244
2245 // volume medium
2246 TGeoMedium* lowerFiberGlassBlockV_medium = pMedFiberGlass;
2247 if (lowerFiberGlassBlockV_medium) {
2248 lowerFiberGlassBlockV->SetMedium(lowerFiberGlassBlockV_medium);
2249 } else
2250 Fatal("Main", "Invalid medium for lowerFiberGlassBlockV!");
2251
2252 // volume visual property (transparency)
2253 lowerFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
2254 lowerFiberGlassBlockV->SetTransparency(0);
2255
2256 TGeoCombiTrans* lowerFiberGlassBlock_transf[1];
2257
2258 lowerFiberGlassBlock_transf[0] = new TGeoCombiTrans();
2259 lowerFiberGlassBlock_transf[0]->SetDx(0.0);
2260 lowerFiberGlassBlock_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
2261 lowerFiberGlassBlock_transf[0]->SetDz(0.0);
2262
2263 frames->AddNode(lowerFiberGlassBlockV, 0, lowerFiberGlassBlock_transf[0]);
2264 //--------------------------------------------------------------------------
2265
2266 // side fiberglass block ----------------------------------------------------
2267 Double_t sideFiberGlassBlockPart_XSize = 1.45; // cm
2268 Double_t sideFiberGlassBlockPart_YSize = 49.4; // cm
2269 Double_t sideFiberGlassBlockPart_ZSize = 0.89; // cm
2270
2271 TGeoShape* sideFiberGlassBlockS = new TGeoBBox(
2272 TString("sideFiberGlassBlockS") +=
2273 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2274 sideFiberGlassBlockPart_XSize * 0.5, sideFiberGlassBlockPart_YSize * 0.5, sideFiberGlassBlockPart_ZSize * 0.5);
2275
2276 TGeoVolume* sideFiberGlassBlockV =
2277 new TGeoVolume(TString("sideFiberGlassBlockV") += TString("_") + frames->GetName(), sideFiberGlassBlockS);
2278
2279 // volume medium
2280 TGeoMedium* sideFiberGlassBlockV_medium = pMedFiberGlass;
2281 if (sideFiberGlassBlockV_medium) {
2282 sideFiberGlassBlockV->SetMedium(sideFiberGlassBlockV_medium);
2283 } else
2284 Fatal("Main", "Invalid medium for sideFiberGlassBlockV!");
2285
2286 // volume visual property (transparency)
2287 sideFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
2288 sideFiberGlassBlockV->SetTransparency(0);
2289
2290 TGeoCombiTrans* sideFiberGlassBlock_transf[2];
2291
2292 sideFiberGlassBlock_transf[0] = new TGeoCombiTrans();
2293 sideFiberGlassBlock_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
2294 sideFiberGlassBlock_transf[0]->SetDy(+0.45 /*shift*/);
2295 sideFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
2296
2297 sideFiberGlassBlock_transf[1] = new TGeoCombiTrans();
2298 sideFiberGlassBlock_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
2299 sideFiberGlassBlock_transf[1]->SetDy(+0.45 /*shift*/);
2300 sideFiberGlassBlock_transf[1]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
2301
2302 frames->AddNode(sideFiberGlassBlockV, 0, sideFiberGlassBlock_transf[0]);
2303 frames->AddNode(sideFiberGlassBlockV, 1, sideFiberGlassBlock_transf[1]);
2304 //--------------------------------------------------------------------------
2305
2306 // upper fiberglass block ---------------------------------------------------
2307 Double_t upperFiberGlassBlock_XSize = 165.1; // cm
2308 Double_t upperFiberGlassBlock_YSize = 1.45; // cm
2309 Double_t upperFiberGlassBlock_ZSize = 0.89; // cm
2310
2311 TGeoShape* upperFiberGlassBlockS = new TGeoBBox(
2312 TString("upperFiberGlassBlockS") +=
2313 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2314 upperFiberGlassBlock_XSize * 0.5, upperFiberGlassBlock_YSize * 0.5, upperFiberGlassBlock_ZSize * 0.5);
2315
2316 TGeoVolume* upperFiberGlassBlockV =
2317 new TGeoVolume(TString("upperFiberGlassBlockV") += TString("_") + frames->GetName(), upperFiberGlassBlockS);
2318
2319 // volume medium
2320 TGeoMedium* upperFiberGlassBlockV_medium = pMedFiberGlass;
2321 if (upperFiberGlassBlockV_medium) {
2322 upperFiberGlassBlockV->SetMedium(upperFiberGlassBlockV_medium);
2323 } else
2324 Fatal("Main", "Invalid medium for upperFiberGlassBlockV!");
2325
2326 // volume visual property (transparency)
2327 upperFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
2328 upperFiberGlassBlockV->SetTransparency(0);
2329
2330 TGeoCombiTrans* upperFiberGlassBlock_transf[1];
2331
2332 upperFiberGlassBlock_transf[0] = new TGeoCombiTrans();
2333 upperFiberGlassBlock_transf[0]->SetDx(0.0);
2334 upperFiberGlassBlock_transf[0]->SetDy(
2335 +(sideFiberGlassBlockPart_YSize * 0.5 - upperFiberGlassBlock_YSize * 0.5 + 0.45 /*shift*/));
2336 upperFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
2337
2338 frames->AddNode(upperFiberGlassBlockV, 0, upperFiberGlassBlock_transf[0]);
2339 //--------------------------------------------------------------------------
2340
2341 // brass layer --------------------------------------------------------------
2342 Double_t upperBrasslayer_XSize = 165.1; // cm
2343 Double_t upperBrasslayer_YSize = 1.45; // cm
2344 Double_t upperBrasslayer_ZSize = 0.005; // cm
2345
2346 Double_t sideBrasslayer_XSize = 1.45; // cm
2347 Double_t sideBrasslayer_YSize = 49.4; // cm
2348 Double_t sideBrasslayer_ZSize = 0.005; // cm
2349
2350 TGeoShape* upperBrasslayerS = new TGeoBBox(
2351 TString("upperBrasslayerS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2352 upperBrasslayer_XSize * 0.5, upperBrasslayer_YSize * 0.5, upperBrasslayer_ZSize * 0.5);
2353 TGeoShape* sideBrasslayerS = new TGeoBBox(
2354 TString("sideBrasslayerS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2355 sideBrasslayer_XSize * 0.5, sideBrasslayer_YSize * 0.5, sideBrasslayer_ZSize * 0.5);
2356
2357 TGeoVolume* upperBrasslayerV =
2358 new TGeoVolume(TString("upperBrasslayerV") += TString("_") + frames->GetName(), upperBrasslayerS);
2359 TGeoVolume* sideBrasslayerV =
2360 new TGeoVolume(TString("sideBrasslayerV") += TString("_") + frames->GetName(), sideBrasslayerS);
2361
2362 // volume medium
2363 TGeoMedium* upperBrasslayerV_medium = pMedBrass;
2364 if (upperBrasslayerV_medium) {
2365 upperBrasslayerV->SetMedium(upperBrasslayerV_medium);
2366 sideBrasslayerV->SetMedium(upperBrasslayerV_medium);
2367 } else
2368 Fatal("Main", "Invalid medium for upperBrasslayerV_medium!");
2369
2370 // volume visual property (transparency)
2371 upperBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
2372 upperBrasslayerV->SetTransparency(0);
2373 sideBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
2374 sideBrasslayerV->SetTransparency(0);
2375
2376 TGeoCombiTrans* upperBrasslayer_transf[1];
2377
2378 upperBrasslayer_transf[0] = new TGeoCombiTrans();
2379 upperBrasslayer_transf[0]->SetDx(0.0);
2380 upperBrasslayer_transf[0]->SetDy(
2381 +(sideFiberGlassBlockPart_YSize * 0.5 - upperBrasslayer_YSize * 0.5 + 0.45 /*shift*/));
2382 upperBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
2383
2384 TGeoCombiTrans* sideBrasslayer_transf[2];
2385
2386 sideBrasslayer_transf[0] = new TGeoCombiTrans();
2387 sideBrasslayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
2388 sideBrasslayer_transf[0]->SetDy(+0.45 /*shift*/);
2389 sideBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
2390
2391 sideBrasslayer_transf[1] = new TGeoCombiTrans();
2392 sideBrasslayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
2393 sideBrasslayer_transf[1]->SetDy(+0.45 /*shift*/);
2394 sideBrasslayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
2395
2396 frames->AddNode(upperBrasslayerV, 0, upperBrasslayer_transf[0]);
2397
2398 frames->AddNode(sideBrasslayerV, 0, sideBrasslayer_transf[0]);
2399 frames->AddNode(sideBrasslayerV, 1, sideBrasslayer_transf[1]);
2400 //--------------------------------------------------------------------------
2401
2402 // steel layer --------------------------------------------------------------
2403 Double_t upperSteellayer_XSize = 165.1; // cm
2404 Double_t upperSteellayer_YSize = 1.45; // cm
2405 Double_t upperSteellayer_ZSize = 0.005; // cm
2406
2407 Double_t sideSteellayer_XSize = 1.45; // cm
2408 Double_t sideSteellayer_YSize = 49.4; // cm
2409 Double_t sideSteellayer_ZSize = 0.005; // cm
2410
2411 TGeoShape* upperSteellayerS = new TGeoBBox(
2412 TString("upperSteellayerS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2413 upperSteellayer_XSize * 0.5, upperSteellayer_YSize * 0.5, upperSteellayer_ZSize * 0.5);
2414 TGeoShape* sideSteellayerS = new TGeoBBox(
2415 TString("sideSteellayerS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + frames->GetName(),
2416 sideSteellayer_XSize * 0.5, sideSteellayer_YSize * 0.5, sideSteellayer_ZSize * 0.5);
2417
2418 TGeoVolume* upperSteellayerV =
2419 new TGeoVolume(TString("upperSteellayerV") += TString("_") + frames->GetName(), upperSteellayerS);
2420 TGeoVolume* sideSteellayerV =
2421 new TGeoVolume(TString("sideSteellayerV") += TString("_") + frames->GetName(), sideSteellayerS);
2422
2423 // volume medium
2424 TGeoMedium* upperSteellayerV_medium = pMedSteel;
2425 if (upperSteellayerV_medium) {
2426 upperSteellayerV->SetMedium(upperSteellayerV_medium);
2427 sideSteellayerV->SetMedium(upperSteellayerV_medium);
2428 } else
2429 Fatal("Main", "Invalid medium for upperSteellayerV_medium!");
2430
2431 // volume visual property (transparency)
2432 upperSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
2433 upperSteellayerV->SetTransparency(0);
2434 sideSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
2435 sideSteellayerV->SetTransparency(0);
2436
2437 TGeoCombiTrans* upperSteellayer_transf[1];
2438
2439 upperSteellayer_transf[0] = new TGeoCombiTrans();
2440 upperSteellayer_transf[0]->SetDx(0.0);
2441 upperSteellayer_transf[0]->SetDy(
2442 +(sideFiberGlassBlockPart_YSize * 0.5 - upperSteellayer_YSize * 0.5 + 0.45 /*shift*/));
2443 upperSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperSteellayer_ZSize * 0.5 + 0.005 /*shift*/);
2444
2445 TGeoCombiTrans* sideSteellayer_transf[2];
2446
2447 sideSteellayer_transf[0] = new TGeoCombiTrans();
2448 sideSteellayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
2449 sideSteellayer_transf[0]->SetDy(+0.45 /*shift*/);
2450 sideSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
2451
2452 sideSteellayer_transf[1] = new TGeoCombiTrans();
2453 sideSteellayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
2454 sideSteellayer_transf[1]->SetDy(+0.45 /*shift*/);
2455 sideSteellayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
2456
2457 frames->AddNode(upperSteellayerV, 0, upperSteellayer_transf[0]);
2458
2459 frames->AddNode(sideSteellayerV, 0, sideSteellayer_transf[0]);
2460 frames->AddNode(sideSteellayerV, 1, sideSteellayer_transf[1]);
2461 //--------------------------------------------------------------------------
2462
2463 return frames;
2464}
2465//------------------------------------------------------------------------------
2466
2468 Double_t xsize,
2469 Double_t ysize,
2470 Double_t zsize,
2471 Double_t hole_radius)
2472{
2473
2474 return CreateModule_Station163x45(module_name, xsize, ysize, zsize, hole_radius);
2475}
2476//------------------------------------------------------------------------------
2477
2479{
2480
2481 Int_t uniqueId = gRandom->Integer(100000);
2482
2483 // frame volumes
2484 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
2485 layers->SetMedium(pMedAir);
2486
2487 // Common parameters for all layers
2488 Double_t layer_XSize = XModuleSize_Station163x39; // cm
2489 Double_t layer_YSize = YModuleSize_Station163x39; // cm
2490
2491 Double_t layerFront_XSize = 80.71; // cm
2492 Double_t layerFront_YSize = 38.2; // cm
2493 Double_t layerFront_XShift = -0.445; // cm
2494 Double_t layerFront_YShift = -0.2; // cm
2495
2496 Double_t layerBack_XSize = 80.71; // cm
2497 Double_t layerBack_YSize = 38.2; // cm
2498 Double_t layerBack_XShift = -0.445; // cm
2499 Double_t layerBack_YShift = -0.2; // cm
2500
2501 // copper layer -------------------------------------------------------------
2502 Double_t copperLayer_ZSize = 0.00655; // cm;
2503 Double_t copperLayerHole_Radius = 6.0; // cm
2504
2505 // layer shape
2506 TGeoShape* copperLayerFrontBlankS =
2507 new TGeoBBox(TString("copperLayerFrontBlankS") +=
2508 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2509 layerFront_XSize * 0.5, layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
2510 TGeoShape* copperLayerBackBlankS =
2511 new TGeoBBox(TString("copperLayerBackBlankS") +=
2512 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2513 layerBack_XSize * 0.5, layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
2514
2515 TGeoShape* copperLayerFrontHoleS =
2516 new TGeoTube(TString("copperLayerFrontHoleS") +=
2517 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2518 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
2519 TGeoShape* copperLayerBackHoleS =
2520 new TGeoTube(TString("copperLayerBackHoleS") +=
2521 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2522 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
2523
2524 TGeoTranslation* copperLayerFrontHole_pos = new TGeoTranslation();
2525 copperLayerFrontHole_pos->SetName(TString("copperLayerFrontHole_pos") +=
2526 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2527 copperLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2528 copperLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2529 copperLayerFrontHole_pos->SetDz(0.0);
2530 copperLayerFrontHole_pos->RegisterYourself();
2531
2532 TGeoTranslation* copperLayerBackHole_pos = new TGeoTranslation();
2533 copperLayerBackHole_pos->SetName(TString("copperLayerBackHole_pos") +=
2534 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2535 copperLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2536 copperLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2537 copperLayerBackHole_pos->SetDz(0.0);
2538 copperLayerBackHole_pos->RegisterYourself();
2539
2540 TGeoCompositeShape* copperLayerFrontS = new TGeoCompositeShape();
2541 copperLayerFrontS->SetName(TString("copperLayerFrontS") +=
2542 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2543 {
2544 TString expression = "copperLayerFrontBlankS";
2545 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2546 expression += "-copperLayerFrontHoleS";
2547 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2548 expression += ":copperLayerFrontHole_pos";
2549 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2550
2551 copperLayerFrontS->MakeNode(expression);
2552 copperLayerFrontS->ComputeBBox(); // need to compute a bounding box
2553 }
2554
2555 TGeoCompositeShape* copperLayerBackS = new TGeoCompositeShape();
2556 copperLayerBackS->SetName(TString("copperLayerBackS") +=
2557 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2558 {
2559 TString expression = "copperLayerBackBlankS";
2560 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2561 expression += "-copperLayerBackHoleS";
2562 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2563 expression += ":copperLayerBackHole_pos";
2564 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2565
2566 copperLayerBackS->MakeNode(expression);
2567 copperLayerBackS->ComputeBBox(); // need to compute a bounding box
2568 }
2569
2570 TGeoVolume* copperLayerFrontV =
2571 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
2572 TGeoVolume* copperLayerBackV =
2573 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
2574
2575 // volume medium
2576 TGeoMedium* copperLayerV_medium = pMedCopper;
2577 if (copperLayerV_medium) {
2578 copperLayerFrontV->SetMedium(copperLayerV_medium);
2579 copperLayerBackV->SetMedium(copperLayerV_medium);
2580 } else
2581 Fatal("Main", "Invalid medium for copperLayerV!");
2582
2583 // volume visual property (transparency)
2584 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
2585 copperLayerFrontV->SetTransparency(0);
2586 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
2587 copperLayerBackV->SetTransparency(0);
2588
2589 TGeoCombiTrans* copperLayerFront_transf[2];
2590
2591 copperLayerFront_transf[0] = new TGeoCombiTrans();
2592 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
2593 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
2594 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize * 0.5);
2595
2596 TGeoCombiTrans* copperLayerBack_transf[1];
2597
2598 copperLayerBack_transf[0] = new TGeoCombiTrans();
2599 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
2600 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
2601 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize * 0.5);
2602
2603 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
2604 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
2605 //--------------------------------------------------------------------------
2606
2607 // glue layer ---------------------------------------------------------------
2608 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
2609 Double_t glueLayerHole_Radius = 6.0; // cm
2610
2611 // layer shape
2612 TGeoShape* glueLayerFrontBlankS =
2613 new TGeoBBox(TString("glueLayerFrontBlankS") +=
2614 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2615 layerFront_XSize * 0.5, layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
2616 TGeoShape* glueLayerBackBlankS = new TGeoBBox(
2617 TString("glueLayerBackBlankS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2618 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
2619
2620 TGeoShape* glueLayerFrontHoleS = new TGeoTube(
2621 TString("glueLayerFrontHoleS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2622 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
2623 TGeoShape* glueLayerBackHoleS = new TGeoTube(
2624 TString("glueLayerBackHoleS") += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2625 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
2626
2627 TGeoTranslation* glueLayerFrontHole_pos = new TGeoTranslation();
2628 glueLayerFrontHole_pos->SetName(TString("glueLayerFrontHole_pos") +=
2629 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2630 glueLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2631 glueLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2632 glueLayerFrontHole_pos->SetDz(0.0);
2633 glueLayerFrontHole_pos->RegisterYourself();
2634
2635 TGeoTranslation* glueLayerBackHole_pos = new TGeoTranslation();
2636 glueLayerBackHole_pos->SetName(TString("glueLayerBackHole_pos") +=
2637 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2638 glueLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2639 glueLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2640 glueLayerBackHole_pos->SetDz(0.0);
2641 glueLayerBackHole_pos->RegisterYourself();
2642
2643 TGeoCompositeShape* glueLayerFrontS = new TGeoCompositeShape();
2644 glueLayerFrontS->SetName(TString("glueLayerFrontS") +=
2645 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2646 {
2647 TString expression = "glueLayerFrontBlankS";
2648 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2649 expression += "-glueLayerFrontHoleS";
2650 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2651 expression += ":glueLayerFrontHole_pos";
2652 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2653
2654 glueLayerFrontS->MakeNode(expression);
2655 glueLayerFrontS->ComputeBBox(); // need to compute a bounding box
2656 }
2657
2658 TGeoCompositeShape* glueLayerBackS = new TGeoCompositeShape();
2659 glueLayerBackS->SetName(TString("glueLayerBackS") +=
2660 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2661 {
2662 TString expression = "glueLayerBackBlankS";
2663 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2664 expression += "-glueLayerBackHoleS";
2665 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2666 expression += ":glueLayerBackHole_pos";
2667 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2668
2669 glueLayerBackS->MakeNode(expression);
2670 glueLayerBackS->ComputeBBox(); // need to compute a bounding box
2671 }
2672
2673 TGeoVolume* glueLayerFrontV =
2674 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
2675 TGeoVolume* glueLayerBackV =
2676 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
2677
2678 // volume medium
2679 TGeoMedium* glueLayerV_medium = pMedGlue;
2680 if (glueLayerV_medium) {
2681 glueLayerFrontV->SetMedium(glueLayerV_medium);
2682 glueLayerBackV->SetMedium(glueLayerV_medium);
2683 } else
2684 Fatal("Main", "Invalid medium for glueLayerV!");
2685
2686 // volume visual property (transparency)
2687 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
2688 glueLayerFrontV->SetTransparency(0);
2689 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
2690 glueLayerBackV->SetTransparency(0);
2691
2692 TGeoCombiTrans* glueLayerFront_transf[1];
2693
2694 glueLayerFront_transf[0] = new TGeoCombiTrans();
2695 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
2696 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
2697 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
2698
2699 TGeoCombiTrans* glueLayerBack_transf[1];
2700
2701 glueLayerBack_transf[0] = new TGeoCombiTrans();
2702 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
2703 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
2704 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize * 0.5);
2705
2706 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
2707 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
2708 //--------------------------------------------------------------------------
2709
2710 // epoxide layer ------------------------------------------------------------
2711 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
2712 Double_t epoxideLayerHole_Radius = 6.0; // cm
2713
2714 // layer shape
2715 TGeoShape* epoxideLayerFrontBlankS =
2716 new TGeoBBox(TString("epoxideLayerFrontBlankS") +=
2717 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2718 layerFront_XSize * 0.5, layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
2719 TGeoShape* epoxideLayerBackBlankS =
2720 new TGeoBBox(TString("epoxideLayerBackBlankS") +=
2721 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2722 layerBack_XSize * 0.5, layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
2723
2724 TGeoShape* epoxideLayerFrontHoleS =
2725 new TGeoTube(TString("epoxideLayerFrontHoleS") +=
2726 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2727 0.0, epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
2728 TGeoShape* epoxideLayerBackHoleS =
2729 new TGeoTube(TString("epoxideLayerBackHoleS") +=
2730 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2731 0.0, epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
2732
2733 TGeoTranslation* epoxideLayerFrontHole_pos = new TGeoTranslation();
2734 epoxideLayerFrontHole_pos->SetName(TString("epoxideLayerFrontHole_pos") +=
2735 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2736 epoxideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2737 epoxideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2738 epoxideLayerFrontHole_pos->SetDz(0.0);
2739 epoxideLayerFrontHole_pos->RegisterYourself();
2740
2741 TGeoTranslation* epoxideLayerBackHole_pos = new TGeoTranslation();
2742 epoxideLayerBackHole_pos->SetName(TString("epoxideLayerBackHole_pos") +=
2743 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2744 epoxideLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2745 epoxideLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2746 epoxideLayerBackHole_pos->SetDz(0.0);
2747 epoxideLayerBackHole_pos->RegisterYourself();
2748
2749 TGeoCompositeShape* epoxideLayerFrontS = new TGeoCompositeShape();
2750 epoxideLayerFrontS->SetName(TString("epoxideLayerFrontS") +=
2751 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2752 {
2753 TString expression = "epoxideLayerFrontBlankS";
2754 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2755 expression += "-epoxideLayerFrontHoleS";
2756 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2757 expression += ":epoxideLayerFrontHole_pos";
2758 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2759
2760 epoxideLayerFrontS->MakeNode(expression);
2761 epoxideLayerFrontS->ComputeBBox(); // need to compute a bounding box
2762 }
2763
2764 TGeoCompositeShape* epoxideLayerBackS = new TGeoCompositeShape();
2765 epoxideLayerBackS->SetName(TString("epoxideLayerBackS") +=
2766 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2767 {
2768 TString expression = "epoxideLayerBackBlankS";
2769 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2770 expression += "-epoxideLayerBackHoleS";
2771 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2772 expression += ":epoxideLayerBackHole_pos";
2773 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2774
2775 epoxideLayerBackS->MakeNode(expression);
2776 epoxideLayerBackS->ComputeBBox(); // need to compute a bounding box
2777 }
2778
2779 TGeoVolume* epoxideLayerFrontV =
2780 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
2781 TGeoVolume* epoxideLayerBackV =
2782 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
2783
2784 // volume medium
2785 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
2786 if (epoxideLayerV_medium) {
2787 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
2788 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
2789 } else
2790 Fatal("Main", "Invalid medium for epoxideLayerV!");
2791
2792 // volume visual property (transparency)
2793 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
2794 epoxideLayerFrontV->SetTransparency(0);
2795 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
2796 epoxideLayerBackV->SetTransparency(0);
2797
2798 TGeoCombiTrans* epoxideLayerFront_transf[1];
2799
2800 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
2801 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
2802 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
2803 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
2804 + epoxideLayer_ZSize * 0.5);
2805
2806 TGeoCombiTrans* epoxideLayerBack_transf[1];
2807
2808 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
2809 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
2810 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
2811 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
2812 - epoxideLayer_ZSize * 0.5);
2813
2814 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
2815 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
2816 //--------------------------------------------------------------------------
2817
2818 // honeycomb layer ----------------------------------------------------------
2819 // Double_t honeycombLayer_ZSize = 1.5-(0.05+0.00055+0.005+0.0125); //cm; half-thickness of all honeycomb layers
2820 Double_t honeycombLayer_ZSize = 1.4 - (0.06805); // cm; half-thickness of all honeycomb layers
2821 Double_t honeycombLayerHole_Radius = 6.0; // cm
2822
2823 // layer shape
2824 TGeoShape* honeycombLayerFrontBlankS =
2825 new TGeoBBox(TString("honeycombLayerFrontBlankS") +=
2826 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2827 layerFront_XSize * 0.5, layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
2828 TGeoShape* honeycombLayerBackBlankS =
2829 new TGeoBBox(TString("honeycombLayerBackBlankS") +=
2830 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2831 layerBack_XSize * 0.5, layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
2832
2833 TGeoShape* honeycombLayerFrontHoleS =
2834 new TGeoTube(TString("honeycombLayerFrontHoleS") +=
2835 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2836 0.0, honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
2837 TGeoShape* honeycombLayerBackHoleS =
2838 new TGeoTube(TString("honeycombLayerBackHoleS") +=
2839 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2840 0.0, honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
2841
2842 TGeoTranslation* honeycombLayerFrontHole_pos = new TGeoTranslation();
2843 honeycombLayerFrontHole_pos->SetName(TString("honeycombLayerFrontHole_pos") +=
2844 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2845 honeycombLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2846 honeycombLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2847 honeycombLayerFrontHole_pos->SetDz(0.0);
2848 honeycombLayerFrontHole_pos->RegisterYourself();
2849
2850 TGeoTranslation* honeycombLayerBackHole_pos = new TGeoTranslation();
2851 honeycombLayerBackHole_pos->SetName(TString("honeycombLayerBackHole_pos") +=
2852 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2853 honeycombLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2854 honeycombLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2855 honeycombLayerBackHole_pos->SetDz(0.0);
2856 honeycombLayerBackHole_pos->RegisterYourself();
2857
2858 TGeoCompositeShape* honeycombLayerFrontS = new TGeoCompositeShape();
2859 honeycombLayerFrontS->SetName(TString("honeycombLayerFrontS") +=
2860 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2861 {
2862 TString expression = "honeycombLayerFrontBlankS";
2863 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2864 expression += "-honeycombLayerFrontHoleS";
2865 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2866 expression += ":honeycombLayerFrontHole_pos";
2867 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2868
2869 honeycombLayerFrontS->MakeNode(expression);
2870 honeycombLayerFrontS->ComputeBBox(); // need to compute a bounding box
2871 }
2872
2873 TGeoCompositeShape* honeycombLayerBackS = new TGeoCompositeShape();
2874 honeycombLayerBackS->SetName(TString("honeycombLayerBackS") +=
2875 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2876 {
2877 TString expression = "honeycombLayerBackBlankS";
2878 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2879 expression += "-honeycombLayerBackHoleS";
2880 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2881 expression += ":honeycombLayerBackHole_pos";
2882 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2883
2884 honeycombLayerBackS->MakeNode(expression);
2885 honeycombLayerBackS->ComputeBBox(); // need to compute a bounding box
2886 }
2887
2888 TGeoVolume* honeycombLayerFrontV =
2889 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
2890 TGeoVolume* honeycombLayerBackV =
2891 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
2892
2893 // volume medium
2894 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
2895 if (honeycombLayerV_medium) {
2896 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
2897 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
2898 } else
2899 Fatal("Main", "Invalid medium for honeycombLayerV!");
2900
2901 // volume visual property (transparency)
2902 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
2903 honeycombLayerFrontV->SetTransparency(0);
2904 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
2905 honeycombLayerBackV->SetTransparency(0);
2906
2907 TGeoCombiTrans* honeycombLayerFront_transf[1];
2908
2909 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
2910 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
2911 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
2912 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
2913 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
2914
2915 TGeoCombiTrans* honeycombLayerBack_transf[1];
2916
2917 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
2918 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
2919 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
2920 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
2921 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5);
2922
2923 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
2924 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
2925 //--------------------------------------------------------------------------
2926
2927 // polyamide layer ----------------------------------------------------------
2928 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
2929 Double_t polyamideLayerHole_Radius = 6.0; // cm
2930
2931 // layer shape
2932 TGeoShape* polyamideLayerFrontBlankS =
2933 new TGeoBBox(TString("polyamideLayerFrontBlankS") +=
2934 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2935 layerFront_XSize * 0.5, layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
2936 TGeoShape* polyamideLayerBackBlankS =
2937 new TGeoBBox(TString("polyamideLayerBackBlankS") +=
2938 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2939 layerBack_XSize * 0.5, layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
2940
2941 TGeoShape* polyamideLayerFrontHoleS =
2942 new TGeoTube(TString("polyamideLayerFrontHoleS") +=
2943 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2944 0.0, polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
2945 TGeoShape* polyamideLayerBackHoleS =
2946 new TGeoTube(TString("polyamideLayerBackHoleS") +=
2947 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName(),
2948 0.0, polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
2949
2950 TGeoTranslation* polyamideLayerFrontHole_pos = new TGeoTranslation();
2951 polyamideLayerFrontHole_pos->SetName(TString("polyamideLayerFrontHole_pos") +=
2952 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2953 polyamideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerFront_XShift);
2954 polyamideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerFront_YShift);
2955 polyamideLayerFrontHole_pos->SetDz(0.0);
2956 polyamideLayerFrontHole_pos->RegisterYourself();
2957
2958 TGeoTranslation* polyamideLayerBackHole_pos = new TGeoTranslation();
2959 polyamideLayerBackHole_pos->SetName(TString("polyamideLayerBackHole_pos") +=
2960 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2961 polyamideLayerBackHole_pos->SetDx(-XModuleSize_Station163x39 * 0.5 - layerBack_XShift);
2962 polyamideLayerBackHole_pos->SetDy(-YModuleSize_Station163x39 * 0.5 - layerBack_YShift);
2963 polyamideLayerBackHole_pos->SetDz(0.0);
2964 polyamideLayerBackHole_pos->RegisterYourself();
2965
2966 TGeoCompositeShape* polyamideLayerFrontS = new TGeoCompositeShape();
2967 polyamideLayerFrontS->SetName(TString("polyamideLayerFrontS") +=
2968 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2969 {
2970 TString expression = "polyamideLayerFrontBlankS";
2971 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2972 expression += "-polyamideLayerFrontHoleS";
2973 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2974 expression += ":polyamideLayerFrontHole_pos";
2975 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2976
2977 polyamideLayerFrontS->MakeNode(expression);
2978 polyamideLayerFrontS->ComputeBBox(); // need to compute a bounding box
2979 }
2980
2981 TGeoCompositeShape* polyamideLayerBackS = new TGeoCompositeShape();
2982 polyamideLayerBackS->SetName(TString("polyamideLayerBackS") +=
2983 TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName());
2984 {
2985 TString expression = "polyamideLayerBackBlankS";
2986 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2987 expression += "-polyamideLayerBackHoleS";
2988 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2989 expression += ":polyamideLayerBackHole_pos";
2990 expression += TString("_") + TString::Itoa(uniqueId, 10) + TString("_") + layers->GetName();
2991
2992 polyamideLayerBackS->MakeNode(expression);
2993 polyamideLayerBackS->ComputeBBox(); // need to compute a bounding box
2994 }
2995
2996 TGeoVolume* polyamideLayerFrontV =
2997 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
2998 TGeoVolume* polyamideLayerBackV =
2999 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
3000
3001 // volume medium
3002 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
3003 if (polyamideLayerV_medium) {
3004 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
3005 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
3006 } else
3007 Fatal("Main", "Invalid medium for polyamideLayerV!");
3008
3009 // volume visual property (transparency)
3010 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
3011 polyamideLayerFrontV->SetTransparency(0);
3012 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
3013 polyamideLayerBackV->SetTransparency(0);
3014
3015 TGeoCombiTrans* polyamideLayerFront_transf[1];
3016
3017 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
3018 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
3019 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
3020 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x39 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3021 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
3022
3023 TGeoCombiTrans* polyamideLayerBack_transf[1];
3024
3025 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
3026 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
3027 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
3028 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x39 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
3029 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5);
3030
3031 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
3032 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
3033 //--------------------------------------------------------------------------
3034
3035 return layers;
3036}
3037//------------------------------------------------------------------------------
3038
3040{
3041
3042 Int_t uniqueId = gRandom->Integer(100000);
3043
3044 // frame volumes
3045 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
3046 frames->SetMedium(pMedAir);
3047
3048 // back lower epoxide frame -------------------------------------------------
3049 Double_t backLowerEpoxideFrame_XSize = 161.42; // cm
3050 Double_t backLowerEpoxideFrame_YSize = 2.2; // cm
3051 Double_t backLowerEpoxideFrame_ZSize = 1.5; // cm
3052
3053 Double_t backLowerEpoxideFrameArch_Rmin = 4.0;
3054 Double_t backLowerEpoxideFrameArch_Rmax = 6.0;
3055 Double_t backLowerEpoxideFrameArch_ZSize = backLowerEpoxideFrame_ZSize;
3056
3057 TGeoShape* backLowerEpoxideFrameHalfS =
3058 new TGeoBBox(TString("backLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3059 (backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5,
3060 backLowerEpoxideFrame_YSize * 0.5, backLowerEpoxideFrame_ZSize * 0.5);
3061 TGeoShape* backLowerEpoxideFrameArchS = new TGeoTubeSeg(
3062 TString("backLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), backLowerEpoxideFrameArch_Rmin,
3063 backLowerEpoxideFrameArch_Rmax, backLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3064
3065 TGeoTranslation* backLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3066 backLowerEpoxideFrameHalf_pos1->SetName(TString("backLowerEpoxideFrameHalf1_pos1") + TString("_")
3067 + frames->GetName());
3068 backLowerEpoxideFrameHalf_pos1->SetDx(
3069 +((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3070 backLowerEpoxideFrameHalf_pos1->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3071 backLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3072 backLowerEpoxideFrameHalf_pos1->RegisterYourself();
3073
3074 TGeoTranslation* backLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3075 backLowerEpoxideFrameHalf_pos2->SetName(TString("backLowerEpoxideFrameHalf1_pos2") + TString("_")
3076 + frames->GetName());
3077 backLowerEpoxideFrameHalf_pos2->SetDx(
3078 -((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3079 backLowerEpoxideFrameHalf_pos2->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3080 backLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3081 backLowerEpoxideFrameHalf_pos2->RegisterYourself();
3082
3083 TGeoTranslation* backLowerEpoxideFrameArch_pos = new TGeoTranslation();
3084 backLowerEpoxideFrameArch_pos->SetName(TString("backLowerEpoxideFrameArch_pos") + TString("_") + frames->GetName());
3085 backLowerEpoxideFrameArch_pos->SetDx(0.0);
3086 backLowerEpoxideFrameArch_pos->SetDy(0.0);
3087 backLowerEpoxideFrameArch_pos->SetDz(0.0);
3088 backLowerEpoxideFrameArch_pos->RegisterYourself();
3089
3090 TGeoCompositeShape* backLowerEpoxideFrameS = new TGeoCompositeShape();
3091 backLowerEpoxideFrameS->SetName(TString("backLowerEpoxideFrameS") += TString("_") + frames->GetName());
3092 {
3093 TString expression = "backLowerEpoxideFrameHalfS";
3094 expression += TString("_") + frames->GetName();
3095 expression += ":backLowerEpoxideFrameHalf1_pos1";
3096 expression += TString("_") + frames->GetName();
3097 expression += "+backLowerEpoxideFrameHalfS";
3098 expression += TString("_") + frames->GetName();
3099 expression += ":backLowerEpoxideFrameHalf1_pos2";
3100 expression += TString("_") + frames->GetName();
3101 expression += "+backLowerEpoxideFrameArchS";
3102 expression += TString("_") + frames->GetName();
3103 expression += ":backLowerEpoxideFrameArch_pos";
3104 expression += TString("_") + frames->GetName();
3105
3106 backLowerEpoxideFrameS->MakeNode(expression);
3107 backLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3108 }
3109
3110 TGeoVolume* backLowerEpoxideFrameV =
3111 new TGeoVolume(TString("backLowerEpoxideFrameV") += TString("_") + frames->GetName(), backLowerEpoxideFrameS);
3112
3113 // volume medium
3114 TGeoMedium* backLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3115 if (backLowerEpoxideFrameV_medium) {
3116 backLowerEpoxideFrameV->SetMedium(backLowerEpoxideFrameV_medium);
3117 } else
3118 Fatal("Main", "Invalid medium for backLowerEpoxideFrameV!");
3119
3120 // volume visual property (transparency)
3121 backLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3122 backLowerEpoxideFrameV->SetTransparency(0);
3123
3124 TGeoCombiTrans* backLowerEpoxideFrame_transf[1];
3125
3126 backLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3127 backLowerEpoxideFrame_transf[0]->SetDx(0.0);
3128 backLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5));
3129 backLowerEpoxideFrame_transf[0]->SetDz(+(backLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5));
3130
3131 frames->AddNode(backLowerEpoxideFrameV, 0, backLowerEpoxideFrame_transf[0]);
3132 //--------------------------------------------------------------------------
3133
3134 // front lower epoxide frame -------------------------------------------------
3135 Double_t frontLowerEpoxideFrame_XSize = 161.7; // cm
3136 Double_t frontLowerEpoxideFrame_YSize = 2.2; // cm
3137 Double_t frontLowerEpoxideFrame_ZSize = 1.6; // cm
3138
3139 Double_t frontLowerEpoxideFrameArch_Rmin = 4.0;
3140 Double_t frontLowerEpoxideFrameArch_Rmax = 6.0;
3141 Double_t frontLowerEpoxideFrameArch_ZSize = frontLowerEpoxideFrame_ZSize;
3142
3143 TGeoShape* frontLowerEpoxideFrameHalfS =
3144 new TGeoBBox(TString("frontLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3145 (frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5,
3146 frontLowerEpoxideFrame_YSize * 0.5, frontLowerEpoxideFrame_ZSize * 0.5);
3147 TGeoShape* frontLowerEpoxideFrameArchS = new TGeoTubeSeg(
3148 TString("frontLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), frontLowerEpoxideFrameArch_Rmin,
3149 frontLowerEpoxideFrameArch_Rmax, frontLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3150
3151 TGeoTranslation* frontLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3152 frontLowerEpoxideFrameHalf_pos1->SetName(TString("frontLowerEpoxideFrameHalf1_pos1") + TString("_")
3153 + frames->GetName());
3154 frontLowerEpoxideFrameHalf_pos1->SetDx(
3155 +((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3156 + frontLowerEpoxideFrameArch_Rmin));
3157 frontLowerEpoxideFrameHalf_pos1->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3158 frontLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3159 frontLowerEpoxideFrameHalf_pos1->RegisterYourself();
3160
3161 TGeoTranslation* frontLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3162 frontLowerEpoxideFrameHalf_pos2->SetName(TString("frontLowerEpoxideFrameHalf1_pos2") + TString("_")
3163 + frames->GetName());
3164 frontLowerEpoxideFrameHalf_pos2->SetDx(
3165 -((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3166 + frontLowerEpoxideFrameArch_Rmin));
3167 frontLowerEpoxideFrameHalf_pos2->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3168 frontLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3169 frontLowerEpoxideFrameHalf_pos2->RegisterYourself();
3170
3171 TGeoTranslation* frontLowerEpoxideFrameArch_pos = new TGeoTranslation();
3172 frontLowerEpoxideFrameArch_pos->SetName(TString("frontLowerEpoxideFrameArch_pos") + TString("_")
3173 + frames->GetName());
3174 frontLowerEpoxideFrameArch_pos->SetDx(0.0);
3175 frontLowerEpoxideFrameArch_pos->SetDy(0.0);
3176 frontLowerEpoxideFrameArch_pos->SetDz(0.0);
3177 frontLowerEpoxideFrameArch_pos->RegisterYourself();
3178
3179 TGeoCompositeShape* frontLowerEpoxideFrameS = new TGeoCompositeShape();
3180 frontLowerEpoxideFrameS->SetName(TString("frontLowerEpoxideFrameS") += TString("_") + frames->GetName());
3181 {
3182 TString expression = "frontLowerEpoxideFrameHalfS";
3183 expression += TString("_") + frames->GetName();
3184 expression += ":frontLowerEpoxideFrameHalf1_pos1";
3185 expression += TString("_") + frames->GetName();
3186 expression += "+frontLowerEpoxideFrameHalfS";
3187 expression += TString("_") + frames->GetName();
3188 expression += ":frontLowerEpoxideFrameHalf1_pos2";
3189 expression += TString("_") + frames->GetName();
3190 expression += "+frontLowerEpoxideFrameArchS";
3191 expression += TString("_") + frames->GetName();
3192 expression += ":frontLowerEpoxideFrameArch_pos";
3193 expression += TString("_") + frames->GetName();
3194
3195 frontLowerEpoxideFrameS->MakeNode(expression);
3196 frontLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3197 }
3198
3199 TGeoVolume* frontLowerEpoxideFrameV =
3200 new TGeoVolume(TString("frontLowerEpoxideFrameV") += TString("_") + frames->GetName(), frontLowerEpoxideFrameS);
3201
3202 // volume medium
3203 TGeoMedium* frontLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3204 if (frontLowerEpoxideFrameV_medium) {
3205 frontLowerEpoxideFrameV->SetMedium(frontLowerEpoxideFrameV_medium);
3206 } else
3207 Fatal("Main", "Invalid medium for frontLowerEpoxideFrameV!");
3208
3209 // volume visual property (transparency)
3210 frontLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3211 frontLowerEpoxideFrameV->SetTransparency(0);
3212
3213 TGeoCombiTrans* frontLowerEpoxideFrame_transf[1];
3214
3215 frontLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3216 frontLowerEpoxideFrame_transf[0]->SetDx(0.0);
3217 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5));
3218 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5));
3219
3220 frames->AddNode(frontLowerEpoxideFrameV, 0, frontLowerEpoxideFrame_transf[0]);
3221 //--------------------------------------------------------------------------
3222
3223 // back side epoxide frame --------------------------------------------------
3224 Double_t backSideEpoxideFramePart_XSize = 9.2; // cm
3225 Double_t backSideEpoxideFramePart_YSize = 52.6 - 6.0; // cm
3226 Double_t backSideEpoxideFramePart_ZSize = 1.5; // cm
3227
3228 Double_t backSideEpoxideFrame_XDistBetweenParts = 161.42; // cm
3229
3230 TGeoShape* backSideEpoxideFramePartS = new TGeoBBox(
3231 TString("backSideEpoxideFramePartS") += TString("_") + frames->GetName(), backSideEpoxideFramePart_XSize * 0.5,
3232 backSideEpoxideFramePart_YSize * 0.5, backSideEpoxideFramePart_ZSize * 0.5);
3233
3234 TGeoTranslation* backSideEpoxideFramePart_pos1 = new TGeoTranslation();
3235 backSideEpoxideFramePart_pos1->SetName(TString("backSideEpoxideFramePart_pos1") + TString("_") + frames->GetName());
3236 backSideEpoxideFramePart_pos1->SetDx(
3237 +(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3238 backSideEpoxideFramePart_pos1->SetDy(0.0);
3239 backSideEpoxideFramePart_pos1->SetDz(0.0);
3240 backSideEpoxideFramePart_pos1->RegisterYourself();
3241
3242 TGeoTranslation* backSideEpoxideFramePart_pos2 = new TGeoTranslation();
3243 backSideEpoxideFramePart_pos2->SetName(TString("backSideEpoxideFramePart_pos2") + TString("_") + frames->GetName());
3244 backSideEpoxideFramePart_pos2->SetDx(
3245 -(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3246 backSideEpoxideFramePart_pos2->SetDy(0.0);
3247 backSideEpoxideFramePart_pos2->SetDz(0.0);
3248 backSideEpoxideFramePart_pos2->RegisterYourself();
3249
3250 TGeoCompositeShape* backSideEpoxideFrameS = new TGeoCompositeShape();
3251 backSideEpoxideFrameS->SetName(TString("backSideEpoxideFrameS") += TString("_") + frames->GetName());
3252 {
3253 TString expression = "backSideEpoxideFramePartS";
3254 expression += TString("_") + frames->GetName();
3255 expression += ":backSideEpoxideFramePart_pos1";
3256 expression += TString("_") + frames->GetName();
3257 expression += "+backSideEpoxideFramePartS";
3258 expression += TString("_") + frames->GetName();
3259 expression += ":backSideEpoxideFramePart_pos2";
3260 expression += TString("_") + frames->GetName();
3261
3262 backSideEpoxideFrameS->MakeNode(expression);
3263 backSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3264 }
3265
3266 TGeoVolume* backSideEpoxideFrameV =
3267 new TGeoVolume(TString("backSideEpoxideFrameV") += TString("_") + frames->GetName(), backSideEpoxideFrameS);
3268
3269 // volume medium
3270 TGeoMedium* backSideEpoxideFrameV_medium = pMedEpoxideCompound;
3271 if (backSideEpoxideFrameV_medium) {
3272 backSideEpoxideFrameV->SetMedium(backSideEpoxideFrameV_medium);
3273 } else
3274 Fatal("Main", "Invalid medium for backSideEpoxideFrameV!");
3275
3276 // volume visual property (transparency)
3277 backSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3278 backSideEpoxideFrameV->SetTransparency(0);
3279
3280 TGeoCombiTrans* backSideEpoxideFrame_transf[1];
3281
3282 backSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
3283 backSideEpoxideFrame_transf[0]->SetDx(0.0);
3284 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x39) * 0.5)
3285 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3286 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5));
3287
3288 frames->AddNode(backSideEpoxideFrameV, 0, backSideEpoxideFrame_transf[0]);
3289 //--------------------------------------------------------------------------
3290
3291 // back upper epoxide frame -------------------------------------------------
3292 Double_t backUpperEpoxideFrame_XSize = 161.42; // cm
3293 Double_t backUpperEpoxideFrame_YSize = 6.2; // cm
3294 Double_t backUpperEpoxideFrame_ZSize = 1.6; // cm
3295
3296 TGeoShape* backUpperEpoxideFrameS = new TGeoBBox(
3297 TString("backUpperEpoxideFrameS") += TString("_") + frames->GetName(), backUpperEpoxideFrame_XSize * 0.5,
3298 backUpperEpoxideFrame_YSize * 0.5, backUpperEpoxideFrame_ZSize * 0.5);
3299
3300 TGeoVolume* backUpperEpoxideFrameV =
3301 new TGeoVolume(TString("backUpperEpoxideFrameV") += TString("_") + frames->GetName(), backUpperEpoxideFrameS);
3302
3303 // volume medium
3304 TGeoMedium* backUpperEpoxideFrameV_medium = pMedEpoxideCompound;
3305 if (backUpperEpoxideFrameV_medium) {
3306 backUpperEpoxideFrameV->SetMedium(backUpperEpoxideFrameV_medium);
3307 } else
3308 Fatal("Main", "Invalid medium for backUpperEpoxideFrameV!");
3309
3310 // volume visual property (transparency)
3311 backUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3312 backUpperEpoxideFrameV->SetTransparency(0);
3313
3314 TGeoCombiTrans* backUpperEpoxideFrame_transf[1];
3315
3316 backUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
3317 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
3318 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x39 * 0.5)
3319 - 0.6 /*shift*/);
3320 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5));
3321
3322 frames->AddNode(backUpperEpoxideFrameV, 0, backUpperEpoxideFrame_transf[0]);
3323 //--------------------------------------------------------------------------
3324
3325 // front side epoxide frame -------------------------------------------------
3326 Double_t frontSideEpoxideFramePart_XSize = 3.5; // cm
3327 Double_t frontSideEpoxideFramePart_YSize = 49.9 - 6.0; // cm
3328 Double_t frontSideEpoxideFramePart_ZSize = 1.6; // cm
3329
3330 Double_t frontSideEpoxideFrame_XDistBetweenParts = 161.7; // cm
3331
3332 TGeoShape* frontSideEpoxideFramePartS =
3333 new TGeoBBox(TString("frontSideEpoxideFramePartS") += TString("_") + frames->GetName(),
3334 frontSideEpoxideFramePart_XSize * 0.5, frontSideEpoxideFramePart_YSize * 0.5,
3335 frontSideEpoxideFramePart_ZSize * 0.5);
3336
3337 TGeoTranslation* frontSideEpoxideFramePart_pos1 = new TGeoTranslation();
3338 frontSideEpoxideFramePart_pos1->SetName(TString("frontSideEpoxideFramePart_pos1") + TString("_")
3339 + frames->GetName());
3340 frontSideEpoxideFramePart_pos1->SetDx(
3341 +(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3342 frontSideEpoxideFramePart_pos1->SetDy(0.0);
3343 frontSideEpoxideFramePart_pos1->SetDz(0.0);
3344 frontSideEpoxideFramePart_pos1->RegisterYourself();
3345
3346 TGeoTranslation* frontSideEpoxideFramePart_pos2 = new TGeoTranslation();
3347 frontSideEpoxideFramePart_pos2->SetName(TString("frontSideEpoxideFramePart_pos2") + TString("_")
3348 + frames->GetName());
3349 frontSideEpoxideFramePart_pos2->SetDx(
3350 -(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3351 frontSideEpoxideFramePart_pos2->SetDy(0.0);
3352 frontSideEpoxideFramePart_pos2->SetDz(0.0);
3353 frontSideEpoxideFramePart_pos2->RegisterYourself();
3354
3355 TGeoCompositeShape* frontSideEpoxideFrameS = new TGeoCompositeShape();
3356 frontSideEpoxideFrameS->SetName(TString("frontSideEpoxideFrameS") += TString("_") + frames->GetName());
3357 {
3358 TString expression = "frontSideEpoxideFramePartS";
3359 expression += TString("_") + frames->GetName();
3360 expression += ":frontSideEpoxideFramePart_pos1";
3361 expression += TString("_") + frames->GetName();
3362 expression += "+frontSideEpoxideFramePartS";
3363 expression += TString("_") + frames->GetName();
3364 expression += ":frontSideEpoxideFramePart_pos2";
3365 expression += TString("_") + frames->GetName();
3366
3367 frontSideEpoxideFrameS->MakeNode(expression);
3368 frontSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3369 }
3370
3371 TGeoVolume* frontSideEpoxideFrameV =
3372 new TGeoVolume(TString("frontSideEpoxideFrameV") += TString("_") + frames->GetName(), frontSideEpoxideFrameS);
3373
3374 // volume medium
3375 TGeoMedium* frontSideEpoxideFrameV_medium = pMedEpoxideCompound;
3376 if (frontSideEpoxideFrameV_medium) {
3377 frontSideEpoxideFrameV->SetMedium(frontSideEpoxideFrameV_medium);
3378 } else
3379 Fatal("Main", "Invalid medium for frontSideEpoxideFrameV!");
3380
3381 // volume visual property (transparency)
3382 frontSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3383 frontSideEpoxideFrameV->SetTransparency(0);
3384
3385 TGeoCombiTrans* frontSideEpoxideFrame_transf[1];
3386
3387 frontSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
3388 frontSideEpoxideFrame_transf[0]->SetDx(0.0);
3389 frontSideEpoxideFrame_transf[0]->SetDy(+((frontSideEpoxideFramePart_YSize - YModuleSize_Station163x39) * 0.5)
3390 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3391 frontSideEpoxideFrame_transf[0]->SetDz(-(frontSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5));
3392
3393 frames->AddNode(frontSideEpoxideFrameV, 0, frontSideEpoxideFrame_transf[0]);
3394 //--------------------------------------------------------------------------
3395
3396 // front upper epoxide frame -------------------------------------------------
3397 Double_t frontUpperEpoxideFrame_XSize = 161.7; // cm
3398 Double_t frontUpperEpoxideFrame_YSize = 3.5; // cm
3399 Double_t frontUpperEpoxideFrame_ZSize = 1.6; // cm
3400
3401 TGeoShape* frontUpperEpoxideFrameS = new TGeoBBox(
3402 TString("frontUpperEpoxideFrameS") += TString("_") + frames->GetName(), frontUpperEpoxideFrame_XSize * 0.5,
3403 frontUpperEpoxideFrame_YSize * 0.5, frontUpperEpoxideFrame_ZSize * 0.5);
3404
3405 TGeoVolume* frontUpperEpoxideFrameV =
3406 new TGeoVolume(TString("frontUpperEpoxideFrameV") += TString("_") + frames->GetName(), frontUpperEpoxideFrameS);
3407
3408 // volume medium
3409 TGeoMedium* frontUpperEpoxideFrameV_medium = pMedEpoxideCompound;
3410 if (frontUpperEpoxideFrameV_medium) {
3411 frontUpperEpoxideFrameV->SetMedium(frontUpperEpoxideFrameV_medium);
3412 } else
3413 Fatal("Main", "Invalid medium for frontUpperEpoxideFrameV!");
3414
3415 // volume visual property (transparency)
3416 frontUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3417 frontUpperEpoxideFrameV->SetTransparency(0);
3418
3419 TGeoCombiTrans* frontUpperEpoxideFrame_transf[1];
3420
3421 frontUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
3422 frontUpperEpoxideFrame_transf[0]->SetDx(0.0);
3423 frontUpperEpoxideFrame_transf[0]->SetDy(+(frontUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x39 * 0.5)
3424 - 0.6 /*shift*/);
3425 frontUpperEpoxideFrame_transf[0]->SetDz(-(frontUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5));
3426
3427 frames->AddNode(frontUpperEpoxideFrameV, 0, frontUpperEpoxideFrame_transf[0]);
3428 //--------------------------------------------------------------------------
3429
3430 // alum. cable support ------------------------------------------------------
3431 Double_t alumCableSupportPart_XSize = 3.0; // cm
3432 Double_t alumCableSupportPart_YSize = 41.3 - 6.0; // cm
3433 Double_t alumCableSupportPart_ZSize = 0.2; // cm
3434
3435 Double_t alumCableSupport_XDistBetweenParts = 164.82; // cm
3436
3437 TGeoShape* alumCableSupportPartS = new TGeoBBox(
3438 TString("alumCableSupportPartS") += TString("_") + frames->GetName(), alumCableSupportPart_XSize * 0.5,
3439 alumCableSupportPart_YSize * 0.5, alumCableSupportPart_ZSize * 0.5);
3440
3441 TGeoTranslation* alumCableSupportPart_pos1 = new TGeoTranslation();
3442 alumCableSupportPart_pos1->SetName(TString("alumCableSupportPart_pos1") + TString("_") + frames->GetName());
3443 alumCableSupportPart_pos1->SetDx(+(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
3444 alumCableSupportPart_pos1->SetDy(0.0);
3445 alumCableSupportPart_pos1->SetDz(0.0);
3446 alumCableSupportPart_pos1->RegisterYourself();
3447
3448 TGeoTranslation* alumCableSupportPart_pos2 = new TGeoTranslation();
3449 alumCableSupportPart_pos2->SetName(TString("alumCableSupportPart_pos2") + TString("_") + frames->GetName());
3450 alumCableSupportPart_pos2->SetDx(-(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
3451 alumCableSupportPart_pos2->SetDy(0.0);
3452 alumCableSupportPart_pos2->SetDz(0.0);
3453 alumCableSupportPart_pos2->RegisterYourself();
3454
3455 TGeoCompositeShape* alumCableSupportS = new TGeoCompositeShape();
3456 alumCableSupportS->SetName(TString("alumCableSupportS") += TString("_") + frames->GetName());
3457 {
3458 TString expression = "alumCableSupportPartS";
3459 expression += TString("_") + frames->GetName();
3460 expression += ":alumCableSupportPart_pos1";
3461 expression += TString("_") + frames->GetName();
3462 expression += "+alumCableSupportPartS";
3463 expression += TString("_") + frames->GetName();
3464 expression += ":alumCableSupportPart_pos2";
3465 expression += TString("_") + frames->GetName();
3466
3467 alumCableSupportS->MakeNode(expression);
3468 alumCableSupportS->ComputeBBox(); // need to compute a bounding box
3469 }
3470
3471 TGeoVolume* alumCableSupportV =
3472 new TGeoVolume(TString("alumCableSupportV") += TString("_") + frames->GetName(), alumCableSupportS);
3473
3474 // volume medium
3475 TGeoMedium* alumCableSupportV_medium = pMedAluminium;
3476 if (alumCableSupportV_medium) {
3477 alumCableSupportV->SetMedium(alumCableSupportV_medium);
3478 } else
3479 Fatal("Main", "Invalid medium for alumCableSupportV!");
3480
3481 // volume visual property (transparency)
3482 alumCableSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
3483 alumCableSupportV->SetTransparency(0);
3484
3485 TGeoCombiTrans* alumCableSupport_transf[1];
3486
3487 alumCableSupport_transf[0] = new TGeoCombiTrans();
3488 alumCableSupport_transf[0]->SetDx(0.0);
3489 alumCableSupport_transf[0]->SetDy(+((alumCableSupportPart_YSize - YModuleSize_Station163x39) * 0.5)
3490 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3491 alumCableSupport_transf[0]->SetDz(-(alumCableSupportPart_ZSize * 0.5 + ZModuleSize_Station163x39 * 0.5
3492 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
3493
3494 frames->AddNode(alumCableSupportV, 0, alumCableSupport_transf[0]);
3495 //--------------------------------------------------------------------------
3496
3497 // amplifier upper block ----------------------------------------------------
3498 Double_t amplifierUpperBlockPart1_XSize = 161.44; // cm
3499 Double_t amplifierUpperBlockPart1_YSize = 0.6; // cm
3500 Double_t amplifierUpperBlockPart1_ZSize = 8.41; // cm
3501
3502 Double_t amplifierUpperBlockPart2_XSize = 161.16; // cm
3503 Double_t amplifierUpperBlockPart2_YSize = 0.6; // cm
3504 Double_t amplifierUpperBlockPart2_ZSize = 8.41; // cm
3505
3506 TGeoShape* amplifierUpperBlockPart1S = new TGeoBBox(
3507 TString("amplifierUpperBlockPart1S") += TString("_") + frames->GetName(), amplifierUpperBlockPart1_XSize * 0.5,
3508 amplifierUpperBlockPart1_YSize * 0.5, amplifierUpperBlockPart1_ZSize * 0.5);
3509 TGeoShape* amplifierUpperBlockPart2S = new TGeoBBox(
3510 TString("amplifierUpperBlockPart2S") += TString("_") + frames->GetName(), amplifierUpperBlockPart2_XSize * 0.5,
3511 amplifierUpperBlockPart2_YSize * 0.5, amplifierUpperBlockPart2_ZSize * 0.5);
3512
3513 TGeoTranslation* amplifierUpperBlockPart1_pos = new TGeoTranslation();
3514 amplifierUpperBlockPart1_pos->SetName(TString("amplifierUpperBlockPart1_pos") + TString("_") + frames->GetName());
3515 amplifierUpperBlockPart1_pos->SetDx(0.0);
3516 amplifierUpperBlockPart1_pos->SetDy(0.0);
3517 amplifierUpperBlockPart1_pos->SetDz(0.0);
3518 amplifierUpperBlockPart1_pos->RegisterYourself();
3519
3520 TGeoTranslation* amplifierUpperBlockPart2_pos = new TGeoTranslation();
3521 amplifierUpperBlockPart2_pos->SetName(TString("amplifierUpperBlockPart2_pos") + TString("_") + frames->GetName());
3522 amplifierUpperBlockPart2_pos->SetDx(-0.76);
3523 amplifierUpperBlockPart2_pos->SetDy(
3524 -(amplifierUpperBlockPart1_YSize * 0.5 + amplifierUpperBlockPart2_YSize * 0.5 + 0.33));
3525 amplifierUpperBlockPart2_pos->SetDz(0.0);
3526 amplifierUpperBlockPart2_pos->RegisterYourself();
3527
3528 TGeoCompositeShape* amplifierUpperBlockS = new TGeoCompositeShape();
3529 amplifierUpperBlockS->SetName(TString("amplifierUpperBlockS") += TString("_") + frames->GetName());
3530 {
3531 TString expression = "amplifierUpperBlockPart1S";
3532 expression += TString("_") + frames->GetName();
3533 expression += ":amplifierUpperBlockPart1_pos";
3534 expression += TString("_") + frames->GetName();
3535 expression += "+amplifierUpperBlockPart1S";
3536 expression += TString("_") + frames->GetName();
3537 expression += ":amplifierUpperBlockPart2_pos";
3538 expression += TString("_") + frames->GetName();
3539
3540 amplifierUpperBlockS->MakeNode(expression);
3541 amplifierUpperBlockS->ComputeBBox(); // need to compute a bounding box
3542 }
3543
3544 TGeoVolume* amplifierUpperBlockV =
3545 new TGeoVolume(TString("amplifierUpperBlockV") += TString("_") + frames->GetName(), amplifierUpperBlockS);
3546
3547 // volume medium
3548 TGeoMedium* amplifierUpperBlockV_medium = pMedFiberGlass;
3549 if (amplifierUpperBlockV_medium) {
3550 amplifierUpperBlockV->SetMedium(amplifierUpperBlockV_medium);
3551 } else
3552 Fatal("Main", "Invalid medium for amplifierUpperBlockV!");
3553
3554 // volume visual property (transparency)
3555 amplifierUpperBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
3556 amplifierUpperBlockV->SetTransparency(0);
3557
3558 TGeoCombiTrans* amplifierUpperBlock_transf[1];
3559
3560 amplifierUpperBlock_transf[0] = new TGeoCombiTrans();
3561 amplifierUpperBlock_transf[0]->SetDx(0.0);
3562 amplifierUpperBlock_transf[0]->SetDy(+(YModuleSize_Station163x39 * 0.5 + backUpperEpoxideFrame_YSize)
3563 - 1.0 /*shift*/);
3564 amplifierUpperBlock_transf[0]->SetDz(-(amplifierUpperBlockPart1_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5);
3565
3566 frames->AddNode(amplifierUpperBlockV, 0, amplifierUpperBlock_transf[0]);
3567 //--------------------------------------------------------------------------
3568
3569 // amplifier side block -----------------------------------------------------
3570 Double_t amplifierSideBlockPartBig_XSize = 0.6; // cm
3571 Double_t amplifierSideBlockPartBig_YSize = 33.9; // cm
3572 Double_t amplifierSideBlockPartBig_ZSize = 8.41; // cm
3573
3574 Double_t amplifierSideBlockPartSmall_XSize = 0.6; // cm
3575 Double_t amplifierSideBlockPartSmall_YSize = 27.05; // cm
3576 Double_t amplifierSideBlockPartSmall_ZSize = 8.41; // cm
3577
3578 TGeoShape* amplifierSideBlockPartBigS =
3579 new TGeoBBox(TString("amplifierSideBlockPartBigS") += TString("_") + frames->GetName(),
3580 amplifierSideBlockPartBig_XSize * 0.5, amplifierSideBlockPartBig_YSize * 0.5,
3581 amplifierSideBlockPartBig_ZSize * 0.5);
3582 TGeoShape* amplifierSideBlockPartSmallS =
3583 new TGeoBBox(TString("amplifierSideBlockPartSmallS") += TString("_") + frames->GetName(),
3584 amplifierSideBlockPartSmall_XSize * 0.5, amplifierSideBlockPartSmall_YSize * 0.5,
3585 amplifierSideBlockPartSmall_ZSize * 0.5);
3586
3587 TGeoTranslation* amplifierSideBlockPartBig_pos = new TGeoTranslation();
3588 amplifierSideBlockPartBig_pos->SetName(TString("amplifierSideBlockPartBig_pos") + TString("_") + frames->GetName());
3589 amplifierSideBlockPartBig_pos->SetDx(0.0);
3590 amplifierSideBlockPartBig_pos->SetDy(0.0);
3591 amplifierSideBlockPartBig_pos->SetDz(0.0);
3592 amplifierSideBlockPartBig_pos->RegisterYourself();
3593
3594 TGeoTranslation* amplifierSideBlockPartSmall_pos = new TGeoTranslation();
3595 amplifierSideBlockPartSmall_pos->SetName(TString("amplifierSideBlockPartSmall_pos") + TString("_")
3596 + frames->GetName());
3597 amplifierSideBlockPartSmall_pos->SetDx(
3598 +(amplifierSideBlockPartBig_XSize * 0.5 + amplifierSideBlockPartSmall_XSize * 0.5 + 1.72));
3599 amplifierSideBlockPartSmall_pos->SetDy(+0.05);
3600 amplifierSideBlockPartSmall_pos->SetDz(0.0);
3601 amplifierSideBlockPartSmall_pos->RegisterYourself();
3602
3603 TGeoCompositeShape* amplifierSideBlockS = new TGeoCompositeShape();
3604 amplifierSideBlockS->SetName(TString("amplifierSideBlockS") += TString("_") + frames->GetName());
3605 {
3606 TString expression = "amplifierSideBlockPartBigS";
3607 expression += TString("_") + frames->GetName();
3608 expression += ":amplifierSideBlockPartBig_pos";
3609 expression += TString("_") + frames->GetName();
3610 expression += "+amplifierSideBlockPartSmallS";
3611 expression += TString("_") + frames->GetName();
3612 expression += ":amplifierSideBlockPartSmall_pos";
3613 expression += TString("_") + frames->GetName();
3614
3615 amplifierSideBlockS->MakeNode(expression);
3616 amplifierSideBlockS->ComputeBBox(); // need to compute a bounding box
3617 }
3618
3619 TGeoVolume* amplifierSideBlockV =
3620 new TGeoVolume(TString("amplifierSideBlockV") += TString("_") + frames->GetName(), amplifierSideBlockS);
3621
3622 // volume medium
3623 TGeoMedium* amplifierSideBlockV_medium = pMedFiberGlass;
3624 if (amplifierSideBlockV_medium) {
3625 amplifierSideBlockV->SetMedium(amplifierSideBlockV_medium);
3626 } else
3627 Fatal("Main", "Invalid medium for amplifierSideBlockV!");
3628
3629 // volume visual property (transparency)
3630 amplifierSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
3631 amplifierSideBlockV->SetTransparency(0);
3632
3633 TGeoCombiTrans* amplifierSideBlock_transf[2];
3634
3635 amplifierSideBlock_transf[0] = new TGeoCombiTrans();
3636 amplifierSideBlock_transf[0]->SetDx(+86.47 /*shift*/);
3637 amplifierSideBlock_transf[0]->SetDy(-5.5 + 6.0 * 0.5);
3638 amplifierSideBlock_transf[0]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5
3639 - 0.4 /*shift*/);
3640
3641 amplifierSideBlock_transf[1] = new TGeoCombiTrans();
3642 amplifierSideBlock_transf[1]->RotateY(180.0);
3643 amplifierSideBlock_transf[1]->SetDx(-86.47 /*shift*/);
3644 amplifierSideBlock_transf[1]->SetDy(-5.5 + 6.0 * 0.5);
3645 amplifierSideBlock_transf[1]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5
3646 - 0.4 /*shift*/);
3647
3648 frames->AddNode(amplifierSideBlockV, 0, amplifierSideBlock_transf[0]);
3649 frames->AddNode(amplifierSideBlockV, 1, amplifierSideBlock_transf[1]);
3650 //--------------------------------------------------------------------------
3651
3652 // upper PCB (Printed Circuit Board) ----------------------------------------
3653 Double_t upperPcb_XSize = 177.22; // cm
3654 Double_t upperPcb_YSize = 0.3; // cm
3655 Double_t upperPcb_ZSize = 4.0; // cm
3656
3657 TGeoShape* upperPcbS = new TGeoBBox(TString("upperPcbS") += TString("_") + frames->GetName(), upperPcb_XSize * 0.5,
3658 upperPcb_YSize * 0.5, upperPcb_ZSize * 0.5);
3659
3660 TGeoVolume* upperPcbV = new TGeoVolume(TString("upperPcbV") += TString("_") + frames->GetName(), upperPcbS);
3661
3662 // volume medium
3663 TGeoMedium* upperPcbV_medium = pMedFiberGlass;
3664 if (upperPcbV_medium) {
3665 upperPcbV->SetMedium(upperPcbV_medium);
3666 } else
3667 Fatal("Main", "Invalid medium for upperPcbV!");
3668
3669 // volume visual property (transparency)
3670 upperPcbV->SetLineColor(TColor::GetColor("#88ff88"));
3671 upperPcbV->SetTransparency(0);
3672
3673 TGeoCombiTrans* upperPcb_transf[1];
3674
3675 upperPcb_transf[0] = new TGeoCombiTrans();
3676 upperPcb_transf[0]->SetDx(+0.1 /*shift*/);
3677 upperPcb_transf[0]->SetDy(+(upperPcb_YSize * 0.5 + 23.5 /*shift*/) - 6.0 * 0.5);
3678 upperPcb_transf[0]->SetDz(-(upperPcb_ZSize * 0.5) + ZModuleSize_Station163x39 * 0.5 - ZModuleSize_Station163x39
3679 - frontSideEpoxideFramePart_ZSize);
3680
3681 frames->AddNode(upperPcbV, 0, upperPcb_transf[0]);
3682 //--------------------------------------------------------------------------
3683
3684 // side PCB -----------------------------------------------------------------
3685 Double_t sidePcbPart_XSize = 0.3; // cm
3686 Double_t sidePcbPart_YSize = 35.05; // cm
3687 Double_t sidePcbPart_ZSize = 4.0; // cm
3688
3689 TGeoShape* sidePcbPartS = new TGeoBBox(TString("sidePcbPartS") += TString("_") + frames->GetName(),
3690 sidePcbPart_XSize * 0.5, sidePcbPart_YSize * 0.5, sidePcbPart_ZSize * 0.5);
3691
3692 TGeoTranslation* sidePcbPart_pos1 = new TGeoTranslation();
3693 sidePcbPart_pos1->SetName(TString("sidePcbPart_pos1") + TString("_") + frames->GetName());
3694 sidePcbPart_pos1->SetDx(0.0);
3695 sidePcbPart_pos1->SetDy(0.0);
3696 sidePcbPart_pos1->SetDz(0.0);
3697 sidePcbPart_pos1->RegisterYourself();
3698
3699 TGeoTranslation* sidePcbPart_pos2 = new TGeoTranslation();
3700 sidePcbPart_pos2->SetName(TString("sidePcbPart_pos2") + TString("_") + frames->GetName());
3701 sidePcbPart_pos2->SetDx(+(sidePcbPart_XSize + 6.1 /*shift*/));
3702 sidePcbPart_pos2->SetDy(0.0);
3703 sidePcbPart_pos2->SetDz(0.0);
3704 sidePcbPart_pos2->RegisterYourself();
3705
3706 TGeoCompositeShape* sidePcbS = new TGeoCompositeShape();
3707 sidePcbS->SetName(TString("sidePcbS") += TString("_") + frames->GetName());
3708 {
3709 TString expression = "sidePcbPartS";
3710 expression += TString("_") + frames->GetName();
3711 expression += ":sidePcbPart_pos1";
3712 expression += TString("_") + frames->GetName();
3713 expression += "+sidePcbPartS";
3714 expression += TString("_") + frames->GetName();
3715 expression += ":sidePcbPart_pos2";
3716 expression += TString("_") + frames->GetName();
3717
3718 sidePcbS->MakeNode(expression);
3719 sidePcbS->ComputeBBox(); // need to compute a bounding box
3720 }
3721
3722 TGeoVolume* sidePcbV = new TGeoVolume(TString("sidePcbV") += TString("_") + frames->GetName(), sidePcbS);
3723
3724 // volume medium
3725 TGeoMedium* sidePcbV_medium = pMedFiberGlass;
3726 if (sidePcbV_medium) {
3727 sidePcbV->SetMedium(sidePcbV_medium);
3728 } else
3729 Fatal("Main", "Invalid medium for sidePcbV!");
3730
3731 // volume visual property (transparency)
3732 sidePcbV->SetLineColor(TColor::GetColor("#88ff88"));
3733 sidePcbV->SetTransparency(0);
3734
3735 TGeoCombiTrans* sidePcb_transf[2];
3736
3737 sidePcb_transf[0] = new TGeoCombiTrans();
3738 sidePcb_transf[0]->SetDx(+(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
3739 sidePcb_transf[0]->SetDy(-6.8 /*shift*/ + 6.0 * 0.5);
3740 sidePcb_transf[0]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x39 * 0.5
3741 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
3742
3743 sidePcb_transf[1] = new TGeoCombiTrans();
3744 sidePcb_transf[1]->RotateY(180.0);
3745 sidePcb_transf[1]->SetDx(-(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
3746 sidePcb_transf[1]->SetDy(-6.8 /*shift*/ + 6.0 * 0.5);
3747 sidePcb_transf[1]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x39 * 0.5
3748 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
3749
3750 frames->AddNode(sidePcbV, 0, sidePcb_transf[0]);
3751 frames->AddNode(sidePcbV, 1, sidePcb_transf[1]);
3752 //--------------------------------------------------------------------------
3753
3754 // alum. side support -------------------------------------------------------
3755 Double_t alumSideSupport_XSize = 4.8; // cm
3756 Double_t alumSideSupport_YSize = 52.6 - 6.0; // cm
3757 Double_t alumSideSupport_ZSize = 0.4; // cm
3758
3759 TGeoShape* alumSideSupportS =
3760 new TGeoBBox(TString("alumSideSupportS") += TString("_") + frames->GetName(), alumSideSupport_XSize * 0.5,
3761 alumSideSupport_YSize * 0.5, alumSideSupport_ZSize * 0.5);
3762
3763 TGeoVolume* alumSideSupportV =
3764 new TGeoVolume(TString("alumSideSupportV") += TString("_") + frames->GetName(), alumSideSupportS);
3765
3766 // volume medium
3767 TGeoMedium* alumSideSupportV_medium = pMedAluminium;
3768 if (alumSideSupportV_medium) {
3769 alumSideSupportV->SetMedium(alumSideSupportV_medium);
3770 } else
3771 Fatal("Main", "Invalid medium for alumSideSupportV!");
3772
3773 // volume visual property (transparency)
3774 alumSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
3775 alumSideSupportV->SetTransparency(0);
3776
3777 TGeoCombiTrans* alumSideSupport_transf[2];
3778
3779 alumSideSupport_transf[0] = new TGeoCombiTrans();
3780 alumSideSupport_transf[0]->SetDx(+(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
3781 alumSideSupport_transf[0]->SetDy(+1.8);
3782 alumSideSupport_transf[0]->SetDz(+(ZModuleSize_Station163x39 * 0.5 - alumSideSupport_ZSize * 0.5));
3783
3784 alumSideSupport_transf[1] = new TGeoCombiTrans();
3785 alumSideSupport_transf[1]->SetDx(-(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
3786 alumSideSupport_transf[1]->SetDy(+1.8 /*shift*/);
3787 alumSideSupport_transf[1]->SetDz(+(ZModuleSize_Station163x39 * 0.5 - alumSideSupport_ZSize * 0.5));
3788
3789 frames->AddNode(alumSideSupportV, 0, alumSideSupport_transf[0]);
3790 frames->AddNode(alumSideSupportV, 1, alumSideSupport_transf[1]);
3791 //--------------------------------------------------------------------------
3792
3793 // bosch shape --------------------------------------------------------------
3794 Double_t boschShape_XSize = 2.25; // cm
3795 Double_t boschShape_YSize = 52.6 - 6.0; // cm
3796 Double_t boschShape_ZSize = 2.25; // cm
3797
3798 TGeoShape* boschShapeS = new TGeoBBox(TString("boschShapeS") += TString("_") + frames->GetName(),
3799 boschShape_XSize * 0.5, boschShape_YSize * 0.5, boschShape_ZSize * 0.5);
3800
3801 TGeoVolume* boschShapeV = new TGeoVolume(TString("boschShapeV") += TString("_") + frames->GetName(), boschShapeS);
3802
3803 // volume medium
3804 TGeoMedium* boschShapeV_medium = pMedAluminium;
3805 if (boschShapeV_medium) {
3806 boschShapeV->SetMedium(boschShapeV_medium);
3807 } else
3808 Fatal("Main", "Invalid medium for boschShapeV!");
3809
3810 // volume visual property (transparency)
3811 boschShapeV->SetLineColor(TColor::GetColor("#ffcccc"));
3812 boschShapeV->SetTransparency(0);
3813
3814 TGeoCombiTrans* boschShape_transf[2];
3815
3816 boschShape_transf[0] = new TGeoCombiTrans();
3817 boschShape_transf[0]->SetDx(+(boschShape_XSize * 0.5 + 90.86 /*shift*/));
3818 boschShape_transf[0]->SetDy(+1.8 /*shift*/);
3819 boschShape_transf[0]->SetDz(+(ZModuleSize_Station163x39 * 0.5 + boschShape_ZSize * 0.5));
3820
3821 boschShape_transf[1] = new TGeoCombiTrans();
3822 boschShape_transf[1]->SetDx(-(boschShape_XSize * 0.5 + 90.86 /*shift*/));
3823 boschShape_transf[1]->SetDy(+1.8 /*shift*/);
3824 boschShape_transf[1]->SetDz(+(ZModuleSize_Station163x39 * 0.5 + boschShape_ZSize * 0.5));
3825
3826 // frames->AddNode(boschShapeV, 0, boschShape_transf[0]);
3827 // frames->AddNode(boschShapeV, 1, boschShape_transf[1]);
3828 //--------------------------------------------------------------------------
3829
3830 // polyacetal shape ---------------------------------------------------------
3831 Double_t insidePolyacetalShapeUpper_XSize = 11.46; // cm
3832 Double_t insidePolyacetalShapeUpper_YSize = 52.6; // cm
3833 Double_t insidePolyacetalShapeUpper_ZSize = 3.0; // cm
3834 Double_t insidePolyacetalShapeUpper_XDistBetweenParts = 186.22; // cm
3835
3836 Double_t outsidePolyacetalShapeUpper_XSize = 23.5; // cm
3837 Double_t outsidePolyacetalShapeUpper_YSize = 5.405; // cm
3838 Double_t outsidePolyacetalShapeUpper_ZSize = 3.0; // cm
3839 Double_t outsidePolyacetalShapeUpper_XDistBetweenParts = 209.14; // cm
3840
3841 Double_t insidePolyacetalShapeLower_XSize = 8.4; // cm
3842 Double_t insidePolyacetalShapeLower_YSize = 52.6 - 6.0; // cm
3843 Double_t insidePolyacetalShapeLower_ZSize = 3.0; // cm
3844 Double_t insidePolyacetalShapeLower_XDistBetweenParts = 186.22; // cm
3845
3846 Double_t outsidePolyacetalShapeLower_XSize = 26.7; // cm
3847 Double_t outsidePolyacetalShapeLower_YSize = 24.4; // cm
3848 Double_t outsidePolyacetalShapeLower_ZSize = 3.0; // cm
3849 Double_t outsidePolyacetalShapeLower_XDistBetweenParts = 203.02; // cm
3850
3851 TGeoShape* insidePolyacetalShapeUpperS =
3852 new TGeoBBox(TString("insidePolyacetalShapeUpperS") += TString("_") + frames->GetName(),
3853 insidePolyacetalShapeUpper_XSize * 0.5, insidePolyacetalShapeUpper_YSize * 0.5,
3854 insidePolyacetalShapeUpper_ZSize * 0.5);
3855 TGeoShape* outsidePolyacetalShapeUpperS =
3856 new TGeoBBox(TString("outsidePolyacetalShapeUpperS") += TString("_") + frames->GetName(),
3857 outsidePolyacetalShapeUpper_XSize * 0.5, outsidePolyacetalShapeUpper_YSize * 0.5,
3858 outsidePolyacetalShapeUpper_ZSize * 0.5);
3859 TGeoShape* insidePolyacetalShapeLowerS =
3860 new TGeoBBox(TString("insidePolyacetalShapeLowerS") += TString("_") + frames->GetName(),
3861 insidePolyacetalShapeLower_XSize * 0.5, insidePolyacetalShapeLower_YSize * 0.5,
3862 insidePolyacetalShapeLower_ZSize * 0.5);
3863 TGeoShape* outsidePolyacetalShapeLowerS =
3864 new TGeoBBox(TString("outsidePolyacetalShapeLowerS") += TString("_") + frames->GetName(),
3865 outsidePolyacetalShapeLower_XSize * 0.5, outsidePolyacetalShapeLower_YSize * 0.5,
3866 outsidePolyacetalShapeLower_ZSize * 0.5);
3867
3868 TGeoVolume* insidePolyacetalShapeUpperV = new TGeoVolume(
3869 TString("insidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), insidePolyacetalShapeUpperS);
3870 TGeoVolume* outsidePolyacetalShapeUpperV = new TGeoVolume(
3871 TString("outsidePolyacetalShapeUpperV") += TString("_") + frames->GetName(), outsidePolyacetalShapeUpperS);
3872 TGeoVolume* insidePolyacetalShapeLowerV = new TGeoVolume(
3873 TString("insidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), insidePolyacetalShapeLowerS);
3874 TGeoVolume* outsidePolyacetalShapeLowerV = new TGeoVolume(
3875 TString("outsidePolyacetalShapeLowerV") += TString("_") + frames->GetName(), outsidePolyacetalShapeLowerS);
3876
3877 // volume medium
3878 TGeoMedium* polyacetalShapeV_medium = pMedPolyacetal;
3879 if (polyacetalShapeV_medium) {
3880 insidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
3881 outsidePolyacetalShapeUpperV->SetMedium(polyacetalShapeV_medium);
3882 insidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
3883 outsidePolyacetalShapeLowerV->SetMedium(polyacetalShapeV_medium);
3884 } else
3885 Fatal("Main", "Invalid medium for insidePolyacetalShapeUpperV!");
3886
3887 // volume visual property (transparency)
3888 insidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
3889 insidePolyacetalShapeUpperV->SetTransparency(0);
3890 outsidePolyacetalShapeUpperV->SetLineColor(TColor::GetColor("#ffcccc"));
3891 outsidePolyacetalShapeUpperV->SetTransparency(0);
3892 insidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
3893 insidePolyacetalShapeLowerV->SetTransparency(0);
3894 outsidePolyacetalShapeLowerV->SetLineColor(TColor::GetColor("#ffcccc"));
3895 outsidePolyacetalShapeLowerV->SetTransparency(0);
3896
3897 TGeoCombiTrans* insidePolyacetalShapeUpper_transf[2];
3898
3899 insidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
3900 insidePolyacetalShapeUpper_transf[0]->SetDx(
3901 +(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3902 insidePolyacetalShapeUpper_transf[0]->SetDy(+1.8 /*shift*/);
3903 insidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
3904
3905 insidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
3906 insidePolyacetalShapeUpper_transf[1]->SetDx(
3907 -(insidePolyacetalShapeUpper_XSize * 0.5 + insidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3908 insidePolyacetalShapeUpper_transf[1]->SetDy(+1.8 /*shift*/);
3909 insidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
3910
3911 TGeoCombiTrans* outsidePolyacetalShapeUpper_transf[2];
3912
3913 outsidePolyacetalShapeUpper_transf[0] = new TGeoCombiTrans();
3914 outsidePolyacetalShapeUpper_transf[0]->SetDx(
3915 +(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3916 outsidePolyacetalShapeUpper_transf[0]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
3917 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
3918 outsidePolyacetalShapeUpper_transf[0]->SetDz(0.0);
3919
3920 outsidePolyacetalShapeUpper_transf[1] = new TGeoCombiTrans();
3921 outsidePolyacetalShapeUpper_transf[1]->SetDx(
3922 -(outsidePolyacetalShapeUpper_XSize * 0.5 + outsidePolyacetalShapeUpper_XDistBetweenParts * 0.5));
3923 outsidePolyacetalShapeUpper_transf[1]->SetDy(-insidePolyacetalShapeUpper_YSize * 0.5
3924 + 1.8 /*shift*/ + outsidePolyacetalShapeUpper_YSize * 0.5);
3925 outsidePolyacetalShapeUpper_transf[1]->SetDz(0.0);
3926
3927 TGeoCombiTrans* insidePolyacetalShapeLower_transf[2];
3928
3929 insidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
3930 insidePolyacetalShapeLower_transf[0]->SetDx(
3931 +(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3932 insidePolyacetalShapeLower_transf[0]->SetDy(+1.8 /*shift*/);
3933 insidePolyacetalShapeLower_transf[0]->SetDz(0.0);
3934
3935 insidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
3936 insidePolyacetalShapeLower_transf[1]->SetDx(
3937 -(insidePolyacetalShapeLower_XSize * 0.5 + insidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3938 insidePolyacetalShapeLower_transf[1]->SetDy(+1.8 /*shift*/);
3939 insidePolyacetalShapeLower_transf[1]->SetDz(0.0);
3940
3941 TGeoCombiTrans* outsidePolyacetalShapeLower_transf[2];
3942
3943 outsidePolyacetalShapeLower_transf[0] = new TGeoCombiTrans();
3944 outsidePolyacetalShapeLower_transf[0]->SetDx(
3945 +(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3946 outsidePolyacetalShapeLower_transf[0]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
3947 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
3948 outsidePolyacetalShapeLower_transf[0]->SetDz(0.0);
3949
3950 outsidePolyacetalShapeLower_transf[1] = new TGeoCombiTrans();
3951 outsidePolyacetalShapeLower_transf[1]->SetDx(
3952 -(outsidePolyacetalShapeLower_XSize * 0.5 + outsidePolyacetalShapeLower_XDistBetweenParts * 0.5));
3953 outsidePolyacetalShapeLower_transf[1]->SetDy(-insidePolyacetalShapeLower_YSize * 0.5
3954 + 1.8 /*shift*/ + outsidePolyacetalShapeLower_YSize * 0.5);
3955 outsidePolyacetalShapeLower_transf[1]->SetDz(0.0);
3956
3957 if (TString(frames->GetName()).Contains("upper")) {
3958 frames->AddNode(insidePolyacetalShapeUpperV, 0, insidePolyacetalShapeUpper_transf[0]);
3959 frames->AddNode(insidePolyacetalShapeUpperV, 1, insidePolyacetalShapeUpper_transf[1]);
3960 frames->AddNode(outsidePolyacetalShapeUpperV, 0, outsidePolyacetalShapeUpper_transf[0]);
3961 frames->AddNode(outsidePolyacetalShapeUpperV, 1, outsidePolyacetalShapeUpper_transf[1]);
3962 }
3963
3964 if (TString(frames->GetName()).Contains("lower")) {
3965 frames->AddNode(insidePolyacetalShapeLowerV, 0, insidePolyacetalShapeLower_transf[0]);
3966 frames->AddNode(insidePolyacetalShapeLowerV, 1, insidePolyacetalShapeLower_transf[1]);
3967 frames->AddNode(outsidePolyacetalShapeLowerV, 0, outsidePolyacetalShapeLower_transf[0]);
3968 frames->AddNode(outsidePolyacetalShapeLowerV, 1, outsidePolyacetalShapeLower_transf[1]);
3969 }
3970
3971 //--------------------------------------------------------------------------
3972
3973 // lower fiberglass block ---------------------------------------------------
3974 Double_t lowerFiberGlassBlock_XSize = 165.1; // cm
3975 Double_t lowerFiberGlassBlock_YSize = 1.75; // cm
3976 Double_t lowerFiberGlassBlock_ZSize = 0.9; // cm
3977
3978 Double_t lowerFiberGlassBlockArch_Rmin = 4.0;
3979 Double_t lowerFiberGlassBlockArch_Rmax = 5.75;
3980 Double_t lowerFiberGlassBlockArch_ZSize = lowerFiberGlassBlock_ZSize;
3981
3982 TGeoShape* lowerFiberGlassBlockHalfS =
3983 new TGeoBBox(TString("lowerFiberGlassBlockHalfS") += TString("_") + frames->GetName(),
3984 (lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5,
3985 lowerFiberGlassBlock_YSize * 0.5, lowerFiberGlassBlock_ZSize * 0.5);
3986 TGeoShape* lowerFiberGlassBlockArchS = new TGeoTubeSeg(
3987 TString("lowerFiberGlassBlockArchS") += TString("_") + frames->GetName(), lowerFiberGlassBlockArch_Rmin,
3988 lowerFiberGlassBlockArch_Rmax, lowerFiberGlassBlockArch_ZSize * 0.5, 0.0, 180.0);
3989
3990 TGeoTranslation* lowerFiberGlassBlockHalf_pos1 = new TGeoTranslation();
3991 lowerFiberGlassBlockHalf_pos1->SetName(TString("lowerFiberGlassBlockHalf_pos1") +=
3992 TString("_") + frames->GetName());
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(TString("lowerFiberGlassBlockHalf_pos2") +=
4001 TString("_") + frames->GetName());
4002 lowerFiberGlassBlockHalf_pos2->SetDx(
4003 -((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
4004 lowerFiberGlassBlockHalf_pos2->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
4005 lowerFiberGlassBlockHalf_pos2->SetDz(0.0);
4006 lowerFiberGlassBlockHalf_pos2->RegisterYourself();
4007
4008 TGeoTranslation* lowerFiberGlassBlockArch_pos = new TGeoTranslation();
4009 lowerFiberGlassBlockArch_pos->SetName(TString("lowerFiberGlassBlockArch_pos") += TString("_") + frames->GetName());
4010 lowerFiberGlassBlockArch_pos->SetDx(0.0);
4011 lowerFiberGlassBlockArch_pos->SetDy(0.0);
4012 lowerFiberGlassBlockArch_pos->SetDz(0.0);
4013 lowerFiberGlassBlockArch_pos->RegisterYourself();
4014
4015 TGeoCompositeShape* lowerFiberGlassBlockS = new TGeoCompositeShape();
4016 lowerFiberGlassBlockS->SetName(TString("lowerFiberGlassBlockS") += TString("_") + frames->GetName());
4017 {
4018 TString expression = "lowerFiberGlassBlockHalfS";
4019 expression += TString("_") + frames->GetName();
4020 expression += ":lowerFiberGlassBlockHalf_pos1";
4021 expression += TString("_") + frames->GetName();
4022 expression += "+lowerFiberGlassBlockHalfS";
4023 expression += TString("_") + frames->GetName();
4024 expression += ":lowerFiberGlassBlockHalf_pos2";
4025 expression += TString("_") + frames->GetName();
4026 expression += "+lowerFiberGlassBlockArchS";
4027 expression += TString("_") + frames->GetName();
4028 expression += ":lowerFiberGlassBlockArch_pos";
4029 expression += TString("_") + frames->GetName();
4030
4031 lowerFiberGlassBlockS->MakeNode(expression);
4032 lowerFiberGlassBlockS->ComputeBBox(); // need to compute a bounding box
4033 }
4034
4035 TGeoVolume* lowerFiberGlassBlockV =
4036 new TGeoVolume(TString("lowerFiberGlassBlockV") += TString("_") + frames->GetName(), lowerFiberGlassBlockS);
4037
4038 // volume medium
4039 TGeoMedium* lowerFiberGlassBlockV_medium = pMedFiberGlass;
4040 if (lowerFiberGlassBlockV_medium) {
4041 lowerFiberGlassBlockV->SetMedium(lowerFiberGlassBlockV_medium);
4042 } else
4043 Fatal("Main", "Invalid medium for lowerFiberGlassBlockV!");
4044
4045 // volume visual property (transparency)
4046 lowerFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4047 lowerFiberGlassBlockV->SetTransparency(0);
4048
4049 TGeoCombiTrans* lowerFiberGlassBlock_transf[1];
4050
4051 lowerFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4052 lowerFiberGlassBlock_transf[0]->SetDx(0.0);
4053 lowerFiberGlassBlock_transf[0]->SetDy(-(YModuleSize_Station163x39 * 0.5));
4054 lowerFiberGlassBlock_transf[0]->SetDz(0.0);
4055
4056 frames->AddNode(lowerFiberGlassBlockV, 0, lowerFiberGlassBlock_transf[0]);
4057 //--------------------------------------------------------------------------
4058
4059 // side fiberglass block ----------------------------------------------------
4060 Double_t sideFiberGlassBlockPart_XSize = 1.45; // cm
4061 Double_t sideFiberGlassBlockPart_YSize = 49.4 - 6.0; // cm
4062 Double_t sideFiberGlassBlockPart_ZSize = 0.89; // cm
4063
4064 TGeoShape* sideFiberGlassBlockS = new TGeoBBox(
4065 TString("sideFiberGlassBlockS") += TString("_") + frames->GetName(), sideFiberGlassBlockPart_XSize * 0.5,
4066 sideFiberGlassBlockPart_YSize * 0.5, sideFiberGlassBlockPart_ZSize * 0.5);
4067
4068 TGeoVolume* sideFiberGlassBlockV =
4069 new TGeoVolume(TString("sideFiberGlassBlockV") += TString("_") + frames->GetName(), sideFiberGlassBlockS);
4070
4071 // volume medium
4072 TGeoMedium* sideFiberGlassBlockV_medium = pMedFiberGlass;
4073 if (sideFiberGlassBlockV_medium) {
4074 sideFiberGlassBlockV->SetMedium(sideFiberGlassBlockV_medium);
4075 } else
4076 Fatal("Main", "Invalid medium for sideFiberGlassBlockV!");
4077
4078 // volume visual property (transparency)
4079 sideFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4080 sideFiberGlassBlockV->SetTransparency(0);
4081
4082 TGeoCombiTrans* sideFiberGlassBlock_transf[2];
4083
4084 sideFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4085 sideFiberGlassBlock_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4086 sideFiberGlassBlock_transf[0]->SetDy(+0.45 /*shift*/);
4087 sideFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4088
4089 sideFiberGlassBlock_transf[1] = new TGeoCombiTrans();
4090 sideFiberGlassBlock_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4091 sideFiberGlassBlock_transf[1]->SetDy(+0.45 /*shift*/);
4092 sideFiberGlassBlock_transf[1]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4093
4094 frames->AddNode(sideFiberGlassBlockV, 0, sideFiberGlassBlock_transf[0]);
4095 frames->AddNode(sideFiberGlassBlockV, 1, sideFiberGlassBlock_transf[1]);
4096 //--------------------------------------------------------------------------
4097
4098 // upper fiberglass block ---------------------------------------------------
4099 Double_t upperFiberGlassBlock_XSize = 165.1; // cm
4100 Double_t upperFiberGlassBlock_YSize = 1.45; // cm
4101 Double_t upperFiberGlassBlock_ZSize = 0.89; // cm
4102
4103 TGeoShape* upperFiberGlassBlockS = new TGeoBBox(
4104 TString("upperFiberGlassBlockS") += TString("_") + frames->GetName(), upperFiberGlassBlock_XSize * 0.5,
4105 upperFiberGlassBlock_YSize * 0.5, upperFiberGlassBlock_ZSize * 0.5);
4106
4107 TGeoVolume* upperFiberGlassBlockV =
4108 new TGeoVolume(TString("upperFiberGlassBlockV") += TString("_") + frames->GetName(), upperFiberGlassBlockS);
4109
4110 // volume medium
4111 TGeoMedium* upperFiberGlassBlockV_medium = pMedFiberGlass;
4112 if (upperFiberGlassBlockV_medium) {
4113 upperFiberGlassBlockV->SetMedium(upperFiberGlassBlockV_medium);
4114 } else
4115 Fatal("Main", "Invalid medium for upperFiberGlassBlockV!");
4116
4117 // volume visual property (transparency)
4118 upperFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4119 upperFiberGlassBlockV->SetTransparency(0);
4120
4121 TGeoCombiTrans* upperFiberGlassBlock_transf[1];
4122
4123 upperFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4124 upperFiberGlassBlock_transf[0]->SetDx(0.0);
4125 upperFiberGlassBlock_transf[0]->SetDy(
4126 +(sideFiberGlassBlockPart_YSize * 0.5 - upperFiberGlassBlock_YSize * 0.5 + 0.45 /*shift*/));
4127 upperFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4128
4129 frames->AddNode(upperFiberGlassBlockV, 0, upperFiberGlassBlock_transf[0]);
4130 //--------------------------------------------------------------------------
4131
4132 // brass layer --------------------------------------------------------------
4133 Double_t upperBrasslayer_XSize = 165.1; // cm
4134 Double_t upperBrasslayer_YSize = 1.45; // cm
4135 Double_t upperBrasslayer_ZSize = 0.005; // cm
4136
4137 Double_t sideBrasslayer_XSize = 1.45; // cm
4138 Double_t sideBrasslayer_YSize = 49.4 - 6.0; // cm
4139 Double_t sideBrasslayer_ZSize = 0.005; // cm
4140
4141 TGeoShape* upperBrasslayerS =
4142 new TGeoBBox(TString("upperBrasslayerS") += TString("_") + frames->GetName(), upperBrasslayer_XSize * 0.5,
4143 upperBrasslayer_YSize * 0.5, upperBrasslayer_ZSize * 0.5);
4144 TGeoShape* sideBrasslayerS =
4145 new TGeoBBox(TString("sideBrasslayerS") += TString("_") + frames->GetName(), sideBrasslayer_XSize * 0.5,
4146 sideBrasslayer_YSize * 0.5, sideBrasslayer_ZSize * 0.5);
4147
4148 TGeoVolume* upperBrasslayerV =
4149 new TGeoVolume(TString("upperBrasslayerV") += TString("_") + frames->GetName(), upperBrasslayerS);
4150 TGeoVolume* sideBrasslayerV =
4151 new TGeoVolume(TString("sideBrasslayerV") += TString("_") + frames->GetName(), sideBrasslayerS);
4152
4153 // volume medium
4154 TGeoMedium* upperBrasslayerV_medium = pMedBrass;
4155 if (upperBrasslayerV_medium) {
4156 upperBrasslayerV->SetMedium(upperBrasslayerV_medium);
4157 sideBrasslayerV->SetMedium(upperBrasslayerV_medium);
4158 } else
4159 Fatal("Main", "Invalid medium for upperBrasslayerV_medium!");
4160
4161 // volume visual property (transparency)
4162 upperBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4163 upperBrasslayerV->SetTransparency(0);
4164 sideBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4165 sideBrasslayerV->SetTransparency(0);
4166
4167 TGeoCombiTrans* upperBrasslayer_transf[1];
4168
4169 upperBrasslayer_transf[0] = new TGeoCombiTrans();
4170 upperBrasslayer_transf[0]->SetDx(0.0);
4171 upperBrasslayer_transf[0]->SetDy(
4172 +(sideFiberGlassBlockPart_YSize * 0.5 - upperBrasslayer_YSize * 0.5 + 0.45 /*shift*/));
4173 upperBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + upperBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4174
4175 TGeoCombiTrans* sideBrasslayer_transf[2];
4176
4177 sideBrasslayer_transf[0] = new TGeoCombiTrans();
4178 sideBrasslayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4179 sideBrasslayer_transf[0]->SetDy(+0.45 /*shift*/);
4180 sideBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4181
4182 sideBrasslayer_transf[1] = new TGeoCombiTrans();
4183 sideBrasslayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4184 sideBrasslayer_transf[1]->SetDy(+0.45 /*shift*/);
4185 sideBrasslayer_transf[1]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4186
4187 frames->AddNode(upperBrasslayerV, 0, upperBrasslayer_transf[0]);
4188
4189 frames->AddNode(sideBrasslayerV, 0, sideBrasslayer_transf[0]);
4190 frames->AddNode(sideBrasslayerV, 1, sideBrasslayer_transf[1]);
4191 //--------------------------------------------------------------------------
4192
4193 // steel layer --------------------------------------------------------------
4194 Double_t upperSteellayer_XSize = 165.1; // cm
4195 Double_t upperSteellayer_YSize = 1.45; // cm
4196 Double_t upperSteellayer_ZSize = 0.005; // cm
4197
4198 Double_t sideSteellayer_XSize = 1.45; // cm
4199 Double_t sideSteellayer_YSize = 49.4 - 6.0; // cm
4200 Double_t sideSteellayer_ZSize = 0.005; // cm
4201
4202 TGeoShape* upperSteellayerS =
4203 new TGeoBBox(TString("upperSteellayerS") += TString("_") + frames->GetName(), upperSteellayer_XSize * 0.5,
4204 upperSteellayer_YSize * 0.5, upperSteellayer_ZSize * 0.5);
4205 TGeoShape* sideSteellayerS =
4206 new TGeoBBox(TString("sideSteellayerS") += TString("_") + frames->GetName(), sideSteellayer_XSize * 0.5,
4207 sideSteellayer_YSize * 0.5, sideSteellayer_ZSize * 0.5);
4208
4209 TGeoVolume* upperSteellayerV =
4210 new TGeoVolume(TString("upperSteellayerV") += TString("_") + frames->GetName(), upperSteellayerS);
4211 TGeoVolume* sideSteellayerV =
4212 new TGeoVolume(TString("sideSteellayerV") += TString("_") + frames->GetName(), sideSteellayerS);
4213
4214 // volume medium
4215 TGeoMedium* upperSteellayerV_medium = pMedSteel;
4216 if (upperSteellayerV_medium) {
4217 upperSteellayerV->SetMedium(upperSteellayerV_medium);
4218 sideSteellayerV->SetMedium(upperSteellayerV_medium);
4219 } else
4220 Fatal("Main", "Invalid medium for upperSteellayerV_medium!");
4221
4222 // volume visual property (transparency)
4223 upperSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4224 upperSteellayerV->SetTransparency(0);
4225 sideSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4226 sideSteellayerV->SetTransparency(0);
4227
4228 TGeoCombiTrans* upperSteellayer_transf[1];
4229
4230 upperSteellayer_transf[0] = new TGeoCombiTrans();
4231 upperSteellayer_transf[0]->SetDx(0.0);
4232 upperSteellayer_transf[0]->SetDy(
4233 +(sideFiberGlassBlockPart_YSize * 0.5 - upperSteellayer_YSize * 0.5 + 0.45 /*shift*/));
4234 upperSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + upperSteellayer_ZSize * 0.5 + 0.005 /*shift*/);
4235
4236 TGeoCombiTrans* sideSteellayer_transf[2];
4237
4238 sideSteellayer_transf[0] = new TGeoCombiTrans();
4239 sideSteellayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4240 sideSteellayer_transf[0]->SetDy(+0.45 /*shift*/);
4241 sideSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideSteellayer_ZSize * 0.5);
4242
4243 sideSteellayer_transf[1] = new TGeoCombiTrans();
4244 sideSteellayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4245 sideSteellayer_transf[1]->SetDy(+0.45 /*shift*/);
4246 sideSteellayer_transf[1]->SetDz(-ZModuleSize_Station163x39 * 0.5 + sideSteellayer_ZSize * 0.5);
4247
4248 frames->AddNode(upperSteellayerV, 0, upperSteellayer_transf[0]);
4249
4250 frames->AddNode(sideSteellayerV, 0, sideSteellayer_transf[0]);
4251 frames->AddNode(sideSteellayerV, 1, sideSteellayer_transf[1]);
4252 //--------------------------------------------------------------------------
4253
4254 return frames;
4255}
4256//------------------------------------------------------------------------------
4257
4259{
4260
4261 // Common parameters for all inside layers
4262 Double_t insideLayer_XSize = XModuleSize_Station10x10; // cm
4263 Double_t insideLayer_YSize = YModuleSize_Station10x10; // cm
4264
4265 Double_t copperInsideLayer1_ZSize = 0.0005; // cm;
4266 Double_t kaptonInsideLayer1_ZSize = 0.005; // cm;
4267
4268 Double_t copperInsideLayer2_ZSize = 0.0007; // cm;
4269 Double_t kaptonInsideLayer2_ZSize = 0.003; // cm;
4270
4271 Double_t copperInsideLayer3_ZSize = 0.0007; // cm;
4272 Double_t kaptonInsideLayer3_ZSize = 0.003; // cm;
4273
4274 Double_t copperInsideLayer4_ZSize = 0.0007; // cm;
4275 Double_t kaptonInsideLayer4_ZSize = 0.003; // cm;
4276
4277 TGeoShape* copperInsideLayer1S =
4278 new TGeoBBox(TString("copperInsideLayer1S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4279 insideLayer_YSize * 0.5, copperInsideLayer1_ZSize * 0.5);
4280 TGeoShape* kaptonInsideLayer1S =
4281 new TGeoBBox(TString("kaptonInsideLayer1S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4282 insideLayer_YSize * 0.5, kaptonInsideLayer1_ZSize * 0.5);
4283
4284 TGeoShape* copperInsideLayer2S =
4285 new TGeoBBox(TString("copperInsideLayer2S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4286 insideLayer_YSize * 0.5, copperInsideLayer2_ZSize * 0.5);
4287 TGeoShape* kaptonInsideLayer2S =
4288 new TGeoBBox(TString("kaptonInsideLayer2S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4289 insideLayer_YSize * 0.5, kaptonInsideLayer2_ZSize * 0.5);
4290
4291 TGeoShape* copperInsideLayer3S =
4292 new TGeoBBox(TString("copperInsideLayer3S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4293 insideLayer_YSize * 0.5, copperInsideLayer3_ZSize * 0.5);
4294 TGeoShape* kaptonInsideLayer3S =
4295 new TGeoBBox(TString("kaptonInsideLayer3S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4296 insideLayer_YSize * 0.5, kaptonInsideLayer3_ZSize * 0.5);
4297
4298 TGeoShape* copperInsideLayer4S =
4299 new TGeoBBox(TString("copperInsideLayer4S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4300 insideLayer_YSize * 0.5, copperInsideLayer4_ZSize * 0.5);
4301 TGeoShape* kaptonInsideLayer4S =
4302 new TGeoBBox(TString("kaptonInsideLayer4S") + TString("_") + module_name, insideLayer_XSize * 0.5,
4303 insideLayer_YSize * 0.5, kaptonInsideLayer4_ZSize * 0.5);
4304
4305 TGeoVolume* copperInsideLayer1V =
4306 new TGeoVolume(TString("copperInsideLayer1V") += TString("_") + module_name, copperInsideLayer1S);
4307 TGeoVolume* kaptonInsideLayer1V =
4308 new TGeoVolume(TString("kaptonInsideLayer1V") += TString("_") + module_name, kaptonInsideLayer1S);
4309
4310 TGeoVolume* copperInsideLayer2V =
4311 new TGeoVolume(TString("copperInsideLayer2V") += TString("_") + module_name, copperInsideLayer2S);
4312 TGeoVolume* kaptonInsideLayer2V =
4313 new TGeoVolume(TString("kaptonInsideLayer2V") += TString("_") + module_name, kaptonInsideLayer2S);
4314
4315 TGeoVolume* copperInsideLayer3V =
4316 new TGeoVolume(TString("copperInsideLayer3V") += TString("_") + module_name, copperInsideLayer3S);
4317 TGeoVolume* kaptonInsideLayer3V =
4318 new TGeoVolume(TString("kaptonInsideLayer3V") += TString("_") + module_name, kaptonInsideLayer3S);
4319
4320 TGeoVolume* copperInsideLayer4V =
4321 new TGeoVolume(TString("copperInsideLayer4V") += TString("_") + module_name, copperInsideLayer4S);
4322 TGeoVolume* kaptonInsideLayer4V =
4323 new TGeoVolume(TString("kaptonInsideLayer4V") += TString("_") + module_name, kaptonInsideLayer4S);
4324
4325 // volume media
4326 TGeoMedium* copperLayerV_medium = pMedCopper;
4327 if (copperLayerV_medium) {
4328 copperInsideLayer1V->SetMedium(copperLayerV_medium);
4329 copperInsideLayer2V->SetMedium(copperLayerV_medium);
4330 copperInsideLayer3V->SetMedium(copperLayerV_medium);
4331 copperInsideLayer4V->SetMedium(copperLayerV_medium);
4332 } else
4333 Fatal("Main", "Invalid medium for copperLayerV!");
4334
4335 TGeoMedium* kaptonLayerV_medium = pMedKapton;
4336 if (kaptonLayerV_medium) {
4337 kaptonInsideLayer1V->SetMedium(kaptonLayerV_medium);
4338 kaptonInsideLayer2V->SetMedium(kaptonLayerV_medium);
4339 kaptonInsideLayer3V->SetMedium(kaptonLayerV_medium);
4340 kaptonInsideLayer4V->SetMedium(kaptonLayerV_medium);
4341 } else
4342 Fatal("Main", "Invalid medium for kaptonLayerV!");
4343
4344 // volume visual property (transparency)
4345 copperInsideLayer1V->SetLineColor(TColor::GetColor("#ff7538"));
4346 copperInsideLayer1V->SetTransparency(0);
4347 kaptonInsideLayer1V->SetLineColor(TColor::GetColor("#aeae22"));
4348 kaptonInsideLayer1V->SetTransparency(0);
4349
4350 copperInsideLayer2V->SetLineColor(TColor::GetColor("#ff7538"));
4351 copperInsideLayer2V->SetTransparency(0);
4352 kaptonInsideLayer2V->SetLineColor(TColor::GetColor("#aeae22"));
4353 kaptonInsideLayer2V->SetTransparency(0);
4354
4355 copperInsideLayer3V->SetLineColor(TColor::GetColor("#ff7538"));
4356 copperInsideLayer3V->SetTransparency(0);
4357 kaptonInsideLayer3V->SetLineColor(TColor::GetColor("#aeae22"));
4358 kaptonInsideLayer3V->SetTransparency(0);
4359
4360 copperInsideLayer4V->SetLineColor(TColor::GetColor("#ff7538"));
4361 copperInsideLayer4V->SetTransparency(0);
4362 kaptonInsideLayer4V->SetLineColor(TColor::GetColor("#aeae22"));
4363 kaptonInsideLayer4V->SetTransparency(0);
4364
4365 TGeoCombiTrans* copperInsideLayer1V_transf[1];
4366 copperInsideLayer1V_transf[0] = new TGeoCombiTrans();
4367 copperInsideLayer1V_transf[0]->SetDx(0.0);
4368 copperInsideLayer1V_transf[0]->SetDy(0.0);
4369 copperInsideLayer1V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06);
4370
4371 TGeoCombiTrans* kaptonInsideLayer1V_transf[1];
4372 kaptonInsideLayer1V_transf[0] = new TGeoCombiTrans();
4373 kaptonInsideLayer1V_transf[0]->SetDx(0.0);
4374 kaptonInsideLayer1V_transf[0]->SetDy(0.0);
4375 kaptonInsideLayer1V_transf[0]->SetDz(-(copperInsideLayer1_ZSize * 0.5 + kaptonInsideLayer1_ZSize * 0.5)
4376 - ZModuleSize_Station10x10 * 0.5 + 0.06);
4377
4378 TGeoCombiTrans* copperInsideLayer2V_transf[1];
4379 copperInsideLayer2V_transf[0] = new TGeoCombiTrans();
4380 copperInsideLayer2V_transf[0]->SetDx(0.0);
4381 copperInsideLayer2V_transf[0]->SetDy(0.0);
4382 copperInsideLayer2V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.306);
4383
4384 TGeoCombiTrans* kaptonInsideLayer2V_transf[1];
4385 kaptonInsideLayer2V_transf[0] = new TGeoCombiTrans();
4386 kaptonInsideLayer2V_transf[0]->SetDx(0.0);
4387 kaptonInsideLayer2V_transf[0]->SetDy(0.0);
4388 kaptonInsideLayer2V_transf[0]->SetDz(-(copperInsideLayer2_ZSize * 0.5 + kaptonInsideLayer2_ZSize * 0.5)
4389 - ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.306);
4390
4391 TGeoCombiTrans* copperInsideLayer3V_transf[1];
4392 copperInsideLayer3V_transf[0] = new TGeoCombiTrans();
4393 copperInsideLayer3V_transf[0]->SetDx(0.0);
4394 copperInsideLayer3V_transf[0]->SetDy(0.0);
4395 copperInsideLayer3V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.559);
4396
4397 TGeoCombiTrans* kaptonInsideLayer3V_transf[1];
4398 kaptonInsideLayer3V_transf[0] = new TGeoCombiTrans();
4399 kaptonInsideLayer3V_transf[0]->SetDx(0.0);
4400 kaptonInsideLayer3V_transf[0]->SetDy(0.0);
4401 kaptonInsideLayer3V_transf[0]->SetDz(-(copperInsideLayer3_ZSize * 0.5 + kaptonInsideLayer3_ZSize * 0.5)
4402 - ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.559);
4403
4404 TGeoCombiTrans* copperInsideLayer4V_transf[1];
4405 copperInsideLayer4V_transf[0] = new TGeoCombiTrans();
4406 copperInsideLayer4V_transf[0]->SetDx(0.0);
4407 copperInsideLayer4V_transf[0]->SetDy(0.0);
4408 copperInsideLayer4V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.763);
4409
4410 TGeoCombiTrans* kaptonInsideLayer4V_transf[1];
4411 kaptonInsideLayer4V_transf[0] = new TGeoCombiTrans();
4412 kaptonInsideLayer4V_transf[0]->SetDx(0.0);
4413 kaptonInsideLayer4V_transf[0]->SetDy(0.0);
4414 kaptonInsideLayer4V_transf[0]->SetDz(-(copperInsideLayer4_ZSize * 0.5 + kaptonInsideLayer4_ZSize * 0.5)
4415 - ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.763);
4416
4417 // module shape
4418 TGeoShape* moduleS =
4419 new TGeoBBox(TString("moduleS") + TString("_") + module_name, xsize * 0.5, ysize * 0.5, zsize * 0.5);
4420
4421 // module volume
4422 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
4423
4424 // medium
4426 moduleV->SetMedium(pMedArC4H10_80_20);
4427 else
4428 Fatal("Main", "Invalid medium for sensitive modules!");
4429
4430 // visual parameters
4431 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
4432 moduleV->SetTransparency(20);
4433
4434 moduleV->AddNode(copperInsideLayer1V, 0, copperInsideLayer1V_transf[0]);
4435 moduleV->AddNode(kaptonInsideLayer1V, 0, kaptonInsideLayer1V_transf[0]);
4436 moduleV->AddNode(copperInsideLayer2V, 0, copperInsideLayer2V_transf[0]);
4437 moduleV->AddNode(kaptonInsideLayer2V, 0, kaptonInsideLayer2V_transf[0]);
4438 moduleV->AddNode(copperInsideLayer3V, 0, copperInsideLayer3V_transf[0]);
4439 moduleV->AddNode(kaptonInsideLayer3V, 0, kaptonInsideLayer3V_transf[0]);
4440 moduleV->AddNode(copperInsideLayer4V, 0, copperInsideLayer4V_transf[0]);
4441 moduleV->AddNode(kaptonInsideLayer4V, 0, kaptonInsideLayer4V_transf[0]);
4442
4443 return moduleV;
4444}
4445//------------------------------------------------------------------------------
4446
4448{
4449
4450 Int_t uniqueId = gRandom->Integer(100000);
4451
4452 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
4453 layers->SetMedium(pMedAir);
4454
4455 // Common parameters for all inside layers
4456 Double_t outsideLayer_XSize = 10.5; // cm
4457 Double_t outsideLayer_YSize = 10.5; // cm
4458
4459 Double_t insideLayer_XSize = XModuleSize_Station10x10; // cm
4460 Double_t insideLayer_YSize = YModuleSize_Station10x10; // cm
4461
4462 Double_t copperOutsideLayer1_ZSize = 0.0005; // cm;
4463 Double_t kaptonOutsideLayer1_ZSize = 0.005; // cm;
4464
4465 Double_t copperOutsideLayer2_ZSize = 0.0007; // cm;
4466 Double_t kaptonOutsideLayer2_ZSize = 0.003; // cm;
4467
4468 Double_t copperOutsideLayer3_ZSize = 0.0007; // cm;
4469 Double_t kaptonOutsideLayer3_ZSize = 0.003; // cm;
4470
4471 Double_t copperOutsideLayer4_ZSize = 0.0007; // cm;
4472 Double_t kaptonOutsideLayer4_ZSize = 0.003; // cm;
4473
4474 TGeoShape* copperOutsideLayerBlank1S =
4475 new TGeoBBox(TString("copperOutsideLayerBlank1S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4476 outsideLayer_YSize * 0.5, copperOutsideLayer1_ZSize * 0.5);
4477 TGeoShape* kaptonOutsideLayerBlank1S =
4478 new TGeoBBox(TString("kaptonOutsideLayerBlank1S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4479 outsideLayer_YSize * 0.5, kaptonOutsideLayer1_ZSize * 0.5);
4480
4481 TGeoShape* copperOutsideLayerBlank2S =
4482 new TGeoBBox(TString("copperOutsideLayerBlank2S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4483 outsideLayer_YSize * 0.5, copperOutsideLayer2_ZSize * 0.5);
4484 TGeoShape* kaptonOutsideLayerBlank2S =
4485 new TGeoBBox(TString("kaptonOutsideLayerBlank2S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4486 outsideLayer_YSize * 0.5, kaptonOutsideLayer2_ZSize * 0.5);
4487
4488 TGeoShape* copperOutsideLayerBlank3S =
4489 new TGeoBBox(TString("copperOutsideLayerBlank3S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4490 outsideLayer_YSize * 0.5, copperOutsideLayer3_ZSize * 0.5);
4491 TGeoShape* kaptonOutsideLayerBlank3S =
4492 new TGeoBBox(TString("kaptonOutsideLayerBlank3S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4493 outsideLayer_YSize * 0.5, kaptonOutsideLayer3_ZSize * 0.5);
4494
4495 TGeoShape* copperOutsideLayerBlank4S =
4496 new TGeoBBox(TString("copperOutsideLayerBlank4S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4497 outsideLayer_YSize * 0.5, copperOutsideLayer4_ZSize * 0.5);
4498 TGeoShape* kaptonOutsideLayerBlank4S =
4499 new TGeoBBox(TString("kaptonOutsideLayerBlank4S") + TString("_") + layer_name, outsideLayer_XSize * 0.5,
4500 outsideLayer_YSize * 0.5, kaptonOutsideLayer4_ZSize * 0.5);
4501
4502 TGeoShape* copperInsideLayerBlank1S =
4503 new TGeoBBox(TString("copperInsideLayerBlank1S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4504 insideLayer_YSize * 0.5, copperOutsideLayer1_ZSize * 0.5 + 0.01);
4505 TGeoShape* kaptonInsideLayerBlank1S =
4506 new TGeoBBox(TString("kaptonInsideLayerBlank1S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4507 insideLayer_YSize * 0.5, kaptonOutsideLayer1_ZSize * 0.5 + 0.01);
4508
4509 TGeoShape* copperInsideLayerBlank2S =
4510 new TGeoBBox(TString("copperInsideLayerBlank2S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4511 insideLayer_YSize * 0.5, copperOutsideLayer2_ZSize * 0.5 + 0.01);
4512 TGeoShape* kaptonInsideLayerBlank2S =
4513 new TGeoBBox(TString("kaptonInsideLayerBlank2S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4514 insideLayer_YSize * 0.5, kaptonOutsideLayer2_ZSize * 0.5 + 0.01);
4515
4516 TGeoShape* copperInsideLayerBlank3S =
4517 new TGeoBBox(TString("copperInsideLayerBlank3S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4518 insideLayer_YSize * 0.5, copperOutsideLayer3_ZSize * 0.5 + 0.01);
4519 TGeoShape* kaptonInsideLayerBlank3S =
4520 new TGeoBBox(TString("kaptonInsideLayerBlank3S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4521 insideLayer_YSize * 0.5, kaptonOutsideLayer3_ZSize * 0.5 + 0.01);
4522
4523 TGeoShape* copperInsideLayerBlank4S =
4524 new TGeoBBox(TString("copperInsideLayerBlank4S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4525 insideLayer_YSize * 0.5, copperOutsideLayer4_ZSize * 0.5 + 0.01);
4526 TGeoShape* kaptonInsideLayerBlank4S =
4527 new TGeoBBox(TString("kaptonInsideLayerBlank4S") + TString("_") + layer_name, insideLayer_XSize * 0.5,
4528 insideLayer_YSize * 0.5, kaptonOutsideLayer4_ZSize * 0.5 + 0.01);
4529
4530 TGeoCompositeShape* copperOutsideLayer1S = new TGeoCompositeShape();
4531 copperOutsideLayer1S->SetName(TString("copperOutsideLayer1S") += TString("_") + layer_name);
4532 {
4533 TString expression = "copperOutsideLayerBlank1S";
4534 expression += TString("_") + layer_name;
4535 expression += "-copperInsideLayerBlank1S";
4536 expression += TString("_") + layer_name;
4537
4538 copperOutsideLayer1S->MakeNode(expression);
4539 copperOutsideLayer1S->ComputeBBox(); // need to compute a bounding box
4540 }
4541 TGeoCompositeShape* kaptonOutsideLayer1S = new TGeoCompositeShape();
4542 kaptonOutsideLayer1S->SetName(TString("kaptonOutsideLayer1S") += TString("_") + layer_name);
4543 {
4544 TString expression = "kaptonOutsideLayerBlank1S";
4545 expression += TString("_") + layer_name;
4546 expression += "-kaptonInsideLayerBlank1S";
4547 expression += TString("_") + layer_name;
4548
4549 kaptonOutsideLayer1S->MakeNode(expression);
4550 kaptonOutsideLayer1S->ComputeBBox(); // need to compute a bounding box
4551 }
4552
4553 TGeoCompositeShape* copperOutsideLayer2S = new TGeoCompositeShape();
4554 copperOutsideLayer2S->SetName(TString("copperOutsideLayer2S") += TString("_") + layer_name);
4555 {
4556 TString expression = "copperOutsideLayerBlank2S";
4557 expression += TString("_") + layer_name;
4558 expression += "-copperInsideLayerBlank2S";
4559 expression += TString("_") + layer_name;
4560
4561 copperOutsideLayer2S->MakeNode(expression);
4562 copperOutsideLayer2S->ComputeBBox(); // need to compute a bounding box
4563 }
4564 TGeoCompositeShape* kaptonOutsideLayer2S = new TGeoCompositeShape();
4565 kaptonOutsideLayer2S->SetName(TString("kaptonOutsideLayer2S") += TString("_") + layer_name);
4566 {
4567 TString expression = "kaptonOutsideLayerBlank2S";
4568 expression += TString("_") + layer_name;
4569 expression += "-kaptonInsideLayerBlank2S";
4570 expression += TString("_") + layer_name;
4571
4572 kaptonOutsideLayer2S->MakeNode(expression);
4573 kaptonOutsideLayer2S->ComputeBBox(); // need to compute a bounding box
4574 }
4575
4576 TGeoCompositeShape* copperOutsideLayer3S = new TGeoCompositeShape();
4577 copperOutsideLayer3S->SetName(TString("copperOutsideLayer3S") += TString("_") + layer_name);
4578 {
4579 TString expression = "copperOutsideLayerBlank3S";
4580 expression += TString("_") + layer_name;
4581 expression += "-copperInsideLayerBlank3S";
4582 expression += TString("_") + layer_name;
4583
4584 copperOutsideLayer3S->MakeNode(expression);
4585 copperOutsideLayer3S->ComputeBBox(); // need to compute a bounding box
4586 }
4587 TGeoCompositeShape* kaptonOutsideLayer3S = new TGeoCompositeShape();
4588 kaptonOutsideLayer3S->SetName(TString("kaptonOutsideLayer3S") += TString("_") + layer_name);
4589 {
4590 TString expression = "kaptonOutsideLayerBlank3S";
4591 expression += TString("_") + layer_name;
4592 expression += "-kaptonInsideLayerBlank3S";
4593 expression += TString("_") + layer_name;
4594
4595 kaptonOutsideLayer3S->MakeNode(expression);
4596 kaptonOutsideLayer3S->ComputeBBox(); // need to compute a bounding box
4597 }
4598
4599 TGeoCompositeShape* copperOutsideLayer4S = new TGeoCompositeShape();
4600 copperOutsideLayer4S->SetName(TString("copperOutsideLayer4S") += TString("_") + layer_name);
4601 {
4602 TString expression = "copperOutsideLayerBlank4S";
4603 expression += TString("_") + layer_name;
4604 expression += "-copperInsideLayerBlank4S";
4605 expression += TString("_") + layer_name;
4606
4607 copperOutsideLayer4S->MakeNode(expression);
4608 copperOutsideLayer4S->ComputeBBox(); // need to compute a bounding box
4609 }
4610 TGeoCompositeShape* kaptonOutsideLayer4S = new TGeoCompositeShape();
4611 kaptonOutsideLayer4S->SetName(TString("kaptonOutsideLayer4S") += TString("_") + layer_name);
4612 {
4613 TString expression = "kaptonOutsideLayerBlank4S";
4614 expression += TString("_") + layer_name;
4615 expression += "-kaptonInsideLayerBlank4S";
4616 expression += TString("_") + layer_name;
4617
4618 kaptonOutsideLayer4S->MakeNode(expression);
4619 kaptonOutsideLayer4S->ComputeBBox(); // need to compute a bounding box
4620 }
4621
4622 TGeoVolume* copperOutsideLayer1V =
4623 new TGeoVolume(TString("copperOutsideLayer1V") += TString("_") + layer_name, copperOutsideLayer1S);
4624 TGeoVolume* kaptonOutsideLayer1V =
4625 new TGeoVolume(TString("kaptonOutsideLayer1V") += TString("_") + layer_name, kaptonOutsideLayer1S);
4626
4627 TGeoVolume* copperOutsideLayer2V =
4628 new TGeoVolume(TString("copperOutsideLayer2V") += TString("_") + layer_name, copperOutsideLayer2S);
4629 TGeoVolume* kaptonOutsideLayer2V =
4630 new TGeoVolume(TString("kaptonOutsideLayer2V") += TString("_") + layer_name, kaptonOutsideLayer2S);
4631
4632 TGeoVolume* copperOutsideLayer3V =
4633 new TGeoVolume(TString("copperOutsideLayer3V") += TString("_") + layer_name, copperOutsideLayer3S);
4634 TGeoVolume* kaptonOutsideLayer3V =
4635 new TGeoVolume(TString("kaptonOutsideLayer3V") += TString("_") + layer_name, kaptonOutsideLayer3S);
4636
4637 TGeoVolume* copperOutsideLayer4V =
4638 new TGeoVolume(TString("copperOutsideLayer4V") += TString("_") + layer_name, copperOutsideLayer4S);
4639 TGeoVolume* kaptonOutsideLayer4V =
4640 new TGeoVolume(TString("kaptonOutsideLayer4V") += TString("_") + layer_name, kaptonOutsideLayer4S);
4641
4642 // volume media
4643 TGeoMedium* copperOutsideLayerV_medium = pMedCopper;
4644 if (copperOutsideLayerV_medium) {
4645 copperOutsideLayer1V->SetMedium(copperOutsideLayerV_medium);
4646 copperOutsideLayer2V->SetMedium(copperOutsideLayerV_medium);
4647 copperOutsideLayer3V->SetMedium(copperOutsideLayerV_medium);
4648 copperOutsideLayer4V->SetMedium(copperOutsideLayerV_medium);
4649 } else
4650 Fatal("Main", "Invalid medium for copperOutsideLayerV!");
4651
4652 TGeoMedium* kaptonOutsideLayerV_medium = pMedKapton;
4653 if (kaptonOutsideLayerV_medium) {
4654 kaptonOutsideLayer1V->SetMedium(kaptonOutsideLayerV_medium);
4655 kaptonOutsideLayer2V->SetMedium(kaptonOutsideLayerV_medium);
4656 kaptonOutsideLayer3V->SetMedium(kaptonOutsideLayerV_medium);
4657 kaptonOutsideLayer4V->SetMedium(kaptonOutsideLayerV_medium);
4658 } else
4659 Fatal("Main", "Invalid medium for kaptonOutsideLayerV!");
4660
4661 // volume visual property (transparency)
4662 copperOutsideLayer1V->SetLineColor(TColor::GetColor("#ff7538"));
4663 copperOutsideLayer1V->SetTransparency(0);
4664 kaptonOutsideLayer1V->SetLineColor(TColor::GetColor("#aeae22"));
4665 kaptonOutsideLayer1V->SetTransparency(0);
4666 copperOutsideLayer2V->SetLineColor(TColor::GetColor("#ff7538"));
4667 copperOutsideLayer2V->SetTransparency(0);
4668 kaptonOutsideLayer2V->SetLineColor(TColor::GetColor("#aeae22"));
4669 kaptonOutsideLayer2V->SetTransparency(0);
4670 copperOutsideLayer3V->SetLineColor(TColor::GetColor("#ff7538"));
4671 copperOutsideLayer3V->SetTransparency(0);
4672 kaptonOutsideLayer3V->SetLineColor(TColor::GetColor("#aeae22"));
4673 kaptonOutsideLayer3V->SetTransparency(0);
4674 copperOutsideLayer4V->SetLineColor(TColor::GetColor("#ff7538"));
4675 copperOutsideLayer4V->SetTransparency(0);
4676 kaptonOutsideLayer4V->SetLineColor(TColor::GetColor("#aeae22"));
4677 kaptonOutsideLayer4V->SetTransparency(0);
4678
4679 TGeoCombiTrans* copperOutsideLayer1V_transf[1];
4680 copperOutsideLayer1V_transf[0] = new TGeoCombiTrans();
4681 copperOutsideLayer1V_transf[0]->SetDx(0.0);
4682 copperOutsideLayer1V_transf[0]->SetDy(0.0);
4683 copperOutsideLayer1V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06);
4684
4685 TGeoCombiTrans* kaptonOutsideLayer1V_transf[1];
4686 kaptonOutsideLayer1V_transf[0] = new TGeoCombiTrans();
4687 kaptonOutsideLayer1V_transf[0]->SetDx(0.0);
4688 kaptonOutsideLayer1V_transf[0]->SetDy(0.0);
4689 kaptonOutsideLayer1V_transf[0]->SetDz(-(copperOutsideLayer1_ZSize * 0.5 + kaptonOutsideLayer1_ZSize * 0.5)
4690 - ZModuleSize_Station10x10 * 0.5 + 0.06);
4691
4692 TGeoCombiTrans* copperOutsideLayer2V_transf[1];
4693 copperOutsideLayer2V_transf[0] = new TGeoCombiTrans();
4694 copperOutsideLayer2V_transf[0]->SetDx(0.0);
4695 copperOutsideLayer2V_transf[0]->SetDy(0.0);
4696 copperOutsideLayer2V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.306);
4697
4698 TGeoCombiTrans* kaptonOutsideLayer2V_transf[1];
4699 kaptonOutsideLayer2V_transf[0] = new TGeoCombiTrans();
4700 kaptonOutsideLayer2V_transf[0]->SetDx(0.0);
4701 kaptonOutsideLayer2V_transf[0]->SetDy(0.0);
4702 kaptonOutsideLayer2V_transf[0]->SetDz(-(copperOutsideLayer2_ZSize * 0.5 + kaptonOutsideLayer2_ZSize * 0.5)
4703 - ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.306);
4704
4705 TGeoCombiTrans* copperOutsideLayer3V_transf[1];
4706 copperOutsideLayer3V_transf[0] = new TGeoCombiTrans();
4707 copperOutsideLayer3V_transf[0]->SetDx(0.0);
4708 copperOutsideLayer3V_transf[0]->SetDy(0.0);
4709 copperOutsideLayer3V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.559);
4710
4711 TGeoCombiTrans* kaptonOutsideLayer3V_transf[1];
4712 kaptonOutsideLayer3V_transf[0] = new TGeoCombiTrans();
4713 kaptonOutsideLayer3V_transf[0]->SetDx(0.0);
4714 kaptonOutsideLayer3V_transf[0]->SetDy(0.0);
4715 kaptonOutsideLayer3V_transf[0]->SetDz(-(copperOutsideLayer3_ZSize * 0.5 + kaptonOutsideLayer3_ZSize * 0.5)
4716 - ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.559);
4717
4718 TGeoCombiTrans* copperOutsideLayer4V_transf[1];
4719 copperOutsideLayer4V_transf[0] = new TGeoCombiTrans();
4720 copperOutsideLayer4V_transf[0]->SetDx(0.0);
4721 copperOutsideLayer4V_transf[0]->SetDy(0.0);
4722 copperOutsideLayer4V_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.763);
4723
4724 TGeoCombiTrans* kaptonOutsideLayer4V_transf[1];
4725 kaptonOutsideLayer4V_transf[0] = new TGeoCombiTrans();
4726 kaptonOutsideLayer4V_transf[0]->SetDx(0.0);
4727 kaptonOutsideLayer4V_transf[0]->SetDy(0.0);
4728 kaptonOutsideLayer4V_transf[0]->SetDz(-(copperOutsideLayer4_ZSize * 0.5 + kaptonOutsideLayer4_ZSize * 0.5)
4729 - ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.763);
4730
4731 layers->AddNode(copperOutsideLayer1V, 0, copperOutsideLayer1V_transf[0]);
4732 layers->AddNode(kaptonOutsideLayer1V, 0, kaptonOutsideLayer1V_transf[0]);
4733 layers->AddNode(copperOutsideLayer2V, 0, copperOutsideLayer2V_transf[0]);
4734 layers->AddNode(kaptonOutsideLayer2V, 0, kaptonOutsideLayer2V_transf[0]);
4735 layers->AddNode(copperOutsideLayer3V, 0, copperOutsideLayer3V_transf[0]);
4736 layers->AddNode(kaptonOutsideLayer3V, 0, kaptonOutsideLayer3V_transf[0]);
4737 layers->AddNode(copperOutsideLayer4V, 0, copperOutsideLayer4V_transf[0]);
4738 layers->AddNode(kaptonOutsideLayer4V, 0, kaptonOutsideLayer4V_transf[0]);
4739
4740 return layers;
4741}
4742//------------------------------------------------------------------------------
4743
4745{
4746
4747 Int_t uniqueId = gRandom->Integer(100000);
4748
4749 // frame volumes
4750 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
4751 frames->SetMedium(pMedAir);
4752
4753 // film frames --------------------------------------------------------------
4754 Double_t outsideFilmFrame_XSize = 12.5; // cm
4755 Double_t outsideFilmFrame_YSize = 12.5; // cm
4756
4757 Double_t insideFilmFrame_XSize = 10.5; // cm
4758 Double_t insideFilmFrame_YSize = 10.5; // cm
4759
4760 Double_t fiberglassFilmFrame_ZSize = 0.05; // cm
4761 Double_t epoxideFilmFrame_ZSize = 0.005; // cm;
4762 Double_t kaptonFilmFrame_ZSize = 0.005; // cm;
4763
4764 TGeoShape* fiberglassOutsideFilmFrameBlankS =
4765 new TGeoBBox(TString("fiberglassOutsideFilmFrameBlankS") + TString("_") + frame_name,
4766 outsideFilmFrame_XSize * 0.5, outsideFilmFrame_YSize * 0.5, fiberglassFilmFrame_ZSize * 0.5);
4767 TGeoShape* fiberglassInsideFilmFrameBlankS =
4768 new TGeoBBox(TString("fiberglassInsideFilmFrameBlankS") + TString("_") + frame_name,
4769 insideFilmFrame_XSize * 0.5, insideFilmFrame_YSize * 0.5, fiberglassFilmFrame_ZSize * 0.5 + 0.01);
4770
4771 TGeoShape* epoxideOutsideFilmFrameBlankS =
4772 new TGeoBBox(TString("epoxideOutsideFilmFrameBlankS") + TString("_") + frame_name, outsideFilmFrame_XSize * 0.5,
4773 outsideFilmFrame_YSize * 0.5, epoxideFilmFrame_ZSize * 0.5);
4774 TGeoShape* epoxideInsideFilmFrameBlankS =
4775 new TGeoBBox(TString("epoxideInsideFilmFrameBlankS") + TString("_") + frame_name, insideFilmFrame_XSize * 0.5,
4776 insideFilmFrame_YSize * 0.5, epoxideFilmFrame_ZSize * 0.5 + 0.01);
4777
4778 TGeoShape* kaptonOutsideFilmFrameBlankS =
4779 new TGeoBBox(TString("kaptonOutsideFilmFrameBlankS") + TString("_") + frame_name, outsideFilmFrame_XSize * 0.5,
4780 outsideFilmFrame_YSize * 0.5, kaptonFilmFrame_ZSize * 0.5);
4781 TGeoShape* kaptonInsideFilmFrameBlankS =
4782 new TGeoBBox(TString("kaptonInsideFilmFrameBlankS") + TString("_") + frame_name, insideFilmFrame_XSize * 0.5,
4783 insideFilmFrame_YSize * 0.5, kaptonFilmFrame_ZSize * 0.5 + 0.01);
4784
4785 TGeoCompositeShape* fiberglassFilmFrameS = new TGeoCompositeShape();
4786 fiberglassFilmFrameS->SetName(TString("fiberglassFilmFrameS") += TString("_") + frame_name);
4787 {
4788 TString expression = "fiberglassOutsideFilmFrameBlankS";
4789 expression += TString("_") + frame_name;
4790 expression += "-fiberglassInsideFilmFrameBlankS";
4791 expression += TString("_") + frame_name;
4792
4793 fiberglassFilmFrameS->MakeNode(expression);
4794 fiberglassFilmFrameS->ComputeBBox(); // need to compute a bounding box
4795 }
4796
4797 TGeoCompositeShape* epoxideFilmFrameS = new TGeoCompositeShape();
4798 epoxideFilmFrameS->SetName(TString("epoxideFilmFrameS") += TString("_") + frame_name);
4799 {
4800 TString expression = "epoxideOutsideFilmFrameBlankS";
4801 expression += TString("_") + frame_name;
4802 expression += "-epoxideInsideFilmFrameBlankS";
4803 expression += TString("_") + frame_name;
4804
4805 epoxideFilmFrameS->MakeNode(expression);
4806 epoxideFilmFrameS->ComputeBBox(); // need to compute a bounding box
4807 }
4808
4809 TGeoCompositeShape* kaptonFilmFrameS = new TGeoCompositeShape();
4810 kaptonFilmFrameS->SetName(TString("kaptonFilmFrameS") += TString("_") + frame_name);
4811 {
4812 TString expression = "kaptonOutsideFilmFrameBlankS";
4813 expression += TString("_") + frame_name;
4814 expression += "-kaptonInsideFilmFrameBlankS";
4815 expression += TString("_") + frame_name;
4816
4817 kaptonFilmFrameS->MakeNode(expression);
4818 kaptonFilmFrameS->ComputeBBox(); // need to compute a bounding box
4819 }
4820
4821 TGeoVolume* fiberglassFilmFrameV =
4822 new TGeoVolume(TString("fiberglassFilmFrameV") += TString("_") + frame_name, fiberglassFilmFrameS);
4823 TGeoVolume* epoxideFilmFrameV =
4824 new TGeoVolume(TString("epoxideFilmFrameV") += TString("_") + frame_name, epoxideFilmFrameS);
4825 TGeoVolume* kaptonFilmFrameV =
4826 new TGeoVolume(TString("kaptonFilmFrameV") += TString("_") + frame_name, kaptonFilmFrameS);
4827
4828 TGeoMedium* fiberglassFilmFrameV_medium = pMedFiberGlass;
4829 if (fiberglassFilmFrameV_medium) {
4830 fiberglassFilmFrameV->SetMedium(fiberglassFilmFrameV_medium);
4831 } else
4832 Fatal("Main", "Invalid medium for fiberglassFilmFrameV!");
4833
4834 TGeoMedium* epoxideFilmFrameV_medium = pMedEpoxideCompound;
4835 if (epoxideFilmFrameV_medium) {
4836 epoxideFilmFrameV->SetMedium(epoxideFilmFrameV_medium);
4837 } else
4838 Fatal("Main", "Invalid medium for epoxideFilmFrameV!");
4839
4840 TGeoMedium* kaptonFilmFrameV_medium = pMedKapton;
4841 if (kaptonFilmFrameV_medium) {
4842 kaptonFilmFrameV->SetMedium(kaptonFilmFrameV_medium);
4843 } else
4844 Fatal("Main", "Invalid medium for kaptonFilmFrameV!");
4845
4846 // volume visual property (transparency)
4847 fiberglassFilmFrameV->SetLineColor(TColor::GetColor("#88ff88"));
4848 fiberglassFilmFrameV->SetTransparency(0);
4849 epoxideFilmFrameV->SetLineColor(TColor::GetColor("#ccccff"));
4850 epoxideFilmFrameV->SetTransparency(0);
4851 kaptonFilmFrameV->SetLineColor(TColor::GetColor("#aeae22"));
4852 kaptonFilmFrameV->SetTransparency(0);
4853
4854 TGeoCombiTrans* kaptonFilmFrameV_transf1[4];
4855 kaptonFilmFrameV_transf1[0] = new TGeoCombiTrans();
4856 kaptonFilmFrameV_transf1[0]->SetDx(0.0);
4857 kaptonFilmFrameV_transf1[0]->SetDy(0.0);
4858 kaptonFilmFrameV_transf1[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06);
4859
4860 TGeoCombiTrans* epoxideFilmFrameV_transf1f[4];
4861 epoxideFilmFrameV_transf1f[0] = new TGeoCombiTrans();
4862 epoxideFilmFrameV_transf1f[0]->SetDx(0.0);
4863 epoxideFilmFrameV_transf1f[0]->SetDy(0.0);
4864 epoxideFilmFrameV_transf1f[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4865 - epoxideFilmFrame_ZSize * 0.5 + 0.06);
4866
4867 TGeoCombiTrans* epoxideFilmFrameV_transf1b[4];
4868 epoxideFilmFrameV_transf1b[0] = new TGeoCombiTrans();
4869 epoxideFilmFrameV_transf1b[0]->SetDx(0.0);
4870 epoxideFilmFrameV_transf1b[0]->SetDy(0.0);
4871 epoxideFilmFrameV_transf1b[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4872 + epoxideFilmFrame_ZSize * 0.5 + 0.06);
4873
4874 TGeoCombiTrans* fiberglassFilmFrameV_transf1f[4];
4875 fiberglassFilmFrameV_transf1f[0] = new TGeoCombiTrans();
4876 fiberglassFilmFrameV_transf1f[0]->SetDx(0.0);
4877 fiberglassFilmFrameV_transf1f[0]->SetDy(0.0);
4878 fiberglassFilmFrameV_transf1f[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4879 - epoxideFilmFrame_ZSize - fiberglassFilmFrame_ZSize * 0.5 + 0.06);
4880
4881 TGeoCombiTrans* fiberglassFilmFrameV_transf1b[4];
4882 fiberglassFilmFrameV_transf1b[0] = new TGeoCombiTrans();
4883 fiberglassFilmFrameV_transf1b[0]->SetDx(0.0);
4884 fiberglassFilmFrameV_transf1b[0]->SetDy(0.0);
4885 fiberglassFilmFrameV_transf1b[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4886 + epoxideFilmFrame_ZSize + fiberglassFilmFrame_ZSize * 0.5 + 0.06);
4887
4888 //-
4889 kaptonFilmFrameV_transf1[1] = new TGeoCombiTrans();
4890 kaptonFilmFrameV_transf1[1]->SetDx(0.0);
4891 kaptonFilmFrameV_transf1[1]->SetDy(0.0);
4892 kaptonFilmFrameV_transf1[1]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.306);
4893
4894 epoxideFilmFrameV_transf1f[1] = new TGeoCombiTrans();
4895 epoxideFilmFrameV_transf1f[1]->SetDx(0.0);
4896 epoxideFilmFrameV_transf1f[1]->SetDy(0.0);
4897 epoxideFilmFrameV_transf1f[1]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4898 - epoxideFilmFrame_ZSize * 0.5 + 0.06 + 0.306);
4899
4900 epoxideFilmFrameV_transf1b[1] = new TGeoCombiTrans();
4901 epoxideFilmFrameV_transf1b[1]->SetDx(0.0);
4902 epoxideFilmFrameV_transf1b[1]->SetDy(0.0);
4903 epoxideFilmFrameV_transf1b[1]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4904 + epoxideFilmFrame_ZSize * 0.5 + 0.06 + 0.306);
4905
4906 fiberglassFilmFrameV_transf1f[1] = new TGeoCombiTrans();
4907 fiberglassFilmFrameV_transf1f[1]->SetDx(0.0);
4908 fiberglassFilmFrameV_transf1f[1]->SetDy(0.0);
4909 fiberglassFilmFrameV_transf1f[1]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4910 - epoxideFilmFrame_ZSize - fiberglassFilmFrame_ZSize * 0.5 + 0.06 + 0.306);
4911
4912 fiberglassFilmFrameV_transf1b[1] = new TGeoCombiTrans();
4913 fiberglassFilmFrameV_transf1b[1]->SetDx(0.0);
4914 fiberglassFilmFrameV_transf1b[1]->SetDy(0.0);
4915 fiberglassFilmFrameV_transf1b[1]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4916 + epoxideFilmFrame_ZSize + fiberglassFilmFrame_ZSize * 0.5 + 0.06 + 0.306);
4917
4918 //-
4919 kaptonFilmFrameV_transf1[2] = new TGeoCombiTrans();
4920 kaptonFilmFrameV_transf1[2]->SetDx(0.0);
4921 kaptonFilmFrameV_transf1[2]->SetDy(0.0);
4922 kaptonFilmFrameV_transf1[2]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.559);
4923
4924 epoxideFilmFrameV_transf1f[2] = new TGeoCombiTrans();
4925 epoxideFilmFrameV_transf1f[2]->SetDx(0.0);
4926 epoxideFilmFrameV_transf1f[2]->SetDy(0.0);
4927 epoxideFilmFrameV_transf1f[2]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4928 - epoxideFilmFrame_ZSize * 0.5 + 0.06 + 0.559);
4929
4930 epoxideFilmFrameV_transf1b[2] = new TGeoCombiTrans();
4931 epoxideFilmFrameV_transf1b[2]->SetDx(0.0);
4932 epoxideFilmFrameV_transf1b[2]->SetDy(0.0);
4933 epoxideFilmFrameV_transf1b[2]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4934 + epoxideFilmFrame_ZSize * 0.5 + 0.06 + 0.559);
4935
4936 fiberglassFilmFrameV_transf1f[2] = new TGeoCombiTrans();
4937 fiberglassFilmFrameV_transf1f[2]->SetDx(0.0);
4938 fiberglassFilmFrameV_transf1f[2]->SetDy(0.0);
4939 fiberglassFilmFrameV_transf1f[2]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4940 - epoxideFilmFrame_ZSize - fiberglassFilmFrame_ZSize * 0.5 + 0.06 + 0.559);
4941
4942 fiberglassFilmFrameV_transf1b[2] = new TGeoCombiTrans();
4943 fiberglassFilmFrameV_transf1b[2]->SetDx(0.0);
4944 fiberglassFilmFrameV_transf1b[2]->SetDy(0.0);
4945 fiberglassFilmFrameV_transf1b[2]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4946 + epoxideFilmFrame_ZSize + fiberglassFilmFrame_ZSize * 0.5 + 0.06 + 0.559);
4947
4948 //-
4949 kaptonFilmFrameV_transf1[3] = new TGeoCombiTrans();
4950 kaptonFilmFrameV_transf1[3]->SetDx(0.0);
4951 kaptonFilmFrameV_transf1[3]->SetDy(0.0);
4952 kaptonFilmFrameV_transf1[3]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 + 0.763);
4953
4954 epoxideFilmFrameV_transf1f[3] = new TGeoCombiTrans();
4955 epoxideFilmFrameV_transf1f[3]->SetDx(0.0);
4956 epoxideFilmFrameV_transf1f[3]->SetDy(0.0);
4957 epoxideFilmFrameV_transf1f[3]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4958 - epoxideFilmFrame_ZSize * 0.5 + 0.06 + 0.763);
4959
4960 epoxideFilmFrameV_transf1b[3] = new TGeoCombiTrans();
4961 epoxideFilmFrameV_transf1b[3]->SetDx(0.0);
4962 epoxideFilmFrameV_transf1b[3]->SetDy(0.0);
4963 epoxideFilmFrameV_transf1b[3]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4964 + epoxideFilmFrame_ZSize * 0.5 + 0.06 + 0.763);
4965
4966 fiberglassFilmFrameV_transf1f[3] = new TGeoCombiTrans();
4967 fiberglassFilmFrameV_transf1f[3]->SetDx(0.0);
4968 fiberglassFilmFrameV_transf1f[3]->SetDy(0.0);
4969 fiberglassFilmFrameV_transf1f[3]->SetDz(-ZModuleSize_Station10x10 * 0.5 - kaptonFilmFrame_ZSize * 0.5
4970 - epoxideFilmFrame_ZSize - fiberglassFilmFrame_ZSize * 0.5 + 0.06 + 0.763);
4971
4972 fiberglassFilmFrameV_transf1b[3] = new TGeoCombiTrans();
4973 fiberglassFilmFrameV_transf1b[3]->SetDx(0.0);
4974 fiberglassFilmFrameV_transf1b[3]->SetDy(0.0);
4975 fiberglassFilmFrameV_transf1b[3]->SetDz(-ZModuleSize_Station10x10 * 0.5 + kaptonFilmFrame_ZSize * 0.5
4976 + epoxideFilmFrame_ZSize + fiberglassFilmFrame_ZSize * 0.5 + 0.06 + 0.763);
4977
4978 frames->AddNode(kaptonFilmFrameV, 0, kaptonFilmFrameV_transf1[0]);
4979 frames->AddNode(epoxideFilmFrameV, 0, epoxideFilmFrameV_transf1f[0]);
4980 frames->AddNode(epoxideFilmFrameV, 1, epoxideFilmFrameV_transf1b[0]);
4981 frames->AddNode(fiberglassFilmFrameV, 0, fiberglassFilmFrameV_transf1f[0]);
4982 frames->AddNode(fiberglassFilmFrameV, 1, fiberglassFilmFrameV_transf1b[0]);
4983
4984 frames->AddNode(kaptonFilmFrameV, 1, kaptonFilmFrameV_transf1[1]);
4985 frames->AddNode(epoxideFilmFrameV, 2, epoxideFilmFrameV_transf1f[1]);
4986 frames->AddNode(epoxideFilmFrameV, 3, epoxideFilmFrameV_transf1b[1]);
4987 frames->AddNode(fiberglassFilmFrameV, 2, fiberglassFilmFrameV_transf1f[1]);
4988 frames->AddNode(fiberglassFilmFrameV, 3, fiberglassFilmFrameV_transf1b[1]);
4989
4990 frames->AddNode(kaptonFilmFrameV, 2, kaptonFilmFrameV_transf1[2]);
4991 frames->AddNode(epoxideFilmFrameV, 4, epoxideFilmFrameV_transf1f[2]);
4992 frames->AddNode(epoxideFilmFrameV, 5, epoxideFilmFrameV_transf1b[2]);
4993 frames->AddNode(fiberglassFilmFrameV, 4, fiberglassFilmFrameV_transf1f[2]);
4994 frames->AddNode(fiberglassFilmFrameV, 5, fiberglassFilmFrameV_transf1b[2]);
4995
4996 frames->AddNode(kaptonFilmFrameV, 3, kaptonFilmFrameV_transf1[3]);
4997 frames->AddNode(epoxideFilmFrameV, 6, epoxideFilmFrameV_transf1f[3]);
4998 frames->AddNode(epoxideFilmFrameV, 7, epoxideFilmFrameV_transf1b[3]);
4999 frames->AddNode(fiberglassFilmFrameV, 6, fiberglassFilmFrameV_transf1f[3]);
5000 frames->AddNode(fiberglassFilmFrameV, 7, fiberglassFilmFrameV_transf1b[3]);
5001 //--------------------------------------------------------------------------
5002
5003 // upper cover --------------------------------------------------------------
5004 Double_t kaptonCover_XSize = 18.3; // cm
5005 Double_t kaptonCover_YSize = 18.3; // cm
5006 Double_t kaptonCover_ZSize = 0.005; // cm
5007
5008 Double_t insideFiberglassCover_XSize = 10.4; // cm
5009 Double_t insideFiberglassCover_YSize = 10.4; // cm
5010 Double_t outsideFiberglassCover_XSize = 18.3; // cm
5011 Double_t outsideFiberglassCover_YSize = 18.3; // cm
5012 Double_t outsideFiberglassCover_ZSize = 0.175; // cm
5013
5014 Double_t insideCopperCover_XSize = 10.4; // cm
5015 Double_t insideCopperCover_YSize = 10.4; // cm
5016 Double_t outsideCopperCover_XSize = 18.3; // cm
5017 Double_t outsideCopperCover_YSize = 18.3; // cm
5018 Double_t outsideCopperCover_ZSize = 0.007; // cm
5019
5020 TGeoShape* kaptonCoverS = new TGeoBBox(TString("kaptonCoverS") + TString("_") + frame_name, kaptonCover_XSize * 0.5,
5021 kaptonCover_YSize * 0.5, kaptonCover_ZSize * 0.5);
5022
5023 TGeoShape* fiberglassOutsideCoverBlankS = new TGeoBBox(
5024 TString("fiberglassOutsideCoverBlankS") + TString("_") + frame_name, outsideFiberglassCover_XSize * 0.5,
5025 outsideFiberglassCover_YSize * 0.5, outsideFiberglassCover_ZSize * 0.5);
5026 TGeoShape* fiberglassInsideCoverBlankS = new TGeoBBox(
5027 TString("fiberglassInsideCoverBlankS") + TString("_") + frame_name, insideFiberglassCover_XSize * 0.5,
5028 insideFiberglassCover_YSize * 0.5, outsideFiberglassCover_ZSize * 0.5 + 0.01);
5029
5030 TGeoShape* copperOutsideCoverBlankS =
5031 new TGeoBBox(TString("copperOutsideCoverBlankS") + TString("_") + frame_name, outsideCopperCover_XSize * 0.5,
5032 outsideCopperCover_YSize * 0.5, outsideCopperCover_ZSize * 0.5);
5033 TGeoShape* copperInsideCoverBlankS =
5034 new TGeoBBox(TString("copperInsideCoverBlankS") + TString("_") + frame_name, insideCopperCover_XSize * 0.5,
5035 insideCopperCover_YSize * 0.5, outsideCopperCover_ZSize * 0.5 + 0.01);
5036
5037 TGeoCompositeShape* fiberglassCoverS = new TGeoCompositeShape();
5038 fiberglassCoverS->SetName(TString("fiberglassCoverS") += TString("_") + frame_name);
5039 {
5040 TString expression = "fiberglassOutsideCoverBlankS";
5041 expression += TString("_") + frame_name;
5042 expression += "-fiberglassInsideCoverBlankS";
5043 expression += TString("_") + frame_name;
5044
5045 fiberglassCoverS->MakeNode(expression);
5046 fiberglassCoverS->ComputeBBox(); // need to compute a bounding box
5047 }
5048
5049 TGeoCompositeShape* copperCoverS = new TGeoCompositeShape();
5050 copperCoverS->SetName(TString("copperCoverS") += TString("_") + frame_name);
5051 {
5052 TString expression = "copperOutsideCoverBlankS";
5053 expression += TString("_") + frame_name;
5054 expression += "-copperInsideCoverBlankS";
5055 expression += TString("_") + frame_name;
5056
5057 copperCoverS->MakeNode(expression);
5058 copperCoverS->ComputeBBox(); // need to compute a bounding box
5059 }
5060
5061 TGeoVolume* kaptonCoverV = new TGeoVolume(TString("kaptonCoverV") += TString("_") + frame_name, kaptonCoverS);
5062 TGeoVolume* fiberglassCoverV =
5063 new TGeoVolume(TString("fiberglassCoverV") += TString("_") + frame_name, fiberglassCoverS);
5064 TGeoVolume* copperCoverV = new TGeoVolume(TString("copperCoverV") += TString("_") + frame_name, copperCoverS);
5065
5066 TGeoMedium* kaptonCoverV_medium = pMedKapton;
5067 if (kaptonCoverV_medium) {
5068 kaptonCoverV->SetMedium(kaptonCoverV_medium);
5069 } else
5070 Fatal("Main", "Invalid medium for kaptonCoverV!");
5071
5072 TGeoMedium* fiberglassCoverV_medium = pMedFiberGlass;
5073 if (fiberglassCoverV_medium) {
5074 fiberglassCoverV->SetMedium(fiberglassCoverV_medium);
5075 } else
5076 Fatal("Main", "Invalid medium for fiberglassCoverV!");
5077
5078 TGeoMedium* copperCoverV_medium = pMedKapton;
5079 if (copperCoverV_medium) {
5080 copperCoverV->SetMedium(copperCoverV_medium);
5081 } else
5082 Fatal("Main", "Invalid medium for copperCoverV!");
5083
5084 kaptonCoverV->SetLineColor(TColor::GetColor("#aeae22"));
5085 kaptonCoverV->SetTransparency(0);
5086 fiberglassCoverV->SetLineColor(TColor::GetColor("#88ff88"));
5087 fiberglassCoverV->SetTransparency(0);
5088 copperCoverV->SetLineColor(TColor::GetColor("#ff7538"));
5089 copperCoverV->SetTransparency(0);
5090
5091 TGeoCombiTrans* kaptonCoverV_transf[1];
5092 kaptonCoverV_transf[0] = new TGeoCombiTrans();
5093 kaptonCoverV_transf[0]->SetDx(0.0);
5094 kaptonCoverV_transf[0]->SetDy(0.0);
5095 kaptonCoverV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228);
5096
5097 TGeoCombiTrans* fiberglassCoverV_transf[1];
5098 fiberglassCoverV_transf[0] = new TGeoCombiTrans();
5099 fiberglassCoverV_transf[0]->SetDx(0.0);
5100 fiberglassCoverV_transf[0]->SetDy(0.0);
5101 fiberglassCoverV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 - kaptonCover_ZSize * 0.5
5102 - outsideFiberglassCover_ZSize * 0.5);
5103
5104 TGeoCombiTrans* copperCoverV_transf[1];
5105 copperCoverV_transf[0] = new TGeoCombiTrans();
5106 copperCoverV_transf[0]->SetDx(0.0);
5107 copperCoverV_transf[0]->SetDy(0.0);
5108 copperCoverV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 - kaptonCover_ZSize * 0.5
5109 - outsideFiberglassCover_ZSize - outsideCopperCover_ZSize * 0.5);
5110
5111 frames->AddNode(kaptonCoverV, 0, kaptonCoverV_transf[0]);
5112 frames->AddNode(fiberglassCoverV, 0, fiberglassCoverV_transf[0]);
5113 frames->AddNode(copperCoverV, 0, copperCoverV_transf[0]);
5114 //--------------------------------------------------------------------------
5115
5116 // side frame ---------------------------------------------------------------
5117 Double_t insideSteelSideFrame_XSize = 14.9; // cm
5118 Double_t insideSteelSideFrame_YSize = 14.9; // cm
5119 Double_t outsideSteelSideFrame_XSize = 18.0; // cm
5120 Double_t outsideSteelSideFrame_YSize = 18.0; // cm
5121 Double_t outsideSteelSideFrame_ZSize = 0.03; // cm
5122
5123 Double_t insideFiberglassSideFrame_XSize = 14.9; // cm
5124 Double_t insideFiberglassSideFrame_YSize = 14.9; // cm
5125 Double_t outsideFiberglassSideFrame_XSize = 18.0; // cm
5126 Double_t outsideFiberglassSideFrame_YSize = 18.0; // cm
5127 Double_t outsideFiberglassSideFrame_ZSize = 1.2; // cm
5128
5129 TGeoShape* steelOutsideSideFrameBlankS = new TGeoBBox(
5130 TString("steelOutsideSideFrameBlankS") + TString("_") + frame_name, outsideSteelSideFrame_XSize * 0.5,
5131 outsideSteelSideFrame_YSize * 0.5, outsideSteelSideFrame_ZSize * 0.5);
5132 TGeoShape* steelInsideSideFrameBlankS = new TGeoBBox(
5133 TString("steelInsideSideFrameBlankS") + TString("_") + frame_name, insideSteelSideFrame_XSize * 0.5,
5134 insideSteelSideFrame_YSize * 0.5, outsideSteelSideFrame_ZSize * 0.5 + 0.01);
5135
5136 TGeoShape* fiberglassOutsideSideFrameBlankS = new TGeoBBox(
5137 TString("fiberglassOutsideSideFrameBlankS") + TString("_") + frame_name, outsideFiberglassSideFrame_XSize * 0.5,
5138 outsideFiberglassSideFrame_YSize * 0.5, outsideFiberglassSideFrame_ZSize * 0.5);
5139 TGeoShape* fiberglassInsideSideFrameBlankS = new TGeoBBox(
5140 TString("fiberglassInsideSideFrameBlankS") + TString("_") + frame_name, insideFiberglassSideFrame_XSize * 0.5,
5141 insideFiberglassSideFrame_YSize * 0.5, outsideFiberglassSideFrame_ZSize * 0.5 + 0.01);
5142
5143 TGeoCompositeShape* steelSideFrameS = new TGeoCompositeShape();
5144 steelSideFrameS->SetName(TString("steelSideFrameS") += TString("_") + frame_name);
5145 {
5146 TString expression = "steelOutsideSideFrameBlankS";
5147 expression += TString("_") + frame_name;
5148 expression += "-steelInsideSideFrameBlankS";
5149 expression += TString("_") + frame_name;
5150
5151 steelSideFrameS->MakeNode(expression);
5152 steelSideFrameS->ComputeBBox(); // need to compute a bounding box
5153 }
5154
5155 TGeoCompositeShape* fiberglassSideFrameS = new TGeoCompositeShape();
5156 fiberglassSideFrameS->SetName(TString("fiberglassSideFrameS") += TString("_") + frame_name);
5157 {
5158 TString expression = "fiberglassOutsideSideFrameBlankS";
5159 expression += TString("_") + frame_name;
5160 expression += "-fiberglassInsideSideFrameBlankS";
5161 expression += TString("_") + frame_name;
5162
5163 fiberglassSideFrameS->MakeNode(expression);
5164 fiberglassSideFrameS->ComputeBBox(); // need to compute a bounding box
5165 }
5166
5167 TGeoVolume* steelSideFrameV =
5168 new TGeoVolume(TString("steelSideFrameV") += TString("_") + frame_name, steelSideFrameS);
5169 TGeoVolume* fiberglassSideFrameV =
5170 new TGeoVolume(TString("fiberglassSideFrameV") += TString("_") + frame_name, fiberglassSideFrameS);
5171
5172 TGeoMedium* steelSideFrameV_medium = pMedSteel;
5173 if (steelSideFrameV_medium) {
5174 steelSideFrameV->SetMedium(steelSideFrameV_medium);
5175 } else
5176 Fatal("Main", "Invalid medium for steelSideFrameV!");
5177
5178 TGeoMedium* fiberglassSideFrameV_medium = pMedFiberGlass;
5179 if (fiberglassSideFrameV_medium) {
5180 fiberglassSideFrameV->SetMedium(fiberglassSideFrameV_medium);
5181 } else
5182 Fatal("Main", "Invalid medium for fiberglassSideFrameV!");
5183
5184 steelSideFrameV->SetLineColor(TColor::GetColor("#42aaff"));
5185 steelSideFrameV->SetTransparency(0);
5186
5187 fiberglassSideFrameV->SetLineColor(TColor::GetColor("#88ff88"));
5188 fiberglassSideFrameV->SetTransparency(0);
5189
5190 TGeoCombiTrans* steelSideFrameV_transf[1];
5191 steelSideFrameV_transf[0] = new TGeoCombiTrans();
5192 steelSideFrameV_transf[0]->SetDx(0.0);
5193 steelSideFrameV_transf[0]->SetDy(0.0);
5194 steelSideFrameV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5
5195 + outsideSteelSideFrame_ZSize * 0.5);
5196
5197 TGeoCombiTrans* fiberglassSideFrameV_transf[1];
5198 fiberglassSideFrameV_transf[0] = new TGeoCombiTrans();
5199 fiberglassSideFrameV_transf[0]->SetDx(0.0);
5200 fiberglassSideFrameV_transf[0]->SetDy(0.0);
5201 fiberglassSideFrameV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228
5202 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5203 + outsideFiberglassSideFrame_ZSize * 0.5);
5204
5205 frames->AddNode(steelSideFrameV, 0, steelSideFrameV_transf[0]);
5206 frames->AddNode(fiberglassSideFrameV, 0, fiberglassSideFrameV_transf[0]);
5207 //--------------------------------------------------------------------------
5208
5209 // support plane ------------------------------------------------------------
5210 Double_t copperSupportPlane_XSize = 24.0; // cm
5211 Double_t copperSupportPlane_YSize = 24.0; // cm
5212 Double_t copperSupportPlane_ZSize = 0.001; // cm
5213
5214 Double_t kaptonSupportPlane_XSize = 24.0; // cm
5215 Double_t kaptonSupportPlane_YSize = 24.0; // cm
5216 Double_t kaptonSupportPlane_ZSize = 0.005; // cm
5217
5218 Double_t fiberglassSupportPlane_XSize = 24.0; // cm
5219 Double_t fiberglassSupportPlane_YSize = 24.0; // cm
5220 Double_t fiberglassSupportPlane_ZSize = 0.17; // cm
5221
5222 TGeoShape* copperSupportPlaneS =
5223 new TGeoBBox(TString("copperSupportPlaneS") + TString("_") + frame_name, copperSupportPlane_XSize * 0.5,
5224 copperSupportPlane_YSize * 0.5, copperSupportPlane_ZSize * 0.5);
5225 TGeoShape* kaptonSupportPlaneS =
5226 new TGeoBBox(TString("kaptonSupportPlaneS") + TString("_") + frame_name, kaptonSupportPlane_XSize * 0.5,
5227 kaptonSupportPlane_YSize * 0.5, kaptonSupportPlane_ZSize * 0.5);
5228 TGeoShape* fiberglassSupportPlaneS =
5229 new TGeoBBox(TString("fiberglassSupportPlaneS") + TString("_") + frame_name, fiberglassSupportPlane_XSize * 0.5,
5230 fiberglassSupportPlane_YSize * 0.5, fiberglassSupportPlane_ZSize * 0.5);
5231
5232 TGeoVolume* copperSupportPlaneV =
5233 new TGeoVolume(TString("copperSupportPlaneV") += TString("_") + frame_name, copperSupportPlaneS);
5234 TGeoVolume* kaptonSupportPlaneV =
5235 new TGeoVolume(TString("kaptonSupportPlaneV") += TString("_") + frame_name, kaptonSupportPlaneS);
5236 TGeoVolume* fiberglassSupportPlaneV =
5237 new TGeoVolume(TString("fiberglassSupportPlaneV") += TString("_") + frame_name, fiberglassSupportPlaneS);
5238
5239 TGeoMedium* copperSupportPlaneV_medium = pMedCopper;
5240 if (copperSupportPlaneV_medium) {
5241 copperSupportPlaneV->SetMedium(copperSupportPlaneV_medium);
5242 } else
5243 Fatal("Main", "Invalid medium for copperSupportPlaneV!");
5244
5245 TGeoMedium* kaptonSupportPlaneV_medium = pMedKapton;
5246 if (kaptonSupportPlaneV_medium) {
5247 kaptonSupportPlaneV->SetMedium(kaptonSupportPlaneV_medium);
5248 } else
5249 Fatal("Main", "Invalid medium for kaptonSupportPlaneV!");
5250
5251 TGeoMedium* fiberglassSupportPlaneV_medium = pMedFiberGlass;
5252 if (fiberglassSupportPlaneV_medium) {
5253 fiberglassSupportPlaneV->SetMedium(fiberglassSupportPlaneV_medium);
5254 } else
5255 Fatal("Main", "Invalid medium for fiberglassSupportPlaneV!");
5256
5257 copperSupportPlaneV->SetLineColor(TColor::GetColor("#ff7538"));
5258 copperSupportPlaneV->SetTransparency(0);
5259 kaptonSupportPlaneV->SetLineColor(TColor::GetColor("#aeae22"));
5260 kaptonSupportPlaneV->SetTransparency(0);
5261 fiberglassSupportPlaneV->SetLineColor(TColor::GetColor("#88ff88"));
5262 fiberglassSupportPlaneV->SetTransparency(0);
5263
5264 TGeoCombiTrans* copperSupportPlaneV_transf[1];
5265 copperSupportPlaneV_transf[0] = new TGeoCombiTrans();
5266 copperSupportPlaneV_transf[0]->SetDx(0.0);
5267 copperSupportPlaneV_transf[0]->SetDy(0.0);
5268 copperSupportPlaneV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228
5269 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5270 + outsideFiberglassSideFrame_ZSize + copperSupportPlane_ZSize * 0.5);
5271
5272 TGeoCombiTrans* kaptonSupportPlaneV_transf[1];
5273 kaptonSupportPlaneV_transf[0] = new TGeoCombiTrans();
5274 kaptonSupportPlaneV_transf[0]->SetDx(0.0);
5275 kaptonSupportPlaneV_transf[0]->SetDy(0.0);
5276 kaptonSupportPlaneV_transf[0]->SetDz(
5277 -ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5278 + outsideFiberglassSideFrame_ZSize + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize * 0.5);
5279
5280 TGeoCombiTrans* fiberglassSupportPlaneV_transf[1];
5281 fiberglassSupportPlaneV_transf[0] = new TGeoCombiTrans();
5282 fiberglassSupportPlaneV_transf[0]->SetDx(0.0);
5283 fiberglassSupportPlaneV_transf[0]->SetDy(0.0);
5284 fiberglassSupportPlaneV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228
5285 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5286 + outsideFiberglassSideFrame_ZSize + copperSupportPlane_ZSize
5287 + kaptonSupportPlane_ZSize + fiberglassSupportPlane_ZSize * 0.5);
5288
5289 frames->AddNode(copperSupportPlaneV, 0, copperSupportPlaneV_transf[0]);
5290 frames->AddNode(kaptonSupportPlaneV, 0, kaptonSupportPlaneV_transf[0]);
5291 frames->AddNode(fiberglassSupportPlaneV, 0, fiberglassSupportPlaneV_transf[0]);
5292 //--------------------------------------------------------------------------
5293
5294 // fiberglass base ----------------------------------------------------------
5295 Double_t fiberglassBase_XSize = 70.0; // cm
5296 Double_t fiberglassBase_YSize = 40.5; // cm
5297 Double_t fiberglassBase_ZSize = 0.225; // cm
5298
5299 Double_t fiberglassBaseWindow_XSize = 11.0; // cm
5300 Double_t fiberglassBaseWindow_YSize = 11.5; // cm
5301 Double_t fiberglassBaseWindow_ZSize = 0.225; // cm
5302
5303 Double_t fiberglassBaseWindow_YShift = 4.25; // cm
5304
5305 TGeoShape* fiberglassBaseBlankS =
5306 new TGeoBBox(TString("fiberglassBaseBlankS") + TString("_") + frame_name, fiberglassBase_XSize * 0.5,
5307 fiberglassBase_YSize * 0.5, fiberglassBase_ZSize * 0.5);
5308 TGeoShape* fiberglassBaseWindowS =
5309 new TGeoBBox(TString("fiberglassBaseWindowS") + TString("_") + frame_name, fiberglassBaseWindow_XSize * 0.5,
5310 fiberglassBaseWindow_YSize * 0.5, fiberglassBaseWindow_ZSize * 0.5 + 0.01);
5311
5312 TGeoTranslation* fiberglassBaseWindow_pos = new TGeoTranslation();
5313 fiberglassBaseWindow_pos->SetName(TString("fiberglassBaseWindow_pos") + TString("_") + frame_name);
5314 fiberglassBaseWindow_pos->SetDx(0.0);
5315 fiberglassBaseWindow_pos->SetDy(fiberglassBaseWindow_YShift);
5316 fiberglassBaseWindow_pos->SetDz(0.0);
5317 fiberglassBaseWindow_pos->RegisterYourself();
5318
5319 TGeoCompositeShape* fiberglassBaseS = new TGeoCompositeShape();
5320 fiberglassBaseS->SetName(TString("fiberglassBaseS") += TString("_") + frame_name);
5321 {
5322 TString expression = "fiberglassBaseBlankS";
5323 expression += TString("_") + frame_name;
5324 expression += ":fiberglassBaseWindow_pos";
5325 expression += TString("_") + frame_name;
5326 expression += "-fiberglassBaseWindowS";
5327 expression += TString("_") + frame_name;
5328
5329 fiberglassBaseS->MakeNode(expression);
5330 fiberglassBaseS->ComputeBBox(); // need to compute a bounding box
5331 }
5332
5333 TGeoVolume* fiberglassBaseV =
5334 new TGeoVolume(TString("fiberglassBaseV") += TString("_") + frame_name, fiberglassBaseS);
5335
5336 TGeoMedium* fiberglassBaseV_medium = pMedFiberGlass;
5337 if (fiberglassBaseV_medium) {
5338 fiberglassBaseV->SetMedium(fiberglassBaseV_medium);
5339 } else
5340 Fatal("Main", "Invalid medium for fiberglassBaseV!");
5341
5342 fiberglassBaseV->SetLineColor(TColor::GetColor("#88ffaa"));
5343 fiberglassBaseV->SetTransparency(0);
5344
5345 TGeoCombiTrans* fiberglassBaseV_transf[1];
5346 fiberglassBaseV_transf[0] = new TGeoCombiTrans();
5347 fiberglassBaseV_transf[0]->SetDx(0.0);
5348 fiberglassBaseV_transf[0]->SetDy(0.0);
5349 fiberglassBaseV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5
5350 + outsideSteelSideFrame_ZSize + outsideFiberglassSideFrame_ZSize
5351 + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize
5352 + fiberglassSupportPlane_ZSize + fiberglassBase_ZSize * 0.5 + 0.3);
5353
5354 frames->AddNode(fiberglassBaseV, 0, fiberglassBaseV_transf[0]);
5355 //--------------------------------------------------------------------------
5356
5357 // bottom PCB ---------------------------------------------------------------
5358 Double_t bottomPCB_XSize = 7.0; // cm
5359 Double_t bottomPCB_YSize = 13.5; // cm
5360 Double_t bottomPCB_ZSize = 0.15; // cm
5361
5362 TGeoShape* bottomPCBS = new TGeoBBox(TString("bottomPCBS") + TString("_") + frame_name, bottomPCB_XSize * 0.5,
5363 bottomPCB_YSize * 0.5, bottomPCB_ZSize * 0.5);
5364
5365 TGeoVolume* bottomPCBV = new TGeoVolume(TString("bottomPCBV") += TString("_") + frame_name, bottomPCBS);
5366
5367 TGeoMedium* bottomPCBV_medium = pMedFiberGlass;
5368 if (bottomPCBV_medium) {
5369 bottomPCBV->SetMedium(bottomPCBV_medium);
5370 } else
5371 Fatal("Main", "Invalid medium for bottomPCBV!");
5372
5373 bottomPCBV->SetLineColor(TColor::GetColor("#88ff88"));
5374 bottomPCBV->SetTransparency(0);
5375
5376 TGeoCombiTrans* bottomPCBV_transf[2];
5377 bottomPCBV_transf[0] = new TGeoCombiTrans();
5378 bottomPCBV_transf[0]->SetDx(+18.0 - bottomPCB_XSize * 0.5);
5379 bottomPCBV_transf[0]->SetDy(0.0);
5380 bottomPCBV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5
5381 + outsideSteelSideFrame_ZSize + outsideFiberglassSideFrame_ZSize
5382 + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize + fiberglassSupportPlane_ZSize
5383 + 0.3 - bottomPCB_ZSize * 0.5 - 0.776);
5384
5385 bottomPCBV_transf[1] = new TGeoCombiTrans();
5386 bottomPCBV_transf[1]->SetDx(+18.0 - bottomPCB_XSize * 0.5);
5387 bottomPCBV_transf[1]->SetDy(0.0);
5388 bottomPCBV_transf[1]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5
5389 + outsideSteelSideFrame_ZSize + outsideFiberglassSideFrame_ZSize
5390 + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize + fiberglassSupportPlane_ZSize
5391 + 0.3 - bottomPCB_ZSize * 0.5 - 0.776);
5392 bottomPCBV_transf[1]->RotateZ(90.0);
5393
5394 frames->AddNode(bottomPCBV, 0, bottomPCBV_transf[0]);
5395 frames->AddNode(bottomPCBV, 1, bottomPCBV_transf[1]);
5396 //--------------------------------------------------------------------------
5397
5398 // amplifier PCB ------------------------------------------------------------
5399 Double_t amplifierPCB_XSize = 0.15; // cm
5400 Double_t amplifierPCB_YSize = 13.5; // cm
5401 Double_t amplifierPCB_ZSize = 8.5; // cm
5402
5403 TGeoShape* amplifierPCBS =
5404 new TGeoBBox(TString("amplifierPCBS") + TString("_") + frame_name, amplifierPCB_XSize * 0.5,
5405 amplifierPCB_YSize * 0.5, amplifierPCB_ZSize * 0.5);
5406
5407 TGeoVolume* amplifierPCBV = new TGeoVolume(TString("amplifierPCBV") += TString("_") + frame_name, amplifierPCBS);
5408
5409 TGeoMedium* amplifierPCBV_medium = pMedFiberGlass;
5410 if (amplifierPCBV_medium) {
5411 amplifierPCBV->SetMedium(amplifierPCBV_medium);
5412 } else
5413 Fatal("Main", "Invalid medium for amplifierPCBV!");
5414
5415 amplifierPCBV->SetLineColor(TColor::GetColor("#88ff88"));
5416 amplifierPCBV->SetTransparency(0);
5417
5418 TGeoCombiTrans* amplifierPCBV_transf[2];
5419 amplifierPCBV_transf[0] = new TGeoCombiTrans();
5420 amplifierPCBV_transf[0]->SetDx(+18.0 - amplifierPCB_XSize * 0.5 - 0.9);
5421 amplifierPCBV_transf[0]->SetDy(0.0);
5422 amplifierPCBV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5
5423 + outsideSteelSideFrame_ZSize + outsideFiberglassSideFrame_ZSize
5424 + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize + fiberglassSupportPlane_ZSize
5425 + 0.3 - bottomPCB_ZSize - 0.776 - amplifierPCB_ZSize * 0.5);
5426
5427 amplifierPCBV_transf[1] = new TGeoCombiTrans();
5428 amplifierPCBV_transf[1]->SetDx(+18.0 - amplifierPCB_XSize * 0.5 - 0.9);
5429 amplifierPCBV_transf[1]->SetDy(0.0);
5430 amplifierPCBV_transf[1]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5
5431 + outsideSteelSideFrame_ZSize + outsideFiberglassSideFrame_ZSize
5432 + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize + fiberglassSupportPlane_ZSize
5433 + 0.3 - bottomPCB_ZSize - 0.776 - amplifierPCB_ZSize * 0.5);
5434 amplifierPCBV_transf[1]->RotateZ(90.0);
5435
5436 frames->AddNode(amplifierPCBV, 0, amplifierPCBV_transf[0]);
5437 frames->AddNode(amplifierPCBV, 1, amplifierPCBV_transf[1]);
5438 //--------------------------------------------------------------------------
5439
5440 // amplifier support --------------------------------------------------------
5441 Double_t amplifierSupport_XSize = 5.0; // cm
5442 Double_t amplifierSupport_YSize = 0.2; // cm
5443 Double_t amplifierSupport_ZSize = 14.5; // cm
5444
5445 TGeoShape* amplifierSupportS =
5446 new TGeoBBox(TString("amplifierSupportS") + TString("_") + frame_name, amplifierSupport_XSize * 0.5,
5447 amplifierSupport_YSize * 0.5, amplifierSupport_ZSize * 0.5);
5448
5449 TGeoVolume* amplifierSupportV =
5450 new TGeoVolume(TString("amplifierSupportV") += TString("_") + frame_name, amplifierSupportS);
5451
5452 TGeoMedium* amplifierSupportV_medium = pMedAluminium;
5453 if (amplifierSupportV_medium) {
5454 amplifierSupportV->SetMedium(amplifierSupportV_medium);
5455 } else
5456 Fatal("Main", "Invalid medium for amplifierSupportV!");
5457
5458 amplifierSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
5459 amplifierSupportV->SetTransparency(0);
5460
5461 TGeoCombiTrans* amplifierSupportV_transf[4];
5462 amplifierSupportV_transf[0] = new TGeoCombiTrans();
5463 amplifierSupportV_transf[0]->SetDx(+23.7 - amplifierSupport_XSize * 0.5);
5464 amplifierSupportV_transf[0]->SetDy(-5.0 + amplifierSupport_YSize * 0.5);
5465 amplifierSupportV_transf[0]->SetDz(
5466 -ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5467 + outsideFiberglassSideFrame_ZSize + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize
5468 + fiberglassSupportPlane_ZSize + 0.3 - bottomPCB_ZSize - amplifierSupport_ZSize * 0.5);
5469
5470 amplifierSupportV_transf[1] = new TGeoCombiTrans();
5471 amplifierSupportV_transf[1]->SetDx(+23.7 - amplifierSupport_XSize * 0.5);
5472 amplifierSupportV_transf[1]->SetDy(-5.0 + amplifierSupport_YSize * 0.5 + 7.0);
5473 amplifierSupportV_transf[1]->SetDz(
5474 -ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5475 + outsideFiberglassSideFrame_ZSize + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize
5476 + fiberglassSupportPlane_ZSize + 0.3 - bottomPCB_ZSize - amplifierSupport_ZSize * 0.5);
5477
5478 amplifierSupportV_transf[2] = new TGeoCombiTrans();
5479 amplifierSupportV_transf[2]->SetDx(+23.7 - amplifierSupport_XSize * 0.5);
5480 amplifierSupportV_transf[2]->SetDy(-5.0 + amplifierSupport_YSize * 0.5);
5481 amplifierSupportV_transf[2]->SetDz(
5482 -ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5483 + outsideFiberglassSideFrame_ZSize + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize
5484 + fiberglassSupportPlane_ZSize + 0.3 - bottomPCB_ZSize - amplifierSupport_ZSize * 0.5);
5485 amplifierSupportV_transf[2]->RotateZ(90.0);
5486
5487 amplifierSupportV_transf[3] = new TGeoCombiTrans();
5488 amplifierSupportV_transf[3]->SetDx(+23.7 - amplifierSupport_XSize * 0.5);
5489 amplifierSupportV_transf[3]->SetDy(-5.0 + amplifierSupport_YSize * 0.5 + 7.0);
5490 amplifierSupportV_transf[3]->SetDz(
5491 -ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5 + outsideSteelSideFrame_ZSize
5492 + outsideFiberglassSideFrame_ZSize + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize
5493 + fiberglassSupportPlane_ZSize + 0.3 - bottomPCB_ZSize - amplifierSupport_ZSize * 0.5);
5494 amplifierSupportV_transf[3]->RotateZ(90.0);
5495
5496 frames->AddNode(amplifierSupportV, 0, amplifierSupportV_transf[0]);
5497 frames->AddNode(amplifierSupportV, 1, amplifierSupportV_transf[1]);
5498 frames->AddNode(amplifierSupportV, 2, amplifierSupportV_transf[2]);
5499 frames->AddNode(amplifierSupportV, 3, amplifierSupportV_transf[3]);
5500 //--------------------------------------------------------------------------
5501
5502 // long PCB -----------------------------------------------------------------
5503 Double_t longPCB_XSize = 0.2; // cm
5504 Double_t longPCB_YSize = 35.0; // cm
5505 Double_t longPCB_ZSize = 4.0; // cm
5506
5507 TGeoShape* longPCBS = new TGeoBBox(TString("longPCBS") + TString("_") + frame_name, longPCB_XSize * 0.5,
5508 longPCB_YSize * 0.5, longPCB_ZSize * 0.5);
5509
5510 TGeoVolume* longPCBV = new TGeoVolume(TString("longPCBV") += TString("_") + frame_name, longPCBS);
5511
5512 TGeoMedium* longPCBV_medium = pMedFiberGlass;
5513 if (longPCBV_medium) {
5514 longPCBV->SetMedium(longPCBV_medium);
5515 } else
5516 Fatal("Main", "Invalid medium for longPCBV!");
5517
5518 longPCBV->SetLineColor(TColor::GetColor("#88ff88"));
5519 longPCBV->SetTransparency(0);
5520
5521 TGeoCombiTrans* longPCBV_transf[4];
5522 longPCBV_transf[0] = new TGeoCombiTrans();
5523 longPCBV_transf[0]->SetDx(+23.7 + longPCB_XSize * 0.5);
5524 longPCBV_transf[0]->SetDy(-13.0 + longPCB_YSize * 0.5);
5525 longPCBV_transf[0]->SetDz(-ZModuleSize_Station10x10 * 0.5 + 0.06 - 0.228 + fiberglassFilmFrame_ZSize * 0.5
5526 + outsideSteelSideFrame_ZSize + outsideFiberglassSideFrame_ZSize
5527 + copperSupportPlane_ZSize + kaptonSupportPlane_ZSize + fiberglassSupportPlane_ZSize + 0.3
5528 - bottomPCB_ZSize - 14.5 + longPCB_ZSize * 0.5);
5529
5530 frames->AddNode(longPCBV, 0, longPCBV_transf[0]);
5531 //--------------------------------------------------------------------------
5532
5533 return frames;
5534}
5535//------------------------------------------------------------------------------
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 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 RotateZ(Double_t angle) 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
TGeoMedium * pMedAir
const Double_t YStationPositions[NStations]
const Double_t ZModuleSize_Station163x45
const Double_t YModuleSize_Station163x45
TGeoMedium * pMedCarbon
TGeoManager * gGeoMan
const Int_t NMaxModules
const Double_t ZStationPositions[NStations]
TGeoMedium * pMedArCO27030
const Int_t NStations
const Double_t XModuleSize_Station163x45
TGeoMedium * pMedFiberGlass
const Double_t XStationPositions[NStations]
TGeoMedium * pMedCopper
const Double_t yShift[NStations]
const Double_t xShift[NStations]
const Bool_t XStationRotations[NStations]
const Double_t zShift[NStations]
const Bool_t YStationRotations[NStations]
TGeoMedium * pMedBrass
TGeoMedium * pMedHoneyComb
TGeoMedium * pMedEpoxideCompound
const Double_t ZModuleSize_Station10x10
const Double_t XModuleSize_Station10x10
const Double_t YModuleSize_Station10x10
const Double_t XModuleSize_Station163x39
const Double_t YModuleSize_Station163x39
const Double_t ZGEMSize_Station163x39
const Double_t ZModuleSize_Station163x39
TGeoMedium * pMedSteel
TGeoMedium * pMedKapton
TGeoMedium * pMedGlue
const Double_t ZGEMSize_Station163x45
TGeoMedium * pMedPolyamide
TGeoMedium * pMedPolyacetal
TGeoVolume * CreateLayersForModule_Station163x39(TString layer_name)
TGeoVolume * CreateLayersForModule_Station163x45(TString layer_name)
TGeoVolume * CreateLayersForModule_Station10x10(TString layer_name)
TGeoVolume * CreateFrameForHalfPlane_Station163x39(TString frame_name)
TGeoVolume * CreateModule_Station10x10(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize)
TGeoVolume * CreateFrameForModule_Station10x10(TString frame_name)
const Bool_t DETAILED_ROOT_GEOMETRY
TGeoVolume * CreateStation(TString station_name)
void create_rootgeom_GEMS_Run9_v2()
TGeoVolume * CreateModule_Station163x45(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize, Double_t hole_radius)
TGeoVolume * CreateFrameForHalfPlane_Station163x45(TString frame_name)
void DefineRequiredMedia(FairGeoMedia *geoMedia, FairGeoBuilder *geoBuild)
TGeoVolume * CreateModule_Station163x39(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize, Double_t hole_radius)
TGeoMedium * pMedArC4H10_80_20
TGeoMedium * pMedAluminium