53#if ROOT_VERSION_CODE < ROOT_VERSION(5, 99, 99)
54 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
59 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
60 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
62 TString medFile = geoPath +
"/geometry/media.geo";
63 geoFace->setMediaFile(medFile);
69 TString geoDetectorName =
"tof700";
70 TString geoDetectorVersion =
"run8_with_support";
71 TString geoFileName = geoPath +
"/geometry/" + geoDetectorName +
"_" + geoDetectorVersion +
".root";
87 Double_t xmin = 10000., ymin = 10000., zmin = 10000.;
88 Double_t xmax = -10000., ymax = -10000., zmax = -10000.;
117 Double_t TOF2_X = (TOF2_X_max + TOF2_X_min) / 2.;
118 Double_t TOF2_Y = (TOF2_Y_max + TOF2_Y_min) / 2.;
119 Double_t TOF2_Z = (TOF2_Z_max + TOF2_Z_min) / 2.;
122 FairGeoMedia* geoMedia = geoFace->getMedia();
123 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
125 FairGeoMedium* mAir = geoMedia->getMedium(
"air");
127 Fatal(
"Main",
"FairMedium air not found");
128 geoBuild->createMedium(mAir);
131 Fatal(
"Main",
"Medium air not found");
133 FairGeoMedium* mRPCglass = geoMedia->getMedium(
"RPCglass");
135 Fatal(
"Main",
"FairMedium RPCglass not found");
136 geoBuild->createMedium(mRPCglass);
139 Fatal(
"Main",
"Medium RPCglass not found");
141 FairGeoMedium* mRPCgas = geoMedia->getMedium(
"RPCgas");
143 Fatal(
"Main",
"FairMedium RPCgas not found");
144 geoBuild->createMedium(mRPCgas);
147 Fatal(
"Main",
"Medium RPCgas not found");
150 FairGeoMedium* matAl = geoMedia->getMedium(
"aluminium");
152 Fatal(
"Main",
"FairMedium aluminium not found");
153 geoBuild->createMedium(matAl);
156 Fatal(
"Main",
"Medium aluminium not found");
159 FairGeoMedium* matG10 = geoMedia->getMedium(
"G10");
161 Fatal(
"Main",
"FairMedium G10 not found");
162 geoBuild->createMedium(matG10);
165 Fatal(
"Main",
"Medium G10 not found");
171 gGeoMan->SetName(geoDetectorName +
"_geom");
189 sprintf(name,
"Module_%d_PosTOF2_trans",
i + 1);
194 sprintf(name,
"GlassLayer1PosTOF2_trans");
198 sprintf(name,
"GasLayerPosTOF2_trans");
202 sprintf(name,
"GlassLayer2PosTOF2_trans");
206 sprintf(name,
"G10LayerPosTOF2_trans");
218 char nTOF2ModuleS[2][32] = {
"TOF2ChamberS0",
"TOF2ChamberS1"};
219 char nTOF2GlassVolumeS[2][32] = {
"TOF2GlassVolumeS0",
"TOF2GlassVolumeS1"};
220 char nTOF2G10VolumeS[2][32] = {
"TOF2G10VolumeS0",
"TOF2G10VolumeS1"};
221 char nTOF2ActiveGasVolumeS[2][32] = {
"TOF2ActiveGasVolumeS0",
"TOF2ActiveGasVolumeS1"};
222 char nTOF2ModuleV[2][32] = {
"TOF2ChamberV0",
"TOF2ChamberV1"};
223 char nTOF2GlassVolumeV[2][32] = {
"TOF2GlassVolumeV0",
"TOF2GlassVolumeV1"};
224 char nTOF2G10VolumeV[2][32] = {
"TOF2G10VolumeV0",
"TOF2G10VolumeV1"};
225 char nTOF2ActiveGasVolumeV[2][32] = {
"TOF2ActiveGasVolumeV0",
"TOF2ActiveGasVolumeV1"};
235 int nstr[2] = {32, 16};
236 for (
int i = 0;
i < 2;
i++) {
250 TOF2ModuleV[
i] =
new TGeoVolume(nTOF2ModuleV[
i], TOF2ModuleS[
i]);
256 TOF2GlassVolumeV[
i] =
new TGeoVolume(nTOF2GlassVolumeV[
i], TOF2GlassVolumeS[
i]);
260 TOF2ActiveGasVolumeV[
i] =
new TGeoVolume(nTOF2ActiveGasVolumeV[
i], TOF2ActiveGasVolumeS[
i]);
261 TOF2ActiveGasVolumeV[
i]->
SetMedium(pMedRPCgas);
263 TOF2ActiveGasVolumeV[
i]->
Divide(
"ActiveGasStrip", 2, nstr[
i], 0, -1);
265 TOF2G10VolumeV[
i] =
new TGeoVolume(nTOF2G10VolumeV[
i], TOF2G10VolumeS[
i]);
269 TOF2ModuleV[
i]->
AddNode(TOF2GlassVolumeV[
i], 1, GlassLayer1PosTOF2_trans);
270 TOF2ModuleV[
i]->
AddNode(TOF2ActiveGasVolumeV[
i], 1, GasLayerPosTOF2_trans);
271 TOF2ModuleV[
i]->
AddNode(TOF2GlassVolumeV[
i], 2, GlassLayer2PosTOF2_trans);
272 TOF2ModuleV[
i]->
AddNode(TOF2G10VolumeV[
i], 1, G10LayerPosTOF2_trans);
280 TOF2Top->AddNode(TOF2ModuleV[
chtype[
i]], nm[0] + 1, ModulePosTOF2_trans[
i]);
295 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");
308 if (strlen(geomfile) == 0) {
309 printf(
"TOF700 geometry file name not defined!\n");
312 if (strstr(geomfile,
"_run8"))
315 printf(
"Geometry file for early period (%s), but script for period 8 !\n", geomfile);
318 TString dir = getenv(
"VMCWORKDIR");
319 sprintf(fname,
"%s/geometry/%s", dir.
Data(), geomfile);
320 fg = fopen(fname,
"r");
322 printf(
"TOF700 geometry file %s open error!\n", fname);
325 if (!fgets(line1,
sizeof(line1), fg)) {
326 printf(
"TOF700 geometry file %s - first line read error!\n", fname);
330 printf(
"Wrong first line (not 4 numbers) in TOF700 geometry file %s\n", fname);
333 printf(
"Zoffs = %f\n",
zoffs);
337 while (fscanf(fg,
"%s %d %lf %lf %lf %lf %lf %lf\n", &ic[0], &
n, &step, &sy, &sx, &x, &y, &z) == 8) {
347 for (
int ns =
n - 1; ns >= 0; ns--) {
352 ycens[c][ns] = y / 10. +
yoffs - (
n - ns - 1) * step / 10.;
360 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);
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="")