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
int emc_module4_StraightGeo24_ste()
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