FairRoot/PandaRoot
createRootGeoFileBwEnd_Str24.4.C
Go to the documentation of this file.
1 {
2  // This macro creates the Backward EndCap (BwEndCap) geometry
3  // of the EMC detector for PANDA.
4  // The straight crystals with the size of 24.4x24.4x200 mm^3 are used
5  //
6  // Autor: Dmitry Khaneft, Uni Minaz/GSI (10.05.2009)
7 
8  //-----------------------------
9  const Double_t kWidth = 2.44; // Width of crystal (cm)
10  const Double_t kHeight = 2.44; // Height of crystal (cm)
11  const Double_t kLength = 10.0; // Length of Crystal (cm)
12  const Double_t kSizeOfCrys = 2.44;
13 
14  const Double_t kAlveoleThickness = 0.02; // Thickness of alveole between Subunits (cm)
15  const Double_t kGluedAlveoleThickness = 0.04; // Thickness of glued alveole between boxes4 inside Subunits (cm)
16  const Double_t kCrystalCrystal = 0.06; // Distance Crystal-Crystal (cm)
17  const Double_t kAlveoleAlveole = 0.08; // Distance Alveole-Alveole (cm)
18  const Double_t kCrystalAlveole = 0.024; // Distance Crystal-Alveole (cm)
19 
20  const Int_t kNumOfQuarters = 4;
21  const Int_t kNumOfSubunit = 4;
22  const Int_t kNumOfBoxes4InSubunit = 4;
23  const Int_t kNumOfBoxes4 = 12;
24  const Int_t kNumOfBoxes2 = 10;
25  const Int_t kNumOfBoxes1 = 3;
26  const Int_t kNumOfCrystalsInBox4 = 4;
27  const Int_t kNumOfCrystalsInBox2 = 2;
28 
29  Double_t sizeOfBox1 = kWidth + 2*kAlveoleThickness + 2*kCrystalAlveole;
30  Double_t sizeOfBox2 = 2*kWidth + 2*kAlveoleThickness + 2*kCrystalAlveole + kCrystalCrystal; // Longer side
33 
34  const Int_t kNumOfQuarters = 1; // Number of Quarter - only 1 is created, next 3 are copies at the end of the file
35  const Int_t kNumOfBoxes = 4; // Numbers of Boxes in one Subunit
36  const Int_t kNumOfCrystals = 4; // Numbers of Crystals in one Box
37 
38  //--------------------------------------------------------------------
39  gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
40 
41  // Load this example libraries
42  gSystem->Load("libGeoBase");
43  gSystem->Load("libParBase");
44  gSystem->Load("libBase");
45  gSystem->Load("libPndData");
46  gSystem->Load("libPassive");
47 
48  TString outfile= "./emc_module4_StraightGeo24.4.root";
49  TFile* fi = new TFile(outfile,"RECREATE");
50 
51  FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
52  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
53  geoFace->setMediaFile("/home/dkhaneft/Programs/PANDAroot/trunk/geometry/media_pnd.geo");
54  geoFace->readMedia();
55  geoFace->print();
56 
57  FairGeoMedia *Media = geoFace->getMedia();
58  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
59 
60  FairGeoMedium *CbmMediumAir = Media->getMedium("air");
61  FairGeoMedium *CbmMediumPWO = Media->getMedium("PWO");
62  FairGeoMedium *CbmMediumCarbon = Media->getMedium("carbon");
63  FairGeoMedium *CbmMediumAluminium = Media->getMedium("aluminium");
64 
65  Int_t nmed=geobuild->createMedium(CbmMediumAir);
66  nmed=geobuild->createMedium(CbmMediumPWO);
67  nmed=geobuild->createMedium(CbmMediumCarbon);
68  nmed=geobuild->createMedium(CbmMediumAluminium);
69 
70  TGeoManager* gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
71 
72  //construct the overall box
73  Double_t sizeOfQuar = 37.644; // size of one Quarter (the same in X and Y direction)
74  // size of one Subunit (back side): 10.688*4 = 42.752 (cm) ???
75 
76  TGeoVolume *top = new TGeoVolumeAssembly("Emc4");
77 
78  gGeoMan->SetTopVolume(top);
79 
80  TGeoTranslation trQuar;
81  TGeoTranslation trSub;
82  TGeoTranslation trBox;
83  TGeoTranslation trCrystal;
84 
85  TGeoRotation rotQuar;
86  TGeoRotation rotSub;
87  TGeoRotation rotBox;
88  TGeoRotation rotCrystal;
89 
90  TGeoShape* QuarterShape;
91  TGeoShape* SubunitShape;
92  TGeoShape* BoxShape;
93  TGeoShape* CrystalShape;
94 
95  TGeoVolume* QuarterVol;
96  TGeoVolume* SubunitVol;
97  TGeoVolume* SubunitVol1;
98  TGeoVolume* SubunitVol2;
99  TGeoVolume* SubunitVol3;
100  TGeoVolume* SubunitVol4;
101  TGeoVolume* SubunitVol5;
102  TGeoVolume* SubunitVol6;
103  TGeoVolume* SubunitVol7;
104  TGeoVolume* SubunitVol8;
105  TGeoVolume* SubunitVol9;
106  TGeoVolume* BoxVol;
107  TGeoVolume* BoxVol1;
108  TGeoVolume* BoxVol2;
109  TGeoVolume* BoxVol3;
110  TGeoVolume* BoxVol4;
111  TGeoVolume* BoxVol5;
112  TGeoVolume* BoxVol6;
113  TGeoVolume* CrystalVol;
114 
116 
117  // ========== QUARTER (14 subunits) ===================
118  cout<< "-----------------------------------------------> Quarter VOLUME " <<endl;
119  name = "QuarterShape";
120  QuarterShape = new TGeoBBox(name,sizeOfQuar*0.5,sizeOfQuar*0.5,10.5,0);
121 
122  name = "QuarterNewVol";
123  TString medium="air";
124 
125  QuarterVol = new TGeoVolumeAssembly(name);
126 
127  // ========== SUBUNIT (16 crystals) ===================
128  name = "SubunitShape";
129  SubunitShape = new TGeoBBox(name,2*kWidth + 2*kAlveoleThickness + kCrystalCrystal + 2*kCrystalAlveole,
130  2*kHeight + 2*kAlveoleThickness + kCrystalCrystal + 2*kCrystalAlveole,
131  kLength,
132  0);
133 
134  TString medium="air";
135 
136  name = "SubunitVol";
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);
156 
157  // ========== BOX (4 crystals) ========================
158  name = "BoxShape";
159  BoxShape = new TGeoBBox(name,kWidth + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
160  kHeight + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
161  kLength,
162  0);
163 
164  TString medium="air";
165  name="BoxVol";
166 
167  BoxVol = new TGeoVolumeAssembly(name);
168 
169  name1="BoxVol1";
170  name2="BoxVol2";
171  name3="BoxVol3";
172  name4="BoxVol4";
173  name5="BoxVol5";
174  name6="BoxVol6";
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);
181 
182  // Translations and Rotations for Boxes are according to the local
183  // co-ordinate system, which is in the center of the Subunit.
184  // For the straight geometry, both, front & back sides are 24.4mm x 24.4mm,
185  // so, the angle = 0. (e.g. rotBox.RotateX(0.);)
186  for(Int_t b=0; b<kNumOfBoxes; b++){
187  cout << " " << endl;
188  cout << "----------------> BOX number: " << b <<endl;
189  if (b==0) {
190  trBox = new TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
191  kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
192  0.);
193  rotBox = new TGeoRotation();
194  rotBox.RotateX(0.); // rotation in "up" direction
195  rotBox.RotateY(0.); // rotation in "right" direction
196  }
197  if (b==1) {
198  trBox = new TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
199  -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
200  0.);
201  rotBox = new TGeoRotation();
202  rotBox.RotateX(0.); // rotation in "down" direction
203  rotBox.RotateY(0.); // rotation in "left" direction
204  }
205  if (b==2) {
206  trBox = new TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
207  -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
208  0.);
209  rotBox = new TGeoRotation();
210  rotBox.RotateX(0.); // rotation in "down" direction
211  rotBox.RotateY(0.); // rotation in "right" direction
212  }
213  if (b==3) {
214  trBox = new TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
215  kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
216  0.);
217  rotBox = new TGeoRotation();
218  rotBox.RotateX(0.); // rotation in "up" direction
219  rotBox.RotateY(0.); // rotation in "left" direction
220  }
221  TGeoCombiTrans* trrotBox= new TGeoCombiTrans(trBox,rotBox);
222 
223  name="BoxVol";
224 
225  name+=b;
226  trrotBox->SetName(name);
227  trrotBox->RegisterYourself();
228 
229  SubunitVol->AddNode(BoxVol,b,trrotBox);
230  //top->AddNode(BoxVol,b,trrotBox);
231 
232  //differentc conditions: depends on combination of crystals in Box
233  if (b==0){
234  name+=b;
235  trrotBox->SetName(name);
236  trrotBox->RegisterYourself();
237 
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);
244  }
245  if (b==1){
246  name+=b;
247  trrotBox->SetName(name);
248  trrotBox->RegisterYourself();
249 
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);
256  }
257  if (b==2){
258  name+=b;
259  trrotBox->SetName(name);
260  trrotBox->RegisterYourself();
261 
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);
268  }
269  if (b==3){
270  name+=b;
271  trrotBox->SetName(name);
272  trrotBox->RegisterYourself();
273 
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);
280  }
281  }
282  // ========== CRYSTAL (TGeoBBox shape)=================
283  name = "CrystalShape";
284  CrystalShape = new TGeoBBox(name,0.5*kWidth,0.5*kHeight,kLength,0);
285 
286  TString medium="PWO";
287  name = "CrystalVol";
288  CrystalVol = new TGeoVolume(name,CrystalShape,gGeoMan->GetMedium(medium));
289 
290  // Translation and Rotation for each Crystal are according to
291  // co-ordinate system in the center of the Box.
292  // Crystals arrangement: right angle of each Crystal is in the middle of the box.
293  CrystalVol->SetLineColor(4);
294  for(Int_t k=0; k<kNumOfCrystals; k++){
295  cout << " " << endl;
296  cout << " -----> CRYSTAL number: "<< k << endl;
297  if (k==0){
298  trCrystal = new TGeoTranslation(kSizeOfCrys/2. + 0.5*kCrystalCrystal,kSizeOfCrys/2. + 0.5*kCrystalCrystal,0.);
299  rotCrystal = new TGeoRotation(); // "right-upper" Crystal
300  }else if (k==1){
301  trCrystal= new TGeoTranslation(-kSizeOfCrys/2. - 0.5*kCrystalCrystal,-kSizeOfCrys/2. - 0.5*kCrystalCrystal,0.);
302  rotCrystal = new TGeoRotation(); // "left-lower" Crystal
303  rotCrystal.RotateZ(180.);
304  }else if (k==2){
305  trCrystal= new TGeoTranslation(-kSizeOfCrys/2. - 0.5*kCrystalCrystal,kSizeOfCrys/2. + 0.5*kCrystalCrystal,0.);
306  rotCrystal = new TGeoRotation(); // "left-upper" Crystal
307  rotCrystal.RotateZ(90.);
308  }else if (k==3){
309  trCrystal= new TGeoTranslation(kSizeOfCrys/2. + 0.5*kCrystalCrystal,-kSizeOfCrys/2. - 0.5*kCrystalCrystal,0.);
310  rotCrystal = new TGeoRotation(); // "right-lower" Crystal
311  rotCrystal.RotateZ(270.);
312  }
313 
314  TGeoCombiTrans* trrotCrystal= new TGeoCombiTrans(trCrystal,rotCrystal);
315 
316  name = "CrystalVol";
317  name+=k;
318  trrotCrystal->SetName(name);
319  trrotCrystal->RegisterYourself();
320 
321  BoxVol->AddNode(CrystalVol,k,trrotCrystal);
322 
323  if (k==0) {
324  name+=k;
325  trrotCrystal->SetName(name);
326  trrotCrystal->RegisterYourself();
327 
328  BoxVol4->AddNode(CrystalVol,k,trrotCrystal);
329  BoxVol5->AddNode(CrystalVol,k,trrotCrystal);
330  }
331  if (k==1) {
332  name+=k;
333  trrotCrystal->SetName(name);
334  trrotCrystal->RegisterYourself();
335 
336  BoxVol1->AddNode(CrystalVol,k,trrotCrystal);
337  BoxVol2->AddNode(CrystalVol,k,trrotCrystal);
338  BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
339  BoxVol6->AddNode(CrystalVol,k,trrotCrystal);
340  }
341  if (k==2) {
342  name+=k;
343  trrotCrystal->SetName(name);
344  trrotCrystal->RegisterYourself();
345 
346  BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
347  BoxVol4->AddNode(CrystalVol,k,trrotCrystal);
348  BoxVol6->AddNode(CrystalVol,k,trrotCrystal);
349  }
350  if (k==3) {
351  name+=k;
352  trrotCrystal->SetName(name);
353  trrotCrystal->RegisterYourself();
354 
355  BoxVol1->AddNode(CrystalVol,k,trrotCrystal);
356  BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
357  BoxVol5->AddNode(CrystalVol,k,trrotCrystal);
358  }
359  }
360 
361  Int_t jj=0;
362  for (Int_t row=0; row<4; row++){
363  for (Int_t col=0; col<4; col++){
364 
365  Int_t flag=1;
366 
367  // *** 2 Subunits are fully disables
368  if (row==3 && col==3) flag=0; // outer
369  if (row==0 && col==0) flag=0; // inner
370 
371  // *** Subunits with disabled crystals
372  if (row==0 && col==1) flag=-1; // middle subunit
373  if (row==0 && col==3) flag=-2; // here: row==column => 1st col, 4th Subunit (top)
374  if (row==1 && col==0) flag=-3; // here: row==column => 1st col, 4th Subunit (top)
375  if (row==1 && col==1) flag=-4; // here: row==column => 2st col, 4th Subunit (top)
376  if (row==1 && col==3) flag=-5; // here: row==column => 3st col, 3rd Subunit
377  if (row==2 && col==2) flag=-6; // here: row==column => 4st col, 1st Subunit
378  if (row==2 && col==3) flag=-7; // here: row==column => 4st col, 2st Subunit
379  if (row==3 && col==0) flag=-8; // here: row==column => 3st col, 3rd Subunit
380  if (row==3 && col==1) flag=-9; // here: row==column => 4st col, 1st Subunit
381  if (row==3 && col==2) flag=-10; // here: row==column => 4st col, 2st Subunit
382 
383  Double_t ShiftX = row*(sizeOfSubunit + kAlveoleAlveole) + 0.5*sizeOfSubunit + 0.5*kAlveoleAlveole;// - 2*sizeOfSubunit - 2*kAlveoleAlveole;
384  Double_t ShiftY = col*(sizeOfSubunit + kAlveoleAlveole) + 0.5*sizeOfSubunit + 0.5*kAlveoleAlveole;// - 2*sizeOfSubunit - 2*kAlveoleAlveole;
385 
386  trSub = new TGeoTranslation(ShiftX, ShiftY, 0.);
387 
388  TGeoCombiTrans* thAngle= new TGeoCombiTrans(trSub,rotSub);
389 
390  if (flag==1){jj++;
391  QuarterVol->AddNode(SubunitVol,jj,thAngle);
392  }
393  else if (flag==-1){jj++;
394  QuarterVol->AddNode(SubunitVol7,jj,thAngle);
395  }
396  else if (flag==-2){jj++;
397  QuarterVol->AddNode(SubunitVol1,jj,thAngle);
398  }
399  else if (flag==-3){jj++;
400  QuarterVol->AddNode(SubunitVol9,jj,thAngle);
401  }
402  else if (flag==-4){jj++;
403  QuarterVol->AddNode(SubunitVol8,jj,thAngle);
404  }
405  else if (flag==-5){jj++;
406  QuarterVol->AddNode(SubunitVol2,jj,thAngle);
407  }
408  else if (flag==-6){jj++;
409  QuarterVol->AddNode(SubunitVol4,jj,thAngle);
410  }
411  else if (flag==-7){jj++;
412  QuarterVol->AddNode(SubunitVol3,jj,thAngle);
413  }
414  else if (flag==-8){jj++;
415  QuarterVol->AddNode(SubunitVol6,jj,thAngle);
416  }
417  else if (flag==-9){jj++;
418  QuarterVol->AddNode(SubunitVol5,jj,thAngle);
419  }
420  else if (flag==-10){jj++;
421  QuarterVol->AddNode(SubunitVol3,jj,thAngle);
422  }
423  }
424  }
425 
426  trQuar = new TGeoTranslation(0.,0.,0.);//0.5*sizeOfQuar,0.5*sizeOfQuar,0.);
427  rotQuar = new TGeoRotation();
428 
429  TGeoCombiTrans* trrotQuar= new TGeoCombiTrans(trQuar,rotQuar);
430  name="QuarterVol";
431  trrotQuar->SetName(name);
432  trrotQuar->RegisterYourself();
433 
434  trrotQuar->ReflectX(1); // first copy: -X +Y
435 
436  top->AddNode(QuarterVol,1,trrotQuar); //right-upper Quarter
437 
438  for (Int_t q=1; q<=3; q++){
439  TGeoCombiTrans reflection;
440  TGeoTranslation ttt;
441 
442  if (q==1){ // second copy: -X -Y
443  reflection.ReflectY(1); // right-lower Quarter
444  reflection.ReflectX(1);
445  ttt = new TGeoTranslation(0.,0.,0.);//-0.5*sizeOfQuar,-0.5*sizeOfQuar,0.);
446  }
447  if (q==2){ // third copy: +X -Y
448  reflection.ReflectY(1); // left-lower Quarter
449  reflection.ReflectX(1);
450  reflection.ReflectX(1);
451  ttt = new TGeoTranslation(0.,0.,0.);//0.5*sizeOfQuar,-0.5*sizeOfQuar,0.);
452  }
453  if (q==3){ // fourth copy: +X +Y
454  reflection.ReflectX(1); // left-upper Quarter
455  reflection.ReflectX(1);
456  ttt = new TGeoTranslation(0.,0.,0.);//0.5*sizeOfQuar,0.5*sizeOfQuar,0.);
457  }
458 
459  top->AddNode(QuarterVol,q+1,new TGeoCombiTrans(ttt,reflection));
460  }
461 
462  gGeoMan->CloseGeometry();
463  top->Write();
464  fi->Close();
465  gGeoManager->Export(outfile);
466  top->Draw();
467  gGeoManager->SetVisLevel(10);
468 }
int row
Definition: anaLmdDigi.C:67
TGeoVolume * SubunitVol6
TGeoVolume * QuarterVol
TGeoShape * QuarterShape
TGeoVolume * BoxVol3
FairGeoLoader * geoLoad
const Double_t kAlveoleAlveole
FairGeoMedia * Media
TTree * b
const Int_t kNumOfBoxes1
TGeoShape * CrystalShape
const Double_t kGluedAlveoleThickness
const Double_t kHeight
TGeoTranslation trCrystal
TGeoManager * gGeoMan
FairGeoMedium * CbmMediumCarbon
TGeoVolume * BoxVol5
TGeoVolume * SubunitVol5
int col
Definition: anaLmdDigi.C:67
const Double_t kSizeOfCrys
TGeoTranslation trSub
Double_t sizeOfBox4
const Double_t kCrystalCrystal
TGeoManager * gGeoManager
TGeoVolume * SubunitVol8
TGeoVolume * top
FairGeoMedium * CbmMediumAluminium
TGeoTranslation trQuar
TGeoVolume * SubunitVol
TGeoVolume * BoxVol1
TGeoRotation rotBox
FairGeoBuilder * geobuild
TFile * fi
Double_t
TString medium
TGeoCombiTrans reflection
TGeoVolume * BoxVol4
TGeoVolume * BoxVol
const Double_t kLength
TGeoRotation rotQuar
TGeoVolume * SubunitVol2
TGeoShape * BoxShape
Double_t sizeOfBox1
const Int_t kNumOfBoxes4InSubunit
TString name
FairGeoMedium * CbmMediumAir
const Double_t kAlveoleThickness
TGeoVolume * CrystalVol
TGeoVolume * SubunitVol7
TGeoRotation rotCrystal
TGeoCombiTrans * trrotQuar
const Int_t kNumOfCrystalsInBox2
TGeoVolume * SubunitVol4
TGeoVolume * SubunitVol9
TGeoRotation rotSub
TGeoShape * SubunitShape
Double_t sizeOfBox2
const Int_t kNumOfBoxes4
TGeoVolume * BoxVol2
TGeoVolume * BoxVol6
FairGeoMedium * CbmMediumPWO
const Int_t kNumOfBoxes2
Double_t sizeOfSubunit
FairGeoInterface * geoFace
const Int_t kNumOfSubunit
TGeoTranslation trBox
TGeoVolume * SubunitVol3
const Double_t kCrystalAlveole
const Int_t kNumOfCrystalsInBox4
const Int_t kNumOfBoxes
const Int_t kNumOfCrystals
TString outfile
TGeoVolume * SubunitVol1
const Int_t kNumOfQuarters