21 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
22 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
24 TString medFile = geoPath +
"/geometry/media.geo";
25 geoFace->setMediaFile(medFile);
30 const TString geoDetectorName =
"TOF400";
31 const TString geoDetectorVersion =
"RUN7_SRC_AllignmentZY";
32 const TString geoFileName =
Form(
"%s_%s%s", geoDetectorName.
Data(), geoDetectorVersion.
Data(),
".root");
35 FairGeoMedia* geoMedia = geoFace->getMedia();
36 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
39 FairGeoMedium* matAir = geoMedia->getMedium(
"air");
41 Fatal(
"Main",
"FairMedium air not found");
42 geoBuild->createMedium(matAir);
43 TGeoMedium* medAir = gGeoMan->GetMedium(
"air");
45 Fatal(
"Main",
"Medium air not found");
48 FairGeoMedium* matPprop = geoMedia->getMedium(
"polypropylene");
50 Fatal(
"Main",
"FairMedium polypropylene not found");
51 geoBuild->createMedium(matPprop);
52 TGeoMedium* medPprop = gGeoMan->GetMedium(
"polypropylene");
54 Fatal(
"Main",
"Medium polypropylene not found");
57 FairGeoMedium* matPb = geoMedia->getMedium(
"lead");
59 Fatal(
"Main",
"FairMedium lead not found");
60 geoBuild->createMedium(matPb);
61 TGeoMedium* medPb = gGeoMan->GetMedium(
"lead");
63 Fatal(
"Main",
"Medium lead not found");
66 FairGeoMedium* matAl = geoMedia->getMedium(
"aluminium");
68 Fatal(
"Main",
"FairMedium aluminium not found");
69 geoBuild->createMedium(matAl);
70 TGeoMedium* medAl = gGeoMan->GetMedium(
"aluminium");
72 Fatal(
"Main",
"Medium aluminium not found");
75 FairGeoMedium* matGlass = geoMedia->getMedium(
"RPCglass");
77 Fatal(
"Main",
"FairMedium RPCglass not found");
78 geoBuild->createMedium(matGlass);
79 TGeoMedium* medGlass = gGeoMan->GetMedium(
"RPCglass");
81 Fatal(
"Main",
"Medium RPCglass not found");
84 FairGeoMedium* matGas = geoMedia->getMedium(
"RPCgas");
86 Fatal(
"Main",
"FairMedium RPCgas not found");
87 geoBuild->createMedium(matGas);
88 TGeoMedium* medGas = gGeoMan->GetMedium(
"RPCgas");
90 Fatal(
"Main",
"Medium RPCgas not found");
93 FairGeoMedium* matG10 = geoMedia->getMedium(
"G10");
95 Fatal(
"Main",
"FairMedium G10 not found");
96 geoBuild->createMedium(matG10);
97 TGeoMedium* medG10 = gGeoMan->GetMedium(
"G10");
99 Fatal(
"Main",
"Medium G10 not found");
104 gGeoMan->SetName(geoDetectorName +
"_geom");
107 gGeoMan->SetTopVolume(top);
108 gGeoMan->SetTopVisible(1);
109 gGeoMan->SetVisLevel(7);
118 const double DetXsize = 60.;
119 const double DetYsize = 30.;
120 const double DetZsize = 3.0;
122 const float stripGasX = 1., stripGasY = DetYsize, stripGasZ = 0.3;
123 TGeoBBox* sStripGas =
new TGeoBBox(stripGasX / 2., stripGasY / 2., stripGasZ / 2.);
124 sStripGas->
SetName(
"StripGas");
129 const float detGlassX = DetXsize, detGlassY = DetYsize, detGlassZ = 0.618 / 2.;
130 TGeoBBox* sDetGlass =
new TGeoBBox(detGlassX / 2., detGlassY / 2., detGlassZ / 2.);
131 sDetGlass->
SetName(
"DetectorGlass");
136 const float detPlateX = DetXsize, detPlateY = DetYsize, detPlateZ = 0.64 / 2.;
137 TGeoBBox* sDetPlate =
new TGeoBBox(detPlateX / 2., detPlateY / 2., detPlateZ / 2.);
138 sDetPlate->
SetName(
"DetectorPlate");
145 const int NStrips = 48;
146 const double StripStep = 1.25;
147 for (
int i = 0;
i < NStrips;
i++) {
148 vDetector->
AddNode(vStripGas,
i + 1,
149 new TGeoTranslation(
"", -DetXsize / 2. + StripStep / 2. +
i * StripStep, 0., 0.));
161 const double tofZgap = 0.86;
162 const double tofYoverlap = 3.0;
164 const double tofXgap = 0.;
166 const double tofZ_1box = -234.705;
167 const double tofZ_2box = -217.27;
168 const double tofZ_3box = -217.27;
169 const double tofZ_4box = -234.705;
171 double tofX = tofXgap / 2. + DetXsize / 2.;
172 double tofZshift = -1. * (tofZgap + DetZsize);
173 double tofYshift = -2.9;
174 double box1_x = 277.299;
175 double box2_x = 222.701;
176 double box3_x = -222.701;
177 double box4_x = -277.299;
179 Double_t angleDegBox1_2 = 30., angleDegBox3_4 = -30.;
182 geoRot->
RotateY(angleDegBox1_2);
188 new TGeoCombiTrans(
"", box1_x, 2. * DetYsize - 2 * tofYoverlap + tofYshift, tofZ_1box + tofZshift, geoRot);
189 topTof->
AddNode(vDetector, 1, cR1);
192 topTof->
AddNode(vDetector, 2, cR2);
195 topTof->
AddNode(vDetector, 3, cR3);
198 topTof->
AddNode(vDetector, 4, cR4);
201 new TGeoCombiTrans(
"", box1_x, -2. * DetYsize + 2 * tofYoverlap + tofYshift, tofZ_1box + tofZshift, geoRot);
202 topTof->
AddNode(vDetector, 5, cR5);
206 new TGeoCombiTrans(
"", box2_x, 2. * DetYsize - 2 * tofYoverlap + tofYshift, tofZ_2box + tofZshift, geoRot);
207 topTof->
AddNode(vDetector, 6, cR6);
210 topTof->
AddNode(vDetector, 7, cR7);
213 topTof->
AddNode(vDetector, 8, cR8);
216 topTof->
AddNode(vDetector, 9, cR9);
219 new TGeoCombiTrans(
"", box2_x, -2 * DetYsize + 2 * tofYoverlap + tofYshift, tofZ_2box + tofZshift, geoRot);
220 topTof->
AddNode(vDetector, 10, cR10);
223 geoRot2->
RotateY(angleDegBox3_4);
226 new TGeoCombiTrans(
"", box3_x, 2. * DetYsize - 2 * tofYoverlap + tofYshift, tofZ_2box + tofZshift, geoRot2);
227 topTof->
AddNode(vDetector, 11, cR11);
230 topTof->
AddNode(vDetector, 12, cR12);
233 topTof->
AddNode(vDetector, 13, cR13);
236 topTof->
AddNode(vDetector, 14, cR14);
239 new TGeoCombiTrans(
"", box3_x, -2 * DetYsize + 2 * tofYoverlap + tofYshift, tofZ_2box + tofZshift, geoRot2);
240 topTof->
AddNode(vDetector, 15, cR15);
244 new TGeoCombiTrans(
"", box4_x, 2. * DetYsize - 2 * tofYoverlap + tofYshift, tofZ_1box + tofZshift, geoRot2);
245 topTof->
AddNode(vDetector, 16, cR16);
248 topTof->
AddNode(vDetector, 17, cR17);
251 topTof->
AddNode(vDetector, 18, cR18);
254 topTof->
AddNode(vDetector, 19, cR19);
257 new TGeoCombiTrans(
"", box4_x, -2. * DetYsize + 2 * tofYoverlap + tofYshift, tofZ_1box + tofZshift, geoRot2);
258 topTof->
AddNode(vDetector, 20, cR20);
266 gGeoMan->CloseGeometry();
267 gGeoMan->CheckOverlaps(0.001);
268 gGeoMan->PrintOverlaps();
271 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");