93 gROOT->LoadMacro(
"$VMCWORKDIR/macro/run/bmnloadlibs.C");
97 FairGeoLoader* geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
98 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
100 TString medFile = geoPath +
"/geometry/media.geo";
101 geoFace->setMediaFile(medFile);
102 geoFace->readMedia();
107 const TString geoDetectorName =
"GEMS";
108 const TString geoDetectorVersion =
"v2_AZ";
109 const TString geoFileName = geoPath +
"/geometry/" + geoDetectorName +
"_" + geoDetectorVersion +
".root";
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* mCarbon = geoMedia->getMedium(
"carbon");
126 Fatal(
"Main",
"FairMedium carbon not found");
127 geoBuild->createMedium(mCarbon);
130 Fatal(
"Main",
"Medium carbon not found");
132 FairGeoMedium* mFiberGlass = geoMedia->getMedium(
"fiberglass");
134 Fatal(
"Main",
"FairMedium fiberglass not found");
135 geoBuild->createMedium(mFiberGlass);
138 Fatal(
"Main",
"Medium fiberglass not found");
141 FairGeoMedium* mArCO27030 = geoMedia->getMedium(
"titanium");
143 Fatal(
"Main",
"FairMedium arco27030 not found");
144 geoBuild->createMedium(mArCO27030);
148 Fatal(
"Main",
"Medium arco27030 not found");
154 gGeoMan->SetName(geoDetectorName +
"_geom");
278 SensitiveVolume1S[iStation] =
283 TString solidNameSensor =
"SensitiveVolume";
284 solidNameSensor += iStation;
285 solidNameSensor += iModule;
286 solidNameSensor +=
"S";
287 SensitiveVolumeS[iStation][iModule] =
291 dy = SensitiveVolumeS[iStation][iModule]->
GetDY();
293 transName += iStation;
294 transName += iModule;
298 else if (iModule == 2)
300 else if (iModule == 3)
302 shortPos[iStation][iModule] =
new TGeoTranslation(transName, ddx, ddy, 0.0);
303 gGeoMan->AddTransformation(shortPos[iStation][iModule]);
306 TString booleanExpression = solidNameSensor;
307 booleanExpression +=
"-(";
308 booleanExpression += SensitiveVolume1S[iStation]->
GetName();
309 booleanExpression +=
":";
310 booleanExpression += shortPos[iStation][iModule]->
GetName();
311 booleanExpression +=
")";
313 SensitiveVolumeS[iStation][iModule] = sensorCut;
316 SensitiveVolumeV[iStation][iModule] =
317 new TGeoVolume(
"SensitiveVolume_SensorV", SensitiveVolumeS[iStation][iModule]);
318 SensitiveVolumeV[iStation][iModule]->
SetMedium(pMedArCO27030);
327 SpacerBoxVRot[iModule]->
SetAngles(0, 0, 0);
331 SpacerBoxVRot[iModule]->
SetAngles(0, 180, 180);
335 SpacerBoxVRot[iModule]->
SetAngles(180, 0, 0);
339 SpacerBoxVRot[iModule]->
SetAngles(0, 180, 0);
350 SensitiveVolume1V[iStation] =
new TGeoVolume(
"SensitiveVolume_SensorSV", SensitiveVolume1S[iStation]);
353 SensitiveVolume1V[iStation]->
SetMedium(pMedArCO27030);
359 VerticalOuterFrameS[iStation] =
361 VerticalOuterFrameV[iStation] =
new TGeoVolume(
"VerticalOuterFrameV", VerticalOuterFrameS[iStation]);
363 VerticalOuterFrameV[iStation]->
SetMedium(pMedFiberGlass);
367 HorizontalOuterFrameS[iStation] =
370 HorizontalOuterFrameV[iStation] =
new TGeoVolume(
"HorizontalOuterFrameV", HorizontalOuterFrameS[iStation]);
372 HorizontalOuterFrameV[iStation]->
SetMedium(pMedFiberGlass);
376 HorizontalInnerFrameS[iStation] =
379 HorizontalInnerFrameV[iStation] =
new TGeoVolume(
"HorizontalInnerFrameV", HorizontalInnerFrameS[iStation]);
381 HorizontalInnerFrameV[iStation]->
SetMedium(pMedFiberGlass);
388 VerticalInnerFrameV[iStation] =
new TGeoVolume(
"VerticalInnerFrameV", VerticalInnerFrameS[iStation]);
390 VerticalInnerFrameV[iStation]->
SetMedium(pMedFiberGlass);
397 FrameBoxV[iStation][iModule]->
SetMedium(pMedAir);
399 VerticalOuterFrameVPosition[iStation][iModule] =
new TGeoTranslation();
400 HorizontalOuterFrameVPosition[iStation][iModule] =
new TGeoTranslation();
401 HorizontalInnerFrameVPosition[iStation][iModule] =
new TGeoTranslation();
402 VerticalInnerFrameVPosition[iStation][iModule] =
new TGeoTranslation();
462 FrameBoxV[iStation][iModule]->
AddNode(VerticalOuterFrameV[iStation], iModule,
463 VerticalOuterFrameVPosition[iStation][iModule]);
464 FrameBoxV[iStation][iModule]->
AddNode(HorizontalOuterFrameV[iStation], iModule,
465 HorizontalOuterFrameVPosition[iStation][iModule]);
466 FrameBoxV[iStation][iModule]->
AddNode(HorizontalInnerFrameV[iStation], iModule,
467 HorizontalInnerFrameVPosition[iStation][iModule]);
468 FrameBoxV[iStation][iModule]->
AddNode(VerticalInnerFrameV[iStation], iModule,
469 VerticalInnerFrameVPosition[iStation][iModule]);
477 ModuleV[iStation][iModule] =
new TGeoVolume(
"ModuleV", ModuleS[iStation]);
478 ModuleV[iStation][iModule]->
SetMedium(pMedAir);
487 transName += iStation;
488 transName += iModule;
491 shortStripPosition->
SetName(
"aaa");
532 ModuleV[iStation][iModule]->
AddNode(FrameBoxV[iStation][iModule], iModule);
533 ModuleV[iStation][iModule]->
AddNode(SensitiveVolumeV[iStation][iModule], 0,
534 SensitiveVolumePosition[iStation][iModule]);
535 shortStripPosition->
Add(SensitiveVolumePosition[iStation][iModule]);
536 ModuleV[iStation][iModule]->
AddNode(SensitiveVolume1V[iStation], 1, shortStripPosition);
541 SolidName += iStation;
547 SolidName =
"BeamPipeHole";
548 SolidName += iStation;
550 BeamPipeHoleS[iStation] =
555 BooleanExpression +=
"-";
556 BooleanExpression += BeamPipeHoleS[iStation]->
GetName();
557 StationWithHoleS[iStation] =
new TGeoCompositeShape(
"StationWithHoleS", BooleanExpression);
558 StationS[iStation] = StationWithHoleS[iStation];
560 TString VolumeName =
"Station";
561 VolumeName += iStation;
563 StationV[iStation] =
new TGeoVolume(VolumeName, StationS[iStation]);
608 StationV[iStation]->
AddNode(ModuleV[iStation][iModule], iModule, ModulePosition[iStation][iModule]);
624 gGeoMan->CheckOverlaps(0.0001);
628 TFile* geoFile =
new TFile(geoFileName,
"RECREATE");