BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
create_rootgeom_GEMS_RunSpring2017.C
Go to the documentation of this file.
1/*
2 * Baranov D.
3 * 02.03.2021 (Updated): radius of hole in active zone (4.0 -> 6.0 cm)
4 * Use this macro to create ROOT geometry for the RunSpring2017 (RUN-6) GEM configuration
5 */
6//---------------------------
7#include "TFile.h"
8#include "TGeoBBox.h"
9#include "TGeoManager.h"
10#include "TGeoShape.h"
11#include "TMath.h"
12#include "TRandom.h"
13#include "TString.h"
14
15// Set Parameters of GEMS -------------------------------------------------------
16const Int_t NStations = 6; // stations in the detector
17const Int_t NMaxModules = 2; // max. number of modules in a station
18
19//(X-Y-Z)Positions of stations (sensitive volumes)
20const Double_t XStationPositions[NStations] = {-1.5, -1.5, -1.5, +0.0, +0.0, +0.0};
21const Double_t YStationPositions[NStations] = {+0.0 - 4.5, +0.0 - 4.5, +0.0 - 4.5, +0.0 - 4.5, -2.4 - 4.5, -2.4 - 4.5};
22const Double_t ZStationPositions[NStations] = {32.0 + 0.7, 63.8 + 0.7, 95.8 + 0.7,
23 127.8 + 0.7, 159.6 + 1.5, 191.6 + 1.5};
24
25//(X-Y-Z)Shifts of modules in each station
27 {0.0},
28 {0.0},
29 {27.7, -34.7}, // centers of modules!!!!
30 {163.2 * 0.25, -163.2 * 0.25},
31 {163.2 * 0.25, -163.2 * 0.25}};
32const Double_t YModuleShifts[NStations][NMaxModules] = {{0.0}, {0.0}, {0.0}, {0.0, 0.2}, {0.0, 0.0}, {0.0, 0.0}};
34 {0.0}, // station 0 (66x41)
35 {0.0}, // station 1
36 {0.0}, // station 2
37 {0.0, 2.5}, // station 3 (2 modules of 66x41)
38 {0.0, 0.0}, // station 4 (163x45): module0 + module1
39 {0.0, 0.0} // station 5 (163x45): module0 + module1
40};
41
42// GEM plane sizes (66x41 type) -------------------------------------------------
46
50//------------------------------------------------------------------------------
51
52// GEM plane sizes (163x45 type) ------------------------------------------------
56
60//------------------------------------------------------------------------------
61
62// GeoManager
64
65// media
71
72class FairGeoMedia;
73class FairGeoBuilder;
74
75TGeoVolume* CreateStation(TString station_name);
76TGeoVolume* CreateModule_Station66x41(TString module_name, Double_t xsize, Double_t ysize, Double_t zsize);
79 Double_t xsize,
80 Double_t ysize,
81 Double_t zsize,
82 Double_t hole_radius);
84 Double_t dx,
85 Double_t dy,
86 Double_t dz,
87 Double_t hole_radius);
88
89void DefineRequiredMedia(FairGeoMedia* geoMedia, FairGeoBuilder* geoBuild)
90{
91
92 // air medium
93 FairGeoMedium* mAir = geoMedia->getMedium("air");
94 if (!mAir)
95 Fatal("Main", "FairMedium air not found");
96 geoBuild->createMedium(mAir);
97 pMedAir = gGeoManager->GetMedium("air");
98 if (!pMedAir)
99 Fatal("Main", "Medium air not found");
100
101 // carbon medium
102 FairGeoMedium* mCarbon = geoMedia->getMedium("carbon");
103 if (!mCarbon)
104 Fatal("Main", "FairMedium carbon not found");
105 geoBuild->createMedium(mCarbon);
106 pMedCarbon = gGeoManager->GetMedium("carbon");
107 if (!pMedCarbon)
108 Fatal("Main", "Medium carbon not found");
109
110 // fiberglass medium
111 FairGeoMedium* mFiberGlass = geoMedia->getMedium("fiberglass");
112 if (!mFiberGlass)
113 Fatal("Main", "FairMedium fiberglass not found");
114 geoBuild->createMedium(mFiberGlass);
115 pMedFiberGlass = gGeoManager->GetMedium("fiberglass");
116 if (!pMedFiberGlass)
117 Fatal("Main", "Medium fiberglass not found");
118
119 // arco27020 medium
120 FairGeoMedium* mArCO27030 = geoMedia->getMedium("arco27030");
121 if (!mArCO27030)
122 Fatal("Main", "FairMedium arco27030 not found");
123 geoBuild->createMedium(mArCO27030);
124 pMedArCO27030 = gGeoManager->GetMedium("arco27030");
125 if (!pMedArCO27030)
126 Fatal("Main", "Medium arco27030 not found");
127}
128
130{
131
132 // ---- set working directory --------------------------------------------
133 TString gPath = gSystem->Getenv("VMCWORKDIR");
134
135 // ------- Geometry file name (output) ----------------------------------
136 const TString geoDetectorName = "GEMS";
137 const TString geoDetectorVersion = "RunSpring2017";
138 const TString geoFileName = gPath + "/geometry/" + geoDetectorName + "_" + geoDetectorVersion + ".root";
139
140 // ---- global geometry parameters ---------------------------------------
141 FairGeoLoader* geoLoad = new FairGeoLoader("TGeo", "FairGeoLoader");
142 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
143
144 // ------- Load media from media file ----------------------------------
145 TString medFile = gPath + "/geometry/media.geo";
146 geoFace->setMediaFile(medFile);
147 geoFace->readMedia();
148 FairGeoMedia* geoMedia = geoFace->getMedia();
149 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
150
151 DefineRequiredMedia(geoMedia, geoBuild);
152 // -------------------------------------------------------------------------
153
154 // -------------- Create geometry and top volume -------------------------
155 gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
156 gGeoMan->SetName(geoDetectorName + "_geom");
157 TGeoVolume* top = new TGeoVolumeAssembly("TOP");
158 top->SetMedium(pMedAir);
159 gGeoMan->SetTopVolume(top);
160 // gGeoMan->SetTopVisible(1);
161 // --------------------------------------------------------------------------
162
163 // Define TOP Geometry
164 TGeoVolume* GEMS = new TGeoVolumeAssembly(geoDetectorName);
165 GEMS->SetMedium(pMedAir);
166
167 // station 0 (small GEM)
168 if (1) {
169 Int_t stationNum = 0; // station number
170
171 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
172 TGeoVolume* module0 =
173 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
177
178 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
179 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
180 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
181
182 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
183 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
184 ZStationPositions[stationNum]);
185
186 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
187 station->AddNode(frame0, 0, new TGeoCombiTrans(*module0_transform)); // frame
188
189 GEMS->AddNode(station, 0, station_transform);
190 }
191
192 // station 1 (small GEM)
193 if (1) {
194 Int_t stationNum = 1; // station number
195
196 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
197 TGeoVolume* module0 =
198 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
202
203 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
204 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
205 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
206
207 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
208 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
209 ZStationPositions[stationNum]);
210
211 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
212 station->AddNode(frame0, 0, new TGeoCombiTrans(*module0_transform)); // frame
213
214 GEMS->AddNode(station, 0, station_transform);
215 }
216
217 // station 2 (small GEM)
218 if (1) {
219 Int_t stationNum = 2; // station number
220
221 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
222 TGeoVolume* module0 =
223 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
227
228 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
229 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
230 ZModuleShifts[stationNum][0] + ZModuleSize_Station66x41 * 0.5);
231
232 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
233 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
234 ZStationPositions[stationNum]);
235
236 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
237 station->AddNode(frame0, 0, new TGeoCombiTrans(*module0_transform)); // frame
238
239 GEMS->AddNode(station, 0, station_transform);
240 }
241
242 // station 3 (two 66x41 modules. The first one is extended for 0.2 cm)
243 if (1) {
244 Int_t stationNum = 3; // station number
245
246 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
247 TGeoVolume* module0 =
248 CreateModule_Station66x41(TString("Sensor_module0_") + station->GetName(), XModuleSize_Station66x41,
249 YModuleSize_Station66x41, ZModuleSize_Station66x41 + 0.2); // extended module
250 TGeoVolume* module1 =
251 CreateModule_Station66x41(TString("Sensor_module1_") + station->GetName(), XModuleSize_Station66x41,
253 TGeoVolume* frame0 =
258
259 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
260 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
261 ZModuleShifts[stationNum][0]
262 + (ZModuleSize_Station66x41 + 0.2) * 0.5); // extended frame
263
264 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
265 module1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
266 ZModuleShifts[stationNum][1] + ZModuleSize_Station66x41 * 0.5);
267
268 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
269 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
270 ZStationPositions[stationNum]);
271
272 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
273 station->AddNode(module1, 0, new TGeoCombiTrans(*module1_transform)); // module
274
275 station->AddNode(frame0, 0, new TGeoCombiTrans(*module0_transform)); // frame
276 station->AddNode(frame1, 0, new TGeoCombiTrans(*module1_transform)); // frame
277
278 GEMS->AddNode(station, 0, station_transform);
279 }
280
281 // station 4 (big 163x45 GEM consisting two modules)
282 if (1) {
283 Int_t stationNum = 4; // station number
284
285 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
286 TGeoVolume* module0 =
289 TGeoVolume* module1 =
292 TGeoVolume* frame0 =
295 TGeoVolume* frame1 =
298
299 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
300 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
301 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
302
303 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
304 module1_transform->ReflectX(true);
305 module1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
306 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
307
308 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
309 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
310 ZStationPositions[stationNum]);
311
312 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
313 station->AddNode(module1, 0, new TGeoCombiTrans(*module1_transform)); // module
314
315 station->AddNode(frame0, 0, new TGeoCombiTrans(*module0_transform)); // frame
316 station->AddNode(frame1, 0, new TGeoCombiTrans(*module1_transform)); // frame
317
318 GEMS->AddNode(station, 0, station_transform);
319 }
320
321 // station 5 (big 163x45 GEM consisting two modules)
322 if (1) {
323 Int_t stationNum = 5; // station number
324
325 TGeoVolume* station = CreateStation(TString("station") + TString::Itoa(stationNum, 10));
326 TGeoVolume* module0 =
329 TGeoVolume* module1 =
332 TGeoVolume* frame0 =
335 TGeoVolume* frame1 =
338
339 TGeoCombiTrans* module0_transform = new TGeoCombiTrans();
340 module0_transform->SetTranslation(XModuleShifts[stationNum][0], YModuleShifts[stationNum][0],
341 ZModuleShifts[stationNum][0] + ZModuleSize_Station163x45 * 0.5);
342
343 TGeoCombiTrans* module1_transform = new TGeoCombiTrans();
344 module1_transform->ReflectX(true);
345 module1_transform->SetTranslation(XModuleShifts[stationNum][1], YModuleShifts[stationNum][1],
346 ZModuleShifts[stationNum][1] + ZModuleSize_Station163x45 * 0.5);
347
348 TGeoCombiTrans* station_transform = new TGeoCombiTrans();
349 station_transform->SetTranslation(XStationPositions[stationNum], YStationPositions[stationNum],
350 ZStationPositions[stationNum]);
351
352 station->AddNode(module0, 0, new TGeoCombiTrans(*module0_transform)); // module
353 station->AddNode(module1, 0, new TGeoCombiTrans(*module1_transform)); // module
354
355 station->AddNode(frame0, 0, new TGeoCombiTrans(*module0_transform)); // frame
356 station->AddNode(frame1, 0, new TGeoCombiTrans(*module1_transform)); // frame
357
358 GEMS->AddNode(station, 0, station_transform);
359 }
360
361 top->AddNode(GEMS, 0);
363
364 // --------------- Finish -----------------------------------------------
365 gGeoMan->CloseGeometry();
366 gGeoMan->CheckOverlaps(0.0001);
367 gGeoMan->PrintOverlaps();
368 gGeoMan->Test();
369 // gGeoMan->RestoreMasterVolume();
370
371 TFile* geoFile = new TFile(geoFileName, "RECREATE");
372 top->Write();
373 geoFile->Close();
374 top->Draw("ogl");
375}
376//------------------------------------------------------------------------------
377
379{
380
381 TGeoVolume* stationA = new TGeoVolumeAssembly(station_name);
382 stationA->SetMedium(pMedAir);
383
384 return stationA;
385}
386
388{
389
390 // module shape
391 TGeoShape* moduleS = new TGeoBBox("moduleS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
392
393 // module volume
394 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
395
396 // medium
397 if (pMedArCO27030)
398 moduleV->SetMedium(pMedArCO27030);
399 else
400 Fatal("Main", "Invalid medium for sensitive modules!");
401
402 // visual parameters
403 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
404 moduleV->SetTransparency(20);
405
406 return moduleV;
407}
408
410{
411
412 // frame shapes
413 TGeoShape* vertical_frameS =
414 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station66x41 * 0.5 + dy, dz * 0.5);
415 TGeoShape* horizontal_frameS =
416 new TGeoBBox("horizontal_frameS", XModuleSize_Station66x41 * 0.5, dy * 0.5, dz * 0.5);
417
418 // frame volumes
419 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
420 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
421 TGeoVolume* horizontal_frameV = new TGeoVolume(frame_name + "_horizontal_frameV", horizontal_frameS);
422
423 // media
424 TGeoMedium* frame_medium = pMedCarbon; // set medium
425 if (pMedCarbon) {
426 vertical_frameV->SetMedium(frame_medium);
427 horizontal_frameV->SetMedium(frame_medium);
428 } else
429 Fatal("Main", "Invalid medium for frames!");
430 if (pMedAir) {
431 composite_frameV->SetMedium(pMedAir);
432 } else
433 Fatal("Main", "Invalid medium for frames!");
434
435 // visual parameters
436 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
437 horizontal_frameV->SetLineColor(TColor::GetColor("#9999ff"));
438
439 // frame part positions in the frame
440 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
441 left_vertical_frame_position->SetTranslation(XModuleSize_Station66x41 * 0.5 + dXFrame_Station66x41 * 0.5, 0.0, 0.0);
442
443 TGeoCombiTrans* right_vertical_frame_position = new TGeoCombiTrans();
444 right_vertical_frame_position->SetTranslation(-XModuleSize_Station66x41 * 0.5 - dXFrame_Station66x41 * 0.5, 0.0,
445 0.0);
446
447 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
448 bottom_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station66x41 * 0.5 + dYFrame_Station66x41 * 0.5,
449 0.0);
450
451 TGeoCombiTrans* lower_horizontal_frame_position = new TGeoCombiTrans();
452 lower_horizontal_frame_position->SetTranslation(0.0, -YModuleSize_Station66x41 * 0.5 - dYFrame_Station66x41 * 0.5,
453 0.0);
454
455 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
456 composite_frameV->AddNode(vertical_frameV, 1, right_vertical_frame_position);
457 composite_frameV->AddNode(horizontal_frameV, 0, bottom_horizontal_frame_position);
458 composite_frameV->AddNode(horizontal_frameV, 1, lower_horizontal_frame_position);
459
460 return composite_frameV;
461}
462
464 Double_t xsize,
465 Double_t ysize,
466 Double_t zsize,
467 Double_t hole_radius)
468{
469
470 // module shapes
471 TGeoShape* module_partS = new TGeoBBox("module_partS", xsize * 0.5, ysize * 0.5, zsize * 0.5);
472 TGeoShape* holeS = new TGeoTube("holeS", 0.0, hole_radius, zsize * 0.5 + 0.01);
473
474 gRandom->SetSeed(0);
475 Int_t uniqueId = gRandom->Integer(10000);
476 TGeoTranslation* hole_module_trans = new TGeoTranslation(
477 TString("hole_module_trans_") + TString::Itoa(uniqueId, 10), -xsize * 0.5, -ysize * 0.5, 0.0);
478
479 hole_module_trans->RegisterYourself();
480
481 TString bool_expression_module = TString(module_partS->GetName()) + TString(" - ") + TString(holeS->GetName())
482 + TString(":") + TString(hole_module_trans->GetName());
483 TGeoCompositeShape* moduleS = new TGeoCompositeShape(bool_expression_module);
484
485 // module volume
486 TGeoVolume* moduleV = new TGeoVolume(module_name, moduleS);
487
488 // medium
489 if (pMedArCO27030)
490 moduleV->SetMedium(pMedArCO27030);
491 else
492 Fatal("Main", "Invalid medium for sensitive modules!");
493
494 // visual parameters
495 moduleV->SetLineColor(TColor::GetColor("#ff47ca"));
496 moduleV->SetTransparency(20);
497
498 return moduleV;
499}
500
502 Double_t dx,
503 Double_t dy,
504 Double_t dz,
505 Double_t hole_radius)
506{
507
508 // frame shapes
509 TGeoShape* vertical_frameS =
510 new TGeoBBox("vertical_frameS", dx * 0.5, YModuleSize_Station163x45 * 0.5 + dy, dz * 0.5);
511 TGeoShape* horizontal_upper_frameS =
512 new TGeoBBox("horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5, dy * 0.5, dz * 0.5);
513 TGeoShape* horizontal_bottom_frameS = new TGeoBBox(
514 "horizontal_upper_frameS", XModuleSize_Station163x45 * 0.5 - hole_radius * 0.5, dy * 0.5, dz * 0.5);
515
516 // frame volumes
517 TGeoVolume* composite_frameV = new TGeoVolumeAssembly(frame_name);
518 TGeoVolume* vertical_frameV = new TGeoVolume(frame_name + "_vertical_frameV", vertical_frameS);
519 TGeoVolume* horizontal_upper_frameV =
520 new TGeoVolume(frame_name + "_horizontal_upper_frameV", horizontal_upper_frameS);
521 TGeoVolume* horizontal_bottom_frameV =
522 new TGeoVolume(frame_name + "_horizontal_bottom_frameV", horizontal_bottom_frameS);
523
524 // media
525 TGeoMedium* frame_medium = pMedCarbon; // set medium
526 if (pMedCarbon) {
527 vertical_frameV->SetMedium(frame_medium);
528 horizontal_upper_frameV->SetMedium(frame_medium);
529 horizontal_bottom_frameV->SetMedium(frame_medium);
530 } else
531 Fatal("Main", "Invalid medium for frames!");
532 if (pMedAir) {
533 composite_frameV->SetMedium(pMedAir);
534 } else
535 Fatal("Main", "Invalid medium for frames!");
536
537 // visual parameters
538 vertical_frameV->SetLineColor(TColor::GetColor("#9999ff"));
539 horizontal_upper_frameV->SetLineColor(TColor::GetColor("#9999ff"));
540 horizontal_bottom_frameV->SetLineColor(TColor::GetColor("#9999ff"));
541
542 // frame part positions in the frame
543 TGeoCombiTrans* left_vertical_frame_position = new TGeoCombiTrans();
544 left_vertical_frame_position->SetTranslation(XModuleSize_Station163x45 * 0.5 + dXFrame_Station163x45 * 0.5, 0.0,
545 0.0);
546
547 TGeoCombiTrans* upper_horizontal_frame_position = new TGeoCombiTrans();
548 upper_horizontal_frame_position->SetTranslation(0.0, YModuleSize_Station163x45 * 0.5 + dYFrame_Station163x45 * 0.5,
549 0.0);
550
551 TGeoCombiTrans* bottom_horizontal_frame_position = new TGeoCombiTrans();
552 bottom_horizontal_frame_position->SetTranslation(
553 hole_radius * 0.5, -YModuleSize_Station163x45 * 0.5 - dYFrame_Station163x45 * 0.5, 0.0);
554
555 composite_frameV->AddNode(vertical_frameV, 0, left_vertical_frame_position);
556 composite_frameV->AddNode(horizontal_upper_frameV, 0, upper_horizontal_frame_position);
557 composite_frameV->AddNode(horizontal_bottom_frameV, 0, bottom_horizontal_frame_position);
558
559 return composite_frameV;
560}
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 SetTranslation(const TGeoTranslation &tr)
virtual void RegisterYourself()
const char * GetName() const 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 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
TGeoMedium * pMedAir
const Double_t ZModuleSize_Station66x41
const Double_t YStationPositions[NStations]
const Double_t dYFrame_Station66x41
const Double_t ZModuleSize_Station163x45
const Double_t dXFrame_Station163x45
const Double_t YModuleSize_Station163x45
TGeoMedium * pMedCarbon
const Double_t dZFrame_Station163x45
TGeoManager * gGeoMan
const Int_t NMaxModules
const Double_t ZStationPositions[NStations]
TGeoMedium * pMedArCO27030
const Int_t NStations
const Double_t YModuleSize_Station66x41
const Double_t XModuleSize_Station163x45
const Double_t XModuleSize_Station66x41
TGeoMedium * pMedFiberGlass
const Double_t XStationPositions[NStations]
TGeoMedium * pMedCopper
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)
void DefineRequiredMedia(FairGeoMedia *geoMedia, FairGeoBuilder *geoBuild)
TGeoVolume * CreateFrameForModule_Station66x41(TString frame_name, Double_t dx, Double_t dy, Double_t dz)
void create_rootgeom_GEMS_RunSpring2017()