Project
Loading...
Searching...
No Matches
PatchPanel.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#include "MFTBase/PatchPanel.h"
16#include "TGeoBBox.h"
17#include "TGeoCompositeShape.h"
18#include "TGeoCone.h"
19#include "TGeoManager.h"
20#include "TGeoMaterial.h"
21#include "TGeoMatrix.h"
22#include "TGeoMedium.h"
23#include "TGeoShape.h"
24#include "TGeoTrd1.h"
25#include "TGeoTube.h"
26#include "TGeoVolume.h"
27#include "TGeoXtru.h"
28#include "TMath.h"
29
30using namespace o2::mft;
31
33
34//_____________________________________________________________________________
35PatchPanel::PatchPanel() //: TNamed(), mPatchPanel(nullptr)
36{
38 // default constructor
39}
40
41//_____________________________________________________________________________
42// PatchPanel::~PatchPanel() = default;
43
44//_____________________________________________________________________________
45TGeoVolumeAssembly* PatchPanel::createPatchPanel()
46{
47
48 auto* PatchPanelVolume = new TGeoVolumeAssembly("PatchPanelVolume");
49
50 TGeoMedium* kMedAlu = gGeoManager->GetMedium("MFT_Alu$");
51 TGeoMedium* kMedCu = gGeoManager->GetMedium("MFT_Cu$");
52
54
55 // auto* face_A = new TGeoVolumeAssembly("face_A");
56 // seg tub disc ;)
57 Double_t radin_disc = 28.0;
58 Double_t radout_disc = 50.3; // cm
59 Double_t high_disc = 0.4; // cm
60 Double_t ang_in_disc = 180.;
61 Double_t ang_fin_disc = 360;
62
63 // seg tub 2 SCUT1 ;)
64 Double_t radin_scut1 = 0;
65 Double_t radout_scut1 = 15.5;
66 Double_t high_scut1 = 2; // cm
67 Double_t ang_in_scut1 = 180;
68 Double_t ang_fin_scut1 = 270;
69
70 TGeoTranslation* tr_discL =
71 new TGeoTranslation("tr_discL", -12.5, -10.4, 0); // left
72 tr_discL->RegisterYourself();
73
74 TGeoTranslation* tr_discR = new TGeoTranslation("tr_discR", 12.5, -10.4, 0);
75 tr_discR->RegisterYourself();
76
77 // seg tub 3 SCUT2 ;)
78 Double_t radin_scut2 = 0;
79 Double_t radout_scut2 = 15.5; // cm
80 Double_t high_scut2 = 2; // cm
81 Double_t ang_in_scut2 = 270;
82 Double_t ang_fin_scut2 = 360.;
83
84 // holes tub 1hole tranversal o3.5
85 Double_t radin_holeB = 0.;
86 Double_t radout_holeB = 0.175; // diameter 3.5 H11
87 Double_t high_holeB = 1.5;
88 TGeoTranslation* tr1_holeB = new TGeoTranslation("tr1_holeB", -7.5, -28.8, 0);
89 tr1_holeB->RegisterYourself();
90
91 TGeoTranslation* tr2_holeB = new TGeoTranslation("tr2_holeB", 7.5, -28.8, 0);
92 tr2_holeB->RegisterYourself();
93
94 // box 1 |==|
95 Double_t x_1box = 105.0;
96 Double_t y_1box = 11.81; // 5.9 distanc
97 Double_t z_1box = 1.4;
98
99 // box 2 ;)
100 Double_t x_2box = 20; // cm
101 Double_t y_2box = 60.6; // from origin 30.0397 cm , 60.0784
102 Double_t z_2box = 2;
103
105 TGeoXtru* tria_cut1 = new TGeoXtru(2);
106 tria_cut1->SetName("S_TRIA_CUT1");
107
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.,
112 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
113 tria_cut1->DefineSection(1, 2.4, 0., 0., 1);
114
115 // triangular border left
116 TGeoXtru* tria_cut2 = new TGeoXtru(2);
117 tria_cut2->SetName("S_TRIA_CUT2");
118
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.,
123 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
124 tria_cut2->DefineSection(1, 2.45, 0., 0., 1);
125
126 // hole A
127 Double_t radin_A1 = 0; // diam 0
128 Double_t radout_A1 = 0.223; // dia 0.246
129 Double_t high_A1 = 10; // dz 6
130
131 TGeoTranslation* tr_A1 =
132 new TGeoTranslation("tr_A1", -18.627, -24.278, 0); // A hole
133 tr_A1->RegisterYourself();
134
135 TGeoTranslation* tr_B = new TGeoTranslation("tr_B", 18.627, -24.278, 0);
136 tr_B->RegisterYourself();
137
138 TGeoTranslation* tr_II = new TGeoTranslation("tr_II", -25.25, -6.65, 0);
139 tr_II->RegisterYourself();
140
141 //
142 TGeoTranslation* tr_H = new TGeoTranslation("tr_H", -26.092, -34.042, 0);
143 tr_H->RegisterYourself();
144
145 // shoulder
146 TGeoXtru* shoulder = new TGeoXtru(2);
147 shoulder->SetName("S_shoulder");
148
150
151 Double_t x_shoulder[4] = {-13.9, -13.9, 13.8,
152 13.8}; // vertices to coincide with hone
153 Double_t y_shoulder[4] = {-24.4, -26.45, -26.45, -24.4}; //
154
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); //
158
159 // HANDS
160 TGeoXtru* hand_L = new TGeoXtru(2);
161 hand_L->SetName("hand_L"); // S_HANDL
162
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.,
169 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
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");
174
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.,
179 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
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");
187
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);
196
197 TGeoXtru* part_handR = new TGeoXtru(2);
198 part_handR->SetName("part_handR");
199
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);
205
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;
212
213 TGeoTranslation* tr_hornl =
214 new TGeoTranslation("tr_hornl", -13.8, -17.4, 2.2);
215 tr_hornl->RegisterYourself();
216
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;
222
223 TGeoTranslation* tr_hornR = new TGeoTranslation("tr_hornR", 13.8, -17.4, 2.2);
224 tr_hornR->RegisterYourself();
225
226 // arm box
227 Double_t x_Abox = 15.6;
228 Double_t y_Abox = 1.5;
229 Double_t z_Abox = 4.8;
230
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); // to start in the lamine
235 combi_rotzp54->SetName("combi_zp54");
236 combi_rotzp54->RegisterYourself();
237
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); // y=
242 combi_rotzn54->SetName("combi_zn54");
243 combi_rotzn54->RegisterYourself();
244
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;
251
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;
258
259 TGeoTranslation* tr_cext =
260 new TGeoTranslation("tr_cext", 0, 0, 2.3); // to put over the disc
261 tr_cext->RegisterYourself();
262
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;
269
270 // seg tub 1 hole
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;
276
278 Double_t radin_hole1 = 0;
279 Double_t radout_hole1 = 0.4;
280 Double_t high_hole1 = 1.36;
281
282 // circular hole2 ; hole2 r=6.7
283 Double_t radin_hole2 = 0;
284 Double_t radout_hole2 = 0.335;
285 Double_t high_hole2 = 1.36;
286
287 // box 4 lamine 1
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();
294
295 TGeoTranslation* tr_2la =
296 new TGeoTranslation("tr_2la", 0, -8.1, high_disc / 2); //
297 tr_2la->RegisterYourself();
298
300 Double_t x_2labox = 51.2;
301 Double_t y_2labox = 2.8; //
302 Double_t z_2labox = 0.303;
303
304 // cut lateral Left
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.;
310
311 // cut lateral Right
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;
317
318 // small section of disc
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.;
324
325 TGeoTranslation* tr_slimL =
326 new TGeoTranslation("tr_slimL", 0, 0, high_slimdisL / 2 - 0.1); //
327 tr_slimL->RegisterYourself();
328
329 // small section of disc R
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.;
335
336 // piramide
337 TGeoXtru* pyramid = new TGeoXtru(2);
338 pyramid->SetName("pyramid");
339
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.,
344 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
345 pyramid->DefineSection(1, 4.8, 0., 0., 1);
347
348 TGeoXtru* tanqL = new TGeoXtru(2);
349 tanqL->SetName("tanqL");
350
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);
357
358 TGeoXtru* tanqR = new TGeoXtru(2);
359 tanqR->SetName("tanqR");
360
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);
366
367 // eyess L
368 TGeoXtru* frog_eyeL = new TGeoXtru(2);
369 frog_eyeL->SetName("frog_eyeL");
370
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);
377 // eyess R
378 TGeoXtru* frog_eyeR = new TGeoXtru(2);
379 frog_eyeR->SetName("frog_eyeR");
380
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);
386
387 TGeoRotation* rot_A = new TGeoRotation("rot_A", 180, 180, 0);
388 rot_A->SetName("rot_A");
389 rot_A->RegisterYourself();
390
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;
397
398 TGeoTranslation* tr_slide =
399 new TGeoTranslation("tr_slide", 0, 0, 4.832); // 2.39
400 tr_slide->RegisterYourself();
401
403 Double_t radin_slideR = 48;
404 Double_t radout_slideR = 53;
405 Double_t high_slideR = 3.15; // 31.44
406 Double_t angin_slideR = 311.2;
407 Double_t angfin_slideR = 313.5;
408
410 TGeoXtru* earL = new TGeoXtru(2);
411 earL->SetName("earL");
412
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.,
419 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
420 earL->DefineSection(1, 1.2, 0., 0., 1);
421
422 TGeoXtru* earR = new TGeoXtru(2);
423 earR->SetName("earR");
424
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.,
430 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
431 earR->DefineSection(1, 1.2, 0., 0., 1);
432
434
435 new TGeoTube("S_CIRC_AHOLE", radin_A1, radout_A1, high_A1 / 2);
436
437 new TGeoTubeSeg("S_DISC", radin_disc, radout_disc, high_disc / 2, ang_in_disc,
438 ang_fin_disc);
439
440 new TGeoTubeSeg("S_SCUT1", radin_scut1, radout_scut1, high_scut1 / 2,
441 ang_in_scut1, ang_fin_scut1);
442
443 new TGeoTubeSeg("S_SCUT2", radin_scut2, radout_scut2, high_scut2 / 2,
444 ang_in_scut2, ang_fin_scut2);
445
446 // new TGeoTubeSeg("S_ARM", radin_arm, radout_arm, high_arm / 2, angin_arm,
447 // angfin_arm); new TGeoTubeSeg("S_ARM_R", radin_armR, radout_armR, high_armR
448 // / 2, angin_armR, angfin_armR);
449
450 new TGeoBBox("Abox", x_Abox / 2, y_Abox / 2, z_Abox / 2);
451
452 new TGeoTubeSeg("smile", radin_sm, radout_sm, high_sm / 2, angin_sm,
453 angfin_sm);
454
455 new TGeoTubeSeg("c_ext", radin_cext, radout_cext, high_cext / 2, angin_cext,
456 angfin_cext);
457
458 new TGeoTubeSeg("kiroc", radin_kiroc, radout_kiroc, high_kiroc / 2,
459 angin_kiroc, angfin_kiroc);
460
461 new TGeoTubeSeg("cutlatL", radin_cutlatL, radout_cutlatL, high_cutlatL / 2,
462 angin_cutlatL, angfin_cutlatL);
463
464 new TGeoTubeSeg("cutlatR", radin_cutlatR, radout_cutlatR, high_cutlatR / 2,
465 angin_cutlatR, angfin_cutlatR);
466
467 new TGeoTubeSeg("slimdisL", radin_slimdisL, radout_slimdisL,
468 high_slimdisL / 2, angin_slimdisL, angfin_slimdisL);
469
470 new TGeoTubeSeg("slimdisR", radin_slimdisR, radout_slimdisR,
471 high_slimdisR / 2, angin_slimdisR, angfin_slimdisR);
472
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);
475
476 new TGeoBBox("LA_BOX", x_labox / 2, y_labox / 2, z_labox / 2);
477
478 new TGeoBBox("LA_2BOX", x_2labox / 2, y_2labox / 2, z_2labox / 2);
479
480 new TGeoTubeSeg("SEG_1HOLE", radin_1hole, radout_1hole, high_1hole / 2,
481 ang_in_1hole, ang_fin_1hole);
482
483 new TGeoTubeSeg("S_SEG_HORNL", radin_hornL, radout_hornL, high_hornL / 2,
484 angin_hornL, angfin_hornL);
485
486 new TGeoTubeSeg("S_SEG_HORNR", radin_hornR, radout_hornR, high_hornR / 2,
487 angin_hornR, angfin_hornR);
488
489 new TGeoTube("S_CIRC_HOLE1", radin_hole1, radout_hole1, high_hole1 / 2);
490
491 new TGeoTube("S_CIRC_HOLE2", radin_hole2, radout_hole2, high_hole2 / 2);
492
493 new TGeoTube("S_CIRC_HOLEB", radin_holeB, radout_holeB, high_holeB / 2);
494
495 new TGeoTubeSeg("s_slideL", radin_slideL, radout_slideL, high_slideL / 2,
496 angin_slideL, angfin_slideL);
497
498 new TGeoTubeSeg("s_slideR", radin_slideR, radout_slideR, high_slideR / 2,
499 angin_slideR, angfin_slideR);
500
502
503 new TGeoCompositeShape(
504 "baseA_Shape_0",
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 ");
508
509 new TGeoCompositeShape(
510 "baseA_Shape_1",
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 "
513 " ");
514
515 new TGeoCompositeShape(
516 "baseA_Shape_2",
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");
522
523 new TGeoCompositeShape("baseA_Shape_3",
524 " (baseA_Shape_0 + baseA_Shape_2 - earL - "
525 "earR):rot_A + baseA_Shape_1:rot_A");
526
528
529 // auto* face_B = new TGeoVolumeAssembly("face_B");
530 // principal disc ;)
531 Double_t radin_discB = 0.;
532 Double_t radout_discB = 50.3; // cm
533 Double_t high_discB = 0.2; // cm
534 Double_t angin_discB = 180.;
535 Double_t angfin_discB = 360;
536
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.,
545 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
546 central_cut->DefineSection(1, 2.4, 0., 0., 1);
547
548 // nhawi box
549 Double_t x_wibox = 14.628;
550 Double_t y_wibox = 0.5;
551 Double_t z_wibox = 0.7;
552
553 TGeoTranslation* tr_wiL = new TGeoTranslation(
554 "tr_wiL", -11.013, -27.5, 0.35 - 0.09); // z_wibox/2 - high_discB/2)
555 tr_wiL->RegisterYourself();
556
557 TGeoTranslation* tr_wiR =
558 new TGeoTranslation("tr_wiR", 11.013, -27.5, 0.35 - 0.09);
559 tr_wiR->RegisterYourself();
560
561 // vertical_ box
562 Double_t x_vbox = 0.5; //
563 Double_t y_vbox = 2.1; //
564 Double_t z_vbox = 0.7;
565
566 TGeoTranslation* tr_vboxL =
567 new TGeoTranslation("tr_vboxL", -26.55, -12.4, 0.35 - 0.09);
568 tr_vboxL->RegisterYourself();
569
570 TGeoTranslation* tr_vboxR =
571 new TGeoTranslation("tr_vboxR", 26.55, -12.4, 0.35 - 0.09);
572 tr_vboxR->RegisterYourself();
573
574 // eyebrow
575 TGeoXtru* eyebrowL = new TGeoXtru(2);
576 eyebrowL->SetName("eyebrowL"); // S_HANDL
577
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.,
584 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
585 eyebrowL->DefineSection(1, 0.5, 0., 0., 1);
586 // eyebrow
587 TGeoXtru* eyebrowR = new TGeoXtru(2);
588 eyebrowR->SetName("eyebrowR");
589
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.,
596 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
597 eyebrowR->DefineSection(1, 0.5, 0., 0., 1);
598
599 // axe
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);
608 //
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);
619
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);
632
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);
643
645 Double_t radin_boatL = 47.2; //
646 Double_t radout_boatL = 50.3; // cm
647 Double_t high_boatL = 1.6; // cm
648 Double_t angin_boatL = 208.;
649 Double_t angfin_boatL = 228.75; // 48.75
650
651 TGeoTranslation* tr_boatL = new TGeoTranslation("tr_boatL", 0, 0, 0.79);
652 tr_boatL->RegisterYourself();
653
654 // bo
655 Double_t radin_boatR = 47.2;
656 Double_t radout_boatR = 50.3; // cm
657 Double_t high_boatR = 1.6; // cm
658 Double_t angin_boatR = 311.25;
659 Double_t angfin_boatR = 332.;
660
661 TGeoTranslation* tr_boatR = new TGeoTranslation("tr_boatR", 0, 0, 0.79);
662 tr_boatR->RegisterYourself();
663
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; // angY 55.65
669 Double_t angfin_arcutL = 256.7; // angY 76.5 (256.5)
670
671 TGeoTranslation* tr_arcutL = new TGeoTranslation("tr_arcutL", 0, 0, 0.79);
672 tr_arcutL->RegisterYourself();
673
675 Double_t radin_arcutR = 46.;
676 Double_t radout_arcutR = 50.5; // cm
677 Double_t high_arcutR = 1.6; // cm
678 Double_t angin_arcutR = 283.4; // angY 50.65
679 Double_t angfin_arcutR = 309.35; // angY 76.5
681
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);
691
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);
700
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);
709
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);
718
720 Double_t radin_lip = 47.7;
721 Double_t radout_lip = 48.2; // mm
722 Double_t high_lip = 0.69; // mm
723 Double_t angin_lip = 258.; // angY 12
724 Double_t angfin_lip = 282.; // angY 282
725
726 TGeoTranslation* tr_lip = new TGeoTranslation("tr_lip", 0, 0, 0.35 - 0.09);
727 tr_lip->RegisterYourself();
728
730 TGeoXtru* lip_cornerL = new TGeoXtru(2);
731 lip_cornerL->SetName("lip_cornerL");
732
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);
740
742 TGeoXtru* lip_cornerR = new TGeoXtru(2);
743 lip_cornerR->SetName("lip_cornerR");
744
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);
750
752 TGeoXtru* tear_L = new TGeoXtru(2);
753 tear_L->SetName("tear_L");
754
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);
760
762 TGeoXtru* tear_R = new TGeoXtru(2);
763 tear_R->SetName("tear_R");
764
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.,
769 1); //(plane,-zplane/ +zplane, x0, y0,(x/y))
770 tear_R->DefineSection(1, 0.6, 0., 0., 1);
771
772 TGeoTranslation* tra_B = new TGeoTranslation("tra_B", 0, 0, -4.7); //-4.8
773 tra_B->RegisterYourself();
774
775 new TGeoTubeSeg("S_DISCB", radin_discB, radout_discB, high_discB / 2,
776 angin_discB, angfin_discB);
777
778 new TGeoBBox("nhawi_box", x_wibox / 2, y_wibox / 2, z_wibox / 2);
779
780 new TGeoBBox("vert_box", x_vbox / 2, y_vbox / 2, z_vbox / 2);
781
782 new TGeoTubeSeg("boatL", radin_boatL, radout_boatL, high_boatL / 2,
783 angin_boatL, angfin_boatL);
784
785 new TGeoTubeSeg("boatR", radin_boatR, radout_boatR, high_boatR / 2,
786 angin_boatR, angfin_boatR);
787
788 new TGeoTubeSeg("arcutL", radin_arcutL, radout_arcutL, high_arcutL / 2,
789 angin_arcutL, angfin_arcutL);
790
791 new TGeoTubeSeg("arcutR", radin_arcutR, radout_arcutR, high_arcutR / 2,
792 angin_arcutR, angfin_arcutR);
793
794 new TGeoTubeSeg("lip", radin_lip, radout_lip, high_lip / 2, angin_lip,
795 angfin_lip);
796
798
799 new TGeoCompositeShape(
800 "baseB_Shape_0",
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");
804
805 new TGeoCompositeShape(
806 "baseB_Shape_1",
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");
811
812 new TGeoCompositeShape("baseB_Shape_2",
813 " baseB_Shape_0:tra_B + baseB_Shape_1:tra_B");
814
815 auto* patchpanel_Shape = new TGeoCompositeShape(
816 "patchpanel_Shape", " baseA_Shape_3 + baseB_Shape_2");
817
818 auto* patchpanel_Volume =
819 new TGeoVolume("patchpanel_Volume", patchpanel_Shape, kMedAlu);
820
821 //====== Contents of the patch panel (cables, pipes, cards) coded as plates
822 //======
823 Double_t radin_pl0 = 33; // inner radius
824 Double_t radout_pl0 = 45; // outer radius
825 Double_t high_pl0 = 0.15; // thickness
826 Double_t angin_pl0 = 20.; // theta min
827 Double_t angfin_pl0 = 30.; // theta max
828
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.;
834
835 //=== Central part with high density of materials ==
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.;
841
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;
847
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.;
853 //===================================================
854
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;
860
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;
866
867 auto* plate_0 =
868 new TGeoTubeSeg("plate_0", radin_pl0, radout_pl0, high_pl0 / 2,
869 180. + angin_pl0, 180. + angfin_pl0);
870 auto* plate_1 =
871 new TGeoTubeSeg("plate_1", radin_pl1, radout_pl1, high_pl1 / 2,
872 180. + angin_pl1, 180. + angfin_pl1);
873 auto* plate_2 =
874 new TGeoTubeSeg("plate_2", radin_pl2, radout_pl2, high_pl2 / 2,
875 180. + angin_pl2, 180. + angfin_pl2);
876 auto* plate_3 =
877 new TGeoTubeSeg("plate_3", radin_pl3, radout_pl3, high_pl3 / 2,
878 180. + angin_pl3, 180. + angfin_pl3);
879 auto* plate_4 =
880 new TGeoTubeSeg("plate_4", radin_pl4, radout_pl4, high_pl4 / 2,
881 180. + angin_pl4, 180. + angfin_pl4);
882 auto* plate_5 =
883 new TGeoTubeSeg("plate_5", radin_pl5, radout_pl5, high_pl5 / 2,
884 180. + angin_pl5, 180. + angfin_pl5);
885 auto* plate_6 =
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(
889 "plate_Shape",
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);
895
896 auto* tr_fin = new TGeoTranslation("tr_fin", 0, 0, -0.2);
897 tr_fin->RegisterYourself();
898
899 //====== Connection to the C-Side, along the hadronic absorber
900
901 Double_t xcable = 12.0; // width
902 Double_t ycable = 0.28; // thickness
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);
914
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();
919 Xcable = -18.5;
920 auto* p_cable1 = new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable1);
921 p_cable1->RegisterYourself();
922 PatchPanelVolume->AddNode(v_cable1, 1, p_cable1);
923
924 zcable = 170.;
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();
929 Xcable = 21.;
930 Ycable = -48.;
931 Zcable = -108.8;
932 auto* p_cable2 = new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable2);
933 p_cable2->RegisterYourself();
934 PatchPanelVolume->AddNode(v_cable2, 1, p_cable2);
935
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();
940 Xcable = -21.;
941 auto* p_cable3 = new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable3);
942 p_cable3->RegisterYourself();
943 PatchPanelVolume->AddNode(v_cable3, 1, p_cable3);
944
945 zcable = 170.;
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();
950 Xcable = 30.5;
951 Ycable = -68.5;
952 Zcable = -278.;
953 auto* p_cable4 = new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable4);
954 p_cable4->RegisterYourself();
955 PatchPanelVolume->AddNode(v_cable4, 1, p_cable4);
956
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();
961 Xcable = -30.5;
962 auto* p_cable5 = new TGeoCombiTrans(Xcable, Ycable, Zcable, r_cable5);
963 p_cable5->RegisterYourself();
964 PatchPanelVolume->AddNode(v_cable5, 1, p_cable5);
965
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);
972
973 //===========================================================
974
975 patchpanel_Volume->SetLineColor(kGreen - 9);
976 PatchPanelVolume->AddNode(patchpanel_Volume, 1, tr_fin);
977 PatchPanelVolume->AddNode(plate_Volume, 2, tr_pl);
978
979 return PatchPanelVolume;
980}
ClassImp(o2::mft::PatchPanel)
MFT Patch Panel builder.
TGeoVolumeAssembly * createPatchPanel()