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