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