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 =
"RUN7_SRC_AllignmentZY_v4";
39 const TString geoFileName =
Form(
"%s_%s%s", geoDetectorName.
Data(), geoDetectorVersion.
Data(),
".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.0;
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.));
168 const double tofZgap = 0.9;
169 const double tofYoverlap = 3.0;
170 double tofZshift = tofZgap + DetZsize;
191 const double tofZ_1box = -214.27;
192 double box1_x = 282.34;
193 double box1_y = 0.44 - 2.3;
199 topTof->
AddNode(vDetector, 1, cR1);
202 1. * DetYsize - tofYoverlap + box1_y,
203 tofZ_1box +
Cos(
DegToRad() * angleDegBox1) * tofZshift, geoRot);
204 topTof->
AddNode(vDetector, 2, cR2);
207 topTof->
AddNode(vDetector, 3, cR3);
210 -1. * DetYsize + tofYoverlap + box1_y,
211 tofZ_1box +
Cos(
DegToRad() * angleDegBox1) * tofZshift, geoRot);
212 topTof->
AddNode(vDetector, 4, cR4);
215 topTof->
AddNode(vDetector, 5, cR5);
219 const double tofZ_2box = -195.52;
220 double box2_x = 226.9;
221 double box2_y = 0.09 - 2.3;
229 geoRot2->
RotateY(angleDegBox2);
232 topTof->
AddNode(vDetector, 6, cR6);
235 1. * DetYsize - tofYoverlap + box2_y,
236 tofZ_2box +
Cos(
DegToRad() * angleDegBox2) * tofZshift, geoRot2);
237 topTof->
AddNode(vDetector, 7, cR7);
240 topTof->
AddNode(vDetector, 8, cR8);
243 -1. * DetYsize + tofYoverlap + box2_y,
244 tofZ_2box +
Cos(
DegToRad() * angleDegBox2) * tofZshift, geoRot2);
245 topTof->
AddNode(vDetector, 9, cR9);
248 topTof->
AddNode(vDetector, 10, cR10);
252 const double tofZ_3box = -194.78;
253 double box3_x = -227.6;
254 double box3_y = -1.81 - 2.3;
257 geoRot3->
RotateY(angleDegBox3);
260 topTof->
AddNode(vDetector, 11, cR11);
263 1. * DetYsize - tofYoverlap + box3_y,
264 tofZ_3box +
Cos(
DegToRad() * angleDegBox3) * tofZshift, geoRot3);
265 topTof->
AddNode(vDetector, 12, cR12);
268 topTof->
AddNode(vDetector, 13, cR13);
271 -1. * DetYsize + tofYoverlap + box3_y,
272 tofZ_3box +
Cos(
DegToRad() * angleDegBox3) * tofZshift, geoRot3);
273 topTof->
AddNode(vDetector, 14, cR14);
276 topTof->
AddNode(vDetector, 15, cR15);
280 const double tofZ_4box = -210.45;
281 double box4_x = -284.6;
282 double box4_y = -1.81 - 2.3;
285 geoRot4->
RotateY(angleDegBox4);
288 topTof->
AddNode(vDetector, 16, cR16);
291 1. * DetYsize - tofYoverlap + box4_y,
292 tofZ_4box +
Cos(
DegToRad() * angleDegBox4) * tofZshift, geoRot4);
293 topTof->
AddNode(vDetector, 17, cR17);
296 topTof->
AddNode(vDetector, 18, cR18);
299 -1. * DetYsize + tofYoverlap + box4_y,
300 tofZ_4box +
Cos(
DegToRad() * angleDegBox4) * tofZshift, geoRot4);
301 topTof->
AddNode(vDetector, 19, cR19);
304 new TGeoCombiTrans(
"", box4_x, -2. * DetYsize + 2 * tofYoverlap + box4_y, tofZ_4box, geoRot4);
305 topTof->
AddNode(vDetector, 20, cR20);
313 gGeoMan->CloseGeometry();
314 gGeoMan->CheckOverlaps(0.001);
315 gGeoMan->PrintOverlaps();
318 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");