BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_GEMS_RunSpring2018_detailed.C
Go to the documentation of this file.
1/*
2 * Baranov D.
3 * 03.07.2018
4 * 02.03.2021 (Updated): radius of hole in active zone (4.0 -> 6.0 cm)
5 * Use this macro to create detailed ROOT geometry for
6 * the RunSpring2018 configuration (BM@N RUN-7)
7 * with passive volumes (frames, al. cable supports, ...)
8 *
9 */
10
11// Set Parameters of GEMS -------------------------------------------------------
12const Int_t NStations = 7; // stations in the detector (6 active + 1 disabled)
13const Int_t NMaxModules = 2; // max. number of modules in a station
14
15//(X-Y-Z)Positions of stations (sensitive volumes)
16const Double_t XStationPositions[NStations] = {+0.5390, +0.7025, +1.9925, +3.0860,
17 +3.7980, +4.5815, +1.2 /*disabled station*/};
18const Double_t YStationPositions[NStations] = {+15.99873, +16.20573, +16.36073, +16.40473,
19 +16.09373, +16.45473, +16.0 /*disabled station*/};
20const Double_t ZStationPositions[NStations] = {+39.702, +64.535, +112.649, +135.330,
21 +160.6635, +183.668, +87.6 /*disabled station*/};
22
23//(X-Y-Z)Shifts of modules in each station
25 {163.2 * 0.25, -163.2 * 0.25}, {163.2 * 0.25, -163.2 * 0.25}, {163.2 * 0.25, -163.2 * 0.25},
26 {163.2 * 0.25, -163.2 * 0.25}, {163.2 * 0.25, -163.2 * 0.25}, {163.2 * 0.25, -163.2 * 0.25},
27 {163.2 * 0.25, -163.2 * 0.25} /*disabled station*/
28};
30 {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0} /*disabled station*/
31};
33 {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0} /*disabled station*/
34};
35
36// rotations of stations around y-axis by 180 deg.
37const Bool_t YStationRotations[NStations] = {false /*0*/, true /*1*/, true /*2*/, false /*3*/,
38 true /*4*/, false /*5*/, false /*disabled station*/};
39
40// rotations of stations around x-axis by 180 deg.
41const Bool_t XStationRotations[NStations] = {false /*0*/, false /*1*/, false /*2*/, false /*3*/,
42 false /*4*/, false /*5*/, false /*disabled station*/};
43
44// GEM plane sizes (66x41 type) -------------------------------------------------
48
52//------------------------------------------------------------------------------
53
54// GEM plane sizes (163x45 type) ------------------------------------------------
57const Double_t ZModuleSize_Station163x45 = 0.9; // sensitive volume
58const Double_t ZGEMSize_Station163x45 = 4.1; // common thickness of GEM (including sens. vol)
59
63//------------------------------------------------------------------------------
64
65// GeoManager
67
68// media
81
82class FairGeoMedia;
83class FairGeoBuilder;
84
85TGeoVolume* CreateStation(TString station_name);
86TGeoVolume* CreateModule_Station66x41(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize);
89 Double_t xsize,
90 Double_t ysize,
91 Double_t zsize,
92 Double_t hole_radius);
95 Double_t dx,
96 Double_t dy,
97 Double_t dz,
98 Double_t hole_radius);
100
101void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
102{
103
104 // air medium
105 FairGeoMedium* mAir = geoMedia->getMedium("air");
106 if (!mAir)
107 Fatal("Main", "FairMedium air not found");
108 geoBuild->createMedium(mAir);
109 pMedAir = gGeoManager->GetMedium("air");
110 if (!pMedAir)
111 Fatal("Main", "Medium air not found");
112
113 // carbon medium
114 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
115 if (!mCarbon)
116 Fatal("Main", "FairMedium carbon not found");
117 geoBuild->createMedium(mCarbon);
118 pMedCarbon = gGeoManager->GetMedium("carbon");
119 if (!pMedCarbon)
120 Fatal("Main", "Medium carbon not found");
121
122 // fiberglass medium
123 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
124 if (!mFiberGlass)
125 Fatal("Main", "FairMedium fiberglass not found");
126 geoBuild->createMedium(mFiberGlass);
127 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
128 if (!pMedFiberGlass)
129 Fatal("Main", "Medium fiberglass not found");
130
131 // copper medium
132 FairGeoMedium* mCopper = geoMedia->getMedium("copper");
133 if (!mCopper)
134 Fatal("Main", "FairMedium copper not found");
135 geoBuild->createMedium(mCopper);
136 pMedCopper = gGeoManager->GetMedium("copper");
137 if (!pMedCopper)
138 Fatal("Main", "Medium copper not found");
139
140 // arco27020 medium
141 FairGeoMedium* mArCO27030 = geoMedia->getMedium("arco27030");
142 if (!mArCO27030)
143 Fatal("Main", "FairMedium arco27030 not found");
144 geoBuild->createMedium(mArCO27030);
145 pMedArCO27030 = gGeoManager->GetMedium("arco27030");
146 if (!pMedArCO27030)
147 Fatal("Main", "Medium arco27030 not found");
148
149 // aluminium medium
150 FairGeoMedium* mAluminium = geoMedia->getMedium("aluminium");
151 if (!mAluminium)
152 Fatal("Main", "FairMedium aluminium not found");
153 geoBuild->createMedium(mAluminium);
154 pMedAluminium = gGeoManager->GetMedium("aluminium");
155 if (!pMedAluminium)
156 Fatal("Main", "Medium aluminium not found");
157
158 // epoxide compound (for GEM frames)
159 FairGeoMedium* mEpoxideCompound = geoMedia->getMedium("polyurethane_hd");
160 if (!mEpoxideCompound)
161 Fatal("Main", "FairMedium epoxideCompound not found");
162 geoBuild->createMedium(mEpoxideCompound);
163 pMedEpoxideCompound = gGeoManager->GetMedium("polyurethane_hd");
165 Fatal("Main", "Medium epoxideCompound not found");
166
167 // glue
168 FairGeoMedium* mGlue = geoMedia->getMedium("acrylic_glue");
169 if (!mGlue)
170 Fatal("Main", "FairMedium acrylic_glue not found");
171 geoBuild->createMedium(mGlue);
172 pMedGlue = gGeoManager->GetMedium("acrylic_glue");
173 if (!pMedGlue)
174 Fatal("Main", "Medium acrylic_glue not found");
175
176 // brass medium
177 FairGeoMedium* mBrass = geoMedia->getMedium("brass");
178 if (!mBrass)
179 Fatal("Main", "FairMedium brass not found");
180 geoBuild->createMedium(mBrass);
181 pMedBrass = gGeoManager->GetMedium("brass");
182 if (!pMedBrass)
183 Fatal("Main", "Medium brass not found");
184
185 // steel medium
186 FairGeoMedium* mSteel = geoMedia->getMedium("steel");
187 if (!mSteel)
188 Fatal("Main", "FairMedium steel not found");
189 geoBuild->createMedium(mSteel);
190 pMedSteel = gGeoManager->GetMedium("steel");
191 if (!pMedSteel)
192 Fatal("Main", "Medium steel not found");
193
194 // honeycomb medium
195 FairGeoMedium* mHoneyComb = geoMedia->getMedium("AramidHoneyComb");
196 if (!mHoneyComb)
197 Fatal("Main", "FairMedium AramidHoneyComb not found");
198 geoBuild->createMedium(mHoneyComb);
199 pMedHoneyComb = gGeoManager->GetMedium("AramidHoneyComb");
200 if (!pMedHoneyComb)
201 Fatal("Main", "Medium AramidHoneyComb not found");
202
203 // polyamide medium
204 FairGeoMedium* mPolyamide = geoMedia->getMedium("polyamide");
205 if (!mPolyamide)
206 Fatal("Main", "FairMedium polyamide not found");
207 geoBuild->createMedium(mPolyamide);
208 pMedPolyamide = gGeoManager->GetMedium("polyamide");
209 if (!pMedPolyamide)
210 Fatal("Main", "Medium polyamide not found");
211}
212
214{
215
216 // ---- set working directory --------------------------------------------
217 TString gPath = gSystem->Getenv("VMCWORKDIR");
218
219 // ------- Geometry file name (output) ----------------------------------
220 const TString geoDetectorName = "GEMS";
221 const TString geoDetectorVersion = "RunSpring2018_detailed";
222 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
223
224 // ---- global geometry parameters ---------------------------------------
225 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
226 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
227
228 // ------- Load media from media file ----------------------------------
229 TString medFile = gPath + "/geometry/media.geo";
230 geoFace->setMediaFile(medFile);
231 geoFace->readMedia();
232 FairGeoMedia* geoMedia = geoFace->getMedia();
233 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
234
235 DefineRequiredMedia(geoMedia, geoBuild);
236 // -------------------------------------------------------------------------
237
238 // -------------- Create geometry and top volume -------------------------
239 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
240 gGeoMan->SetName(geoDetectorName + "_geom");
241 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
242 top->SetMedium(pMedAir);
243 gGeoMan->SetTopVolume(top);
244 // gGeoMan->SetTopVisible(1);
245 // --------------------------------------------------------------------------
246
247 // Define TOP Geometry
248 TGeoVolume* GEMS = new TGeoVolumeAssembly(geoDetectorName);
249 GEMS->SetMedium(pMedAir);
250
251 for (Int_t istation = 0; istation < NStations; ++istation) {
252 // for(Int_t istation = 0; istation < 1; ++istation) {
253
254 Int_t stationNum = istation;
255 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
256
257 TGeoVolume* module0 =
260 TGeoVolume* module1 =
263
264 TGeoVolume* layers0 = CreateLayersForModule_Station163x45(TString("layer0_") + station->GetName());
265 TGeoVolume* layers1 = CreateLayersForModule_Station163x45(TString("layer1_") + station->GetName());
266
267 TGeoVolume* frame = CreateFrameForHalfPlane_Station163x45(TString("frame_") + station->GetName());
268
269 if (istation == 6) {
270 station->SetName(TString("disabled_station") + TString::Itoa(stationNum, 10));
271 module0->SetName(TString("module0_") + station->GetName());
272 module1->SetName(TString("module1_") + station->GetName());
273 }
274
275 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
276 if (XStationRotations[stationNum] == true)
277 module0_transform->RotateX(180.0);
278 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
279 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
280
281 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
282 if (XStationRotations[stationNum] == true)
283 module1_transform->RotateX(180.0);
284 module1_transform->ReflectX(true);
285 module1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
286 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
287
288 TGeoCombiTrans* layers0_transform = new TGeoCombiTrans();
289 if (YStationRotations[stationNum] == true)
290 layers0_transform->ReflectZ(true);
291 if (XStationRotations[stationNum] == true)
292 layers0_transform->RotateX(180.0);
293 layers0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
294 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
295
296 TGeoCombiTrans* layers1_transform = new TGeoCombiTrans();
297 if (YStationRotations[stationNum] == true)
298 layers1_transform->ReflectZ(true);
299 if (XStationRotations[stationNum] == true)
300 layers1_transform->RotateX(180.0);
301 layers1_transform->ReflectX(true);
302 layers1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
303 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
304
305 TGeoCombiTrans* frame_transform = new TGeoCombiTrans();
306 if (YStationRotations[stationNum] == true)
307 frame_transform->RotateY(180.0);
308 if (XStationRotations[stationNum] == true)
309 frame_transform->RotateX(180.0);
310 frame_transform->SetTranslation((XModuleShifts[stationNum][0] + XModuleShifts[stationNum][1]),
311 YModuleShifts[stationNum][0],
312 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
313
314 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
315 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
316 ZStationPositions[stationNum]);
317
318 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
319 station->AddNode(module1, 1, new TGeoCombiTrans(*module1_transform)); // module
320
321 station->AddNode(layers0, 0, new TGeoCombiTrans(*layers0_transform)); // layers
322 station->AddNode(layers1, 1, new TGeoCombiTrans(*layers1_transform)); // layers
323
324 station->AddNode(frame, 0, frame_transform);
325
326 GEMS->AddNode(station, 0, station_transform);
327 }
328
329 top->AddNode(GEMS, 0);
331
332 // --------------- Finish -----------------------------------------------
333 gGeoMan->CloseGeometry();
334 gGeoMan->CheckOverlaps(0.0001);
335 gGeoMan->PrintOverlaps();
336 gGeoMan->Test();
337 // gGeoMan->RestoreMasterVolume();
338
339 TFile* geoFile = new TFile(geoFileName, "RECREATE");
340 top->Write();
341 geoFile->Close();
342 top->Draw("ogl");
343}
344//------------------------------------------------------------------------------
345
347{
348
349 TGeoVolume* stationA = new TGeoVolumeAssembly(station_name);
350 stationA->SetMedium(pMedAir);
351
352 return stationA;
353}
354
356{
357
358 // module shape
359 TGeoShape* moduleS = new TGeoBBox("moduleS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
360
361 // module volume
362 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
363
364 // medium
365 if (pMedArCO27030)
366 moduleV->SetMedium(pMedArCO27030);
367 else
368 Fatal("Main", "Invalid medium for sensitive modules!");
369
370 // visual parameters
371 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
372 moduleV->SetTransparency(20);
373
374 return moduleV;
375}
376
378{
379
380 // frame shapes
381 TGeoShape* vertical_frameS =
382 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station66x41 * 0.5 + dy, dz * 0.5);
383 TGeoShape* horizontal_frameS =
384 new TGeoBBox("horizontal_frameS", XModuleSize_Station66x41 * 0.5, dy * 0.5, dz * 0.5);
385
386 // frame volumes
387 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
388 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
389 TGeoVolume* horizontal_frameV = new TGeoVolume(frame_name + "_horizontal_frameV", horizontal_frameS);
390
391 // media
392 TGeoMedium* frame_medium = pMedCarbon; // set medium
393 if (pMedCarbon) {
394 vertical_frameV->SetMedium(frame_medium);
395 horizontal_frameV->SetMedium(frame_medium);
396 } else
397 Fatal("Main", "Invalid medium for frames!");
398 if (pMedAir) {
399 composite_frameV->SetMedium(pMedAir);
400 } else
401 Fatal("Main", "Invalid medium for frames!");
402
403 // visual parameters
404 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
405 horizontal_frameV->SetLineColor(TColor::GetColor("#9999ff"));
406
407 // frame part positions in the frame
408 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
409 left_vertical_frame_position->SetTranslation(XModuleSize_Station66x41 * 0.5 + dXFrame_Station66x41 * 0.5, 0.0, 0.0);
410
411 TGeoCombiTrans* right_vertical_frame_position = new TGeoCombiTrans();
412 right_vertical_frame_position->SetTranslation(-XModuleSize_Station66x41 * 0.5 - dXFrame_Station66x41 * 0.5, 0.0,
413 0.0);
414
415 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
416 bottom_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station66x41 * 0.5 + dYFrame_Station66x41 * 0.5,
417 0.0);
418
419 TGeoCombiTrans* lower_horizontal_frame_position = new TGeoCombiTrans();
420 lower_horizontal_frame_position->SetTranslation(0.0, -YModuleSize_Station66x41 * 0.5 - dYFrame_Station66x41 * 0.5,
421 0.0);
422
423 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
424 composite_frameV->AddNode(vertical_frameV, 1, right_vertical_frame_position);
425 composite_frameV->AddNode(horizontal_frameV, 0, bottom_horizontal_frame_position);
426 composite_frameV->AddNode(horizontal_frameV, 1, lower_horizontal_frame_position);
427
428 return composite_frameV;
429}
430
432 Double_t xsize,
433 Double_t ysize,
434 Double_t zsize,
435 Double_t hole_radius)
436{
437
438 // module shapes
439 TGeoShape* module_partS = new TGeoBBox("module_partS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
440 TGeoShape* holeS = new TGeoTube("holeS", 0.0, hole_radius, zsize * 0.5 + 0.01);
441
442 gRandom->SetSeed(0);
443 Int_t uniqueId = gRandom->Integer(10000);
444 TGeoTranslation* hole_module_trans = new TGeoTranslation(
445 TString("hole_module_trans_") + TString::Itoa(uniqueId, 10), -xsize * 0.5, -ysize * 0.5, 0.0);
446
447 hole_module_trans->RegisterYourself();
448
449 TString bool_expression_module = TString(module_partS->GetName()) + TString(" - ") + TString(holeS->GetName())
450 + TString(":") + TString(hole_module_trans->GetName());
451 TGeoCompositeShape* moduleS = new TGeoCompositeShape(bool_expression_module);
452
453 // module volume
454 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
455
456 // medium
457 if (pMedArCO27030)
458 moduleV->SetMedium(pMedArCO27030);
459 else
460 Fatal("Main", "Invalid medium for sensitive modules!");
461
462 // visual parameters
463 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
464 moduleV->SetTransparency(20);
465
466 return moduleV;
467}
468
470{
471
472 // frame volumes
473 TGeoVolume* layers = new TGeoVolumeAssembly(layer_name);
474 layers->SetMedium(pMedAir);
475
476 // Common parameters for all layers
477 Double_t layer_XSize = XModuleSize_Station163x45; // cm
478 Double_t layer_YSize = YModuleSize_Station163x45; // cm
479
480 Double_t layerFront_XSize = 80.85; // cm
481 Double_t layerFront_YSize = 44.2; // cm
482 Double_t layerFront_XShift = -0.375; // cm
483 Double_t layerFront_YShift = -0.2; // cm
484
485 Double_t layerBack_XSize = 80.71; // cm
486 Double_t layerBack_YSize = 44.2; // cm
487 Double_t layerBack_XShift = -0.445; // cm
488 Double_t layerBack_YShift = -0.2; // cm
489
490 // copper layer -------------------------------------------------------------
491 Double_t copperLayer_ZSize = 0.00655; // cm;
492 Double_t copperLayerHole_Radius = 6.0; // cm
493
494 // layer shape
495 TGeoShape* copperLayerFrontBlankS =
496 new TGeoBBox(TString("copperLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
497 layerFront_YSize * 0.5, copperLayer_ZSize * 0.5);
498 TGeoShape* copperLayerBackBlankS =
499 new TGeoBBox(TString("copperLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
500 layerBack_YSize * 0.5, copperLayer_ZSize * 0.5);
501
502 TGeoShape* copperLayerFrontHoleS =
503 new TGeoTube(TString("copperLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0, copperLayerHole_Radius,
504 copperLayer_ZSize * 0.5 + 0.01);
505 TGeoShape* copperLayerBackHoleS = new TGeoTube(TString("copperLayerBackHoleS") += TString("_") + layers->GetName(),
506 0.0, copperLayerHole_Radius, copperLayer_ZSize * 0.5 + 0.01);
507
508 TGeoTranslation* copperLayerFrontHole_pos = new TGeoTranslation();
509 copperLayerFrontHole_pos->SetName("copperLayerFrontHole_pos");
510 copperLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
511 copperLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
512 copperLayerFrontHole_pos->SetDz(0.0);
513 copperLayerFrontHole_pos->RegisterYourself();
514
515 TGeoTranslation* copperLayerBackHole_pos = new TGeoTranslation();
516 copperLayerBackHole_pos->SetName("copperLayerBackHole_pos");
517 copperLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
518 copperLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
519 copperLayerBackHole_pos->SetDz(0.0);
520 copperLayerBackHole_pos->RegisterYourself();
521
522 TGeoCompositeShape* copperLayerFrontS = new TGeoCompositeShape();
523 copperLayerFrontS->SetName(TString("copperLayerFrontS") += TString("_") + layers->GetName());
524 {
525 TString expression = "copperLayerFrontBlankS";
526 expression += TString("_") + layers->GetName();
527 expression += "-copperLayerFrontHoleS";
528 expression += TString("_") + layers->GetName();
529 expression += ":copperLayerFrontHole_pos";
530
531 copperLayerFrontS->MakeNode(expression);
532 copperLayerFrontS->ComputeBBox(); // need to compute a bounding box
533 }
534
535 TGeoCompositeShape* copperLayerBackS = new TGeoCompositeShape();
536 copperLayerBackS->SetName(TString("copperLayerBackS") += TString("_") + layers->GetName());
537 {
538 TString expression = "copperLayerBackBlankS";
539 expression += TString("_") + layers->GetName();
540 expression += "-copperLayerBackHoleS";
541 expression += TString("_") + layers->GetName();
542 expression += ":copperLayerBackHole_pos";
543
544 copperLayerBackS->MakeNode(expression);
545 copperLayerBackS->ComputeBBox(); // need to compute a bounding box
546 }
547
548 TGeoVolume* copperLayerFrontV =
549 new TGeoVolume(TString("copperLayerFrontV") += TString("_") + layers->GetName(), copperLayerFrontS);
550 TGeoVolume* copperLayerBackV =
551 new TGeoVolume(TString("copperLayerBackV") += TString("_") + layers->GetName(), copperLayerBackS);
552
553 // volume medium
554 TGeoMedium* copperLayerV_medium = pMedCopper;
555 if (copperLayerV_medium) {
556 copperLayerFrontV->SetMedium(copperLayerV_medium);
557 copperLayerBackV->SetMedium(copperLayerV_medium);
558 } else
559 Fatal("Main", "Invalid medium for copperLayerV!");
560
561 // volume visual property (transparency)
562 copperLayerFrontV->SetLineColor(TColor::GetColor("#ff7538"));
563 copperLayerFrontV->SetTransparency(0);
564 copperLayerBackV->SetLineColor(TColor::GetColor("#ff7538"));
565 copperLayerBackV->SetTransparency(0);
566
567 TGeoCombiTrans* copperLayerFront_transf[2];
568
569 copperLayerFront_transf[0] = new TGeoCombiTrans();
570 copperLayerFront_transf[0]->SetDx(+layerFront_XShift);
571 copperLayerFront_transf[0]->SetDy(+layerFront_YShift);
572 copperLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize * 0.5);
573
574 TGeoCombiTrans* copperLayerBack_transf[1];
575
576 copperLayerBack_transf[0] = new TGeoCombiTrans();
577 copperLayerBack_transf[0]->SetDx(+layerBack_XShift);
578 copperLayerBack_transf[0]->SetDy(+layerBack_YShift);
579 copperLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize * 0.5);
580
581 layers->AddNode(copperLayerFrontV, 0, copperLayerFront_transf[0]);
582 layers->AddNode(copperLayerBackV, 0, copperLayerBack_transf[0]);
583 //--------------------------------------------------------------------------
584
585 // glue layer ---------------------------------------------------------------
586 Double_t glueLayer_ZSize = 0.01; // cm; half-thickness of all glue layers
587 Double_t glueLayerHole_Radius = 6.0; // cm
588
589 // layer shape
590 TGeoShape* glueLayerFrontBlankS =
591 new TGeoBBox(TString("glueLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
592 layerFront_YSize * 0.5, glueLayer_ZSize * 0.5);
593 TGeoShape* glueLayerBackBlankS = new TGeoBBox(TString("glueLayerBackBlankS") += TString("_") + layers->GetName(),
594 layerBack_XSize * 0.5, layerBack_YSize * 0.5, glueLayer_ZSize * 0.5);
595
596 TGeoShape* glueLayerFrontHoleS = new TGeoTube(TString("glueLayerFrontHoleS") += TString("_") + layers->GetName(),
597 0.0, glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
598 TGeoShape* glueLayerBackHoleS = new TGeoTube(TString("glueLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
599 glueLayerHole_Radius, glueLayer_ZSize * 0.5 + 0.01);
600
601 TGeoTranslation* glueLayerFrontHole_pos = new TGeoTranslation();
602 glueLayerFrontHole_pos->SetName("glueLayerFrontHole_pos");
603 glueLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
604 glueLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
605 glueLayerFrontHole_pos->SetDz(0.0);
606 glueLayerFrontHole_pos->RegisterYourself();
607
608 TGeoTranslation* glueLayerBackHole_pos = new TGeoTranslation();
609 glueLayerBackHole_pos->SetName("glueLayerBackHole_pos");
610 glueLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
611 glueLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
612 glueLayerBackHole_pos->SetDz(0.0);
613 glueLayerBackHole_pos->RegisterYourself();
614
615 TGeoCompositeShape* glueLayerFrontS = new TGeoCompositeShape();
616 glueLayerFrontS->SetName(TString("glueLayerFrontS") += TString("_") + layers->GetName());
617 {
618 TString expression = "glueLayerFrontBlankS";
619 expression += TString("_") + layers->GetName();
620 expression += "-glueLayerFrontHoleS";
621 expression += TString("_") + layers->GetName();
622 expression += ":glueLayerFrontHole_pos";
623
624 glueLayerFrontS->MakeNode(expression);
625 glueLayerFrontS->ComputeBBox(); // need to compute a bounding box
626 }
627
628 TGeoCompositeShape* glueLayerBackS = new TGeoCompositeShape();
629 glueLayerBackS->SetName(TString("glueLayerBackS") += TString("_") + layers->GetName());
630 {
631 TString expression = "glueLayerBackBlankS";
632 expression += TString("_") + layers->GetName();
633 expression += "-glueLayerBackHoleS";
634 expression += TString("_") + layers->GetName();
635 expression += ":glueLayerBackHole_pos";
636
637 glueLayerBackS->MakeNode(expression);
638 glueLayerBackS->ComputeBBox(); // need to compute a bounding box
639 }
640
641 TGeoVolume* glueLayerFrontV =
642 new TGeoVolume(TString("glueLayerFrontV") += TString("_") + layers->GetName(), glueLayerFrontS);
643 TGeoVolume* glueLayerBackV =
644 new TGeoVolume(TString("glueLayerBackV") += TString("_") + layers->GetName(), glueLayerBackS);
645
646 // volume medium
647 TGeoMedium* glueLayerV_medium = pMedGlue;
648 if (glueLayerV_medium) {
649 glueLayerFrontV->SetMedium(glueLayerV_medium);
650 glueLayerBackV->SetMedium(glueLayerV_medium);
651 } else
652 Fatal("Main", "Invalid medium for glueLayerV!");
653
654 // volume visual property (transparency)
655 glueLayerFrontV->SetLineColor(TColor::GetColor("#1919ff"));
656 glueLayerFrontV->SetTransparency(0);
657 glueLayerBackV->SetLineColor(TColor::GetColor("#1919ff"));
658 glueLayerBackV->SetTransparency(0);
659
660 TGeoCombiTrans* glueLayerFront_transf[1];
661
662 glueLayerFront_transf[0] = new TGeoCombiTrans();
663 glueLayerFront_transf[0]->SetDx(+layerFront_XShift);
664 glueLayerFront_transf[0]->SetDy(+layerFront_YShift);
665 glueLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize * 0.5);
666
667 TGeoCombiTrans* glueLayerBack_transf[1];
668
669 glueLayerBack_transf[0] = new TGeoCombiTrans();
670 glueLayerBack_transf[0]->SetDx(+layerBack_XShift);
671 glueLayerBack_transf[0]->SetDy(+layerBack_YShift);
672 glueLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize * 0.5);
673
674 layers->AddNode(glueLayerFrontV, 0, glueLayerFront_transf[0]);
675 layers->AddNode(glueLayerBackV, 0, glueLayerBack_transf[0]);
676 //--------------------------------------------------------------------------
677
678 // epoxide layer ------------------------------------------------------------
679 Double_t epoxideLayer_ZSize = 0.105; // cm; half-thickness of all epoxide layers
680 Double_t epoxideLayerHole_Radius = 6.0; // cm
681
682 // layer shape
683 TGeoShape* epoxideLayerFrontBlankS =
684 new TGeoBBox(TString("epoxideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
685 layerFront_YSize * 0.5, epoxideLayer_ZSize * 0.5);
686 TGeoShape* epoxideLayerBackBlankS =
687 new TGeoBBox(TString("epoxideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
688 layerBack_YSize * 0.5, epoxideLayer_ZSize * 0.5);
689
690 TGeoShape* epoxideLayerFrontHoleS =
691 new TGeoTube(TString("epoxideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
692 epoxideLayerHole_Radius, epoxideLayer_ZSize * 0.5 + 0.01);
693 TGeoShape* epoxideLayerBackHoleS =
694 new TGeoTube(TString("epoxideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0, epoxideLayerHole_Radius,
695 epoxideLayer_ZSize * 0.5 + 0.01);
696
697 TGeoTranslation* epoxideLayerFrontHole_pos = new TGeoTranslation();
698 epoxideLayerFrontHole_pos->SetName("epoxideLayerFrontHole_pos");
699 epoxideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
700 epoxideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
701 epoxideLayerFrontHole_pos->SetDz(0.0);
702 epoxideLayerFrontHole_pos->RegisterYourself();
703
704 TGeoTranslation* epoxideLayerBackHole_pos = new TGeoTranslation();
705 epoxideLayerBackHole_pos->SetName("epoxideLayerBackHole_pos");
706 epoxideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
707 epoxideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
708 epoxideLayerBackHole_pos->SetDz(0.0);
709 epoxideLayerBackHole_pos->RegisterYourself();
710
711 TGeoCompositeShape* epoxideLayerFrontS = new TGeoCompositeShape();
712 epoxideLayerFrontS->SetName(TString("epoxideLayerFrontS") += TString("_") + layers->GetName());
713 {
714 TString expression = "epoxideLayerFrontBlankS";
715 expression += TString("_") + layers->GetName();
716 expression += "-epoxideLayerFrontHoleS";
717 expression += TString("_") + layers->GetName();
718 expression += ":epoxideLayerFrontHole_pos";
719
720 epoxideLayerFrontS->MakeNode(expression);
721 epoxideLayerFrontS->ComputeBBox(); // need to compute a bounding box
722 }
723
724 TGeoCompositeShape* epoxideLayerBackS = new TGeoCompositeShape();
725 epoxideLayerBackS->SetName(TString("epoxideLayerBackS") += TString("_") + layers->GetName());
726 {
727 TString expression = "epoxideLayerBackBlankS";
728 expression += TString("_") + layers->GetName();
729 expression += "-epoxideLayerBackHoleS";
730 expression += TString("_") + layers->GetName();
731 expression += ":epoxideLayerBackHole_pos";
732
733 epoxideLayerBackS->MakeNode(expression);
734 epoxideLayerBackS->ComputeBBox(); // need to compute a bounding box
735 }
736
737 TGeoVolume* epoxideLayerFrontV =
738 new TGeoVolume(TString("epoxideLayerFrontV") += TString("_") + layers->GetName(), epoxideLayerFrontS);
739 TGeoVolume* epoxideLayerBackV =
740 new TGeoVolume(TString("epoxideLayerBackV") += TString("_") + layers->GetName(), epoxideLayerBackS);
741
742 // volume medium
743 TGeoMedium* epoxideLayerV_medium = pMedEpoxideCompound;
744 if (epoxideLayerV_medium) {
745 epoxideLayerFrontV->SetMedium(epoxideLayerV_medium);
746 epoxideLayerBackV->SetMedium(epoxideLayerV_medium);
747 } else
748 Fatal("Main", "Invalid medium for epoxideLayerV!");
749
750 // volume visual property (transparency)
751 epoxideLayerFrontV->SetLineColor(TColor::GetColor("#aa33ff"));
752 epoxideLayerFrontV->SetTransparency(0);
753 epoxideLayerBackV->SetLineColor(TColor::GetColor("#aa33ff"));
754 epoxideLayerBackV->SetTransparency(0);
755
756 TGeoCombiTrans* epoxideLayerFront_transf[1];
757
758 epoxideLayerFront_transf[0] = new TGeoCombiTrans();
759 epoxideLayerFront_transf[0]->SetDx(+layerFront_XShift);
760 epoxideLayerFront_transf[0]->SetDy(+layerFront_YShift);
761 epoxideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
762 + epoxideLayer_ZSize * 0.5);
763
764 TGeoCombiTrans* epoxideLayerBack_transf[1];
765
766 epoxideLayerBack_transf[0] = new TGeoCombiTrans();
767 epoxideLayerBack_transf[0]->SetDx(+layerBack_XShift);
768 epoxideLayerBack_transf[0]->SetDy(+layerBack_YShift);
769 epoxideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
770 - epoxideLayer_ZSize * 0.5);
771
772 layers->AddNode(epoxideLayerFrontV, 0, epoxideLayerFront_transf[0]);
773 layers->AddNode(epoxideLayerBackV, 0, epoxideLayerBack_transf[0]);
774 //--------------------------------------------------------------------------
775
776 // honeycomb layer ----------------------------------------------------------
777 Double_t honeycombLayer_ZSize = 1.5 - (0.06805); // cm; half-thickness of all honeycomb layers
778 Double_t honeycombLayerHole_Radius = 6.0; // cm
779
780 // layer shape
781 TGeoShape* honeycombLayerFrontBlankS =
782 new TGeoBBox(TString("honeycombLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
783 layerFront_YSize * 0.5, honeycombLayer_ZSize * 0.5);
784 TGeoShape* honeycombLayerBackBlankS =
785 new TGeoBBox(TString("honeycombLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
786 layerBack_YSize * 0.5, honeycombLayer_ZSize * 0.5);
787
788 TGeoShape* honeycombLayerFrontHoleS =
789 new TGeoTube(TString("honeycombLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
790 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
791 TGeoShape* honeycombLayerBackHoleS =
792 new TGeoTube(TString("honeycombLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
793 honeycombLayerHole_Radius, honeycombLayer_ZSize * 0.5 + 0.01);
794
795 TGeoTranslation* honeycombLayerFrontHole_pos = new TGeoTranslation();
796 honeycombLayerFrontHole_pos->SetName("honeycombLayerFrontHole_pos");
797 honeycombLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
798 honeycombLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
799 honeycombLayerFrontHole_pos->SetDz(0.0);
800 honeycombLayerFrontHole_pos->RegisterYourself();
801
802 TGeoTranslation* honeycombLayerBackHole_pos = new TGeoTranslation();
803 honeycombLayerBackHole_pos->SetName("honeycombLayerBackHole_pos");
804 honeycombLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
805 honeycombLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
806 honeycombLayerBackHole_pos->SetDz(0.0);
807 honeycombLayerBackHole_pos->RegisterYourself();
808
809 TGeoCompositeShape* honeycombLayerFrontS = new TGeoCompositeShape();
810 honeycombLayerFrontS->SetName(TString("honeycombLayerFrontS") += TString("_") + layers->GetName());
811 {
812 TString expression = "honeycombLayerFrontBlankS";
813 expression += TString("_") + layers->GetName();
814 expression += "-honeycombLayerFrontHoleS";
815 expression += TString("_") + layers->GetName();
816 expression += ":honeycombLayerFrontHole_pos";
817
818 honeycombLayerFrontS->MakeNode(expression);
819 honeycombLayerFrontS->ComputeBBox(); // need to compute a bounding box
820 }
821
822 TGeoCompositeShape* honeycombLayerBackS = new TGeoCompositeShape();
823 honeycombLayerBackS->SetName(TString("honeycombLayerBackS") += TString("_") + layers->GetName());
824 {
825 TString expression = "honeycombLayerBackBlankS";
826 expression += TString("_") + layers->GetName();
827 expression += "-honeycombLayerBackHoleS";
828 expression += TString("_") + layers->GetName();
829 expression += ":honeycombLayerBackHole_pos";
830
831 honeycombLayerBackS->MakeNode(expression);
832 honeycombLayerBackS->ComputeBBox(); // need to compute a bounding box
833 }
834
835 TGeoVolume* honeycombLayerFrontV =
836 new TGeoVolume(TString("honeycombLayerFrontV") += TString("_") + layers->GetName(), honeycombLayerFrontS);
837 TGeoVolume* honeycombLayerBackV =
838 new TGeoVolume(TString("honeycombLayerBackV") += TString("_") + layers->GetName(), honeycombLayerBackS);
839
840 // volume medium
841 TGeoMedium* honeycombLayerV_medium = pMedHoneyComb;
842 if (honeycombLayerV_medium) {
843 honeycombLayerFrontV->SetMedium(honeycombLayerV_medium);
844 honeycombLayerBackV->SetMedium(honeycombLayerV_medium);
845 } else
846 Fatal("Main", "Invalid medium for honeycombLayerV!");
847
848 // volume visual property (transparency)
849 honeycombLayerFrontV->SetLineColor(TColor::GetColor("#ffdf84"));
850 honeycombLayerFrontV->SetTransparency(0);
851 honeycombLayerBackV->SetLineColor(TColor::GetColor("#ffdf84"));
852 honeycombLayerBackV->SetTransparency(0);
853
854 TGeoCombiTrans* honeycombLayerFront_transf[1];
855
856 honeycombLayerFront_transf[0] = new TGeoCombiTrans();
857 honeycombLayerFront_transf[0]->SetDx(+layerFront_XShift);
858 honeycombLayerFront_transf[0]->SetDy(+layerFront_YShift);
859 honeycombLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
860 + epoxideLayer_ZSize + honeycombLayer_ZSize * 0.5);
861
862 TGeoCombiTrans* honeycombLayerBack_transf[1];
863
864 honeycombLayerBack_transf[0] = new TGeoCombiTrans();
865 honeycombLayerBack_transf[0]->SetDx(+layerBack_XShift);
866 honeycombLayerBack_transf[0]->SetDy(+layerBack_YShift);
867 honeycombLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
868 - epoxideLayer_ZSize - honeycombLayer_ZSize * 0.5);
869
870 layers->AddNode(honeycombLayerFrontV, 0, honeycombLayerFront_transf[0]);
871 layers->AddNode(honeycombLayerBackV, 0, honeycombLayerBack_transf[0]);
872 //--------------------------------------------------------------------------
873
874 // polyamide layer ----------------------------------------------------------
875 Double_t polyamideLayer_ZSize = 0.0125; // cm; half-thickness of all polyamide layers
876 Double_t polyamideLayerHole_Radius = 6.0; // cm
877
878 // layer shape
879 TGeoShape* polyamideLayerFrontBlankS =
880 new TGeoBBox(TString("polyamideLayerFrontBlankS") += TString("_") + layers->GetName(), layerFront_XSize * 0.5,
881 layerFront_YSize * 0.5, polyamideLayer_ZSize * 0.5);
882 TGeoShape* polyamideLayerBackBlankS =
883 new TGeoBBox(TString("polyamideLayerBackBlankS") += TString("_") + layers->GetName(), layerBack_XSize * 0.5,
884 layerBack_YSize * 0.5, polyamideLayer_ZSize * 0.5);
885
886 TGeoShape* polyamideLayerFrontHoleS =
887 new TGeoTube(TString("polyamideLayerFrontHoleS") += TString("_") + layers->GetName(), 0.0,
888 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
889 TGeoShape* polyamideLayerBackHoleS =
890 new TGeoTube(TString("polyamideLayerBackHoleS") += TString("_") + layers->GetName(), 0.0,
891 polyamideLayerHole_Radius, polyamideLayer_ZSize * 0.5 + 0.01);
892
893 TGeoTranslation* polyamideLayerFrontHole_pos = new TGeoTranslation();
894 polyamideLayerFrontHole_pos->SetName("polyamideLayerFrontHole_pos");
895 polyamideLayerFrontHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerFront_XShift);
896 polyamideLayerFrontHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerFront_YShift);
897 polyamideLayerFrontHole_pos->SetDz(0.0);
898 polyamideLayerFrontHole_pos->RegisterYourself();
899
900 TGeoTranslation* polyamideLayerBackHole_pos = new TGeoTranslation();
901 polyamideLayerBackHole_pos->SetName("polyamideLayerBackHole_pos");
902 polyamideLayerBackHole_pos->SetDx(-XModuleSize_Station163x45 * 0.5 - layerBack_XShift);
903 polyamideLayerBackHole_pos->SetDy(-YModuleSize_Station163x45 * 0.5 - layerBack_YShift);
904 polyamideLayerBackHole_pos->SetDz(0.0);
905 polyamideLayerBackHole_pos->RegisterYourself();
906
907 TGeoCompositeShape* polyamideLayerFrontS = new TGeoCompositeShape();
908 polyamideLayerFrontS->SetName(TString("polyamideLayerFrontS") += TString("_") + layers->GetName());
909 {
910 TString expression = "polyamideLayerFrontBlankS";
911 expression += TString("_") + layers->GetName();
912 expression += "-polyamideLayerFrontHoleS";
913 expression += TString("_") + layers->GetName();
914 expression += ":polyamideLayerFrontHole_pos";
915
916 polyamideLayerFrontS->MakeNode(expression);
917 polyamideLayerFrontS->ComputeBBox(); // need to compute a bounding box
918 }
919
920 TGeoCompositeShape* polyamideLayerBackS = new TGeoCompositeShape();
921 polyamideLayerBackS->SetName(TString("polyamideLayerBackS") += TString("_") + layers->GetName());
922 {
923 TString expression = "polyamideLayerBackBlankS";
924 expression += TString("_") + layers->GetName();
925 expression += "-polyamideLayerBackHoleS";
926 expression += TString("_") + layers->GetName();
927 expression += ":polyamideLayerBackHole_pos";
928
929 polyamideLayerBackS->MakeNode(expression);
930 polyamideLayerBackS->ComputeBBox(); // need to compute a bounding box
931 }
932
933 TGeoVolume* polyamideLayerFrontV =
934 new TGeoVolume(TString("polyamideLayerFrontV") += TString("_") + layers->GetName(), polyamideLayerFrontS);
935 TGeoVolume* polyamideLayerBackV =
936 new TGeoVolume(TString("polyamideLayerBackV") += TString("_") + layers->GetName(), polyamideLayerBackS);
937
938 // volume medium
939 TGeoMedium* polyamideLayerV_medium = pMedPolyamide;
940 if (polyamideLayerV_medium) {
941 polyamideLayerFrontV->SetMedium(polyamideLayerV_medium);
942 polyamideLayerBackV->SetMedium(polyamideLayerV_medium);
943 } else
944 Fatal("Main", "Invalid medium for polyamideLayerV!");
945
946 // volume visual property (transparency)
947 polyamideLayerFrontV->SetLineColor(TColor::GetColor("#fefe22"));
948 polyamideLayerFrontV->SetTransparency(0);
949 polyamideLayerBackV->SetLineColor(TColor::GetColor("#fefe22"));
950 polyamideLayerBackV->SetTransparency(0);
951
952 TGeoCombiTrans* polyamideLayerFront_transf[1];
953
954 polyamideLayerFront_transf[0] = new TGeoCombiTrans();
955 polyamideLayerFront_transf[0]->SetDx(+layerFront_XShift);
956 polyamideLayerFront_transf[0]->SetDy(+layerFront_YShift);
957 polyamideLayerFront_transf[0]->SetDz(-ZGEMSize_Station163x45 * 0.5 + copperLayer_ZSize + glueLayer_ZSize
958 + epoxideLayer_ZSize + honeycombLayer_ZSize + polyamideLayer_ZSize * 0.5);
959
960 TGeoCombiTrans* polyamideLayerBack_transf[1];
961
962 polyamideLayerBack_transf[0] = new TGeoCombiTrans();
963 polyamideLayerBack_transf[0]->SetDx(+layerBack_XShift);
964 polyamideLayerBack_transf[0]->SetDy(+layerBack_YShift);
965 polyamideLayerBack_transf[0]->SetDz(+ZGEMSize_Station163x45 * 0.5 - copperLayer_ZSize - glueLayer_ZSize
966 - epoxideLayer_ZSize - honeycombLayer_ZSize - polyamideLayer_ZSize * 0.5);
967
968 layers->AddNode(polyamideLayerFrontV, 0, polyamideLayerFront_transf[0]);
969 layers->AddNode(polyamideLayerBackV, 0, polyamideLayerBack_transf[0]);
970 //--------------------------------------------------------------------------
971
972 return layers;
973}
974
976 Double_t dx,
977 Double_t dy,
978 Double_t dz,
979 Double_t hole_radius)
980{
981
982 // frame shapes
983 TGeoShape* vertical_frameS =
984 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station163x45 * 0.5 + dy, dz * 0.5);
985 TGeoShape* horizontal_upper_frameS =
986 new TGeoBBox("horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5, dy * 0.5, dz * 0.5);
987 TGeoShape* horizontal_bottom_frameS = new TGeoBBox(
988 "horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5 - hole_radius * 0.5, dy * 0.5, dz * 0.5);
989
990 // frame volumes
991 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
992 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
993 TGeoVolume* horizontal_upper_frameV =
994 new TGeoVolume(frame_name + "_horizontal_upper_frameV", horizontal_upper_frameS);
995 TGeoVolume* horizontal_bottom_frameV =
996 new TGeoVolume(frame_name + "_horizontal_bottom_frameV", horizontal_bottom_frameS);
997
998 // media
999 TGeoMedium* frame_medium = pMedCarbon; // set medium
1000 if (pMedCarbon) {
1001 vertical_frameV->SetMedium(frame_medium);
1002 horizontal_upper_frameV->SetMedium(frame_medium);
1003 horizontal_bottom_frameV->SetMedium(frame_medium);
1004 } else
1005 Fatal("Main", "Invalid medium for frames!");
1006 if (pMedAir) {
1007 composite_frameV->SetMedium(pMedAir);
1008 } else
1009 Fatal("Main", "Invalid medium for frames!");
1010
1011 // visual parameters
1012 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
1013 horizontal_upper_frameV->SetLineColor(TColor::GetColor("#9999ff"));
1014 horizontal_bottom_frameV->SetLineColor(TColor::GetColor("#9999ff"));
1015
1016 // frame part positions in the frame
1017 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
1018 left_vertical_frame_position->SetTranslation(XModuleSize_Station163x45 * 0.5 + dXFrame_Station163x45 * 0.5, 0.0,
1019 0.0);
1020
1021 TGeoCombiTrans* upper_horizontal_frame_position = new TGeoCombiTrans();
1022 upper_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station163x45 * 0.5 + dYFrame_Station163x45 * 0.5,
1023 0.0);
1024
1025 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
1026 bottom_horizontal_frame_position->SetTranslation(
1027 hole_radius * 0.5, -YModuleSize_Station163x45 * 0.5 - dYFrame_Station163x45 * 0.5, 0.0);
1028
1029 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
1030 composite_frameV->AddNode(horizontal_upper_frameV, 0, upper_horizontal_frame_position);
1031 composite_frameV->AddNode(horizontal_bottom_frameV, 0, bottom_horizontal_frame_position);
1032
1033 return composite_frameV;
1034}
1035
1036//------------------------------------------------------------------------------
1038{
1039
1040 // frame volumes
1041 TGeoVolume* frames = new TGeoVolumeAssembly(frame_name);
1042 frames->SetMedium(pMedAir);
1043
1044 // back lower epoxide frame -------------------------------------------------
1045 Double_t backLowerEpoxideFrame_XSize = 161.42; // cm
1046 Double_t backLowerEpoxideFrame_YSize = 2.2; // cm
1047 Double_t backLowerEpoxideFrame_ZSize = 1.6; // cm
1048
1049 Double_t backLowerEpoxideFrameArch_Rmin = 4.0;
1050 Double_t backLowerEpoxideFrameArch_Rmax = 6.0;
1051 Double_t backLowerEpoxideFrameArch_ZSize = backLowerEpoxideFrame_ZSize;
1052
1053 TGeoShape* backLowerEpoxideFrameHalfS =
1054 new TGeoBBox(TString("backLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
1055 (backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5,
1056 backLowerEpoxideFrame_YSize * 0.5, backLowerEpoxideFrame_ZSize * 0.5);
1057 TGeoShape* backLowerEpoxideFrameArchS = new TGeoTubeSeg(
1058 TString("backLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), backLowerEpoxideFrameArch_Rmin,
1059 backLowerEpoxideFrameArch_Rmax, backLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
1060
1061 TGeoTranslation* backLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
1062 backLowerEpoxideFrameHalf_pos1->SetName("backLowerEpoxideFrameHalf1_pos1");
1063 backLowerEpoxideFrameHalf_pos1->SetDx(
1064 +((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
1065 backLowerEpoxideFrameHalf_pos1->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1066 backLowerEpoxideFrameHalf_pos1->SetDz(0.0);
1067 backLowerEpoxideFrameHalf_pos1->RegisterYourself();
1068
1069 TGeoTranslation* backLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
1070 backLowerEpoxideFrameHalf_pos2->SetName("backLowerEpoxideFrameHalf1_pos2");
1071 backLowerEpoxideFrameHalf_pos2->SetDx(
1072 -((backLowerEpoxideFrame_XSize * 0.5 - backLowerEpoxideFrameArch_Rmin) * 0.5 + backLowerEpoxideFrameArch_Rmin));
1073 backLowerEpoxideFrameHalf_pos2->SetDy(-(backLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1074 backLowerEpoxideFrameHalf_pos2->SetDz(0.0);
1075 backLowerEpoxideFrameHalf_pos2->RegisterYourself();
1076
1077 TGeoTranslation* backLowerEpoxideFrameArch_pos = new TGeoTranslation();
1078 backLowerEpoxideFrameArch_pos->SetName("backLowerEpoxideFrameArch_pos");
1079 backLowerEpoxideFrameArch_pos->SetDx(0.0);
1080 backLowerEpoxideFrameArch_pos->SetDy(0.0);
1081 backLowerEpoxideFrameArch_pos->SetDz(0.0);
1082 backLowerEpoxideFrameArch_pos->RegisterYourself();
1083
1084 TGeoCompositeShape* backLowerEpoxideFrameS = new TGeoCompositeShape();
1085 backLowerEpoxideFrameS->SetName(TString("backLowerEpoxideFrameS") += TString("_") + frames->GetName());
1086 {
1087 TString expression = "backLowerEpoxideFrameHalfS";
1088 expression += TString("_") + frames->GetName();
1089 expression += ":backLowerEpoxideFrameHalf1_pos1";
1090 expression += "+backLowerEpoxideFrameHalfS";
1091 expression += TString("_") + frames->GetName();
1092 expression += ":backLowerEpoxideFrameHalf1_pos2";
1093 expression += "+backLowerEpoxideFrameArchS";
1094 expression += TString("_") + frames->GetName();
1095 expression += ":backLowerEpoxideFrameArch_pos";
1096
1097 backLowerEpoxideFrameS->MakeNode(expression);
1098 backLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1099 }
1100
1101 TGeoVolume* backLowerEpoxideFrameV =
1102 new TGeoVolume(TString("backLowerEpoxideFrameV") += TString("_") + frames->GetName(), backLowerEpoxideFrameS);
1103
1104 // volume medium
1105 TGeoMedium* backLowerEpoxideFrameV_medium = pMedEpoxideCompound;
1106 if (backLowerEpoxideFrameV_medium) {
1107 backLowerEpoxideFrameV->SetMedium(backLowerEpoxideFrameV_medium);
1108 } else
1109 Fatal("Main", "Invalid medium for backLowerEpoxideFrameV!");
1110
1111 // volume visual property (transparency)
1112 backLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1113 backLowerEpoxideFrameV->SetTransparency(0);
1114
1115 TGeoCombiTrans* backLowerEpoxideFrame_transf[1];
1116
1117 backLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
1118 backLowerEpoxideFrame_transf[0]->SetDx(0.0);
1119 backLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
1120 backLowerEpoxideFrame_transf[0]->SetDz(+(backLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1121
1122 frames->AddNode(backLowerEpoxideFrameV, 0, backLowerEpoxideFrame_transf[0]);
1123 //--------------------------------------------------------------------------
1124
1125 // front lower epoxide frame -------------------------------------------------
1126 Double_t frontLowerEpoxideFrame_XSize = 161.7; // cm
1127 Double_t frontLowerEpoxideFrame_YSize = 2.2; // cm
1128 Double_t frontLowerEpoxideFrame_ZSize = 1.6; // cm
1129
1130 Double_t frontLowerEpoxideFrameArch_Rmin = 4.0;
1131 Double_t frontLowerEpoxideFrameArch_Rmax = 6.0;
1132 Double_t frontLowerEpoxideFrameArch_ZSize = frontLowerEpoxideFrame_ZSize;
1133
1134 TGeoShape* frontLowerEpoxideFrameHalfS =
1135 new TGeoBBox(TString("frontLowerEpoxideFrameHalfS") += TString("_") + frames->GetName(),
1136 (frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5,
1137 frontLowerEpoxideFrame_YSize * 0.5, frontLowerEpoxideFrame_ZSize * 0.5);
1138 TGeoShape* frontLowerEpoxideFrameArchS = new TGeoTubeSeg(
1139 TString("frontLowerEpoxideFrameArchS") += TString("_") + frames->GetName(), frontLowerEpoxideFrameArch_Rmin,
1140 frontLowerEpoxideFrameArch_Rmax, frontLowerEpoxideFrameArch_ZSize * 0.5, 0.0, 180.0);
1141
1142 TGeoTranslation* frontLowerEpoxideFrameHalf_pos1 = new TGeoTranslation();
1143 frontLowerEpoxideFrameHalf_pos1->SetName("frontLowerEpoxideFrameHalf1_pos1");
1144 frontLowerEpoxideFrameHalf_pos1->SetDx(
1145 +((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
1146 + frontLowerEpoxideFrameArch_Rmin));
1147 frontLowerEpoxideFrameHalf_pos1->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1148 frontLowerEpoxideFrameHalf_pos1->SetDz(0.0);
1149 frontLowerEpoxideFrameHalf_pos1->RegisterYourself();
1150
1151 TGeoTranslation* frontLowerEpoxideFrameHalf_pos2 = new TGeoTranslation();
1152 frontLowerEpoxideFrameHalf_pos2->SetName("frontLowerEpoxideFrameHalf1_pos2");
1153 frontLowerEpoxideFrameHalf_pos2->SetDx(
1154 -((frontLowerEpoxideFrame_XSize * 0.5 - frontLowerEpoxideFrameArch_Rmin) * 0.5
1155 + frontLowerEpoxideFrameArch_Rmin));
1156 frontLowerEpoxideFrameHalf_pos2->SetDy(-(frontLowerEpoxideFrame_YSize * 0.5) + 0.2 /*shift*/);
1157 frontLowerEpoxideFrameHalf_pos2->SetDz(0.0);
1158 frontLowerEpoxideFrameHalf_pos2->RegisterYourself();
1159
1160 TGeoTranslation* frontLowerEpoxideFrameArch_pos = new TGeoTranslation();
1161 frontLowerEpoxideFrameArch_pos->SetName("frontLowerEpoxideFrameArch_pos");
1162 frontLowerEpoxideFrameArch_pos->SetDx(0.0);
1163 frontLowerEpoxideFrameArch_pos->SetDy(0.0);
1164 frontLowerEpoxideFrameArch_pos->SetDz(0.0);
1165 frontLowerEpoxideFrameArch_pos->RegisterYourself();
1166
1167 TGeoCompositeShape* frontLowerEpoxideFrameS = new TGeoCompositeShape();
1168 frontLowerEpoxideFrameS->SetName(TString("frontLowerEpoxideFrameS") += TString("_") + frames->GetName());
1169 {
1170 TString expression = "frontLowerEpoxideFrameHalfS";
1171 expression += TString("_") + frames->GetName();
1172 expression += ":frontLowerEpoxideFrameHalf1_pos1";
1173 expression += "+frontLowerEpoxideFrameHalfS";
1174 expression += TString("_") + frames->GetName();
1175 expression += ":frontLowerEpoxideFrameHalf1_pos2";
1176 expression += "+frontLowerEpoxideFrameArchS";
1177 expression += TString("_") + frames->GetName();
1178 expression += ":frontLowerEpoxideFrameArch_pos";
1179
1180 frontLowerEpoxideFrameS->MakeNode(expression);
1181 frontLowerEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1182 }
1183
1184 TGeoVolume* frontLowerEpoxideFrameV =
1185 new TGeoVolume(TString("frontLowerEpoxideFrameV") += TString("_") + frames->GetName(), frontLowerEpoxideFrameS);
1186
1187 // volume medium
1188 TGeoMedium* frontLowerEpoxideFrameV_medium = pMedEpoxideCompound;
1189 if (frontLowerEpoxideFrameV_medium) {
1190 frontLowerEpoxideFrameV->SetMedium(frontLowerEpoxideFrameV_medium);
1191 } else
1192 Fatal("Main", "Invalid medium for frontLowerEpoxideFrameV!");
1193
1194 // volume visual property (transparency)
1195 frontLowerEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1196 frontLowerEpoxideFrameV->SetTransparency(0);
1197
1198 TGeoCombiTrans* frontLowerEpoxideFrame_transf[1];
1199
1200 frontLowerEpoxideFrame_transf[0] = new TGeoCombiTrans();
1201 frontLowerEpoxideFrame_transf[0]->SetDx(0.0);
1202 frontLowerEpoxideFrame_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
1203 frontLowerEpoxideFrame_transf[0]->SetDz(-(frontLowerEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1204
1205 frames->AddNode(frontLowerEpoxideFrameV, 0, frontLowerEpoxideFrame_transf[0]);
1206 //--------------------------------------------------------------------------
1207
1208 // back side epoxide frame --------------------------------------------------
1209 Double_t backSideEpoxideFramePart_XSize = 9.2; // cm
1210 Double_t backSideEpoxideFramePart_YSize = 52.6; // cm
1211 Double_t backSideEpoxideFramePart_ZSize = 1.6; // cm
1212
1213 Double_t backSideEpoxideFrame_XDistBetweenParts = 161.42; // cm
1214
1215 TGeoShape* backSideEpoxideFramePartS = new TGeoBBox(
1216 TString("backSideEpoxideFramePartS") += TString("_") + frames->GetName(), backSideEpoxideFramePart_XSize * 0.5,
1217 backSideEpoxideFramePart_YSize * 0.5, backSideEpoxideFramePart_ZSize * 0.5);
1218
1219 TGeoTranslation* backSideEpoxideFramePart_pos1 = new TGeoTranslation();
1220 backSideEpoxideFramePart_pos1->SetName("backSideEpoxideFramePart_pos1");
1221 backSideEpoxideFramePart_pos1->SetDx(
1222 +(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
1223 backSideEpoxideFramePart_pos1->SetDy(0.0);
1224 backSideEpoxideFramePart_pos1->SetDz(0.0);
1225 backSideEpoxideFramePart_pos1->RegisterYourself();
1226
1227 TGeoTranslation* backSideEpoxideFramePart_pos2 = new TGeoTranslation();
1228 backSideEpoxideFramePart_pos2->SetName("backSideEpoxideFramePart_pos2");
1229 backSideEpoxideFramePart_pos2->SetDx(
1230 -(backSideEpoxideFrame_XDistBetweenParts * 0.5 + backSideEpoxideFramePart_XSize * 0.5));
1231 backSideEpoxideFramePart_pos2->SetDy(0.0);
1232 backSideEpoxideFramePart_pos2->SetDz(0.0);
1233 backSideEpoxideFramePart_pos2->RegisterYourself();
1234
1235 TGeoCompositeShape* backSideEpoxideFrameS = new TGeoCompositeShape();
1236 backSideEpoxideFrameS->SetName(TString("backSideEpoxideFrameS") += TString("_") + frames->GetName());
1237 {
1238 TString expression = "backSideEpoxideFramePartS";
1239 expression += TString("_") + frames->GetName();
1240 expression += ":backSideEpoxideFramePart_pos1";
1241 expression += "+backSideEpoxideFramePartS";
1242 expression += TString("_") + frames->GetName();
1243 expression += ":backSideEpoxideFramePart_pos2";
1244
1245 backSideEpoxideFrameS->MakeNode(expression);
1246 backSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1247 }
1248
1249 TGeoVolume* backSideEpoxideFrameV =
1250 new TGeoVolume(TString("backSideEpoxideFrameV") += TString("_") + frames->GetName(), backSideEpoxideFrameS);
1251
1252 // volume medium
1253 TGeoMedium* backSideEpoxideFrameV_medium = pMedEpoxideCompound;
1254 if (backSideEpoxideFrameV_medium) {
1255 backSideEpoxideFrameV->SetMedium(backSideEpoxideFrameV_medium);
1256 } else
1257 Fatal("Main", "Invalid medium for backSideEpoxideFrameV!");
1258
1259 // volume visual property (transparency)
1260 backSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1261 backSideEpoxideFrameV->SetTransparency(0);
1262
1263 TGeoCombiTrans* backSideEpoxideFrame_transf[1];
1264
1265 backSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
1266 backSideEpoxideFrame_transf[0]->SetDx(0.0);
1267 backSideEpoxideFrame_transf[0]->SetDy(+((backSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1268 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1269 backSideEpoxideFrame_transf[0]->SetDz(+(backSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1270
1271 frames->AddNode(backSideEpoxideFrameV, 0, backSideEpoxideFrame_transf[0]);
1272 //--------------------------------------------------------------------------
1273
1274 // back upper epoxide frame -------------------------------------------------
1275 Double_t backUpperEpoxideFrame_XSize = 161.42; // cm
1276 Double_t backUpperEpoxideFrame_YSize = 6.2; // cm
1277 Double_t backUpperEpoxideFrame_ZSize = 1.6; // cm
1278
1279 TGeoShape* backUpperEpoxideFrameS =
1280 new TGeoBBox("backUpperEpoxideFrameS", backUpperEpoxideFrame_XSize * 0.5, backUpperEpoxideFrame_YSize * 0.5,
1281 backUpperEpoxideFrame_ZSize * 0.5);
1282
1283 TGeoVolume* backUpperEpoxideFrameV =
1284 new TGeoVolume(TString("backUpperEpoxideFrameV") += TString("_") + frames->GetName(), backUpperEpoxideFrameS);
1285
1286 // volume medium
1287 TGeoMedium* backUpperEpoxideFrameV_medium = pMedEpoxideCompound;
1288 if (backUpperEpoxideFrameV_medium) {
1289 backUpperEpoxideFrameV->SetMedium(backUpperEpoxideFrameV_medium);
1290 } else
1291 Fatal("Main", "Invalid medium for backUpperEpoxideFrameV!");
1292
1293 // volume visual property (transparency)
1294 backUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1295 backUpperEpoxideFrameV->SetTransparency(0);
1296
1297 TGeoCombiTrans* backUpperEpoxideFrame_transf[1];
1298
1299 backUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
1300 backUpperEpoxideFrame_transf[0]->SetDx(0.0);
1301 backUpperEpoxideFrame_transf[0]->SetDy(+(backUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1302 - 0.6 /*shift*/);
1303 backUpperEpoxideFrame_transf[0]->SetDz(+(backUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1304
1305 frames->AddNode(backUpperEpoxideFrameV, 0, backUpperEpoxideFrame_transf[0]);
1306 //--------------------------------------------------------------------------
1307
1308 // front side epoxide frame -------------------------------------------------
1309 Double_t frontSideEpoxideFramePart_XSize = 3.5; // cm
1310 Double_t frontSideEpoxideFramePart_YSize = 49.9; // cm
1311 Double_t frontSideEpoxideFramePart_ZSize = 1.6; // cm
1312
1313 Double_t frontSideEpoxideFrame_XDistBetweenParts = 161.7; // cm
1314
1315 TGeoShape* frontSideEpoxideFramePartS =
1316 new TGeoBBox(TString("frontSideEpoxideFramePartS") += TString("_") + frames->GetName(),
1317 frontSideEpoxideFramePart_XSize * 0.5, frontSideEpoxideFramePart_YSize * 0.5,
1318 frontSideEpoxideFramePart_ZSize * 0.5);
1319
1320 TGeoTranslation* frontSideEpoxideFramePart_pos1 = new TGeoTranslation();
1321 frontSideEpoxideFramePart_pos1->SetName("frontSideEpoxideFramePart_pos1");
1322 frontSideEpoxideFramePart_pos1->SetDx(
1323 +(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
1324 frontSideEpoxideFramePart_pos1->SetDy(0.0);
1325 frontSideEpoxideFramePart_pos1->SetDz(0.0);
1326 frontSideEpoxideFramePart_pos1->RegisterYourself();
1327
1328 TGeoTranslation* frontSideEpoxideFramePart_pos2 = new TGeoTranslation();
1329 frontSideEpoxideFramePart_pos2->SetName("frontSideEpoxideFramePart_pos2");
1330 frontSideEpoxideFramePart_pos2->SetDx(
1331 -(frontSideEpoxideFrame_XDistBetweenParts * 0.5 + frontSideEpoxideFramePart_XSize * 0.5));
1332 frontSideEpoxideFramePart_pos2->SetDy(0.0);
1333 frontSideEpoxideFramePart_pos2->SetDz(0.0);
1334 frontSideEpoxideFramePart_pos2->RegisterYourself();
1335
1336 TGeoCompositeShape* frontSideEpoxideFrameS = new TGeoCompositeShape();
1337 frontSideEpoxideFrameS->SetName(TString("frontSideEpoxideFrameS") += TString("_") + frames->GetName());
1338 {
1339 TString expression = "frontSideEpoxideFramePartS";
1340 expression += TString("_") + frames->GetName();
1341 expression += ":frontSideEpoxideFramePart_pos1";
1342 expression += "+frontSideEpoxideFramePartS";
1343 expression += TString("_") + frames->GetName();
1344 expression += ":frontSideEpoxideFramePart_pos2";
1345
1346 frontSideEpoxideFrameS->MakeNode(expression);
1347 frontSideEpoxideFrameS->ComputeBBox(); // need to compute a bounding box
1348 }
1349
1350 TGeoVolume* frontSideEpoxideFrameV =
1351 new TGeoVolume(TString("frontSideEpoxideFrameV") += TString("_") + frames->GetName(), frontSideEpoxideFrameS);
1352
1353 // volume medium
1354 TGeoMedium* frontSideEpoxideFrameV_medium = pMedEpoxideCompound;
1355 if (frontSideEpoxideFrameV_medium) {
1356 frontSideEpoxideFrameV->SetMedium(frontSideEpoxideFrameV_medium);
1357 } else
1358 Fatal("Main", "Invalid medium for frontSideEpoxideFrameV!");
1359
1360 // volume visual property (transparency)
1361 frontSideEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1362 frontSideEpoxideFrameV->SetTransparency(0);
1363
1364 TGeoCombiTrans* frontSideEpoxideFrame_transf[1];
1365
1366 frontSideEpoxideFrame_transf[0] = new TGeoCombiTrans();
1367 frontSideEpoxideFrame_transf[0]->SetDx(0.0);
1368 frontSideEpoxideFrame_transf[0]->SetDy(+((frontSideEpoxideFramePart_YSize - YModuleSize_Station163x45) * 0.5)
1369 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1370 frontSideEpoxideFrame_transf[0]->SetDz(-(frontSideEpoxideFramePart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1371
1372 frames->AddNode(frontSideEpoxideFrameV, 0, frontSideEpoxideFrame_transf[0]);
1373 //--------------------------------------------------------------------------
1374
1375 // front upper epoxide frame -------------------------------------------------
1376 Double_t frontUpperEpoxideFrame_XSize = 161.7; // cm
1377 Double_t frontUpperEpoxideFrame_YSize = 3.5; // cm
1378 Double_t frontUpperEpoxideFrame_ZSize = 1.6; // cm
1379
1380 TGeoShape* frontUpperEpoxideFrameS =
1381 new TGeoBBox("frontUpperEpoxideFrameS", frontUpperEpoxideFrame_XSize * 0.5, frontUpperEpoxideFrame_YSize * 0.5,
1382 frontUpperEpoxideFrame_ZSize * 0.5);
1383
1384 TGeoVolume* frontUpperEpoxideFrameV =
1385 new TGeoVolume(TString("frontUpperEpoxideFrameV") += TString("_") + frames->GetName(), frontUpperEpoxideFrameS);
1386
1387 // volume medium
1388 TGeoMedium* frontUpperEpoxideFrameV_medium = pMedEpoxideCompound;
1389 if (frontUpperEpoxideFrameV_medium) {
1390 frontUpperEpoxideFrameV->SetMedium(frontUpperEpoxideFrameV_medium);
1391 } else
1392 Fatal("Main", "Invalid medium for frontUpperEpoxideFrameV!");
1393
1394 // volume visual property (transparency)
1395 frontUpperEpoxideFrameV->SetLineColor(TColor::GetColor("#ccccff"));
1396 frontUpperEpoxideFrameV->SetTransparency(0);
1397
1398 TGeoCombiTrans* frontUpperEpoxideFrame_transf[1];
1399
1400 frontUpperEpoxideFrame_transf[0] = new TGeoCombiTrans();
1401 frontUpperEpoxideFrame_transf[0]->SetDx(0.0);
1402 frontUpperEpoxideFrame_transf[0]->SetDy(+(frontUpperEpoxideFrame_YSize * 0.5 + YModuleSize_Station163x45 * 0.5)
1403 - 0.6 /*shift*/);
1404 frontUpperEpoxideFrame_transf[0]->SetDz(-(frontUpperEpoxideFrame_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5));
1405
1406 frames->AddNode(frontUpperEpoxideFrameV, 0, frontUpperEpoxideFrame_transf[0]);
1407 //--------------------------------------------------------------------------
1408
1409 // alum. cable support ------------------------------------------------------
1410 Double_t alumCableSupportPart_XSize = 3.0; // cm
1411 Double_t alumCableSupportPart_YSize = 41.3; // cm
1412 Double_t alumCableSupportPart_ZSize = 0.2; // cm
1413
1414 Double_t alumCableSupport_XDistBetweenParts = 164.82; // cm
1415
1416 TGeoShape* alumCableSupportPartS = new TGeoBBox(
1417 TString("alumCableSupportPartS") += TString("_") + frames->GetName(), alumCableSupportPart_XSize * 0.5,
1418 alumCableSupportPart_YSize * 0.5, alumCableSupportPart_ZSize * 0.5);
1419
1420 TGeoTranslation* alumCableSupportPart_pos1 = new TGeoTranslation();
1421 alumCableSupportPart_pos1->SetName("alumCableSupportPart_pos1");
1422 alumCableSupportPart_pos1->SetDx(+(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
1423 alumCableSupportPart_pos1->SetDy(0.0);
1424 alumCableSupportPart_pos1->SetDz(0.0);
1425 alumCableSupportPart_pos1->RegisterYourself();
1426
1427 TGeoTranslation* alumCableSupportPart_pos2 = new TGeoTranslation();
1428 alumCableSupportPart_pos2->SetName("alumCableSupportPart_pos2");
1429 alumCableSupportPart_pos2->SetDx(-(alumCableSupport_XDistBetweenParts * 0.5 + alumCableSupportPart_XSize * 0.5));
1430 alumCableSupportPart_pos2->SetDy(0.0);
1431 alumCableSupportPart_pos2->SetDz(0.0);
1432 alumCableSupportPart_pos2->RegisterYourself();
1433
1434 TGeoCompositeShape* alumCableSupportS = new TGeoCompositeShape();
1435 alumCableSupportS->SetName(TString("alumCableSupportS") += TString("_") + frames->GetName());
1436 {
1437 TString expression = "alumCableSupportPartS";
1438 expression += TString("_") + frames->GetName();
1439 expression += ":alumCableSupportPart_pos1";
1440 expression += "+alumCableSupportPartS";
1441 expression += TString("_") + frames->GetName();
1442 expression += ":alumCableSupportPart_pos2";
1443
1444 alumCableSupportS->MakeNode(expression);
1445 alumCableSupportS->ComputeBBox(); // need to compute a bounding box
1446 }
1447
1448 TGeoVolume* alumCableSupportV =
1449 new TGeoVolume(TString("alumCableSupportV") += TString("_") + frames->GetName(), alumCableSupportS);
1450
1451 // volume medium
1452 TGeoMedium* alumCableSupportV_medium = pMedAluminium;
1453 if (alumCableSupportV_medium) {
1454 alumCableSupportV->SetMedium(alumCableSupportV_medium);
1455 } else
1456 Fatal("Main", "Invalid medium for alumCableSupportV!");
1457
1458 // volume visual property (transparency)
1459 alumCableSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
1460 alumCableSupportV->SetTransparency(0);
1461
1462 TGeoCombiTrans* alumCableSupport_transf[1];
1463
1464 alumCableSupport_transf[0] = new TGeoCombiTrans();
1465 alumCableSupport_transf[0]->SetDx(0.0);
1466 alumCableSupport_transf[0]->SetDy(+((alumCableSupportPart_YSize - YModuleSize_Station163x45) * 0.5)
1467 - frontLowerEpoxideFrame_YSize + 0.2 /*shift*/);
1468 alumCableSupport_transf[0]->SetDz(-(alumCableSupportPart_ZSize * 0.5 + ZModuleSize_Station163x45 * 0.5
1469 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
1470
1471 frames->AddNode(alumCableSupportV, 0, alumCableSupport_transf[0]);
1472 //--------------------------------------------------------------------------
1473
1474 // amplifier upper block ----------------------------------------------------
1475 Double_t amplifierUpperBlockPart1_XSize = 161.44; // cm
1476 Double_t amplifierUpperBlockPart1_YSize = 0.6; // cm
1477 Double_t amplifierUpperBlockPart1_ZSize = 8.41; // cm
1478
1479 Double_t amplifierUpperBlockPart2_XSize = 161.16; // cm
1480 Double_t amplifierUpperBlockPart2_YSize = 0.6; // cm
1481 Double_t amplifierUpperBlockPart2_ZSize = 8.41; // cm
1482
1483 TGeoShape* amplifierUpperBlockPart1S = new TGeoBBox(
1484 TString("amplifierUpperBlockPart1S") += TString("_") + frames->GetName(), amplifierUpperBlockPart1_XSize * 0.5,
1485 amplifierUpperBlockPart1_YSize * 0.5, amplifierUpperBlockPart1_ZSize * 0.5);
1486 TGeoShape* amplifierUpperBlockPart2S = new TGeoBBox(
1487 TString("amplifierUpperBlockPart2S") += TString("_") + frames->GetName(), amplifierUpperBlockPart2_XSize * 0.5,
1488 amplifierUpperBlockPart2_YSize * 0.5, amplifierUpperBlockPart2_ZSize * 0.5);
1489
1490 TGeoTranslation* amplifierUpperBlockPart1_pos = new TGeoTranslation();
1491 amplifierUpperBlockPart1_pos->SetName("amplifierUpperBlockPart1_pos");
1492 amplifierUpperBlockPart1_pos->SetDx(0.0);
1493 amplifierUpperBlockPart1_pos->SetDy(0.0);
1494 amplifierUpperBlockPart1_pos->SetDz(0.0);
1495 amplifierUpperBlockPart1_pos->RegisterYourself();
1496
1497 TGeoTranslation* amplifierUpperBlockPart2_pos = new TGeoTranslation();
1498 amplifierUpperBlockPart2_pos->SetName("amplifierUpperBlockPart2_pos");
1499 amplifierUpperBlockPart2_pos->SetDx(-0.76);
1500 amplifierUpperBlockPart2_pos->SetDy(
1501 -(amplifierUpperBlockPart1_YSize * 0.5 + amplifierUpperBlockPart2_YSize * 0.5 + 0.33));
1502 amplifierUpperBlockPart2_pos->SetDz(0.0);
1503 amplifierUpperBlockPart2_pos->RegisterYourself();
1504
1505 TGeoCompositeShape* amplifierUpperBlockS = new TGeoCompositeShape();
1506 amplifierUpperBlockS->SetName(TString("amplifierUpperBlockS") += TString("_") + frames->GetName());
1507 {
1508 TString expression = "amplifierUpperBlockPart1S";
1509 expression += TString("_") + frames->GetName();
1510 expression += ":amplifierUpperBlockPart1_pos";
1511 expression += "+amplifierUpperBlockPart1S";
1512 expression += TString("_") + frames->GetName();
1513 expression += ":amplifierUpperBlockPart2_pos";
1514
1515 amplifierUpperBlockS->MakeNode(expression);
1516 amplifierUpperBlockS->ComputeBBox(); // need to compute a bounding box
1517 }
1518
1519 TGeoVolume* amplifierUpperBlockV =
1520 new TGeoVolume(TString("amplifierUpperBlockV") += TString("_") + frames->GetName(), amplifierUpperBlockS);
1521
1522 // volume medium
1523 TGeoMedium* amplifierUpperBlockV_medium = pMedFiberGlass;
1524 if (amplifierUpperBlockV_medium) {
1525 amplifierUpperBlockV->SetMedium(amplifierUpperBlockV_medium);
1526 } else
1527 Fatal("Main", "Invalid medium for amplifierUpperBlockV!");
1528
1529 // volume visual property (transparency)
1530 amplifierUpperBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1531 amplifierUpperBlockV->SetTransparency(0);
1532
1533 TGeoCombiTrans* amplifierUpperBlock_transf[1];
1534
1535 amplifierUpperBlock_transf[0] = new TGeoCombiTrans();
1536 amplifierUpperBlock_transf[0]->SetDx(0.0);
1537 amplifierUpperBlock_transf[0]->SetDy(+(YModuleSize_Station163x45 * 0.5 + backUpperEpoxideFrame_YSize)
1538 - 1.0 /*shift*/);
1539 amplifierUpperBlock_transf[0]->SetDz(-(amplifierUpperBlockPart1_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
1540
1541 frames->AddNode(amplifierUpperBlockV, 0, amplifierUpperBlock_transf[0]);
1542 //--------------------------------------------------------------------------
1543
1544 // amplifier side block -----------------------------------------------------
1545 Double_t amplifierSideBlockPartBig_XSize = 0.6; // cm
1546 Double_t amplifierSideBlockPartBig_YSize = 33.9; // cm
1547 Double_t amplifierSideBlockPartBig_ZSize = 8.41; // cm
1548
1549 Double_t amplifierSideBlockPartSmall_XSize = 0.6; // cm
1550 Double_t amplifierSideBlockPartSmall_YSize = 27.05; // cm
1551 Double_t amplifierSideBlockPartSmall_ZSize = 8.41; // cm
1552
1553 TGeoShape* amplifierSideBlockPartBigS =
1554 new TGeoBBox(TString("amplifierSideBlockPartBigS") += TString("_") + frames->GetName(),
1555 amplifierSideBlockPartBig_XSize * 0.5, amplifierSideBlockPartBig_YSize * 0.5,
1556 amplifierSideBlockPartBig_ZSize * 0.5);
1557 TGeoShape* amplifierSideBlockPartSmallS =
1558 new TGeoBBox(TString("amplifierSideBlockPartSmallS") += TString("_") + frames->GetName(),
1559 amplifierSideBlockPartSmall_XSize * 0.5, amplifierSideBlockPartSmall_YSize * 0.5,
1560 amplifierSideBlockPartSmall_ZSize * 0.5);
1561
1562 TGeoTranslation* amplifierSideBlockPartBig_pos = new TGeoTranslation();
1563 amplifierSideBlockPartBig_pos->SetName("amplifierSideBlockPartBig_pos");
1564 amplifierSideBlockPartBig_pos->SetDx(0.0);
1565 amplifierSideBlockPartBig_pos->SetDy(0.0);
1566 amplifierSideBlockPartBig_pos->SetDz(0.0);
1567 amplifierSideBlockPartBig_pos->RegisterYourself();
1568
1569 TGeoTranslation* amplifierSideBlockPartSmall_pos = new TGeoTranslation();
1570 amplifierSideBlockPartSmall_pos->SetName("amplifierSideBlockPartSmall_pos");
1571 amplifierSideBlockPartSmall_pos->SetDx(
1572 +(amplifierSideBlockPartBig_XSize * 0.5 + amplifierSideBlockPartSmall_XSize * 0.5 + 1.72));
1573 amplifierSideBlockPartSmall_pos->SetDy(+0.05);
1574 amplifierSideBlockPartSmall_pos->SetDz(0.0);
1575 amplifierSideBlockPartSmall_pos->RegisterYourself();
1576
1577 TGeoCompositeShape* amplifierSideBlockS = new TGeoCompositeShape();
1578 amplifierSideBlockS->SetName(TString("amplifierSideBlockS") += TString("_") + frames->GetName());
1579 {
1580 TString expression = "amplifierSideBlockPartBigS";
1581 expression += TString("_") + frames->GetName();
1582 expression += ":amplifierSideBlockPartBig_pos";
1583 expression += "+amplifierSideBlockPartSmallS";
1584 expression += TString("_") + frames->GetName();
1585 expression += ":amplifierSideBlockPartSmall_pos";
1586
1587 amplifierSideBlockS->MakeNode(expression);
1588 amplifierSideBlockS->ComputeBBox(); // need to compute a bounding box
1589 }
1590
1591 TGeoVolume* amplifierSideBlockV =
1592 new TGeoVolume(TString("amplifierSideBlockV") += TString("_") + frames->GetName(), amplifierSideBlockS);
1593
1594 // volume medium
1595 TGeoMedium* amplifierSideBlockV_medium = pMedFiberGlass;
1596 if (amplifierSideBlockV_medium) {
1597 amplifierSideBlockV->SetMedium(amplifierSideBlockV_medium);
1598 } else
1599 Fatal("Main", "Invalid medium for amplifierSideBlockV!");
1600
1601 // volume visual property (transparency)
1602 amplifierSideBlockV->SetLineColor(TColor::GetColor("#ccffcc"));
1603 amplifierSideBlockV->SetTransparency(0);
1604
1605 TGeoCombiTrans* amplifierSideBlock_transf[2];
1606
1607 amplifierSideBlock_transf[0] = new TGeoCombiTrans();
1608 amplifierSideBlock_transf[0]->SetDx(+86.47 /*shift*/);
1609 amplifierSideBlock_transf[0]->SetDy(-5.5);
1610 amplifierSideBlock_transf[0]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
1611
1612 amplifierSideBlock_transf[1] = new TGeoCombiTrans();
1613 amplifierSideBlock_transf[1]->RotateY(180.0);
1614 amplifierSideBlock_transf[1]->SetDx(-86.47 /*shift*/);
1615 amplifierSideBlock_transf[1]->SetDy(-5.5);
1616 amplifierSideBlock_transf[1]->SetDz(-(amplifierSideBlockPartBig_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5);
1617
1618 frames->AddNode(amplifierSideBlockV, 0, amplifierSideBlock_transf[0]);
1619 frames->AddNode(amplifierSideBlockV, 1, amplifierSideBlock_transf[1]);
1620 //--------------------------------------------------------------------------
1621
1622 // upper PCB (Printed Circuit Board) ----------------------------------------
1623 Double_t upperPcb_XSize = 177.22; // cm
1624 Double_t upperPcb_YSize = 0.3; // cm
1625 Double_t upperPcb_ZSize = 4.0; // cm
1626
1627 TGeoShape* upperPcbS = new TGeoBBox("upperPcbS", upperPcb_XSize * 0.5, upperPcb_YSize * 0.5, upperPcb_ZSize * 0.5);
1628
1629 TGeoVolume* upperPcbV = new TGeoVolume(TString("upperPcbV") += TString("_") + frames->GetName(), upperPcbS);
1630
1631 // volume medium
1632 TGeoMedium* upperPcbV_medium = pMedFiberGlass;
1633 if (upperPcbV_medium) {
1634 upperPcbV->SetMedium(upperPcbV_medium);
1635 } else
1636 Fatal("Main", "Invalid medium for upperPcbV!");
1637
1638 // volume visual property (transparency)
1639 upperPcbV->SetLineColor(TColor::GetColor("#88ff88"));
1640 upperPcbV->SetTransparency(0);
1641
1642 TGeoCombiTrans* upperPcb_transf[1];
1643
1644 upperPcb_transf[0] = new TGeoCombiTrans();
1645 upperPcb_transf[0]->SetDx(+0.1 /*shift*/);
1646 upperPcb_transf[0]->SetDy(+(upperPcb_YSize * 0.5 + 23.5 /*shift*/));
1647 upperPcb_transf[0]->SetDz(-(upperPcb_ZSize * 0.5) + ZModuleSize_Station163x45 * 0.5 - ZModuleSize_Station163x45
1648 - frontSideEpoxideFramePart_ZSize);
1649
1650 frames->AddNode(upperPcbV, 0, upperPcb_transf[0]);
1651 //--------------------------------------------------------------------------
1652
1653 // side PCB -----------------------------------------------------------------
1654 Double_t sidePcbPart_XSize = 0.3; // cm
1655 Double_t sidePcbPart_YSize = 35.05; // cm
1656 Double_t sidePcbPart_ZSize = 4.0; // cm
1657
1658 TGeoShape* sidePcbPartS = new TGeoBBox(TString("sidePcbPartS") += TString("_") + frames->GetName(),
1659 sidePcbPart_XSize * 0.5, sidePcbPart_YSize * 0.5, sidePcbPart_ZSize * 0.5);
1660
1661 TGeoTranslation* sidePcbPart_pos1 = new TGeoTranslation();
1662 sidePcbPart_pos1->SetName("sidePcbPart_pos1");
1663 sidePcbPart_pos1->SetDx(0.0);
1664 sidePcbPart_pos1->SetDy(0.0);
1665 sidePcbPart_pos1->SetDz(0.0);
1666 sidePcbPart_pos1->RegisterYourself();
1667
1668 TGeoTranslation* sidePcbPart_pos2 = new TGeoTranslation();
1669 sidePcbPart_pos2->SetName("sidePcbPart_pos2");
1670 sidePcbPart_pos2->SetDx(+(sidePcbPart_XSize + 6.1 /*shift*/));
1671 sidePcbPart_pos2->SetDy(0.0);
1672 sidePcbPart_pos2->SetDz(0.0);
1673 sidePcbPart_pos2->RegisterYourself();
1674
1675 TGeoCompositeShape* sidePcbS = new TGeoCompositeShape();
1676 sidePcbS->SetName(TString("sidePcbS") += TString("_") + frames->GetName());
1677 {
1678 TString expression = "sidePcbPartS";
1679 expression += TString("_") + frames->GetName();
1680 expression += ":sidePcbPart_pos1";
1681 expression += "+sidePcbPartS";
1682 expression += TString("_") + frames->GetName();
1683 expression += ":sidePcbPart_pos2";
1684
1685 sidePcbS->MakeNode(expression);
1686 sidePcbS->ComputeBBox(); // need to compute a bounding box
1687 }
1688
1689 TGeoVolume* sidePcbV = new TGeoVolume(TString("sidePcbV") += TString("_") + frames->GetName(), sidePcbS);
1690
1691 // volume medium
1692 TGeoMedium* sidePcbV_medium = pMedFiberGlass;
1693 if (sidePcbV_medium) {
1694 sidePcbV->SetMedium(sidePcbV_medium);
1695 } else
1696 Fatal("Main", "Invalid medium for sidePcbV!");
1697
1698 // volume visual property (transparency)
1699 sidePcbV->SetLineColor(TColor::GetColor("#88ff88"));
1700 sidePcbV->SetTransparency(0);
1701
1702 TGeoCombiTrans* sidePcb_transf[2];
1703
1704 sidePcb_transf[0] = new TGeoCombiTrans();
1705 sidePcb_transf[0]->SetDx(+(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
1706 sidePcb_transf[0]->SetDy(-6.8 /*shift*/);
1707 sidePcb_transf[0]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
1708 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
1709
1710 sidePcb_transf[1] = new TGeoCombiTrans();
1711 sidePcb_transf[1]->RotateY(180.0);
1712 sidePcb_transf[1]->SetDx(-(sidePcbPart_XSize * 0.5 + 84.1 /*shift*/));
1713 sidePcb_transf[1]->SetDy(-6.8 /*shift*/);
1714 sidePcb_transf[1]->SetDz(-(sidePcbPart_ZSize * 0.5 + alumCableSupportPart_ZSize + ZModuleSize_Station163x45 * 0.5
1715 + frontSideEpoxideFramePart_ZSize + 1.0 /*shift*/));
1716
1717 frames->AddNode(sidePcbV, 0, sidePcb_transf[0]);
1718 frames->AddNode(sidePcbV, 1, sidePcb_transf[1]);
1719 //--------------------------------------------------------------------------
1720
1721 // alum. side support -------------------------------------------------------
1722 Double_t alumSideSupport_XSize = 4.8; // cm
1723 Double_t alumSideSupport_YSize = 52.6; // cm
1724 Double_t alumSideSupport_ZSize = 0.4; // cm
1725
1726 TGeoShape* alumSideSupportS = new TGeoBBox("alumSideSupportS", alumSideSupport_XSize * 0.5,
1727 alumSideSupport_YSize * 0.5, alumSideSupport_ZSize * 0.5);
1728
1729 TGeoVolume* alumSideSupportV =
1730 new TGeoVolume(TString("alumSideSupportV") += TString("_") + frames->GetName(), alumSideSupportS);
1731
1732 // volume medium
1733 TGeoMedium* alumSideSupportV_medium = pMedAluminium;
1734 if (alumSideSupportV_medium) {
1735 alumSideSupportV->SetMedium(alumSideSupportV_medium);
1736 } else
1737 Fatal("Main", "Invalid medium for alumSideSupportV!");
1738
1739 // volume visual property (transparency)
1740 alumSideSupportV->SetLineColor(TColor::GetColor("#ffcccc"));
1741 alumSideSupportV->SetTransparency(0);
1742
1743 TGeoCombiTrans* alumSideSupport_transf[2];
1744
1745 alumSideSupport_transf[0] = new TGeoCombiTrans();
1746 alumSideSupport_transf[0]->SetDx(+(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
1747 alumSideSupport_transf[0]->SetDy(+1.8);
1748 alumSideSupport_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
1749
1750 alumSideSupport_transf[1] = new TGeoCombiTrans();
1751 alumSideSupport_transf[1]->SetDx(-(alumSideSupport_XSize * 0.5 + 88.31 /*shift*/));
1752 alumSideSupport_transf[1]->SetDy(+1.8 /*shift*/);
1753 alumSideSupport_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 - alumSideSupport_ZSize * 0.5));
1754
1755 frames->AddNode(alumSideSupportV, 0, alumSideSupport_transf[0]);
1756 frames->AddNode(alumSideSupportV, 1, alumSideSupport_transf[1]);
1757 //--------------------------------------------------------------------------
1758
1759 // bosch shape --------------------------------------------------------------
1760 Double_t boschShape_XSize = 2.25; // cm
1761 Double_t boschShape_YSize = 52.6; // cm
1762 Double_t boschShape_ZSize = 2.25; // cm
1763
1764 TGeoShape* boschShapeS =
1765 new TGeoBBox("boschShapeS", boschShape_XSize * 0.5, boschShape_YSize * 0.5, boschShape_ZSize * 0.5);
1766
1767 TGeoVolume* boschShapeV = new TGeoVolume(TString("boschShapeV") += TString("_") + frames->GetName(), boschShapeS);
1768
1769 // volume medium
1770 TGeoMedium* boschShapeV_medium = pMedAluminium;
1771 if (boschShapeV_medium) {
1772 boschShapeV->SetMedium(boschShapeV_medium);
1773 } else
1774 Fatal("Main", "Invalid medium for boschShapeV!");
1775
1776 // volume visual property (transparency)
1777 boschShapeV->SetLineColor(TColor::GetColor("#ffcccc"));
1778 boschShapeV->SetTransparency(0);
1779
1780 TGeoCombiTrans* boschShape_transf[2];
1781
1782 boschShape_transf[0] = new TGeoCombiTrans();
1783 boschShape_transf[0]->SetDx(+(boschShape_XSize * 0.5 + 90.86 /*shift*/));
1784 boschShape_transf[0]->SetDy(+1.8 /*shift*/);
1785 boschShape_transf[0]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
1786
1787 boschShape_transf[1] = new TGeoCombiTrans();
1788 boschShape_transf[1]->SetDx(-(boschShape_XSize * 0.5 + 90.86 /*shift*/));
1789 boschShape_transf[1]->SetDy(+1.8 /*shift*/);
1790 boschShape_transf[1]->SetDz(+(ZModuleSize_Station163x45 * 0.5 + boschShape_ZSize * 0.5));
1791
1792 frames->AddNode(boschShapeV, 0, boschShape_transf[0]);
1793 frames->AddNode(boschShapeV, 1, boschShape_transf[1]);
1794 //--------------------------------------------------------------------------
1795
1796 // lower fiberglass block ---------------------------------------------------------
1797 Double_t lowerFiberGlassBlock_XSize = 165.1; // cm
1798 Double_t lowerFiberGlassBlock_YSize = 1.75; // cm
1799 Double_t lowerFiberGlassBlock_ZSize = 0.9; // cm
1800
1801 Double_t lowerFiberGlassBlockArch_Rmin = 4.0;
1802 Double_t lowerFiberGlassBlockArch_Rmax = 5.75;
1803 Double_t lowerFiberGlassBlockArch_ZSize = lowerFiberGlassBlock_ZSize;
1804
1805 TGeoShape* lowerFiberGlassBlockHalfS =
1806 new TGeoBBox(TString("lowerFiberGlassBlockHalfS") += TString("_") + frames->GetName(),
1807 (lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5,
1808 lowerFiberGlassBlock_YSize * 0.5, lowerFiberGlassBlock_ZSize * 0.5);
1809 TGeoShape* lowerFiberGlassBlockArchS = new TGeoTubeSeg(
1810 TString("lowerFiberGlassBlockArchS") += TString("_") + frames->GetName(), lowerFiberGlassBlockArch_Rmin,
1811 lowerFiberGlassBlockArch_Rmax, lowerFiberGlassBlockArch_ZSize * 0.5, 0.0, 180.0);
1812
1813 TGeoTranslation* lowerFiberGlassBlockHalf_pos1 = new TGeoTranslation();
1814 lowerFiberGlassBlockHalf_pos1->SetName("lowerFiberGlassBlockHalf_pos1");
1815 lowerFiberGlassBlockHalf_pos1->SetDx(
1816 +((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
1817 lowerFiberGlassBlockHalf_pos1->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
1818 lowerFiberGlassBlockHalf_pos1->SetDz(0.0);
1819 lowerFiberGlassBlockHalf_pos1->RegisterYourself();
1820
1821 TGeoTranslation* lowerFiberGlassBlockHalf_pos2 = new TGeoTranslation();
1822 lowerFiberGlassBlockHalf_pos2->SetName("lowerFiberGlassBlockHalf_pos2");
1823 lowerFiberGlassBlockHalf_pos2->SetDx(
1824 -((lowerFiberGlassBlock_XSize * 0.5 - lowerFiberGlassBlockArch_Rmin) * 0.5 + lowerFiberGlassBlockArch_Rmin));
1825 lowerFiberGlassBlockHalf_pos2->SetDy(-(lowerFiberGlassBlock_YSize * 0.5));
1826 lowerFiberGlassBlockHalf_pos2->SetDz(0.0);
1827 lowerFiberGlassBlockHalf_pos2->RegisterYourself();
1828
1829 TGeoTranslation* lowerFiberGlassBlockArch_pos = new TGeoTranslation();
1830 lowerFiberGlassBlockArch_pos->SetName("lowerFiberGlassBlockArch_pos");
1831 lowerFiberGlassBlockArch_pos->SetDx(0.0);
1832 lowerFiberGlassBlockArch_pos->SetDy(0.0);
1833 lowerFiberGlassBlockArch_pos->SetDz(0.0);
1834 lowerFiberGlassBlockArch_pos->RegisterYourself();
1835
1836 TGeoCompositeShape* lowerFiberGlassBlockS = new TGeoCompositeShape();
1837 lowerFiberGlassBlockS->SetName(TString("lowerFiberGlassBlockS") += TString("_") + frames->GetName());
1838 {
1839 TString expression = "lowerFiberGlassBlockHalfS";
1840 expression += TString("_") + frames->GetName();
1841 expression += ":lowerFiberGlassBlockHalf_pos1";
1842 expression += "+lowerFiberGlassBlockHalfS";
1843 expression += TString("_") + frames->GetName();
1844 expression += ":lowerFiberGlassBlockHalf_pos2";
1845 expression += "+lowerFiberGlassBlockArchS";
1846 expression += TString("_") + frames->GetName();
1847 expression += ":lowerFiberGlassBlockArch_pos";
1848
1849 lowerFiberGlassBlockS->MakeNode(expression);
1850 lowerFiberGlassBlockS->ComputeBBox(); // need to compute a bounding box
1851 }
1852
1853 TGeoVolume* lowerFiberGlassBlockV =
1854 new TGeoVolume(TString("lowerFiberGlassBlockV") += TString("_") + frames->GetName(), lowerFiberGlassBlockS);
1855
1856 // volume medium
1857 TGeoMedium* lowerFiberGlassBlockV_medium = pMedFiberGlass;
1858 if (lowerFiberGlassBlockV_medium) {
1859 lowerFiberGlassBlockV->SetMedium(lowerFiberGlassBlockV_medium);
1860 } else
1861 Fatal("Main", "Invalid medium for lowerFiberGlassBlockV!");
1862
1863 // volume visual property (transparency)
1864 lowerFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
1865 lowerFiberGlassBlockV->SetTransparency(0);
1866
1867 TGeoCombiTrans* lowerFiberGlassBlock_transf[1];
1868
1869 lowerFiberGlassBlock_transf[0] = new TGeoCombiTrans();
1870 lowerFiberGlassBlock_transf[0]->SetDx(0.0);
1871 lowerFiberGlassBlock_transf[0]->SetDy(-(YModuleSize_Station163x45 * 0.5));
1872 lowerFiberGlassBlock_transf[0]->SetDz(0.0);
1873
1874 frames->AddNode(lowerFiberGlassBlockV, 0, lowerFiberGlassBlock_transf[0]);
1875 //--------------------------------------------------------------------------
1876
1877 // side fiberglass block ----------------------------------------------------
1878 Double_t sideFiberGlassBlockPart_XSize = 1.45; // cm
1879 Double_t sideFiberGlassBlockPart_YSize = 49.4; // cm
1880 Double_t sideFiberGlassBlockPart_ZSize = 0.89; // cm
1881
1882 TGeoShape* sideFiberGlassBlockS =
1883 new TGeoBBox("sideFiberGlassBlockS", sideFiberGlassBlockPart_XSize * 0.5, sideFiberGlassBlockPart_YSize * 0.5,
1884 sideFiberGlassBlockPart_ZSize * 0.5);
1885
1886 TGeoVolume* sideFiberGlassBlockV =
1887 new TGeoVolume(TString("sideFiberGlassBlockV") += TString("_") + frames->GetName(), sideFiberGlassBlockS);
1888
1889 // volume medium
1890 TGeoMedium* sideFiberGlassBlockV_medium = pMedFiberGlass;
1891 if (sideFiberGlassBlockV_medium) {
1892 sideFiberGlassBlockV->SetMedium(sideFiberGlassBlockV_medium);
1893 } else
1894 Fatal("Main", "Invalid medium for sideFiberGlassBlockV!");
1895
1896 // volume visual property (transparency)
1897 sideFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
1898 sideFiberGlassBlockV->SetTransparency(0);
1899
1900 TGeoCombiTrans* sideFiberGlassBlock_transf[2];
1901
1902 sideFiberGlassBlock_transf[0] = new TGeoCombiTrans();
1903 sideFiberGlassBlock_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
1904 sideFiberGlassBlock_transf[0]->SetDy(+0.45 /*shift*/);
1905 sideFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
1906
1907 sideFiberGlassBlock_transf[1] = new TGeoCombiTrans();
1908 sideFiberGlassBlock_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideFiberGlassBlockPart_XSize * 0.5));
1909 sideFiberGlassBlock_transf[1]->SetDy(+0.45 /*shift*/);
1910 sideFiberGlassBlock_transf[1]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
1911
1912 frames->AddNode(sideFiberGlassBlockV, 0, sideFiberGlassBlock_transf[0]);
1913 frames->AddNode(sideFiberGlassBlockV, 1, sideFiberGlassBlock_transf[1]);
1914 //--------------------------------------------------------------------------
1915
1916 // upper fiberglass block ---------------------------------------------------
1917 Double_t upperFiberGlassBlock_XSize = 165.1; // cm
1918 Double_t upperFiberGlassBlock_YSize = 1.45; // cm
1919 Double_t upperFiberGlassBlock_ZSize = 0.89; // cm
1920
1921 TGeoShape* upperFiberGlassBlockS = new TGeoBBox("upperFiberGlassBlockS", upperFiberGlassBlock_XSize * 0.5,
1922 upperFiberGlassBlock_YSize * 0.5, upperFiberGlassBlock_ZSize * 0.5);
1923
1924 TGeoVolume* upperFiberGlassBlockV =
1925 new TGeoVolume(TString("upperFiberGlassBlockV") += TString("_") + frames->GetName(), upperFiberGlassBlockS);
1926
1927 // volume medium
1928 TGeoMedium* upperFiberGlassBlockV_medium = pMedFiberGlass;
1929 if (upperFiberGlassBlockV_medium) {
1930 upperFiberGlassBlockV->SetMedium(upperFiberGlassBlockV_medium);
1931 } else
1932 Fatal("Main", "Invalid medium for upperFiberGlassBlockV!");
1933
1934 // volume visual property (transparency)
1935 upperFiberGlassBlockV->SetLineColor(TColor::GetColor("#88ff88"));
1936 upperFiberGlassBlockV->SetTransparency(0);
1937
1938 TGeoCombiTrans* upperFiberGlassBlock_transf[1];
1939
1940 upperFiberGlassBlock_transf[0] = new TGeoCombiTrans();
1941 upperFiberGlassBlock_transf[0]->SetDx(0.0);
1942 upperFiberGlassBlock_transf[0]->SetDy(
1943 +(sideFiberGlassBlockPart_YSize * 0.5 - upperFiberGlassBlock_YSize * 0.5 + 0.45 /*shift*/));
1944 upperFiberGlassBlock_transf[0]->SetDz(+0.005 /*shift for fitting-elements as a plane*/);
1945
1946 frames->AddNode(upperFiberGlassBlockV, 0, upperFiberGlassBlock_transf[0]);
1947 //--------------------------------------------------------------------------
1948
1949 // brass layer --------------------------------------------------------------
1950 Double_t upperBrasslayer_XSize = 165.1; // cm
1951 Double_t upperBrasslayer_YSize = 1.45; // cm
1952 Double_t upperBrasslayer_ZSize = 0.005; // cm
1953
1954 Double_t sideBrasslayer_XSize = 1.45; // cm
1955 Double_t sideBrasslayer_YSize = 49.4; // cm
1956 Double_t sideBrasslayer_ZSize = 0.005; // cm
1957
1958 TGeoShape* upperBrasslayerS = new TGeoBBox("upperBrasslayerS", upperBrasslayer_XSize * 0.5,
1959 upperBrasslayer_YSize * 0.5, upperBrasslayer_ZSize * 0.5);
1960 TGeoShape* sideBrasslayerS = new TGeoBBox("sideBrasslayerS", sideBrasslayer_XSize * 0.5, sideBrasslayer_YSize * 0.5,
1961 sideBrasslayer_ZSize * 0.5);
1962
1963 TGeoVolume* upperBrasslayerV =
1964 new TGeoVolume(TString("upperBrasslayerV") += TString("_") + frames->GetName(), upperBrasslayerS);
1965 TGeoVolume* sideBrasslayerV =
1966 new TGeoVolume(TString("sideBrasslayerV") += TString("_") + frames->GetName(), sideBrasslayerS);
1967
1968 // volume medium
1969 TGeoMedium* upperBrasslayerV_medium = pMedBrass;
1970 if (upperBrasslayerV_medium) {
1971 upperBrasslayerV->SetMedium(upperBrasslayerV_medium);
1972 sideBrasslayerV->SetMedium(upperBrasslayerV_medium);
1973 } else
1974 Fatal("Main", "Invalid medium for upperBrasslayerV_medium!");
1975
1976 // volume visual property (transparency)
1977 upperBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
1978 upperBrasslayerV->SetTransparency(0);
1979 sideBrasslayerV->SetLineColor(TColor::GetColor("#f07422"));
1980 sideBrasslayerV->SetTransparency(0);
1981
1982 TGeoCombiTrans* upperBrasslayer_transf[1];
1983
1984 upperBrasslayer_transf[0] = new TGeoCombiTrans();
1985 upperBrasslayer_transf[0]->SetDx(0.0);
1986 upperBrasslayer_transf[0]->SetDy(
1987 +(sideFiberGlassBlockPart_YSize * 0.5 - upperBrasslayer_YSize * 0.5 + 0.45 /*shift*/));
1988 upperBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
1989
1990 TGeoCombiTrans* sideBrasslayer_transf[2];
1991
1992 sideBrasslayer_transf[0] = new TGeoCombiTrans();
1993 sideBrasslayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
1994 sideBrasslayer_transf[0]->SetDy(+0.45 /*shift*/);
1995 sideBrasslayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
1996
1997 sideBrasslayer_transf[1] = new TGeoCombiTrans();
1998 sideBrasslayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideBrasslayer_XSize * 0.5));
1999 sideBrasslayer_transf[1]->SetDy(+0.45 /*shift*/);
2000 sideBrasslayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideBrasslayer_ZSize * 0.5 + 0.005 /*shift*/);
2001
2002 frames->AddNode(upperBrasslayerV, 0, upperBrasslayer_transf[0]);
2003
2004 frames->AddNode(sideBrasslayerV, 0, sideBrasslayer_transf[0]);
2005 frames->AddNode(sideBrasslayerV, 1, sideBrasslayer_transf[1]);
2006 //--------------------------------------------------------------------------
2007
2008 // steel layer --------------------------------------------------------------
2009 Double_t upperSteellayer_XSize = 165.1; // cm
2010 Double_t upperSteellayer_YSize = 1.45; // cm
2011 Double_t upperSteellayer_ZSize = 0.005; // cm
2012
2013 Double_t sideSteellayer_XSize = 1.45; // cm
2014 Double_t sideSteellayer_YSize = 49.4; // cm
2015 Double_t sideSteellayer_ZSize = 0.005; // cm
2016
2017 TGeoShape* upperSteellayerS = new TGeoBBox("upperSteellayerS", upperSteellayer_XSize * 0.5,
2018 upperSteellayer_YSize * 0.5, upperSteellayer_ZSize * 0.5);
2019 TGeoShape* sideSteellayerS = new TGeoBBox("sideSteellayerS", sideSteellayer_XSize * 0.5, sideSteellayer_YSize * 0.5,
2020 sideSteellayer_ZSize * 0.5);
2021
2022 TGeoVolume* upperSteellayerV =
2023 new TGeoVolume(TString("upperSteellayerV") += TString("_") + frames->GetName(), upperSteellayerS);
2024 TGeoVolume* sideSteellayerV =
2025 new TGeoVolume(TString("sideSteellayerV") += TString("_") + frames->GetName(), sideSteellayerS);
2026
2027 // volume medium
2028 TGeoMedium* upperSteellayerV_medium = pMedSteel;
2029 if (upperSteellayerV_medium) {
2030 upperSteellayerV->SetMedium(upperSteellayerV_medium);
2031 sideSteellayerV->SetMedium(upperSteellayerV_medium);
2032 } else
2033 Fatal("Main", "Invalid medium for upperSteellayerV_medium!");
2034
2035 // volume visual property (transparency)
2036 upperSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
2037 upperSteellayerV->SetTransparency(0);
2038 sideSteellayerV->SetLineColor(TColor::GetColor("#42aaff"));
2039 sideSteellayerV->SetTransparency(0);
2040
2041 TGeoCombiTrans* upperSteellayer_transf[1];
2042
2043 upperSteellayer_transf[0] = new TGeoCombiTrans();
2044 upperSteellayer_transf[0]->SetDx(0.0);
2045 upperSteellayer_transf[0]->SetDy(
2046 +(sideFiberGlassBlockPart_YSize * 0.5 - upperSteellayer_YSize * 0.5 + 0.45 /*shift*/));
2047 upperSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + upperSteellayer_ZSize * 0.5 + 0.005 /*shift*/);
2048
2049 TGeoCombiTrans* sideSteellayer_transf[2];
2050
2051 sideSteellayer_transf[0] = new TGeoCombiTrans();
2052 sideSteellayer_transf[0]->SetDx(+(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
2053 sideSteellayer_transf[0]->SetDy(+0.45 /*shift*/);
2054 sideSteellayer_transf[0]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
2055
2056 sideSteellayer_transf[1] = new TGeoCombiTrans();
2057 sideSteellayer_transf[1]->SetDx(-(lowerFiberGlassBlock_XSize * 0.5 + sideSteellayer_XSize * 0.5));
2058 sideSteellayer_transf[1]->SetDy(+0.45 /*shift*/);
2059 sideSteellayer_transf[1]->SetDz(-ZModuleSize_Station163x45 * 0.5 + sideSteellayer_ZSize * 0.5);
2060
2061 frames->AddNode(upperSteellayerV, 0, upperSteellayer_transf[0]);
2062
2063 frames->AddNode(sideSteellayerV, 0, sideSteellayer_transf[0]);
2064 frames->AddNode(sideSteellayerV, 1, sideSteellayer_transf[1]);
2065 //--------------------------------------------------------------------------
2066
2067 return frames;
2068}
bool Bool_t
int Int_t
double Double_t
constexpr Bool_t kTRUE
void Fatal(const char *location, const char *msgfmt,...)
R__EXTERN TGeoManager * gGeoManager
#define gROOT
R__EXTERN TRandom * gRandom
R__EXTERN TSystem * gSystem
static Int_t GetColor(const char *hexcolor)
void Close(Option_t *option="") override
void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE) override
void SetDz(Double_t dz) override
void RotateY(Double_t angle) override
void SetDy(Double_t dy) override
void SetDx(Double_t dx) override
void RotateX(Double_t angle) override
void SetTranslation(const TGeoTranslation &tr)
void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE) override
void ComputeBBox() override
void MakeNode(const char *expression)
virtual void RegisterYourself()
const char * GetName() const override
void SetDy(Double_t dy) override
void SetDz(Double_t dz) override
void SetDx(Double_t dx) override
void SetVisContainers(Bool_t flag=kTRUE) override
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
void Draw(Option_t *option="") override
void SetTransparency(Char_t transparency=0)
virtual void SetMedium(TGeoMedium *medium)
void SetLineColor(Color_t lcolor) override
const char * GetName() const override
virtual void SetName(const char *name)
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
static TString Itoa(Int_t value, Int_t base)
const Double_t 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
TGeoVolume * CreateLayersForModule_Station163x45(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 * CreateFrameForModule_Station66x41(TString frame_name, Double_t dx, Double_t dy, Double_t dz)