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