40   TFile* 
fi = 
new TFile(outfile,
"RECREATE");  
 
   42   FairGeoLoader* 
geoLoad = 
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
 
   43   FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
 
   44   TString workDir = gSystem->Getenv(
"VMCWORKDIR");
 
   45   workDir+=
"/geometry/media_pnd.geo";
 
   46   geoFace->setMediaFile(workDir);
 
   50   FairGeoMedia *
Media =  geoFace->getMedia();
 
   51   FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
 
   58   Int_t 
nmed=geobuild->createMedium(CbmMediumAir);
 
   59   nmed=geobuild->createMedium(CbmMediumPWO);
 
   60   nmed=geobuild->createMedium(CbmMediumCarbon);
 
   61   nmed=geobuild->createMedium(CbmMediumAluminium);
 
   63   TGeoManager* 
gGeoMan = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
 
   68   TGeoVolume *
top = 
new TGeoVolumeAssembly(
"Emc4");
 
   70   gGeoMan->SetTopVolume(top);
 
   73   TGeoTranslation 
trSub;
 
   74   TGeoTranslation 
trBox; 
 
   88   TGeoVolume* 
QuarterVol = 
new TGeoVolumeAssembly(
"QuarterNewVol");
 
   91   TGeoVolume* 
SubunitVol = 
new TGeoVolumeAssembly(
"SubunitVol");
 
   92   TGeoVolume* 
SubunitVol1 = 
new TGeoVolumeAssembly(
"SubunitVol1");
 
   93   TGeoVolume* 
SubunitVol2 = 
new TGeoVolumeAssembly(
"SubunitVol2");
 
   94   TGeoVolume* 
SubunitVol3 = 
new TGeoVolumeAssembly(
"SubunitVol3");
 
   95   TGeoVolume* 
SubunitVol4 = 
new TGeoVolumeAssembly(
"SubunitVol4");
 
   96   TGeoVolume* 
SubunitVol5 = 
new TGeoVolumeAssembly(
"SubunitVol5");
 
   97   TGeoVolume* 
SubunitVol6 = 
new TGeoVolumeAssembly(
"SubunitVol6");
 
   98   TGeoVolume* 
SubunitVol7 = 
new TGeoVolumeAssembly(
"SubunitVol7");
 
   99   TGeoVolume* 
SubunitVol8 = 
new TGeoVolumeAssembly(
"SubunitVol8");
 
  100   TGeoVolume* 
SubunitVol9 = 
new TGeoVolumeAssembly(
"SubunitVol9");
 
  103   TGeoVolume* 
BoxVol = 
new TGeoVolumeAssembly(
"BoxVol");
 
  104   TGeoVolume* 
BoxVol1 = 
new TGeoVolumeAssembly(
"BoxVol1");
 
  105   TGeoVolume* 
BoxVol2 = 
new TGeoVolumeAssembly(
"BoxVol2");
 
  106   TGeoVolume* 
BoxVol3 = 
new TGeoVolumeAssembly(
"BoxVol3");
 
  107   TGeoVolume* 
BoxVol4 = 
new TGeoVolumeAssembly(
"BoxVol4");
 
  108   TGeoVolume* 
BoxVol5 = 
new TGeoVolumeAssembly(
"BoxVol5");
 
  109   TGeoVolume* 
BoxVol6 = 
new TGeoVolumeAssembly(
"BoxVol6");
 
  123   name = 
"CrystalShape";
 
  124   CrystalShape = 
new TGeoBBox(name,0.5*kWidth,0.5*kHeight,0.5*kLength,0);
 
  128   CrystalVol = 
new TGeoVolume(name,CrystalShape,gGeoMan->GetMedium(medium));
 
  133   CrystalVol->SetLineColor(4);
 
  136     cout << 
"         ----->  CRYSTAL number: "<< k << endl;
 
  138         trCrystal = TGeoTranslation(0.5*kSizeOfCrys + 0.5*kCrystalCrystal,0.5*kSizeOfCrys + 0.5*kCrystalCrystal,0.);
 
  139         rotCrystal = TGeoRotation(); 
 
  140         rotCrystal.RotateZ(0.);
 
  142         trCrystal= TGeoTranslation(-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,0.); 
 
  143         rotCrystal = TGeoRotation();  
 
  144         rotCrystal.RotateZ(180.);
 
  146         trCrystal= TGeoTranslation(-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,0.5*kSizeOfCrys + 0.5*kCrystalCrystal,0.); 
 
  147         rotCrystal = TGeoRotation();  
 
  148         rotCrystal.RotateZ(90.);
 
  150         trCrystal= TGeoTranslation(0.5*kSizeOfCrys + 0.5*kCrystalCrystal,-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,0.); 
 
  151         rotCrystal = TGeoRotation(); 
 
  152         rotCrystal.RotateZ(270.);
 
  157     BoxVol->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  160       BoxVol4->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  161       BoxVol5->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  164       BoxVol1->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  165       BoxVol2->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  166       BoxVol3->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  167       BoxVol6->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  170       BoxVol3->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  171       BoxVol4->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  172       BoxVol6->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  175       BoxVol1->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  176       BoxVol3->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  177       BoxVol5->AddNode(CrystalVol,k,
new TGeoCombiTrans(trCrystal,rotCrystal));
 
  185     cout << 
