27 cout <<
"!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
28 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
29 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
31 TString medFile = geoPath +
"/geometry/media.geo";
32 geoFace->setMediaFile(medFile);
37 const TString geoDetectorName =
"TOF400";
38 const TString geoDetectorVersion =
"RUN8_SRC";
39 const TString geoFileName = geoPath +
"/geometry/" + geoDetectorName +
"_" + geoDetectorVersion +
".root";
42 FairGeoMedia* geoMedia = geoFace->getMedia();
43 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
46 FairGeoMedium* matAir = geoMedia->getMedium(
"air");
48 Fatal(
"Main",
"FairMedium air not found");
49 geoBuild->createMedium(matAir);
50 TGeoMedium* medAir = gGeoMan->GetMedium(
"air");
52 Fatal(
"Main",
"Medium air not found");
55 FairGeoMedium* matPprop = geoMedia->getMedium(
"polypropylene");
57 Fatal(
"Main",
"FairMedium polypropylene not found");
58 geoBuild->createMedium(matPprop);
59 TGeoMedium* medPprop = gGeoMan->GetMedium(
"polypropylene");
61 Fatal(
"Main",
"Medium polypropylene not found");
64 FairGeoMedium* matPb = geoMedia->getMedium(
"lead");
66 Fatal(
"Main",
"FairMedium lead not found");
67 geoBuild->createMedium(matPb);
68 TGeoMedium* medPb = gGeoMan->GetMedium(
"lead");
70 Fatal(
"Main",
"Medium lead not found");
73 FairGeoMedium* matAl = geoMedia->getMedium(
"aluminium");
75 Fatal(
"Main",
"FairMedium aluminium not found");
76 geoBuild->createMedium(matAl);
77 TGeoMedium* medAl = gGeoMan->GetMedium(
"aluminium");
79 Fatal(
"Main",
"Medium aluminium not found");
82 FairGeoMedium* matGlass = geoMedia->getMedium(
"RPCglass");
84 Fatal(
"Main",
"FairMedium RPCglass not found");
85 geoBuild->createMedium(matGlass);
86 TGeoMedium* medGlass = gGeoMan->GetMedium(
"RPCglass");
88 Fatal(
"Main",
"Medium RPCglass not found");
91 FairGeoMedium* matGas = geoMedia->getMedium(
"RPCgas");
93 Fatal(
"Main",
"FairMedium RPCgas not found");
94 geoBuild->createMedium(matGas);
95 TGeoMedium* medGas = gGeoMan->GetMedium(
"RPCgas");
97 Fatal(
"Main",
"Medium RPCgas not found");
100 FairGeoMedium* matG10 = geoMedia->getMedium(
"G10");
102 Fatal(
"Main",
"FairMedium G10 not found");
103 geoBuild->createMedium(matG10);
104 TGeoMedium* medG10 = gGeoMan->GetMedium(
"G10");
106 Fatal(
"Main",
"Medium G10 not found");
111 gGeoMan->SetName(geoDetectorName +
"_geom");
114 gGeoMan->SetTopVolume(top);
115 gGeoMan->SetTopVisible(1);
116 gGeoMan->SetVisLevel(7);
125 const double DetXsize = 60.;
126 const double DetYsize = 30.;
127 const double DetZsize = 3.4;
129 const float stripGasX = 1., stripGasY = DetYsize, stripGasZ = 0.3;
130 TGeoBBox* sStripGas =
new TGeoBBox(stripGasX / 2., stripGasY / 2., stripGasZ / 2.);
131 sStripGas->
SetName(
"StripGas");
136 const float detGlassX = DetXsize, detGlassY = DetYsize, detGlassZ = 0.618 / 2.;
137 TGeoBBox* sDetGlass =
new TGeoBBox(detGlassX / 2., detGlassY / 2., detGlassZ / 2.);
138 sDetGlass->
SetName(
"DetectorGlass");
143 const float detPlateX = DetXsize, detPlateY = DetYsize, detPlateZ = 0.64 / 2.;
144 TGeoBBox* sDetPlate =
new TGeoBBox(detPlateX / 2., detPlateY / 2., detPlateZ / 2.);
145 sDetPlate->
SetName(
"DetectorPlate");
152 const int NStrips = 48;
153 const double StripStep = 1.25;
154 for (
int i = 0;
i < NStrips;
i++) {
155 vDetector->
AddNode(vStripGas,
i + 1,
156 new TGeoTranslation(
"", -DetXsize / 2. + StripStep / 2. +
i * StripStep, 0., 0.));
171 const Double_t tofZshift = tofZgap + DetZsize;
172 const Double_t FromCoverToRpc = 7.95;
174 const Double_t ZSP41 = 1333.7575 + 304.812;
200 const double box1_x = 148.098;
201 const double box1_y = -0.473 - FromHVToRpc;
202 const double box1_z = 1259.38 - ZSP41;
210 geoRot1->
RotateX(angleXDegBox1);
211 geoRot1->
RotateY(angleYDegBox1);
212 geoRot1->
RotateZ(angleZDegBox1);
214 TVector3* d1 =
new TVector3(0, 2. * DetYsize - 2 * tofYoverlap, FromCoverToRpc);
215 TVector3* d2 =
new TVector3(0, 1. * DetYsize - 1 * tofYoverlap, FromCoverToRpc - tofZshift);
217 TVector3* d4 =
new TVector3(0, -1. * DetYsize + 1 * tofYoverlap, FromCoverToRpc - tofZshift);
218 TVector3* d5 =
new TVector3(0, -2. * DetYsize + 2 * tofYoverlap, FromCoverToRpc);
239 topTof->
AddNode(vDetector, 1, cR1);
242 topTof->
AddNode(vDetector, 2, cR2);
245 topTof->
AddNode(vDetector, 3, cR3);
248 topTof->
AddNode(vDetector, 4, cR4);
251 topTof->
AddNode(vDetector, 5, cR5);
258 const double box4_x = 114.728;
259 const double box4_y = -0.65 - FromHVToRpc;
260 const double box4_z = 1307.97 - ZSP41;
263 geoRot4->
RotateX(angleXDegBox4);
264 geoRot4->
RotateY(angleYDegBox4);
265 geoRot4->
RotateZ(angleZDegBox4);
267 TVector3* d6 =
new TVector3(0, 2. * DetYsize - 2 * tofYoverlap, -FromCoverToRpc);
268 TVector3* d7 =
new TVector3(0, 1. * DetYsize - 1 * tofYoverlap, -FromCoverToRpc + tofZshift);
270 TVector3* d9 =
new TVector3(0, -1. * DetYsize + 1 * tofYoverlap, -FromCoverToRpc + tofZshift);
271 TVector3* d10 =
new TVector3(0, -2. * DetYsize + 2 * tofYoverlap, -FromCoverToRpc);
292 topTof->
AddNode(vDetector, 6, cR6);
295 topTof->
AddNode(vDetector, 7, cR7);
298 topTof->
AddNode(vDetector, 8, cR8);
301 topTof->
AddNode(vDetector, 9, cR9);
304 topTof->
AddNode(vDetector, 10, cR10);
311 const double box3_x = -113.066;
312 const double box3_y = -0.314 - FromHVToRpc;
313 const double box3_z = 1306.43 - ZSP41;
316 geoRot3->
RotateX(angleXDegBox3);
317 geoRot3->
RotateY(angleYDegBox3);
318 geoRot3->
RotateZ(angleZDegBox3);
320 TVector3* d11 =
new TVector3(0, 2. * DetYsize - 2 * tofYoverlap, -FromCoverToRpc + tofZshift);
321 TVector3* d12 =
new TVector3(0, 1. * DetYsize - 1 * tofYoverlap, -FromCoverToRpc);
323 TVector3* d14 =
new TVector3(0, -1. * DetYsize + 1 * tofYoverlap, -FromCoverToRpc);
324 TVector3* d15 =
new TVector3(0, -2. * DetYsize + 2 * tofYoverlap, -FromCoverToRpc + tofZshift);
345 topTof->
AddNode(vDetector, 11, cR11);
348 topTof->
AddNode(vDetector, 12, cR12);
351 topTof->
AddNode(vDetector, 13, cR13);
354 topTof->
AddNode(vDetector, 14, cR14);
357 topTof->
AddNode(vDetector, 15, cR15);
364 const double box2_x = -145.355;
365 const double box2_y = -0.473 - FromHVToRpc;
366 const double box2_z = 1257.61 - ZSP41;
369 geoRot2->
RotateX(angleXDegBox2);
370 geoRot2->
RotateY(angleYDegBox2);
371 geoRot2->
RotateZ(angleZDegBox2);
373 TVector3* d16 =
new TVector3(0, 2. * DetYsize - 2 * tofYoverlap, FromCoverToRpc - tofZshift);
374 TVector3* d17 =
new TVector3(0, 1. * DetYsize - 1 * tofYoverlap, FromCoverToRpc);
376 TVector3* d19 =
new TVector3(0, -1. * DetYsize + 1 * tofYoverlap, FromCoverToRpc);
377 TVector3* d20 =
new TVector3(0, -2. * DetYsize + 2 * tofYoverlap, FromCoverToRpc - tofZshift);
398 topTof->
AddNode(vDetector, 16, cR16);
401 topTof->
AddNode(vDetector, 17, cR17);
404 topTof->
AddNode(vDetector, 18, cR18);
407 topTof->
AddNode(vDetector, 19, cR19);
410 topTof->
AddNode(vDetector, 20, cR20);
418 gGeoMan->CloseGeometry();
419 gGeoMan->CheckOverlaps(0.001);
420 gGeoMan->PrintOverlaps();
423 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");