BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_GEMS_RunSRCSpring2018_detailed.C
Go to the documentation of this file.
1/*
2 * Use this macro to create detailed
3 * ROOT geometry for the RunSRCSpring2018 configuration
4 * (BM@N RUN-7:SRC) with passive volumes (frames, al. cable supports, ...)
5 *
6 * Created: 29.09.2020
7 * 02.03.2021 (Updated): radius of hole in active zone (4.0 -> 6.0 cm)
8 * 22.03.2021 (Updated): material layers and frames for inclined small GEMs added
9 * Author: Baranov D.
10 */
11
12#include "TGeoVolume.h"
13
14// Set Parameters of GEMS -------------------------------------------------------
15const Int_t NStations = 10; // stations in the detector
16const Int_t NMaxModules = 2; // max. number of modules in a station
17
18//(X-Y-Z)Positions of stations (sensitive volumes)
19// const Double_t XStationPositions[NStations] = { 0.0 /*0*/, 0.0 /*1*/, 0.0 /*2*/, 0.0 /*3*/, 0.0 /*4*/, 0.0 /*5*/, 0.0
20// /*6*/, 0.0 /*7*/, 0.0 /*8*/, 0.0 /*9*/ }; const Double_t YStationPositions[NStations] = { 0.0 /*0*/, 0.0 /*1*/, 0.0
21// /*2*/, 0.0 /*3*/, 0.0 /*4*/, 0.0 /*5*/, 0.0 /*6*/, 0.0 /*7*/, 0.0 /*8*/, 0.0 /*9*/ }; const Double_t
22// ZStationPositions[NStations] = { 0.0 /*0*/, 0.0 /*1*/, 0.0 /*2*/, 0.0 /*3*/, 0.0 /*4*/, 0.0 /*5*/, 0.0 /*6*/, 0.0
23// /*7*/, 0.0 /*8*/, 0.0 /*9*/ };
24
25//(X-Y-Z)Positions of stations (sensitive volumes) -----------------------------
27 +117.22007, // station 0 (left side: upper GEM M4)
28 +117.27807, // station 1 (left side: lower GEM M3)
29 -117.51723, // station 2 (right side: upper GEM M1)
30 -115.31016, // station 3 (right side: lower GEM M2)
31 +1.0055, // station 4 (GEM M10)
32 +1.4715, // station 5 (GEM M7)
33 +2.1145, // station 6 (GEM M5)
34 +2.9225, // station 7 (GEM M6)
35 +3.6775, // station 8 (GEM M8)
36 +4.5025 // station 9 (GEM M9)
37};
39 +16.86775, // station 0 (left side: upper GEM M4)
40 -25.90225, // station 1 (left side: lower GEM M3)
41 +16.86775, // station 2 (right side: upper GEM M1)
42 -25.76025, // station 3 (right side: lower GEM M2)
43 +7.97675, // station 4 (GEM M10)
44 +7.96375, // station 5 (GEM M7)
45 +7.64975, // station 6 (GEM M5)
46 +7.74575, // station 7 (GEM M6)
47 +8.02675, // station 8 (GEM M8)
48 +7.95175 // station 9 (GEM M9)
49};
51 -444.86679, // station 0 (left side: upper GEM M4)
52 -447.56632, // station 1 (left side: lower GEM M3)
53 -444.91641, // station 2 (right side: upper GEM M1)
54 -446.26916, // station 3 (right side: lower GEM M2)
55 +64.754, // station 4 (GEM M10)
56 +87.854, // station 5 (GEM M7)
57 +112.967, // station 6 (GEM M5)
58 +135.988, // station 7 (GEM M6)
59 +160.845, // station 8 (GEM M8)
60 +183.712 // station 9 (GEM M9)
61};
62//------------------------------------------------------------------------------
63
64//(X-Y-Z)Shifts of modules in each station -------------------------------------
66 {0.0}, // station 0 (left side: upper GEM M4)
67 {0.0}, // station 1 (left side: lower GEM M3)
68 {0.0}, // station 2 (right side: upper GEM M1)
69 {0.0}, // station 3 (right side: lower GEM M2)
70 {163.2 * 0.25, -163.2 * 0.25}, // station 4 (GEM M10)
71 {163.2 * 0.25, -163.2 * 0.25}, // station 5 (GEM M7)
72 {163.2 * 0.25, -163.2 * 0.25}, // station 6 (GEM M5)
73 {163.2 * 0.25, -163.2 * 0.25}, // station 7 (GEM M6)
74 {163.2 * 0.25, -163.2 * 0.25}, // station 8 (GEM M8)
75 {163.2 * 0.25, -163.2 * 0.25} // station 9 (GEM M9)
76};
78 {0.0}, // station 0 (left side: upper GEM M4)
79 {0.0}, // station 1 (left side: lower GEM M3)
80 {0.0}, // station 2 (right side: upper GEM M1)
81 {0.0}, // station 3 (right side: lower GEM M2)
82 {0.0, 0.0}, // station 4 (GEM M10)
83 {0.0, 0.0}, // station 5 (GEM M7)
84 {0.0, 0.0}, // station 6 (GEM M5)
85 {0.0, 0.0}, // station 7 (GEM M6)
86 {0.0, 0.0}, // station 8 (GEM M8)
87 {0.0, 0.0} // station 9 (GEM M9)
88};
90 {0.0}, // station 0 (left side: upper GEM M4)
91 {0.0}, // station 1 (left side: lower GEM M3)
92 {0.0}, // station 2 (right side: upper GEM M1)
93 {0.0}, // station 3 (right side: lower GEM M2)
94 {0.0, 0.0}, // station 4 (GEM M10)
95 {0.0, 0.0}, // station 5 (GEM M7)
96 {0.0, 0.0}, // station 6 (GEM M5)
97 {0.0, 0.0}, // station 7 (GEM M6)
98 {0.0, 0.0}, // station 8 (GEM M8)
99 {0.0, 0.0} // station 9 (GEM M9)
100};
101
102// rotations of stations around y-axis by 180 deg.
103const Bool_t YStationRotations[NStations] = {true /*0*/, true /*1*/, true /*2*/, true /*3*/, true /*4*/,
104 false /*5*/, true /*6*/, false /*7*/, true /*8*/, false /*9*/};
105
106// rotations of stations around x-axis by 180 deg.
107const Bool_t XStationRotations[NStations] = {false /*0*/, true /*1*/, false /*2*/, true /*3*/, false /*4*/,
108 false /*5*/, false /*6*/, false /*7*/, false /*8*/, false /*9*/};
109//------------------------------------------------------------------------------
110
111// GEM plane sizes (66x41 type) -------------------------------------------------
115const Double_t ZGEMSize_Station66x41 = 2.3; // common thickness of GEM (including sens. vol)
116
119const Double_t dZFrame_Station66x41 = 2.1; // was 2.3 cm - thickness
120//------------------------------------------------------------------------------
121
122// GEM plane sizes (163x45 type) ------------------------------------------------
125const Double_t ZModuleSize_Station163x45 = 0.9; // sensitive volume
126const Double_t ZGEMSize_Station163x45 = 4.1; // common thickness of GEM (including sens. vol)
127
131//------------------------------------------------------------------------------
132
133// GeoManager
135
136// media
149
150class FairGeoMedia;
151class FairGeoBuilder;
152
153TGeoVolume* CreateStation(TString station_name);
154
155TGeoVolume* CreateModule_Station66x41(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize);
160
162 Double_t xsize,
163 Double_t ysize,
164 Double_t zsize,
165 Double_t hole_radius);
168 Double_t dx,
169 Double_t dy,
170 Double_t dz,
171 Double_t hole_radius);
173
174void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
175{
176
177 // air medium
178 FairGeoMedium* mAir = geoMedia->getMedium("air");
179 if (!mAir)
180 Fatal("Main", "FairMedium air not found");
181 geoBuild->createMedium(mAir);
182 pMedAir = gGeoManager->GetMedium("air");
183 if (!pMedAir)
184 Fatal("Main", "Medium air not found");
185
186 // carbon medium
187 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
188 if (!mCarbon)
189 Fatal("Main", "FairMedium carbon not found");
190 geoBuild->createMedium(mCarbon);
191 pMedCarbon = gGeoManager->GetMedium("carbon");
192 if (!pMedCarbon)
193 Fatal("Main", "Medium carbon not found");
194
195 // fiberglass medium
196 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
197 if (!mFiberGlass)
198 Fatal("Main", "FairMedium fiberglass not found");
199 geoBuild->createMedium(mFiberGlass);
200 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
201 if (!pMedFiberGlass)
202 Fatal("Main", "Medium fiberglass not found");
203
204 // copper medium
205 FairGeoMedium* mCopper = geoMedia->getMedium("copper");
206 if (!mCopper)
207 Fatal("Main", "FairMedium copper not found");
208 geoBuild->createMedium(mCopper);
209 pMedCopper = gGeoManager->GetMedium("copper");
210 if (!pMedCopper)
211 Fatal("Main", "Medium copper not found");
212
213 // arco27020 medium
214 FairGeoMedium* mArCO27030 = geoMedia->getMedium("arco27030");
215 if (!mArCO27030)
216 Fatal("Main", "FairMedium arco27030 not found");
217 geoBuild->createMedium(mArCO27030);
218 pMedArCO27030 = gGeoManager->GetMedium("arco27030");
219 if (!pMedArCO27030)
220 Fatal("Main", "Medium arco27030 not found");
221
222 // aluminium medium
223 FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium");
224 if (!mAluminium)
225 Fatal("Main", "FairMedium aluminium not found");
226 geoBuild->createMedium(mAluminium);
227 pMedAluminium = gGeoManager->GetMedium("aluminium");
228 if (!pMedAluminium)
229 Fatal("Main", "Medium aluminium not found");
230
231 // epoxide compound (for GEM frames)
232 FairGeoMedium* mEpoxideCompound = geoMedia->getMedium("polyurethane_hd");
233 if (!mEpoxideCompound)
234 Fatal("Main", "FairMedium epoxideCompound not found");
235 geoBuild->createMedium(mEpoxideCompound);
236 pMedEpoxideCompound = gGeoManager->GetMedium("polyurethane_hd");
238 Fatal("Main", "Medium epoxideCompound not found");
239
240 // glue
241 FairGeoMedium* mGlue = geoMedia->getMedium("acrylic_glue");
242 if (!mGlue)
243 Fatal("Main", "FairMedium acrylic_glue not found");
244 geoBuild->createMedium(mGlue);
245 pMedGlue = gGeoManager->GetMedium("acrylic_glue");
246 if (!pMedGlue)
247 Fatal("Main", "Medium acrylic_glue not found");
248
249 // brass medium
250 FairGeoMedium* mBrass = geoMedia->getMedium("brass");
251 if (!mBrass)
252 Fatal("Main", "FairMedium brass not found");
253 geoBuild->createMedium(mBrass);
254 pMedBrass = gGeoManager->GetMedium("brass");
255 if (!pMedBrass)
256 Fatal("Main", "Medium brass not found");
257
258 // steel medium
259 FairGeoMedium* mSteel = geoMedia->getMedium("steel");
260 if (!mSteel)
261 Fatal("Main", "FairMedium steel not found");
262 geoBuild->createMedium(mSteel);
263 pMedSteel = gGeoManager->GetMedium("steel");
264 if (!pMedSteel)
265 Fatal("Main", "Medium steel not found");
266
267 // honeycomb medium
268 FairGeoMedium* mHoneyComb = geoMedia->getMedium("AramidHoneyComb");
269 if (!mHoneyComb)
270 Fatal("Main", "FairMedium AramidHoneyComb not found");
271 geoBuild->createMedium(mHoneyComb);
272 pMedHoneyComb = gGeoManager->GetMedium("AramidHoneyComb");
273 if (!pMedHoneyComb)
274 Fatal("Main", "Medium AramidHoneyComb not found");
275
276 // polyamide medium
277 FairGeoMedium* mPolyamide = geoMedia->getMedium("polyamide");
278 if (!mPolyamide)
279 Fatal("Main", "FairMedium polyamide not found");
280 geoBuild->createMedium(mPolyamide);
281 pMedPolyamide = gGeoManager->GetMedium("polyamide");
282 if (!pMedPolyamide)
283 Fatal("Main", "Medium polyamide not found");
284}
285
287{
288
289 // ---- set working directory --------------------------------------------
290 TString gPath = gSystem->Getenv("VMCWORKDIR");
291
292 // ------- Geometry file name (output) ----------------------------------
293 const TString geoDetectorName = "GEMS";
294 const TString geoDetectorVersion = "RunSRCSpring2018_detailed";
295 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
296
297 // ---- global geometry parameters ---------------------------------------
298 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
299 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
300
301 // ------- Load media from media file ----------------------------------
302 TString medFile = gPath + "/geometry/media.geo";
303 geoFace->setMediaFile(medFile);
304 geoFace->readMedia();
305 FairGeoMedia* geoMedia = geoFace->getMedia();
306 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
307
308 DefineRequiredMedia(geoMedia, geoBuild);
309 // -------------------------------------------------------------------------
310
311 // -------------- Create geometry and top volume -------------------------
312 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
313 gGeoMan->SetName(geoDetectorName + "_geom");
314 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
315 top->SetMedium(pMedAir);
316 gGeoMan->SetTopVolume(top);
317 // gGeoMan->SetTopVisible(1);
318 // --------------------------------------------------------------------------
319
320 // Define TOP Geometry
321 TGeoVolume* GEMS = new TGeoVolumeAssembly(geoDetectorName);
322 GEMS->SetMedium(pMedAir);
323
324 // TGeoVolume *target = gGeoMan->MakeSphere("target", 0, 0, 5.0);
325 // GEMS->AddNode(target, 0, new TGeoTranslation(0.0, 0.0, -647.476));
326
327 // station 0 (small 66x41 GEM: left side: upper station)
328 if (1) {
329 Int_t stationNum = 0; // station number
330
331 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
332 TGeoVolume* module0 =
333 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
335 TGeoVolume* layers0 = CreateLayersForModule_Station66x41(TString("layer0_") + station->GetName());
336 // TGeoVolume *frame0 = CreateBasicFrameForModule_Station66x41(TString("frame0_")+station->GetName());
337 TGeoVolume* frame0 = CreateDetailedFrameForModule_Station66x41(TString("frame0_") + station->GetName());
338
339 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
340 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
341 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
342 module0_transform->RotateY(+30.5843); // deg
343
344 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
345 if (YStationRotations[stationNum] == true)
346 layers0_transform->ReflectZ(true);
347 if (XStationRotations[stationNum] == true)
348 layers0_transform->RotateX(180.0);
349 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
350 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
351 layers0_transform->RotateY(+30.5843); // deg
352
353 TGeoCombiTrans* frame0_transform = new TGeoCombiTrans();
354 if (YStationRotations[stationNum] == true)
355 frame0_transform->RotateY(180.0);
356 if (XStationRotations[stationNum] == true)
357 frame0_transform->RotateX(180.0);
358 frame0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
359 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
360 frame0_transform->RotateY(+30.5843); // deg
361
362 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
363 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
364 ZStationPositions[stationNum]);
365
366 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
367 // station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); //layers
368 station->AddNode(frame0, 0, new TGeoCombiTrans(*frame0_transform)); // frame
369
370 GEMS->AddNode(station, 0, station_transform);
371 }
372
373 // station 1 (small 66x41 GEM: left side: lower station)
374 if (1) {
375 Int_t stationNum = 1; // station number
376
377 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
378 TGeoVolume* module0 =
379 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
381 TGeoVolume* layers0 = CreateLayersForModule_Station66x41(TString("layer0_") + station->GetName());
382 // TGeoVolume *frame0 = CreateBasicFrameForModule_Station66x41(TString("frame0_")+station->GetName());
383 TGeoVolume* frame0 = CreateDetailedFrameForModule_Station66x41(TString("frame0_") + station->GetName());
384
385 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
386 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
387 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
388 module0_transform->RotateY(+30.5843); // deg
389
390 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
391 if (YStationRotations[stationNum] == true)
392 layers0_transform->ReflectZ(true);
393 if (XStationRotations[stationNum] == true)
394 layers0_transform->RotateX(180.0);
395 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
396 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
397 layers0_transform->RotateY(+30.5843); // deg
398
399 TGeoCombiTrans* frame0_transform = new TGeoCombiTrans();
400 if (YStationRotations[stationNum] == true)
401 frame0_transform->RotateY(180.0);
402 if (XStationRotations[stationNum] == true)
403 frame0_transform->RotateX(180.0);
404 frame0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
405 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
406 frame0_transform->RotateY(+30.5843); // deg
407
408 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
409 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
410 ZStationPositions[stationNum]);
411
412 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
413 // station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); //layers
414 station->AddNode(frame0, 0, new TGeoCombiTrans(*frame0_transform)); // frame
415
416 GEMS->AddNode(station, 0, station_transform);
417 }
418
419 // station 2 (small 66x41 GEM: right side: upper station)
420 if (1) {
421 Int_t stationNum = 2; // station number
422
423 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
424 TGeoVolume* module0 =
425 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
427 TGeoVolume* layers0 = CreateLayersForModule_Station66x41(TString("layer0_") + station->GetName());
428 // TGeoVolume *frame0 = CreateBasicFrameForModule_Station66x41(TString("frame0_")+station->GetName());
429 TGeoVolume* frame0 = CreateDetailedFrameForModule_Station66x41(TString("frame0_") + station->GetName());
430
431 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
432 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
433 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
434 module0_transform->RotateY(-30.6845); // deg
435
436 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
437 if (YStationRotations[stationNum] == true)
438 layers0_transform->ReflectZ(true);
439 if (XStationRotations[stationNum] == true)
440 layers0_transform->RotateX(180.0);
441 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
442 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
443 layers0_transform->RotateY(-30.6845); // deg
444
445 TGeoCombiTrans* frame0_transform = new TGeoCombiTrans();
446 if (YStationRotations[stationNum] == true)
447 frame0_transform->RotateY(180.0);
448 if (XStationRotations[stationNum] == true)
449 frame0_transform->RotateX(180.0);
450 frame0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
451 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
452 frame0_transform->RotateY(-30.6845); // deg
453
454 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
455 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
456 ZStationPositions[stationNum]);
457
458 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
459 // station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); //layers
460 station->AddNode(frame0, 0, new TGeoCombiTrans(*frame0_transform)); // frame
461
462 GEMS->AddNode(station, 0, station_transform);
463 }
464
465 // station 3 (small 66x41 GEM: right side: lower station)
466 if (1) {
467 Int_t stationNum = 3; // station number
468
469 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
470 TGeoVolume* module0 =
471 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
473 TGeoVolume* layers0 = CreateLayersForModule_Station66x41(TString("layer0_") + station->GetName());
474 // TGeoVolume *frame0 = CreateBasicFrameForModule_Station66x41(TString("frame0_")+station->GetName());
475 TGeoVolume* frame0 = CreateDetailedFrameForModule_Station66x41(TString("frame0_") + station->GetName());
476
477 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
478 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
479 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
480 module0_transform->RotateY(-30.6845); // deg
481
482 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
483 if (YStationRotations[stationNum] == true)
484 layers0_transform->ReflectZ(true);
485 if (XStationRotations[stationNum] == true)
486 layers0_transform->RotateX(180.0);
487 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
488 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
489 layers0_transform->RotateY(-30.6845); // deg
490
491 TGeoCombiTrans* frame0_transform = new TGeoCombiTrans();
492 if (YStationRotations[stationNum] == true)
493 frame0_transform->RotateY(180.0);
494 if (XStationRotations[stationNum] == true)
495 frame0_transform->RotateX(180.0);
496 frame0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
497 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
498 frame0_transform->RotateY(-30.6845); // deg
499
500 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
501 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
502 ZStationPositions[stationNum]);
503
504 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
505 // station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); //layers
506 station->AddNode(frame0, 0, new TGeoCombiTrans(*frame0_transform)); // frame
507
508 GEMS->AddNode(station, 0, station_transform);
509 }
510
511 // stations 4-9 (each is a big 163x45 GEM consisting of two modules)
512 if (1) {
513 for (Int_t istation = 4; istation < 10; ++istation) {
514
515 Int_t stationNum = istation;
516 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
517
518 TGeoVolume* module0 =
521 TGeoVolume* module1 =
524
525 TGeoVolume* layers0 = CreateLayersForModule_Station163x45(TString("layer0_") + station->GetName());
526 TGeoVolume* layers1 = CreateLayersForModule_Station163x45(TString("layer1_") + station->GetName());
527
528 TGeoVolume* frame = CreateFrameForHalfPlane_Station163x45(TString("frame_") + station->GetName());
529
530 if (istation == 6) {
531 station->SetName(TString("disabled_station") + TString::Itoa(stationNum, 10));
532 module0->SetName(TString("module0_") + station->GetName());
533 module1->SetName(TString("module1_") + station->GetName());
534 }
535
536 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
537 if (XStationRotations[stationNum] == true)
538 module0_transform->RotateX(180.0);
539 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
540 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
541
542 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
543 if (XStationRotations[stationNum] == true)
544 module1_transform->RotateX(180.0);
545 module1_transform->ReflectX(true);
546 module1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
547 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
548
549 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
550 if (YStationRotations[stationNum] == true)
551 layers0_transform->ReflectZ(true);
552 if (XStationRotations[stationNum] == true)
553 layers0_transform->RotateX(180.0);
554 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
555 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
556
557 TGeoCombiTrans* layers1_transform = new TGeoCombiTrans();
558 if (YStationRotations[stationNum] == true)
559 layers1_transform->ReflectZ(true);
560 if (XStationRotations[stationNum] == true)
561 layers1_transform->RotateX(180.0);
562 layers1_transform->ReflectX(true);
563 layers1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
564 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
565
566 TGeoCombiTrans* frame_transform = new TGeoCombiTrans();
567 if (YStationRotations[stationNum] == true)
568 frame_transform->RotateY(180.0);
569 if (XStationRotations[stationNum] == true)
570 frame_transform->RotateX(180.0);
571 frame_transform->SetTranslation((XModuleShifts[stationNum][0] + XModuleShifts[stationNum][1]),
572 YModuleShifts[stationNum][0],
573 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
574
575 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
576 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
577 ZStationPositions[stationNum]);
578
579 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
580 station->AddNode(module1, 1, new TGeoCombiTrans(*module1_transform)); // module
581
582 station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); // layers
583 station->AddNode(layers1, 1, new TGeoCombiTrans(*layers1_transform)); // layers
584
585 station->AddNode(frame, 0, frame_transform);
586
587 GEMS->AddNode(station, 0, station_transform);
588 }
589 }
590
591 top->AddNode(GEMS, 0);
593
594 // --------------- Finish -----------------------------------------------
595 gGeoMan->CloseGeometry();
596 gGeoMan->CheckOverlaps(0.0001);
597 gGeoMan->PrintOverlaps();
598 gGeoMan->Test();
599 // gGeoMan->RestoreMasterVolume();
600
601 TFile* geoFile = new TFile(geoFileName, "RECREATE");
602 top->Write();
603 geoFile->Close();
604 top->Draw("ogl");
605}
606//------------------------------------------------------------------------------
607
609{
610
611 TGeoVolume* stationA = new TGeoVolumeAssembly(station_name);
612 stationA->SetMedium(pMedAir);
613
614 return stationA;
615}
616
618{
619
620 // module shape
621 TGeoShape* moduleS = new TGeoBBox("moduleS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
622
623 // module volume
624 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
625
626 // medium
627 if (pMedArCO27030)
628 moduleV->SetMedium(pMedArCO27030);
629 else
630 Fatal("Main", "Invalid medium for sensitive modules!");
631
632 // visual parameters
633 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
634 moduleV->SetTransparency(20);
635
636 return moduleV;
637}
638
640{
641
642 // frame volumes
643 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
644 layers->SetMedium(pMedAir);
645
646 // Common parameters for all layers
647 Double_t layerFront_XSize = 66.0; // cm
648 Double_t layerFront_YSize = 41.0; // cm
649 Double_t layerFront_XShift = 0.0; // cm
650 Double_t layerFront_YShift = 0.0; // cm
651
652 Double_t layerBack_XSize = 66.0; // cm
653 Double_t layerBack_YSize = 41.0; // cm
654 Double_t layerBack_XShift = 0.0; // cm
655 Double_t layerBack_YShift = 0.0; // cm
656 Double_t layerBack_ZShift = 0.0; // cm
657
658 if (layer_name == "layer0_station3")
659 layerBack_ZShift = +0.2; // z-shift for an extended module
660
661 // copper layer -------------------------------------------------------------
662 Double_t copperLayer_ZSize = 0.00655; // cm;
663 Double_t copperLayerHole_Radius = 6.0; // cm
664
665 // layer shape
666 TGeoShape* copperLayerFrontS =
667 new TGeoBBox(TString("copperLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
668 layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
669 TGeoShape* copperLayerBackS = new TGeoBBox(TString("copperLayerBackBlankS") += TString("_") + layers->GetName(),
670 layerBack_XSize * 0.5, layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
671
672 TGeoVolume* copperLayerFrontV =
673 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
674 TGeoVolume* copperLayerBackV =
675 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
676
677 // volume medium
678 TGeoMedium* copperLayerV_medium = pMedCopper;
679 if (copperLayerV_medium) {
680 copperLayerFrontV->SetMedium(copperLayerV_medium);
681 copperLayerBackV->SetMedium(copperLayerV_medium);
682 } else
683 Fatal("Main", "Invalid medium for copperLayerV!");
684
685 // volume visual property (transparency)
686 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
687 copperLayerFrontV->SetTransparency(0);
688 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
689 copperLayerBackV->SetTransparency(0);
690
691 TGeoCombiTrans* copperLayerFront_transf[2];
692
693 copperLayerFront_transf[0] = new TGeoCombiTrans();
694 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
695 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
696 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize * 0.5);
697
698 TGeoCombiTrans* copperLayerBack_transf[1];
699
700 copperLayerBack_transf[0] = new TGeoCombiTrans();
701 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
702 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
703 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize * 0.5 + layerBack_ZShift);
704
705 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
706 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
707 //--------------------------------------------------------------------------
708
709 // glue layer ---------------------------------------------------------------
710 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
711 Double_t glueLayerHole_Radius = 6.0; // cm
712
713 // layer shape
714 TGeoShape* glueLayerFrontS = new TGeoBBox(TString("glueLayerFrontBlankS") += TString("_") + layers->GetName(),
715 layerFront_XSize * 0.5, layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
716 TGeoShape* glueLayerBackS = new TGeoBBox(TString("glueLayerBackBlankS") += TString("_") + layers->GetName(),
717 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
718
719 TGeoVolume* glueLayerFrontV =
720 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
721 TGeoVolume* glueLayerBackV =
722 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
723
724 // volume medium
725 TGeoMedium* glueLayerV_medium = pMedGlue;
726 if (glueLayerV_medium) {
727 glueLayerFrontV->SetMedium(glueLayerV_medium);
728 glueLayerBackV->SetMedium(glueLayerV_medium);
729 } else
730 Fatal("Main", "Invalid medium for glueLayerV!");
731
732 // volume visual property (transparency)
733 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
734 glueLayerFrontV->SetTransparency(0);
735 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
736 glueLayerBackV->SetTransparency(0);
737
738 TGeoCombiTrans* glueLayerFront_transf[1];
739
740 glueLayerFront_transf[0] = new TGeoCombiTrans();
741 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
742 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
743 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
744
745 TGeoCombiTrans* glueLayerBack_transf[1];
746
747 glueLayerBack_transf[0] = new TGeoCombiTrans();
748 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
749 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
750 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize * 0.5
751 + layerBack_ZShift);
752
753 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
754 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
755 //--------------------------------------------------------------------------
756
757 // epoxide layer ------------------------------------------------------------
758 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
759 Double_t epoxideLayerHole_Radius = 6.0; // cm
760
761 // layer shape
762 TGeoShape* epoxideLayerFrontS =
763 new TGeoBBox(TString("epoxideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
764 layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
765 TGeoShape* epoxideLayerBackS = new TGeoBBox(TString("epoxideLayerBackBlankS") += TString("_") + layers->GetName(),
766 layerBack_XSize * 0.5, layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
767
768 TGeoVolume* epoxideLayerFrontV =
769 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
770 TGeoVolume* epoxideLayerBackV =
771 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
772
773 // volume medium
774 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
775 if (epoxideLayerV_medium) {
776 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
777 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
778 } else
779 Fatal("Main", "Invalid medium for epoxideLayerV!");
780
781 // volume visual property (transparency)
782 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
783 epoxideLayerFrontV->SetTransparency(0);
784 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
785 epoxideLayerBackV->SetTransparency(0);
786
787 TGeoCombiTrans* epoxideLayerFront_transf[1];
788
789 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
790 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
791 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
792 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
793 + epoxideLayer_ZSize * 0.5);
794
795 TGeoCombiTrans* epoxideLayerBack_transf[1];
796
797 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
798 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
799 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
800 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
801 - epoxideLayer_ZSize * 0.5 + layerBack_ZShift);
802
803 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
804 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
805 //--------------------------------------------------------------------------
806
807 // honeycomb layer ----------------------------------------------------------
808 // Double_t honeycombLayer_ZSize = 1.5-(0.05+0.00055+0.005+0.0125); //cm; half-thickness of all honeycomb layers
809 // Double_t honeycombLayer_ZSize = 1.5-(0.06805); //cm; half-thickness of all honeycomb layers
810 Double_t honeycombLayer_ZSize = 0.56; // cm; half-thickness of all honeycomb layers
811 Double_t honeycombLayerHole_Radius = 6.0; // cm
812
813 // layer shape
814 TGeoShape* honeycombLayerFrontS =
815 new TGeoBBox(TString("honeycombLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
816 layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
817 TGeoShape* honeycombLayerBackS =
818 new TGeoBBox(TString("honeycombLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
819 layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
820
821 TGeoVolume* honeycombLayerFrontV =
822 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
823 TGeoVolume* honeycombLayerBackV =
824 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
825
826 // volume medium
827 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
828 if (honeycombLayerV_medium) {
829 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
830 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
831 } else
832 Fatal("Main", "Invalid medium for honeycombLayerV!");
833
834 // volume visual property (transparency)
835 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
836 honeycombLayerFrontV->SetTransparency(0);
837 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
838 honeycombLayerBackV->SetTransparency(0);
839
840 TGeoCombiTrans* honeycombLayerFront_transf[1];
841
842 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
843 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
844 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
845 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
846 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
847
848 TGeoCombiTrans* honeycombLayerBack_transf[1];
849
850 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
851 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
852 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
853 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
854 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5 + layerBack_ZShift);
855
856 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
857 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
858 //--------------------------------------------------------------------------
859
860 // polyamide layer ----------------------------------------------------------
861 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
862 Double_t polyamideLayerHole_Radius = 6.0; // cm
863
864 // layer shape
865 TGeoShape* polyamideLayerFrontS =
866 new TGeoBBox(TString("polyamideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
867 layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
868 TGeoShape* polyamideLayerBackS =
869 new TGeoBBox(TString("polyamideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
870 layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
871
872 TGeoVolume* polyamideLayerFrontV =
873 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
874 TGeoVolume* polyamideLayerBackV =
875 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
876
877 // volume medium
878 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
879 if (polyamideLayerV_medium) {
880 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
881 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
882 } else
883 Fatal("Main", "Invalid medium for polyamideLayerV!");
884
885 // volume visual property (transparency)
886 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
887 polyamideLayerFrontV->SetTransparency(0);
888 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
889 polyamideLayerBackV->SetTransparency(0);
890
891 TGeoCombiTrans* polyamideLayerFront_transf[1];
892
893 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
894 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
895 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
896 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station66x41 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
897 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
898
899 TGeoCombiTrans* polyamideLayerBack_transf[1];
900
901 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
902 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
903 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
904 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station66x41 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
905 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5
906 + layerBack_ZShift);
907
908 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
909 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
910 //--------------------------------------------------------------------------
911
912 return layers;
913}
914
916{
917
918 // frame shapes
919 TGeoShape* vertical_frameS =
920 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station66x41 * 0.5 + dy, dz * 0.5);
921 TGeoShape* horizontal_frameS =
922 new TGeoBBox("horizontal_frameS", XModuleSize_Station66x41 * 0.5, dy * 0.5, dz * 0.5);
923
924 // frame volumes
925 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
926 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
927 TGeoVolume* horizontal_frameV = new TGeoVolume(frame_name + "_horizontal_frameV", horizontal_frameS);
928
929 // media
930 TGeoMedium* frame_medium = pMedCarbon; // set medium
931 if (pMedCarbon) {
932 vertical_frameV->SetMedium(frame_medium);
933 horizontal_frameV->SetMedium(frame_medium);
934 } else
935 Fatal("Main", "Invalid medium for frames!");
936 if (pMedAir) {
937 composite_frameV->SetMedium(pMedAir);
938 } else
939 Fatal("Main", "Invalid medium for frames!");
940
941 // visual parameters
942 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
943 horizontal_frameV->SetLineColor(TColor::GetColor("#9999ff"));
944
945 // frame part positions in the frame
946 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
947 left_vertical_frame_position->SetTranslation(XModuleSize_Station66x41 * 0.5 + dXFrame_Station66x41 * 0.5, 0.0, 0.0);
948
949 TGeoCombiTrans* right_vertical_frame_position = new TGeoCombiTrans();
950 right_vertical_frame_position->SetTranslation(-XModuleSize_Station66x41 * 0.5 - dXFrame_Station66x41 * 0.5, 0.0,
951 0.0);
952
953 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
954 bottom_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station66x41 * 0.5 + dYFrame_Station66x41 * 0.5,
955 0.0);
956
957 TGeoCombiTrans* lower_horizontal_frame_position = new TGeoCombiTrans();
958 lower_horizontal_frame_position->SetTranslation(0.0, -YModuleSize_Station66x41 * 0.5 - dYFrame_Station66x41 * 0.5,
959 0.0);
960
961 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
962 composite_frameV->AddNode(vertical_frameV, 1, right_vertical_frame_position);
963 composite_frameV->AddNode(horizontal_frameV, 0, bottom_horizontal_frame_position);
964 composite_frameV->AddNode(horizontal_frameV, 1, lower_horizontal_frame_position);
965
966 return composite_frameV;
967}
968
970{
971
972 // frame volumes
973 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
974 frames->SetMedium(pMedAir);
975
976 // back epoxide frame -------------------------------------------------------
977 Double_t backEpoxideFramePart_XSize = 75.1; // cm
978 Double_t backEpoxideFramePart_YSize = 48.5; // cm
979 Double_t backEpoxideFramePart_ZSize = 0.7; // cm
980
981 // layer shape
982 TGeoShape* backEpoxideFramePartS = new TGeoBBox(
983 TString("backEpoxideFramePartS") += TString("_") + frames->GetName(), backEpoxideFramePart_XSize * 0.5,
984 backEpoxideFramePart_YSize * 0.5, backEpoxideFramePart_ZSize * 0.5);
985 TGeoShape* backEpoxideActiveAreaS =
986 new TGeoBBox(TString("backEpoxideActiveAreaS") += TString("_") + frames->GetName(),
988
989 TGeoTranslation* backEpoxideFramePart_pos = new TGeoTranslation();
990 backEpoxideFramePart_pos->SetName("backEpoxideFramePart_pos");
991 backEpoxideFramePart_pos->SetDx(-2.75 /*shift*/);
992 backEpoxideFramePart_pos->SetDy(+2.05 /*shift*/);
993 backEpoxideFramePart_pos->SetDz(0.0);
994 backEpoxideFramePart_pos->RegisterYourself();
995
996 TGeoCompositeShape* backEpoxideFrameS = new TGeoCompositeShape();
997 backEpoxideFrameS->SetName(TString("backEpoxideFrameS") += TString("_") + frames->GetName());
998 {
999 TString expression = "backEpoxideFramePartS";
1000 expression += TString("_") + frames->GetName();
1001 expression += ":backEpoxideFramePart_pos";
1002 expression += "-backEpoxideActiveAreaS";
1003 expression += TString("_") + frames->GetName();
1004
1005 backEpoxideFrameS->MakeNode(expression);
1006 backEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1007 }
1008
1009 TGeoVolume* backEpoxideFrameV =
1010 new TGeoVolume(TString("backEpoxideFrameV") += TString("_") + frames->GetName(), backEpoxideFrameS);
1011
1012 // volume medium
1013 TGeoMedium* backEpoxideFrameV_medium = pMedEpoxideCompound;
1014 if (backEpoxideFrameV_medium) {
1015 backEpoxideFrameV->SetMedium(backEpoxideFrameV_medium);
1016 } else
1017 Fatal("Main", "Invalid medium for backEpoxideFrameV!");
1018
1019 // volume visual property (transparency)
1020 backEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1021 backEpoxideFrameV->SetTransparency(0);
1022
1023 TGeoCombiTrans* backEpoxideFrame_transf[1];
1024
1025 backEpoxideFrame_transf[0] = new TGeoCombiTrans();
1026 backEpoxideFrame_transf[0]->SetDx(0.0);
1027 backEpoxideFrame_transf[0]->SetDy(0.0);
1028 backEpoxideFrame_transf[0]->SetDz(+(ZModuleSize_Station66x41 - backEpoxideFramePart_ZSize) * 0.5
1029 + backEpoxideFramePart_ZSize);
1030
1031 frames->AddNode(backEpoxideFrameV, 0, backEpoxideFrame_transf[0]);
1032 //--------------------------------------------------------------------------
1033
1034 // middle epoxide frame -----------------------------------------------------
1035 Double_t middleEpoxideFrameBigPart_XSize = 69.3; // cm
1036 Double_t middleEpoxideFrameBigPart_YSize = 44.7; // cm
1037 Double_t middleEpoxideFrameBigPart_ZSize = 0.9; // cm
1038
1039 Double_t middleEpoxideFrameSmallPart_XSize = 3.4; // cm
1040 Double_t middleEpoxideFrameSmallPart_YSize = 16.8; // cm
1041 Double_t middleEpoxideFrameSmallPart_ZSize = 0.9; // cm
1042
1043 Double_t middleEpoxideFrameHoleArea_XSize = 66.5; // cm
1044 Double_t middleEpoxideFrameHoleArea_YSize = 41.9; // cm
1045 Double_t middleEpoxideFrameHoleArea_ZSize = 0.9 + 0.1; // cm
1046
1047 // layer shape
1048 TGeoShape* middleEpoxideFrameBigPartS =
1049 new TGeoBBox(TString("middleEpoxideFrameBigPartS") += TString("_") + frames->GetName(),
1050 middleEpoxideFrameBigPart_XSize * 0.5, middleEpoxideFrameBigPart_YSize * 0.5,
1051 middleEpoxideFrameBigPart_ZSize * 0.5);
1052 TGeoShape* middleEpoxideFrameSmallPartS =
1053 new TGeoBBox(TString("middleEpoxideFrameSmallPartS") += TString("_") + frames->GetName(),
1054 middleEpoxideFrameSmallPart_XSize * 0.5, middleEpoxideFrameSmallPart_YSize * 0.5,
1055 middleEpoxideFrameSmallPart_ZSize * 0.5);
1056 TGeoShape* middleEpoxideHoleAreaS = new TGeoBBox(
1057 TString("middleEpoxideHoleAreaS") += TString("_") + frames->GetName(), middleEpoxideFrameHoleArea_XSize * 0.5,
1058 middleEpoxideFrameHoleArea_YSize * 0.5, middleEpoxideFrameHoleArea_ZSize * 0.5);
1059
1060 TGeoTranslation* middleEpoxideFrameBigPart_pos = new TGeoTranslation();
1061 middleEpoxideFrameBigPart_pos->SetName("middleEpoxideFrameBigPart_pos");
1062 middleEpoxideFrameBigPart_pos->SetDx(0.0 /*shift*/);
1063 middleEpoxideFrameBigPart_pos->SetDy(+0.15 /*shift*/);
1064 middleEpoxideFrameBigPart_pos->SetDz(0.0);
1065 middleEpoxideFrameBigPart_pos->RegisterYourself();
1066
1067 TGeoTranslation* middleEpoxideFrameSmallPart_pos = new TGeoTranslation();
1068 middleEpoxideFrameSmallPart_pos->SetName("middleEpoxideFrameSmallPart_pos");
1069 middleEpoxideFrameSmallPart_pos->SetDx(
1070 -(middleEpoxideFrameBigPart_XSize * 0.5 + middleEpoxideFrameSmallPart_XSize * 0.5));
1071 middleEpoxideFrameSmallPart_pos->SetDy(middleEpoxideFrameBigPart_YSize * 0.5
1072 - middleEpoxideFrameSmallPart_YSize * 0.5 + 0.15 /*shift*/);
1073 middleEpoxideFrameSmallPart_pos->SetDz(0.0);
1074 middleEpoxideFrameSmallPart_pos->RegisterYourself();
1075
1076 TGeoCompositeShape* middleEpoxideFrameS = new TGeoCompositeShape();
1077 middleEpoxideFrameS->SetName(TString("middleEpoxideFrameS") += TString("_") + frames->GetName());
1078 {
1079 TString expression = "middleEpoxideFrameBigPartS";
1080 expression += TString("_") + frames->GetName();
1081 expression += ":middleEpoxideFrameBigPart_pos";
1082 expression += "-middleEpoxideHoleAreaS";
1083 expression += TString("_") + frames->GetName();
1084 expression += "+middleEpoxideFrameSmallPartS";
1085 expression += TString("_") + frames->GetName();
1086 expression += ":middleEpoxideFrameSmallPart_pos";
1087
1088 middleEpoxideFrameS->MakeNode(expression);
1089 middleEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1090 }
1091
1092 TGeoVolume* middleEpoxideFrameV =
1093 new TGeoVolume(TString("middleEpoxideFrameV") += TString("_") + frames->GetName(), middleEpoxideFrameS);
1094
1095 // volume medium
1096 TGeoMedium* middleEpoxideFrameV_medium = pMedEpoxideCompound;
1097 if (middleEpoxideFrameV_medium) {
1098 middleEpoxideFrameV->SetMedium(middleEpoxideFrameV_medium);
1099 } else
1100 Fatal("Main", "Invalid medium for middleEpoxideFrameV!");
1101
1102 // volume visual property (transparency)
1103 middleEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1104 middleEpoxideFrameV->SetTransparency(0);
1105
1106 TGeoCombiTrans* middleEpoxideFrame_transf[1];
1107
1108 middleEpoxideFrame_transf[0] = new TGeoCombiTrans();
1109 middleEpoxideFrame_transf[0]->SetDx(0.0);
1110 middleEpoxideFrame_transf[0]->SetDy(0.0);
1111 middleEpoxideFrame_transf[0]->SetDz(0.0);
1112
1113 frames->AddNode(middleEpoxideFrameV, 0, middleEpoxideFrame_transf[0]);
1114 //--------------------------------------------------------------------------
1115
1116 // front epoxide frame -----------------------------------------------------
1117 Double_t frontEpoxideFrameBigPart_XSize = 69.5; // cm
1118 Double_t frontEpoxideFrameBigPart_YSize = 44.7; // cm
1119 Double_t frontEpoxideFrameBigPart_ZSize = 0.7; // cm
1120
1121 Double_t frontEpoxideFrameSmallPart_XSize = 3.2; // cm
1122 Double_t frontEpoxideFrameSmallPart_YSize = 16.8; // cm
1123 Double_t frontEpoxideFrameSmallPart_ZSize = 0.7; // cm
1124
1125 Double_t frontEpoxideFrameHoleArea_XSize = 66.0; // cm
1126 Double_t frontEpoxideFrameHoleArea_YSize = 41.1; // cm
1127 Double_t frontEpoxideFrameHoleArea_ZSize = 0.9 + 0.1; // cm
1128
1129 // layer shape
1130 TGeoShape* frontEpoxideFrameBigPartS = new TGeoBBox(
1131 TString("frontEpoxideFrameBigPartS") += TString("_") + frames->GetName(), frontEpoxideFrameBigPart_XSize * 0.5,
1132 frontEpoxideFrameBigPart_YSize * 0.5, frontEpoxideFrameBigPart_ZSize * 0.5);
1133 TGeoShape* frontEpoxideFrameSmallPartS =
1134 new TGeoBBox(TString("frontEpoxideFrameSmallPartS") += TString("_") + frames->GetName(),
1135 frontEpoxideFrameSmallPart_XSize * 0.5, frontEpoxideFrameSmallPart_YSize * 0.5,
1136 frontEpoxideFrameSmallPart_ZSize * 0.5);
1137 TGeoShape* frontEpoxideHoleAreaS = new TGeoBBox(
1138 TString("frontEpoxideHoleAreaS") += TString("_") + frames->GetName(), frontEpoxideFrameHoleArea_XSize * 0.5,
1139 frontEpoxideFrameHoleArea_YSize * 0.5, frontEpoxideFrameHoleArea_ZSize * 0.5);
1140
1141 TGeoTranslation* frontEpoxideFrameBigPart_pos = new TGeoTranslation();
1142 frontEpoxideFrameBigPart_pos->SetName("frontEpoxideFrameBigPart_pos");
1143 frontEpoxideFrameBigPart_pos->SetDx(0.0 /*shift*/);
1144 frontEpoxideFrameBigPart_pos->SetDy(+0.15 /*shift*/);
1145 frontEpoxideFrameBigPart_pos->SetDz(0.0);
1146 frontEpoxideFrameBigPart_pos->RegisterYourself();
1147
1148 TGeoTranslation* frontEpoxideFrameSmallPart_pos = new TGeoTranslation();
1149 frontEpoxideFrameSmallPart_pos->SetName("frontEpoxideFrameSmallPart_pos");
1150 frontEpoxideFrameSmallPart_pos->SetDx(
1151 -(frontEpoxideFrameBigPart_XSize * 0.5 + frontEpoxideFrameSmallPart_XSize * 0.5));
1152 frontEpoxideFrameSmallPart_pos->SetDy(frontEpoxideFrameBigPart_YSize * 0.5 - frontEpoxideFrameSmallPart_YSize * 0.5
1153 + 0.15 /*shift*/);
1154 frontEpoxideFrameSmallPart_pos->SetDz(0.0);
1155 frontEpoxideFrameSmallPart_pos->RegisterYourself();
1156
1157 TGeoCompositeShape* frontEpoxideFrameS = new TGeoCompositeShape();
1158 frontEpoxideFrameS->SetName(TString("frontEpoxideFrameS") += TString("_") + frames->GetName());
1159 {
1160 TString expression = "frontEpoxideFrameBigPartS";
1161 expression += TString("_") + frames->GetName();
1162 expression += ":frontEpoxideFrameBigPart_pos";
1163 expression += "-frontEpoxideHoleAreaS";
1164 expression += TString("_") + frames->GetName();
1165 expression += "+frontEpoxideFrameSmallPartS";
1166 expression += TString("_") + frames->GetName();
1167 expression += ":frontEpoxideFrameSmallPart_pos";
1168
1169 frontEpoxideFrameS->MakeNode(expression);
1170 frontEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1171 }
1172
1173 TGeoVolume* frontEpoxideFrameV =
1174 new TGeoVolume(TString("frontEpoxideFrameV") += TString("_") + frames->GetName(), frontEpoxideFrameS);
1175
1176 // volume medium
1177 TGeoMedium* frontEpoxideFrameV_medium = pMedEpoxideCompound;
1178 if (frontEpoxideFrameV_medium) {
1179 frontEpoxideFrameV->SetMedium(frontEpoxideFrameV_medium);
1180 } else
1181 Fatal("Main", "Invalid medium for frontEpoxideFrameV!");
1182
1183 // volume visual property (transparency)
1184 frontEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1185 frontEpoxideFrameV->SetTransparency(0);
1186
1187 TGeoCombiTrans* frontEpoxideFrame_transf[1];
1188
1189 frontEpoxideFrame_transf[0] = new TGeoCombiTrans();
1190 frontEpoxideFrame_transf[0]->SetDx(0.0);
1191 frontEpoxideFrame_transf[0]->SetDy(0.0);
1192 frontEpoxideFrame_transf[0]->SetDz(-(ZModuleSize_Station66x41 - frontEpoxideFrameBigPart_ZSize) * 0.5
1193 - frontEpoxideFrameBigPart_ZSize);
1194
1195 frames->AddNode(frontEpoxideFrameV, 0, frontEpoxideFrame_transf[0]);
1196 //--------------------------------------------------------------------------
1197
1198 return frames;
1199}
1200//------------------------------------------------------------------------------
1201
1203{
1204
1205 // frame volumes
1206 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
1207 frames->SetMedium(pMedAir);
1208
1209 // center fiberglass frame -------------------------------------------------
1210 Double_t centerFiberGlassFrameSidePart_XSize = 1.45; // cm
1211 Double_t centerFiberGlassFrameSidePart_YSize = 44.6; // cm
1212 Double_t centerFiberGlassFrameSidePart_ZSize = 0.89; // cm
1213
1214 Double_t centerFiberGlassFrameLongPart_XSize = 66.5; // cm
1215 Double_t centerFiberGlassFrameLongPart_YSize = 1.45; // cm
1216 Double_t centerFiberGlassFrameLongPart_ZSize = 0.89; // cm
1217
1218 Double_t distanceBetweenFiberGlassFrameSideParts = 66.5; // cm
1219 Double_t distanceBetweenFiberGlassFrameLongParts = 41.7; // cm
1220
1221 TGeoShape* centerFiberGlassFrameSidePartS =
1222 new TGeoBBox(TString("centerFiberGlassFrameSidePartS") += TString("_") + frames->GetName(),
1223 centerFiberGlassFrameSidePart_XSize * 0.5, centerFiberGlassFrameSidePart_YSize * 0.5,
1224 centerFiberGlassFrameSidePart_ZSize * 0.5);
1225 TGeoShape* centerFiberGlassFrameLongPartS =
1226 new TGeoBBox(TString("centerFiberGlassFrameLongPartS") += TString("_") + frames->GetName(),
1227 centerFiberGlassFrameLongPart_XSize * 0.5, centerFiberGlassFrameLongPart_YSize * 0.5,
1228 centerFiberGlassFrameLongPart_ZSize * 0.5);
1229
1230 TGeoTranslation* centerFiberGlassFrameSidePart_pos1 = new TGeoTranslation();
1231 centerFiberGlassFrameSidePart_pos1->SetName(TString("centerFiberGlassFrameSidePart_pos1") +=
1232 TString("_") + frames->GetName());
1233 centerFiberGlassFrameSidePart_pos1->SetDx(
1234 +(distanceBetweenFiberGlassFrameSideParts + centerFiberGlassFrameSidePart_XSize) * 0.5);
1235 centerFiberGlassFrameSidePart_pos1->SetDy(0.0);
1236 centerFiberGlassFrameSidePart_pos1->SetDz(0.0);
1237 centerFiberGlassFrameSidePart_pos1->RegisterYourself();
1238
1239 TGeoTranslation* centerFiberGlassFrameSidePart_pos2 = new TGeoTranslation();
1240 centerFiberGlassFrameSidePart_pos2->SetName(TString("centerFiberGlassFrameSidePart_pos2") +=
1241 TString("_") + frames->GetName());
1242 centerFiberGlassFrameSidePart_pos2->SetDx(
1243 -(distanceBetweenFiberGlassFrameSideParts + centerFiberGlassFrameSidePart_XSize) * 0.5);
1244 centerFiberGlassFrameSidePart_pos2->SetDy(0.0);
1245 centerFiberGlassFrameSidePart_pos2->SetDz(0.0);
1246 centerFiberGlassFrameSidePart_pos2->RegisterYourself();
1247
1248 TGeoTranslation* centerFiberGlassFrameLongPart_top = new TGeoTranslation();
1249 centerFiberGlassFrameLongPart_top->SetName(TString("centerFiberGlassFrameLongPart_top") +=
1250 TString("_") + frames->GetName());
1251 centerFiberGlassFrameLongPart_top->SetDx(0.0);
1252 centerFiberGlassFrameLongPart_top->SetDy(
1253 +(distanceBetweenFiberGlassFrameLongParts + centerFiberGlassFrameLongPart_YSize) * 0.5);
1254 centerFiberGlassFrameLongPart_top->SetDz(0.0);
1255 centerFiberGlassFrameLongPart_top->RegisterYourself();
1256
1257 TGeoTranslation* centerFiberGlassFrameLongPart_bottom = new TGeoTranslation();
1258 centerFiberGlassFrameLongPart_bottom->SetName(TString("centerFiberGlassFrameLongPart_bottom") +=
1259 TString("_") + frames->GetName());
1260 centerFiberGlassFrameLongPart_bottom->SetDx(0.0);
1261 centerFiberGlassFrameLongPart_bottom->SetDy(
1262 -(distanceBetweenFiberGlassFrameLongParts + centerFiberGlassFrameLongPart_YSize) * 0.5);
1263 centerFiberGlassFrameLongPart_bottom->SetDz(0.0);
1264 centerFiberGlassFrameLongPart_bottom->RegisterYourself();
1265
1266 TGeoCompositeShape* centerFiberGlassFrameS = new TGeoCompositeShape();
1267 centerFiberGlassFrameS->SetName(TString("centerFiberGlassFrameS") += TString("_") + frames->GetName());
1268 {
1269 TString expression = "centerFiberGlassFrameSidePartS";
1270 expression += TString("_") + frames->GetName();
1271 expression += ":centerFiberGlassFrameSidePart_pos1";
1272 expression += TString("_") + frames->GetName();
1273 expression += "+centerFiberGlassFrameSidePartS";
1274 expression += TString("_") + frames->GetName();
1275 expression += ":centerFiberGlassFrameSidePart_pos2";
1276 expression += TString("_") + frames->GetName();
1277 expression += "+centerFiberGlassFrameLongPartS";
1278 expression += TString("_") + frames->GetName();
1279 expression += ":centerFiberGlassFrameLongPart_top";
1280 expression += TString("_") + frames->GetName();
1281 expression += "+centerFiberGlassFrameLongPartS";
1282 expression += TString("_") + frames->GetName();
1283 expression += ":centerFiberGlassFrameLongPart_bottom";
1284 expression += TString("_") + frames->GetName();
1285
1286 centerFiberGlassFrameS->MakeNode(expression);
1287 centerFiberGlassFrameS->ComputeBBox(); // need to compute a bounding box
1288 }
1289
1290 TGeoVolume* centerFiberGlassFrameV =
1291 new TGeoVolume(TString("centerFiberGlassFrameV") += TString("_") + frames->GetName(), centerFiberGlassFrameS);
1292
1293 // volume medium
1294 TGeoMedium* centerFiberGlassFrameV_medium = pMedFiberGlass;
1295 if (centerFiberGlassFrameV_medium) {
1296 centerFiberGlassFrameV->SetMedium(centerFiberGlassFrameV_medium);
1297 } else
1298 Fatal("Main", "Invalid medium for centerFiberGlassFrameV!");
1299
1300 // volume visual property (transparency)
1301 centerFiberGlassFrameV->SetLineColor(TColor::GetColor("#ccffcc"));
1302 centerFiberGlassFrameV->SetTransparency(0);
1303
1304 TGeoCombiTrans* centerFiberGlassFrame_transf[1];
1305
1306 centerFiberGlassFrame_transf[0] = new TGeoCombiTrans();
1307 centerFiberGlassFrame_transf[0]->SetDx(0.0);
1308 centerFiberGlassFrame_transf[0]->SetDy(0.0);
1309 centerFiberGlassFrame_transf[0]->SetDz(0.0);
1310
1311 frames->AddNode(centerFiberGlassFrameV, 0, centerFiberGlassFrame_transf[0]);
1312 //--------------------------------------------------------------------------
1313
1314 // center brass frame ------------------------------------------------------
1315 Double_t centerBrassFrameSidePart_XSize = 1.45; // cm
1316 Double_t centerBrassFrameSidePart_YSize = 44.6; // cm
1317 Double_t centerBrassFrameSidePart_ZSize = 0.005; // cm
1318
1319 Double_t centerBrassFrameLongPart_XSize = 66.5; // cm
1320 Double_t centerBrassFrameLongPart_YSize = 1.45; // cm
1321 Double_t centerBrassFrameLongPart_ZSize = 0.005; // cm
1322
1323 Double_t distanceBetweenBrassFrameSideParts = 66.5; // cm
1324 Double_t distanceBetweenBrassFrameLongParts = 41.7; // cm
1325
1326 TGeoShape* centerBrassFrameSidePartS = new TGeoBBox(
1327 TString("centerBrassFrameSidePartS") += TString("_") + frames->GetName(), centerBrassFrameSidePart_XSize * 0.5,
1328 centerBrassFrameSidePart_YSize * 0.5, centerBrassFrameSidePart_ZSize * 0.5);
1329 TGeoShape* centerBrassFrameLongPartS = new TGeoBBox(
1330 TString("centerBrassFrameLongPartS") += TString("_") + frames->GetName(), centerBrassFrameLongPart_XSize * 0.5,
1331 centerBrassFrameLongPart_YSize * 0.5, centerBrassFrameLongPart_ZSize * 0.5);
1332
1333 TGeoTranslation* centerBrassFrameSidePart_pos1 = new TGeoTranslation();
1334 centerBrassFrameSidePart_pos1->SetName(TString("centerBrassFrameSidePart_pos1") +=
1335 TString("_") + frames->GetName());
1336 centerBrassFrameSidePart_pos1->SetDx(+(distanceBetweenBrassFrameSideParts + centerBrassFrameSidePart_XSize) * 0.5);
1337 centerBrassFrameSidePart_pos1->SetDy(0.0);
1338 centerBrassFrameSidePart_pos1->SetDz(0.0);
1339 centerBrassFrameSidePart_pos1->RegisterYourself();
1340
1341 TGeoTranslation* centerBrassFrameSidePart_pos2 = new TGeoTranslation();
1342 centerBrassFrameSidePart_pos2->SetName(TString("centerBrassFrameSidePart_pos2") +=
1343 TString("_") + frames->GetName());
1344 centerBrassFrameSidePart_pos2->SetDx(-(distanceBetweenBrassFrameSideParts + centerBrassFrameSidePart_XSize) * 0.5);
1345 centerBrassFrameSidePart_pos2->SetDy(0.0);
1346 centerBrassFrameSidePart_pos2->SetDz(0.0);
1347 centerBrassFrameSidePart_pos2->RegisterYourself();
1348
1349 TGeoTranslation* centerBrassFrameLongPart_top = new TGeoTranslation();
1350 centerBrassFrameLongPart_top->SetName(TString("centerBrassFrameLongPart_top") += TString("_") + frames->GetName());
1351 centerBrassFrameLongPart_top->SetDx(0.0);
1352 centerBrassFrameLongPart_top->SetDy(+(distanceBetweenBrassFrameLongParts + centerBrassFrameLongPart_YSize) * 0.5);
1353 centerBrassFrameLongPart_top->SetDz(0.0);
1354 centerBrassFrameLongPart_top->RegisterYourself();
1355
1356 TGeoTranslation* centerBrassFrameLongPart_bottom = new TGeoTranslation();
1357 centerBrassFrameLongPart_bottom->SetName(TString("centerBrassFrameLongPart_bottom") +=
1358 TString("_") + frames->GetName());
1359 centerBrassFrameLongPart_bottom->SetDx(0.0);
1360 centerBrassFrameLongPart_bottom->SetDy(-(distanceBetweenBrassFrameLongParts + centerBrassFrameLongPart_YSize)
1361 * 0.5);
1362 centerBrassFrameLongPart_bottom->SetDz(0.0);
1363 centerBrassFrameLongPart_bottom->RegisterYourself();
1364
1365 TGeoCompositeShape* centerBrassFrameS = new TGeoCompositeShape();
1366 centerBrassFrameS->SetName(TString("centerBrassFrameS") += TString("_") + frames->GetName());
1367 {
1368 TString expression = "centerBrassFrameSidePartS";
1369 expression += TString("_") + frames->GetName();
1370 expression += ":centerBrassFrameSidePart_pos1";
1371 expression += TString("_") + frames->GetName();
1372 expression += "+centerBrassFrameSidePartS";
1373 expression += TString("_") + frames->GetName();
1374 expression += ":centerBrassFrameSidePart_pos2";
1375 expression += TString("_") + frames->GetName();
1376 expression += "+centerBrassFrameLongPartS";
1377 expression += TString("_") + frames->GetName();
1378 expression += ":centerBrassFrameLongPart_top";
1379 expression += TString("_") + frames->GetName();
1380 expression += "+centerBrassFrameLongPartS";
1381 expression += TString("_") + frames->GetName();
1382 expression += ":centerBrassFrameLongPart_bottom";
1383 expression += TString("_") + frames->GetName();
1384
1385 centerBrassFrameS->MakeNode(expression);
1386 centerBrassFrameS->ComputeBBox(); // need to compute a bounding box
1387 }
1388
1389 TGeoVolume* centerBrassFrameV =
1390 new TGeoVolume(TString("centerBrassFrameV") += TString("_") + frames->GetName(), centerBrassFrameS);
1391
1392 // volume medium
1393 TGeoMedium* centerBrassFrameV_medium = pMedBrass;
1394 if (centerBrassFrameV_medium) {
1395 centerBrassFrameV->SetMedium(centerBrassFrameV_medium);
1396 } else
1397 Fatal("Main", "Invalid medium for centerBrassFrameV!");
1398
1399 // volume visual property (transparency)
1400 centerBrassFrameV->SetLineColor(TColor::GetColor("#f07422"));
1401 centerBrassFrameV->SetTransparency(0);
1402
1403 TGeoCombiTrans* centerBrassFrame_transf[1];
1404
1405 centerBrassFrame_transf[0] = new TGeoCombiTrans();
1406 centerBrassFrame_transf[0]->SetDx(0.0);
1407 centerBrassFrame_transf[0]->SetDy(0.0);
1408 centerBrassFrame_transf[0]->SetDz(
1409 -(centerFiberGlassFrameSidePart_ZSize * 0.5 + centerBrassFrameSidePart_ZSize * 0.5));
1410
1411 frames->AddNode(centerBrassFrameV, 0, centerBrassFrame_transf[0]);
1412 //--------------------------------------------------------------------------
1413
1414 // center steel frame ------------------------------------------------------
1415 Double_t centerSteelFrameSidePart_XSize = 1.45; // cm
1416 Double_t centerSteelFrameSidePart_YSize = 44.6; // cm
1417 Double_t centerSteelFrameSidePart_ZSize = 0.005; // cm
1418
1419 Double_t centerSteelFrameLongPart_XSize = 66.5; // cm
1420 Double_t centerSteelFrameLongPart_YSize = 1.45; // cm
1421 Double_t centerSteelFrameLongPart_ZSize = 0.005; // cm
1422
1423 Double_t distanceBetweenSteelFrameSideParts = 66.5; // cm
1424 Double_t distanceBetweenSteelFrameLongParts = 41.7; // cm
1425
1426 TGeoShape* centerSteelFrameSidePartS = new TGeoBBox(
1427 TString("centerSteelFrameSidePartS") += TString("_") + frames->GetName(), centerSteelFrameSidePart_XSize * 0.5,
1428 centerSteelFrameSidePart_YSize * 0.5, centerSteelFrameSidePart_ZSize * 0.5);
1429 TGeoShape* centerSteelFrameLongPartS = new TGeoBBox(
1430 TString("centerSteelFrameLongPartS") += TString("_") + frames->GetName(), centerSteelFrameLongPart_XSize * 0.5,
1431 centerSteelFrameLongPart_YSize * 0.5, centerSteelFrameLongPart_ZSize * 0.5);
1432
1433 TGeoTranslation* centerSteelFrameSidePart_pos1 = new TGeoTranslation();
1434 centerSteelFrameSidePart_pos1->SetName(TString("centerSteelFrameSidePart_pos1") +=
1435 TString("_") + frames->GetName());
1436 centerSteelFrameSidePart_pos1->SetDx(+(distanceBetweenSteelFrameSideParts + centerSteelFrameSidePart_XSize) * 0.5);
1437 centerSteelFrameSidePart_pos1->SetDy(0.0);
1438 centerSteelFrameSidePart_pos1->SetDz(0.0);
1439 centerSteelFrameSidePart_pos1->RegisterYourself();
1440
1441 TGeoTranslation* centerSteelFrameSidePart_pos2 = new TGeoTranslation();
1442 centerSteelFrameSidePart_pos2->SetName(TString("centerSteelFrameSidePart_pos2") +=
1443 TString("_") + frames->GetName());
1444 centerSteelFrameSidePart_pos2->SetDx(-(distanceBetweenSteelFrameSideParts + centerSteelFrameSidePart_XSize) * 0.5);
1445 centerSteelFrameSidePart_pos2->SetDy(0.0);
1446 centerSteelFrameSidePart_pos2->SetDz(0.0);
1447 centerSteelFrameSidePart_pos2->RegisterYourself();
1448
1449 TGeoTranslation* centerSteelFrameLongPart_top = new TGeoTranslation();
1450 centerSteelFrameLongPart_top->SetName(TString("centerSteelFrameLongPart_top") += TString("_") + frames->GetName());
1451 centerSteelFrameLongPart_top->SetDx(0.0);
1452 centerSteelFrameLongPart_top->SetDy(+(distanceBetweenSteelFrameLongParts + centerSteelFrameLongPart_YSize) * 0.5);
1453 centerSteelFrameLongPart_top->SetDz(0.0);
1454 centerSteelFrameLongPart_top->RegisterYourself();
1455
1456 TGeoTranslation* centerSteelFrameLongPart_bottom = new TGeoTranslation();
1457 centerSteelFrameLongPart_bottom->SetName(TString("centerSteelFrameLongPart_bottom") +=
1458 TString("_") + frames->GetName());
1459 centerSteelFrameLongPart_bottom->SetDx(0.0);
1460 centerSteelFrameLongPart_bottom->SetDy(-(distanceBetweenSteelFrameLongParts + centerSteelFrameLongPart_YSize)
1461 * 0.5);
1462 centerSteelFrameLongPart_bottom->SetDz(0.0);
1463 centerSteelFrameLongPart_bottom->RegisterYourself();
1464
1465 TGeoCompositeShape* centerSteelFrameS = new TGeoCompositeShape();
1466 centerSteelFrameS->SetName(TString("centerSteelFrameS") += TString("_") + frames->GetName());
1467 {
1468 TString expression = "centerSteelFrameSidePartS";
1469 expression += TString("_") + frames->GetName();
1470 expression += ":centerSteelFrameSidePart_pos1";
1471 expression += TString("_") + frames->GetName();
1472 expression += "+centerSteelFrameSidePartS";
1473 expression += TString("_") + frames->GetName();
1474 expression += ":centerSteelFrameSidePart_pos2";
1475 expression += TString("_") + frames->GetName();
1476 expression += "+centerSteelFrameLongPartS";
1477 expression += TString("_") + frames->GetName();
1478 expression += ":centerSteelFrameLongPart_top";
1479 expression += TString("_") + frames->GetName();
1480 expression += "+centerSteelFrameLongPartS";
1481 expression += TString("_") + frames->GetName();
1482 expression += ":centerSteelFrameLongPart_bottom";
1483 expression += TString("_") + frames->GetName();
1484
1485 centerSteelFrameS->MakeNode(expression);
1486 centerSteelFrameS->ComputeBBox(); // need to compute a bounding box
1487 }
1488
1489 TGeoVolume* centerSteelFrameV =
1490 new TGeoVolume(TString("centerSteelFrameV") += TString("_") + frames->GetName(), centerSteelFrameS);
1491
1492 // volume medium
1493 TGeoMedium* centerSteelFrameV_medium = pMedSteel;
1494 if (centerSteelFrameV_medium) {
1495 centerSteelFrameV->SetMedium(centerSteelFrameV_medium);
1496 } else
1497 Fatal("Main", "Invalid medium for centerSteelFrameV!");
1498
1499 // volume visual property (transparency)
1500 centerSteelFrameV->SetLineColor(TColor::GetColor("#42aaff"));
1501 centerSteelFrameV->SetTransparency(0);
1502
1503 TGeoCombiTrans* centerSteelFrame_transf[1];
1504
1505 centerSteelFrame_transf[0] = new TGeoCombiTrans();
1506 centerSteelFrame_transf[0]->SetDx(0.0);
1507 centerSteelFrame_transf[0]->SetDy(0.0);
1508 centerSteelFrame_transf[0]->SetDz(-(centerFiberGlassFrameSidePart_ZSize * 0.5 + centerSteelFrameSidePart_ZSize
1509 + centerSteelFrameSidePart_ZSize * 0.5));
1510
1511 frames->AddNode(centerSteelFrameV, 0, centerSteelFrame_transf[0]);
1512 //--------------------------------------------------------------------------
1513
1514 // upper fiberglass side block ----------------------------------------------
1515 Double_t upperFiberGlassSideBlock_XSize = 3.3; // cm
1516 Double_t upperFiberGlassSideBlock_YSize = 16.8; // cm
1517 Double_t upperFiberGlassSideBlock_ZSize = 1.6; // cm
1518
1519 TGeoShape* upperFiberGlassSideBlockS = new TGeoBBox(
1520 TString("upperFiberGlassSideBlockS") += TString("_") + frames->GetName(), upperFiberGlassSideBlock_XSize * 0.5,
1521 upperFiberGlassSideBlock_YSize * 0.5, upperFiberGlassSideBlock_ZSize * 0.5);
1522
1523 TGeoVolume* upperFiberGlassSideBlockV = new TGeoVolume(
1524 TString("upperFiberGlassSideBlockV") += TString("_") + frames->GetName(), upperFiberGlassSideBlockS);
1525
1526 // volume medium
1527 TGeoMedium* upperFiberGlassSideBlockV_medium = pMedFiberGlass;
1528 if (upperFiberGlassSideBlockV_medium) {
1529 upperFiberGlassSideBlockV->SetMedium(upperFiberGlassSideBlockV_medium);
1530 } else
1531 Fatal("Main", "Invalid medium for upperFiberGlassSideBlockV!");
1532
1533 // volume visual property (transparency)
1534 upperFiberGlassSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1535 upperFiberGlassSideBlockV->SetTransparency(0);
1536
1537 TGeoCombiTrans* upperFiberGlassSideBlock_transf[1];
1538
1539 upperFiberGlassSideBlock_transf[0] = new TGeoCombiTrans();
1540 upperFiberGlassSideBlock_transf[0]->SetDx(-(distanceBetweenFiberGlassFrameSideParts * 0.5
1541 + centerFiberGlassFrameSidePart_XSize
1542 + upperFiberGlassSideBlock_XSize * 0.5));
1543 upperFiberGlassSideBlock_transf[0]->SetDy(
1544 +(centerFiberGlassFrameSidePart_YSize * 0.5 - upperFiberGlassSideBlock_YSize * 0.5));
1545 upperFiberGlassSideBlock_transf[0]->SetDz(
1546 -(upperFiberGlassSideBlock_ZSize * 0.5 - centerFiberGlassFrameSidePart_ZSize * 0.5));
1547
1548 frames->AddNode(upperFiberGlassSideBlockV, 0, upperFiberGlassSideBlock_transf[0]);
1549 //--------------------------------------------------------------------------
1550
1551 // FRONT COVER =============================================================
1552 Double_t frontFiberGlassCover_XSize = 69.4; // cm
1553 Double_t frontFiberGlassCover_YSize = 44.6; // cm
1554 Double_t frontFiberGlassCover_ZSize = 0.692; // cm
1555
1556 Double_t frontCover_dXshift = 0.0; // cm
1557 Double_t frontCover_dYshift = +0.1 * 0.5 /*shift*/; // cm
1558 Double_t frontCover_dZshift = -centerFiberGlassFrameSidePart_ZSize * 0.5 - centerSteelFrameSidePart_ZSize
1559 - centerSteelFrameSidePart_ZSize; // cm
1560
1561 // small epoxide inner layer ------------------------------------------------
1562 Double_t smallEpoxideInnerLayer_XSize = 65.6; // cm
1563 Double_t smallEpoxideInnerLayer_YSize = 41.6; // cm
1564 Double_t smallEpoxideInnerLayer_ZSize = 0.05 + 0.01 * 0.5; // cm
1565
1566 TGeoShape* smallEpoxideInnerLayerS = new TGeoBBox(
1567 TString("smallEpoxideInnerLayerS") += TString("_") + frames->GetName(), smallEpoxideInnerLayer_XSize * 0.5,
1568 smallEpoxideInnerLayer_YSize * 0.5, smallEpoxideInnerLayer_ZSize * 0.5);
1569
1570 TGeoVolume* smallEpoxideInnerLayerV =
1571 new TGeoVolume(TString("smallEpoxideInnerLayerV") += TString("_") + frames->GetName(), smallEpoxideInnerLayerS);
1572
1573 // volume medium
1574 TGeoMedium* smallEpoxideInnerLayerV_medium = pMedEpoxideCompound;
1575 if (smallEpoxideInnerLayerV_medium) {
1576 smallEpoxideInnerLayerV->SetMedium(smallEpoxideInnerLayerV_medium);
1577 } else
1578 Fatal("Main", "Invalid medium for smallEpoxideInnerLayerV!");
1579
1580 // volume visual property (transparency)
1581 smallEpoxideInnerLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1582 smallEpoxideInnerLayerV->SetTransparency(0);
1583
1584 TGeoCombiTrans* smallEpoxideInnerLayer_transf[1];
1585
1586 smallEpoxideInnerLayer_transf[0] = new TGeoCombiTrans();
1587 smallEpoxideInnerLayer_transf[0]->SetDx(frontCover_dXshift);
1588 smallEpoxideInnerLayer_transf[0]->SetDy(frontCover_dYshift);
1589 smallEpoxideInnerLayer_transf[0]->SetDz(-smallEpoxideInnerLayer_ZSize * 0.5 + frontCover_dZshift);
1590
1591 frames->AddNode(smallEpoxideInnerLayerV, 0, smallEpoxideInnerLayer_transf[0]);
1592 //--------------------------------------------------------------------------
1593
1594 // small honeycomb layer ----------------------------------------------------
1595 Double_t smallHoneyCombLayer_XSize = 65.6; // cm
1596 Double_t smallHoneyCombLayer_YSize = 41.6; // cm
1597 Double_t smallHoneyCombLayer_ZSize = 0.592; // cm
1598
1599 TGeoShape* smallHoneyCombLayerS =
1600 new TGeoBBox(TString("smallHoneyCombLayerS") += TString("_") + frames->GetName(),
1601 smallHoneyCombLayer_XSize * 0.5, smallHoneyCombLayer_YSize * 0.5, smallHoneyCombLayer_ZSize * 0.5);
1602
1603 TGeoVolume* smallHoneyCombLayerV =
1604 new TGeoVolume(TString("smallHoneyCombLayerV") += TString("_") + frames->GetName(), smallHoneyCombLayerS);
1605
1606 // volume medium
1607 TGeoMedium* smallHoneyCombLayerV_medium = pMedHoneyComb;
1608 if (smallHoneyCombLayerV_medium) {
1609 smallHoneyCombLayerV->SetMedium(smallHoneyCombLayerV_medium);
1610 } else
1611 Fatal("Main", "Invalid medium for smallHoneyCombLayerV!");
1612
1613 // volume visual property (transparency)
1614 smallHoneyCombLayerV->SetLineColor(TColor::GetColor("#ffdf84"));
1615 smallHoneyCombLayerV->SetTransparency(0);
1616
1617 TGeoCombiTrans* smallHoneyCombLayer_transf[1];
1618
1619 smallHoneyCombLayer_transf[0] = new TGeoCombiTrans();
1620 smallHoneyCombLayer_transf[0]->SetDx(frontCover_dXshift);
1621 smallHoneyCombLayer_transf[0]->SetDy(frontCover_dYshift);
1622 smallHoneyCombLayer_transf[0]->SetDz(-smallHoneyCombLayer_ZSize * 0.5 - smallEpoxideInnerLayer_ZSize
1623 + frontCover_dZshift);
1624
1625 frames->AddNode(smallHoneyCombLayerV, 0, smallHoneyCombLayer_transf[0]);
1626 //--------------------------------------------------------------------------
1627
1628 // small epoxide outer layer ------------------------------------------------
1629 Double_t smallEpoxideOuterLayer_XSize = 65.6; // cm
1630 Double_t smallEpoxideOuterLayer_YSize = 41.6; // cm
1631 Double_t smallEpoxideOuterLayer_ZSize = 0.05; // cm
1632
1633 TGeoShape* smallEpoxideOuterLayerS = new TGeoBBox(
1634 TString("smallEpoxideOuterLayerS") += TString("_") + frames->GetName(), smallEpoxideOuterLayer_XSize * 0.5,
1635 smallEpoxideOuterLayer_YSize * 0.5, smallEpoxideOuterLayer_ZSize * 0.5);
1636
1637 TGeoVolume* smallEpoxideOuterLayerV =
1638 new TGeoVolume(TString("smallEpoxideOuterLayerV") += TString("_") + frames->GetName(), smallEpoxideOuterLayerS);
1639
1640 // volume medium
1641 TGeoMedium* smallEpoxideOuterLayerV_medium = pMedEpoxideCompound;
1642 if (smallEpoxideOuterLayerV_medium) {
1643 smallEpoxideOuterLayerV->SetMedium(smallEpoxideOuterLayerV_medium);
1644 } else
1645 Fatal("Main", "Invalid medium for smallEpoxideOuterLayerV!");
1646
1647 // volume visual property (transparency)
1648 smallEpoxideOuterLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1649 smallEpoxideOuterLayerV->SetTransparency(0);
1650
1651 TGeoCombiTrans* smallEpoxideOuterLayer_transf[1];
1652
1653 smallEpoxideOuterLayer_transf[0] = new TGeoCombiTrans();
1654 smallEpoxideOuterLayer_transf[0]->SetDx(frontCover_dXshift);
1655 smallEpoxideOuterLayer_transf[0]->SetDy(frontCover_dYshift);
1656 smallEpoxideOuterLayer_transf[0]->SetDz(-smallEpoxideOuterLayer_ZSize * 0.5 - smallHoneyCombLayer_ZSize
1657 - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1658
1659 frames->AddNode(smallEpoxideOuterLayerV, 0, smallEpoxideOuterLayer_transf[0]);
1660 //--------------------------------------------------------------------------
1661
1662 // small fiberglass frame ---------------------------------------------------
1663 Double_t smallFiberGlassFrameLowerPart_XSize = 65.6; // cm
1664 Double_t smallFiberGlassFrameLowerPart_YSize = 1.55; // cm
1665 Double_t smallFiberGlassFrameLowerPart_ZSize = 0.692; // cm
1666
1667 Double_t smallFiberGlassFrameUpperPart_XSize = 65.6; // cm
1668 Double_t smallFiberGlassFrameUpperPart_YSize = 1.45; // cm
1669 Double_t smallFiberGlassFrameUpperPart_ZSize = 0.692; // cm
1670
1671 Double_t smallFiberGlassFrameSidePart_XSize = 1.9; // cm
1672 Double_t smallFiberGlassFrameSidePart_YSize = 44.6; // cm
1673 Double_t smallFiberGlassFrameSidePart_ZSize = 0.692; // cm
1674
1675 TGeoShape* smallFiberGlassFrameLowerPartS =
1676 new TGeoBBox(TString("smallFiberGlassFrameLowerPartS") += TString("_") + frames->GetName(),
1677 smallFiberGlassFrameLowerPart_XSize * 0.5, smallFiberGlassFrameLowerPart_YSize * 0.5,
1678 smallFiberGlassFrameLowerPart_ZSize * 0.5);
1679 TGeoShape* smallFiberGlassFrameUpperPartS =
1680 new TGeoBBox(TString("smallFiberGlassFrameUpperPartS") += TString("_") + frames->GetName(),
1681 smallFiberGlassFrameUpperPart_XSize * 0.5, smallFiberGlassFrameUpperPart_YSize * 0.5,
1682 smallFiberGlassFrameUpperPart_ZSize * 0.5);
1683 TGeoShape* smallFiberGlassFrameSidePartS =
1684 new TGeoBBox(TString("smallFiberGlassFrameSidePartS") += TString("_") + frames->GetName(),
1685 smallFiberGlassFrameSidePart_XSize * 0.5, smallFiberGlassFrameSidePart_YSize * 0.5,
1686 smallFiberGlassFrameSidePart_ZSize * 0.5);
1687
1688 TGeoTranslation* smallFiberGlassFrameLowerPart_pos = new TGeoTranslation();
1689 smallFiberGlassFrameLowerPart_pos->SetName(TString("smallFiberGlassFrameLowerPart_pos") +=
1690 TString("_") + frames->GetName());
1691 smallFiberGlassFrameLowerPart_pos->SetDx(0.0);
1692 smallFiberGlassFrameLowerPart_pos->SetDy(-smallEpoxideInnerLayer_YSize * 0.5
1693 - smallFiberGlassFrameLowerPart_YSize * 0.5);
1694 smallFiberGlassFrameLowerPart_pos->SetDz(0.0);
1695 smallFiberGlassFrameLowerPart_pos->RegisterYourself();
1696
1697 TGeoTranslation* smallFiberGlassFrameUpperPart_pos = new TGeoTranslation();
1698 smallFiberGlassFrameUpperPart_pos->SetName(TString("smallFiberGlassFrameUpperPart_pos") +=
1699 TString("_") + frames->GetName());
1700 smallFiberGlassFrameUpperPart_pos->SetDx(0.0);
1701 smallFiberGlassFrameUpperPart_pos->SetDy(smallEpoxideInnerLayer_YSize * 0.5
1702 + smallFiberGlassFrameUpperPart_YSize * 0.5);
1703 smallFiberGlassFrameUpperPart_pos->SetDz(0.0);
1704 smallFiberGlassFrameUpperPart_pos->RegisterYourself();
1705
1706 TGeoTranslation* smallFiberGlassFrameSidePart_pos1 = new TGeoTranslation();
1707 smallFiberGlassFrameSidePart_pos1->SetName(TString("smallFiberGlassFrameSidePart_pos1") +=
1708 TString("_") + frames->GetName());
1709 smallFiberGlassFrameSidePart_pos1->SetDx(smallEpoxideInnerLayer_XSize * 0.5
1710 + smallFiberGlassFrameSidePart_XSize * 0.5);
1711 smallFiberGlassFrameSidePart_pos1->SetDy((smallFiberGlassFrameUpperPart_YSize - smallFiberGlassFrameLowerPart_YSize)
1712 * 0.5);
1713 smallFiberGlassFrameSidePart_pos1->SetDz(0.0);
1714 smallFiberGlassFrameSidePart_pos1->RegisterYourself();
1715
1716 TGeoTranslation* smallFiberGlassFrameSidePart_pos2 = new TGeoTranslation();
1717 smallFiberGlassFrameSidePart_pos2->SetName(TString("smallFiberGlassFrameSidePart_pos2") +=
1718 TString("_") + frames->GetName());
1719 smallFiberGlassFrameSidePart_pos2->SetDx(
1720 -(smallEpoxideInnerLayer_XSize * 0.5 + smallFiberGlassFrameSidePart_XSize * 0.5));
1721 smallFiberGlassFrameSidePart_pos2->SetDy((smallFiberGlassFrameUpperPart_YSize - smallFiberGlassFrameLowerPart_YSize)
1722 * 0.5);
1723 smallFiberGlassFrameSidePart_pos2->SetDz(0.0);
1724 smallFiberGlassFrameSidePart_pos2->RegisterYourself();
1725
1726 TGeoCompositeShape* smallFiberGlassFrameS = new TGeoCompositeShape();
1727 smallFiberGlassFrameS->SetName(TString("smallFiberGlassFrameS") += TString("_") + frames->GetName());
1728 {
1729 TString expression = "smallFiberGlassFrameLowerPartS";
1730 expression += TString("_") + frames->GetName();
1731 expression += ":smallFiberGlassFrameLowerPart_pos";
1732 expression += TString("_") + frames->GetName();
1733 expression += "+smallFiberGlassFrameUpperPartS";
1734 expression += TString("_") + frames->GetName();
1735 expression += ":smallFiberGlassFrameUpperPart_pos";
1736 expression += TString("_") + frames->GetName();
1737 expression += "+smallFiberGlassFrameSidePartS";
1738 expression += TString("_") + frames->GetName();
1739 expression += ":smallFiberGlassFrameSidePart_pos1";
1740 expression += TString("_") + frames->GetName();
1741 expression += "+smallFiberGlassFrameSidePartS";
1742 expression += TString("_") + frames->GetName();
1743 expression += ":smallFiberGlassFrameSidePart_pos2";
1744 expression += TString("_") + frames->GetName();
1745
1746 smallFiberGlassFrameS->MakeNode(expression);
1747 smallFiberGlassFrameS->ComputeBBox(); // need to compute a bounding box
1748 }
1749
1750 TGeoVolume* smallFiberGlassFrameV =
1751 new TGeoVolume(TString("smallFiberGlassFrameV") += TString("_") + frames->GetName(), smallFiberGlassFrameS);
1752
1753 // volume medium
1754 TGeoMedium* smallFiberGlassFrameV_medium = pMedFiberGlass;
1755 if (smallFiberGlassFrameV_medium) {
1756 smallFiberGlassFrameV->SetMedium(smallFiberGlassFrameV_medium);
1757 } else
1758 Fatal("Main", "Invalid medium for smallFiberGlassFrameV!");
1759
1760 // volume visual property (transparency)
1761 smallFiberGlassFrameV->SetLineColor(TColor::GetColor("#ccffcc"));
1762 smallFiberGlassFrameV->SetTransparency(0);
1763
1764 TGeoCombiTrans* smallFiberGlassFrame_transf[1];
1765
1766 smallFiberGlassFrame_transf[0] = new TGeoCombiTrans();
1767 smallFiberGlassFrame_transf[0]->SetDx(frontCover_dXshift);
1768 smallFiberGlassFrame_transf[0]->SetDy(frontCover_dYshift);
1769 smallFiberGlassFrame_transf[0]->SetDz(-smallFiberGlassFrameLowerPart_ZSize * 0.5 + frontCover_dZshift);
1770
1771 frames->AddNode(smallFiberGlassFrameV, 0, smallFiberGlassFrame_transf[0]);
1772 //--------------------------------------------------------------------------
1773
1774 // small glue layer ---------------------------------------------------------
1775 Double_t smallGlueLayer_XSize = 69.4; // cm
1776 Double_t smallGlueLayer_YSize = 44.6; // cm
1777 Double_t smallGlueLayer_ZSize = 0.005 + 0.005; // cm (total one side thickness)
1778
1779 TGeoShape* smallGlueLayerS =
1780 new TGeoBBox(TString("smallGlueLayerS") += TString("_") + frames->GetName(), smallGlueLayer_XSize * 0.5,
1781 smallGlueLayer_YSize * 0.5, smallGlueLayer_ZSize * 0.5);
1782
1783 TGeoVolume* smallGlueLayerV =
1784 new TGeoVolume(TString("smallGlueLayerV") += TString("_") + frames->GetName(), smallGlueLayerS);
1785
1786 // volume medium
1787 TGeoMedium* smallGlueLayerV_medium = pMedGlue;
1788 if (smallGlueLayerV_medium) {
1789 smallGlueLayerV->SetMedium(smallGlueLayerV_medium);
1790 } else
1791 Fatal("Main", "Invalid medium for smallGlueLayerV!");
1792
1793 // volume visual property (transparency)
1794 smallGlueLayerV->SetLineColor(TColor::GetColor("#eeeeee"));
1795 smallGlueLayerV->SetTransparency(0);
1796
1797 TGeoCombiTrans* smallGlueLayer_transf[1];
1798
1799 smallGlueLayer_transf[0] = new TGeoCombiTrans();
1800 smallGlueLayer_transf[0]->SetDx(0.0);
1801 smallGlueLayer_transf[0]->SetDy(0.0);
1802 smallGlueLayer_transf[0]->SetDz(-smallGlueLayer_ZSize * 0.5 - smallEpoxideOuterLayer_ZSize
1803 - smallHoneyCombLayer_ZSize - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1804
1805 frames->AddNode(smallGlueLayerV, 0, smallGlueLayer_transf[0]);
1806 //--------------------------------------------------------------------------
1807
1808 // small polyamide layer ----------------------------------------------------
1809 Double_t smallPolyamideLayer_XSize = 69.4; // cm
1810 Double_t smallPolyamideLayer_YSize = 44.6; // cm
1811 Double_t smallPolyamideLayer_ZSize = 0.02 * 0.5; // cm
1812
1813 TGeoShape* smallPolyamideLayerS =
1814 new TGeoBBox(TString("smallPolyamideLayerS") += TString("_") + frames->GetName(),
1815 smallPolyamideLayer_XSize * 0.5, smallPolyamideLayer_YSize * 0.5, smallPolyamideLayer_ZSize * 0.5);
1816
1817 TGeoVolume* smallPolyamideLayerV =
1818 new TGeoVolume(TString("smallPolyamideLayerV") += TString("_") + frames->GetName(), smallPolyamideLayerS);
1819
1820 // volume medium
1821 TGeoMedium* smallPolyamideLayerV_medium = pMedPolyamide;
1822 if (smallPolyamideLayerV_medium) {
1823 smallPolyamideLayerV->SetMedium(smallPolyamideLayerV_medium);
1824 } else
1825 Fatal("Main", "Invalid medium for smallPolyamideLayerV!");
1826
1827 // volume visual property (transparency)
1828 smallPolyamideLayerV->SetLineColor(TColor::GetColor("#fefe22"));
1829 smallPolyamideLayerV->SetTransparency(0);
1830
1831 TGeoCombiTrans* smallPolyamideLayer_transf[1];
1832
1833 smallPolyamideLayer_transf[0] = new TGeoCombiTrans();
1834 smallPolyamideLayer_transf[0]->SetDx(0.0);
1835 smallPolyamideLayer_transf[0]->SetDy(0.0);
1836 smallPolyamideLayer_transf[0]->SetDz(-smallPolyamideLayer_ZSize * 0.5 - smallGlueLayer_ZSize
1837 - smallEpoxideOuterLayer_ZSize - smallHoneyCombLayer_ZSize
1838 - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1839
1840 frames->AddNode(smallPolyamideLayerV, 0, smallPolyamideLayer_transf[0]);
1841 //--------------------------------------------------------------------------
1842
1843 // small copper layer ------------------------------------------------
1844 Double_t smallCopperLayer_XSize = 69.4; // cm
1845 Double_t smallCopperLayer_YSize = 44.6; // cm
1846 Double_t smallCopperLayer_ZSize = 0.0035 + 0.0061 * 0.5 /*inside gem*/; // cm
1847
1848 TGeoShape* smallCopperLayerS =
1849 new TGeoBBox(TString("smallCopperLayerS") += TString("_") + frames->GetName(), smallCopperLayer_XSize * 0.5,
1850 smallCopperLayer_YSize * 0.5, smallCopperLayer_ZSize * 0.5);
1851
1852 TGeoVolume* smallCopperLayerV =
1853 new TGeoVolume(TString("smallCopperLayerV") += TString("_") + frames->GetName(), smallCopperLayerS);
1854
1855 // volume medium
1856 TGeoMedium* smallCopperLayerV_medium = pMedCopper;
1857 if (smallCopperLayerV_medium) {
1858 smallCopperLayerV->SetMedium(smallCopperLayerV_medium);
1859 } else
1860 Fatal("Main", "Invalid medium for smallCopperLayerV!");
1861
1862 // volume visual property (transparency)
1863 smallCopperLayerV->SetLineColor(TColor::GetColor("#ff7538"));
1864 smallCopperLayerV->SetTransparency(0);
1865
1866 TGeoCombiTrans* smallCopperLayer_transf[1];
1867
1868 smallCopperLayer_transf[0] = new TGeoCombiTrans();
1869 smallCopperLayer_transf[0]->SetDx(0.0);
1870 smallCopperLayer_transf[0]->SetDy(0.0);
1871 smallCopperLayer_transf[0]->SetDz(-smallCopperLayer_ZSize * 0.5 - smallPolyamideLayer_ZSize - smallGlueLayer_ZSize
1872 - smallEpoxideOuterLayer_ZSize - smallHoneyCombLayer_ZSize
1873 - smallEpoxideInnerLayer_ZSize + frontCover_dZshift);
1874
1875 frames->AddNode(smallCopperLayerV, 0, smallCopperLayer_transf[0]);
1876 //--------------------------------------------------------------------------
1877 //==========================================================================
1878
1879 // BACK COVER ===============================================================
1880 Double_t backFiberGlassCover_XSize = 75.3; // cm
1881 Double_t backFiberGlassCover_YSize = 48.5; // cm
1882 Double_t backFiberGlassCover_ZSize = 0.662; // cm
1883
1884 Double_t backCover_dXshift = -0.075 /*shift*/; // cm
1885 Double_t backCover_dYshift = -0.125 /*shift*/; // cm
1886 Double_t backCover_dZshift = centerFiberGlassFrameSidePart_ZSize * 0.5 + 0.005; // cm
1887
1888 // big epoxide inner layer ------------------------------------------------
1889 Double_t bigEpoxideInnerLayer_XSize = 65.95; // cm
1890 Double_t bigEpoxideInnerLayer_YSize = 40.85; // cm
1891 Double_t bigEpoxideInnerLayer_ZSize = 0.05 + 0.01 * 0.5; // cm
1892
1893 TGeoShape* bigEpoxideInnerLayerS = new TGeoBBox(
1894 TString("bigEpoxideInnerLayerS") += TString("_") + frames->GetName(), bigEpoxideInnerLayer_XSize * 0.5,
1895 bigEpoxideInnerLayer_YSize * 0.5, bigEpoxideInnerLayer_ZSize * 0.5);
1896
1897 TGeoVolume* bigEpoxideInnerLayerV =
1898 new TGeoVolume(TString("bigEpoxideInnerLayerV") += TString("_") + frames->GetName(), bigEpoxideInnerLayerS);
1899
1900 // volume medium
1901 TGeoMedium* bigEpoxideInnerLayerV_medium = pMedEpoxideCompound;
1902 if (bigEpoxideInnerLayerV_medium) {
1903 bigEpoxideInnerLayerV->SetMedium(bigEpoxideInnerLayerV_medium);
1904 } else
1905 Fatal("Main", "Invalid medium for bigEpoxideInnerLayerV!");
1906
1907 // volume visual property (transparency)
1908 bigEpoxideInnerLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1909 bigEpoxideInnerLayerV->SetTransparency(0);
1910
1911 TGeoCombiTrans* bigEpoxideInnerLayer_transf[1];
1912
1913 bigEpoxideInnerLayer_transf[0] = new TGeoCombiTrans();
1914 bigEpoxideInnerLayer_transf[0]->SetDx(backCover_dXshift);
1915 bigEpoxideInnerLayer_transf[0]->SetDy(backCover_dYshift);
1916 bigEpoxideInnerLayer_transf[0]->SetDz(bigEpoxideInnerLayer_ZSize * 0.5 + backCover_dZshift);
1917
1918 frames->AddNode(bigEpoxideInnerLayerV, 0, bigEpoxideInnerLayer_transf[0]);
1919 //--------------------------------------------------------------------------
1920
1921 // big honeycomb layer ----------------------------------------------------
1922 Double_t bigHoneyCombLayer_XSize = 65.95; // cm
1923 Double_t bigHoneyCombLayer_YSize = 40.85; // cm
1924 Double_t bigHoneyCombLayer_ZSize = 0.562; // cm
1925
1926 TGeoShape* bigHoneyCombLayerS =
1927 new TGeoBBox(TString("bigHoneyCombLayerS") += TString("_") + frames->GetName(), bigHoneyCombLayer_XSize * 0.5,
1928 bigHoneyCombLayer_YSize * 0.5, bigHoneyCombLayer_ZSize * 0.5);
1929
1930 TGeoVolume* bigHoneyCombLayerV =
1931 new TGeoVolume(TString("bigHoneyCombLayerV") += TString("_") + frames->GetName(), bigHoneyCombLayerS);
1932
1933 // volume medium
1934 TGeoMedium* bigHoneyCombLayerV_medium = pMedHoneyComb;
1935 if (bigHoneyCombLayerV_medium) {
1936 bigHoneyCombLayerV->SetMedium(bigHoneyCombLayerV_medium);
1937 } else
1938 Fatal("Main", "Invalid medium for bigHoneyCombLayerV!");
1939
1940 // volume visual property (transparency)
1941 bigHoneyCombLayerV->SetLineColor(TColor::GetColor("#ffdf84"));
1942 bigHoneyCombLayerV->SetTransparency(0);
1943
1944 TGeoCombiTrans* bigHoneyCombLayer_transf[1];
1945
1946 bigHoneyCombLayer_transf[0] = new TGeoCombiTrans();
1947 bigHoneyCombLayer_transf[0]->SetDx(backCover_dXshift);
1948 bigHoneyCombLayer_transf[0]->SetDy(backCover_dYshift);
1949 bigHoneyCombLayer_transf[0]->SetDz(bigHoneyCombLayer_ZSize * 0.5 + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
1950
1951 frames->AddNode(bigHoneyCombLayerV, 0, bigHoneyCombLayer_transf[0]);
1952 //--------------------------------------------------------------------------
1953
1954 // big epoxide outer layer --------------------------------------------------
1955 Double_t bigEpoxideOuterLayer_XSize = 65.95; // cm
1956 Double_t bigEpoxideOuterLayer_YSize = 40.85; // cm
1957 Double_t bigEpoxideOuterLayer_ZSize = 0.05; // cm
1958
1959 TGeoShape* bigEpoxideOuterLayerS = new TGeoBBox(
1960 TString("bigEpoxideOuterLayerS") += TString("_") + frames->GetName(), bigEpoxideOuterLayer_XSize * 0.5,
1961 bigEpoxideOuterLayer_YSize * 0.5, bigEpoxideOuterLayer_ZSize * 0.5);
1962
1963 TGeoVolume* bigEpoxideOuterLayerV =
1964 new TGeoVolume(TString("bigEpoxideOuterLayerV") += TString("_") + frames->GetName(), bigEpoxideOuterLayerS);
1965
1966 // volume medium
1967 TGeoMedium* bigEpoxideOuterLayerV_medium = pMedEpoxideCompound;
1968 if (bigEpoxideOuterLayerV_medium) {
1969 bigEpoxideOuterLayerV->SetMedium(bigEpoxideOuterLayerV_medium);
1970 } else
1971 Fatal("Main", "Invalid medium for bigEpoxideOuterLayerV!");
1972
1973 // volume visual property (transparency)
1974 bigEpoxideOuterLayerV->SetLineColor(TColor::GetColor("#aa33ff"));
1975 bigEpoxideOuterLayerV->SetTransparency(0);
1976
1977 TGeoCombiTrans* bigEpoxideOuterLayer_transf[1];
1978
1979 bigEpoxideOuterLayer_transf[0] = new TGeoCombiTrans();
1980 bigEpoxideOuterLayer_transf[0]->SetDx(backCover_dXshift);
1981 bigEpoxideOuterLayer_transf[0]->SetDy(backCover_dYshift);
1982 bigEpoxideOuterLayer_transf[0]->SetDz(bigEpoxideOuterLayer_ZSize * 0.5 + bigHoneyCombLayer_ZSize
1983 + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
1984
1985 frames->AddNode(bigEpoxideOuterLayerV, 0, bigEpoxideOuterLayer_transf[0]);
1986 //--------------------------------------------------------------------------
1987
1988 // big fiberglass frame -----------------------------------------------------
1989 Double_t bigFiberGlassFrameLowerPart_XSize = 65.95; // cm
1990 Double_t bigFiberGlassFrameLowerPart_YSize = 1.75; // cm
1991 Double_t bigFiberGlassFrameLowerPart_ZSize = 0.662; // cm
1992
1993 Double_t bigFiberGlassFrameUpperPart_XSize = 65.95; // cm
1994 Double_t bigFiberGlassFrameUpperPart_YSize = 5.9; // cm
1995 Double_t bigFiberGlassFrameUpperPart_ZSize = 0.662; // cm
1996
1997 Double_t bigFiberGlassFrameSmallSidePart_XSize = 1.8; // cm
1998 Double_t bigFiberGlassFrameSmallSidePart_YSize = 48.5; // cm
1999 Double_t bigFiberGlassFrameSmallSidePart_ZSize = 0.662; // cm
2000
2001 Double_t bigFiberGlassFrameBigSidePart_XSize = 7.55; // cm
2002 Double_t bigFiberGlassFrameBigSidePart_YSize = 48.5; // cm
2003 Double_t bigFiberGlassFrameBigSidePart_ZSize = 0.662; // cm
2004
2005 TGeoShape* bigFiberGlassFrameLowerPartS =
2006 new TGeoBBox(TString("bigFiberGlassFrameLowerPartS") += TString("_") + frames->GetName(),
2007 bigFiberGlassFrameLowerPart_XSize * 0.5, bigFiberGlassFrameLowerPart_YSize * 0.5,
2008 bigFiberGlassFrameLowerPart_ZSize * 0.5);
2009 TGeoShape* bigFiberGlassFrameUpperPartS =
2010 new TGeoBBox(TString("bigFiberGlassFrameUpperPartS") += TString("_") + frames->GetName(),
2011 bigFiberGlassFrameUpperPart_XSize * 0.5, bigFiberGlassFrameUpperPart_YSize * 0.5,
2012 bigFiberGlassFrameUpperPart_ZSize * 0.5);
2013 TGeoShape* bigFiberGlassFrameSmallSidePartS =
2014 new TGeoBBox(TString("bigFiberGlassFrameSmallSidePartS") += TString("_") + frames->GetName(),
2015 bigFiberGlassFrameSmallSidePart_XSize * 0.5, bigFiberGlassFrameSmallSidePart_YSize * 0.5,
2016 bigFiberGlassFrameSmallSidePart_ZSize * 0.5);
2017 TGeoShape* bigFiberGlassFrameBigSidePartS =
2018 new TGeoBBox(TString("bigFiberGlassFrameBigSidePartS") += TString("_") + frames->GetName(),
2019 bigFiberGlassFrameBigSidePart_XSize * 0.5, bigFiberGlassFrameBigSidePart_YSize * 0.5,
2020 bigFiberGlassFrameBigSidePart_ZSize * 0.5);
2021
2022 TGeoTranslation* bigFiberGlassFrameLowerPart_pos = new TGeoTranslation();
2023 bigFiberGlassFrameLowerPart_pos->SetName(TString("bigFiberGlassFrameLowerPart_pos") +=
2024 TString("_") + frames->GetName());
2025 bigFiberGlassFrameLowerPart_pos->SetDx(0.0);
2026 bigFiberGlassFrameLowerPart_pos->SetDy(-bigEpoxideInnerLayer_YSize * 0.5 - bigFiberGlassFrameLowerPart_YSize * 0.5);
2027 bigFiberGlassFrameLowerPart_pos->SetDz(0.0);
2028 bigFiberGlassFrameLowerPart_pos->RegisterYourself();
2029
2030 TGeoTranslation* bigFiberGlassFrameUpperPart_pos = new TGeoTranslation();
2031 bigFiberGlassFrameUpperPart_pos->SetName(TString("bigFiberGlassFrameUpperPart_pos") +=
2032 TString("_") + frames->GetName());
2033 bigFiberGlassFrameUpperPart_pos->SetDx(0.0);
2034 bigFiberGlassFrameUpperPart_pos->SetDy(bigEpoxideInnerLayer_YSize * 0.5 + bigFiberGlassFrameUpperPart_YSize * 0.5);
2035 bigFiberGlassFrameUpperPart_pos->SetDz(0.0);
2036 bigFiberGlassFrameUpperPart_pos->RegisterYourself();
2037
2038 TGeoTranslation* bigFiberGlassFrameSmallSidePart_pos = new TGeoTranslation();
2039 bigFiberGlassFrameSmallSidePart_pos->SetName(TString("bigFiberGlassFrameSmallSidePart_pos") +=
2040 TString("_") + frames->GetName());
2041 bigFiberGlassFrameSmallSidePart_pos->SetDx(bigEpoxideInnerLayer_XSize * 0.5
2042 + bigFiberGlassFrameSmallSidePart_XSize * 0.5);
2043 bigFiberGlassFrameSmallSidePart_pos->SetDy((bigFiberGlassFrameUpperPart_YSize - bigFiberGlassFrameLowerPart_YSize)
2044 * 0.5);
2045 bigFiberGlassFrameSmallSidePart_pos->SetDz(0.0);
2046 bigFiberGlassFrameSmallSidePart_pos->RegisterYourself();
2047
2048 TGeoTranslation* bigFiberGlassFrameBigSidePart_pos = new TGeoTranslation();
2049 bigFiberGlassFrameBigSidePart_pos->SetName(TString("bigFiberGlassFrameBigSidePart_pos") +=
2050 TString("_") + frames->GetName());
2051 bigFiberGlassFrameBigSidePart_pos->SetDx(
2052 -(bigEpoxideInnerLayer_XSize * 0.5 + bigFiberGlassFrameBigSidePart_XSize * 0.5));
2053 bigFiberGlassFrameBigSidePart_pos->SetDy((bigFiberGlassFrameUpperPart_YSize - bigFiberGlassFrameLowerPart_YSize)
2054 * 0.5);
2055 bigFiberGlassFrameBigSidePart_pos->SetDz(0.0);
2056 bigFiberGlassFrameBigSidePart_pos->RegisterYourself();
2057
2058 TGeoCompositeShape* bigFiberGlassFrameS = new TGeoCompositeShape();
2059 bigFiberGlassFrameS->SetName(TString("bigFiberGlassFrameS") += TString("_") + frames->GetName());
2060 {
2061 TString expression = "bigFiberGlassFrameLowerPartS";
2062 expression += TString("_") + frames->GetName();
2063 expression += ":bigFiberGlassFrameLowerPart_pos";
2064 expression += TString("_") + frames->GetName();
2065 expression += "+bigFiberGlassFrameUpperPartS";
2066 expression += TString("_") + frames->GetName();
2067 expression += ":bigFiberGlassFrameUpperPart_pos";
2068 expression += TString("_") + frames->GetName();
2069 expression += "+bigFiberGlassFrameSmallSidePartS";
2070 expression += TString("_") + frames->GetName();
2071 expression += ":bigFiberGlassFrameSmallSidePart_pos";
2072 expression += TString("_") + frames->GetName();
2073 expression += "+bigFiberGlassFrameBigSidePartS";
2074 expression += TString("_") + frames->GetName();
2075 expression += ":bigFiberGlassFrameBigSidePart_pos";
2076 expression += TString("_") + frames->GetName();
2077
2078 bigFiberGlassFrameS->MakeNode(expression);
2079 bigFiberGlassFrameS->ComputeBBox(); // need to compute a bounding box
2080 }
2081
2082 TGeoVolume* bigFiberGlassFrameV =
2083 new TGeoVolume(TString("bigFiberGlassFrameV") += TString("_") + frames->GetName(), bigFiberGlassFrameS);
2084
2085 // volume medium
2086 TGeoMedium* bigFiberGlassFrameV_medium = pMedFiberGlass;
2087 if (bigFiberGlassFrameV_medium) {
2088 bigFiberGlassFrameV->SetMedium(bigFiberGlassFrameV_medium);
2089 } else
2090 Fatal("Main", "Invalid medium for bigFiberGlassFrameV!");
2091
2092 // volume visual property (transparency)
2093 bigFiberGlassFrameV->SetLineColor(TColor::GetColor("#ccffcc"));
2094 bigFiberGlassFrameV->SetTransparency(0);
2095
2096 TGeoCombiTrans* bigFiberGlassFrame_transf[1];
2097
2098 bigFiberGlassFrame_transf[0] = new TGeoCombiTrans();
2099 bigFiberGlassFrame_transf[0]->SetDx(backCover_dXshift);
2100 bigFiberGlassFrame_transf[0]->SetDy(backCover_dYshift);
2101 bigFiberGlassFrame_transf[0]->SetDz(bigFiberGlassFrameLowerPart_ZSize * 0.5 + backCover_dZshift);
2102
2103 frames->AddNode(bigFiberGlassFrameV, 0, bigFiberGlassFrame_transf[0]);
2104 //--------------------------------------------------------------------------
2105
2106 // big glue layer -----------------------------------------------------------
2107 Double_t bigGlueLayer_XSize = 75.3; // cm
2108 Double_t bigGlueLayer_YSize = 48.5; // cm
2109 Double_t bigGlueLayer_ZSize = 0.005 + 0.005; // cm (total one side thickness)
2110
2111 TGeoShape* bigGlueLayerS =
2112 new TGeoBBox(TString("bigGlueLayerS") += TString("_") + frames->GetName(), bigGlueLayer_XSize * 0.5,
2113 bigGlueLayer_YSize * 0.5, bigGlueLayer_ZSize * 0.5);
2114
2115 TGeoVolume* bigGlueLayerV =
2116 new TGeoVolume(TString("bigGlueLayerV") += TString("_") + frames->GetName(), bigGlueLayerS);
2117
2118 // volume medium
2119 TGeoMedium* bigGlueLayerV_medium = pMedGlue;
2120 if (bigGlueLayerV_medium) {
2121 bigGlueLayerV->SetMedium(bigGlueLayerV_medium);
2122 } else
2123 Fatal("Main", "Invalid medium for bigGlueLayerV!");
2124
2125 // volume visual property (transparency)
2126 bigGlueLayerV->SetLineColor(TColor::GetColor("#eeeeee"));
2127 bigGlueLayerV->SetTransparency(0);
2128
2129 TGeoCombiTrans* bigGlueLayer_transf[1];
2130
2131 bigGlueLayer_transf[0] = new TGeoCombiTrans();
2132 bigGlueLayer_transf[0]->SetDx(-2.95 /*shift*/);
2133 bigGlueLayer_transf[0]->SetDy(+1.95 /*shift*/);
2134 bigGlueLayer_transf[0]->SetDz(bigGlueLayer_ZSize * 0.5 + bigEpoxideOuterLayer_ZSize + bigHoneyCombLayer_ZSize
2135 + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
2136
2137 frames->AddNode(bigGlueLayerV, 0, bigGlueLayer_transf[0]);
2138 //--------------------------------------------------------------------------
2139
2140 // big polyamide layer ------------------------------------------------------
2141 Double_t bigPolyamideLayer_XSize = 75.3; // cm
2142 Double_t bigPolyamideLayer_YSize = 48.5; // cm
2143 Double_t bigPolyamideLayer_ZSize = 0.02 * 0.5; // cm (total one side thickness)
2144
2145 TGeoShape* bigPolyamideLayerS =
2146 new TGeoBBox(TString("bigPolyamideLayerS") += TString("_") + frames->GetName(), bigPolyamideLayer_XSize * 0.5,
2147 bigPolyamideLayer_YSize * 0.5, bigPolyamideLayer_ZSize * 0.5);
2148
2149 TGeoVolume* bigPolyamideLayerV =
2150 new TGeoVolume(TString("bigPolyamideLayerV") += TString("_") + frames->GetName(), bigPolyamideLayerS);
2151
2152 // volume medium
2153 TGeoMedium* bigPolyamideLayerV_medium = pMedPolyamide;
2154 if (bigPolyamideLayerV_medium) {
2155 bigPolyamideLayerV->SetMedium(bigPolyamideLayerV_medium);
2156 } else
2157 Fatal("Main", "Invalid medium for bigPolyamideLayerV!");
2158
2159 // volume visual property (transparency)
2160 bigPolyamideLayerV->SetLineColor(TColor::GetColor("#fefe22"));
2161 bigPolyamideLayerV->SetTransparency(0);
2162
2163 TGeoCombiTrans* bigPolyamideLayer_transf[1];
2164
2165 bigPolyamideLayer_transf[0] = new TGeoCombiTrans();
2166 bigPolyamideLayer_transf[0]->SetDx(-2.95 /*shift*/);
2167 bigPolyamideLayer_transf[0]->SetDy(+1.95 /*shift*/);
2168 bigPolyamideLayer_transf[0]->SetDz(bigPolyamideLayer_ZSize * 0.5 + bigGlueLayer_ZSize + bigEpoxideOuterLayer_ZSize
2169 + bigHoneyCombLayer_ZSize + bigEpoxideInnerLayer_ZSize + backCover_dZshift);
2170
2171 frames->AddNode(bigPolyamideLayerV, 0, bigPolyamideLayer_transf[0]);
2172 //--------------------------------------------------------------------------
2173
2174 // big copper layer ---------------------------------------------------------
2175 Double_t bigCopperLayer_XSize = 75.3; // cm
2176 Double_t bigCopperLayer_YSize = 48.5; // cm
2177 Double_t bigCopperLayer_ZSize = 0.0035 + 0.0061 * 0.5 /*inside gem*/; // cm
2178
2179 TGeoShape* bigCopperLayerS =
2180 new TGeoBBox(TString("bigCopperLayerS") += TString("_") + frames->GetName(), bigCopperLayer_XSize * 0.5,
2181 bigCopperLayer_YSize * 0.5, bigCopperLayer_ZSize * 0.5);
2182
2183 TGeoVolume* bigCopperLayerV =
2184 new TGeoVolume(TString("bigCopperLayerV") += TString("_") + frames->GetName(), bigCopperLayerS);
2185
2186 // volume medium
2187 TGeoMedium* bigCopperLayerV_medium = pMedCopper;
2188 if (bigCopperLayerV_medium) {
2189 bigCopperLayerV->SetMedium(bigCopperLayerV_medium);
2190 } else
2191 Fatal("Main", "Invalid medium for bigCopperLayerV!");
2192
2193 // volume visual property (transparency)
2194 bigCopperLayerV->SetLineColor(TColor::GetColor("#ff7538"));
2195 bigCopperLayerV->SetTransparency(0);
2196
2197 TGeoCombiTrans* bigCopperLayer_transf[1];
2198
2199 bigCopperLayer_transf[0] = new TGeoCombiTrans();
2200 bigCopperLayer_transf[0]->SetDx(-2.95 /*shift*/);
2201 bigCopperLayer_transf[0]->SetDy(+1.95 /*shift*/);
2202 bigCopperLayer_transf[0]->SetDz(bigCopperLayer_ZSize * 0.5 + bigPolyamideLayer_ZSize + bigGlueLayer_ZSize
2203 + bigEpoxideOuterLayer_ZSize + bigHoneyCombLayer_ZSize + bigEpoxideInnerLayer_ZSize
2204 + backCover_dZshift);
2205
2206 frames->AddNode(bigCopperLayerV, 0, bigCopperLayer_transf[0]);
2207 //--------------------------------------------------------------------------
2208 //==========================================================================
2209
2210 // big side plate -----------------------------------------------------------
2211 Double_t bigSidePlate_XSize = 5.2; // cm
2212 Double_t bigSidePlate_YSize = 27.6; // cm
2213 Double_t bigSidePlate_ZSize = 0.3; // cm
2214
2215 TGeoShape* bigSidePlateS =
2216 new TGeoBBox(TString("bigSidePlateS") += TString("_") + frames->GetName(), bigSidePlate_XSize * 0.5,
2217 bigSidePlate_YSize * 0.5, bigSidePlate_ZSize * 0.5);
2218
2219 TGeoVolume* bigSidePlateV =
2220 new TGeoVolume(TString("bigSidePlateV") += TString("_") + frames->GetName(), bigSidePlateS);
2221
2222 // volume medium
2223 TGeoMedium* bigSidePlateV_medium = pMedAluminium;
2224 if (bigSidePlateV_medium) {
2225 bigSidePlateV->SetMedium(bigSidePlateV_medium);
2226 } else
2227 Fatal("Main", "Invalid medium for bigSidePlateV!");
2228
2229 // volume visual property (transparency)
2230 bigSidePlateV->SetLineColor(TColor::GetColor("#ffcccc"));
2231 bigSidePlateV->SetTransparency(0);
2232
2233 TGeoCombiTrans* bigSidePlate_transf[1];
2234
2235 bigSidePlate_transf[0] = new TGeoCombiTrans();
2236 bigSidePlate_transf[0]->SetDx(-(backFiberGlassCover_XSize - frontFiberGlassCover_XSize * 0.5)
2237 - bigSidePlate_XSize * 0.5 + 3.0 /*shift*/);
2238 bigSidePlate_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + bigSidePlate_YSize * 0.5);
2239 bigSidePlate_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - bigSidePlate_ZSize * 0.5);
2240
2241 frames->AddNode(bigSidePlateV, 0, bigSidePlate_transf[0]);
2242 //--------------------------------------------------------------------------
2243
2244 // big side support ---------------------------------------------------------
2245 Double_t bigSideSupport_XSize = 3.2; // cm
2246 Double_t bigSideSupport_YSize = 26; // cm
2247 Double_t bigSideSupport_ZSize = 0.6; // cm
2248
2249 TGeoShape* bigSideSupportS =
2250 new TGeoBBox(TString("bigSideSupportS") += TString("_") + frames->GetName(), bigSideSupport_XSize * 0.5,
2251 bigSideSupport_YSize * 0.5, bigSideSupport_ZSize * 0.5);
2252
2253 TGeoVolume* bigSideSupportV =
2254 new TGeoVolume(TString("bigSideSupportV") += TString("_") + frames->GetName(), bigSideSupportS);
2255
2256 // volume medium
2257 TGeoMedium* bigSideSupportV_medium = pMedAluminium;
2258 if (bigSideSupportV_medium) {
2259 bigSideSupportV->SetMedium(bigSideSupportV_medium);
2260 } else
2261 Fatal("Main", "Invalid medium for bigSideSupportV!");
2262
2263 // volume visual property (transparency)
2264 bigSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
2265 bigSideSupportV->SetTransparency(0);
2266
2267 TGeoCombiTrans* bigSideSupport_transf[1];
2268
2269 bigSideSupport_transf[0] = new TGeoCombiTrans();
2270 bigSideSupport_transf[0]->SetDx(-(backFiberGlassCover_XSize - frontFiberGlassCover_XSize * 0.5)
2271 - bigSideSupport_XSize * 0.5);
2272 bigSideSupport_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + bigSideSupport_YSize * 0.5 + 1.6 /*shift*/);
2273 bigSideSupport_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - bigSidePlate_ZSize
2274 - bigSideSupport_ZSize * 0.5);
2275
2276 frames->AddNode(bigSideSupportV, 0, bigSideSupport_transf[0]);
2277 //--------------------------------------------------------------------------
2278
2279 // small side plate -----------------------------------------------------------
2280 Double_t smallSidePlate_XSize = 4.2; // cm
2281 Double_t smallSidePlate_YSize = 3.7; // cm
2282 Double_t smallSidePlate_ZSize = 0.3; // cm
2283
2284 TGeoShape* smallSidePlateS =
2285 new TGeoBBox(TString("smallSidePlateS") += TString("_") + frames->GetName(), smallSidePlate_XSize * 0.5,
2286 smallSidePlate_YSize * 0.5, smallSidePlate_ZSize * 0.5);
2287
2288 TGeoVolume* smallSidePlateV =
2289 new TGeoVolume(TString("smallSidePlateV") += TString("_") + frames->GetName(), smallSidePlateS);
2290
2291 // volume medium
2292 TGeoMedium* smallSidePlateV_medium = pMedAluminium;
2293 if (smallSidePlateV_medium) {
2294 smallSidePlateV->SetMedium(smallSidePlateV_medium);
2295 } else
2296 Fatal("Main", "Invalid medium for smallSidePlateV!");
2297
2298 // volume visual property (transparency)
2299 smallSidePlateV->SetLineColor(TColor::GetColor("#ffcccc"));
2300 smallSidePlateV->SetTransparency(0);
2301
2302 TGeoCombiTrans* smallSidePlate_transf[1];
2303
2304 smallSidePlate_transf[0] = new TGeoCombiTrans();
2305 smallSidePlate_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - smallSidePlate_XSize * 0.5 + 2.2 /*shift*/);
2306 smallSidePlate_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + smallSidePlate_YSize * 0.5 + 0.2 /*shift*/);
2307 smallSidePlate_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - smallSidePlate_ZSize * 0.5);
2308
2309 frames->AddNode(smallSidePlateV, 0, smallSidePlate_transf[0]);
2310 //--------------------------------------------------------------------------
2311
2312 // small side support ---------------------------------------------------------
2313 Double_t smallSideSupport_XSize = 4.0; // cm
2314 Double_t smallSideSupport_YSize = 2.4; // cm
2315 Double_t smallSideSupport_ZSize = 0.6; // cm
2316
2317 TGeoShape* smallSideSupportS =
2318 new TGeoBBox(TString("smallSideSupportS") += TString("_") + frames->GetName(), smallSideSupport_XSize * 0.5,
2319 smallSideSupport_YSize * 0.5, smallSideSupport_ZSize * 0.5);
2320
2321 TGeoVolume* smallSideSupportV =
2322 new TGeoVolume(TString("smallSideSupportV") += TString("_") + frames->GetName(), smallSideSupportS);
2323
2324 // volume medium
2325 TGeoMedium* smallSideSupportV_medium = pMedAluminium;
2326 if (smallSideSupportV_medium) {
2327 smallSideSupportV->SetMedium(smallSideSupportV_medium);
2328 } else
2329 Fatal("Main", "Invalid medium for smallSideSupportV!");
2330
2331 // volume visual property (transparency)
2332 smallSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
2333 smallSideSupportV->SetTransparency(0);
2334
2335 TGeoCombiTrans* smallSideSupport_transf[1];
2336
2337 smallSideSupport_transf[0] = new TGeoCombiTrans();
2338 smallSideSupport_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - smallSideSupport_XSize * 0.5 + 3.3 /*shift*/);
2339 smallSideSupport_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + smallSideSupport_YSize * 0.5);
2340 smallSideSupport_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - bigSidePlate_ZSize
2341 - bigSideSupport_ZSize * 0.5);
2342
2343 frames->AddNode(smallSideSupportV, 0, smallSideSupport_transf[0]);
2344 //--------------------------------------------------------------------------
2345
2346 // side amplifier block -----------------------------------------------------
2347 Double_t sideAmplifierBlock_XSize = 0.3; // cm
2348 Double_t sideAmplifierBlock_YSize = 24.825; // cm
2349 Double_t sideAmplifierBlock_ZSize = 8.41; // cm
2350
2351 TGeoShape* sideAmplifierBlockS =
2352 new TGeoBBox(TString("sideAmplifierBlockS") += TString("_") + frames->GetName(), sideAmplifierBlock_XSize * 0.5,
2353 sideAmplifierBlock_YSize * 0.5, sideAmplifierBlock_ZSize * 0.5);
2354
2355 TGeoVolume* sideAmplifierBlockV =
2356 new TGeoVolume(TString("sideAmplifierBlockV") += TString("_") + frames->GetName(), sideAmplifierBlockS);
2357
2358 // volume medium
2359 TGeoMedium* sideAmplifierBlockV_medium = pMedFiberGlass;
2360 if (sideAmplifierBlockV_medium) {
2361 sideAmplifierBlockV->SetMedium(sideAmplifierBlockV_medium);
2362 } else
2363 Fatal("Main", "Invalid medium for sideAmplifierBlockV!");
2364
2365 // volume visual property (transparency)
2366 sideAmplifierBlockV->SetLineColor(TColor::GetColor("#99ff99"));
2367 sideAmplifierBlockV->SetTransparency(0);
2368
2369 TGeoCombiTrans* sideAmplifierBlock_transf[1];
2370
2371 sideAmplifierBlock_transf[0] = new TGeoCombiTrans();
2372 sideAmplifierBlock_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideAmplifierBlock_XSize * 0.5
2373 - 1.6 /*shift*/);
2374 sideAmplifierBlock_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideAmplifierBlock_YSize * 0.5
2375 + 1.575 /*shift*/);
2376 sideAmplifierBlock_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideAmplifierBlock_ZSize * 0.5);
2377
2378 frames->AddNode(sideAmplifierBlockV, 0, sideAmplifierBlock_transf[0]);
2379 //--------------------------------------------------------------------------
2380
2381 // upper amplifier block ----------------------------------------------------
2382 Double_t upperAmplifierBlockOutPart_XSize = 65.6; // cm
2383 Double_t upperAmplifierBlockOutPart_YSize = 0.3; // cm
2384 Double_t upperAmplifierBlockOutPart_ZSize = 8.41; // cm
2385
2386 Double_t upperAmplifierBlockInLeftPart_XSize = 29.3; // cm
2387 Double_t upperAmplifierBlockInLeftPart_YSize = 0.3; // cm
2388 Double_t upperAmplifierBlockInLeftPart_ZSize = 8.41; // cm
2389
2390 Double_t upperAmplifierBlockInRightPart_XSize = 26.0; // cm
2391 Double_t upperAmplifierBlockInRightPart_YSize = 0.3; // cm
2392 Double_t upperAmplifierBlockInRightPart_ZSize = 8.41; // cm
2393
2394 TGeoShape* upperAmplifierBlockOutPartS =
2395 new TGeoBBox(TString("upperAmplifierBlockOutPartS") += TString("_") + frames->GetName(),
2396 upperAmplifierBlockOutPart_XSize * 0.5, upperAmplifierBlockOutPart_YSize * 0.5,
2397 upperAmplifierBlockOutPart_ZSize * 0.5);
2398 TGeoShape* upperAmplifierBlockInLeftPartS =
2399 new TGeoBBox(TString("upperAmplifierBlockInLeftPartS") += TString("_") + frames->GetName(),
2400 upperAmplifierBlockInLeftPart_XSize * 0.5, upperAmplifierBlockInLeftPart_YSize * 0.5,
2401 upperAmplifierBlockInLeftPart_ZSize * 0.5);
2402 TGeoShape* upperAmplifierBlockInRightPartS =
2403 new TGeoBBox(TString("upperAmplifierBlockInRightPartS") += TString("_") + frames->GetName(),
2404 upperAmplifierBlockInRightPart_XSize * 0.5, upperAmplifierBlockInRightPart_YSize * 0.5,
2405 upperAmplifierBlockInRightPart_ZSize * 0.5);
2406
2407 TGeoVolume* upperAmplifierBlockOutPartV = new TGeoVolume(
2408 TString("upperAmplifierBlockOutPartV") += TString("_") + frames->GetName(), upperAmplifierBlockOutPartS);
2409 TGeoVolume* upperAmplifierBlockInLeftPartV = new TGeoVolume(
2410 TString("upperAmplifierBlockInLeftPartV") += TString("_") + frames->GetName(), upperAmplifierBlockInLeftPartS);
2411 TGeoVolume* upperAmplifierBlockInRightPartV =
2412 new TGeoVolume(TString("upperAmplifierBlockInRightPartV") += TString("_") + frames->GetName(),
2413 upperAmplifierBlockInRightPartS);
2414
2415 // volume medium
2416 TGeoMedium* upperAmplifierBlockOutPartV_medium = pMedFiberGlass;
2417 if (upperAmplifierBlockOutPartV_medium) {
2418 upperAmplifierBlockOutPartV->SetMedium(upperAmplifierBlockOutPartV_medium);
2419 upperAmplifierBlockInLeftPartV->SetMedium(upperAmplifierBlockOutPartV_medium);
2420 upperAmplifierBlockInRightPartV->SetMedium(upperAmplifierBlockOutPartV_medium);
2421 } else
2422 Fatal("Main", "Invalid medium for upperAmplifierBlock!");
2423
2424 // volume visual property (transparency)
2425 upperAmplifierBlockOutPartV->SetLineColor(TColor::GetColor("#99ff99"));
2426 upperAmplifierBlockOutPartV->SetTransparency(0);
2427 upperAmplifierBlockInLeftPartV->SetLineColor(TColor::GetColor("#99ff99"));
2428 upperAmplifierBlockInLeftPartV->SetTransparency(0);
2429 upperAmplifierBlockInRightPartV->SetLineColor(TColor::GetColor("#99ff99"));
2430 upperAmplifierBlockInRightPartV->SetTransparency(0);
2431
2432 TGeoCombiTrans* upperAmplifierBlock_transf[3];
2433
2434 upperAmplifierBlock_transf[0] = new TGeoCombiTrans();
2435 upperAmplifierBlock_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperAmplifierBlockOutPart_XSize * 0.5
2436 - 2.0 /*shift*/);
2437 upperAmplifierBlock_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperAmplifierBlockOutPart_YSize * 0.5
2438 + 2.9 /*shift*/);
2439 upperAmplifierBlock_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5
2440 - upperAmplifierBlockOutPart_ZSize * 0.5);
2441
2442 upperAmplifierBlock_transf[1] = new TGeoCombiTrans();
2443 upperAmplifierBlock_transf[1]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperAmplifierBlockInLeftPart_XSize * 0.5
2444 - 6.8 /*shift*/);
2445 upperAmplifierBlock_transf[1]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperAmplifierBlockInLeftPart_YSize * 0.5
2446 + 1.4 /*shift*/);
2447 upperAmplifierBlock_transf[1]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5
2448 - upperAmplifierBlockInLeftPart_ZSize * 0.5);
2449
2450 upperAmplifierBlock_transf[2] = new TGeoCombiTrans();
2451 upperAmplifierBlock_transf[2]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperAmplifierBlockInLeftPart_XSize
2452 - upperAmplifierBlockInRightPart_XSize * 0.5 - 7.6 /*shift*/);
2453 upperAmplifierBlock_transf[2]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperAmplifierBlockInRightPart_YSize * 0.5
2454 + 1.4 /*shift*/);
2455 upperAmplifierBlock_transf[2]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5
2456 - upperAmplifierBlockInRightPart_ZSize * 0.5);
2457
2458 frames->AddNode(upperAmplifierBlockOutPartV, 0, upperAmplifierBlock_transf[0]);
2459 frames->AddNode(upperAmplifierBlockInLeftPartV, 0, upperAmplifierBlock_transf[1]);
2460 frames->AddNode(upperAmplifierBlockInRightPartV, 0, upperAmplifierBlock_transf[2]);
2461 //--------------------------------------------------------------------------
2462
2463 // side PCB -----------------------------------------------------------------
2464 Double_t sidePCB_XSize = 0.15; // cm
2465 Double_t sidePCB_YSize = 35.05; // cm
2466 Double_t sidePCB_ZSize = 4.0; // cm
2467
2468 TGeoShape* sidePCBS = new TGeoBBox(TString("sidePCBS") += TString("_") + frames->GetName(), sidePCB_XSize * 0.5,
2469 sidePCB_YSize * 0.5, sidePCB_ZSize * 0.5);
2470
2471 TGeoVolume* sidePCBV = new TGeoVolume(TString("sidePCBV") += TString("_") + frames->GetName(), sidePCBS);
2472
2473 // volume medium
2474 TGeoMedium* sidePCBV_medium = pMedFiberGlass;
2475 if (sidePCBV_medium) {
2476 sidePCBV->SetMedium(sidePCBV_medium);
2477 } else
2478 Fatal("Main", "Invalid medium for sidePCBV!");
2479
2480 // volume visual property (transparency)
2481 sidePCBV->SetLineColor(TColor::GetColor("#55ee55"));
2482 sidePCBV->SetTransparency(0);
2483
2484 TGeoCombiTrans* sidePCB_transf[1];
2485
2486 sidePCB_transf[0] = new TGeoCombiTrans();
2487 sidePCB_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sidePCB_XSize * 0.5 - 0.45 /*shift*/);
2488 sidePCB_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sidePCB_YSize * 0.5 + 2.5 /*shift*/);
2489 sidePCB_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sidePCB_ZSize * 0.5 - 4.4 /*shift*/);
2490
2491 frames->AddNode(sidePCBV, 0, sidePCB_transf[0]);
2492 //--------------------------------------------------------------------------
2493
2494 // upper PCB ----------------------------------------------------------------
2495 Double_t upperPCB_XSize = 70.1; // cm
2496 Double_t upperPCB_YSize = 0.15; // cm
2497 Double_t upperPCB_ZSize = 4.0; // cm
2498
2499 TGeoShape* upperPCBS = new TGeoBBox(TString("upperPCBS") += TString("_") + frames->GetName(), upperPCB_XSize * 0.5,
2500 upperPCB_YSize * 0.5, upperPCB_ZSize * 0.5);
2501
2502 TGeoVolume* upperPCBV = new TGeoVolume(TString("upperPCBV") += TString("_") + frames->GetName(), upperPCBS);
2503
2504 // volume medium
2505 TGeoMedium* upperPCBV_medium = pMedFiberGlass;
2506 if (upperPCBV_medium) {
2507 upperPCBV->SetMedium(upperPCBV_medium);
2508 } else
2509 Fatal("Main", "Invalid medium for upperPCBV!");
2510
2511 // volume visual property (transparency)
2512 upperPCBV->SetLineColor(TColor::GetColor("#55ee55"));
2513 upperPCBV->SetTransparency(0);
2514
2515 TGeoCombiTrans* upperPCB_transf[1];
2516
2517 upperPCB_transf[0] = new TGeoCombiTrans();
2518 upperPCB_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperPCB_XSize * 0.5 - 1.7 /*shift*/);
2519 upperPCB_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperPCB_YSize * 0.5 + 0.1 /*shift*/);
2520 upperPCB_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperPCB_ZSize * 0.5 - 4.4 /*shift*/);
2521
2522 frames->AddNode(upperPCBV, 0, upperPCB_transf[0]);
2523 //--------------------------------------------------------------------------
2524
2525 // side bottom leg ----------------------------------------------------------
2526 Double_t sideBottomSmallLeg_XSize = 2.0; // cm
2527 Double_t sideBottomSmallLeg_YSize = 0.46; // cm
2528 Double_t sideBottomSmallLeg_ZSize = 1.9; // cm
2529
2530 Double_t sideBottomBigLeg_XSize = 5.4; // cm
2531 Double_t sideBottomBigLeg_YSize = 0.46; // cm
2532 Double_t sideBottomBigLeg_ZSize = 3.2; // cm
2533
2534 TGeoShape* sideBottomSmallLegS =
2535 new TGeoBBox(TString("sideBottomSmallLegS") += TString("_") + frames->GetName(), sideBottomSmallLeg_XSize * 0.5,
2536 sideBottomSmallLeg_YSize * 0.5, sideBottomSmallLeg_ZSize * 0.5);
2537 TGeoShape* sideBottomBigLegS =
2538 new TGeoBBox(TString("sideBottomBigLegS") += TString("_") + frames->GetName(), sideBottomBigLeg_XSize * 0.5,
2539 sideBottomBigLeg_YSize * 0.5, sideBottomBigLeg_ZSize * 0.5);
2540
2541 TGeoVolume* sideBottomSmallLegV =
2542 new TGeoVolume(TString("sideBottomSmallLegV") += TString("_") + frames->GetName(), sideBottomSmallLegS);
2543 TGeoVolume* sideBottomBigLegV =
2544 new TGeoVolume(TString("sideBottomBigLegV") += TString("_") + frames->GetName(), sideBottomBigLegS);
2545
2546 // volume medium
2547 TGeoMedium* sideBottomLeg_medium = pMedAluminium;
2548 if (sideBottomLeg_medium) {
2549 sideBottomSmallLegV->SetMedium(sideBottomLeg_medium);
2550 sideBottomBigLegV->SetMedium(sideBottomLeg_medium);
2551 } else
2552 Fatal("Main", "Invalid medium for sideBottomLegV!");
2553
2554 // volume visual property (transparency)
2555 sideBottomSmallLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2556 sideBottomSmallLegV->SetTransparency(0);
2557 sideBottomBigLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2558 sideBottomBigLegV->SetTransparency(0);
2559
2560 TGeoCombiTrans* sideBottomSmallLeg_transf[1];
2561
2562 sideBottomSmallLeg_transf[0] = new TGeoCombiTrans();
2563 sideBottomSmallLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideBottomSmallLeg_XSize * 0.5
2564 - 2.9 /*shift*/);
2565 sideBottomSmallLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideBottomSmallLeg_YSize * 0.5
2566 + 1.05 /*shift*/);
2567 sideBottomSmallLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideBottomSmallLeg_ZSize * 0.5
2568 - bigSidePlate_ZSize);
2569
2570 TGeoCombiTrans* sideBottomBigLeg_transf[1];
2571
2572 sideBottomBigLeg_transf[0] = new TGeoCombiTrans();
2573 sideBottomBigLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 + sideBottomBigLeg_XSize * 0.5
2574 - sideBottomSmallLeg_XSize - 2.9 /*shift*/);
2575 sideBottomBigLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideBottomBigLeg_YSize * 0.5
2576 + 1.05 /*shift*/);
2577 sideBottomBigLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideBottomBigLeg_ZSize * 0.5
2578 - bigSidePlate_ZSize - sideBottomSmallLeg_ZSize);
2579
2580 frames->AddNode(sideBottomSmallLegV, 0, sideBottomSmallLeg_transf[0]);
2581 frames->AddNode(sideBottomBigLegV, 0, sideBottomBigLeg_transf[0]);
2582 //--------------------------------------------------------------------------
2583
2584 // side top leg -------------------------------------------------------------
2585 Double_t sideTopSmallLeg_XSize = 2.0; // cm
2586 Double_t sideTopSmallLeg_YSize = 0.56; // cm
2587 Double_t sideTopSmallLeg_ZSize = 2.24; // cm
2588
2589 Double_t sideTopBigLeg_XSize = 4.3; // cm
2590 Double_t sideTopBigLeg_YSize = 0.56; // cm
2591 Double_t sideTopBigLeg_ZSize = 2.8; // cm
2592
2593 TGeoShape* sideTopSmallLegS =
2594 new TGeoBBox(TString("sideTopSmallLegS") += TString("_") + frames->GetName(), sideTopSmallLeg_XSize * 0.5,
2595 sideTopSmallLeg_YSize * 0.5, sideTopSmallLeg_ZSize * 0.5);
2596 TGeoShape* sideTopBigLegS =
2597 new TGeoBBox(TString("sideTopBigLegS") += TString("_") + frames->GetName(), sideTopBigLeg_XSize * 0.5,
2598 sideTopBigLeg_YSize * 0.5, sideTopBigLeg_ZSize * 0.5);
2599
2600 TGeoVolume* sideTopSmallLegV =
2601 new TGeoVolume(TString("sideTopSmallLegV") += TString("_") + frames->GetName(), sideTopSmallLegS);
2602 TGeoVolume* sideTopBigLegV =
2603 new TGeoVolume(TString("sideTopBigLegV") += TString("_") + frames->GetName(), sideTopBigLegS);
2604
2605 // volume medium
2606 TGeoMedium* sideTopLeg_medium = pMedAluminium;
2607 if (sideTopLeg_medium) {
2608 sideTopSmallLegV->SetMedium(sideTopLeg_medium);
2609 sideTopBigLegV->SetMedium(sideTopLeg_medium);
2610 } else
2611 Fatal("Main", "Invalid medium for sideTopLegV!");
2612
2613 // volume visual property (transparency)
2614 sideTopSmallLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2615 sideTopSmallLegV->SetTransparency(0);
2616 sideTopBigLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2617 sideTopBigLegV->SetTransparency(0);
2618
2619 TGeoCombiTrans* sideTopSmallLeg_transf[1];
2620
2621 sideTopSmallLeg_transf[0] = new TGeoCombiTrans();
2622 sideTopSmallLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideTopSmallLeg_XSize * 0.5 - 2.9 /*shift*/);
2623 sideTopSmallLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideTopSmallLeg_YSize * 0.5 + 27.23 /*shift*/);
2624 sideTopSmallLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideTopSmallLeg_ZSize * 0.5
2625 - bigSidePlate_ZSize);
2626
2627 TGeoCombiTrans* sideTopBigLeg_transf[1];
2628
2629 sideTopBigLeg_transf[0] = new TGeoCombiTrans();
2630 sideTopBigLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 + sideTopBigLeg_XSize * 0.5 - sideTopSmallLeg_XSize
2631 - 2.9 /*shift*/);
2632 sideTopBigLeg_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideTopBigLeg_YSize * 0.5 + 27.23 /*shift*/);
2633 sideTopBigLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideTopBigLeg_ZSize * 0.5
2634 - bigSidePlate_ZSize - sideTopSmallLeg_ZSize);
2635
2636 frames->AddNode(sideTopSmallLegV, 0, sideTopSmallLeg_transf[0]);
2637 frames->AddNode(sideTopBigLegV, 0, sideTopBigLeg_transf[0]);
2638 //--------------------------------------------------------------------------
2639
2640 // side stick ---------------------------------------------------------------
2641 Double_t sideLongStick_XSize = 0.6; // cm
2642 Double_t sideLongStick_YSize = 25.72; // cm
2643 Double_t sideLongStick_ZSize = 1.2; // cm
2644
2645 Double_t sideShortStick_XSize = 0.6; // cm
2646 Double_t sideShortStick_YSize = 9.6; // cm
2647 Double_t sideShortStick_ZSize = 1.2; // cm
2648
2649 TGeoShape* sideLongStickS =
2650 new TGeoBBox(TString("sideLongStickS") += TString("_") + frames->GetName(), sideLongStick_XSize * 0.5,
2651 sideLongStick_YSize * 0.5, sideLongStick_ZSize * 0.5);
2652 TGeoShape* sideShortStickS =
2653 new TGeoBBox(TString("sideShortStickS") += TString("_") + frames->GetName(), sideShortStick_XSize * 0.5,
2654 sideShortStick_YSize * 0.5, sideShortStick_ZSize * 0.5);
2655
2656 TGeoVolume* sideLongStickV =
2657 new TGeoVolume(TString("sideLongStickV") += TString("_") + frames->GetName(), sideLongStickS);
2658 TGeoVolume* sideShortStickV =
2659 new TGeoVolume(TString("sideShortStickV") += TString("_") + frames->GetName(), sideShortStickS);
2660
2661 // volume medium
2662 TGeoMedium* sideStick_medium = pMedAluminium;
2663 if (sideStick_medium) {
2664 sideLongStickV->SetMedium(sideStick_medium);
2665 sideShortStickV->SetMedium(sideStick_medium);
2666 } else
2667 Fatal("Main", "Invalid medium for sideTopLegV!");
2668
2669 // volume visual property (transparency)
2670 sideLongStickV->SetLineColor(TColor::GetColor("#ffcccc"));
2671 sideLongStickV->SetTransparency(0);
2672 sideShortStickV->SetLineColor(TColor::GetColor("#ffcccc"));
2673 sideShortStickV->SetTransparency(0);
2674
2675 TGeoCombiTrans* sideLongStick_transf[1];
2676
2677 sideLongStick_transf[0] = new TGeoCombiTrans();
2678 sideLongStick_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - 0.9 /*shift*/);
2679 sideLongStick_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideLongStick_YSize * 0.5 + 1.51 /*shift*/);
2680 sideLongStick_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideLongStick_ZSize * 0.5
2681 - bigSidePlate_ZSize - sideTopSmallLeg_ZSize - sideTopBigLeg_ZSize + 0.04 /*shift*/);
2682
2683 TGeoCombiTrans* sideShortStick_transf[1];
2684
2685 sideShortStick_transf[0] = new TGeoCombiTrans();
2686 sideShortStick_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - 0.9 /*shift*/);
2687 sideShortStick_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideShortStick_YSize * 0.5 + sideLongStick_YSize
2688 + 2.07 /*shift*/);
2689 sideShortStick_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideShortStick_ZSize * 0.5
2690 - bigSidePlate_ZSize - sideTopSmallLeg_ZSize - sideTopBigLeg_ZSize
2691 + 0.04 /*shift*/);
2692
2693 frames->AddNode(sideLongStickV, 0, sideLongStick_transf[0]);
2694 frames->AddNode(sideShortStickV, 0, sideShortStick_transf[0]);
2695 //--------------------------------------------------------------------------
2696
2697 // side funny box -----------------------------------------------------------
2698 Double_t sideFunnyBox_XSize = 0.8; // cm
2699 Double_t sideFunnyBox_YSize = 1.0; // cm
2700 Double_t sideFunnyBox_ZSize = 1.5; // cm
2701
2702 TGeoShape* sideFunnyBoxS =
2703 new TGeoBBox(TString("sideFunnyBoxS") += TString("_") + frames->GetName(), sideFunnyBox_XSize * 0.5,
2704 sideFunnyBox_YSize * 0.5, sideFunnyBox_ZSize * 0.5);
2705
2706 TGeoVolume* sideFunnyBoxV =
2707 new TGeoVolume(TString("sideFunnyBoxV") += TString("_") + frames->GetName(), sideFunnyBoxS);
2708
2709 // volume medium
2710 TGeoMedium* sideFunnyBoxV_medium = pMedAluminium;
2711 if (sideFunnyBoxV_medium) {
2712 sideFunnyBoxV->SetMedium(sideFunnyBoxV_medium);
2713 } else
2714 Fatal("Main", "Invalid medium for sideFunnyBoxV!");
2715
2716 // volume visual property (transparency)
2717 sideFunnyBoxV->SetLineColor(TColor::GetColor("#ffcccc"));
2718 sideFunnyBoxV->SetTransparency(0);
2719
2720 TGeoCombiTrans* sideFunnyBox_transf[1];
2721
2722 sideFunnyBox_transf[0] = new TGeoCombiTrans();
2723 sideFunnyBox_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5);
2724 sideFunnyBox_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideFunnyBox_YSize * 0.5 + sideBottomBigLeg_YSize
2725 + 1.05 /*shift*/);
2726 sideFunnyBox_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideShortStick_ZSize * 0.5
2727 - bigSidePlate_ZSize - sideBottomSmallLeg_ZSize - sideBottomBigLeg_ZSize);
2728
2729 frames->AddNode(sideFunnyBoxV, 0, sideFunnyBox_transf[0]);
2730 //--------------------------------------------------------------------------
2731
2732 // upper platform -----------------------------------------------------------
2733 Double_t upperPlatform_XSize = 2.2; // cm
2734 Double_t upperPlatform_YSize = 3.7; // cm
2735 Double_t upperPlatform_ZSize = 0.2; // cm
2736
2737 TGeoShape* upperPlatformS =
2738 new TGeoBBox(TString("upperPlatformS") += TString("_") + frames->GetName(), upperPlatform_XSize * 0.5,
2739 upperPlatform_YSize * 0.5, upperPlatform_ZSize * 0.5);
2740
2741 TGeoVolume* upperPlatformV =
2742 new TGeoVolume(TString("upperPlatformV") += TString("_") + frames->GetName(), upperPlatformS);
2743
2744 // volume medium
2745 TGeoMedium* upperPlatformV_medium = pMedAluminium;
2746 if (upperPlatformV_medium) {
2747 upperPlatformV->SetMedium(upperPlatformV_medium);
2748 } else
2749 Fatal("Main", "Invalid medium for upperPlatformV!");
2750
2751 // volume visual property (transparency)
2752 upperPlatformV->SetLineColor(TColor::GetColor("#ffcccc"));
2753 upperPlatformV->SetTransparency(0);
2754
2755 TGeoCombiTrans* upperPlatform_transf[1];
2756
2757 upperPlatform_transf[0] = new TGeoCombiTrans();
2758 upperPlatform_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - upperPlatform_XSize * 0.5 - 0.8 /*shift*/);
2759 upperPlatform_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperPlatform_YSize * 0.5 + 0.2 /*shift*/);
2760 upperPlatform_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperPlatform_ZSize * 0.5);
2761
2762 frames->AddNode(upperPlatformV, 0, upperPlatform_transf[0]);
2763 //--------------------------------------------------------------------------
2764
2765 // front left leg -----------------------------------------------------------
2766 Double_t frontLeftLeg_XSize = 0.53; // cm
2767 Double_t frontLeftLeg_YSize = 2.5; // cm
2768 Double_t frontLeftLeg_ZSize = 7.4; // cm
2769
2770 TGeoShape* frontLeftLegS =
2771 new TGeoBBox(TString("frontLeftLegS") += TString("_") + frames->GetName(), frontLeftLeg_XSize * 0.5,
2772 frontLeftLeg_YSize * 0.5, frontLeftLeg_ZSize * 0.5);
2773
2774 TGeoVolume* frontLeftLegV =
2775 new TGeoVolume(TString("frontLeftLegV") += TString("_") + frames->GetName(), frontLeftLegS);
2776
2777 // volume medium
2778 TGeoMedium* frontLeftLegV_medium = pMedAluminium;
2779 if (frontLeftLegV_medium) {
2780 frontLeftLegV->SetMedium(frontLeftLegV_medium);
2781 } else
2782 Fatal("Main", "Invalid medium for frontLeftLegV!");
2783
2784 // volume visual property (transparency)
2785 frontLeftLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2786 frontLeftLegV->SetTransparency(0);
2787
2788 TGeoCombiTrans* frontLeftLeg_transf[1];
2789
2790 frontLeftLeg_transf[0] = new TGeoCombiTrans();
2791 frontLeftLeg_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - frontLeftLeg_XSize * 0.5 - 1.97 /*shift*/);
2792 frontLeftLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontLeftLeg_YSize * 0.5 + 0.4 /*shift*/);
2793 frontLeftLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperPlatform_ZSize
2794 - frontLeftLeg_ZSize * 0.5);
2795
2796 frames->AddNode(frontLeftLegV, 0, frontLeftLeg_transf[0]);
2797 //--------------------------------------------------------------------------
2798
2799 // front right leg ----------------------------------------------------------
2800 Double_t frontRightLeg_XSize = 0.55; // cm
2801 Double_t frontRightLeg_YSize = 2.5; // cm
2802 Double_t frontRightLeg_ZSize = 6.4; // cm
2803
2804 TGeoShape* frontRightLegS =
2805 new TGeoBBox(TString("frontRightLegS") += TString("_") + frames->GetName(), frontRightLeg_XSize * 0.5,
2806 frontRightLeg_YSize * 0.5, frontRightLeg_ZSize * 0.5);
2807
2808 TGeoVolume* frontRightLegV =
2809 new TGeoVolume(TString("frontRightLegV") += TString("_") + frames->GetName(), frontRightLegS);
2810
2811 // volume medium
2812 TGeoMedium* frontRightLegV_medium = pMedAluminium;
2813 if (frontRightLegV_medium) {
2814 frontRightLegV->SetMedium(frontRightLegV_medium);
2815 } else
2816 Fatal("Main", "Invalid medium for frontRightLegV!");
2817
2818 // volume visual property (transparency)
2819 frontRightLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2820 frontRightLegV->SetTransparency(0);
2821
2822 TGeoCombiTrans* frontRightLeg_transf[1];
2823
2824 frontRightLeg_transf[0] = new TGeoCombiTrans();
2825 frontRightLeg_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontRightLeg_XSize * 0.5 - 1.82 /*shift*/);
2826 frontRightLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontRightLeg_YSize * 0.5 + 0.4 /*shift*/);
2827 frontRightLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - smallSidePlate_ZSize
2828 - frontRightLeg_ZSize * 0.5);
2829
2830 frames->AddNode(frontRightLegV, 0, frontRightLeg_transf[0]);
2831 //--------------------------------------------------------------------------
2832
2833 // front center leg ---------------------------------------------------------
2834 Double_t frontCenterLowLeg_XSize = 1.3; // cm
2835 Double_t frontCenterLowLeg_YSize = 0.54; // cm
2836 Double_t frontCenterLowLeg_ZSize = 6.875; // cm
2837
2838 Double_t frontCenterUpLeg_XSize = 0.75; // cm
2839 Double_t frontCenterUpLeg_YSize = 1.9; // cm
2840 Double_t frontCenterUpLeg_ZSize = 6.875; // cm
2841
2842 TGeoShape* frontCenterLowLegS =
2843 new TGeoBBox(TString("frontCenterLowLegS") += TString("_") + frames->GetName(), frontCenterLowLeg_XSize * 0.5,
2844 frontCenterLowLeg_YSize * 0.5, frontCenterLowLeg_ZSize * 0.5);
2845 TGeoShape* frontCenterUpLegS =
2846 new TGeoBBox(TString("frontCenterUpLegS") += TString("_") + frames->GetName(), frontCenterUpLeg_XSize * 0.5,
2847 frontCenterUpLeg_YSize * 0.5, frontCenterUpLeg_ZSize * 0.5);
2848
2849 TGeoVolume* frontCenterLowLegV =
2850 new TGeoVolume(TString("frontCenterLowLegV") += TString("_") + frames->GetName(), frontCenterLowLegS);
2851 TGeoVolume* frontCenterUpLegV =
2852 new TGeoVolume(TString("frontCenterUpLegV") += TString("_") + frames->GetName(), frontCenterUpLegS);
2853
2854 // volume medium
2855 TGeoMedium* frontCenterLeg_medium = pMedAluminium;
2856 if (frontCenterLeg_medium) {
2857 frontCenterLowLegV->SetMedium(frontCenterLeg_medium);
2858 frontCenterUpLegV->SetMedium(frontCenterLeg_medium);
2859 } else
2860 Fatal("Main", "Invalid medium for frontCenterLeg!");
2861
2862 // volume visual property (transparency)
2863 frontCenterLowLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2864 frontCenterLowLegV->SetTransparency(0);
2865 frontCenterUpLegV->SetLineColor(TColor::GetColor("#ffcccc"));
2866 frontCenterUpLegV->SetTransparency(0);
2867
2868 TGeoCombiTrans* frontCenterLowLeg_transf[1];
2869
2870 frontCenterLowLeg_transf[0] = new TGeoCombiTrans();
2871 frontCenterLowLeg_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontCenterLowLeg_XSize * 0.5
2872 - 35.84 /*shift*/);
2873 frontCenterLowLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontCenterLowLeg_YSize * 0.5
2874 + 0.46 /*shift*/);
2875 frontCenterLowLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontCenterLowLeg_ZSize * 0.5);
2876
2877 TGeoCombiTrans* frontCenterUpLeg_transf[1];
2878
2879 frontCenterUpLeg_transf[0] = new TGeoCombiTrans();
2880 frontCenterUpLeg_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontCenterUpLeg_XSize * 0.5 - 36.1 /*shift*/);
2881 frontCenterUpLeg_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + frontCenterUpLeg_YSize * 0.5
2882 + frontCenterLowLeg_YSize + 0.46 /*shift*/);
2883 frontCenterUpLeg_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontCenterUpLeg_ZSize * 0.5);
2884
2885 frames->AddNode(frontCenterLowLegV, 0, frontCenterLowLeg_transf[0]);
2886 frames->AddNode(frontCenterUpLegV, 0, frontCenterUpLeg_transf[0]);
2887 //--------------------------------------------------------------------------
2888
2889 // upper plank --------------------------------------------------------------
2890 Double_t upperRightPlank_XSize = 34.49; // cm
2891 Double_t upperRightPlank_YSize = 0.6; // cm
2892 Double_t upperRightPlank_ZSize = 1.2; // cm
2893
2894 Double_t upperLeftPlank_XSize = 33.73; // cm
2895 Double_t upperLeftPlank_YSize = 0.6; // cm
2896 Double_t upperLeftPlank_ZSize = 1.2; // cm
2897
2898 TGeoShape* upperRightPlankS =
2899 new TGeoBBox(TString("upperRightPlankS") += TString("_") + frames->GetName(), upperRightPlank_XSize * 0.5,
2900 upperRightPlank_YSize * 0.5, upperRightPlank_ZSize * 0.5);
2901 TGeoShape* upperLeftPlankS =
2902 new TGeoBBox(TString("upperLeftPlankS") += TString("_") + frames->GetName(), upperLeftPlank_XSize * 0.5,
2903 upperLeftPlank_YSize * 0.5, upperLeftPlank_ZSize * 0.5);
2904
2905 TGeoVolume* upperRightPlankV =
2906 new TGeoVolume(TString("upperRightPlankV") += TString("_") + frames->GetName(), upperRightPlankS);
2907 TGeoVolume* upperLeftPlankV =
2908 new TGeoVolume(TString("upperLeftPlankV") += TString("_") + frames->GetName(), upperLeftPlankS);
2909
2910 // volume medium
2911 TGeoMedium* upperPlank_medium = pMedAluminium;
2912 if (upperPlank_medium) {
2913 upperRightPlankV->SetMedium(upperPlank_medium);
2914 upperLeftPlankV->SetMedium(upperPlank_medium);
2915 } else
2916 Fatal("Main", "Invalid medium for upperPlankV!");
2917
2918 // volume visual property (transparency)
2919 upperRightPlankV->SetLineColor(TColor::GetColor("#ffcccc"));
2920 upperRightPlankV->SetTransparency(0);
2921 upperLeftPlankV->SetLineColor(TColor::GetColor("#ffcccc"));
2922 upperLeftPlankV->SetTransparency(0);
2923
2924 TGeoCombiTrans* upperRightPlank_transf[1];
2925
2926 upperRightPlank_transf[0] = new TGeoCombiTrans();
2927 upperRightPlank_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperRightPlank_XSize * 0.5 - 36.88 /*shift*/);
2928 upperRightPlank_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperRightPlank_YSize * 0.5 + 2.291 /*shift*/);
2929 upperRightPlank_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperRightPlank_ZSize * 0.5
2930 - 5.23 /*shift*/);
2931
2932 TGeoCombiTrans* upperLeftPlank_transf[1];
2933
2934 upperLeftPlank_transf[0] = new TGeoCombiTrans();
2935 upperLeftPlank_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - upperLeftPlank_XSize * 0.5 - 2.37 /*shift*/);
2936 upperLeftPlank_transf[0]->SetDy(frontFiberGlassCover_YSize * 0.5 + upperLeftPlank_YSize * 0.5 + 2.291 /*shift*/);
2937 upperLeftPlank_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - upperLeftPlank_ZSize * 0.5
2938 - 5.23 /*shift*/);
2939
2940 frames->AddNode(upperRightPlankV, 0, upperRightPlank_transf[0]);
2941 frames->AddNode(upperLeftPlankV, 0, upperLeftPlank_transf[0]);
2942 //--------------------------------------------------------------------------
2943
2944 // side channel bar ---------------------------------------------------------
2945 Double_t sideChannelBar_XSize = 1.5; // cm
2946 Double_t sideChannelBar_YSize = 40.0; // cm
2947 Double_t sideChannelBar_ZSize = 0.38; // cm
2948
2949 TGeoShape* sideChannelBarS =
2950 new TGeoBBox(TString("sideChannelBarS") += TString("_") + frames->GetName(), sideChannelBar_XSize * 0.5,
2951 sideChannelBar_YSize * 0.5, sideChannelBar_ZSize * 0.5);
2952
2953 TGeoVolume* sideChannelBarV =
2954 new TGeoVolume(TString("sideChannelBarV") += TString("_") + frames->GetName(), sideChannelBarS);
2955
2956 // volume medium
2957 TGeoMedium* sideChannelBarV_medium = pMedAluminium;
2958 if (sideChannelBarV_medium) {
2959 sideChannelBarV->SetMedium(sideChannelBarV_medium);
2960 } else
2961 Fatal("Main", "Invalid medium for sideChannelBarV!");
2962
2963 // volume visual property (transparency)
2964 sideChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
2965 sideChannelBarV->SetTransparency(0);
2966
2967 TGeoCombiTrans* sideChannelBar_transf[1];
2968
2969 sideChannelBar_transf[0] = new TGeoCombiTrans();
2970 sideChannelBar_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - sideChannelBar_XSize * 0.5 + 2.0 /*shift*/);
2971 sideChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + sideChannelBar_YSize * 0.5 + 1.05 /*shift*/);
2972 sideChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - sideChannelBar_ZSize * 0.5
2973 - 2.14 /*shift*/);
2974
2975 frames->AddNode(sideChannelBarV, 0, sideChannelBar_transf[0]);
2976 //--------------------------------------------------------------------------
2977
2978 // front funny channel bar --------------------------------------------------
2979 Double_t frontFunnyChannelBar_XSize = 2.82; // cm
2980 Double_t frontFunnyChannelBar_YSize = 2.5; // cm
2981 Double_t frontFunnyChannelBar_ZSize = 0.47; // cm
2982
2983 TGeoShape* frontFunnyChannelBarS = new TGeoBBox(
2984 TString("frontFunnyChannelBarS") += TString("_") + frames->GetName(), frontFunnyChannelBar_XSize * 0.5,
2985 frontFunnyChannelBar_YSize * 0.5, frontFunnyChannelBar_ZSize * 0.5);
2986
2987 TGeoVolume* frontFunnyChannelBarV =
2988 new TGeoVolume(TString("frontFunnyChannelBarV") += TString("_") + frames->GetName(), frontFunnyChannelBarS);
2989
2990 // volume medium
2991 TGeoMedium* frontFunnyChannelBarV_medium = pMedAluminium;
2992 if (frontFunnyChannelBarV_medium) {
2993 frontFunnyChannelBarV->SetMedium(frontFunnyChannelBarV_medium);
2994 } else
2995 Fatal("Main", "Invalid medium for frontFunnyChannelBarV!");
2996
2997 // volume visual property (transparency)
2998 frontFunnyChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
2999 frontFunnyChannelBarV->SetTransparency(0);
3000
3001 TGeoCombiTrans* frontFunnyChannelBar_transf[1];
3002
3003 frontFunnyChannelBar_transf[0] = new TGeoCombiTrans();
3004 frontFunnyChannelBar_transf[0]->SetDx(-frontFiberGlassCover_XSize * 0.5 - frontFunnyChannelBar_XSize * 0.5
3005 - 2.5 /*shift*/);
3006 frontFunnyChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + frontFunnyChannelBar_YSize * 0.5
3007 + 43.1 /*shift*/);
3008 frontFunnyChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontFunnyChannelBar_ZSize * 0.5
3009 - 2.1 /*shift*/);
3010
3011 frames->AddNode(frontFunnyChannelBarV, 0, frontFunnyChannelBar_transf[0]);
3012 //--------------------------------------------------------------------------
3013
3014 // front channel bar --------------------------------------------------------
3015 Double_t frontRightChannelBar_XSize = 34.23; // cm
3016 Double_t frontRightChannelBar_YSize = 2.5; // cm
3017 Double_t frontRightChannelBar_ZSize = 0.47; // cm
3018
3019 Double_t frontLeftChannelBar_XSize = 33.47; // cm
3020 Double_t frontLeftChannelBar_YSize = 2.5; // cm
3021 Double_t frontLeftChannelBar_ZSize = 0.47; // cm
3022
3023 TGeoShape* frontRightChannelBarS = new TGeoBBox(
3024 TString("frontRightChannelBarS") += TString("_") + frames->GetName(), frontRightChannelBar_XSize * 0.5,
3025 frontRightChannelBar_YSize * 0.5, frontRightChannelBar_ZSize * 0.5);
3026 TGeoShape* frontLeftChannelBarS =
3027 new TGeoBBox(TString("frontLeftChannelBarS") += TString("_") + frames->GetName(),
3028 frontLeftChannelBar_XSize * 0.5, frontLeftChannelBar_YSize * 0.5, frontLeftChannelBar_ZSize * 0.5);
3029
3030 TGeoVolume* frontRightChannelBarV =
3031 new TGeoVolume(TString("frontRightChannelBarV") += TString("_") + frames->GetName(), frontRightChannelBarS);
3032 TGeoVolume* frontLeftChannelBarV =
3033 new TGeoVolume(TString("frontLeftChannelBarV") += TString("_") + frames->GetName(), frontLeftChannelBarS);
3034
3035 // volume medium
3036 TGeoMedium* frontChannel_medium = pMedAluminium;
3037 if (frontChannel_medium) {
3038 frontRightChannelBarV->SetMedium(frontChannel_medium);
3039 frontLeftChannelBarV->SetMedium(frontChannel_medium);
3040 } else
3041 Fatal("Main", "Invalid medium for frontChannelBarV!");
3042
3043 // volume visual property (transparency)
3044 frontRightChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
3045 frontRightChannelBarV->SetTransparency(0);
3046 frontLeftChannelBarV->SetLineColor(TColor::GetColor("#ffcccc"));
3047 frontLeftChannelBarV->SetTransparency(0);
3048
3049 TGeoCombiTrans* frontRightChannelBar_transf[1];
3050
3051 frontRightChannelBar_transf[0] = new TGeoCombiTrans();
3052 frontRightChannelBar_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontRightChannelBar_XSize * 0.5
3053 - 37.14 /*shift*/);
3054 frontRightChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + frontRightChannelBar_YSize * 0.5
3055 + 43.1 /*shift*/);
3056 frontRightChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontRightChannelBar_ZSize * 0.5
3057 - 2.1 /*shift*/);
3058
3059 TGeoCombiTrans* frontLeftChannelBar_transf[1];
3060
3061 frontLeftChannelBar_transf[0] = new TGeoCombiTrans();
3062 frontLeftChannelBar_transf[0]->SetDx(frontFiberGlassCover_XSize * 0.5 - frontLeftChannelBar_XSize * 0.5
3063 - 2.37 /*shift*/);
3064 frontLeftChannelBar_transf[0]->SetDy(-frontFiberGlassCover_YSize * 0.5 + frontLeftChannelBar_YSize * 0.5
3065 + 43.1 /*shift*/);
3066 frontLeftChannelBar_transf[0]->SetDz(centerFiberGlassFrameSidePart_ZSize * 0.5 - frontLeftChannelBar_ZSize * 0.5
3067 - 2.1 /*shift*/);
3068
3069 frames->AddNode(frontRightChannelBarV, 0, frontRightChannelBar_transf[0]);
3070 frames->AddNode(frontLeftChannelBarV, 0, frontLeftChannelBar_transf[0]);
3071 //--------------------------------------------------------------------------
3072
3073 return frames;
3074}
3075//------------------------------------------------------------------------------
3076
3078 Double_t xsize,
3079 Double_t ysize,
3080 Double_t zsize,
3081 Double_t hole_radius)
3082{
3083
3084 // module shapes
3085 TGeoShape* module_partS = new TGeoBBox("module_partS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
3086 TGeoShape* holeS = new TGeoTube("holeS", 0.0, hole_radius, zsize * 0.5 + 0.01);
3087
3088 gRandom->SetSeed(0);
3089 Int_t uniqueId = gRandom->Integer(10000);
3090 TGeoTranslation* hole_module_trans = new TGeoTranslation(
3091 TString("hole_module_trans_") + TString::Itoa(uniqueId, 10), -xsize * 0.5, -ysize * 0.5, 0.0);
3092
3093 hole_module_trans->RegisterYourself();
3094
3095 TString bool_expression_module = TString(module_partS->GetName()) + TString(" - ") + TString(holeS->GetName())
3096 + TString(":") + TString(hole_module_trans->GetName());
3097 TGeoCompositeShape* moduleS = new TGeoCompositeShape(bool_expression_module);
3098
3099 // module volume
3100 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
3101
3102 // medium
3103 if (pMedArCO27030)
3104 moduleV->SetMedium(pMedArCO27030);
3105 else
3106 Fatal("Main", "Invalid medium for sensitive modules!");
3107
3108 // visual parameters
3109 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
3110 moduleV->SetTransparency(20);
3111
3112 return moduleV;
3113}
3114
3116{
3117
3118 // frame volumes
3119 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
3120 layers->SetMedium(pMedAir);
3121
3122 // Common parameters for all layers
3123 Double_t layer_XSize = XModuleSize_Station163x45; // cm
3124 Double_t layer_YSize = YModuleSize_Station163x45; // cm
3125
3126 Double_t layerFront_XSize = 80.85; // cm
3127 Double_t layerFront_YSize = 44.2; // cm
3128 Double_t layerFront_XShift = -0.375; // cm
3129 Double_t layerFront_YShift = -0.2; // cm
3130
3131 Double_t layerBack_XSize = 80.71; // cm
3132 Double_t layerBack_YSize = 44.2; // cm
3133 Double_t layerBack_XShift = -0.445; // cm
3134 Double_t layerBack_YShift = -0.2; // cm
3135
3136 // copper layer -------------------------------------------------------------
3137 Double_t copperLayer_ZSize = 0.00655; // cm;
3138 Double_t copperLayerHole_Radius = 6.0; // cm
3139
3140 // layer shape
3141 TGeoShape* copperLayerFrontBlankS =
3142 new TGeoBBox(TString("copperLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3143 layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
3144 TGeoShape* copperLayerBackBlankS =
3145 new TGeoBBox(TString("copperLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
3146 layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
3147
3148 TGeoShape* copperLayerFrontHoleS =
3149 new TGeoTube(TString("copperLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0, copperLayerHole_Radius,
3150 copperLayer_ZSize * 0.5 + 0.01);
3151 TGeoShape* copperLayerBackHoleS = new TGeoTube(TString("copperLayerBackHoleS") += TString("_") + layers->GetName(),
3152 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
3153
3154 TGeoTranslation* copperLayerFrontHole_pos = new TGeoTranslation();
3155 copperLayerFrontHole_pos->SetName("copperLayerFrontHole_pos");
3156 copperLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3157 copperLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3158 copperLayerFrontHole_pos->SetDz(0.0);
3159 copperLayerFrontHole_pos->RegisterYourself();
3160
3161 TGeoTranslation* copperLayerBackHole_pos = new TGeoTranslation();
3162 copperLayerBackHole_pos->SetName("copperLayerBackHole_pos");
3163 copperLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3164 copperLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3165 copperLayerBackHole_pos->SetDz(0.0);
3166 copperLayerBackHole_pos->RegisterYourself();
3167
3168 TGeoCompositeShape* copperLayerFrontS = new TGeoCompositeShape();
3169 copperLayerFrontS->SetName(TString("copperLayerFrontS") += TString("_") + layers->GetName());
3170 {
3171 TString expression = "copperLayerFrontBlankS";
3172 expression += TString("_") + layers->GetName();
3173 expression += "-copperLayerFrontHoleS";
3174 expression += TString("_") + layers->GetName();
3175 expression += ":copperLayerFrontHole_pos";
3176
3177 copperLayerFrontS->MakeNode(expression);
3178 copperLayerFrontS->ComputeBBox(); // need to compute a bounding box
3179 }
3180
3181 TGeoCompositeShape* copperLayerBackS = new TGeoCompositeShape();
3182 copperLayerBackS->SetName(TString("copperLayerBackS") += TString("_") + layers->GetName());
3183 {
3184 TString expression = "copperLayerBackBlankS";
3185 expression += TString("_") + layers->GetName();
3186 expression += "-copperLayerBackHoleS";
3187 expression += TString("_") + layers->GetName();
3188 expression += ":copperLayerBackHole_pos";
3189
3190 copperLayerBackS->MakeNode(expression);
3191 copperLayerBackS->ComputeBBox(); // need to compute a bounding box
3192 }
3193
3194 TGeoVolume* copperLayerFrontV =
3195 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
3196 TGeoVolume* copperLayerBackV =
3197 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
3198
3199 // volume medium
3200 TGeoMedium* copperLayerV_medium = pMedCopper;
3201 if (copperLayerV_medium) {
3202 copperLayerFrontV->SetMedium(copperLayerV_medium);
3203 copperLayerBackV->SetMedium(copperLayerV_medium);
3204 } else
3205 Fatal("Main", "Invalid medium for copperLayerV!");
3206
3207 // volume visual property (transparency)
3208 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
3209 copperLayerFrontV->SetTransparency(0);
3210 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
3211 copperLayerBackV->SetTransparency(0);
3212
3213 TGeoCombiTrans* copperLayerFront_transf[2];
3214
3215 copperLayerFront_transf[0] = new TGeoCombiTrans();
3216 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
3217 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
3218 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize * 0.5);
3219
3220 TGeoCombiTrans* copperLayerBack_transf[1];
3221
3222 copperLayerBack_transf[0] = new TGeoCombiTrans();
3223 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
3224 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
3225 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5);
3226
3227 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
3228 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
3229 //--------------------------------------------------------------------------
3230
3231 // glue layer ---------------------------------------------------------------
3232 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
3233 Double_t glueLayerHole_Radius = 6.0; // cm
3234
3235 // layer shape
3236 TGeoShape* glueLayerFrontBlankS =
3237 new TGeoBBox(TString("glueLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3238 layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
3239 TGeoShape* glueLayerBackBlankS = new TGeoBBox(TString("glueLayerBackBlankS") += TString("_") + layers->GetName(),
3240 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
3241
3242 TGeoShape* glueLayerFrontHoleS = new TGeoTube(TString("glueLayerFrontHoleS") += TString("_") + layers->GetName(),
3243 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
3244 TGeoShape* glueLayerBackHoleS = new TGeoTube(TString("glueLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
3245 glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
3246
3247 TGeoTranslation* glueLayerFrontHole_pos = new TGeoTranslation();
3248 glueLayerFrontHole_pos->SetName("glueLayerFrontHole_pos");
3249 glueLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3250 glueLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3251 glueLayerFrontHole_pos->SetDz(0.0);
3252 glueLayerFrontHole_pos->RegisterYourself();
3253
3254 TGeoTranslation* glueLayerBackHole_pos = new TGeoTranslation();
3255 glueLayerBackHole_pos->SetName("glueLayerBackHole_pos");
3256 glueLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3257 glueLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3258 glueLayerBackHole_pos->SetDz(0.0);
3259 glueLayerBackHole_pos->RegisterYourself();
3260
3261 TGeoCompositeShape* glueLayerFrontS = new TGeoCompositeShape();
3262 glueLayerFrontS->SetName(TString("glueLayerFrontS") += TString("_") + layers->GetName());
3263 {
3264 TString expression = "glueLayerFrontBlankS";
3265 expression += TString("_") + layers->GetName();
3266 expression += "-glueLayerFrontHoleS";
3267 expression += TString("_") + layers->GetName();
3268 expression += ":glueLayerFrontHole_pos";
3269
3270 glueLayerFrontS->MakeNode(expression);
3271 glueLayerFrontS->ComputeBBox(); // need to compute a bounding box
3272 }
3273
3274 TGeoCompositeShape* glueLayerBackS = new TGeoCompositeShape();
3275 glueLayerBackS->SetName(TString("glueLayerBackS") += TString("_") + layers->GetName());
3276 {
3277 TString expression = "glueLayerBackBlankS";
3278 expression += TString("_") + layers->GetName();
3279 expression += "-glueLayerBackHoleS";
3280 expression += TString("_") + layers->GetName();
3281 expression += ":glueLayerBackHole_pos";
3282
3283 glueLayerBackS->MakeNode(expression);
3284 glueLayerBackS->ComputeBBox(); // need to compute a bounding box
3285 }
3286
3287 TGeoVolume* glueLayerFrontV =
3288 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
3289 TGeoVolume* glueLayerBackV =
3290 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
3291
3292 // volume medium
3293 TGeoMedium* glueLayerV_medium = pMedGlue;
3294 if (glueLayerV_medium) {
3295 glueLayerFrontV->SetMedium(glueLayerV_medium);
3296 glueLayerBackV->SetMedium(glueLayerV_medium);
3297 } else
3298 Fatal("Main", "Invalid medium for glueLayerV!");
3299
3300 // volume visual property (transparency)
3301 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
3302 glueLayerFrontV->SetTransparency(0);
3303 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
3304 glueLayerBackV->SetTransparency(0);
3305
3306 TGeoCombiTrans* glueLayerFront_transf[1];
3307
3308 glueLayerFront_transf[0] = new TGeoCombiTrans();
3309 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
3310 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
3311 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
3312
3313 TGeoCombiTrans* glueLayerBack_transf[1];
3314
3315 glueLayerBack_transf[0] = new TGeoCombiTrans();
3316 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
3317 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
3318 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize * 0.5);
3319
3320 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
3321 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
3322 //--------------------------------------------------------------------------
3323
3324 // epoxide layer ------------------------------------------------------------
3325 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
3326 Double_t epoxideLayerHole_Radius = 6.0; // cm
3327
3328 // layer shape
3329 TGeoShape* epoxideLayerFrontBlankS =
3330 new TGeoBBox(TString("epoxideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3331 layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
3332 TGeoShape* epoxideLayerBackBlankS =
3333 new TGeoBBox(TString("epoxideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
3334 layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
3335
3336 TGeoShape* epoxideLayerFrontHoleS =
3337 new TGeoTube(TString("epoxideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
3338 epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
3339 TGeoShape* epoxideLayerBackHoleS =
3340 new TGeoTube(TString("epoxideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0, epoxideLayerHole_Radius,
3341 epoxideLayer_ZSize * 0.5 + 0.01);
3342
3343 TGeoTranslation* epoxideLayerFrontHole_pos = new TGeoTranslation();
3344 epoxideLayerFrontHole_pos->SetName("epoxideLayerFrontHole_pos");
3345 epoxideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3346 epoxideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3347 epoxideLayerFrontHole_pos->SetDz(0.0);
3348 epoxideLayerFrontHole_pos->RegisterYourself();
3349
3350 TGeoTranslation* epoxideLayerBackHole_pos = new TGeoTranslation();
3351 epoxideLayerBackHole_pos->SetName("epoxideLayerBackHole_pos");
3352 epoxideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3353 epoxideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3354 epoxideLayerBackHole_pos->SetDz(0.0);
3355 epoxideLayerBackHole_pos->RegisterYourself();
3356
3357 TGeoCompositeShape* epoxideLayerFrontS = new TGeoCompositeShape();
3358 epoxideLayerFrontS->SetName(TString("epoxideLayerFrontS") += TString("_") + layers->GetName());
3359 {
3360 TString expression = "epoxideLayerFrontBlankS";
3361 expression += TString("_") + layers->GetName();
3362 expression += "-epoxideLayerFrontHoleS";
3363 expression += TString("_") + layers->GetName();
3364 expression += ":epoxideLayerFrontHole_pos";
3365
3366 epoxideLayerFrontS->MakeNode(expression);
3367 epoxideLayerFrontS->ComputeBBox(); // need to compute a bounding box
3368 }
3369
3370 TGeoCompositeShape* epoxideLayerBackS = new TGeoCompositeShape();
3371 epoxideLayerBackS->SetName(TString("epoxideLayerBackS") += TString("_") + layers->GetName());
3372 {
3373 TString expression = "epoxideLayerBackBlankS";
3374 expression += TString("_") + layers->GetName();
3375 expression += "-epoxideLayerBackHoleS";
3376 expression += TString("_") + layers->GetName();
3377 expression += ":epoxideLayerBackHole_pos";
3378
3379 epoxideLayerBackS->MakeNode(expression);
3380 epoxideLayerBackS->ComputeBBox(); // need to compute a bounding box
3381 }
3382
3383 TGeoVolume* epoxideLayerFrontV =
3384 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
3385 TGeoVolume* epoxideLayerBackV =
3386 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
3387
3388 // volume medium
3389 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
3390 if (epoxideLayerV_medium) {
3391 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
3392 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
3393 } else
3394 Fatal("Main", "Invalid medium for epoxideLayerV!");
3395
3396 // volume visual property (transparency)
3397 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
3398 epoxideLayerFrontV->SetTransparency(0);
3399 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
3400 epoxideLayerBackV->SetTransparency(0);
3401
3402 TGeoCombiTrans* epoxideLayerFront_transf[1];
3403
3404 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
3405 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
3406 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
3407 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3408 + epoxideLayer_ZSize * 0.5);
3409
3410 TGeoCombiTrans* epoxideLayerBack_transf[1];
3411
3412 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
3413 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
3414 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
3415 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize
3416 - epoxideLayer_ZSize * 0.5);
3417
3418 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
3419 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
3420 //--------------------------------------------------------------------------
3421
3422 // honeycomb layer ----------------------------------------------------------
3423 Double_t honeycombLayer_ZSize = 1.5 - (0.06805); // cm; half-thickness of all honeycomb layers
3424 Double_t honeycombLayerHole_Radius = 6.0; // cm
3425
3426 // layer shape
3427 TGeoShape* honeycombLayerFrontBlankS =
3428 new TGeoBBox(TString("honeycombLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3429 layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
3430 TGeoShape* honeycombLayerBackBlankS =
3431 new TGeoBBox(TString("honeycombLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
3432 layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
3433
3434 TGeoShape* honeycombLayerFrontHoleS =
3435 new TGeoTube(TString("honeycombLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
3436 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
3437 TGeoShape* honeycombLayerBackHoleS =
3438 new TGeoTube(TString("honeycombLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
3439 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
3440
3441 TGeoTranslation* honeycombLayerFrontHole_pos = new TGeoTranslation();
3442 honeycombLayerFrontHole_pos->SetName("honeycombLayerFrontHole_pos");
3443 honeycombLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3444 honeycombLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3445 honeycombLayerFrontHole_pos->SetDz(0.0);
3446 honeycombLayerFrontHole_pos->RegisterYourself();
3447
3448 TGeoTranslation* honeycombLayerBackHole_pos = new TGeoTranslation();
3449 honeycombLayerBackHole_pos->SetName("honeycombLayerBackHole_pos");
3450 honeycombLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3451 honeycombLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3452 honeycombLayerBackHole_pos->SetDz(0.0);
3453 honeycombLayerBackHole_pos->RegisterYourself();
3454
3455 TGeoCompositeShape* honeycombLayerFrontS = new TGeoCompositeShape();
3456 honeycombLayerFrontS->SetName(TString("honeycombLayerFrontS") += TString("_") + layers->GetName());
3457 {
3458 TString expression = "honeycombLayerFrontBlankS";
3459 expression += TString("_") + layers->GetName();
3460 expression += "-honeycombLayerFrontHoleS";
3461 expression += TString("_") + layers->GetName();
3462 expression += ":honeycombLayerFrontHole_pos";
3463
3464 honeycombLayerFrontS->MakeNode(expression);
3465 honeycombLayerFrontS->ComputeBBox(); // need to compute a bounding box
3466 }
3467
3468 TGeoCompositeShape* honeycombLayerBackS = new TGeoCompositeShape();
3469 honeycombLayerBackS->SetName(TString("honeycombLayerBackS") += TString("_") + layers->GetName());
3470 {
3471 TString expression = "honeycombLayerBackBlankS";
3472 expression += TString("_") + layers->GetName();
3473 expression += "-honeycombLayerBackHoleS";
3474 expression += TString("_") + layers->GetName();
3475 expression += ":honeycombLayerBackHole_pos";
3476
3477 honeycombLayerBackS->MakeNode(expression);
3478 honeycombLayerBackS->ComputeBBox(); // need to compute a bounding box
3479 }
3480
3481 TGeoVolume* honeycombLayerFrontV =
3482 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
3483 TGeoVolume* honeycombLayerBackV =
3484 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
3485
3486 // volume medium
3487 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
3488 if (honeycombLayerV_medium) {
3489 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
3490 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
3491 } else
3492 Fatal("Main", "Invalid medium for honeycombLayerV!");
3493
3494 // volume visual property (transparency)
3495 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
3496 honeycombLayerFrontV->SetTransparency(0);
3497 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
3498 honeycombLayerBackV->SetTransparency(0);
3499
3500 TGeoCombiTrans* honeycombLayerFront_transf[1];
3501
3502 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
3503 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
3504 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
3505 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3506 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
3507
3508 TGeoCombiTrans* honeycombLayerBack_transf[1];
3509
3510 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
3511 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
3512 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
3513 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize
3514 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5);
3515
3516 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
3517 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
3518 //--------------------------------------------------------------------------
3519
3520 // polyamide layer ----------------------------------------------------------
3521 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
3522 Double_t polyamideLayerHole_Radius = 6.0; // cm
3523
3524 // layer shape
3525 TGeoShape* polyamideLayerFrontBlankS =
3526 new TGeoBBox(TString("polyamideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
3527 layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
3528 TGeoShape* polyamideLayerBackBlankS =
3529 new TGeoBBox(TString("polyamideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
3530 layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
3531
3532 TGeoShape* polyamideLayerFrontHoleS =
3533 new TGeoTube(TString("polyamideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
3534 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
3535 TGeoShape* polyamideLayerBackHoleS =
3536 new TGeoTube(TString("polyamideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
3537 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
3538
3539 TGeoTranslation* polyamideLayerFrontHole_pos = new TGeoTranslation();
3540 polyamideLayerFrontHole_pos->SetName("polyamideLayerFrontHole_pos");
3541 polyamideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
3542 polyamideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
3543 polyamideLayerFrontHole_pos->SetDz(0.0);
3544 polyamideLayerFrontHole_pos->RegisterYourself();
3545
3546 TGeoTranslation* polyamideLayerBackHole_pos = new TGeoTranslation();
3547 polyamideLayerBackHole_pos->SetName("polyamideLayerBackHole_pos");
3548 polyamideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
3549 polyamideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
3550 polyamideLayerBackHole_pos->SetDz(0.0);
3551 polyamideLayerBackHole_pos->RegisterYourself();
3552
3553 TGeoCompositeShape* polyamideLayerFrontS = new TGeoCompositeShape();
3554 polyamideLayerFrontS->SetName(TString("polyamideLayerFrontS") += TString("_") + layers->GetName());
3555 {
3556 TString expression = "polyamideLayerFrontBlankS";
3557 expression += TString("_") + layers->GetName();
3558 expression += "-polyamideLayerFrontHoleS";
3559 expression += TString("_") + layers->GetName();
3560 expression += ":polyamideLayerFrontHole_pos";
3561
3562 polyamideLayerFrontS->MakeNode(expression);
3563 polyamideLayerFrontS->ComputeBBox(); // need to compute a bounding box
3564 }
3565
3566 TGeoCompositeShape* polyamideLayerBackS = new TGeoCompositeShape();
3567 polyamideLayerBackS->SetName(TString("polyamideLayerBackS") += TString("_") + layers->GetName());
3568 {
3569 TString expression = "polyamideLayerBackBlankS";
3570 expression += TString("_") + layers->GetName();
3571 expression += "-polyamideLayerBackHoleS";
3572 expression += TString("_") + layers->GetName();
3573 expression += ":polyamideLayerBackHole_pos";
3574
3575 polyamideLayerBackS->MakeNode(expression);
3576 polyamideLayerBackS->ComputeBBox(); // need to compute a bounding box
3577 }
3578
3579 TGeoVolume* polyamideLayerFrontV =
3580 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
3581 TGeoVolume* polyamideLayerBackV =
3582 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
3583
3584 // volume medium
3585 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
3586 if (polyamideLayerV_medium) {
3587 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
3588 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
3589 } else
3590 Fatal("Main", "Invalid medium for polyamideLayerV!");
3591
3592 // volume visual property (transparency)
3593 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
3594 polyamideLayerFrontV->SetTransparency(0);
3595 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
3596 polyamideLayerBackV->SetTransparency(0);
3597
3598 TGeoCombiTrans* polyamideLayerFront_transf[1];
3599
3600 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
3601 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
3602 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
3603 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
3604 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
3605
3606 TGeoCombiTrans* polyamideLayerBack_transf[1];
3607
3608 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
3609 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
3610 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
3611 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5 - glueLayer_ZSize
3612 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5);
3613
3614 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
3615 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
3616 //--------------------------------------------------------------------------
3617
3618 return layers;
3619}
3620
3622 Double_t dx,
3623 Double_t dy,
3624 Double_t dz,
3625 Double_t hole_radius)
3626{
3627
3628 // frame shapes
3629 TGeoShape* vertical_frameS =
3630 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station163x45 * 0.5 + dy, dz * 0.5);
3631 TGeoShape* horizontal_upper_frameS =
3632 new TGeoBBox("horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5, dy * 0.5, dz * 0.5);
3633 TGeoShape* horizontal_bottom_frameS = new TGeoBBox(
3634 "horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5 - hole_radius * 0.5, dy * 0.5, dz * 0.5);
3635
3636 // frame volumes
3637 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
3638 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
3639 TGeoVolume* horizontal_upper_frameV =
3640 new TGeoVolume(frame_name + "_horizontal_upper_frameV", horizontal_upper_frameS);
3641 TGeoVolume* horizontal_bottom_frameV =
3642 new TGeoVolume(frame_name + "_horizontal_bottom_frameV", horizontal_bottom_frameS);
3643
3644 // media
3645 TGeoMedium* frame_medium = pMedCarbon; // set medium
3646 if (pMedCarbon) {
3647 vertical_frameV->SetMedium(frame_medium);
3648 horizontal_upper_frameV->SetMedium(frame_medium);
3649 horizontal_bottom_frameV->SetMedium(frame_medium);
3650 } else
3651 Fatal("Main", "Invalid medium for frames!");
3652 if (pMedAir) {
3653 composite_frameV->SetMedium(pMedAir);
3654 } else
3655 Fatal("Main", "Invalid medium for frames!");
3656
3657 // visual parameters
3658 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
3659 horizontal_upper_frameV->SetLineColor(TColor::GetColor("#9999ff"));
3660 horizontal_bottom_frameV->SetLineColor(TColor::GetColor("#9999ff"));
3661
3662 // frame part positions in the frame
3663 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
3664 left_vertical_frame_position->SetTranslation(XModuleSize_Station163x45 * 0.5 + dXFrame_Station163x45 * 0.5, 0.0,
3665 0.0);
3666
3667 TGeoCombiTrans* upper_horizontal_frame_position = new TGeoCombiTrans();
3668 upper_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station163x45 * 0.5 + dYFrame_Station163x45 * 0.5,
3669 0.0);
3670
3671 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
3672 bottom_horizontal_frame_position->SetTranslation(
3673 hole_radius * 0.5, -YModuleSize_Station163x45 * 0.5 - dYFrame_Station163x45 * 0.5, 0.0);
3674
3675 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
3676 composite_frameV->AddNode(horizontal_upper_frameV, 0, upper_horizontal_frame_position);
3677 composite_frameV->AddNode(horizontal_bottom_frameV, 0, bottom_horizontal_frame_position);
3678
3679 return composite_frameV;
3680}
3681
3682//------------------------------------------------------------------------------
3684{
3685
3686 // frame volumes
3687 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
3688 frames->SetMedium(pMedAir);
3689
3690 // back lower epoxide frame -------------------------------------------------
3691 Double_t backLowerEpoxideFrame_XSize = 161.42; // cm
3692 Double_t backLowerEpoxideFrame_YSize = 2.2; // cm
3693 Double_t backLowerEpoxideFrame_ZSize = 1.6; // cm
3694
3695 Double_t backLowerEpoxideFrameArch_Rmin = 4.0;
3696 Double_t backLowerEpoxideFrameArch_Rmax = 6.0;
3697 Double_t backLowerEpoxideFrameArch_ZSize = backLowerEpoxideFrame_ZSize;
3698
3699 TGeoShape* backLowerEpoxideFrameHalfS =
3700 new TGeoBBox(TString("backLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3701 (backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5,
3702 backLowerEpoxideFrame_YSize * 0.5, backLowerEpoxideFrame_ZSize * 0.5);
3703 TGeoShape* backLowerEpoxideFrameArchS = new TGeoTubeSeg(
3704 TString("backLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), backLowerEpoxideFrameArch_Rmin,
3705 backLowerEpoxideFrameArch_Rmax, backLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3706
3707 TGeoTranslation* backLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3708 backLowerEpoxideFrameHalf_pos1->SetName("backLowerEpoxideFrameHalf1_pos1");
3709 backLowerEpoxideFrameHalf_pos1->SetDx(
3710 +((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3711 backLowerEpoxideFrameHalf_pos1->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3712 backLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3713 backLowerEpoxideFrameHalf_pos1->RegisterYourself();
3714
3715 TGeoTranslation* backLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3716 backLowerEpoxideFrameHalf_pos2->SetName("backLowerEpoxideFrameHalf1_pos2");
3717 backLowerEpoxideFrameHalf_pos2->SetDx(
3718 -((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
3719 backLowerEpoxideFrameHalf_pos2->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3720 backLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3721 backLowerEpoxideFrameHalf_pos2->RegisterYourself();
3722
3723 TGeoTranslation* backLowerEpoxideFrameArch_pos = new TGeoTranslation();
3724 backLowerEpoxideFrameArch_pos->SetName("backLowerEpoxideFrameArch_pos");
3725 backLowerEpoxideFrameArch_pos->SetDx(0.0);
3726 backLowerEpoxideFrameArch_pos->SetDy(0.0);
3727 backLowerEpoxideFrameArch_pos->SetDz(0.0);
3728 backLowerEpoxideFrameArch_pos->RegisterYourself();
3729
3730 TGeoCompositeShape* backLowerEpoxideFrameS = new TGeoCompositeShape();
3731 backLowerEpoxideFrameS->SetName(TString("backLowerEpoxideFrameS") += TString("_") + frames->GetName());
3732 {
3733 TString expression = "backLowerEpoxideFrameHalfS";
3734 expression += TString("_") + frames->GetName();
3735 expression += ":backLowerEpoxideFrameHalf1_pos1";
3736 expression += "+backLowerEpoxideFrameHalfS";
3737 expression += TString("_") + frames->GetName();
3738 expression += ":backLowerEpoxideFrameHalf1_pos2";
3739 expression += "+backLowerEpoxideFrameArchS";
3740 expression += TString("_") + frames->GetName();
3741 expression += ":backLowerEpoxideFrameArch_pos";
3742
3743 backLowerEpoxideFrameS->MakeNode(expression);
3744 backLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3745 }
3746
3747 TGeoVolume* backLowerEpoxideFrameV =
3748 new TGeoVolume(TString("backLowerEpoxideFrameV") += TString("_") + frames->GetName(), backLowerEpoxideFrameS);
3749
3750 // volume medium
3751 TGeoMedium* backLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3752 if (backLowerEpoxideFrameV_medium) {
3753 backLowerEpoxideFrameV->SetMedium(backLowerEpoxideFrameV_medium);
3754 } else
3755 Fatal("Main", "Invalid medium for backLowerEpoxideFrameV!");
3756
3757 // volume visual property (transparency)
3758 backLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3759 backLowerEpoxideFrameV->SetTransparency(0);
3760
3761 TGeoCombiTrans* backLowerEpoxideFrame_transf[1];
3762
3763 backLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3764 backLowerEpoxideFrame_transf[0]->SetDx(0.0);
3765 backLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
3766 backLowerEpoxideFrame_transf[0]->SetDz(+(backLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3767
3768 frames->AddNode(backLowerEpoxideFrameV, 0, backLowerEpoxideFrame_transf[0]);
3769 //--------------------------------------------------------------------------
3770
3771 // front lower epoxide frame -------------------------------------------------
3772 Double_t frontLowerEpoxideFrame_XSize = 161.7; // cm
3773 Double_t frontLowerEpoxideFrame_YSize = 2.2; // cm
3774 Double_t frontLowerEpoxideFrame_ZSize = 1.6; // cm
3775
3776 Double_t frontLowerEpoxideFrameArch_Rmin = 4.0;
3777 Double_t frontLowerEpoxideFrameArch_Rmax = 6.0;
3778 Double_t frontLowerEpoxideFrameArch_ZSize = frontLowerEpoxideFrame_ZSize;
3779
3780 TGeoShape* frontLowerEpoxideFrameHalfS =
3781 new TGeoBBox(TString("frontLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
3782 (frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5,
3783 frontLowerEpoxideFrame_YSize * 0.5, frontLowerEpoxideFrame_ZSize * 0.5);
3784 TGeoShape* frontLowerEpoxideFrameArchS = new TGeoTubeSeg(
3785 TString("frontLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), frontLowerEpoxideFrameArch_Rmin,
3786 frontLowerEpoxideFrameArch_Rmax, frontLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
3787
3788 TGeoTranslation* frontLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
3789 frontLowerEpoxideFrameHalf_pos1->SetName("frontLowerEpoxideFrameHalf1_pos1");
3790 frontLowerEpoxideFrameHalf_pos1->SetDx(
3791 +((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3792 + frontLowerEpoxideFrameArch_Rmin));
3793 frontLowerEpoxideFrameHalf_pos1->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3794 frontLowerEpoxideFrameHalf_pos1->SetDz(0.0);
3795 frontLowerEpoxideFrameHalf_pos1->RegisterYourself();
3796
3797 TGeoTranslation* frontLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
3798 frontLowerEpoxideFrameHalf_pos2->SetName("frontLowerEpoxideFrameHalf1_pos2");
3799 frontLowerEpoxideFrameHalf_pos2->SetDx(
3800 -((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
3801 + frontLowerEpoxideFrameArch_Rmin));
3802 frontLowerEpoxideFrameHalf_pos2->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
3803 frontLowerEpoxideFrameHalf_pos2->SetDz(0.0);
3804 frontLowerEpoxideFrameHalf_pos2->RegisterYourself();
3805
3806 TGeoTranslation* frontLowerEpoxideFrameArch_pos = new TGeoTranslation();
3807 frontLowerEpoxideFrameArch_pos->SetName("frontLowerEpoxideFrameArch_pos");
3808 frontLowerEpoxideFrameArch_pos->SetDx(0.0);
3809 frontLowerEpoxideFrameArch_pos->SetDy(0.0);
3810 frontLowerEpoxideFrameArch_pos->SetDz(0.0);
3811 frontLowerEpoxideFrameArch_pos->RegisterYourself();
3812
3813 TGeoCompositeShape* frontLowerEpoxideFrameS = new TGeoCompositeShape();
3814 frontLowerEpoxideFrameS->SetName(TString("frontLowerEpoxideFrameS") += TString("_") + frames->GetName());
3815 {
3816 TString expression = "frontLowerEpoxideFrameHalfS";
3817 expression += TString("_") + frames->GetName();
3818 expression += ":frontLowerEpoxideFrameHalf1_pos1";
3819 expression += "+frontLowerEpoxideFrameHalfS";
3820 expression += TString("_") + frames->GetName();
3821 expression += ":frontLowerEpoxideFrameHalf1_pos2";
3822 expression += "+frontLowerEpoxideFrameArchS";
3823 expression += TString("_") + frames->GetName();
3824 expression += ":frontLowerEpoxideFrameArch_pos";
3825
3826 frontLowerEpoxideFrameS->MakeNode(expression);
3827 frontLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3828 }
3829
3830 TGeoVolume* frontLowerEpoxideFrameV =
3831 new TGeoVolume(TString("frontLowerEpoxideFrameV") += TString("_") + frames->GetName(), frontLowerEpoxideFrameS);
3832
3833 // volume medium
3834 TGeoMedium* frontLowerEpoxideFrameV_medium = pMedEpoxideCompound;
3835 if (frontLowerEpoxideFrameV_medium) {
3836 frontLowerEpoxideFrameV->SetMedium(frontLowerEpoxideFrameV_medium);
3837 } else
3838 Fatal("Main", "Invalid medium for frontLowerEpoxideFrameV!");
3839
3840 // volume visual property (transparency)
3841 frontLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3842 frontLowerEpoxideFrameV->SetTransparency(0);
3843
3844 TGeoCombiTrans* frontLowerEpoxideFrame_transf[1];
3845
3846 frontLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
3847 frontLowerEpoxideFrame_transf[0]->SetDx(0.0);
3848 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
3849 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3850
3851 frames->AddNode(frontLowerEpoxideFrameV, 0, frontLowerEpoxideFrame_transf[0]);
3852 //--------------------------------------------------------------------------
3853
3854 // back side epoxide frame --------------------------------------------------
3855 Double_t backSideEpoxideFramePart_XSize = 9.2; // cm
3856 Double_t backSideEpoxideFramePart_YSize = 52.6; // cm
3857 Double_t backSideEpoxideFramePart_ZSize = 1.6; // cm
3858
3859 Double_t backSideEpoxideFrame_XDistBetweenParts = 161.42; // cm
3860
3861 TGeoShape* backSideEpoxideFramePartS = new TGeoBBox(
3862 TString("backSideEpoxideFramePartS") += TString("_") + frames->GetName(), backSideEpoxideFramePart_XSize * 0.5,
3863 backSideEpoxideFramePart_YSize * 0.5, backSideEpoxideFramePart_ZSize * 0.5);
3864
3865 TGeoTranslation* backSideEpoxideFramePart_pos1 = new TGeoTranslation();
3866 backSideEpoxideFramePart_pos1->SetName("backSideEpoxideFramePart_pos1");
3867 backSideEpoxideFramePart_pos1->SetDx(
3868 +(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3869 backSideEpoxideFramePart_pos1->SetDy(0.0);
3870 backSideEpoxideFramePart_pos1->SetDz(0.0);
3871 backSideEpoxideFramePart_pos1->RegisterYourself();
3872
3873 TGeoTranslation* backSideEpoxideFramePart_pos2 = new TGeoTranslation();
3874 backSideEpoxideFramePart_pos2->SetName("backSideEpoxideFramePart_pos2");
3875 backSideEpoxideFramePart_pos2->SetDx(
3876 -(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
3877 backSideEpoxideFramePart_pos2->SetDy(0.0);
3878 backSideEpoxideFramePart_pos2->SetDz(0.0);
3879 backSideEpoxideFramePart_pos2->RegisterYourself();
3880
3881 TGeoCompositeShape* backSideEpoxideFrameS = new TGeoCompositeShape();
3882 backSideEpoxideFrameS->SetName(TString("backSideEpoxideFrameS") += TString("_") + frames->GetName());
3883 {
3884 TString expression = "backSideEpoxideFramePartS";
3885 expression += TString("_") + frames->GetName();
3886 expression += ":backSideEpoxideFramePart_pos1";
3887 expression += "+backSideEpoxideFramePartS";
3888 expression += TString("_") + frames->GetName();
3889 expression += ":backSideEpoxideFramePart_pos2";
3890
3891 backSideEpoxideFrameS->MakeNode(expression);
3892 backSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3893 }
3894
3895 TGeoVolume* backSideEpoxideFrameV =
3896 new TGeoVolume(TString("backSideEpoxideFrameV") += TString("_") + frames->GetName(), backSideEpoxideFrameS);
3897
3898 // volume medium
3899 TGeoMedium* backSideEpoxideFrameV_medium = pMedEpoxideCompound;
3900 if (backSideEpoxideFrameV_medium) {
3901 backSideEpoxideFrameV->SetMedium(backSideEpoxideFrameV_medium);
3902 } else
3903 Fatal("Main", "Invalid medium for backSideEpoxideFrameV!");
3904
3905 // volume visual property (transparency)
3906 backSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3907 backSideEpoxideFrameV->SetTransparency(0);
3908
3909 TGeoCombiTrans* backSideEpoxideFrame_transf[1];
3910
3911 backSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
3912 backSideEpoxideFrame_transf[0]->SetDx(0.0);
3913 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
3914 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
3915 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3916
3917 frames->AddNode(backSideEpoxideFrameV, 0, backSideEpoxideFrame_transf[0]);
3918 //--------------------------------------------------------------------------
3919
3920 // back upper epoxide frame -------------------------------------------------
3921 Double_t backUpperEpoxideFrame_XSize = 161.42; // cm
3922 Double_t backUpperEpoxideFrame_YSize = 6.2; // cm
3923 Double_t backUpperEpoxideFrame_ZSize = 1.6; // cm
3924
3925 TGeoShape* backUpperEpoxideFrameS =
3926 new TGeoBBox("backUpperEpoxideFrameS", backUpperEpoxideFrame_XSize * 0.5, backUpperEpoxideFrame_YSize * 0.5,
3927 backUpperEpoxideFrame_ZSize * 0.5);
3928
3929 TGeoVolume* backUpperEpoxideFrameV =
3930 new TGeoVolume(TString("backUpperEpoxideFrameV") += TString("_") + frames->GetName(), backUpperEpoxideFrameS);
3931
3932 // volume medium
3933 TGeoMedium* backUpperEpoxideFrameV_medium = pMedEpoxideCompound;
3934 if (backUpperEpoxideFrameV_medium) {
3935 backUpperEpoxideFrameV->SetMedium(backUpperEpoxideFrameV_medium);
3936 } else
3937 Fatal("Main", "Invalid medium for backUpperEpoxideFrameV!");
3938
3939 // volume visual property (transparency)
3940 backUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
3941 backUpperEpoxideFrameV->SetTransparency(0);
3942
3943 TGeoCombiTrans* backUpperEpoxideFrame_transf[1];
3944
3945 backUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
3946 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
3947 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
3948 - 0.6 /*shift*/);
3949 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
3950
3951 frames->AddNode(backUpperEpoxideFrameV, 0, backUpperEpoxideFrame_transf[0]);
3952 //--------------------------------------------------------------------------
3953
3954 // front side epoxide frame -------------------------------------------------
3955 Double_t frontSideEpoxideFramePart_XSize = 3.5; // cm
3956 Double_t frontSideEpoxideFramePart_YSize = 49.9; // cm
3957 Double_t frontSideEpoxideFramePart_ZSize = 1.6; // cm
3958
3959 Double_t frontSideEpoxideFrame_XDistBetweenParts = 161.7; // cm
3960
3961 TGeoShape* frontSideEpoxideFramePartS =
3962 new TGeoBBox(TString("frontSideEpoxideFramePartS") += TString("_") + frames->GetName(),
3963 frontSideEpoxideFramePart_XSize * 0.5, frontSideEpoxideFramePart_YSize * 0.5,
3964 frontSideEpoxideFramePart_ZSize * 0.5);
3965
3966 TGeoTranslation* frontSideEpoxideFramePart_pos1 = new TGeoTranslation();
3967 frontSideEpoxideFramePart_pos1->SetName("frontSideEpoxideFramePart_pos1");
3968 frontSideEpoxideFramePart_pos1->SetDx(
3969 +(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3970 frontSideEpoxideFramePart_pos1->SetDy(0.0);
3971 frontSideEpoxideFramePart_pos1->SetDz(0.0);
3972 frontSideEpoxideFramePart_pos1->RegisterYourself();
3973
3974 TGeoTranslation* frontSideEpoxideFramePart_pos2 = new TGeoTranslation();
3975 frontSideEpoxideFramePart_pos2->SetName("frontSideEpoxideFramePart_pos2");
3976 frontSideEpoxideFramePart_pos2->SetDx(
3977 -(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
3978 frontSideEpoxideFramePart_pos2->SetDy(0.0);
3979 frontSideEpoxideFramePart_pos2->SetDz(0.0);
3980 frontSideEpoxideFramePart_pos2->RegisterYourself();
3981
3982 TGeoCompositeShape* frontSideEpoxideFrameS = new TGeoCompositeShape();
3983 frontSideEpoxideFrameS->SetName(TString("frontSideEpoxideFrameS") += TString("_") + frames->GetName());
3984 {
3985 TString expression = "frontSideEpoxideFramePartS";
3986 expression += TString("_") + frames->GetName();
3987 expression += ":frontSideEpoxideFramePart_pos1";
3988 expression += "+frontSideEpoxideFramePartS";
3989 expression += TString("_") + frames->GetName();
3990 expression += ":frontSideEpoxideFramePart_pos2";
3991
3992 frontSideEpoxideFrameS->MakeNode(expression);
3993 frontSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
3994 }
3995
3996 TGeoVolume* frontSideEpoxideFrameV =
3997 new TGeoVolume(TString("frontSideEpoxideFrameV") += TString("_") + frames->GetName(), frontSideEpoxideFrameS);
3998
3999 // volume medium
4000 TGeoMedium* frontSideEpoxideFrameV_medium = pMedEpoxideCompound;
4001 if (frontSideEpoxideFrameV_medium) {
4002 frontSideEpoxideFrameV->SetMedium(frontSideEpoxideFrameV_medium);
4003 } else
4004 Fatal("Main", "Invalid medium for frontSideEpoxideFrameV!");
4005
4006 // volume visual property (transparency)
4007 frontSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
4008 frontSideEpoxideFrameV->SetTransparency(0);
4009
4010 TGeoCombiTrans* frontSideEpoxideFrame_transf[1];
4011
4012 frontSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
4013 frontSideEpoxideFrame_transf[0]->SetDx(0.0);
4014 frontSideEpoxideFrame_transf[0]->SetDy(+((frontSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
4015 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
4016 frontSideEpoxideFrame_transf[0]->SetDz(-(frontSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
4017
4018 frames->AddNode(frontSideEpoxideFrameV, 0, frontSideEpoxideFrame_transf[0]);
4019 //--------------------------------------------------------------------------
4020
4021 // front upper epoxide frame -------------------------------------------------
4022 Double_t frontUpperEpoxideFrame_XSize = 161.7; // cm
4023 Double_t frontUpperEpoxideFrame_YSize = 3.5; // cm
4024 Double_t frontUpperEpoxideFrame_ZSize = 1.6; // cm
4025
4026 TGeoShape* frontUpperEpoxideFrameS =
4027 new TGeoBBox("frontUpperEpoxideFrameS", frontUpperEpoxideFrame_XSize * 0.5, frontUpperEpoxideFrame_YSize * 0.5,
4028 frontUpperEpoxideFrame_ZSize * 0.5);
4029
4030 TGeoVolume* frontUpperEpoxideFrameV =
4031 new TGeoVolume(TString("frontUpperEpoxideFrameV") += TString("_") + frames->GetName(), frontUpperEpoxideFrameS);
4032
4033 // volume medium
4034 TGeoMedium* frontUpperEpoxideFrameV_medium = pMedEpoxideCompound;
4035 if (frontUpperEpoxideFrameV_medium) {
4036 frontUpperEpoxideFrameV->SetMedium(frontUpperEpoxideFrameV_medium);
4037 } else
4038 Fatal("Main", "Invalid medium for frontUpperEpoxideFrameV!");
4039
4040 // volume visual property (transparency)
4041 frontUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
4042 frontUpperEpoxideFrameV->SetTransparency(0);
4043
4044 TGeoCombiTrans* frontUpperEpoxideFrame_transf[1];
4045
4046 frontUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
4047 frontUpperEpoxideFrame_transf[0]->SetDx(0.0);
4048 frontUpperEpoxideFrame_transf[0]->SetDy(+(frontUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
4049 - 0.6 /*shift*/);
4050 frontUpperEpoxideFrame_transf[0]->SetDz(-(frontUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
4051
4052 frames->AddNode(frontUpperEpoxideFrameV, 0, frontUpperEpoxideFrame_transf[0]);
4053 //--------------------------------------------------------------------------
4054
4055 // alum. cable support ------------------------------------------------------
4056 Double_t alumCableSupportPart_XSize = 3.0; // cm
4057 Double_t alumCableSupportPart_YSize = 41.3; // cm
4058 Double_t alumCableSupportPart_ZSize = 0.2; // cm
4059
4060 Double_t alumCableSupport_XDistBetweenParts = 164.82; // cm
4061
4062 TGeoShape* alumCableSupportPartS = new TGeoBBox(
4063 TString("alumCableSupportPartS") += TString("_") + frames->GetName(), alumCableSupportPart_XSize * 0.5,
4064 alumCableSupportPart_YSize * 0.5, alumCableSupportPart_ZSize * 0.5);
4065
4066 TGeoTranslation* alumCableSupportPart_pos1 = new TGeoTranslation();
4067 alumCableSupportPart_pos1->SetName("alumCableSupportPart_pos1");
4068 alumCableSupportPart_pos1->SetDx(+(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
4069 alumCableSupportPart_pos1->SetDy(0.0);
4070 alumCableSupportPart_pos1->SetDz(0.0);
4071 alumCableSupportPart_pos1->RegisterYourself();
4072
4073 TGeoTranslation* alumCableSupportPart_pos2 = new TGeoTranslation();
4074 alumCableSupportPart_pos2->SetName("alumCableSupportPart_pos2");
4075 alumCableSupportPart_pos2->SetDx(-(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
4076 alumCableSupportPart_pos2->SetDy(0.0);
4077 alumCableSupportPart_pos2->SetDz(0.0);
4078 alumCableSupportPart_pos2->RegisterYourself();
4079
4080 TGeoCompositeShape* alumCableSupportS = new TGeoCompositeShape();
4081 alumCableSupportS->SetName(TString("alumCableSupportS") += TString("_") + frames->GetName());
4082 {
4083 TString expression = "alumCableSupportPartS";
4084 expression += TString("_") + frames->GetName();
4085 expression += ":alumCableSupportPart_pos1";
4086 expression += "+alumCableSupportPartS";
4087 expression += TString("_") + frames->GetName();
4088 expression += ":alumCableSupportPart_pos2";
4089
4090 alumCableSupportS->MakeNode(expression);
4091 alumCableSupportS->ComputeBBox(); // need to compute a bounding box
4092 }
4093
4094 TGeoVolume* alumCableSupportV =
4095 new TGeoVolume(TString("alumCableSupportV") += TString("_") + frames->GetName(), alumCableSupportS);
4096
4097 // volume medium
4098 TGeoMedium* alumCableSupportV_medium = pMedAluminium;
4099 if (alumCableSupportV_medium) {
4100 alumCableSupportV->SetMedium(alumCableSupportV_medium);
4101 } else
4102 Fatal("Main", "Invalid medium for alumCableSupportV!");
4103
4104 // volume visual property (transparency)
4105 alumCableSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
4106 alumCableSupportV->SetTransparency(0);
4107
4108 TGeoCombiTrans* alumCableSupport_transf[1];
4109
4110 alumCableSupport_transf[0] = new TGeoCombiTrans();
4111 alumCableSupport_transf[0]->SetDx(0.0);
4112 alumCableSupport_transf[0]->SetDy(+((alumCableSupportPart_YSize - YModuleSize_Station163x45) * 0.5)
4113 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
4114 alumCableSupport_transf[0]->SetDz(-(alumCableSupportPart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5
4115 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
4116
4117 frames->AddNode(alumCableSupportV, 0, alumCableSupport_transf[0]);
4118 //--------------------------------------------------------------------------
4119
4120 // amplifier upper block ----------------------------------------------------
4121 Double_t amplifierUpperBlockPart1_XSize = 161.44; // cm
4122 Double_t amplifierUpperBlockPart1_YSize = 0.6; // cm
4123 Double_t amplifierUpperBlockPart1_ZSize = 8.41; // cm
4124
4125 Double_t amplifierUpperBlockPart2_XSize = 161.16; // cm
4126 Double_t amplifierUpperBlockPart2_YSize = 0.6; // cm
4127 Double_t amplifierUpperBlockPart2_ZSize = 8.41; // cm
4128
4129 TGeoShape* amplifierUpperBlockPart1S = new TGeoBBox(
4130 TString("amplifierUpperBlockPart1S") += TString("_") + frames->GetName(), amplifierUpperBlockPart1_XSize * 0.5,
4131 amplifierUpperBlockPart1_YSize * 0.5, amplifierUpperBlockPart1_ZSize * 0.5);
4132 TGeoShape* amplifierUpperBlockPart2S = new TGeoBBox(
4133 TString("amplifierUpperBlockPart2S") += TString("_") + frames->GetName(), amplifierUpperBlockPart2_XSize * 0.5,
4134 amplifierUpperBlockPart2_YSize * 0.5, amplifierUpperBlockPart2_ZSize * 0.5);
4135
4136 TGeoTranslation* amplifierUpperBlockPart1_pos = new TGeoTranslation();
4137 amplifierUpperBlockPart1_pos->SetName("amplifierUpperBlockPart1_pos");
4138 amplifierUpperBlockPart1_pos->SetDx(0.0);
4139 amplifierUpperBlockPart1_pos->SetDy(0.0);
4140 amplifierUpperBlockPart1_pos->SetDz(0.0);
4141 amplifierUpperBlockPart1_pos->RegisterYourself();
4142
4143 TGeoTranslation* amplifierUpperBlockPart2_pos = new TGeoTranslation();
4144 amplifierUpperBlockPart2_pos->SetName("amplifierUpperBlockPart2_pos");
4145 amplifierUpperBlockPart2_pos->SetDx(-0.76);
4146 amplifierUpperBlockPart2_pos->SetDy(
4147 -(amplifierUpperBlockPart1_YSize * 0.5 + amplifierUpperBlockPart2_YSize * 0.5 + 0.33));
4148 amplifierUpperBlockPart2_pos->SetDz(0.0);
4149 amplifierUpperBlockPart2_pos->RegisterYourself();
4150
4151 TGeoCompositeShape* amplifierUpperBlockS = new TGeoCompositeShape();
4152 amplifierUpperBlockS->SetName(TString("amplifierUpperBlockS") += TString("_") + frames->GetName());
4153 {
4154 TString expression = "amplifierUpperBlockPart1S";
4155 expression += TString("_") + frames->GetName();
4156 expression += ":amplifierUpperBlockPart1_pos";
4157 expression += "+amplifierUpperBlockPart1S";
4158 expression += TString("_") + frames->GetName();
4159 expression += ":amplifierUpperBlockPart2_pos";
4160
4161 amplifierUpperBlockS->MakeNode(expression);
4162 amplifierUpperBlockS->ComputeBBox(); // need to compute a bounding box
4163 }
4164
4165 TGeoVolume* amplifierUpperBlockV =
4166 new TGeoVolume(TString("amplifierUpperBlockV") += TString("_") + frames->GetName(), amplifierUpperBlockS);
4167
4168 // volume medium
4169 TGeoMedium* amplifierUpperBlockV_medium = pMedFiberGlass;
4170 if (amplifierUpperBlockV_medium) {
4171 amplifierUpperBlockV->SetMedium(amplifierUpperBlockV_medium);
4172 } else
4173 Fatal("Main", "Invalid medium for amplifierUpperBlockV!");
4174
4175 // volume visual property (transparency)
4176 amplifierUpperBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
4177 amplifierUpperBlockV->SetTransparency(0);
4178
4179 TGeoCombiTrans* amplifierUpperBlock_transf[1];
4180
4181 amplifierUpperBlock_transf[0] = new TGeoCombiTrans();
4182 amplifierUpperBlock_transf[0]->SetDx(0.0);
4183 amplifierUpperBlock_transf[0]->SetDy(+(YModuleSize_Station163x45 * 0.5 + backUpperEpoxideFrame_YSize)
4184 - 1.0 /*shift*/);
4185 amplifierUpperBlock_transf[0]->SetDz(-(amplifierUpperBlockPart1_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
4186
4187 frames->AddNode(amplifierUpperBlockV, 0, amplifierUpperBlock_transf[0]);
4188 //--------------------------------------------------------------------------
4189
4190 // amplifier side block -----------------------------------------------------
4191 Double_t amplifierSideBlockPartBig_XSize = 0.6; // cm
4192 Double_t amplifierSideBlockPartBig_YSize = 33.9; // cm
4193 Double_t amplifierSideBlockPartBig_ZSize = 8.41; // cm
4194
4195 Double_t amplifierSideBlockPartSmall_XSize = 0.6; // cm
4196 Double_t amplifierSideBlockPartSmall_YSize = 27.05; // cm
4197 Double_t amplifierSideBlockPartSmall_ZSize = 8.41; // cm
4198
4199 TGeoShape* amplifierSideBlockPartBigS =
4200 new TGeoBBox(TString("amplifierSideBlockPartBigS") += TString("_") + frames->GetName(),
4201 amplifierSideBlockPartBig_XSize * 0.5, amplifierSideBlockPartBig_YSize * 0.5,
4202 amplifierSideBlockPartBig_ZSize * 0.5);
4203 TGeoShape* amplifierSideBlockPartSmallS =
4204 new TGeoBBox(TString("amplifierSideBlockPartSmallS") += TString("_") + frames->GetName(),
4205 amplifierSideBlockPartSmall_XSize * 0.5, amplifierSideBlockPartSmall_YSize * 0.5,
4206 amplifierSideBlockPartSmall_ZSize * 0.5);
4207
4208 TGeoTranslation* amplifierSideBlockPartBig_pos = new TGeoTranslation();
4209 amplifierSideBlockPartBig_pos->SetName("amplifierSideBlockPartBig_pos");
4210 amplifierSideBlockPartBig_pos->SetDx(0.0);
4211 amplifierSideBlockPartBig_pos->SetDy(0.0);
4212 amplifierSideBlockPartBig_pos->SetDz(0.0);
4213 amplifierSideBlockPartBig_pos->RegisterYourself();
4214
4215 TGeoTranslation* amplifierSideBlockPartSmall_pos = new TGeoTranslation();
4216 amplifierSideBlockPartSmall_pos->SetName("amplifierSideBlockPartSmall_pos");
4217 amplifierSideBlockPartSmall_pos->SetDx(
4218 +(amplifierSideBlockPartBig_XSize * 0.5 + amplifierSideBlockPartSmall_XSize * 0.5 + 1.72));
4219 amplifierSideBlockPartSmall_pos->SetDy(+0.05);
4220 amplifierSideBlockPartSmall_pos->SetDz(0.0);
4221 amplifierSideBlockPartSmall_pos->RegisterYourself();
4222
4223 TGeoCompositeShape* amplifierSideBlockS = new TGeoCompositeShape();
4224 amplifierSideBlockS->SetName(TString("amplifierSideBlockS") += TString("_") + frames->GetName());
4225 {
4226 TString expression = "amplifierSideBlockPartBigS";
4227 expression += TString("_") + frames->GetName();
4228 expression += ":amplifierSideBlockPartBig_pos";
4229 expression += "+amplifierSideBlockPartSmallS";
4230 expression += TString("_") + frames->GetName();
4231 expression += ":amplifierSideBlockPartSmall_pos";
4232
4233 amplifierSideBlockS->MakeNode(expression);
4234 amplifierSideBlockS->ComputeBBox(); // need to compute a bounding box
4235 }
4236
4237 TGeoVolume* amplifierSideBlockV =
4238 new TGeoVolume(TString("amplifierSideBlockV") += TString("_") + frames->GetName(), amplifierSideBlockS);
4239
4240 // volume medium
4241 TGeoMedium* amplifierSideBlockV_medium = pMedFiberGlass;
4242 if (amplifierSideBlockV_medium) {
4243 amplifierSideBlockV->SetMedium(amplifierSideBlockV_medium);
4244 } else
4245 Fatal("Main", "Invalid medium for amplifierSideBlockV!");
4246
4247 // volume visual property (transparency)
4248 amplifierSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
4249 amplifierSideBlockV->SetTransparency(0);
4250
4251 TGeoCombiTrans* amplifierSideBlock_transf[2];
4252
4253 amplifierSideBlock_transf[0] = new TGeoCombiTrans();
4254 amplifierSideBlock_transf[0]->SetDx(+86.47 /*shift*/);
4255 amplifierSideBlock_transf[0]->SetDy(-5.5);
4256 amplifierSideBlock_transf[0]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
4257
4258 amplifierSideBlock_transf[1] = new TGeoCombiTrans();
4259 amplifierSideBlock_transf[1]->RotateY(180.0);
4260 amplifierSideBlock_transf[1]->SetDx(-86.47 /*shift*/);
4261 amplifierSideBlock_transf[1]->SetDy(-5.5);
4262 amplifierSideBlock_transf[1]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
4263
4264 frames->AddNode(amplifierSideBlockV, 0, amplifierSideBlock_transf[0]);
4265 frames->AddNode(amplifierSideBlockV, 1, amplifierSideBlock_transf[1]);
4266 //--------------------------------------------------------------------------
4267
4268 // upper PCB (Printed Circuit Board) ----------------------------------------
4269 Double_t upperPcb_XSize = 177.22; // cm
4270 Double_t upperPcb_YSize = 0.3; // cm
4271 Double_t upperPcb_ZSize = 4.0; // cm
4272
4273 TGeoShape* upperPcbS = new TGeoBBox("upperPcbS", upperPcb_XSize * 0.5, upperPcb_YSize * 0.5, upperPcb_ZSize * 0.5);
4274
4275 TGeoVolume* upperPcbV = new TGeoVolume(TString("upperPcbV") += TString("_") + frames->GetName(), upperPcbS);
4276
4277 // volume medium
4278 TGeoMedium* upperPcbV_medium = pMedFiberGlass;
4279 if (upperPcbV_medium) {
4280 upperPcbV->SetMedium(upperPcbV_medium);
4281 } else
4282 Fatal("Main", "Invalid medium for upperPcbV!");
4283
4284 // volume visual property (transparency)
4285 upperPcbV->SetLineColor(TColor::GetColor("#88ff88"));
4286 upperPcbV->SetTransparency(0);
4287
4288 TGeoCombiTrans* upperPcb_transf[1];
4289
4290 upperPcb_transf[0] = new TGeoCombiTrans();
4291 upperPcb_transf[0]->SetDx(+0.1 /*shift*/);
4292 upperPcb_transf[0]->SetDy(+(upperPcb_YSize * 0.5 + 23.5 /*shift*/));
4293 upperPcb_transf[0]->SetDz(-(upperPcb_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5 - ZModuleSize_Station163x45
4294 - frontSideEpoxideFramePart_ZSize);
4295
4296 frames->AddNode(upperPcbV, 0, upperPcb_transf[0]);
4297 //--------------------------------------------------------------------------
4298
4299 // side PCB -----------------------------------------------------------------
4300 Double_t sidePcbPart_XSize = 0.3; // cm
4301 Double_t sidePcbPart_YSize = 35.05; // cm
4302 Double_t sidePcbPart_ZSize = 4.0; // cm
4303
4304 TGeoShape* sidePcbPartS = new TGeoBBox(TString("sidePcbPartS") += TString("_") + frames->GetName(),
4305 sidePcbPart_XSize * 0.5, sidePcbPart_YSize * 0.5, sidePcbPart_ZSize * 0.5);
4306
4307 TGeoTranslation* sidePcbPart_pos1 = new TGeoTranslation();
4308 sidePcbPart_pos1->SetName("sidePcbPart_pos1");
4309 sidePcbPart_pos1->SetDx(0.0);
4310 sidePcbPart_pos1->SetDy(0.0);
4311 sidePcbPart_pos1->SetDz(0.0);
4312 sidePcbPart_pos1->RegisterYourself();
4313
4314 TGeoTranslation* sidePcbPart_pos2 = new TGeoTranslation();
4315 sidePcbPart_pos2->SetName("sidePcbPart_pos2");
4316 sidePcbPart_pos2->SetDx(+(sidePcbPart_XSize + 6.1 /*shift*/));
4317 sidePcbPart_pos2->SetDy(0.0);
4318 sidePcbPart_pos2->SetDz(0.0);
4319 sidePcbPart_pos2->RegisterYourself();
4320
4321 TGeoCompositeShape* sidePcbS = new TGeoCompositeShape();
4322 sidePcbS->SetName(TString("sidePcbS") += TString("_") + frames->GetName());
4323 {
4324 TString expression = "sidePcbPartS";
4325 expression += TString("_") + frames->GetName();
4326 expression += ":sidePcbPart_pos1";
4327 expression += "+sidePcbPartS";
4328 expression += TString("_") + frames->GetName();
4329 expression += ":sidePcbPart_pos2";
4330
4331 sidePcbS->MakeNode(expression);
4332 sidePcbS->ComputeBBox(); // need to compute a bounding box
4333 }
4334
4335 TGeoVolume* sidePcbV = new TGeoVolume(TString("sidePcbV") += TString("_") + frames->GetName(), sidePcbS);
4336
4337 // volume medium
4338 TGeoMedium* sidePcbV_medium = pMedFiberGlass;
4339 if (sidePcbV_medium) {
4340 sidePcbV->SetMedium(sidePcbV_medium);
4341 } else
4342 Fatal("Main", "Invalid medium for sidePcbV!");
4343
4344 // volume visual property (transparency)
4345 sidePcbV->SetLineColor(TColor::GetColor("#88ff88"));
4346 sidePcbV->SetTransparency(0);
4347
4348 TGeoCombiTrans* sidePcb_transf[2];
4349
4350 sidePcb_transf[0] = new TGeoCombiTrans();
4351 sidePcb_transf[0]->SetDx(+(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
4352 sidePcb_transf[0]->SetDy(-6.8 /*shift*/);
4353 sidePcb_transf[0]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
4354 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
4355
4356 sidePcb_transf[1] = new TGeoCombiTrans();
4357 sidePcb_transf[1]->RotateY(180.0);
4358 sidePcb_transf[1]->SetDx(-(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
4359 sidePcb_transf[1]->SetDy(-6.8 /*shift*/);
4360 sidePcb_transf[1]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
4361 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
4362
4363 frames->AddNode(sidePcbV, 0, sidePcb_transf[0]);
4364 frames->AddNode(sidePcbV, 1, sidePcb_transf[1]);
4365 //--------------------------------------------------------------------------
4366
4367 // alum. side support -------------------------------------------------------
4368 Double_t alumSideSupport_XSize = 4.8; // cm
4369 Double_t alumSideSupport_YSize = 52.6; // cm
4370 Double_t alumSideSupport_ZSize = 0.4; // cm
4371
4372 TGeoShape* alumSideSupportS = new TGeoBBox("alumSideSupportS", alumSideSupport_XSize * 0.5,
4373 alumSideSupport_YSize * 0.5, alumSideSupport_ZSize * 0.5);
4374
4375 TGeoVolume* alumSideSupportV =
4376 new TGeoVolume(TString("alumSideSupportV") += TString("_") + frames->GetName(), alumSideSupportS);
4377
4378 // volume medium
4379 TGeoMedium* alumSideSupportV_medium = pMedAluminium;
4380 if (alumSideSupportV_medium) {
4381 alumSideSupportV->SetMedium(alumSideSupportV_medium);
4382 } else
4383 Fatal("Main", "Invalid medium for alumSideSupportV!");
4384
4385 // volume visual property (transparency)
4386 alumSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
4387 alumSideSupportV->SetTransparency(0);
4388
4389 TGeoCombiTrans* alumSideSupport_transf[2];
4390
4391 alumSideSupport_transf[0] = new TGeoCombiTrans();
4392 alumSideSupport_transf[0]->SetDx(+(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
4393 alumSideSupport_transf[0]->SetDy(+1.8);
4394 alumSideSupport_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
4395
4396 alumSideSupport_transf[1] = new TGeoCombiTrans();
4397 alumSideSupport_transf[1]->SetDx(-(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
4398 alumSideSupport_transf[1]->SetDy(+1.8 /*shift*/);
4399 alumSideSupport_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
4400
4401 frames->AddNode(alumSideSupportV, 0, alumSideSupport_transf[0]);
4402 frames->AddNode(alumSideSupportV, 1, alumSideSupport_transf[1]);
4403 //--------------------------------------------------------------------------
4404
4405 // bosch shape --------------------------------------------------------------
4406 Double_t boschShape_XSize = 2.25; // cm
4407 Double_t boschShape_YSize = 52.6; // cm
4408 Double_t boschShape_ZSize = 2.25; // cm
4409
4410 TGeoShape* boschShapeS =
4411 new TGeoBBox("boschShapeS", boschShape_XSize * 0.5, boschShape_YSize * 0.5, boschShape_ZSize * 0.5);
4412
4413 TGeoVolume* boschShapeV = new TGeoVolume(TString("boschShapeV") += TString("_") + frames->GetName(), boschShapeS);
4414
4415 // volume medium
4416 TGeoMedium* boschShapeV_medium = pMedAluminium;
4417 if (boschShapeV_medium) {
4418 boschShapeV->SetMedium(boschShapeV_medium);
4419 } else
4420 Fatal("Main", "Invalid medium for boschShapeV!");
4421
4422 // volume visual property (transparency)
4423 boschShapeV->SetLineColor(TColor::GetColor("#ffcccc"));
4424 boschShapeV->SetTransparency(0);
4425
4426 TGeoCombiTrans* boschShape_transf[2];
4427
4428 boschShape_transf[0] = new TGeoCombiTrans();
4429 boschShape_transf[0]->SetDx(+(boschShape_XSize * 0.5 + 90.86 /*shift*/));
4430 boschShape_transf[0]->SetDy(+1.8 /*shift*/);
4431 boschShape_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
4432
4433 boschShape_transf[1] = new TGeoCombiTrans();
4434 boschShape_transf[1]->SetDx(-(boschShape_XSize * 0.5 + 90.86 /*shift*/));
4435 boschShape_transf[1]->SetDy(+1.8 /*shift*/);
4436 boschShape_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
4437
4438 frames->AddNode(boschShapeV, 0, boschShape_transf[0]);
4439 frames->AddNode(boschShapeV, 1, boschShape_transf[1]);
4440 //--------------------------------------------------------------------------
4441
4442 // lower fiberglass block ---------------------------------------------------------
4443 Double_t lowerFiberGlassBlock_XSize = 165.1; // cm
4444 Double_t lowerFiberGlassBlock_YSize = 1.75; // cm
4445 Double_t lowerFiberGlassBlock_ZSize = 0.9; // cm
4446
4447 Double_t lowerFiberGlassBlockArch_Rmin = 4.0;
4448 Double_t lowerFiberGlassBlockArch_Rmax = 5.75;
4449 Double_t lowerFiberGlassBlockArch_ZSize = lowerFiberGlassBlock_ZSize;
4450
4451 TGeoShape* lowerFiberGlassBlockHalfS =
4452 new TGeoBBox(TString("lowerFiberGlassBlockHalfS") += TString("_") + frames->GetName(),
4453 (lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5,
4454 lowerFiberGlassBlock_YSize * 0.5, lowerFiberGlassBlock_ZSize * 0.5);
4455 TGeoShape* lowerFiberGlassBlockArchS = new TGeoTubeSeg(
4456 TString("lowerFiberGlassBlockArchS") += TString("_") + frames->GetName(), lowerFiberGlassBlockArch_Rmin,
4457 lowerFiberGlassBlockArch_Rmax, lowerFiberGlassBlockArch_ZSize * 0.5, 0.0, 180.0);
4458
4459 TGeoTranslation* lowerFiberGlassBlockHalf_pos1 = new TGeoTranslation();
4460 lowerFiberGlassBlockHalf_pos1->SetName("lowerFiberGlassBlockHalf_pos1");
4461 lowerFiberGlassBlockHalf_pos1->SetDx(
4462 +((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
4463 lowerFiberGlassBlockHalf_pos1->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
4464 lowerFiberGlassBlockHalf_pos1->SetDz(0.0);
4465 lowerFiberGlassBlockHalf_pos1->RegisterYourself();
4466
4467 TGeoTranslation* lowerFiberGlassBlockHalf_pos2 = new TGeoTranslation();
4468 lowerFiberGlassBlockHalf_pos2->SetName("lowerFiberGlassBlockHalf_pos2");
4469 lowerFiberGlassBlockHalf_pos2->SetDx(
4470 -((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
4471 lowerFiberGlassBlockHalf_pos2->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
4472 lowerFiberGlassBlockHalf_pos2->SetDz(0.0);
4473 lowerFiberGlassBlockHalf_pos2->RegisterYourself();
4474
4475 TGeoTranslation* lowerFiberGlassBlockArch_pos = new TGeoTranslation();
4476 lowerFiberGlassBlockArch_pos->SetName("lowerFiberGlassBlockArch_pos");
4477 lowerFiberGlassBlockArch_pos->SetDx(0.0);
4478 lowerFiberGlassBlockArch_pos->SetDy(0.0);
4479 lowerFiberGlassBlockArch_pos->SetDz(0.0);
4480 lowerFiberGlassBlockArch_pos->RegisterYourself();
4481
4482 TGeoCompositeShape* lowerFiberGlassBlockS = new TGeoCompositeShape();
4483 lowerFiberGlassBlockS->SetName(TString("lowerFiberGlassBlockS") += TString("_") + frames->GetName());
4484 {
4485 TString expression = "lowerFiberGlassBlockHalfS";
4486 expression += TString("_") + frames->GetName();
4487 expression += ":lowerFiberGlassBlockHalf_pos1";
4488 expression += "+lowerFiberGlassBlockHalfS";
4489 expression += TString("_") + frames->GetName();
4490 expression += ":lowerFiberGlassBlockHalf_pos2";
4491 expression += "+lowerFiberGlassBlockArchS";
4492 expression += TString("_") + frames->GetName();
4493 expression += ":lowerFiberGlassBlockArch_pos";
4494
4495 lowerFiberGlassBlockS->MakeNode(expression);
4496 lowerFiberGlassBlockS->ComputeBBox(); // need to compute a bounding box
4497 }
4498
4499 TGeoVolume* lowerFiberGlassBlockV =
4500 new TGeoVolume(TString("lowerFiberGlassBlockV") += TString("_") + frames->GetName(), lowerFiberGlassBlockS);
4501
4502 // volume medium
4503 TGeoMedium* lowerFiberGlassBlockV_medium = pMedFiberGlass;
4504 if (lowerFiberGlassBlockV_medium) {
4505 lowerFiberGlassBlockV->SetMedium(lowerFiberGlassBlockV_medium);
4506 } else
4507 Fatal("Main", "Invalid medium for lowerFiberGlassBlockV!");
4508
4509 // volume visual property (transparency)
4510 lowerFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4511 lowerFiberGlassBlockV->SetTransparency(0);
4512
4513 TGeoCombiTrans* lowerFiberGlassBlock_transf[1];
4514
4515 lowerFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4516 lowerFiberGlassBlock_transf[0]->SetDx(0.0);
4517 lowerFiberGlassBlock_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
4518 lowerFiberGlassBlock_transf[0]->SetDz(0.0);
4519
4520 frames->AddNode(lowerFiberGlassBlockV, 0, lowerFiberGlassBlock_transf[0]);
4521 //--------------------------------------------------------------------------
4522
4523 // side fiberglass block ----------------------------------------------------
4524 Double_t sideFiberGlassBlockPart_XSize = 1.45; // cm
4525 Double_t sideFiberGlassBlockPart_YSize = 49.4; // cm
4526 Double_t sideFiberGlassBlockPart_ZSize = 0.89; // cm
4527
4528 TGeoShape* sideFiberGlassBlockS =
4529 new TGeoBBox("sideFiberGlassBlockS", sideFiberGlassBlockPart_XSize * 0.5, sideFiberGlassBlockPart_YSize * 0.5,
4530 sideFiberGlassBlockPart_ZSize * 0.5);
4531
4532 TGeoVolume* sideFiberGlassBlockV =
4533 new TGeoVolume(TString("sideFiberGlassBlockV") += TString("_") + frames->GetName(), sideFiberGlassBlockS);
4534
4535 // volume medium
4536 TGeoMedium* sideFiberGlassBlockV_medium = pMedFiberGlass;
4537 if (sideFiberGlassBlockV_medium) {
4538 sideFiberGlassBlockV->SetMedium(sideFiberGlassBlockV_medium);
4539 } else
4540 Fatal("Main", "Invalid medium for sideFiberGlassBlockV!");
4541
4542 // volume visual property (transparency)
4543 sideFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4544 sideFiberGlassBlockV->SetTransparency(0);
4545
4546 TGeoCombiTrans* sideFiberGlassBlock_transf[2];
4547
4548 sideFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4549 sideFiberGlassBlock_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4550 sideFiberGlassBlock_transf[0]->SetDy(+0.45 /*shift*/);
4551 sideFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4552
4553 sideFiberGlassBlock_transf[1] = new TGeoCombiTrans();
4554 sideFiberGlassBlock_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
4555 sideFiberGlassBlock_transf[1]->SetDy(+0.45 /*shift*/);
4556 sideFiberGlassBlock_transf[1]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4557
4558 frames->AddNode(sideFiberGlassBlockV, 0, sideFiberGlassBlock_transf[0]);
4559 frames->AddNode(sideFiberGlassBlockV, 1, sideFiberGlassBlock_transf[1]);
4560 //--------------------------------------------------------------------------
4561
4562 // upper fiberglass block ---------------------------------------------------
4563 Double_t upperFiberGlassBlock_XSize = 165.1; // cm
4564 Double_t upperFiberGlassBlock_YSize = 1.45; // cm
4565 Double_t upperFiberGlassBlock_ZSize = 0.89; // cm
4566
4567 TGeoShape* upperFiberGlassBlockS = new TGeoBBox("upperFiberGlassBlockS", upperFiberGlassBlock_XSize * 0.5,
4568 upperFiberGlassBlock_YSize * 0.5, upperFiberGlassBlock_ZSize * 0.5);
4569
4570 TGeoVolume* upperFiberGlassBlockV =
4571 new TGeoVolume(TString("upperFiberGlassBlockV") += TString("_") + frames->GetName(), upperFiberGlassBlockS);
4572
4573 // volume medium
4574 TGeoMedium* upperFiberGlassBlockV_medium = pMedFiberGlass;
4575 if (upperFiberGlassBlockV_medium) {
4576 upperFiberGlassBlockV->SetMedium(upperFiberGlassBlockV_medium);
4577 } else
4578 Fatal("Main", "Invalid medium for upperFiberGlassBlockV!");
4579
4580 // volume visual property (transparency)
4581 upperFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
4582 upperFiberGlassBlockV->SetTransparency(0);
4583
4584 TGeoCombiTrans* upperFiberGlassBlock_transf[1];
4585
4586 upperFiberGlassBlock_transf[0] = new TGeoCombiTrans();
4587 upperFiberGlassBlock_transf[0]->SetDx(0.0);
4588 upperFiberGlassBlock_transf[0]->SetDy(
4589 +(sideFiberGlassBlockPart_YSize * 0.5 - upperFiberGlassBlock_YSize * 0.5 + 0.45 /*shift*/));
4590 upperFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
4591
4592 frames->AddNode(upperFiberGlassBlockV, 0, upperFiberGlassBlock_transf[0]);
4593 //--------------------------------------------------------------------------
4594
4595 // brass layer --------------------------------------------------------------
4596 Double_t upperBrasslayer_XSize = 165.1; // cm
4597 Double_t upperBrasslayer_YSize = 1.45; // cm
4598 Double_t upperBrasslayer_ZSize = 0.005; // cm
4599
4600 Double_t sideBrasslayer_XSize = 1.45; // cm
4601 Double_t sideBrasslayer_YSize = 49.4; // cm
4602 Double_t sideBrasslayer_ZSize = 0.005; // cm
4603
4604 TGeoShape* upperBrasslayerS = new TGeoBBox("upperBrasslayerS", upperBrasslayer_XSize * 0.5,
4605 upperBrasslayer_YSize * 0.5, upperBrasslayer_ZSize * 0.5);
4606 TGeoShape* sideBrasslayerS = new TGeoBBox("sideBrasslayerS", sideBrasslayer_XSize * 0.5, sideBrasslayer_YSize * 0.5,
4607 sideBrasslayer_ZSize * 0.5);
4608
4609 TGeoVolume* upperBrasslayerV =
4610 new TGeoVolume(TString("upperBrasslayerV") += TString("_") + frames->GetName(), upperBrasslayerS);
4611 TGeoVolume* sideBrasslayerV =
4612 new TGeoVolume(TString("sideBrasslayerV") += TString("_") + frames->GetName(), sideBrasslayerS);
4613
4614 // volume medium
4615 TGeoMedium* upperBrasslayerV_medium = pMedBrass;
4616 if (upperBrasslayerV_medium) {
4617 upperBrasslayerV->SetMedium(upperBrasslayerV_medium);
4618 sideBrasslayerV->SetMedium(upperBrasslayerV_medium);
4619 } else
4620 Fatal("Main", "Invalid medium for upperBrasslayerV_medium!");
4621
4622 // volume visual property (transparency)
4623 upperBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4624 upperBrasslayerV->SetTransparency(0);
4625 sideBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
4626 sideBrasslayerV->SetTransparency(0);
4627
4628 TGeoCombiTrans* upperBrasslayer_transf[1];
4629
4630 upperBrasslayer_transf[0] = new TGeoCombiTrans();
4631 upperBrasslayer_transf[0]->SetDx(0.0);
4632 upperBrasslayer_transf[0]->SetDy(
4633 +(sideFiberGlassBlockPart_YSize * 0.5 - upperBrasslayer_YSize * 0.5 + 0.45 /*shift*/));
4634 upperBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4635
4636 TGeoCombiTrans* sideBrasslayer_transf[2];
4637
4638 sideBrasslayer_transf[0] = new TGeoCombiTrans();
4639 sideBrasslayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4640 sideBrasslayer_transf[0]->SetDy(+0.45 /*shift*/);
4641 sideBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4642
4643 sideBrasslayer_transf[1] = new TGeoCombiTrans();
4644 sideBrasslayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
4645 sideBrasslayer_transf[1]->SetDy(+0.45 /*shift*/);
4646 sideBrasslayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
4647
4648 frames->AddNode(upperBrasslayerV, 0, upperBrasslayer_transf[0]);
4649
4650 frames->AddNode(sideBrasslayerV, 0, sideBrasslayer_transf[0]);
4651 frames->AddNode(sideBrasslayerV, 1, sideBrasslayer_transf[1]);
4652 //--------------------------------------------------------------------------
4653
4654 // steel layer --------------------------------------------------------------
4655 Double_t upperSteellayer_XSize = 165.1; // cm
4656 Double_t upperSteellayer_YSize = 1.45; // cm
4657 Double_t upperSteellayer_ZSize = 0.005; // cm
4658
4659 Double_t sideSteellayer_XSize = 1.45; // cm
4660 Double_t sideSteellayer_YSize = 49.4; // cm
4661 Double_t sideSteellayer_ZSize = 0.005; // cm
4662
4663 TGeoShape* upperSteellayerS = new TGeoBBox("upperSteellayerS", upperSteellayer_XSize * 0.5,
4664 upperSteellayer_YSize * 0.5, upperSteellayer_ZSize * 0.5);
4665 TGeoShape* sideSteellayerS = new TGeoBBox("sideSteellayerS", sideSteellayer_XSize * 0.5, sideSteellayer_YSize * 0.5,
4666 sideSteellayer_ZSize * 0.5);
4667
4668 TGeoVolume* upperSteellayerV =
4669 new TGeoVolume(TString("upperSteellayerV") += TString("_") + frames->GetName(), upperSteellayerS);
4670 TGeoVolume* sideSteellayerV =
4671 new TGeoVolume(TString("sideSteellayerV") += TString("_") + frames->GetName(), sideSteellayerS);
4672
4673 // volume medium
4674 TGeoMedium* upperSteellayerV_medium = pMedSteel;
4675 if (upperSteellayerV_medium) {
4676 upperSteellayerV->SetMedium(upperSteellayerV_medium);
4677 sideSteellayerV->SetMedium(upperSteellayerV_medium);
4678 } else
4679 Fatal("Main", "Invalid medium for upperSteellayerV_medium!");
4680
4681 // volume visual property (transparency)
4682 upperSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4683 upperSteellayerV->SetTransparency(0);
4684 sideSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
4685 sideSteellayerV->SetTransparency(0);
4686
4687 TGeoCombiTrans* upperSteellayer_transf[1];
4688
4689 upperSteellayer_transf[0] = new TGeoCombiTrans();
4690 upperSteellayer_transf[0]->SetDx(0.0);
4691 upperSteellayer_transf[0]->SetDy(
4692 +(sideFiberGlassBlockPart_YSize * 0.5 - upperSteellayer_YSize * 0.5 + 0.45 /*shift*/));
4693 upperSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperSteellayer_ZSize * 0.5 + 0.005 /*shift*/);
4694
4695 TGeoCombiTrans* sideSteellayer_transf[2];
4696
4697 sideSteellayer_transf[0] = new TGeoCombiTrans();
4698 sideSteellayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4699 sideSteellayer_transf[0]->SetDy(+0.45 /*shift*/);
4700 sideSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
4701
4702 sideSteellayer_transf[1] = new TGeoCombiTrans();
4703 sideSteellayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
4704 sideSteellayer_transf[1]->SetDy(+0.45 /*shift*/);
4705 sideSteellayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
4706
4707 frames->AddNode(upperSteellayerV, 0, upperSteellayer_transf[0]);
4708
4709 frames->AddNode(sideSteellayerV, 0, sideSteellayer_transf[0]);
4710 frames->AddNode(sideSteellayerV, 1, sideSteellayer_transf[1]);
4711 //--------------------------------------------------------------------------
4712
4713 return frames;
4714}
bool Bool_t
int Int_t
double Double_t
constexpr Bool_t kTRUE
void Fatal(const char *location, const char *msgfmt,...)
R__EXTERN TGeoManager * gGeoManager
#define gROOT
R__EXTERN TRandom * gRandom
R__EXTERN TSystem * gSystem
static Int_t GetColor(const char *hexcolor)
void Close(Option_t *option="") override
void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE) override
void SetDz(Double_t dz) override
void RotateY(Double_t angle) override
void SetDy(Double_t dy) override
void SetDx(Double_t dx) override
void RotateX(Double_t angle) override
void SetTranslation(const TGeoTranslation &tr)
void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE) override
void ComputeBBox() override
void MakeNode(const char *expression)
virtual void RegisterYourself()
const char * GetName() const override
void SetDy(Double_t dy) override
void SetDz(Double_t dz) override
void SetDx(Double_t dx) override
void SetVisContainers(Bool_t flag=kTRUE) override
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
void Draw(Option_t *option="") override
void SetTransparency(Char_t transparency=0)
virtual void SetMedium(TGeoMedium *medium)
void SetLineColor(Color_t lcolor) override
const char * GetName() const override
virtual void SetName(const char *name)
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
static TString Itoa(Int_t value, Int_t base)
const Double_t YStationPositions[NStations]
const Double_t ZStationPositions[NStations]
const Double_t XStationPositions[NStations]
const Bool_t XStationRotations[NStations]
const Bool_t YStationRotations[NStations]
TGeoVolume * CreateLayersForModule_Station163x45(TString layer_name)
TGeoVolume * CreateLayersForModule_Station66x41(TString layer_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 DefineRequiredMedia(FairGeoMedia *geoMedia, FairGeoBuilder *geoBuild)
TGeoVolume * CreateDetailedFrameForModule_Station66x41(TString frame_name)
TGeoVolume * CreateFrameForModule_Station66x41(TString frame_name, Double_t dx, Double_t dy, Double_t dz)
TGeoVolume * CreateBasicFrameForModule_Station66x41(TString frame_name)