"*** BOX number: " << 
b <<endl;
 
  187       trBox = TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  188                                   kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  192       trBox = TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  193                                   -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  197       trBox = TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  198                                   -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  202       trBox = TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  203                                   kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  207     rotBox = TGeoRotation();
 
  211     SubunitVol->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  215       SubunitVol1->AddNode(BoxVol1,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  216       SubunitVol4->AddNode(BoxVol2,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  217       SubunitVol6->AddNode(BoxVol6,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  218       SubunitVol7->AddNode(BoxVol4,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  219       SubunitVol8->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  220       SubunitVol9->AddNode(BoxVol5,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  223       SubunitVol1->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  224       SubunitVol2->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  225       SubunitVol3->AddNode(BoxVol2,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  226       SubunitVol4->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  227       SubunitVol5->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  228       SubunitVol6->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  231       SubunitVol1->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  232       SubunitVol2->AddNode(BoxVol3,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  233       SubunitVol4->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  234       SubunitVol5->AddNode(BoxVol2,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  235       SubunitVol6->AddNode(BoxVol6,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  236       SubunitVol8->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  239       SubunitVol1->AddNode(BoxVol1,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  240       SubunitVol2->AddNode(BoxVol2,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  241       SubunitVol4->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  242       SubunitVol5->AddNode(BoxVol3,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  243       SubunitVol6->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  244       SubunitVol8->AddNode(BoxVol,
b,
new TGeoCombiTrans(trBox,rotBox));
 
  257         if (
row==3  && 
col==3) flag=0; 
 
  258         if (
row==0  && 
col==0) flag=0; 
 
  261         if (
row==0  && 
col==1) flag=-1; 
 
  262         if (
row==0  && 
col==3) flag=-2; 
 
  263         if (
row==1  && 
col==0) flag=-3; 
 
  264         if (
row==1  && 
col==1) flag=-4; 
 
  265         if (
row==1  && 
col==3) flag=-5; 
 
  266         if (
row==2  && 
col==2) flag=-6; 
 
  267         if (
row==2  && 
col==3) flag=-7; 
 
  268         if (
row==3  && 
col==0) flag=-8; 
 
  269         if (
row==3  && 
col==1) flag=-9; 
 
  270         if (
row==3  && 
col==2) flag=-10; 
 
  275         trSub = TGeoTranslation(ShiftX, ShiftY, 0.);
 
  280             QuarterVol->AddNode(SubunitVol,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  282         else if (flag==-1){jj++;
 
  283             QuarterVol->AddNode(SubunitVol7,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  285         else if (flag==-2){jj++;
 
  286             QuarterVol->AddNode(SubunitVol1,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  288         else if (flag==-3){jj++;
 
  289             QuarterVol->AddNode(SubunitVol9,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  291         else if (flag==-4){jj++;
 
  292             QuarterVol->AddNode(SubunitVol8,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  294         else if (flag==-5){jj++;
 
  295             QuarterVol->AddNode(SubunitVol2,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  297         else if (flag==-6){jj++;
 
  298             QuarterVol->AddNode(SubunitVol4,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  300         else if (flag==-7){jj++;
 
  301             QuarterVol->AddNode(SubunitVol3,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  303         else if (flag==-8){jj++;
 
  304             QuarterVol->AddNode(SubunitVol6,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  306         else if (flag==-9){jj++;
 
  307             QuarterVol->AddNode(SubunitVol5,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  309         else if (flag==-10){jj++;
 
  310             QuarterVol->AddNode(SubunitVol3,jj,
new TGeoCombiTrans(trSub,rotSub));
 
  319   trQuar = TGeoTranslation(0.,0.,0.);
 
  321   for (Int_t q=1; q<=4; q++){
 
  323       reflection.ReflectX(1);
 
  324       top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) );
 
  327       reflection.ReflectX(1);
 
  328       top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) ); 
 
  331       reflection.ReflectX(1);
 
  332       reflection.ReflectY(1);
 
  333       top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) ); 
 
  336       reflection.ReflectX(1);
 
  337       top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) ); 
 
  341   gGeoMan->CloseGeometry();
 
  343   cout << 
"********************************** \n";
 
  344   cout << 
"*** Checking overlaps for Emc4 *** \n";
 
  345   cout << 
"********************************** \n";
 
  346   gGeoMan->CheckOverlaps(0.001);
 
const Double_t kAlveoleAlveole
const Double_t kGluedAlveoleThickness
TGeoTranslation trCrystal
FairGeoMedium * CbmMediumCarbon
const Double_t kSizeOfCrys
const Double_t kCrystalCrystal
FairGeoMedium * CbmMediumAluminium
FairGeoBuilder * geobuild
TGeoCombiTrans reflection
const Int_t kNumOfBoxes4InSubunit
FairGeoMedium * CbmMediumAir
const Double_t kAlveoleThickness
const Int_t kNumOfCrystalsInBox2
FairGeoMedium * CbmMediumPWO
FairGeoInterface * geoFace
const Int_t kNumOfSubunit
const Double_t kCrystalAlveole
const Int_t kNumOfCrystalsInBox4
const Int_t kNumOfCrystals
const Int_t kNumOfQuarters