34   const Int_t     kNumOfQuarters = 1;       
 
   39   gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
 
   42   gSystem->Load(
"libGeoBase");
 
   43   gSystem->Load(
"libParBase");
 
   44   gSystem->Load(
"libBase");
 
   45   gSystem->Load(
"libPndData");
 
   46   gSystem->Load(
"libPassive");
 
   49   TFile* 
fi = 
new TFile(outfile,
"RECREATE");  
 
   51   FairGeoLoader* 
geoLoad = 
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
 
   52   FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
 
   53   geoFace->setMediaFile(
"/home/dkhaneft/Programs/PANDAroot/trunk/geometry/media_pnd.geo");
 
   57   FairGeoMedia *
Media =  geoFace->getMedia();
 
   58   FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
 
   65   Int_t 
nmed=geobuild->createMedium(CbmMediumAir);
 
   66   nmed=geobuild->createMedium(CbmMediumPWO);
 
   67   nmed=geobuild->createMedium(CbmMediumCarbon);
 
   68   nmed=geobuild->createMedium(CbmMediumAluminium);
 
   70   TGeoManager* 
gGeoMan = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
 
   76   TGeoVolume *
top = 
new TGeoVolumeAssembly(
"Emc4");
 
   78   gGeoMan->SetTopVolume(top);
 
  118   cout<< 
"-----------------------------------------------> Quarter VOLUME " <<endl;
 
  119   name = 
"QuarterShape";
 
  120   QuarterShape = 
new TGeoBBox(name,sizeOfQuar*0.5,sizeOfQuar*0.5,10.5,0);
 
  122   name = 
"QuarterNewVol";
 
  125   QuarterVol = 
new TGeoVolumeAssembly(name);
 
  128   name = 
"SubunitShape";
 
  129   SubunitShape = 
