53#if ROOT_VERSION_CODE < ROOT_VERSION(5, 99, 99)
54 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
58 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
59 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
61 TString medFile = geoPath +
"/geometry/media.geo";
62 geoFace->setMediaFile(medFile);
68 TString geoDetectorName =
"tof700";
69 TString geoDetectorVersion =
"RUN9";
70 TString geoFileName = geoPath +
"/geometry/" + geoDetectorName +
"_" + geoDetectorVersion +
".root";
86 Double_t xmin = 10000., ymin = 10000., zmin = 10000.;
87 Double_t xmax = -10000., ymax = -10000., zmax = -10000.;
116 Double_t TOF2_X = (TOF2_X_max + TOF2_X_min) / 2.;
117 Double_t TOF2_Y = (TOF2_Y_max + TOF2_Y_min) / 2.;
118 Double_t TOF2_Z = (TOF2_Z_max + TOF2_Z_min) / 2.;
121 FairGeoMedia* geoMedia = geoFace->getMedia();
122 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
124 FairGeoMedium* mAir = geoMedia->getMedium(
"air");
126 Fatal(
"Main",
"FairMedium air not found");
127 geoBuild->createMedium(mAir);
130 Fatal(
"Main",
"Medium air not found");
132 FairGeoMedium* mRPCglass = geoMedia->getMedium(
"RPCglass");
134 Fatal(
"Main",
"FairMedium RPCglass not found");
135 geoBuild->createMedium(mRPCglass);
138 Fatal(
"Main",
"Medium RPCglass not found");
140 FairGeoMedium* mRPCgas = geoMedia->getMedium(
"RPCgas");
142 Fatal(
"Main",
"FairMedium RPCgas not found");
143 geoBuild->createMedium(mRPCgas);
146 Fatal(
"Main",
"Medium RPCgas not found");
149 FairGeoMedium* matAl = geoMedia->getMedium(
"aluminium");
151 Fatal(
"Main",
"FairMedium aluminium not found");
152 geoBuild->createMedium(matAl);
155 Fatal(
"Main",
"Medium aluminium not found");
158 FairGeoMedium* matG10 = geoMedia->getMedium(
"G10");
160 Fatal(
"Main",
"FairMedium G10 not found");
161 geoBuild->createMedium(matG10);
164 Fatal(
"Main",
"Medium G10 not found");
170 gGeoMan->SetName(geoDetectorName +
"_geom");
188 sprintf(name,
"Module_%d_PosTOF2_trans",
i + 1);
193 sprintf(name,
"GlassLayer1PosTOF2_trans");
197 sprintf(name,
"GasLayerPosTOF2_trans");
201 sprintf(name,
"GlassLayer2PosTOF2_trans");
205 sprintf(name,
"G10LayerPosTOF2_trans");
217 char nTOF2ModuleS[2][32] = {
"TOF2ChamberS0",
"TOF2ChamberS1"};
218 char nTOF2GlassVolumeS[2][32] = {
"TOF2GlassVolumeS0",
"TOF2GlassVolumeS1"};
219 char nTOF2G10VolumeS[2][32] = {
"TOF2G10VolumeS0",
"TOF2G10VolumeS1"};
220 char nTOF2ActiveGasVolumeS[2][32] = {
"TOF2ActiveGasVolumeS0",
"TOF2ActiveGasVolumeS1"};
221 char nTOF2ModuleV[2][32] = {
"TOF2ChamberV0",
"TOF2ChamberV1"};
222 char nTOF2GlassVolumeV[2][32] = {
"TOF2GlassVolumeV0",
"TOF2GlassVolumeV1"};
223 char nTOF2G10VolumeV[2][32] = {
"TOF2G10VolumeV0",
"TOF2G10VolumeV1"};
224 char nTOF2ActiveGasVolumeV[2][32] = {
"TOF2ActiveGasVolumeV0",
"TOF2ActiveGasVolumeV1"};
234 int nstr[2] = {32, 16};
235 for (
int i = 0;
i < 2;
i++) {
249 TOF2ModuleV[
i] =
new TGeoVolume(nTOF2ModuleV[
i], TOF2ModuleS[
i]);
255 TOF2GlassVolumeV[
i] =
new TGeoVolume(nTOF2GlassVolumeV[
i], TOF2GlassVolumeS[
i]);
259 TOF2ActiveGasVolumeV[
i] =
new TGeoVolume(nTOF2ActiveGasVolumeV[
i], TOF2ActiveGasVolumeS[
i]);
260 TOF2ActiveGasVolumeV[
i]->
SetMedium(pMedRPCgas);
262 TOF2ActiveGasVolumeV[
i]->
Divide(
"ActiveGasStrip", 2, nstr[
i], 0, -1);
264 TOF2G10VolumeV[
i] =
new TGeoVolume(nTOF2G10VolumeV[
i], TOF2G10VolumeS[
i]);
268 TOF2ModuleV[
i]->
AddNode(TOF2GlassVolumeV[
i], 1, GlassLayer1PosTOF2_trans);
269 TOF2ModuleV[
i]->
AddNode(TOF2ActiveGasVolumeV[
i], 1, GasLayerPosTOF2_trans);
270 TOF2ModuleV[
i]->
AddNode(TOF2GlassVolumeV[
i], 2, GlassLayer2PosTOF2_trans);
271 TOF2ModuleV[
i]->
AddNode(TOF2G10VolumeV[
i], 1, G10LayerPosTOF2_trans);
279 TOF2Top->AddNode(TOF2ModuleV[
chtype[
i]], nm[0] + 1, ModulePosTOF2_trans[
i]);
294 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");
307 if (strlen(geomfile) == 0) {
308 printf(
"TOF701 geometry file name not defined!\n");
311 if (strstr(geomfile,
"_run8"))
314 printf(
"Geometry file for early period (%s), but script for period 8 !\n", geomfile);
317 TString dir = getenv(
"VMCWORKDIR");
318 sprintf(fname,
"%s/geometry/%s", dir.
Data(), geomfile);
319 cout << fname << endl;
320 fg = fopen(fname,
"r");
322 printf(
"TOF701 geometry file %s open error!\n", fname);
325 if (!fgets(line1,
sizeof(line1), fg)) {
326 printf(
"TOF701 geometry file %s - first line read error!\n", fname);
330 printf(
"Wrong first line (not 4 numbers) in TOF701 geometry file %s\n", fname);
333 printf(
"Zoffs = %f\n",
zoffs);
337 while (fscanf(fg,
"%s %d %lf %lf %lf %lf %lf %lf %lf %lf %lf\n", &ic[0], &
n, &step, &sy, &sx, &x, &y, &z, &
dxcorr,
350 for (
int ns =
n - 1; ns >= 0; ns--) {
363 printf(
"%s ns=%d step=%f sx=%f sy=%f x=%f y=%f z=%f\n", ic,
n, step, sx, sy, x, y, z);
365 printf(
"zchamb=%f \n",
zchamb[c]);
virtual TGeoVolume * Divide(const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="")