29 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/PANDA/pandaroot/trunk_25544/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");
75 TGeoVolume *
top =
new TGeoVolumeAssembly(
"Emc4");
77 gGeoMan->SetTopVolume(top);
95 TGeoVolume*
QuarterVol =
new TGeoVolumeAssembly(
"QuarterNewVol");
98 TGeoVolume*
SubunitVol =
new TGeoVolumeAssembly(
"SubunitVol");
99 TGeoVolume*
SubunitVol1 =
new TGeoVolumeAssembly(
"SubunitVol1");
110 TGeoVolume*
BoxVol =
new TGeoVolumeAssembly(
"BoxVol");
111 TGeoVolume*
BoxVol1 =
new TGeoVolumeAssembly(
"BoxVol1");
112 TGeoVolume*
BoxVol2 =
new TGeoVolumeAssembly(
"BoxVol2");
113 TGeoVolume*
BoxVol3 =
new TGeoVolumeAssembly(
"BoxVol3");
114 TGeoVolume*
BoxVol4 =
new TGeoVolumeAssembly(
"BoxVol4");
115 TGeoVolume*
BoxVol5 =
new TGeoVolumeAssembly(
"BoxVol5");
116 TGeoVolume*
BoxVol6 =
new TGeoVolumeAssembly(
"BoxVol6");
130 name =
"CrystalShape";
131 CrystalShape =
new TGeoBBox(name,0.5*kWidth,0.5*kHeight,0.5*kLength,0);
135 CrystalVol =
new TGeoVolume(name,CrystalShape,gGeoMan->GetMedium(medium));
140 CrystalVol->SetLineColor(4);
143 cout <<
" -----> CRYSTAL number: "<< k << endl;
145 trCrystal =
new TGeoTranslation(0.5*kSizeOfCrys + 0.5*kCrystalCrystal,0.5*kSizeOfCrys + 0.5*kCrystalCrystal,0.);
146 rotCrystal =
new TGeoRotation();
147 rotCrystal.RotateZ(0.);
149 trCrystal=
new TGeoTranslation(-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,0.);
150 rotCrystal =
new TGeoRotation();
151 rotCrystal.RotateZ(180.);
153 trCrystal=
new TGeoTranslation(-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,0.5*kSizeOfCrys + 0.5*kCrystalCrystal,0.);
154 rotCrystal =
new TGeoRotation();
155 rotCrystal.RotateZ(90.);
157 trCrystal=
new TGeoTranslation(0.5*kSizeOfCrys + 0.5*kCrystalCrystal,-0.5*kSizeOfCrys - 0.5*kCrystalCrystal,0.);
158 rotCrystal =
new TGeoRotation();
159 rotCrystal.RotateZ(270.);
162 TGeoCombiTrans* trrotCrystal=
new TGeoCombiTrans(trCrystal,rotCrystal);
166 trrotCrystal->SetName(name);
167 trrotCrystal->RegisterYourself();
171 BoxVol->AddNode(CrystalVol,k,trrotCrystal);
175 trrotCrystal->SetName(name);
176 trrotCrystal->RegisterYourself();
177 cout <<
"name = " << name <<
" k = " << k << endl;
178 BoxVol4->AddNode(CrystalVol,k,trrotCrystal);
179 BoxVol5->AddNode(CrystalVol,k,trrotCrystal);
183 trrotCrystal->SetName(name);
184 trrotCrystal->RegisterYourself();
185 cout <<
"name = " << name <<
" k = " << k << endl;
186 BoxVol1->AddNode(CrystalVol,k,trrotCrystal);
187 BoxVol2->AddNode(CrystalVol,k,trrotCrystal);
188 BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
189 BoxVol6->AddNode(CrystalVol,k,trrotCrystal);
193 trrotCrystal->SetName(name);
194 trrotCrystal->RegisterYourself();
195 cout <<
"name = " << name <<
" k = " << k << endl;
196 BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
197 BoxVol4->AddNode(CrystalVol,k,trrotCrystal);
198 BoxVol6->AddNode(CrystalVol,k,trrotCrystal);
202 trrotCrystal->SetName(name);
203 trrotCrystal->RegisterYourself();
204 cout <<
"name = " << name <<
" k = " << k << endl;
205 BoxVol1->AddNode(CrystalVol,k,trrotCrystal);
206 BoxVol3->AddNode(CrystalVol,k,trrotCrystal);
207 BoxVol5->AddNode(CrystalVol,k,trrotCrystal);
215 cout <<
"*** BOX number: " <<
b <<endl;
217 trBox =
new TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
218 kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
222 trBox =
new TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
223 -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
227 trBox =
new TGeoTranslation(kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
228 -kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
232 trBox =
new TGeoTranslation(-kSizeOfCrys - kAlveoleThickness - 0.5*kCrystalCrystal - kCrystalAlveole,
233 kSizeOfCrys + kAlveoleThickness + 0.5*kCrystalCrystal + kCrystalAlveole,
237 rotBox =
new TGeoRotation();
241 TGeoCombiTrans* trrotBox=
new TGeoCombiTrans(trBox,rotBox);
246 trrotBox->SetName(name);
247 trrotBox->RegisterYourself();
249 SubunitVol->AddNode(BoxVol,
b,trrotBox);
254 trrotBox->SetName(name);
255 trrotBox->RegisterYourself();
257 SubunitVol1->AddNode(BoxVol1,
b,trrotBox);
258 SubunitVol4->AddNode(BoxVol2,
b,trrotBox);
259 SubunitVol6->AddNode(BoxVol6,
b,trrotBox);
260 SubunitVol7->AddNode(BoxVol4,
b,trrotBox);
261 SubunitVol8->AddNode(BoxVol,
b,trrotBox);
262 SubunitVol9->AddNode(BoxVol5,
b,trrotBox);
266 trrotBox->SetName(name);
267 trrotBox->RegisterYourself();
269 SubunitVol1->AddNode(BoxVol,
b,trrotBox);
270 SubunitVol2->AddNode(BoxVol,
b,trrotBox);
271 SubunitVol3->AddNode(BoxVol2,
b,trrotBox);
272 SubunitVol4->AddNode(BoxVol,
b,trrotBox);
273 SubunitVol5->AddNode(BoxVol,
b,trrotBox);
274 SubunitVol6->AddNode(BoxVol,
b,trrotBox);
278 trrotBox->SetName(name);
279 trrotBox->RegisterYourself();
281 SubunitVol1->AddNode(BoxVol,
b,trrotBox);
282 SubunitVol2->AddNode(BoxVol3,
b,trrotBox);
283 SubunitVol4->AddNode(BoxVol,
b,trrotBox);
284 SubunitVol5->AddNode(BoxVol2,
b,trrotBox);
285 SubunitVol6->AddNode(BoxVol6,
b,trrotBox);
286 SubunitVol8->AddNode(BoxVol,
b,trrotBox);
290 trrotBox->SetName(name);
291 trrotBox->RegisterYourself();
293 SubunitVol1->AddNode(BoxVol1,
b,trrotBox);
294 SubunitVol2->AddNode(BoxVol2,
b,trrotBox);
295 SubunitVol4->AddNode(BoxVol,
b,trrotBox);
296 SubunitVol5->AddNode(BoxVol3,
b,trrotBox);
297 SubunitVol6->AddNode(BoxVol,
b,trrotBox);
298 SubunitVol8->AddNode(BoxVol,
b,trrotBox);
311 if (
row==3 &&
col==3) flag=0;
312 if (
row==0 &&
col==0) flag=0;
315 if (
row==0 &&
col==1) flag=-1;
316 if (
row==0 &&
col==3) flag=-2;
317 if (
row==1 &&
col==0) flag=-3;
318 if (
row==1 &&
col==1) flag=-4;
319 if (
row==1 &&
col==3) flag=-5;
320 if (
row==2 &&
col==2) flag=-6;
321 if (
row==2 &&
col==3) flag=-7;
322 if (
row==3 &&
col==0) flag=-8;
323 if (
row==3 &&
col==1) flag=-9;
324 if (
row==3 &&
col==2) flag=-10;
329 trSub =
new TGeoTranslation(ShiftX, ShiftY, 0.);
331 TGeoCombiTrans* thAngle=
new TGeoCombiTrans(trSub,rotSub);
336 QuarterVol->AddNode(SubunitVol,jj,thAngle);
338 else if (flag==-1){jj++;
339 QuarterVol->AddNode(SubunitVol7,jj,thAngle);
341 else if (flag==-2){jj++;
342 QuarterVol->AddNode(SubunitVol1,jj,thAngle);
344 else if (flag==-3){jj++;
345 QuarterVol->AddNode(SubunitVol9,jj,thAngle);
347 else if (flag==-4){jj++;
348 QuarterVol->AddNode(SubunitVol8,jj,thAngle);
350 else if (flag==-5){jj++;
351 QuarterVol->AddNode(SubunitVol2,jj,thAngle);
353 else if (flag==-6){jj++;
354 QuarterVol->AddNode(SubunitVol4,jj,thAngle);
356 else if (flag==-7){jj++;
357 QuarterVol->AddNode(SubunitVol3,jj,thAngle);
359 else if (flag==-8){jj++;
360 QuarterVol->AddNode(SubunitVol6,jj,thAngle);
362 else if (flag==-9){jj++;
363 QuarterVol->AddNode(SubunitVol5,jj,thAngle);
365 else if (flag==-10){jj++;
366 QuarterVol->AddNode(SubunitVol3,jj,thAngle);
375 trQuar =
new TGeoTranslation(0.,0.,0.);
377 for (Int_t q=1; q<=4; q++){
379 reflection.ReflectX(1);
380 top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) );
383 reflection.ReflectX(1);
384 top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) );
387 reflection.ReflectX(1);
388 reflection.ReflectY(1);
389 top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) );
392 reflection.ReflectX(1);
393 top->AddNode(QuarterVol,q,
new TGeoCombiTrans(trQuar,reflection) );
398 cout <<
"********************************** \n";
399 cout <<
"*** Checking overlaps for Emc4 *** \n";
400 cout <<
"********************************** \n";
401 gGeoMan->CheckOverlaps(0.001);
408 gGeoMan->CloseGeometry();
const Int_t kNumOfCrystals
FairGeoBuilder * geobuild
FairGeoMedium * CbmMediumCarbon
const Double_t kAlveoleAlveole
FairGeoMedium * CbmMediumPWO
const Double_t kGluedAlveoleThickness
const Double_t kAlveoleThickness
FairGeoInterface * geoFace
const Double_t kSizeOfCrys
FairGeoMedium * CbmMediumAluminium
const Int_t kNumOfSubunit
const Int_t kNumOfCrystalsInBox2
TGeoCombiTrans reflection
FairGeoMedium * CbmMediumAir
const Double_t kCrystalAlveole
const Int_t kNumOfQuarters
const Int_t kNumOfCrystalsInBox4
const Double_t kCrystalCrystal
TGeoTranslation trCrystal
const Int_t kNumOfBoxes4InSubunit