24 TH1F *HISTOsubunitTheta =
new TH1F(
"HISTOsubunitTheta",
"Subunit #theta",1250,4.5,17.);
25 TH1F *HISTOoffpointToCrystalMidpointAlongBeam_calculatedForEachSubunit =
new TH1F(
"HISTOoffpointToCrystalMidpointAlongBeam_calculatedForEachSubunit",
"Along-the-beam prjection of the distance between offpoint and the crystal midpoint",640,316.5,322.9);
26 TH1F *HISTOoffpointToFwEndCap_calculatedForEachSubunit =
new TH1F(
"HISTOoffpointToFwEndCap_calculatedForEachSubunit",
"Distance between offpoint and the midpoint of the FwEndCap",640,316.5,322.9);
27 TH2F *HISTOsubunitTheta_offpointToFwEndCap =
new TH2F(
"HISTOsubunitTheta_offpointToFwEndCap",
"Distance between offpoint and the midpoint of the FwEndCap vs subunit #theta ",1250,4.5,17.,640,316.5,322.9);
64 for (Int_t
i=0;
i< 16;
i++){
66 if (
i==0 ||
i==1 ||
i==2 ||
i==7)
67 vertBox[
i] = (-bb - spaces);
68 else if (
i==8 ||
i==9 ||
i==10 ||
i==15)
69 vertBox[
i] = (-aa - spaces);
70 else if (
i==3 ||
i==4 ||
i==5 ||
i==6)
71 vertBox[
i] = (bb + spaces);
72 else if (
i==11 ||
i==12 ||
i==13 ||
i==14)
73 vertBox[
i] = (aa + spaces);
78 for (Int_t
i=0;
i< 16;
i++){
79 if (
i==0 ||
i==1 ||
i==2 ||
i==7 ||
i==8 ||
i==9 ||
i==10 ||
i==15) {
80 vertSub[
i] = (vertBox[
i]*2 - spacesSub);
84 vertSub[
i] = (vertBox[
i]*2 + spacesSub);
90 for (Int_t
i=0;
i< 16;
i++){
92 if (
i==0 ||
i==2 ||
i==8 ||
i==10) {
93 vertHalfSub[
i] = (2*vertBox[
i] - spacesSub);
96 else if (
i==4 ||
i==6 ||
i==12 ||
i==14) {
97 vertHalfSub[
i] = (2*vertBox[
i] + spacesSub);
100 else if (
i==1 ||
i==7) {
101 vertHalfSub[
i] = (-bb - spacesHalfSub);
104 else if (
i==3 ||
i==5) {
105 vertHalfSub[
i] = (bb + spacesHalfSub);
108 else if (
i==9 ||
i==15) {
109 vertHalfSub[
i] = (-aa - spacesHalfSub);
113 vertHalfSub[
i] = (aa + spacesHalfSub);
119 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
122 std::string vmcWorkdir = getenv(
"VMCWORKDIR");
125 TFile*
fi =
new TFile( (vmcWorkdir +
"/geometry/emc_module3_2011_new.root").c_str(),
128 FairGeoLoader*
geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
129 FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
130 geoFace->setMediaFile( (vmcWorkdir +
"/geometry/media_pnd.geo").c_str());
131 geoFace->readMedia();
134 FairGeoMedia *
Media = geoFace->getMedia();
135 FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
141 Int_t
nmed=geobuild->createMedium(CbmMediumAir);
142 nmed=geobuild->createMedium(CbmMediumPWO);
143 nmed=geobuild->createMedium(CbmMediumCarbon);
147 TGeoVolume *
top =
new TGeoVolumeAssembly(
"Emc3");
148 TGeoManager*
gGeoMan = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
149 gGeoMan->SetTopVolume(top);
151 TGeoTranslation
trSub;
152 TGeoTranslation trHalfSub;
153 TGeoTranslation
trBox;
155 TGeoTranslation trMiddleColumnSubunit;
158 TGeoRotation rotHalfSub;
161 TGeoRotation rotMiddleColumnSubunit;
166 name =
"SubunitShape";
167 TGeoShape*
SubunitShape =
new TGeoArb8(name,dz,vertSub);
170 name =
"SubunitVolFwEndCap";
172 TGeoVolume*
SubunitVol =
new TGeoVolumeAssembly(name);
175 name =
"HalfSubunitShape";
176 TGeoShape* HalfSubunitShape =
new TGeoArb8(name,dz,vertHalfSub);
178 name =
"HalfSubunitVolFwEndCap";
180 TGeoVolume* HalfSubunitVol =
new TGeoVolumeAssembly(name);
184 TGeoShape*
BoxShape =
new TGeoArb8(name,dz,vertBox);
187 TGeoVolume*
BoxVol =
new TGeoVolume(name,BoxShape,gGeoMan->GetMedium(medium));
191 TGeoShape* Subunit_Subtracted =
new TGeoArb8(
"Subunit_Subtracted",dz,vertSub_Subtracted);
192 TGeoShape* MiddleWall_subunit =
new TGeoTrd1(
"MiddleWall_subunit",
fabs(vertSub_Subtracted[0]),
fabs(vertSub_Subtracted[8]),kSpaceSubGlue/2.,dz);
193 TGeoRotation* rotSubunitWall =
new TGeoRotation(
"rotSubunitWall");
194 rotSubunitWall->RotateZ(90.);
195 rotSubunitWall->RegisterYourself();
196 TGeoCompositeShape* AlveoleShape_subunit =
new TGeoCompositeShape(
"AlveoleShape_subunit",
"(SubunitShape - Subunit_Subtracted) + (MiddleWall_subunit) + (MiddleWall_subunit:rotSubunitWall)");
197 TGeoVolume* AlveoleVol_subunit =
new TGeoVolume(
"AlveoleVol_subunit",AlveoleShape_subunit,gGeoMan->GetMedium(
"carbon"));
198 AlveoleVol_subunit->SetLineColor(6);
200 TGeoShape* HalfSubunit_Subtracted =
new TGeoArb8(
"HalfSubunit_Subtracted",dz,vertHalfSub_Subtracted);
201 TGeoShape* MiddleWall_halfsubunit =
new TGeoTrd1(
"MiddleWall_halfsubunit",
fabs(vertHalfSub_Subtracted[1]),
fabs(vertHalfSub_Subtracted[9]),kSpaceSubGlue/2.,dz);
202 TGeoCompositeShape* AlveoleShape_halfsubunit =
new TGeoCompositeShape(
"AlveoleShape_halfsubunit",
"(HalfSubunitShape - HalfSubunit_Subtracted) + (MiddleWall_halfsubunit:rotSubunitWall)");
203 TGeoVolume* AlveoleVol_halfsubunit =
new TGeoVolume(
"AlveoleVol_halfsubunit",AlveoleShape_halfsubunit,gGeoMan->GetMedium(
"carbon"));
204 AlveoleVol_halfsubunit->SetLineColor(6);
206 TGeoShape* MiddleWall_box =
new TGeoTrd1(
"MiddleWall_box",
fabs(vertBox[0])+kSpaceInSub,
fabs(vertBox[8])+kSpaceInSub,kAlveoleThickness/2.,dz);
207 TGeoCompositeShape* AlveoleShape_box =
new TGeoCompositeShape(
"AlveoleShape_box",
"(MiddleWall_box) + (MiddleWall_box:rotSubunitWall)");
208 TGeoVolume* AlveoleVol_box =
new TGeoVolume(
"AlveoleVol_box",AlveoleShape_box,gGeoMan->GetMedium(
"carbon"));
209 AlveoleVol_box->SetLineColor(6);
213 Double_t boxShiftInSubunit = (tr+kSpaceInSub+kSpaceSubGlue/2.+kSpaceInBox/2.)*
cos(boxRotAngle*
TMath::Pi()/180);
215 trBox =
new TGeoTranslation(boxShiftInSubunit,boxShiftInSubunit, 0.);
216 rotBox =
new TGeoRotation();
217 rotBox.RotateX(boxRotAngle);
218 rotBox.RotateY(-boxRotAngle);
219 TGeoCombiTrans* trrotBox=
new TGeoCombiTrans(trBox,rotBox);
222 trrotBox->SetName(name);
223 trrotBox->RegisterYourself();
224 SubunitVol->AddNode(BoxVol,1,trrotBox);
226 trBox =
new TGeoTranslation(-boxShiftInSubunit,-boxShiftInSubunit, 0.);
227 rotBox =
new TGeoRotation();
228 rotBox.RotateX(-boxRotAngle);
229 rotBox.RotateY(boxRotAngle);
230 TGeoCombiTrans* trrotBox=
new TGeoCombiTrans(trBox,rotBox);
233 trrotBox->SetName(name);
234 trrotBox->RegisterYourself();
235 SubunitVol->AddNode(BoxVol,2,trrotBox);
237 trBox =
new TGeoTranslation(boxShiftInSubunit,-boxShiftInSubunit, 0.);
238 rotBox =
new TGeoRotation();
239 rotBox.RotateX(-boxRotAngle);
240 rotBox.RotateY(-boxRotAngle);
241 TGeoCombiTrans* trrotBox=
new TGeoCombiTrans(trBox,rotBox);
244 trrotBox->SetName(name);
245 trrotBox->RegisterYourself();
246 SubunitVol->AddNode(BoxVol,3,trrotBox);
248 trBox =
new TGeoTranslation(-boxShiftInSubunit,boxShiftInSubunit, 0.);
249 rotBox =
new TGeoRotation();
250 rotBox.RotateX(boxRotAngle);
251 rotBox.RotateY(boxRotAngle);
252 TGeoCombiTrans* trrotBox=
new TGeoCombiTrans(trBox,rotBox);
255 trrotBox->SetName(name);
256 trrotBox->RegisterYourself();
257 SubunitVol->AddNode(BoxVol,4,trrotBox);
259 SubunitVol->AddNode(AlveoleVol_subunit,0,0);
263 trBox =
new TGeoTranslation(boxShiftInSubunit, 0., 0.);
264 rotBox =
new TGeoRotation();
265 rotBox.RotateY(-boxRotAngle);
266 TGeoCombiTrans* trrotBox=
new TGeoCombiTrans(trBox,rotBox);
269 trrotBox->SetName(name);
270 trrotBox->RegisterYourself();
271 HalfSubunitVol->AddNode(BoxVol,1,trrotBox);
273 trBox =
new TGeoTranslation(-boxShiftInSubunit, 0., 0.);
274 rotBox =
new TGeoRotation();
275 rotBox.RotateY(boxRotAngle);
276 TGeoCombiTrans* trrotBox=
new TGeoCombiTrans(trBox,rotBox);
279 trrotBox->SetName(name);
280 trrotBox->RegisterYourself();
281 HalfSubunitVol->AddNode(BoxVol,2,trrotBox);
286 name =
"CrystalShape";
290 TGeoVolume*
CrystalVol =
new TGeoVolume(name,CrystalShape,gGeoMan->GetMedium(medium));
291 CrystalVol->SetLineColor(4);
295 trCrystal =
new TGeoTranslation(tr/2.+kSpaceInBox/2.,tr/2.+kSpaceInBox/2.,0.);
296 rotCrystal =
new TGeoRotation() ;
297 TGeoCombiTrans* trrotCrystal=
new TGeoCombiTrans(trCrystal,rotCrystal);
300 trrotCrystal->SetName(name);
301 trrotCrystal->RegisterYourself();
302 BoxVol->AddNode(CrystalVol,1,trrotCrystal);
304 trCrystal=
new TGeoTranslation(-tr/2.-kSpaceInBox/2.,-tr/2.-kSpaceInBox/2.,0.);
305 rotCrystal =
new TGeoRotation();
306 rotCrystal.RotateZ(180.);
307 TGeoCombiTrans* trrotCrystal=
new TGeoCombiTrans(trCrystal,rotCrystal);
310 trrotCrystal->SetName(name);
311 trrotCrystal->RegisterYourself();
312 BoxVol->AddNode(CrystalVol,2,trrotCrystal);
314 trCrystal=
new TGeoTranslation(-tr/2.-kSpaceInBox/2.,tr/2.+kSpaceInBox/2.,0.);
315 rotCrystal =
new TGeoRotation();
316 rotCrystal.RotateZ(90.);
317 TGeoCombiTrans* trrotCrystal=
new TGeoCombiTrans(trCrystal,rotCrystal);
320 trrotCrystal->SetName(name);
321 trrotCrystal->RegisterYourself();
322 BoxVol->AddNode(CrystalVol,3,trrotCrystal);
324 trCrystal=
new TGeoTranslation(tr/2.+kSpaceInBox/2.,-tr/2.-kSpaceInBox/2.,0.);
325 rotCrystal =
new TGeoRotation() ;
326 rotCrystal.RotateZ(270.);
327 TGeoCombiTrans* trrotCrystal=
new TGeoCombiTrans(trCrystal,rotCrystal);
330 trrotCrystal->SetName(name);
331 trrotCrystal->RegisterYourself();
332 BoxVol->AddNode(CrystalVol,4,trrotCrystal);
334 BoxVol->AddNode(AlveoleVol_box,0,0);
342 Double_t SubRots_x[10] = {0, 1.397, 3.259, 5.121, 6.983, 8.845, 10.707, 12.569, 14.431, 16.293};
343 Double_t SubRots_y[9] = {0, 1.862, 3.724, 5.586, 7.448, 9.310, 11.172, 13.034, 14.896};
345 Double_t SubShifts_x[9][10],SubShifts_y[9][10],SubShifts_z[9][10];
348 Double_t y0[7] = {28.8265117778573, 39.3493990842636, 49.9182059980705, 60.5427138182193, 71.2329503536249, 81.9992433988977, 92.8522777922782};
349 Double_t z0[7] = {20.8922266939356, 20.7643907501524, 20.647680715811, 20.542219840098, 20.4481194927622, 20.3654790465039, 20.2943857720353};
350 Double_t x1[7] = {10.4561465784774, 10.457980770291, 10.4587432590363, 10.4584210182162, 10.4569949523523, 10.4544395865992, 10.4507226619133};
351 Double_t y1[7] = {28.8415506036169, 39.3698737009689, 49.9440943683685, 60.5739911406306, 71.269589122811, 82.0412134694661, 92.8995464471194};
352 Double_t z1[7] = {20.7353467228561, 20.608097645279, 20.4921269616535, 20.3875570856334, 20.2944985110308, 20.2130496945219, 20.1432969499363};
353 Double_t x2[6] = {20.9321821237215, 20.9358595992309, 20.9373981752432, 20.9367717976619, 20.9339422773645, 20.9288586697734};
354 Double_t y2[6] = {28.8575314144401, 39.3916128487797, 49.9715678752264, 60.6071778753597, 71.3084709234057, 82.0857752642087};
355 Double_t z2[6] = {20.5895321756643, 20.4629244166279, 20.3477101063494, 20.2440107183219, 20.1519360485205, 20.0715840968625};
356 Double_t x3[7] = {31.435, 31.4374657965934, 31.443004685364, 31.445346474863, 31.4444520826492, 31.4402642313971, 31.4327065190925};
357 Double_t y3[7] = {18.37, 28.8744010011301, 39.4145444804275, 50.0005359941237, 60.642165433689, 71.3494695656328, 82.1327855036172};
358 Double_t z3[7] = {20.56, 20.4549342199356, 20.3290191826595, 20.2145744178588, 20.111720383633, 20.0205663879042, 19.9412104670771};
359 Double_t x4[8] = {41.9539813282223, 41.9698288739971, 41.9814693214709, 41.9888966825685, 41.9920821980654, 41.9909737596839, 41.9854950144576, 41.9755441265108};
360 Double_t y4[8] = {7.89830880167419, 18.3818329576968, 28.8921116541933, 39.4386040325354, 50.0309175849214, 60.6788563819023, 71.3924716114887, 82.1821150419249};
361 Double_t z4[8] = {20.6160360262256, 20.4682450405479, 20.3316930634579, 20.2065198113991, 20.0928548902714, 19.9908176835001, 19.9005172334079, 19.8220521159127};
362 Double_t x5[7] = {52.5394297215891, 52.5592393983295, 52.5738238277316, 52.5831754879774, 52.587258416773, 52.5860074900363, 52.5793273040347};
363 Double_t y5[7] = {7.90341507861587, 18.3936742404941, 28.9106213388012, 39.4637346600652, 50.0626411828193, 60.7171647853164, 71.437376767925};
364 Double_t z5[7] = {20.5027092994528, 20.3557018043881, 20.2199378244604, 20.0955538082943, 19.9826771540363, 19.8814261134414, 19.7919096791188};
365 Double_t x6[6] = {63.1830462065919, 63.2068179821323, 63.2243685753296, 63.2356889146366, 63.2407358379524, 63.239431228515};
366 Double_t y6[6] = {7.90874065384292, 18.4060125259458, 28.9298938377538, 39.4898874292926, 50.0956452405859, 60.7570164991038};
367 Double_t z6[6] = {20.4007777494568, 20.2546771228153, 20.1197864051635, 19.9962381996988, 19.8841573722027, 19.7836609746115};
368 Double_t x7[5] = {73.8949255128963, 73.9226591547656, 73.9432021341159, 73.9565438187476, 73.9626338624611};
369 Double_t y7[5] = {7.91427699482984, 18.4188282598441, 28.949898861872, 39.5170214685491, 50.1298783211089};
370 Double_t z7[5] = {20.3103490711865, 20.1652779875055, 20.0313453686846, 19.9086794119197, 19.7974021224738};
371 Double_t x8[4] = {84.6854762517226, 84.7171712230529, 84.7407366383712, 84.7561603031881};
372 Double_t y8[4] = {7.92001718048636, 18.4321056920017, 28.9706121273752, 39.5451040760829};
373 Double_t z8[4] = {20.2315188788966, 20.0875994791296, 19.9547098194095, 19.8329731459031};
375 for (Int_t j=3; j<=9; j++) {
376 SubShifts_x[0][j] = x0[j-3];
377 SubShifts_y[0][j] = y0[j-3];
378 SubShifts_z[0][j] = z0[j-3];
379 SubShifts_x[1][j] = x1[j-3];
380 SubShifts_y[1][j] = y1[j-3];
381 SubShifts_z[1][j] = z1[j-3];
383 for (Int_t j=3; j<=8; j++) {
384 SubShifts_x[2][j] = x2[j-3];
385 SubShifts_y[2][j] = y2[j-3];
386 SubShifts_z[2][j] = z2[j-3];
388 for (Int_t j=2; j<=8; j++) {
389 SubShifts_x[3][j] = x3[j-2];
390 SubShifts_y[3][j] = y3[j-2];
391 SubShifts_z[3][j] = z3[j-2];
393 for (Int_t j=1; j<=8; j++) {
394 SubShifts_x[4][j] = x4[j-1];
395 SubShifts_y[4][j] = y4[j-1];
396 SubShifts_z[4][j] = z4[j-1];
398 for (Int_t j=1; j<=7; j++) {
399 SubShifts_x[5][j] = x5[j-1];
400 SubShifts_y[5][j] = y5[j-1];
401 SubShifts_z[5][j] = z5[j-1];
403 for (Int_t j=1; j<=6; j++) {
404 SubShifts_x[6][j] = x6[j-1];
405 SubShifts_y[6][j] = y6[j-1];
406 SubShifts_z[6][j] = z6[j-1];
408 for (Int_t j=1; j<=5; j++) {
409 SubShifts_x[7][j] = x7[j-1];
410 SubShifts_y[7][j] = y7[j-1];
411 SubShifts_z[7][j] = z7[j-1];
413 for (Int_t j=1; j<=4; j++) {
414 SubShifts_x[8][j] = x8[j-1];
415 SubShifts_y[8][j] = y8[j-1];
416 SubShifts_z[8][j] = z8[j-1];
420 for(Int_t q=0; q<4; q++){
429 if (
row<3 &&
col<3) flag=0;
430 else if (
col==3 &&
row<2) flag=0;
431 else if (
col>7 &&
row>4) flag=0;
432 else if (
col>6 &&
row>5) flag=0;
433 else if (
col>5 &&
row>6) flag=0;
434 else if (
col>4 &&
row>7) flag=0;
435 else if (
col>1 &&
row>8) flag=0;
440 cout<<
"QuarterNo " << q+1<<
" ....SubunitNo " << jj <<endl;
442 Double_t trSub_x, trSub_y, trSub_z, rotSub_x, rotSub_y;
444 trSub_x = SubShifts_x[
col][
row];
445 trSub_y = SubShifts_y[
col][
row];
446 trSub_z = SubShifts_z[
col][
row];
447 rotSub_x = SubRots_x[
row];
448 rotSub_y = -SubRots_y[
col];
451 trSub_x = SubShifts_x[
col][
row];
452 trSub_y = -SubShifts_y[
col][
row];
453 trSub_z = SubShifts_z[
col][
row];
454 rotSub_x = -SubRots_x[
row];
455 rotSub_y = -SubRots_y[
col];
458 trSub_x = -SubShifts_x[
col][
row];
459 trSub_y = -SubShifts_y[
col][
row];
460 trSub_z = SubShifts_z[
col][
row];
461 rotSub_x = -SubRots_x[
row];
462 rotSub_y = SubRots_y[
col];
465 trSub_x = -SubShifts_x[
col][
row];
466 trSub_y = SubShifts_y[
col][
row];
467 trSub_z = SubShifts_z[
col][
row];
468 rotSub_x = SubRots_x[
row];
469 rotSub_y = SubRots_y[
col];
472 rotSub =
new TGeoRotation();
473 rotSub.RotateX(rotSub_x);
474 rotSub.RotateY(rotSub_y);
475 trSub =
new TGeoTranslation(trSub_x, trSub_y, trSub_z-20.);
478 TGeoCombiTrans *trrotSub=
new TGeoCombiTrans(trSub,rotSub);
479 name=
"SubunitVolFwEndCap";
481 trrotSub->SetName(name);
482 trrotSub->RegisterYourself();
484 top->AddNode(SubunitVol,100*(q+1)+jj,trrotSub);
487 Double_t theta1, phi1, theta2, phi2, theta3, phi3;
488 rotSub.GetAngles(theta1, phi1, theta2, phi2, theta3, phi3);
490 HISTOsubunitTheta->Fill(theta3);
491 HISTOoffpointToCrystalMidpointAlongBeam_calculatedForEachSubunit->Fill(
sqrt((SubShifts_x[
col][
row]*SubShifts_x[
col][
row])+(SubShifts_y[
col][row]*SubShifts_y[
col][row]))/tan(theta3*TMath::DegToRad()));
492 HISTOoffpointToFwEndCap_calculatedForEachSubunit->Fill(
sqrt((SubShifts_x[
col][row]*SubShifts_x[
col][row])+(SubShifts_y[
col][row]*SubShifts_y[
col][row]))/tan(theta3*TMath::DegToRad()) + (trSub_z-20.));
493 HISTOsubunitTheta_offpointToFwEndCap->Fill(theta3,
sqrt((SubShifts_x[
col][row]*SubShifts_x[
col][row])+(SubShifts_y[
col][row]*SubShifts_y[
col][row]))/tan(theta3*TMath::DegToRad()) + (trSub_z-20.));
501 for (Int_t index = 1; index <= 2; index++)
505 for (Int_t middleSubunits = 3; middleSubunits<=9; middleSubunits++)
507 trMiddleColumnSubunit =
new TGeoTranslation(SubShifts_x[0][middleSubunits], coeff*SubShifts_y[0][middleSubunits], SubShifts_z[0][middleSubunits]-20.);
508 rotMiddleColumnSubunit =
new TGeoRotation();
509 rotMiddleColumnSubunit.RotateX(coeff*SubRots_x[middleSubunits]);
510 TGeoCombiTrans* trrotMiddleColumnSubunit =
new TGeoCombiTrans(trMiddleColumnSubunit,rotMiddleColumnSubunit);
512 name=
"SubunitVolFwEndCap";
513 name+= 7*(index-1)+(60 + middleSubunits-2);
514 trrotSub->SetName(name);
515 trrotSub->RegisterYourself();
517 top->AddNode(SubunitVol,7*(index-1)+(60 + middleSubunits-2),trrotMiddleColumnSubunit);
520 Double_t theta1, phi1, theta2, phi2, theta3, phi3;
521 rotMiddleColumnSubunit.GetAngles(theta1, phi1, theta2, phi2, theta3, phi3);
523 HISTOsubunitTheta->Fill(theta3);
524 HISTOoffpointToCrystalMidpointAlongBeam_calculatedForEachSubunit->Fill(
sqrt((SubShifts_x[0][middleSubunits]*SubShifts_x[0][middleSubunits])+(SubShifts_y[0][middleSubunits]*SubShifts_y[0][middleSubunits]))/tan(theta3*TMath::DegToRad()));
525 HISTOoffpointToFwEndCap_calculatedForEachSubunit->Fill(
sqrt((SubShifts_x[0][middleSubunits]*SubShifts_x[0][middleSubunits])+(SubShifts_y[0][middleSubunits]*SubShifts_y[0][middleSubunits]))/tan(theta3*TMath::DegToRad()) +(SubShifts_z[0][middleSubunits]-20.));
526 HISTOsubunitTheta_offpointToFwEndCap->Fill(theta3,
sqrt((SubShifts_x[0][middleSubunits]*SubShifts_x[0][middleSubunits])+(SubShifts_y[0][middleSubunits]*SubShifts_y[0][middleSubunits]))/tan(theta3*TMath::DegToRad()) +(SubShifts_z[0][middleSubunits]-20.));
533 Double_t middleHalfSubRots_x[9] = {3.724, 3.724, 3.724, 3.724, 0, 0, 0, 0, 0};
534 Double_t middleHalfSubRots_y[9] = {0, 1.862, 3.724, 5.586, 7.448, 9.310, 11.172, 13.034, 14.896};
535 Double_t HalfSubShifts_x[58] = {-84.6563520970098, -73.8693906775208, -63.1611211867801, -52.521132074127, -41.9393256755252,
536 41.9393256755252, 52.521132074127, 63.1611211867801, 73.8693906775208, 84.6563520970098,
538 -20.9174269458209, -10.4487681185361, 0, 10.4487681185361, 20.9174269458209,
541 -20.9174269458209, -10.4487681185361, 0, 10.4487681185361, 20.9174269458209,
543 -92.6747786463306, -92.7160730719282, -92.7485342040102, -81.9829059977037, -71.2396466047239,
544 -63.1300146020203, -52.4697812081315, -31.355563839864, -20.8773507855441, 20.8773507855441, 31.355563839864,
545 52.4697812081315, 63.1300146020203, 71.2396466047239, 81.9829059977037, 92.7485342040102,
546 92.7160730719282, 92.6747786463306, 92.7160730719282, 92.7485342040102, 81.9829059977037,
547 71.2396466047239, 63.1300146020203, 52.4697812081315, 31.355563839864, 20.8773507855441, -20.8773507855441,
548 -31.355563839864, -52.4697812081315, -63.1300146020203, -71.2396466047239, -81.9829059977037, -92.7485342040102, -92.7160730719282};
550 Double_t HalfSubShifts_y[58] = {0, 0, 0, 0, 0,
553 20.8885295181039, 20.876851374154, 20.8658909883895, 20.876851374154, 20.8885295181039,
556 -20.8885295181039, -20.876851374154, -20.8658909883895, -20.876851374154, -20.8885295181039,
558 0, 10.4475848056181, 20.9494917954074, 50.0632009767915, 60.6888391507159,
559 68.7741496062525, 79.4684133522537, 90.1738532457449, 90.1213466966609, 90.1213466966609, 90.1738532457449,
560 79.4684133522537, 68.7741496062525, 60.6888391507159, 50.0632009767915, 20.9494917954074,
561 10.4475848056181, 0, -10.4475848056181, -20.9494917954074, -50.0632009767915,
562 -60.6888391507159, -68.7741496062525, -79.4684133522537, -90.1738532457449, -90.1213466966609, -90.1213466966609,
563 -90.1738532457449, -79.4684133522537, -68.7741496062525, -60.6888391507159, -50.0632009767915, -20.9494917954074, -10.4475848056181};
565 Double_t HalfSubShifts_z[58] = {20.3466200388019, 20.4263813988843, 20.517625616103, 20.6202563339138, 20.7341651712972,
566 20.7341651712972, 20.6202563339138, 20.517625616103, 20.4263813988843, 20.3466200388019,
568 20.8544382200522, 21.0009144090997, 21.1582196313325, 21.0009144090997, 20.8544382200522,
571 20.8544382200522, 21.0009144090997, 21.1582196313325, 21.0009144090997, 20.8544382200522,
573 20.9979827713258, 20.8465516574732, 20.7052688946296, 20.3581441163706, 20.2547272198587,
574 20.2322699798398, 20.3302699346598, 20.570496344343, 20.701744222906, 20.701744222906, 20.570496344343,
575 20.3302699346598, 20.2322699798398, 20.2547272198587, 20.3581441163706, 20.7052688946296,
576 20.8465516574732, 20.9979827713258, 20.8465516574732, 20.7052688946296, 20.3581441163706,
577 20.2547272198587, 20.2322699798398, 20.3302699346598, 20.570496344343, 20.701744222906, 20.701744222906,
578 20.570496344343, 20.3302699346598, 20.2322699798398, 20.2547272198587, 20.3581441163706, 20.7052688946296, 20.8465516574732};
582 rotHalfSub =
new TGeoRotation();
583 rotHalfSub.RotateX(middleHalfSubRots_x[
col]);
584 rotHalfSub.RotateY(-middleHalfSubRots_y[col]);
585 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[col+1], HalfSubShifts_y[col+1], HalfSubShifts_z[col+1] - 20.);
587 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
588 name=
"HalfSubunitVolFwEndCap";
590 trrotSub->SetName(name);
591 trrotSub->RegisterYourself();
592 top->AddNode(HalfSubunitVol,6+col-4,trrotHalfSub);
594 rotHalfSub =
new TGeoRotation();
595 rotHalfSub.RotateX(middleHalfSubRots_x[12-col]);
596 rotHalfSub.RotateY(middleHalfSubRots_y[12-col]);
597 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[col-4], HalfSubShifts_y[col-4], HalfSubShifts_z[col-4] - 20.);
598 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
599 name=
"HalfSubunitVolFwEndCap";
601 trrotSub->SetName(name);
602 trrotSub->RegisterYourself();
603 top->AddNode(HalfSubunitVol,9-col,trrotHalfSub);
606 for (Int_t col=1; col<=5; col++){
607 rotHalfSub =
new TGeoRotation();
608 rotHalfSub.RotateX(middleHalfSubRots_x[0]);
610 rotHalfSub.RotateY(middleHalfSubRots_y[3-col]);
611 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[10+col], HalfSubShifts_y[10+col], HalfSubShifts_z[10+col] - 20.);
614 rotHalfSub.RotateY(-middleHalfSubRots_y[col-3]);
615 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[10+col], HalfSubShifts_y[10+col], HalfSubShifts_z[10+col] - 20.);
617 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
618 name=
"HalfSubunitVolFwEndCap";
620 trrotSub->SetName(name);
621 trrotSub->RegisterYourself();
622 top->AddNode(HalfSubunitVol,col+11,trrotHalfSub);
624 rotHalfSub =
new TGeoRotation();
625 rotHalfSub.RotateX(-middleHalfSubRots_x[0]);
627 rotHalfSub.RotateY(middleHalfSubRots_y[3-col]);
628 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[17+col], HalfSubShifts_y[17+col], HalfSubShifts_z[17+col] - 20.);
631 rotHalfSub.RotateY(-middleHalfSubRots_y[col-3]);
632 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[17+col], HalfSubShifts_y[17+col], HalfSubShifts_z[17+col] - 20.);
634 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
635 name=
"HalfSubunitVolFwEndCap";
637 trrotSub->SetName(name);
638 trrotSub->RegisterYourself();
639 top->AddNode(HalfSubunitVol,18+col,trrotHalfSub);
643 Double_t peripheralHalfSubRots_x[9] = {0, 1.862, 3.724, 8.845, 10.707, 12.103, 13.965, 15.827, 15.827};
644 Double_t peripheralHalfSubRots_y[9] = {16.293, 16.293, 16.293, 14.431, 12.569, 11.172, 9.310, 5.586, 3.724};
645 for (Int_t index=0; index<=8; index++){
646 rotHalfSub =
new TGeoRotation();
648 rotHalfSub.RotateZ(90);
649 rotHalfSub.RotateX(peripheralHalfSubRots_x[index]);
650 rotHalfSub.RotateY(peripheralHalfSubRots_y[index]);
651 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[24+index], HalfSubShifts_y[24+index], HalfSubShifts_z[24+index] - 20.);
652 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
653 name=
"HalfSubunitVolFwEndCap";
655 trrotSub->SetName(name);
656 trrotSub->RegisterYourself();
657 top->AddNode(HalfSubunitVol,25+index,trrotHalfSub);
659 rotHalfSub =
new TGeoRotation();
661 rotHalfSub.RotateZ(90);
662 rotHalfSub.RotateX(peripheralHalfSubRots_x[index]);
663 rotHalfSub.RotateY(-peripheralHalfSubRots_y[index]);
664 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[41-index], HalfSubShifts_y[41-index], HalfSubShifts_z[41-index] - 20.);
665 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
666 name=
"HalfSubunitVolFwEndCap";
668 trrotSub->SetName(name);
669 trrotSub->RegisterYourself();
670 top->AddNode(HalfSubunitVol,42-index,trrotHalfSub);
673 for (Int_t index=1; index<=8; index++){
674 rotHalfSub =
new TGeoRotation();
676 rotHalfSub.RotateZ(90);
677 rotHalfSub.RotateX(-peripheralHalfSubRots_x[index]);
678 rotHalfSub.RotateY(-peripheralHalfSubRots_y[index]);
679 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[41+index], HalfSubShifts_y[41+index], HalfSubShifts_z[41+index] - 20.);
680 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
681 name=
"HalfSubunitVolFwEndCap";
683 trrotSub->SetName(name);
684 trrotSub->RegisterYourself();
685 top->AddNode(HalfSubunitVol,42+index,trrotHalfSub);
687 rotHalfSub =
new TGeoRotation();
689 rotHalfSub.RotateZ(90);
690 rotHalfSub.RotateX(-peripheralHalfSubRots_x[index]);
691 rotHalfSub.RotateY(peripheralHalfSubRots_y[index]);
692 trHalfSub =
new TGeoTranslation(HalfSubShifts_x[58-index], HalfSubShifts_y[58-index], HalfSubShifts_z[58-index] - 20.);
693 TGeoCombiTrans *trrotHalfSub=
new TGeoCombiTrans(trHalfSub,rotHalfSub);
694 name=
"HalfSubunitVolFwEndCap";
696 trrotSub->SetName(name);
697 trrotSub->RegisterYourself();
698 top->AddNode(HalfSubunitVol,59-index,trrotHalfSub);
703 TGeoNode* myNode = SubunitVol->GetNode(0);
708 gGeoMan->CloseGeometry();
713 TCanvas* c0 =
new TCanvas(
"c0",
"", 10, 20, 1200, 900);
714 gStyle->SetOptStat(0);
715 c0->SetFillColor(10);
716 c0->SetFrameFillColor(10);
719 HISTOsubunitTheta->Draw();
721 HISTOsubunitTheta_offpointToFwEndCap->Draw();
723 HISTOoffpointToCrystalMidpointAlongBeam_calculatedForEachSubunit->Draw();
725 HISTOoffpointToFwEndCap_calculatedForEachSubunit->Draw();
friend F32vec4 cos(const F32vec4 &a)
const Double_t kSpaceInSub
TGeoTranslation trCrystal
const Double_t kSpaceSubGlue
FairGeoMedium * CbmMediumCarbon
friend F32vec4 sqrt(const F32vec4 &a)
TGeoManager * gGeoManager
FairGeoBuilder * geobuild
friend F32vec4 fabs(const F32vec4 &a)
FairGeoMedium * CbmMediumAir
const Double_t kAlveoleThickness
FairGeoMedium * CbmMediumPWO
FairGeoInterface * geoFace