48 auto* PatchPanelVolume =
new TGeoVolumeAssembly(
"PatchPanelVolume");
50 TGeoMedium* kMedAlu = gGeoManager->GetMedium(
"MFT_Alu$");
51 TGeoMedium* kMedCu = gGeoManager->GetMedium(
"MFT_Cu$");
57 Double_t radin_disc = 28.0;
58 Double_t radout_disc = 50.3;
59 Double_t high_disc = 0.4;
60 Double_t ang_in_disc = 180.;
61 Double_t ang_fin_disc = 360;
64 Double_t radin_scut1 = 0;
65 Double_t radout_scut1 = 15.5;
66 Double_t high_scut1 = 2;
67 Double_t ang_in_scut1 = 180;
68 Double_t ang_fin_scut1 = 270;
70 TGeoTranslation* tr_discL =
71 new TGeoTranslation(
"tr_discL", -12.5, -10.4, 0);
72 tr_discL->RegisterYourself();
74 TGeoTranslation* tr_discR =
new TGeoTranslation(
"tr_discR", 12.5, -10.4, 0);
75 tr_discR->RegisterYourself();
78 Double_t radin_scut2 = 0;
79 Double_t radout_scut2 = 15.5;
80 Double_t high_scut2 = 2;
81 Double_t ang_in_scut2 = 270;
82 Double_t ang_fin_scut2 = 360.;
85 Double_t radin_holeB = 0.;
86 Double_t radout_holeB = 0.175;
87 Double_t high_holeB = 1.5;
88 TGeoTranslation* tr1_holeB =
new TGeoTranslation(
"tr1_holeB", -7.5, -28.8, 0);
89 tr1_holeB->RegisterYourself();
91 TGeoTranslation* tr2_holeB =
new TGeoTranslation(
"tr2_holeB", 7.5, -28.8, 0);
92 tr2_holeB->RegisterYourself();
95 Double_t x_1box = 105.0;
96 Double_t y_1box = 11.81;
97 Double_t z_1box = 1.4;
100 Double_t x_2box = 20;
101 Double_t y_2box = 60.6;
105 TGeoXtru* tria_cut1 =
new TGeoXtru(2);
106 tria_cut1->SetName(
"S_TRIA_CUT1");
108 Double_t x_tria1[6] = {52, 45.6, 45.6, 37.17, 36.77, 52};
109 Double_t y_tria1[6] = {-21.62, -21.62, -11.478, -5.9, -3, -3};
110 tria_cut1->DefinePolygon(6, x_tria1, y_tria1);
111 tria_cut1->DefineSection(0, -2.4, 0., 0.,
113 tria_cut1->DefineSection(1, 2.4, 0., 0., 1);
116 TGeoXtru* tria_cut2 =
new TGeoXtru(2);
117 tria_cut2->SetName(
"S_TRIA_CUT2");
119 Double_t x_tria2[6] = {-52, -45.6, -45.6, -37.17, -38.06, -52};
120 Double_t y_tria2[6] = {-21.62, -21.62, -11.478, -5.9, -3, -3};
121 tria_cut2->DefinePolygon(6, x_tria2, y_tria2);
122 tria_cut2->DefineSection(0, -2.45, 0., 0.,
124 tria_cut2->DefineSection(1, 2.45, 0., 0., 1);
127 Double_t radin_A1 = 0;
128 Double_t radout_A1 = 0.223;
129 Double_t high_A1 = 10;
131 TGeoTranslation* tr_A1 =
132 new TGeoTranslation(
"tr_A1", -18.627, -24.278, 0);
133 tr_A1->RegisterYourself();
135 TGeoTranslation* tr_B =
new TGeoTranslation(
"tr_B", 18.627, -24.278, 0);
136 tr_B->RegisterYourself();
138 TGeoTranslation* tr_II =
new TGeoTranslation(
"tr_II", -25.25, -6.65, 0);
139 tr_II->RegisterYourself();
142 TGeoTranslation* tr_H =
new TGeoTranslation(
"tr_H", -26.092, -34.042, 0);
143 tr_H->RegisterYourself();
146 TGeoXtru* shoulder =
new TGeoXtru(2);
147 shoulder->SetName(
"S_shoulder");
151 Double_t x_shoulder[4] = {-13.9, -13.9, 13.8,
153 Double_t y_shoulder[4] = {-24.4, -26.45, -26.45, -24.4};
155 shoulder->DefinePolygon(4, x_shoulder, y_shoulder);
156 shoulder->DefineSection(0, 0., 0., 0., 1);
157 shoulder->DefineSection(1, 4.8, 0., 0., 1);
160 TGeoXtru* hand_L =
new TGeoXtru(2);
161 hand_L->SetName(
"hand_L");
163 Double_t x_handL[12] = {-44.5, -35.89, -31.38, -30.53, -30, -30.,
164 -26.2, -24.98, -24.5, -24.5, -37.17, -45.8};
165 Double_t y_handL[12] = {-13.42, -7.45, -7.45, -8.03, -8.91, -10.5,
166 -10.5, -9.76, -9.01, -5.9, -5.9, -11.5};
167 hand_L->DefinePolygon(12, x_handL, y_handL);
168 hand_L->DefineSection(0, 0., 0., 0.,
170 hand_L->DefineSection(1, 4.8, 0., 0., 1);
172 TGeoXtru* part_handL =
new TGeoXtru(2);
173 part_handL->SetName(
"S_PART_HAND_L");
175 Double_t x_part_HL[4] = {-43.5, -43.5, -45.8, -45.8};
176 Double_t y_part_HL[4] = {-21.6, -11.49, -11.49, -21.6};
177 part_handL->DefinePolygon(4, x_part_HL, y_part_HL);
178 part_handL->DefineSection(0, 0., 0., 0.,
180 part_handL->DefineSection(1, 4.8, 0., 0., 1);
182 TGeoRotation* rot_y180 =
new TGeoRotation(
"rot_y180", 0, 180, 180);
183 rot_y180->RegisterYourself();
185 TGeoXtru* hand_R =
new TGeoXtru(2);
186 hand_R->SetName(
"hand_R");
188 Double_t x_handR[12] = {44.5, 35.89, 31.38, 30.53, 30, 30.,
189 26.2, 24.98, 24.5, 24.5, 37.17, 45.8};
190 Double_t y_handR[12] = {-13.42, -7.45, -7.45, -8.03, -8.91, -10.5,
191 -10.5, -9.76, -9.01, -5.9, -5.9, -11.5};
192 hand_R->DefinePolygon(12, x_handR, y_handR);
193 hand_R->DefineSection(0, 0., 0., 0., 1);
194 hand_R->DefineSection(1, 4.8, 0., 0., 1);
197 TGeoXtru* part_handR =
new TGeoXtru(2);
198 part_handR->SetName(
"part_handR");
200 Double_t x_part_HR[4] = {43.5, 43.5, 45.8, 45.8};
201 Double_t y_part_HR[4] = {-21.6, -11.75, -11.75, -21.6};
202 part_handR->DefinePolygon(4, x_part_HR, y_part_HR);
203 part_handR->DefineSection(0, 0., 0., 0., 1);
204 part_handR->DefineSection(1, 4.8, 0., 0., 1);
207 Double_t radin_hornL = 7.0;
208 Double_t radout_hornL = 9.05;
209 Double_t high_hornL = 4.8;
210 Double_t angin_hornL = 230;
211 Double_t angfin_hornL = 270;
213 TGeoTranslation* tr_hornl =
214 new TGeoTranslation(
"tr_hornl", -13.8, -17.4, 2.2);
215 tr_hornl->RegisterYourself();
217 Double_t radin_hornR = 7.0;
218 Double_t radout_hornR = 9.05;
219 Double_t high_hornR = 4.8;
220 Double_t angin_hornR = 270;
221 Double_t angfin_hornR = 310;
223 TGeoTranslation* tr_hornR =
new TGeoTranslation(
"tr_hornR", 13.8, -17.4, 2.2);
224 tr_hornR->RegisterYourself();
227 Double_t x_Abox = 15.6;
228 Double_t y_Abox = 1.5;
229 Double_t z_Abox = 4.8;
231 TGeoRotation* rot_zp54 =
new TGeoRotation(
"rot2_zp54", 54, 0, 0);
232 rot_zp54->RegisterYourself();
233 TGeoCombiTrans* combi_rotzp54 =
new TGeoCombiTrans(
234 -22.46, -29.4, 2.3, rot_zp54);
235 combi_rotzp54->SetName(
"combi_zp54");
236 combi_rotzp54->RegisterYourself();
238 TGeoRotation* rot_zn54 =
new TGeoRotation(
"rot2_zn54", -54, 0, 0);
239 rot_zn54->RegisterYourself();
240 TGeoCombiTrans* combi_rotzn54 =
241 new TGeoCombiTrans(22.46, -29.4, 2.3, rot_zn54);
242 combi_rotzn54->SetName(
"combi_zn54");
243 combi_rotzn54->RegisterYourself();
246 Double_t radin_sm = 28.;
247 Double_t radout_sm = 32;
248 Double_t high_sm = 2;
249 Double_t angin_sm = 251.79;
250 Double_t angfin_sm = 288.21;
253 Double_t radin_cext = 49.6;
254 Double_t radout_cext = 50.3;
255 Double_t high_cext = 4.8;
256 Double_t angin_cext = 227;
257 Double_t angfin_cext = 313;
259 TGeoTranslation* tr_cext =
260 new TGeoTranslation(
"tr_cext", 0, 0, 2.3);
261 tr_cext->RegisterYourself();
264 Double_t radin_kiroc = 48.35;
265 Double_t radout_kiroc = 50.3;
266 Double_t high_kiroc = 4.8;
267 Double_t angin_kiroc = 256.5;
268 Double_t angfin_kiroc = 283.5;
271 Double_t radin_1hole = 23.0;
272 Double_t radout_1hole = 25.5;
273 Double_t high_1hole = 1.4;
274 Double_t ang_in_1hole = 207.83;
275 Double_t ang_fin_1hole = 249.998;
278 Double_t radin_hole1 = 0;
279 Double_t radout_hole1 = 0.4;
280 Double_t high_hole1 = 1.36;
283 Double_t radin_hole2 = 0;
284 Double_t radout_hole2 = 0.335;
285 Double_t high_hole2 = 1.36;
288 Double_t x_labox = 60.0;
289 Double_t y_labox = 30.3;
290 Double_t z_labox = 0.305;
291 TGeoTranslation* tr_la =
292 new TGeoTranslation(
"tr_la", 0, -y_labox / 2 - 9.3, high_disc / 2);
293 tr_la->RegisterYourself();
295 TGeoTranslation* tr_2la =
296 new TGeoTranslation(
"tr_2la", 0, -8.1, high_disc / 2);
297 tr_2la->RegisterYourself();
300 Double_t x_2labox = 51.2;
301 Double_t y_2labox = 2.8;
302 Double_t z_2labox = 0.303;
305 Double_t radin_cutlatL = 48.;
306 Double_t radout_cutlatL = 51.0;
307 Double_t high_cutlatL = 3;
308 Double_t angin_cutlatL = 208;
309 Double_t angfin_cutlatL = 227.;
312 Double_t radin_cutlatR = 48.;
313 Double_t radout_cutlatR = 51.0;
314 Double_t high_cutlatR = 3;
315 Double_t angin_cutlatR = 313.;
316 Double_t angfin_cutlatR = 332;
319 Double_t radin_slimdisL = 48.;
320 Double_t radout_slimdisL = 50.3;
321 Double_t high_slimdisL = 4.79;
322 Double_t angin_slimdisL = 205;
323 Double_t angfin_slimdisL = 208.;
325 TGeoTranslation* tr_slimL =
326 new TGeoTranslation(
"tr_slimL", 0, 0, high_slimdisL / 2 - 0.1);
327 tr_slimL->RegisterYourself();
330 Double_t radin_slimdisR = 48.;
331 Double_t radout_slimdisR = 50.3;
332 Double_t high_slimdisR = 4.79;
333 Double_t angin_slimdisR = 332;
334 Double_t angfin_slimdisR = 335.;
337 TGeoXtru* pyramid =
new TGeoXtru(2);
338 pyramid->SetName(
"pyramid");
340 Double_t x_pyramid[4] = {-1.2, 1.2, 1.4, -1.4};
341 Double_t y_pyramid[4] = {-26.4 - 1.05, -26.4 - 1.05, -26.4, -26.4};
342 pyramid->DefinePolygon(4, x_pyramid, y_pyramid);
343 pyramid->DefineSection(0, 0., 0., 0.,
345 pyramid->DefineSection(1, 4.8, 0., 0., 1);
348 TGeoXtru* tanqL =
new TGeoXtru(2);
349 tanqL->SetName(
"tanqL");
351 Double_t x_tanqL[6] = {-29., -26.78, -25.57, -26.2, -27.6, -27.25};
352 Double_t y_tanqL[6] = {-41., -41.9, -39.534, -36., -35.2, -37.8};
353 tanqL->DefinePolygon(6, x_tanqL, y_tanqL);
354 tanqL->DefineSection(0, 0., 0., 0., 1);
355 tanqL->DefineSection(1, 1.65, 0., 0., 1);
358 TGeoXtru* tanqR =
new TGeoXtru(2);
359 tanqR->SetName(
"tanqR");
361 Double_t x_tanqR[6] = {29., 26.78, 25.57, 26.2, 27.6, 27.25};
362 Double_t y_tanqR[6] = {-41., -41.9, -39.534, -36., -35.2, -37.8};
363 tanqR->DefinePolygon(6, x_tanqR, y_tanqR);
364 tanqR->DefineSection(0, 0., 0., 0., 1);
365 tanqR->DefineSection(1, 1.65, 0., 0., 1);
368 TGeoXtru* frog_eyeL =
new TGeoXtru(2);
369 frog_eyeL->SetName(
"frog_eyeL");
371 Double_t x_frog_eyeL[4] = {-13.33, -10.72, -11.11, -11.89};
372 Double_t y_frog_eyeL[4] = {-47.78, -48.61, -45.41, -45.41};
373 frog_eyeL->DefinePolygon(4, x_frog_eyeL, y_frog_eyeL);
374 frog_eyeL->DefineSection(0, 0., 0., 0., 1);
375 frog_eyeL->DefineSection(1, 1.65, 0., 0., 1);
378 TGeoXtru* frog_eyeR =
new TGeoXtru(2);
379 frog_eyeR->SetName(
"frog_eyeR");
381 Double_t x_frog_eyeR[4] = {13.33, 10.72, 11.11, 11.89};
382 Double_t y_frog_eyeR[4] = {-47.78, -48.61, -45.41, -45.41};
383 frog_eyeR->DefinePolygon(4, x_frog_eyeR, y_frog_eyeR);
384 frog_eyeR->DefineSection(0, 0., 0., 0., 1);
385 frog_eyeR->DefineSection(1, 1.65, 0., 0., 1);
387 TGeoRotation* rot_A =
new TGeoRotation(
"rot_A", 180, 180, 0);
388 rot_A->SetName(
"rot_A");
389 rot_A->RegisterYourself();
392 Double_t radin_slideL = 48;
393 Double_t radout_slideL = 53;
394 Double_t high_slideL = 3.15;
395 Double_t angin_slideL = 226.5;
396 Double_t angfin_slideL = 228.8;
398 TGeoTranslation* tr_slide =
399 new TGeoTranslation(
"tr_slide", 0, 0, 4.832);
400 tr_slide->RegisterYourself();
403 Double_t radin_slideR = 48;
404 Double_t radout_slideR = 53;
405 Double_t high_slideR = 3.15;
406 Double_t angin_slideR = 311.2;
407 Double_t angfin_slideR = 313.5;
410 TGeoXtru* earL =
new TGeoXtru(2);
411 earL->SetName(
"earL");
413 Double_t x_earL[8] = {-44., -47.5, -47.5, -44.61,
414 -44.08, -44.08, -43.59, -43.59};
415 Double_t y_earL[8] = {-21.39, -21.39, -14.74, -14.74,
416 -15.14, -19.47, -20.08, -20.97};
417 earL->DefinePolygon(8, x_earL, y_earL);
418 earL->DefineSection(0, 0.5, 0., 0.,
420 earL->DefineSection(1, 1.2, 0., 0., 1);
422 TGeoXtru* earR =
new TGeoXtru(2);
423 earR->SetName(
"earR");
425 Double_t x_earR[8] = {44., 47.5, 47.5, 44.61, 44.08, 44.08, 43.59, 43.59};
426 Double_t y_earR[8] = {-21.39, -21.39, -14.74, -14.74,
427 -15.14, -19.47, -20.08, -20.97};
428 earR->DefinePolygon(8, x_earR, y_earR);
429 earR->DefineSection(0, -0.5, 0., 0.,
431 earR->DefineSection(1, 1.2, 0., 0., 1);
435 new TGeoTube(
"S_CIRC_AHOLE", radin_A1, radout_A1, high_A1 / 2);
437 new TGeoTubeSeg(
"S_DISC", radin_disc, radout_disc, high_disc / 2, ang_in_disc,
440 new TGeoTubeSeg(
"S_SCUT1", radin_scut1, radout_scut1, high_scut1 / 2,
441 ang_in_scut1, ang_fin_scut1);
443 new TGeoTubeSeg(
"S_SCUT2", radin_scut2, radout_scut2, high_scut2 / 2,
444 ang_in_scut2, ang_fin_scut2);
450 new TGeoBBox(
"Abox", x_Abox / 2, y_Abox / 2, z_Abox / 2);
452 new TGeoTubeSeg(
"smile", radin_sm, radout_sm, high_sm / 2, angin_sm,
455 new TGeoTubeSeg(
"c_ext", radin_cext, radout_cext, high_cext / 2, angin_cext,
458 new TGeoTubeSeg(
"kiroc", radin_kiroc, radout_kiroc, high_kiroc / 2,
459 angin_kiroc, angfin_kiroc);
461 new TGeoTubeSeg(
"cutlatL", radin_cutlatL, radout_cutlatL, high_cutlatL / 2,
462 angin_cutlatL, angfin_cutlatL);
464 new TGeoTubeSeg(
"cutlatR", radin_cutlatR, radout_cutlatR, high_cutlatR / 2,
465 angin_cutlatR, angfin_cutlatR);
467 new TGeoTubeSeg(
"slimdisL", radin_slimdisL, radout_slimdisL,
468 high_slimdisL / 2, angin_slimdisL, angfin_slimdisL);
470 new TGeoTubeSeg(
"slimdisR", radin_slimdisR, radout_slimdisR,
471 high_slimdisR / 2, angin_slimdisR, angfin_slimdisR);
473 new TGeoBBox(
"BOX1", x_1box / 2, y_1box / 2, z_1box / 2);
474 new TGeoBBox(
"BOX2", x_2box / 2, y_2box / 2, z_2box / 2);
476 new TGeoBBox(
"LA_BOX", x_labox / 2, y_labox / 2, z_labox / 2);
478 new TGeoBBox(
"LA_2BOX", x_2labox / 2, y_2labox / 2, z_2labox / 2);
480 new TGeoTubeSeg(
"SEG_1HOLE", radin_1hole, radout_1hole, high_1hole / 2,
481 ang_in_1hole, ang_fin_1hole);
483 new TGeoTubeSeg(
"S_SEG_HORNL", radin_hornL, radout_hornL, high_hornL / 2,
484 angin_hornL, angfin_hornL);
486 new TGeoTubeSeg(
"S_SEG_HORNR", radin_hornR, radout_hornR, high_hornR / 2,
487 angin_hornR, angfin_hornR);
489 new TGeoTube(
"S_CIRC_HOLE1", radin_hole1, radout_hole1, high_hole1 / 2);
491 new TGeoTube(
"S_CIRC_HOLE2", radin_hole2, radout_hole2, high_hole2 / 2);
493 new TGeoTube(
"S_CIRC_HOLEB", radin_holeB, radout_holeB, high_holeB / 2);
495 new TGeoTubeSeg(
"s_slideL", radin_slideL, radout_slideL, high_slideL / 2,
496 angin_slideL, angfin_slideL);
498 new TGeoTubeSeg(
"s_slideR", radin_slideR, radout_slideR, high_slideR / 2,
499 angin_slideR, angfin_slideR);
503 new TGeoCompositeShape(
505 "S_DISC -BOX1 -S_TRIA_CUT1 -S_TRIA_CUT2 -BOX2 "
506 "-SEG_1HOLE -S_SCUT1:tr_discL -S_SCUT2:tr_discR -smile "
507 "-cutlatL - cutlatR ");
509 new TGeoCompositeShape(
511 "S_shoulder - S_CIRC_AHOLE:tr_H + S_SEG_HORNL:tr_hornl + "
512 "S_SEG_HORNR:tr_hornR +Abox:combi_zp54 +Abox:combi_zn54 +pyramid "
515 new TGeoCompositeShape(
517 " S_PART_HAND_L +hand_L +hand_R +part_handR -S_CIRC_AHOLE:tr_B "
518 "- S_CIRC_AHOLE:tr_II -S_CIRC_AHOLE:tr_A1 +c_ext:tr_cext "
519 "+kiroc:tr_cext +slimdisL:tr_slimL +slimdisR:tr_slimL + tanqL "
520 "+tanqR +frog_eyeL +frog_eyeR - s_slideL:tr_slide - "
521 "s_slideR:tr_slide");
523 new TGeoCompositeShape(
"baseA_Shape_3",
524 " (baseA_Shape_0 + baseA_Shape_2 - earL - "
525 "earR):rot_A + baseA_Shape_1:rot_A");
531 Double_t radin_discB = 0.;
532 Double_t radout_discB = 50.3;
533 Double_t high_discB = 0.2;
534 Double_t angin_discB = 180.;
535 Double_t angfin_discB = 360;
538 TGeoXtru* central_cut =
new TGeoXtru(2);
539 central_cut->SetName(
"central_cut");
541 Double_t x_central[6] = {-24.5, -16.5, 16.5, 24.5, 24.5, -24.5};
542 Double_t y_central[6] = {-18.33, -24.28, -24.28, -18.33, 1, -1};
543 central_cut->DefinePolygon(6, x_central, y_central);
544 central_cut->DefineSection(0, -2.4, 0., 0.,
546 central_cut->DefineSection(1, 2.4, 0., 0., 1);
549 Double_t x_wibox = 14.628;
550 Double_t y_wibox = 0.5;
551 Double_t z_wibox = 0.7;
553 TGeoTranslation* tr_wiL =
new TGeoTranslation(
554 "tr_wiL", -11.013, -27.5, 0.35 - 0.09);
555 tr_wiL->RegisterYourself();
557 TGeoTranslation* tr_wiR =
558 new TGeoTranslation(
"tr_wiR", 11.013, -27.5, 0.35 - 0.09);
559 tr_wiR->RegisterYourself();
562 Double_t x_vbox = 0.5;
563 Double_t y_vbox = 2.1;
564 Double_t z_vbox = 0.7;
566 TGeoTranslation* tr_vboxL =
567 new TGeoTranslation(
"tr_vboxL", -26.55, -12.4, 0.35 - 0.09);
568 tr_vboxL->RegisterYourself();
570 TGeoTranslation* tr_vboxR =
571 new TGeoTranslation(
"tr_vboxR", 26.55, -12.4, 0.35 - 0.09);
572 tr_vboxR->RegisterYourself();
575 TGeoXtru* eyebrowL =
new TGeoXtru(2);
576 eyebrowL->SetName(
"eyebrowL");
578 Double_t x_eyebrowL[8] = {-43.45, -42.95, -42.943, -35.806,
579 -32.566, -32.566, -35.76, -43.45};
580 Double_t y_eyebrowL[8] = {-16.61, -16.61, -12.59, -7.99,
581 -7.760, -7.26, -7.41, -12.47};
582 eyebrowL->DefinePolygon(8, x_eyebrowL, y_eyebrowL);
583 eyebrowL->DefineSection(0, -0.09, 0., 0.,
585 eyebrowL->DefineSection(1, 0.5, 0., 0., 1);
587 TGeoXtru* eyebrowR =
new TGeoXtru(2);
588 eyebrowR->SetName(
"eyebrowR");
590 Double_t x_eyebrowR[8] = {43.45, 42.95, 42.943, 35.806,
591 32.566, 32.566, 35.76, 43.45};
592 Double_t y_eyebrowR[8] = {-16.61, -16.61, -12.59, -7.99,
593 -7.760, -7.26, -7.41, -12.47};
594 eyebrowR->DefinePolygon(8, x_eyebrowR, y_eyebrowR);
595 eyebrowR->DefineSection(0, -0.09, 0., 0.,
597 eyebrowR->DefineSection(1, 0.5, 0., 0., 1);
600 TGeoXtru* axeR =
new TGeoXtru(2);
601 axeR->SetName(
"axeR");
602 Double_t x_axeR[8] = {33.25, 32.26, 29.86, 29.53, 26.52, 23.29, 33.6, 34.35};
603 Double_t y_axeR[8] = {-29.35, -30.42, -33.30, -33.10,
604 -35.76, -30.98, -27.27, -27.3};
605 axeR->DefinePolygon(8, x_axeR, y_axeR);
606 axeR->DefineSection(0, -0.09, 0., 0., 1);
607 axeR->DefineSection(1, 1.6, 0., 0., 1);
609 TGeoXtru* axeL =
new TGeoXtru(2);
610 axeL->SetName(
"axeL");
611 Double_t x_axeL[8] = {-33.25, -32.26, -29.86, -29.53,
612 -26.52, -23.29, -33.6, -34.35};
613 Double_t y_axeL[8] = {-29.35, -30.42, -33.30, -33.10,
614 -35.76, -30.98, -27.27, -27.3};
615 axeL->DefinePolygon(8, x_axeL, y_axeL);
616 axeL->DefineSection(0, -0.09, 0., 0., 1);
617 axeL->DefineSection(1, 1.6, 0., 0., 1);
621 TGeoXtru* sharkL =
new TGeoXtru(2);
622 sharkL->SetName(
"sharkL");
623 Double_t x_sharkL[13] = {-44.64, -43.62, -34.95, -37.79, -37.39,
624 -35.47, -33.86, -27.97, -29.49, -34.92,
625 -37.89, -41.48, -44.68};
626 Double_t y_sharkL[13] = {-20.61, -22.89, -31.7, -26.54, -26.05,
627 -26.98, -28.15, -9.31, -9.31, -24.58,
628 -21.85, -19.13, -17.2};
629 sharkL->DefinePolygon(13, x_sharkL, y_sharkL);
630 sharkL->DefineSection(0, -0.09, 0., 0., 1);
631 sharkL->DefineSection(1, 1.6, 0., 0., 1);
633 TGeoXtru* sharkR =
new TGeoXtru(2);
634 sharkR->SetName(
"sharkR");
635 Double_t x_sharkR[13] = {44.64, 43.62, 34.9, 37.79, 37.39, 35.47, 33.86,
636 27.97, 29.49, 34.92, 37.89, 41.48, 44.68};
637 Double_t y_sharkR[13] = {-20.61, -22.89, -31.7, -26.54, -26.05,
638 -26.98, -28.15, -9.31, -9.31, -24.58,
639 -21.85, -19.13, -17.2};
640 sharkR->DefinePolygon(13, x_sharkR, y_sharkR);
641 sharkR->DefineSection(0, -0.09, 0., 0., 1);
642 sharkR->DefineSection(1, 1.6, 0., 0., 1);
645 Double_t radin_boatL = 47.2;
646 Double_t radout_boatL = 50.3;
647 Double_t high_boatL = 1.6;
648 Double_t angin_boatL = 208.;
649 Double_t angfin_boatL = 228.75;
651 TGeoTranslation* tr_boatL =
new TGeoTranslation(
"tr_boatL", 0, 0, 0.79);
652 tr_boatL->RegisterYourself();
655 Double_t radin_boatR = 47.2;
656 Double_t radout_boatR = 50.3;
657 Double_t high_boatR = 1.6;
658 Double_t angin_boatR = 311.25;
659 Double_t angfin_boatR = 332.;
661 TGeoTranslation* tr_boatR =
new TGeoTranslation(
"tr_boatR", 0, 0, 0.79);
662 tr_boatR->RegisterYourself();
665 Double_t radin_arcutL = 46.;
666 Double_t radout_arcutL = 50.5;
667 Double_t high_arcutL = 1.6;
668 Double_t angin_arcutL = 230.65;
669 Double_t angfin_arcutL = 256.7;
671 TGeoTranslation* tr_arcutL =
new TGeoTranslation(
"tr_arcutL", 0, 0, 0.79);
672 tr_arcutL->RegisterYourself();
675 Double_t radin_arcutR = 46.;
676 Double_t radout_arcutR = 50.5;
677 Double_t high_arcutR = 1.6;
678 Double_t angin_arcutR = 283.4;
679 Double_t angfin_arcutR = 309.35;
683 TGeoXtru* canine_cutL =
new TGeoXtru(2);
684 canine_cutL->SetName(
"canine_cutL");
685 Double_t x_canine_cutL[6] = {-33.06, -28.51, -26.38,
686 -26.41, -28.61, -31.62};
687 Double_t y_canine_cutL[6] = {-38.93, -41.94, -37.85, -36.83, -34.9, -38.67};
688 canine_cutL->DefinePolygon(6, x_canine_cutL, y_canine_cutL);
689 canine_cutL->DefineSection(0, -2.4, 0., 0., 1);
690 canine_cutL->DefineSection(1, 2.4, 0., 0., 1);
693 TGeoXtru* canine_cutR =
new TGeoXtru(2);
694 canine_cutR->SetName(
"canine_cutR");
695 Double_t x_canine_cutR[6] = {33.06, 28.51, 26.38, 26.41, 28.61, 31.62};
696 Double_t y_canine_cutR[6] = {-38.93, -41.94, -37.85, -36.83, -34.9, -38.67};
697 canine_cutR->DefinePolygon(6, x_canine_cutR, y_canine_cutR);
698 canine_cutR->DefineSection(0, -2.4, 0., 0., 1);
699 canine_cutR->DefineSection(1, 2.4, 0., 0., 1);
702 TGeoXtru* triacut_downL =
new TGeoXtru(2);
703 triacut_downL->SetName(
"triacut_downL");
704 Double_t x_triacut_downL[3] = {-16.52, -10.57, -10.57};
705 Double_t y_triacut_downL[3] = {-50, -50, -44.96};
706 triacut_downL->DefinePolygon(3, x_triacut_downL, y_triacut_downL);
707 triacut_downL->DefineSection(0, -2.4, 0., 0., 1);
708 triacut_downL->DefineSection(1, 2.4, 0., 0., 1);
711 TGeoXtru* triacut_downR =
new TGeoXtru(2);
712 triacut_downR->SetName(
"triacut_downR");
713 Double_t x_triacut_downR[3] = {16.52, 10.57, 10.57};
714 Double_t y_triacut_downR[3] = {-50, -50, -44.96};
715 triacut_downR->DefinePolygon(3, x_triacut_downR, y_triacut_downR);
716 triacut_downR->DefineSection(0, -2.4, 0., 0., 1);
717 triacut_downR->DefineSection(1, 2.4, 0., 0., 1);
720 Double_t radin_lip = 47.7;
721 Double_t radout_lip = 48.2;
722 Double_t high_lip = 0.69;
723 Double_t angin_lip = 258.;
724 Double_t angfin_lip = 282.;
726 TGeoTranslation* tr_lip =
new TGeoTranslation(
"tr_lip", 0, 0, 0.35 - 0.09);
727 tr_lip->RegisterYourself();
730 TGeoXtru* lip_cornerL =
new TGeoXtru(2);
731 lip_cornerL->SetName(
"lip_cornerL");
733 Double_t x_lip_cornerL[7] = {-10.59, -10.02, -9.64, -10.09,
734 -10.09, -10.76, -10.59};
735 Double_t y_lip_cornerL[7] = {-46.48, -47.15, -46.88, -46.32,
736 -44.86, -44.79, -45.26};
737 lip_cornerL->DefinePolygon(7, x_lip_cornerL, y_lip_cornerL);
738 lip_cornerL->DefineSection(0, -0.09, 0., 0., 1);
739 lip_cornerL->DefineSection(1, 0.6, 0., 0., 1);
742 TGeoXtru* lip_cornerR =
new TGeoXtru(2);
743 lip_cornerR->SetName(
"lip_cornerR");
745 Double_t x_lip_cornerR[6] = {10.59, 10.02, 9.64, 10.09, 10.09, 10.59};
746 Double_t y_lip_cornerR[6] = {-46.48, -47.15, -46.88, -46.32, -44.51, -44.51};
747 lip_cornerR->DefinePolygon(6, x_lip_cornerR, y_lip_cornerR);
748 lip_cornerR->DefineSection(0, -0.09, 0., 0., 1);
749 lip_cornerR->DefineSection(1, 0.6, 0., 0., 1);
752 TGeoXtru* tear_L =
new TGeoXtru(2);
753 tear_L->SetName(
"tear_L");
755 Double_t x_tear_L[4] = {-24.12, -23.71, -20.16, -20.55};
756 Double_t y_tear_L[4] = {-29.69, -29.99, -24.97, -24.78};
757 tear_L->DefinePolygon(4, x_tear_L, y_tear_L);
758 tear_L->DefineSection(0, -0.09, 0., 0., 1);
759 tear_L->DefineSection(1, 0.6, 0., 0., 1);
762 TGeoXtru* tear_R =
new TGeoXtru(2);
763 tear_R->SetName(
"tear_R");
765 Double_t x_tear_R[4] = {24.12, 23.71, 20.16, 20.55};
766 Double_t y_tear_R[4] = {-29.69, -29.99, -24.97, -24.78};
767 tear_R->DefinePolygon(4, x_tear_R, y_tear_R);
768 tear_R->DefineSection(0, -0.09, 0., 0.,
770 tear_R->DefineSection(1, 0.6, 0., 0., 1);
772 TGeoTranslation* tra_B =
new TGeoTranslation(
"tra_B", 0, 0, -4.7);
773 tra_B->RegisterYourself();
775 new TGeoTubeSeg(
"S_DISCB", radin_discB, radout_discB, high_discB / 2,
776 angin_discB, angfin_discB);
778 new TGeoBBox(
"nhawi_box", x_wibox / 2, y_wibox / 2, z_wibox / 2);
780 new TGeoBBox(
"vert_box", x_vbox / 2, y_vbox / 2, z_vbox / 2);
782 new TGeoTubeSeg(
"boatL", radin_boatL, radout_boatL, high_boatL / 2,
783 angin_boatL, angfin_boatL);
785 new TGeoTubeSeg(
"boatR", radin_boatR, radout_boatR, high_boatR / 2,
786 angin_boatR, angfin_boatR);
788 new TGeoTubeSeg(
"arcutL", radin_arcutL, radout_arcutL, high_arcutL / 2,
789 angin_arcutL, angfin_arcutL);
791 new TGeoTubeSeg(
"arcutR", radin_arcutR, radout_arcutR, high_arcutR / 2,
792 angin_arcutR, angfin_arcutR);
794 new TGeoTubeSeg(
"lip", radin_lip, radout_lip, high_lip / 2, angin_lip,
799 new TGeoCompositeShape(
801 "S_DISCB -BOX1 -S_TRIA_CUT1 -S_TRIA_CUT2 -central_cut - "
802 "S_CIRC_AHOLE:tr_B - arcutL -arcutR - canine_cutL "
803 "-canine_cutR - triacut_downL - triacut_downR");
805 new TGeoCompositeShape(
807 " nhawi_box:tr_wiL +nhawi_box:tr_wiR + vert_box:tr_vboxL + "
808 "vert_box:tr_vboxR +eyebrowL +eyebrowR + axeR + axeL + sharkL + sharkR "
809 "+ boatL:tr_boatL + boatR:tr_boatR + lip:tr_lip + lip_cornerL + "
810 "lip_cornerR + tear_L + tear_R");
812 new TGeoCompositeShape(
"baseB_Shape_2",
813 " baseB_Shape_0:tra_B + baseB_Shape_1:tra_B");
815 auto* patchpanel_Shape =
new TGeoCompositeShape(
816 "patchpanel_Shape",
" baseA_Shape_3 + baseB_Shape_2");
818 auto* patchpanel_Volume =
819 new TGeoVolume(
"patchpanel_Volume", patchpanel_Shape, kMedAlu);
823 Double_t radin_pl0 = 33;
824 Double_t radout_pl0 = 45;
825 Double_t high_pl0 = 0.15;
826 Double_t angin_pl0 = 20.;
827 Double_t angfin_pl0 = 30.;
829 Double_t radin_pl1 = 33;
830 Double_t radout_pl1 = 49;
831 Double_t high_pl1 = 0.15;
832 Double_t angin_pl1 = 31.;
833 Double_t angfin_pl1 = 49.;
836 Double_t radin_pl2 = 32;
837 Double_t radout_pl2 = 49;
838 Double_t high_pl2 = 0.3;
839 Double_t angin_pl2 = 57.;
840 Double_t angfin_pl2 = 75.;
842 Double_t radin_pl3 = 29;
843 Double_t radout_pl3 = 47;
844 Double_t high_pl3 = 0.3;
845 Double_t angin_pl3 = 75.5;
846 Double_t angfin_pl3 = 104.5;
848 Double_t radin_pl4 = 32;
849 Double_t radout_pl4 = 49;
850 Double_t high_pl4 = 0.3;
851 Double_t angin_pl4 = 105.;
852 Double_t angfin_pl4 = 122.;
855 Double_t radin_pl5 = 33;
856 Double_t radout_pl5 = 49;
857 Double_t high_pl5 = 0.15;
858 Double_t angin_pl5 = 131;
859 Double_t angfin_pl5 = 149;
861 Double_t radin_pl6 = 33;
862 Double_t radout_pl6 = 45;
863 Double_t high_pl6 = 0.15;
864 Double_t angin_pl6 = 150;
865 Double_t angfin_pl6 = 160;
868 new TGeoTubeSeg(
"plate_0", radin_pl0, radout_pl0, high_pl0 / 2,
869 180. + angin_pl0, 180. + angfin_pl0);
871 new TGeoTubeSeg(
"plate_1", radin_pl1, radout_pl1, high_pl1 / 2,
872 180. + angin_pl1, 180. + angfin_pl1);
874 new TGeoTubeSeg(
"plate_2", radin_pl2, radout_pl2, high_pl2 / 2,
875 180. + angin_pl2, 180. + angfin_pl2);
877 new TGeoTubeSeg(
"plate_3", radin_pl3, radout_pl3, high_pl3 / 2,
878 180. + angin_pl3, 180. + angfin_pl3);
880 new TGeoTubeSeg(
"plate_4", radin_pl4, radout_pl4, high_pl4 / 2,
881 180. + angin_pl4, 180. + angfin_pl4);
883 new TGeoTubeSeg(
"plate_5", radin_pl5, radout_pl5, high_pl5 / 2,
884 180. + angin_pl5, 180. + angfin_pl5);
886 new TGeoTubeSeg(
"plate_6", radin_pl6, radout_pl6, high_pl6 / 2,
887 180. + angin_pl6, 180. + angfin_pl6);
888 auto* plate_Shape =
new TGeoCompositeShape(
890 "plate_0 + plate_1 + plate_2 + plate_3 + plate_4 + plate_5 + plate_6");
891 auto* plate_Volume =
new TGeoVolume(
"plate_Volume", plate_Shape, kMedCu);
892 auto* tr_pl =
new TGeoTranslation(
"tr_pl", 0, 0, -2.4);
893 tr_pl->RegisterYourself();
894 plate_Volume->SetLineColor(kGray + 2);
896 auto* tr_fin =
new TGeoTranslation(
"tr_fin", 0, 0, -0.2);
897 tr_fin->RegisterYourself();
901 Double_t xcable = 12.0;
902 Double_t ycable = 0.28;
903 Double_t zcable = 20.0;
904 TGeoVolume* v_cable0 = gGeoManager->MakeBox(
"v_cable0", kMedCu, xcable / 2,
905 ycable / 2, zcable / 2);
906 auto* r_cable0 =
new TGeoRotation(
"rotation_cable0", 24., 8., 0.);
907 r_cable0->RegisterYourself();
908 Double_t Xcable = 18.5;
909 Double_t Ycable = -42.5;
910 Double_t Zcable = -(zcable / 2. + 4.);
911 auto* p_cable0 =
new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable0);
912 p_cable0->RegisterYourself();
913 PatchPanelVolume->AddNode(v_cable0, 1, p_cable0);
915 TGeoVolume* v_cable1 = gGeoManager->MakeBox(
"v_cable1", kMedCu, xcable / 2,
916 ycable / 2, zcable / 2);
917 auto* r_cable1 =
new TGeoRotation(
"rotation_cable1", -24., 8., 0.);
918 r_cable1->RegisterYourself();
920 auto* p_cable1 =
new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable1);
921 p_cable1->RegisterYourself();
922 PatchPanelVolume->AddNode(v_cable1, 1, p_cable1);
925 TGeoVolume* v_cable2 = gGeoManager->MakeBox(
"v_cable2", kMedCu, xcable / 2,
926 ycable / 2, zcable / 2);
927 auto* r_cable2 =
new TGeoRotation(
"rotation_cable2", 24., -5., 0.);
928 r_cable2->RegisterYourself();
932 auto* p_cable2 =
new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable2);
933 p_cable2->RegisterYourself();
934 PatchPanelVolume->AddNode(v_cable2, 1, p_cable2);
936 TGeoVolume* v_cable3 = gGeoManager->MakeBox(
"v_cable3", kMedCu, xcable / 2,
937 ycable / 2, zcable / 2);
938 auto* r_cable3 =
new TGeoRotation(
"rotation_cable3", -24., -5., 0.);
939 r_cable3->RegisterYourself();
941 auto* p_cable3 =
new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable3);
942 p_cable3->RegisterYourself();
943 PatchPanelVolume->AddNode(v_cable3, 1, p_cable3);
946 TGeoVolume* v_cable4 = gGeoManager->MakeBox(
"v_cable4", kMedCu, xcable / 2,
947 ycable / 2, zcable / 2);
948 auto* r_cable4 =
new TGeoRotation(
"rotation_cable4", 24., -10., 0.);
949 r_cable4->RegisterYourself();
953 auto* p_cable4 =
new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable4);
954 p_cable4->RegisterYourself();
955 PatchPanelVolume->AddNode(v_cable4, 1, p_cable4);
957 TGeoVolume* v_cable5 = gGeoManager->MakeBox(
"v_cable5", kMedCu, xcable / 2,
958 ycable / 2, zcable / 2);
959 auto* r_cable5 =
new TGeoRotation(
"rotation_cable5", -24., -10., 0.);
960 r_cable5->RegisterYourself();
962 auto* p_cable5 =
new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable5);
963 p_cable5->RegisterYourself();
964 PatchPanelVolume->AddNode(v_cable5, 1, p_cable5);
966 v_cable0->SetLineColor(kGray + 2);
967 v_cable1->SetLineColor(kGray + 2);
968 v_cable2->SetLineColor(kGray + 2);
969 v_cable3->SetLineColor(kGray + 2);
970 v_cable4->SetLineColor(kGray + 2);
971 v_cable5->SetLineColor(kGray + 2);
975 patchpanel_Volume->SetLineColor(kGreen - 9);
976 PatchPanelVolume->AddNode(patchpanel_Volume, 1, tr_fin);
977 PatchPanelVolume->AddNode(plate_Volume, 2, tr_pl);
979 return PatchPanelVolume;