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