new TGeoBBox(name,2*kWidth + 2*kAlveoleThickness + kCrystalCrystal + 2*kCrystalAlveole,
 
  130                                    2*kHeight + 2*kAlveoleThickness + kCrystalCrystal + 2*kCrystalAlveole,
 
  137   name1 = 
"SubunitVol1";
 
  138   name2 = 
"SubunitVol2";
 
  139   name3 = 
"SubunitVol3";
 
  140   name4 = 
"SubunitVol4";
 
  141   name5 = 
"SubunitVol5";
 
  142   name6 = 
"SubunitVol6";
 
  143   name7 = 
"SubunitVol7";
 
  144   name8 = 
"SubunitVol8";
 
  145   name9 = 
"SubunitVol9";
 
  146   SubunitVol = 
new TGeoVolumeAssembly(name);
 
  147   SubunitVol1 = 
new TGeoVolumeAssembly(name1);
 
  148   SubunitVol2 = 
new TGeoVolumeAssembly(name2);
 
  149   SubunitVol3 = 
new TGeoVolumeAssembly(name3);
 
  150   SubunitVol4 = 
new TGeoVolumeAssembly(name4);
 
  151   SubunitVol5 = 
new TGeoVolumeAssembly(name5);
 
  152   SubunitVol6 = 
new TGeoVolumeAssembly(name6);
 
  153   SubunitVol7 = 
new TGeoVolumeAssembly(name7);
 
  154   SubunitVol8 = 
new TGeoVolumeAssembly(name8);
 
  155   SubunitVol9 = 
new TGeoVolumeAssembly(name9);
 
  159   BoxShape = 
new TGeoBBox(name,kWidth + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  160                                kHeight + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  167   BoxVol = 
new TGeoVolumeAssembly(name);
 
  175   BoxVol1 = 
new TGeoVolumeAssembly(name1);
 
  176   BoxVol2 = 
new TGeoVolumeAssembly(name2);
 
  177   BoxVol3 = 
new TGeoVolumeAssembly(name3);
 
  178   BoxVol4 = 
new TGeoVolumeAssembly(name4);
 
  179   BoxVol5 = 
new TGeoVolumeAssembly(name5);
 
  180   BoxVol6 = 
new TGeoVolumeAssembly(name6);
 
  188     cout << 
"----------------> BOX number: " << 
b <<endl;
 
  190       trBox = 
new TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  191                                   kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  193       rotBox = 
new TGeoRotation();
 
  198       trBox = 
new TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  199                                   -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  201       rotBox = 
new TGeoRotation(); 
 
  206       trBox = 
new TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  207                                   -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  209       rotBox = 
new TGeoRotation();
 
  214       trBox = 
new TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
 
  215                                   kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
 
  217       rotBox = 
new TGeoRotation();
 
  221     TGeoCombiTrans* trrotBox= 
new TGeoCombiTrans(trBox,rotBox); 
 
  226     trrotBox->SetName(name);
 
  227     trrotBox->RegisterYourself();
 
  229     SubunitVol->AddNode(BoxVol,
b,trrotBox);
 
  235       trrotBox->SetName(name);
 
  236       trrotBox->RegisterYourself();
 
  238       SubunitVol1->AddNode(BoxVol1,
b,trrotBox);
 
  239       SubunitVol4->AddNode(BoxVol2,
b,trrotBox);
 
  240       SubunitVol6->AddNode(BoxVol6,
b,trrotBox);
 
  241       SubunitVol7->AddNode(BoxVol4,
b,trrotBox);
 
  242       SubunitVol8->AddNode(BoxVol,
b,trrotBox);
 
  243       SubunitVol9->AddNode(BoxVol5,
b,trrotBox);
 
  247       trrotBox->SetName(name);
 
  248       trrotBox->RegisterYourself();
 
  250       SubunitVol1->AddNode(BoxVol,
b,trrotBox);
 
  251       SubunitVol2->AddNode(BoxVol,
b,trrotBox);
 
  252       SubunitVol3->AddNode(BoxVol2,
b,trrotBox);
 
  253       SubunitVol4->AddNode(BoxVol,
b,trrotBox);
 
  254       SubunitVol5->AddNode(BoxVol,
b,trrotBox);
 
  255       SubunitVol6->AddNode(BoxVol,
b,trrotBox);
 
  259       trrotBox->SetName(name);
 
  260       trrotBox->RegisterYourself();
 
  262       SubunitVol1->AddNode(BoxVol,
b,trrotBox);
 
  263       SubunitVol2->AddNode(BoxVol3,
b,trrotBox);
 
  264       SubunitVol4->AddNode(BoxVol,
b,trrotBox);
 
  265       SubunitVol5->AddNode(BoxVol2,
b,trrotBox);
 
  266       SubunitVol6->AddNode(BoxVol6,
b,trrotBox);
 
  267       SubunitVol8->AddNode(BoxVol,
b,trrotBox);
 
  271       trrotBox->SetName(name);
 
  272       trrotBox->RegisterYourself();
 
  274       SubunitVol1->AddNode(BoxVol1,
b,trrotBox);
 
  275       SubunitVol2->AddNode(BoxVol2,
b,trrotBox);
 
  276       SubunitVol4->AddNode(BoxVol,
b,trrotBox);
 
  277       SubunitVol5->AddNode(BoxVol3,
b,trrotBox);
 
  278       SubunitVol6->AddNode(BoxVol,
b,trrotBox);
 
  279       SubunitVol8->AddNode(BoxVol,
b,trrotBox);
 
  283   name = 
"CrystalShape";
 
  284   CrystalShape = 
new TGeoBBox(name,0.5*kWidth,0.5*kHeight,kLength,0);
 
  288   CrystalVol = 
new TGeoVolume(name,CrystalShape,gGeoMan->GetMedium(medium));
 
  293   CrystalVol->SetLineColor(4);
 
  296     cout << 
"         ----->  CRYSTAL number: "<< k << endl;
 
  298         trCrystal = 
new TGeoTranslation(kSizeOfCrys/2. + 0.5*kCrystalCrystal,kSizeOfCrys/2. + 0.5*kCrystalCrystal,0.);
 
  299         rotCrystal = 
new TGeoRotation(); 
 
  301         trCrystal= 
new TGeoTranslation(-kSizeOfCrys/2. - 0.5*kCrystalCrystal,-kSizeOfCrys/2. - 0.5*kCrystalCrystal,0.); 
 
  302         rotCrystal = 
new TGeoRotation();  
 
  303         rotCrystal.RotateZ(180.);      
 
  305         trCrystal= 
new TGeoTranslation(-kSizeOfCrys/2. - 0.5*kCrystalCrystal,kSizeOfCrys/2. + 0.5*kCrystalCrystal,0.); 
 
  306         rotCrystal = 
new TGeoRotation();  
 
  307         rotCrystal.RotateZ(90.);       
 
  309         trCrystal= 
new TGeoTranslation(kSizeOfCrys/2. + 0.5*kCrystalCrystal,-kSizeOfCrys/2. - 0.5*kCrystalCrystal,0.); 
 
  310         rotCrystal = 
new TGeoRotation(); 
 
  311         rotCrystal.RotateZ(270.);      
 
  314     TGeoCombiTrans* trrotCrystal= 
new TGeoCombiTrans(trCrystal,rotCrystal); 
 
  318     trrotCrystal->SetName(name);
 
  319     trrotCrystal->RegisterYourself();
 
  321     BoxVol->AddNode(CrystalVol,k,trrotCrystal);
 
  325       trrotCrystal->SetName(name);
 
  326       trrotCrystal->RegisterYourself();
 
  328       BoxVol4->AddNode(CrystalVol,k,trrotCrystal);
 
  329       BoxVol5->AddNode(CrystalVol,k,trrotCrystal);
 
  333       trrotCrystal->SetName(name);
 
  334       trrotCrystal->RegisterYourself();
 
  336       BoxVol1->AddNode(CrystalVol,k,trrotCrystal);
 
  337       BoxVol2->AddNode(CrystalVol,k,trrotCrystal);
 
  338       BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
 
  339       BoxVol6->AddNode(CrystalVol,k,trrotCrystal);
 
  343       trrotCrystal->SetName(name);
 
  344       trrotCrystal->RegisterYourself();
 
  346       BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
 
  347       BoxVol4->AddNode(CrystalVol,k,trrotCrystal);
 
  348       BoxVol6->AddNode(CrystalVol,k,trrotCrystal);
 
  352       trrotCrystal->SetName(name);
 
  353       trrotCrystal->RegisterYourself();
 
  355       BoxVol1->AddNode(CrystalVol,k,trrotCrystal);
 
  356       BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
 
  357       BoxVol5->AddNode(CrystalVol,k,trrotCrystal);
 
  368         if (
row==3  && 
col==3) flag=0; 
 
  369         if (
row==0  && 
col==0) flag=0; 
 
  372         if (
row==0  && 
col==1) flag=-1; 
 
  373         if (
row==0  && 
col==3) flag=-2; 
 
  374         if (
row==1  && 
col==0) flag=-3; 
 
  375         if (
row==1  && 
col==1) flag=-4; 
 
  376         if (
row==1  && 
col==3) flag=-5; 
 
  377         if (
row==2  && 
col==2) flag=-6; 
 
  378         if (
row==2  && 
col==3) flag=-7; 
 
  379         if (
row==3  && 
col==0) flag=-8; 
 
  380         if (
row==3  && 
col==1) flag=-9; 
 
  381         if (
row==3  && 
col==2) flag=-10; 
 
  386         trSub = 
new TGeoTranslation(ShiftX, ShiftY, 0.);
 
  388         TGeoCombiTrans* thAngle= 
new TGeoCombiTrans(trSub,rotSub); 
 
  391             QuarterVol->AddNode(SubunitVol,jj,thAngle);
 
  393         else if (flag==-1){jj++;
 
  394             QuarterVol->AddNode(SubunitVol7,jj,thAngle);
 
  396         else if (flag==-2){jj++;
 
  397             QuarterVol->AddNode(SubunitVol1,jj,thAngle);
 
  399         else if (flag==-3){jj++;
 
  400             QuarterVol->AddNode(SubunitVol9,jj,thAngle);
 
  402         else if (flag==-4){jj++;
 
  403             QuarterVol->AddNode(SubunitVol8,jj,thAngle);
 
  405         else if (flag==-5){jj++;
 
  406             QuarterVol->AddNode(SubunitVol2,jj,thAngle);
 
  408         else if (flag==-6){jj++;
 
  409             QuarterVol->AddNode(SubunitVol4,jj,thAngle);
 
  411         else if (flag==-7){jj++;
 
  412             QuarterVol->AddNode(SubunitVol3,jj,thAngle);
 
  414         else if (flag==-8){jj++;
 
  415             QuarterVol->AddNode(SubunitVol6,jj,thAngle);
 
  417         else if (flag==-9){jj++;
 
  418             QuarterVol->AddNode(SubunitVol5,jj,thAngle);
 
  420         else if (flag==-10){jj++;
 
  421             QuarterVol->AddNode(SubunitVol3,jj,thAngle);
 
  426   trQuar  = 
new TGeoTranslation(0.,0.,0.);
 
  427   rotQuar = 
new TGeoRotation();
 
  429   TGeoCombiTrans* 
trrotQuar= 
new TGeoCombiTrans(trQuar,rotQuar);    
 
  431   trrotQuar->SetName(name);
 
  432   trrotQuar->RegisterYourself();
 
  434   trrotQuar->ReflectX(1); 
 
  436   top->AddNode(QuarterVol,1,trrotQuar); 
 
  438   for (Int_t q=1; q<=3; q++){
 
  443       reflection.ReflectY(1); 
 
  444       reflection.ReflectX(1);
 
  445       ttt = 
new TGeoTranslation(0.,0.,0.);
 
  448       reflection.ReflectY(1); 
 
  449       reflection.ReflectX(1); 
 
  450       reflection.ReflectX(1);
 
  451       ttt = 
new TGeoTranslation(0.,0.,0.);
 
  454       reflection.ReflectX(1); 
 
  455       reflection.ReflectX(1); 
 
  456       ttt = 
new TGeoTranslation(0.,0.,0.);
 
  459     top->AddNode(QuarterVol,q+1,
new TGeoCombiTrans(ttt,reflection)); 
 
  462   gGeoMan->CloseGeometry();
 
FairGeoMedium * CbmMediumAir
TGeoTranslation trCrystal
const Double_t kAlveoleAlveole
const Double_t kGluedAlveoleThickness
const Int_t kNumOfQuarters
const Double_t kSizeOfCrys
FairGeoMedium * CbmMediumCarbon
FairGeoMedium * CbmMediumPWO
const Double_t kCrystalCrystal
TGeoManager * gGeoManager
TGeoCombiTrans reflection
const Double_t kAlveoleThickness
const Int_t kNumOfBoxes4InSubunit
FairGeoBuilder * geobuild
TGeoCombiTrans * trrotQuar
const Int_t kNumOfCrystalsInBox2
const Int_t kNumOfCrystals
FairGeoMedium * CbmMediumAluminium
const Int_t kNumOfSubunit
const Double_t kCrystalAlveole
const Int_t kNumOfCrystalsInBox4
FairGeoInterface * geoFace