15 cout <<
"!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
16 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
17 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
19 TString medFile = geoPath +
"/geometry/media.geo";
20 geoFace->setMediaFile(medFile);
25 const TString geoDetectorName =
"TOF400";
26 const TString geoDetectorVersion =
"RUN7";
28 geoPath +
"/geometry/" + geoDetectorName +
"_" + geoDetectorVersion +
"BMN_byKolesnicov_Aligned.root";
31 FairGeoMedia* geoMedia = geoFace->getMedia();
32 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
35 FairGeoMedium* matAir = geoMedia->getMedium(
"air");
37 Fatal(
"Main",
"FairMedium air not found");
38 geoBuild->createMedium(matAir);
39 TGeoMedium* medAir = gGeoMan->GetMedium(
"air");
41 Fatal(
"Main",
"Medium air not found");
44 FairGeoMedium* matPprop = geoMedia->getMedium(
"polypropylene");
46 Fatal(
"Main",
"FairMedium polypropylene not found");
47 geoBuild->createMedium(matPprop);
48 TGeoMedium* medPprop = gGeoMan->GetMedium(
"polypropylene");
50 Fatal(
"Main",
"Medium polypropylene not found");
53 FairGeoMedium* matPb = geoMedia->getMedium(
"lead");
55 Fatal(
"Main",
"FairMedium lead not found");
56 geoBuild->createMedium(matPb);
57 TGeoMedium* medPb = gGeoMan->GetMedium(
"lead");
59 Fatal(
"Main",
"Medium lead not found");
62 FairGeoMedium* matAl = geoMedia->getMedium(
"aluminium");
64 Fatal(
"Main",
"FairMedium aluminium not found");
65 geoBuild->createMedium(matAl);
66 TGeoMedium* medAl = gGeoMan->GetMedium(
"aluminium");
68 Fatal(
"Main",
"Medium aluminium not found");
71 FairGeoMedium* matGlass = geoMedia->getMedium(
"RPCglass");
73 Fatal(
"Main",
"FairMedium RPCglass not found");
74 geoBuild->createMedium(matGlass);
75 TGeoMedium* medGlass = gGeoMan->GetMedium(
"RPCglass");
77 Fatal(
"Main",
"Medium RPCglass not found");
80 FairGeoMedium* matGas = geoMedia->getMedium(
"RPCgas");
82 Fatal(
"Main",
"FairMedium RPCgas not found");
83 geoBuild->createMedium(matGas);
84 TGeoMedium* medGas = gGeoMan->GetMedium(
"RPCgas");
86 Fatal(
"Main",
"Medium RPCgas not found");
89 FairGeoMedium* matG10 = geoMedia->getMedium(
"G10");
91 Fatal(
"Main",
"FairMedium G10 not found");
92 geoBuild->createMedium(matG10);
93 TGeoMedium* medG10 = gGeoMan->GetMedium(
"G10");
95 Fatal(
"Main",
"Medium G10 not found");
100 gGeoMan->SetName(geoDetectorName +
"_geom");
103 gGeoMan->SetTopVolume(top);
104 gGeoMan->SetTopVisible(1);
105 gGeoMan->SetVisLevel(7);
114 const double DetXsize = 60.;
115 const double DetYsize = 30.;
116 const double DetZsize = 3.0;
118 const float stripGasX = 1., stripGasY = DetYsize, stripGasZ = 0.3;
119 TGeoBBox* sStripGas =
new TGeoBBox(stripGasX / 2., stripGasY / 2., stripGasZ / 2.);
120 sStripGas->
SetName(
"StripGas");
125 const float detGlassX = DetXsize, detGlassY = DetYsize, detGlassZ = 0.618 / 2.;
126 TGeoBBox* sDetGlass =
new TGeoBBox(detGlassX / 2., detGlassY / 2., detGlassZ / 2.);
127 sDetGlass->
SetName(
"DetectorGlass");
132 const float detPlateX = DetXsize, detPlateY = DetYsize, detPlateZ = 0.64 / 2.;
133 TGeoBBox* sDetPlate =
new TGeoBBox(detPlateX / 2., detPlateY / 2., detPlateZ / 2.);
134 sDetPlate->
SetName(
"DetectorPlate");
141 const int NStrips = 48;
142 const double StripStep = 1.25;
143 for (
int i = 0;
i < NStrips;
i++) {
144 vDetector->
AddNode(vStripGas,
i + 1,
145 new TGeoTranslation(
"", -DetXsize / 2. + StripStep / 2. +
i * StripStep, 0., 0.));
157 const double tofZgap = 0.86;
158 const double tofYoverlap = 3.0;
160 const double tofXgap = 0.;
163 double tofX = tofXgap / 2. + DetXsize / 2.;
164 double tofZshift = tofZgap + DetZsize;
167 const double box1_x = 154.016 - 9. + 2.2;
168 const double box1_y = -0.51475 - 2.99 - 0.24;
169 const double box1_z = 448.579 - 4.82;
176 geoRot1_Pl0->
RotateX(-0.905381);
177 geoRot1_Pl0->
RotateY(-0.189805);
178 geoRot1_Pl0->
RotateZ(0.352046 + 7.22 - 0.97);
181 box1_z + tofZshift - 5.02, geoRot1_Pl0);
182 topTof->
AddNode(vDetector, 1, cR1);
185 topTof->
AddNode(vDetector, 2, cR2);
188 topTof->
AddNode(vDetector, 3, cR3);
191 topTof->
AddNode(vDetector, 4, cR4);
194 new TGeoCombiTrans(
"", box1_x, -2. * DetYsize + 2 * tofYoverlap + box1_y, box1_z + tofZshift - 5.02, geoRot1);
195 topTof->
AddNode(vDetector, 5, cR5);
198 const double box2_x = 89.7258 + 2.2;
199 const double box2_y = -0.51475 - 2.99 - 0.24;
200 const double box2_z = 434.875;
207 new TGeoCombiTrans(
"", box2_x, 2. * DetYsize - 2 * tofYoverlap + box2_y, box2_z + tofZshift - 5.02, geoRot2);
208 topTof->
AddNode(vDetector, 6, cR6);
211 topTof->
AddNode(vDetector, 7, cR7);
214 topTof->
AddNode(vDetector, 8, cR8);
217 topTof->
AddNode(vDetector, 9, cR9);
220 new TGeoCombiTrans(
"", box2_x, -2. * DetYsize + 2 * tofYoverlap + box2_y, box2_z + tofZshift - 5.02, geoRot2);
221 topTof->
AddNode(vDetector, 10, cR10);
224 const double box3_x = -72.73 - 5 - 2.6;
225 const double box3_y = -0.6015 + 0.455;
226 const double box3_z = 434.129 - 1.32;
233 new TGeoCombiTrans(
"", box3_x, 2. * DetYsize - 2 * tofYoverlap + box3_y, box3_z + tofZshift - 5.02, geoRot3);
234 topTof->
AddNode(vDetector, 11, cR11);
237 topTof->
AddNode(vDetector, 12, cR12);
240 topTof->
AddNode(vDetector, 13, cR13);
243 topTof->
AddNode(vDetector, 14, cR14);
246 new TGeoCombiTrans(
"", box3_x, -2. * DetYsize + 2 * tofYoverlap + box3_y, box3_z + tofZshift - 5.02, geoRot3);
247 topTof->
AddNode(vDetector, 15, cR15);
250 const double box4_x = -138.442 + 10 - 5. - 2.6;
251 const double box4_y = -0.6015 + 0.455;
252 const double box4_z = 447.906 - 7.;
259 new TGeoCombiTrans(
"", box4_x, 2. * DetYsize - 2 * tofYoverlap + box4_y, box4_z + tofZshift - 5.02, geoRot4);
260 topTof->
AddNode(vDetector, 16, cR16);
263 topTof->
AddNode(vDetector, 17, cR17);
266 topTof->
AddNode(vDetector, 18, cR18);
269 topTof->
AddNode(vDetector, 19, cR19);
272 new TGeoCombiTrans(
"", box4_x, -2. * DetYsize + 2 * tofYoverlap + box4_y, box4_z + tofZshift - 5.02, geoRot4);
273 topTof->
AddNode(vDetector, 20, cR20);
310 gGeoMan->CloseGeometry();
311 gGeoMan->CheckOverlaps(0.001);
312 gGeoMan->PrintOverlaps();
315 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");