46 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
50 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
51 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
53 TString medFile = geoPath +
"/geometry/media.geo";
54 geoFace->setMediaFile(medFile);
60 TString geoDetectorName =
"tof700";
61 TString geoDetectorVersion =
"run6";
62 geoFileName = geoPath +
"/geometry/" + geoDetectorName +
"_" + geoDetectorVersion +
".root";
78 Double_t xmin = 10000., ymin = 10000., zmin = 10000.;
79 Double_t xmax = -10000., ymax = -10000., zmax = -10000.;
108 Double_t TOF2_X = (TOF2_X_max + TOF2_X_min) / 2.;
109 Double_t TOF2_Y = (TOF2_Y_max + TOF2_Y_min) / 2.;
110 Double_t TOF2_Z = (TOF2_Z_max + TOF2_Z_min) / 2.;
113 FairGeoMedia* geoMedia = geoFace->getMedia();
114 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
116 FairGeoMedium* mAir = geoMedia->getMedium(
"air");
118 Fatal(
"Main",
"FairMedium air not found");
119 geoBuild->createMedium(mAir);
122 Fatal(
"Main",
"Medium air not found");
124 FairGeoMedium* mRPCglass = geoMedia->getMedium(
"RPCglass");
126 Fatal(
"Main",
"FairMedium RPCglass not found");
127 geoBuild->createMedium(mRPCglass);
130 Fatal(
"Main",
"Medium RPCglass not found");
132 FairGeoMedium* mRPCgas = geoMedia->getMedium(
"RPCgas");
134 Fatal(
"Main",
"FairMedium RPCgas not found");
135 geoBuild->createMedium(mRPCgas);
138 Fatal(
"Main",
"Medium RPCgas not found");
141 FairGeoMedium* matAl = geoMedia->getMedium(
"aluminium");
143 Fatal(
"Main",
"FairMedium aluminium not found");
144 geoBuild->createMedium(matAl);
147 Fatal(
"Main",
"Medium aluminium not found");
150 FairGeoMedium* matG10 = geoMedia->getMedium(
"G10");
152 Fatal(
"Main",
"FairMedium G10 not found");
153 geoBuild->createMedium(matG10);
156 Fatal(
"Main",
"Medium G10 not found");
162 gGeoMan->SetName(geoDetectorName +
"_geom");
171 TOF2Top->SetMedium(pMedAir);
180 sprintf(name,
"Module_%d_PosTOF2_trans",
i + 1);
185 sprintf(name,
"GlassLayer1PosTOF2_trans");
186 GlassLayer1PosTOF2_trans =
new TGeoTranslation(name, 0., 0., GlassLayer1Pos);
189 sprintf(name,
"GasLayerPosTOF2_trans");
190 GasLayerPosTOF2_trans =
new TGeoTranslation(name, 0., 0., GasLayerPos);
193 sprintf(name,
"GlassLayer2PosTOF2_trans");
194 GlassLayer2PosTOF2_trans =
new TGeoTranslation(name, 0., 0., GlassLayer2Pos);
197 sprintf(name,
"G10LayerPosTOF2_trans");
198 G10LayerPosTOF2_trans =
new TGeoTranslation(name, 0., 0., G10LayerPos);
209 char nTOF2ModuleS[2][32] = {
"TOF2ChamberS0",
"TOF2ChamberS1"};
210 char nTOF2GlassVolumeS[2][32] = {
"TOF2GlassVolumeS0",
"TOF2GlassVolumeS1"};
211 char nTOF2G10VolumeS[2][32] = {
"TOF2G10VolumeS0",
"TOF2G10VolumeS1"};
212 char nTOF2ActiveGasVolumeS[2][32] = {
"TOF2ActiveGasVolumeS0",
"TOF2ActiveGasVolumeS1"};
213 char nTOF2ModuleV[2][32] = {
"TOF2ChamberV0",
"TOF2ChamberV1"};
214 char nTOF2GlassVolumeV[2][32] = {
"TOF2GlassVolumeV0",
"TOF2GlassVolumeV1"};
215 char nTOF2G10VolumeV[2][32] = {
"TOF2G10VolumeV0",
"TOF2G10VolumeV1"};
216 char nTOF2ActiveGasVolumeV[2][32] = {
"TOF2ActiveGasVolumeV0",
"TOF2ActiveGasVolumeV1"};
226 int nstr[2] = {32, 16};
227 for (
int i = 0;
i < 2;
i++) {
241 TOF2ModuleV[
i] =
new TGeoVolume(nTOF2ModuleV[
i], TOF2ModuleS[
i]);
247 TOF2GlassVolumeV[
i] =
new TGeoVolume(nTOF2GlassVolumeV[
i], TOF2GlassVolumeS[
i]);
251 TOF2ActiveGasVolumeV[
i] =
new TGeoVolume(nTOF2ActiveGasVolumeV[
i], TOF2ActiveGasVolumeS[
i]);
252 TOF2ActiveGasVolumeV[
i]->
SetMedium(pMedRPCgas);
254 TOF2ActiveGasVolumeV[
i]->
Divide(
"ActiveGasStrip", 2, nstr[
i], 0, -1);
256 TOF2G10VolumeV[
i] =
new TGeoVolume(nTOF2G10VolumeV[
i], TOF2G10VolumeS[
i]);
260 TOF2ModuleV[
i]->
AddNode(TOF2GlassVolumeV[
i], 1, GlassLayer1PosTOF2_trans);
261 TOF2ModuleV[
i]->
AddNode(TOF2ActiveGasVolumeV[
i], 1, GasLayerPosTOF2_trans);
262 TOF2ModuleV[
i]->
AddNode(TOF2GlassVolumeV[
i], 2, GlassLayer2PosTOF2_trans);
263 TOF2ModuleV[
i]->
AddNode(TOF2G10VolumeV[
i], 1, G10LayerPosTOF2_trans);
271 TOF2Top->AddNode(TOF2ModuleV[
chtype[
i]], nm[0] + 1, ModulePosTOF2_trans[
i]);
284 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");
296 if (strlen(geomfile) == 0) {
297 printf(
"TOF700 geometry file name not defined!\n");
300 TString dir = getenv(
"VMCWORKDIR");
301 sprintf(fname,
"%s/geometry/%s", dir.
Data(), geomfile);
302 fg = fopen(fname,
"r");
304 printf(
"TOF700 geometry file %s open error!\n", fname);
308 printf(
"Wrong first line in TOF700 geometry file %s\n", fname);
311 printf(
"Zoffs = %f\n",
zoffs);
315 while (fscanf(fg,
"%s %d %lf %lf %lf %lf %lf %lf\n", &ic[0], &
n, &step, &sy, &sx, &x, &y, &z) == 8) {
325 for (
int ns =
n - 1; ns >= 0; ns--) {
327 ycens[c][ns] = y / 10. +
yoffs - (
n - ns - 1) * step / 10.;
335 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="")