88 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
92 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
93 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
95 TString medFile = geoPath +
"/geometry/media.geo";
96 geoFace->setMediaFile(medFile);
102 const TString geoDetectorName =
"GEMS";
103 const TString geoDetectorVersion =
"v2";
104 const TString geoFileName = geoPath +
"/geometry/" + geoDetectorName +
"_" + geoDetectorVersion +
".root";
108 FairGeoMedia* geoMedia = geoFace->getMedia();
109 FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
111 FairGeoMedium* mAir = geoMedia->getMedium(
"air");
113 Fatal(
"Main",
"FairMedium air not found");
114 geoBuild->createMedium(mAir);
117 Fatal(
"Main",
"Medium air not found");
119 FairGeoMedium* mCarbon = geoMedia->getMedium(
"carbon");
121 Fatal(
"Main",
"FairMedium carbon not found");
122 geoBuild->createMedium(mCarbon);
125 Fatal(
"Main",
"Medium carbon not found");
127 FairGeoMedium* mFiberGlass = geoMedia->getMedium(
"fiberglass");
129 Fatal(
"Main",
"FairMedium fiberglass not found");
130 geoBuild->createMedium(mFiberGlass);
133 Fatal(
"Main",
"Medium fiberglass not found");
135 FairGeoMedium* mArCO27030 = geoMedia->getMedium(
"arco27030");
137 Fatal(
"Main",
"FairMedium arco27030 not found");
138 geoBuild->createMedium(mArCO27030);
141 Fatal(
"Main",
"Medium arco27030 not found");
147 gGeoMan->SetName(geoDetectorName +
"_geom");
208 Int_t NHorizontalSpacers =
210 Int_t NVerticalSpacers =
213 YSizeSmallPart -= (
Int_t)YSizeSmallPart;
216 HorizontalSpacerS[iStation] =
219 HorizontalSpacerV[iStation] =
new TGeoVolume(
"HorizontalSpacerV", HorizontalSpacerS[iStation]);
220 HorizontalSpacerV[iStation]->
SetMedium(pMedCarbon);
224 VerticalSpacerPartS[iStation] =
226 VerticalSpacerPartV[iStation] =
new TGeoVolume(
"VerticalSpacerPartV", VerticalSpacerPartS[iStation]);
227 VerticalSpacerPartV[iStation]->
SetMedium(pMedCarbon);
231 VerticalSpacerSmallPartS[iStation] =
233 VerticalSpacerSmallPartV[iStation] =
234 new TGeoVolume(
"VerticalSpacerSmallPartV", VerticalSpacerSmallPartS[iStation]);
235 VerticalSpacerSmallPartV[iStation]->
SetMedium(pMedCarbon);
241 SpacerBoxV[iStation][iModule]->
SetMedium(pMedArCO27030);
245 for (
Int_t ihspacer = 0; ihspacer < NHorizontalSpacers; ihspacer++) {
248 SpacerBoxV[iStation][iModule]->
AddNode(HorizontalSpacerV[iStation], hpart_cnt,
252 for (
Int_t ivspacer = 0; ivspacer < NVerticalSpacers; ivspacer++) {
257 SpacerBoxV[iStation][iModule]->
AddNode(VerticalSpacerPartV[iStation], vpart_cnt,
261 if (ihspacer == NHorizontalSpacers - 1) {
265 SpacerBoxV[iStation][iModule]->
AddNode(VerticalSpacerSmallPartV[iStation], ivspacer,
273 SensitiveVolumeS[iStation] =
277 SensitiveVolumeV[iStation][iModule] =
new TGeoVolume(
"SensitiveVolume_SensorV", SensitiveVolumeS[iStation]);
278 SensitiveVolumeV[iStation][iModule]->
SetMedium(pMedArCO27030);
287 SpacerBoxVRot[iModule]->
SetAngles(0, 0, 0);
291 SpacerBoxVRot[iModule]->
SetAngles(0, 180, 180);
295 SpacerBoxVRot[iModule]->
SetAngles(180, 0, 0);
299 SpacerBoxVRot[iModule]->
SetAngles(0, 180, 0);
304 SensitiveVolumeV[iStation][iModule]->
AddNode(SpacerBoxV[iStation][iModule], iModule,
305 SpacerBoxVRot[iModule]);
309 VerticalOuterFrameS[iStation] =
311 VerticalOuterFrameV[iStation] =
new TGeoVolume(
"VerticalOuterFrameV", VerticalOuterFrameS[iStation]);
312 VerticalOuterFrameV[iStation]->
SetMedium(pMedFiberGlass);
316 HorizontalOuterFrameS[iStation] =
319 HorizontalOuterFrameV[iStation] =
new TGeoVolume(
"HorizontalOuterFrameV", HorizontalOuterFrameS[iStation]);
320 HorizontalOuterFrameV[iStation]->
SetMedium(pMedFiberGlass);
324 HorizontalInnerFrameS[iStation] =
327 HorizontalInnerFrameV[iStation] =
new TGeoVolume(
"HorizontalInnerFrameV", HorizontalInnerFrameS[iStation]);
328 HorizontalInnerFrameV[iStation]->
SetMedium(pMedFiberGlass);
335 VerticalInnerFrameV[iStation] =
new TGeoVolume(
"VerticalInnerFrameV", VerticalInnerFrameS[iStation]);
336 VerticalInnerFrameV[iStation]->
SetMedium(pMedFiberGlass);
343 FrameBoxV[iStation][iModule]->
SetMedium(pMedAir);
345 VerticalOuterFrameVPosition[iStation][iModule] =
new TGeoTranslation();
346 HorizontalOuterFrameVPosition[iStation][iModule] =
new TGeoTranslation();
347 HorizontalInnerFrameVPosition[iStation][iModule] =
new TGeoTranslation();
348 VerticalInnerFrameVPosition[iStation][iModule] =
new TGeoTranslation();
408 FrameBoxV[iStation][iModule]->
AddNode(VerticalOuterFrameV[iStation], iModule,
409 VerticalOuterFrameVPosition[iStation][iModule]);
410 FrameBoxV[iStation][iModule]->
AddNode(HorizontalOuterFrameV[iStation], iModule,
411 HorizontalOuterFrameVPosition[iStation][iModule]);
412 FrameBoxV[iStation][iModule]->
AddNode(HorizontalInnerFrameV[iStation], iModule,
413 HorizontalInnerFrameVPosition[iStation][iModule]);
414 FrameBoxV[iStation][iModule]->
AddNode(VerticalInnerFrameV[iStation], iModule,
415 VerticalInnerFrameVPosition[iStation][iModule]);
423 ModuleV[iStation][iModule] =
new TGeoVolume(
"ModuleV", ModuleS[iStation]);
424 ModuleV[iStation][iModule]->
SetMedium(pMedAir);
469 ModuleV[iStation][iModule]->
AddNode(FrameBoxV[iStation][iModule], iModule);
470 ModuleV[iStation][iModule]->
AddNode(SensitiveVolumeV[iStation][iModule], 0,
471 SensitiveVolumePosition[iStation][iModule]);
476 SolidName += iStation;
482 SolidName =
"BeamPipeHole";
483 SolidName += iStation;
485 BeamPipeHoleS[iStation] =
490 BooleanExpression +=
"-";
491 BooleanExpression += BeamPipeHoleS[iStation]->
GetName();
492 StationWithHoleS[iStation] =
new TGeoCompositeShape(
"StationWithHoleS", BooleanExpression);
493 StationS[iStation] = StationWithHoleS[iStation];
495 TString VolumeName =
"Station";
496 VolumeName += iStation;
498 StationV[iStation] =
new TGeoVolume(VolumeName, StationS[iStation]);
539 StationV[iStation]->
AddNode(ModuleV[iStation][iModule], iModule, ModulePosition[iStation][iModule]);
555 gGeoMan->CheckOverlaps(0.0001);
559 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");