20#include <fairlogger/Logger.h>
26#include <TGeoManager.h>
27#include <TGeoMatrix.h>
30#include <TGeoVolume.h>
32#include <TGeoCompositeShape.h>
44const Double_t V3Cage::sCageYInBarrel = 30. * sCm;
47const Double_t V3Cage::sCageCoverZLength = 586.0 * sMm;
48const Double_t V3Cage::sCageCoverRint = 540.0 * sMm;
49const Double_t V3Cage::sCageCoverRext = 550.0 * sMm;
50const Double_t V3Cage::sCageCoverXWidth = 982.0 * sMm;
51const Double_t V3Cage::sCageCoverXBaseInt = 944.0 * sMm;
52const Double_t V3Cage::sCageCoverXBaseExt = 948.0 * sMm;
53const Double_t V3Cage::sCageCoverYBaseHeight = 245.0 * sMm;
54const Double_t V3Cage::sCageCoverCoreRint = 541.0 * sMm;
55const Double_t V3Cage::sCageCoverCoreRext = 549.0 * sMm;
56const Double_t V3Cage::sCageCoverSheetThick = 2 * sMm;
57const Double_t V3Cage::sCageCoverRibZLength = 25.0 * sMm;
58const Double_t V3Cage::sCageCoverRibRint = 540.0 * sMm;
59const Double_t V3Cage::sCageCoverRibRext = 548.0 * sMm;
60const Double_t V3Cage::sCageCoverRibXWidth = 984.8 * sMm;
61const Double_t V3Cage::sCageCoverRibXBaseInt = 944.0 * sMm;
62const Double_t V3Cage::sCageCoverRibYBaseHi = 245.0 * sMm;
63const Double_t V3Cage::sCageCoverRibFoldHi = 31.5 * sMm;
65const Double_t V3Cage::sCageSidePanelLength = 3457.0 * sMm;
66const Double_t V3Cage::sCageSidePanelWidth = 490.0 * sMm;
67const Double_t V3Cage::sCageSidePanelFoilThick = 1.0 * sMm;
68const Double_t V3Cage::sCageSidePanelCoreThick = 20.0 * sMm;
69const Double_t V3Cage::sCageSidePanelXDist = 988.0 * sMm;
70const Double_t V3Cage::sCageSidePanelRail1Len = 3320.0 * sMm;
71const Double_t V3Cage::sCageSidePanelRail2Len = 1550.0 * sMm;
72const Double_t V3Cage::sCageSidePanelRail3Len = 302.0 * sMm;
73const Double_t V3Cage::sCageSidePanelRailWidth = 25.0 * sMm;
74const Double_t V3Cage::sCageSidePanelRailSpan = 20.0 * sMm;
75const Double_t V3Cage::sCageSidePanelRailHThik = 5.0 * sMm;
76const Double_t V3Cage::sCageSidePanelRailVThik = 2.5 * sMm;
77const Double_t V3Cage::sCageSidePanelGuideLen = 3587.0 * sMm;
78const Double_t V3Cage::sCageSidePanelGuideInHi = 204.0 * sMm;
79const Double_t V3Cage::sCageSidePanelGuideWide = 44.0 * sMm;
80const Double_t V3Cage::sCageSidePanelGuidThik1 = 6.0 * sMm;
81const Double_t V3Cage::sCageSidePanelGuidThik2 = 8.0 * sMm;
82const Double_t V3Cage::sCageSidePanelMidBarWid = 15.0 * sMm;
83const Double_t V3Cage::sCageSidePanelSidBarWid = 15.0 * sMm;
85const Double_t V3Cage::sCageSidePanelRail1Ypos[2] = {226.5 * sMm, 147.5 * sMm};
86const Double_t V3Cage::sCageSidePanelRail2Ypos = 74.5 * sMm;
87const Double_t V3Cage::sCageSidePanelRail3Ypos[3] = {180.0 * sMm, 107.0 * sMm, 24.0 * sMm};
89const Double_t V3Cage::sCageEndCapDext = 1096.0 * sMm;
90const Double_t V3Cage::sCageEndCapDint = 304.0 * sMm;
91const Double_t V3Cage::sCageEndCapFoamThick = 8.0 * sMm;
92const Double_t V3Cage::sCageEndCapFabThick = 1.0 * sMm;
93const Double_t V3Cage::sCageEndCapXWidth = 988.0 * sMm;
94const Double_t V3Cage::sCageEndCapSideHoleR = 32.0 * sMm;
95const Double_t V3Cage::sCageEndCapSideHoleX = 532.0 * sMm;
96const Double_t V3Cage::sCageEndCapCableCutWid = 268.0 * sMm;
97const Double_t V3Cage::sCageEndCapCableCutR = 408.5 * sMm;
98const Double_t V3Cage::sCageEndCapCableCutPhi = 25.0;
99const Double_t V3Cage::sCageECRoundCrossDmin = 300 * sMm;
100const Double_t V3Cage::sCageECRoundCrossDmid = 303 * sMm;
101const Double_t V3Cage::sCageECRoundCrossDmax = 312 * sMm;
102const Double_t V3Cage::sCageECRoundCrossZext = 6 * sMm;
103const Double_t V3Cage::sCageECRoundCrossZint = 5 * sMm;
104const Double_t V3Cage::sCageECCableCrosTotHi = 139.0 * sMm;
105const Double_t V3Cage::sCageECCableCrosTotZ = 12 * sMm;
106const Double_t V3Cage::sCageECCableCrosInXWid = 266.8 * sMm;
107const Double_t V3Cage::sCageECCableCrosInThik = 4 * sMm;
108const Double_t V3Cage::sCageECCableCrosInZLen = 10.2 * sMm;
109const Double_t V3Cage::sCageECCableCrosSidWid = 8 * sMm;
111const Double_t V3Cage::sBPSuppCollarIntD = 53 * sMm;
112const Double_t V3Cage::sBPSuppCollarExtD = 57 * sMm;
113const Double_t V3Cage::sBPSuppCollarBushD = 52 * sMm;
114const Double_t V3Cage::sBPSuppUpperCollarLen = 78 * sMm;
115const Double_t V3Cage::sBPSuppUpperCollarHei = 4 * sMm;
116const Double_t V3Cage::sBPSuppLowerCollarLen = 151 * sMm;
117const Double_t V3Cage::sBPSuppLowerCollarTlX = 40.5 * sMm;
118const Double_t V3Cage::sBPSuppLowCollHolDist = 100 * sMm;
119const Double_t V3Cage::sBPSuppLowCollTailHei = 6 * sMm;
120const Double_t V3Cage::sBPSuppCollarBeamLen = 370 * sMm;
121const Double_t V3Cage::sBPSuppCollarBeamWid = 40 * sMm;
122const Double_t V3Cage::sBPSuppCollarBeamHei = 12 * sMm;
123const Double_t V3Cage::sBPSuppBracketTotLen = 57 * sMm;
124const Double_t V3Cage::sBPSuppBracketWidth = 25 * sMm;
125const Double_t V3Cage::sBPSuppBracketInLen = 20 * sMm;
126const Double_t V3Cage::sBPSuppBracketInHei = 8 * sMm;
127const Double_t V3Cage::sBPSuppBracketTailLen = 18.5 * sMm;
128const Double_t V3Cage::sBPSuppBracketTailHei = 3 * sMm;
129const Double_t V3Cage::sBPSuppBrktCentHoleX = 31.5 * sMm;
130const Double_t V3Cage::sBPSuppBrktCentHoleD = 6 * sMm;
131const Double_t V3Cage::sBPSuppBrktLatHoleX = 24.5 * sMm;
132const Double_t V3Cage::sBPSuppBrktLatHoleD = 3.2 * sMm;
133const Double_t V3Cage::sBPSuppBrktLatHoleW = 4 * sMm;
134const Double_t V3Cage::sBPSuppBrktLatHoleH = 2.5 * sMm;
135const Double_t V3Cage::sBPSuppBrktHolesY = 0.5 * sMm;
136const Double_t V3Cage::sBPSuppCollarM4High = 2.2 * sMm;
137const Double_t V3Cage::sBPSuppCollarM4Diam = 7.5 * sMm;
138const Double_t V3Cage::sBPSuppCollarM4XDist = 68 * sMm;
139const Double_t V3Cage::sBPSuppCollarM4ZPos = 7 * sMm;
140const Double_t V3Cage::sBPSuppClampTotLen = 55 * sMm;
141const Double_t V3Cage::sBPSuppClampTotWid = 23 * sMm;
142const Double_t V3Cage::sBPSuppClampTotHei = 13 * sMm;
143const Double_t V3Cage::sBPSuppClampLatThick = 5 * sMm;
144const Double_t V3Cage::sBPSuppClampShelfLen = 25 * sMm;
145const Double_t V3Cage::sBPSuppClampShelfHei = 4.5 * sMm;
146const Double_t V3Cage::sBPSuppClampsXDist = 944 * sMm;
147const Double_t V3Cage::sBPSuppClampInsDmin = 7 * sMm;
148const Double_t V3Cage::sBPSuppClampInsDmax = 11 * sMm;
149const Double_t V3Cage::sBPSuppClampInsH = 2.9 * sMm;
150const Double_t V3Cage::sBPSuppClampInsXPos = 15 * sMm;
151const Double_t V3Cage::sBPSuppClampInsZPos = 7 * sMm;
152const Double_t V3Cage::sBPSuppClampShimLen = 26 * sMm;
153const Double_t V3Cage::sBPSuppClampShimWid = 15 * sMm;
154const Double_t V3Cage::sBPSuppClampShimThick = 2.5 * sMm;
155const Double_t V3Cage::sBPSuppClampM5High = 2.7 * sMm;
156const Double_t V3Cage::sBPSuppClampM5Diam = 8.5 * sMm;
157const Double_t V3Cage::sBPSuppClampM5ZPos = 20 * sMm;
158const Double_t V3Cage::sBPSuppZPos = 1801 * sMm;
160const Double_t V3Cage::sCageCrossXWidthTot = 973 * sMm;
161const Double_t V3Cage::sCageCrossXWidthExt = 944 * sMm;
162const Double_t V3Cage::sCageCrossXWidthInt = 904 * sMm;
163const Double_t V3Cage::sCageCrossYHeightTot = 244 * sMm;
164const Double_t V3Cage::sCageCrossYHeightInt = 220 * sMm;
165const Double_t V3Cage::sCageCrossYMid = (126 + 5.5) * sMm;
166const Double_t V3Cage::sCageCrossZLength = 8 * sMm;
167const Double_t V3Cage::sCageCrossBarThick = 20 * sMm;
168const Double_t V3Cage::sCageCrossBarPhi = 25;
170const Double_t V3Cage::sCageMFTRailZLen = 1807 * sMm;
171const Double_t V3Cage::sCageMFTRailTotWidth = 27 * sMm;
172const Double_t V3Cage::sCageMFTRailExtWidth = 24 * sMm;
173const Double_t V3Cage::sCageMFTRailIntWidth = 17.5 * sMm;
174const Double_t V3Cage::sCageMFTRailBaseWidth = 22 * sMm;
175const Double_t V3Cage::sCageMFTRailTotHeight = 8.9 * sMm;
176const Double_t V3Cage::sCageMFTRailExtHeight = 5.9 * sMm;
177const Double_t V3Cage::sCageMFTRailIntHeight = 3.5 * sMm;
178const Double_t V3Cage::sCageMFTRailsXDist = 44 * sMm;
211 Double_t zunit, xpos, ypos, zpos;
214 TGeoVolume* cageCover = createCageCover(mgr);
215 TGeoVolume* cageCoverRib = createCageCoverRib(mgr);
216 TGeoVolume* cageEndCap = createCageEndCap(mgr);
217 TGeoVolume* cageSidePanel = createCageSidePanel(mgr);
218 TGeoVolume* cageBPSupport = createBeamPipeSupport(mgr);
219 TGeoVolume* cageClosingCross = createCageClosingCross(mgr);
222 mother->AddNode(cageCover, 1,
new TGeoTranslation(0, sCageYInBarrel, 0));
223 mother->AddNode(cageCover, 2,
new TGeoCombiTrans(0, sCageYInBarrel, 0,
new TGeoRotation(
"", 180, 0, 0)));
225 zunit = (sCageCoverZLength + sCageCoverRibZLength) / 2.;
228 mother->AddNode(cageCoverRib, 1,
new TGeoTranslation(0, sCageYInBarrel, zpos));
229 mother->AddNode(cageCoverRib, 2,
new TGeoCombiTrans(0, sCageYInBarrel, zpos,
new TGeoRotation(
"", 180, 0, 0)));
230 mother->AddNode(cageCoverRib, 3,
new TGeoTranslation(0, sCageYInBarrel, -zpos));
231 mother->AddNode(cageCoverRib, 4,
new TGeoCombiTrans(0, sCageYInBarrel, -zpos,
new TGeoRotation(
"", 180, 0, 0)));
234 mother->AddNode(cageCover, 3,
new TGeoTranslation(0, sCageYInBarrel, zpos));
235 mother->AddNode(cageCover, 4,
new TGeoCombiTrans(0, sCageYInBarrel, zpos,
new TGeoRotation(
"", 180, 0, 0)));
236 mother->AddNode(cageCover, 5,
new TGeoTranslation(0, sCageYInBarrel, -zpos));
237 mother->AddNode(cageCover, 6,
new TGeoCombiTrans(0, sCageYInBarrel, -zpos,
new TGeoRotation(
"", 180, 0, 0)));
239 zpos += sCageCoverZLength / 2;
241 Double_t zposSP = -zpos + sCageSidePanelLength / 2;
242 xpos = sCageSidePanelXDist / 2 - sCageSidePanelCoreThick / 2 - sCageSidePanelFoilThick;
243 mother->AddNode(cageSidePanel, 1,
new TGeoTranslation(xpos, sCageYInBarrel, zposSP));
244 mother->AddNode(cageSidePanel, 2,
new TGeoCombiTrans(-xpos, sCageYInBarrel, zposSP,
new TGeoRotation(
"", 180, 0, 0)));
246 Double_t zposCC = -zpos + sCageSidePanelLength + sCageCrossZLength / 2;
247 mother->AddNode(cageClosingCross, 1,
new TGeoTranslation(0, sCageYInBarrel, zposCC));
248 mother->AddNode(cageClosingCross, 2,
new TGeoCombiTrans(0, sCageYInBarrel, zposCC,
new TGeoRotation(
"", 0, 180, 0)));
251 zpos += sCageECCableCrosTotZ / 2;
252 mother->AddNode(cageEndCap, 1,
new TGeoTranslation(0, sCageYInBarrel, -zpos));
256 mother->AddNode(cageCoverRib, 5,
new TGeoTranslation(0, sCageYInBarrel, zpos));
257 mother->AddNode(cageCoverRib, 6,
new TGeoCombiTrans(0, sCageYInBarrel, zpos,
new TGeoRotation(
"", 180, 0, 0)));
260 ypos = sCageYInBarrel - sBPSuppLowCollTailHei / 2;
261 zpos = sBPSuppZPos + sBPSuppCollarBeamWid / 2;
262 mother->AddNode(cageBPSupport, 1,
new TGeoTranslation(0, ypos, zpos));
265 createAndPlaceMFTRailsInsideCage(mother, mgr);
270TGeoVolume* V3Cage::createCageCover(
const TGeoManager* mgr)
287 static const Int_t coverFoldNVert = 6;
289 Double_t xvert[coverFoldNVert], yvert[coverFoldNVert];
290 Double_t halfBase, zlen,
alpha;
292 zlen = 0.5 * sCageCoverZLength;
295 halfBase = 0.5 * sCageCoverXBaseInt - sCageCoverSheetThick;
296 alpha = TMath::ACos(halfBase / sCageCoverCoreRext) * TMath::RadToDeg();
297 TGeoTubeSeg* coreSh =
new TGeoTubeSeg(
"coverCore", sCageCoverCoreRint, sCageCoverCoreRext, zlen,
alpha, 180. -
alpha);
301 halfBase = 0.5 * sCageCoverXBaseInt;
302 alpha = TMath::ACos(halfBase / sCageCoverRint) * TMath::RadToDeg();
303 TGeoTubeSeg* sheet =
new TGeoTubeSeg(
"coverSheet", sCageCoverRint, sCageCoverCoreRext, zlen,
alpha, 180. -
alpha);
306 xvert[0] = sCageCoverXBaseExt / 2.;
307 yvert[0] = sCageCoverYBaseHeight + sCageCoverSheetThick;
308 xvert[1] = sCageCoverXWidth / 2.;
311 yvert[2] = sCageCoverYBaseHeight;
312 xvert[3] = sCageCoverXBaseInt / 2.;
315 yvert[4] = TMath::Sqrt(sCageCoverRint * sCageCoverRint - sCageCoverXBaseInt * sCageCoverXBaseInt / 4) + sCageCoverSheetThick;
319 TGeoXtru* fold =
new TGeoXtru(2);
320 fold->SetName(
"coverFold");
321 fold->DefinePolygon(coverFoldNVert, xvert, yvert);
322 fold->DefineSection(0, -zlen);
323 fold->DefineSection(1, zlen);
326 TGeoBBox* cutfold =
new TGeoBBox(
"cutFold", xvert[1] - xvert[0], yvert[5] - yvert[1], 1.05 * zlen);
329 TGeoRotation* rotfold =
new TGeoRotation(
"rotFold", 180, 180, 0);
330 rotfold->RegisterYourself();
332 TGeoTranslation* cutbox1 =
new TGeoTranslation(
"cutBox1", xvert[1], yvert[5], 0);
333 cutbox1->RegisterYourself();
335 TGeoTranslation* cutbox2 =
new TGeoTranslation(
"cutBox2", -xvert[1], yvert[5], 0);
336 cutbox2->RegisterYourself();
339 TGeoCompositeShape* coverSh =
new TGeoCompositeShape(
"coverSheet-cutFold:cutBox1-cutFold:cutBox2+coverFold+coverFold:rotFold");
342 TGeoMedium* medRohacell = mgr->GetMedium(Form(
"%s_ROHACELL$",
GetDetName()));
343 TGeoMedium* medPrepreg = mgr->GetMedium(Form(
"%s_M46J6K$",
GetDetName()));
345 TGeoVolume* coverVol =
new TGeoVolume(
"CageCover", coverSh, medPrepreg);
346 coverVol->SetFillColor(kBlue);
347 coverVol->SetLineColor(kBlue);
349 TGeoVolume* coverCoreVol =
new TGeoVolume(
"CageCoverCore", coreSh, medRohacell);
350 coverCoreVol->SetFillColor(kYellow);
351 coverCoreVol->SetLineColor(kYellow);
353 coverVol->AddNode(coverCoreVol, 1,
nullptr);
359TGeoVolume* V3Cage::createCageCoverRib(
const TGeoManager* mgr)
376 static const Int_t ribFoldNVert = 3;
378 Double_t xvert[ribFoldNVert], yvert[ribFoldNVert];
379 Double_t halfBase, zlen,
alpha;
381 zlen = 0.5 * sCageCoverRibZLength;
384 halfBase = 0.5 * sCageCoverRibXBaseInt;
385 alpha = TMath::ACos(halfBase / sCageCoverRibRint) * TMath::RadToDeg();
386 TGeoTubeSeg* mainSh =
new TGeoTubeSeg(
"coverRibMain", sCageCoverRibRint, sCageCoverRibRext, zlen,
alpha, 180. -
alpha);
389 xvert[0] = sCageCoverRibXWidth / 2.;
390 yvert[0] = sCageCoverRibYBaseHi;
391 xvert[1] = sCageCoverRibXBaseInt / 2.;
394 yvert[2] = yvert[1] + sCageCoverRibFoldHi;
396 TGeoXtru* fold =
new TGeoXtru(2);
397 fold->SetName(
"coverRibFold");
398 fold->DefinePolygon(ribFoldNVert, xvert, yvert);
399 fold->DefineSection(0, -zlen);
400 fold->DefineSection(1, zlen);
403 TGeoRotation* rotfold =
new TGeoRotation(
"rotRibFold", 180, 180, 0);
404 rotfold->RegisterYourself();
407 TGeoCompositeShape* ribSh =
new TGeoCompositeShape(
"coverRibMain+coverRibFold+coverRibFold:rotRibFold");
410 TGeoMedium* medAl = mgr->GetMedium(Form(
"%s_ALUMINUM$",
GetDetName()));
412 TGeoVolume* ribVol =
new TGeoVolume(
"CageCoverRib", ribSh, medAl);
413 ribVol->SetFillColor(kGray);
414 ribVol->SetLineColor(kGray);
420TGeoVolume* V3Cage::createCageSidePanel(
const TGeoManager* mgr)
439 Double_t xlen, ylen, zlen;
440 Double_t xpos, ypos, zpos;
443 TGeoVolumeAssembly* sidePanelVol =
new TGeoVolumeAssembly(
"CageSidePanel");
446 TGeoCompositeShape* inFoilSh = createCageSidePanelCoreFoil(sCageSidePanelFoilThick,
"foil");
449 xlen = sCageSidePanelFoilThick / 2;
450 ylen = sCageSidePanelWidth / 2;
451 zlen = sCageSidePanelLength / 2;
452 TGeoBBox* outFoilSh =
new TGeoBBox(xlen, ylen, zlen);
455 TGeoCompositeShape* coreSh = createCageSidePanelCoreFoil(sCageSidePanelCoreThick,
"core");
458 TGeoCompositeShape* rail1Sh = createCageSidePanelRail(sCageSidePanelRail1Len, 1);
461 TGeoCompositeShape* rail2Sh = createCageSidePanelRail(sCageSidePanelRail2Len, 2);
464 TGeoCompositeShape* rail3Sh = createCageSidePanelRail(sCageSidePanelRail3Len, 3);
467 xlen = sCageSidePanelCoreThick / 2;
468 ylen = sCageSidePanelMidBarWid / 2;
469 zlen = (sCageSidePanelLength - sCageSidePanelRail3Len - sCageSidePanelSidBarWid) / 2;
470 TGeoBBox* midBarSh =
new TGeoBBox(xlen, ylen, zlen);
473 xlen = sCageSidePanelCoreThick / 2;
474 ylen = sCageSidePanelWidth / 2;
475 zlen = sCageSidePanelSidBarWid / 2;
476 TGeoBBox* sidBarSh =
new TGeoBBox(xlen, ylen, zlen);
480 xlen = sCageSidePanelGuidThik2 / 2;
481 ylen = sCageSidePanelGuideInHi / 2;
482 zlen = sCageSidePanelGuideLen / 2;
483 TGeoBBox* guideVert =
new TGeoBBox(xlen, ylen, zlen);
484 guideVert->SetName(
"guidevert");
487 xlen = sCageSidePanelGuideWide / 2;
488 ylen = sCageSidePanelGuidThik1 / 2;
489 TGeoBBox* guideHor =
new TGeoBBox(xlen, ylen, zlen);
490 guideHor->SetName(
"guidehor");
492 xpos = (sCageSidePanelGuideWide - sCageSidePanelGuidThik2) / 2;
493 ypos = (sCageSidePanelGuidThik1 + sCageSidePanelGuideInHi) / 2;
494 TGeoTranslation* guideHorMat1 =
new TGeoTranslation(xpos, ypos, 0);
495 guideHorMat1->SetName(
"guidehormat1");
496 guideHorMat1->RegisterYourself();
498 TGeoTranslation* guideHorMat2 =
new TGeoTranslation(xpos, -ypos, 0);
499 guideHorMat2->SetName(
"guidehormat2");
500 guideHorMat2->RegisterYourself();
503 TGeoCompositeShape* guideSh =
new TGeoCompositeShape(
"guidevert+guidehor:guidehormat1+guidehor:guidehormat2");
506 TGeoMedium* medFabric = mgr->GetMedium(Form(
"%s_M46J6K$",
GetDetName()));
507 TGeoMedium* medFoam = mgr->GetMedium(Form(
"%s_ROHACELL$",
GetDetName()));
508 TGeoMedium* medAlAlloy = mgr->GetMedium(Form(
"%s_ENAW7075$",
GetDetName()));
510 TGeoVolume* inFoilVol =
new TGeoVolume(
"CageSidePanelInFoil", inFoilSh, medFabric);
511 inFoilVol->SetFillColor(kBlue);
512 inFoilVol->SetLineColor(kBlue);
514 TGeoVolume* outFoilVol =
new TGeoVolume(
"CageSidePanelOutFoil", outFoilSh, medFabric);
515 outFoilVol->SetFillColor(kBlue);
516 outFoilVol->SetLineColor(kBlue);
518 TGeoVolume* coreVol =
new TGeoVolume(
"CageSidePanelCore", coreSh, medFoam);
519 coreVol->SetFillColor(kYellow);
520 coreVol->SetLineColor(kYellow);
522 TGeoVolume* rail1Vol =
new TGeoVolume(
"CageSidePanelRail1st", rail1Sh, medAlAlloy);
523 rail1Vol->SetFillColor(kGray);
524 rail1Vol->SetLineColor(kGray);
526 TGeoVolume* rail2Vol =
new TGeoVolume(
"CageSidePanelRail2nd", rail2Sh, medAlAlloy);
527 rail2Vol->SetFillColor(kGray);
528 rail2Vol->SetLineColor(kGray);
530 TGeoVolume* rail3Vol =
new TGeoVolume(
"CageSidePanelRail3rd", rail3Sh, medAlAlloy);
531 rail3Vol->SetFillColor(kGray);
532 rail3Vol->SetLineColor(kGray);
534 TGeoVolume* midBarVol =
new TGeoVolume(
"CageSidePanelMiddleBar", midBarSh, medAlAlloy);
535 midBarVol->SetFillColor(kGray);
536 midBarVol->SetLineColor(kGray);
538 TGeoVolume* sidBarVol =
new TGeoVolume(
"CageSidePanelSideBar", sidBarSh, medAlAlloy);
539 sidBarVol->SetFillColor(kGray);
540 sidBarVol->SetLineColor(kGray);
542 TGeoVolume* guideVol =
new TGeoVolume(
"CageSidePanelGuide", guideSh, medFabric);
543 guideVol->SetFillColor(kViolet);
544 guideVol->SetLineColor(kViolet);
547 sidePanelVol->AddNode(coreVol, 1,
nullptr);
549 xpos = (sCageSidePanelCoreThick + sCageSidePanelFoilThick) / 2;
550 sidePanelVol->AddNode(inFoilVol, 1,
new TGeoTranslation(-xpos, 0, 0));
551 sidePanelVol->AddNode(outFoilVol, 1,
new TGeoTranslation(xpos, 0, 0));
553 xpos = (sCageSidePanelCoreThick - sCageSidePanelRailVThik) / 2;
554 zpos = (sCageSidePanelLength - sCageSidePanelRail1Len) / 2;
555 for (Int_t
j = 0;
j < 2;
j++) {
556 ypos = sCageSidePanelRail1Ypos[
j];
557 sidePanelVol->AddNode(rail1Vol,
j + 1,
new TGeoTranslation(xpos, ypos, zpos));
558 sidePanelVol->AddNode(rail1Vol,
j + 3,
new TGeoTranslation(xpos, -ypos, zpos));
561 zpos = (sCageSidePanelLength - sCageSidePanelRail2Len) / 2;
562 ypos = sCageSidePanelRail2Ypos;
563 sidePanelVol->AddNode(rail2Vol, 1,
new TGeoTranslation(xpos, ypos, zpos));
564 sidePanelVol->AddNode(rail2Vol, 2,
new TGeoTranslation(xpos, -ypos, zpos));
566 zpos = (sCageSidePanelLength - sCageSidePanelRail3Len) / 2;
567 for (Int_t
j = 0;
j < 3;
j++) {
568 ypos = sCageSidePanelRail3Ypos[
j];
569 sidePanelVol->AddNode(rail3Vol,
j + 1,
new TGeoTranslation(xpos, ypos, zpos));
570 sidePanelVol->AddNode(rail3Vol,
j + 4,
new TGeoTranslation(xpos, -ypos, zpos));
573 zpos = sCageSidePanelLength / 2 - midBarSh->GetDZ() - sCageSidePanelSidBarWid;
574 sidePanelVol->AddNode(midBarVol, 1,
new TGeoTranslation(0, 0, -zpos));
576 zpos = sCageSidePanelLength / 2 - sidBarSh->GetDZ();
577 sidePanelVol->AddNode(sidBarVol, 1,
new TGeoTranslation(0, 0, -zpos));
579 xpos = sCageSidePanelCoreThick / 2 + sCageSidePanelFoilThick + sCageSidePanelGuidThik2 / 2;
580 zpos = (sCageSidePanelLength - sCageSidePanelGuideLen) / 2;
581 sidePanelVol->AddNode(guideVol, 1,
new TGeoTranslation(xpos, 0, -zpos));
587TGeoCompositeShape* V3Cage::createCageSidePanelCoreFoil(
const Double_t xthick,
const char* shpref)
607 Double_t xlen, ylen, zlen;
612 ylen = sCageSidePanelWidth / 2;
613 zlen = sCageSidePanelLength / 2;
614 TGeoBBox* bodySh =
new TGeoBBox(xlen, ylen, zlen);
615 bodySh->SetName(Form(
"%sbodyshape", shpref));
618 xlen = 1.1 * xthick / 2;
619 ylen = sCageSidePanelRailWidth / 2;
620 zlen = sCageSidePanelRail1Len;
621 TGeoBBox* rail1Sh =
new TGeoBBox(xlen, ylen, zlen);
622 rail1Sh->SetName(Form(
"%slongrail", shpref));
624 zpos = sCageSidePanelLength / 2;
625 TGeoTranslation* rail1Mat[4];
626 for (Int_t
j = 0;
j < 2;
j++) {
627 ypos = sCageSidePanelRail1Ypos[
j];
628 rail1Mat[
j] =
new TGeoTranslation(0, ypos, zpos);
629 rail1Mat[
j]->SetName(Form(
"longrailmat%d",
j));
630 rail1Mat[
j]->RegisterYourself();
631 rail1Mat[
j + 2] =
new TGeoTranslation(0, -ypos, zpos);
632 rail1Mat[
j + 2]->SetName(Form(
"longrailmat%d",
j + 2));
633 rail1Mat[
j + 2]->RegisterYourself();
637 zlen = sCageSidePanelRail2Len;
638 TGeoBBox* rail2Sh =
new TGeoBBox(xlen, ylen, zlen);
639 rail2Sh->SetName(Form(
"%smedrail", shpref));
641 ypos = sCageSidePanelRail2Ypos;
642 TGeoTranslation* rail2Mat[2];
643 rail2Mat[0] =
new TGeoTranslation(0, ypos, zpos);
644 rail2Mat[0]->SetName(
"medrailmat0");
645 rail2Mat[0]->RegisterYourself();
646 rail2Mat[1] =
new TGeoTranslation(0, -ypos, zpos);
647 rail2Mat[1]->SetName(
"medrailmat1");
648 rail2Mat[1]->RegisterYourself();
651 zlen = sCageSidePanelRail3Len;
652 TGeoBBox* rail3Sh =
new TGeoBBox(xlen, ylen, zlen);
653 rail3Sh->SetName(Form(
"%sshortrail", shpref));
655 TGeoTranslation* rail3Mat[6];
656 for (Int_t
j = 0;
j < 3;
j++) {
657 ypos = sCageSidePanelRail3Ypos[
j];
658 rail3Mat[
j] =
new TGeoTranslation(0, ypos, zpos);
659 rail3Mat[
j]->SetName(Form(
"shortrailmat%d",
j));
660 rail3Mat[
j]->RegisterYourself();
661 rail3Mat[
j + 3] =
new TGeoTranslation(0, -ypos, zpos);
662 rail3Mat[
j + 3]->SetName(Form(
"shortrailmat%d",
j + 3));
663 rail3Mat[
j + 3]->RegisterYourself();
667 xlen = 1.1 * sCageSidePanelCoreThick / 2;
668 ylen = sCageSidePanelMidBarWid / 2;
669 zlen = (sCageSidePanelLength - sCageSidePanelRail3Len) / 2;
670 TGeoBBox* midBarHol =
new TGeoBBox(xlen, ylen, zlen);
671 midBarHol->SetName(
"midbar");
673 zpos = sCageSidePanelRail3Len / 2;
674 TGeoTranslation* midBarMat =
new TGeoTranslation(0, 0, -zpos);
675 midBarMat->SetName(
"midbarmat");
676 midBarMat->RegisterYourself();
679 xlen = 1.1 * sCageSidePanelCoreThick / 2;
680 ylen = 1.1 * sCageSidePanelWidth / 2;
681 zlen = sCageSidePanelSidBarWid;
682 TGeoBBox* sidBarHol =
new TGeoBBox(xlen, ylen, zlen);
683 sidBarHol->SetName(
"sidebar");
685 zpos = sCageSidePanelLength / 2;
686 TGeoTranslation* sidBarMat =
new TGeoTranslation(0, 0, -zpos);
687 sidBarMat->SetName(
"sidebarmat");
688 sidBarMat->RegisterYourself();
691 TString compoShape = Form(
"%sbodyshape", shpref);
692 for (Int_t
j = 0;
j < 4;
j++) {
693 compoShape += Form(
"-%slongrail:longrailmat%d", shpref,
j);
695 for (Int_t
j = 0;
j < 2;
j++) {
696 compoShape += Form(
"-%smedrail:medrailmat%d", shpref,
j);
698 for (Int_t
j = 0;
j < 6;
j++) {
699 compoShape += Form(
"-%sshortrail:shortrailmat%d", shpref,
j);
703 if (strcmp(shpref,
"core") == 0) {
704 compoShape +=
"-midbar:midbarmat-sidebar:sidebarmat";
707 TGeoCompositeShape* corefoilSh =
new TGeoCompositeShape(compoShape);
713TGeoCompositeShape* V3Cage::createCageSidePanelRail(
const Double_t zlength,
const Int_t
index)
737 xlen = sCageSidePanelRailVThik / 2;
738 ylen = (sCageSidePanelRailWidth - 2 * sCageSidePanelRailHThik) / 2;
739 TGeoBBox* railVert =
new TGeoBBox(xlen, ylen, zlength / 2);
740 railVert->SetName(Form(
"railvert%d",
index));
743 xlen = sCageSidePanelRailSpan / 2;
744 ylen = sCageSidePanelRailHThik / 2;
745 TGeoBBox* railHor =
new TGeoBBox(xlen, ylen, zlength / 2);
746 railHor->SetName(Form(
"railhor%d",
index));
749 xpos = (sCageSidePanelRailVThik - sCageSidePanelRailSpan) / 2;
750 ypos = (sCageSidePanelRailWidth - sCageSidePanelRailHThik) / 2;
751 TGeoTranslation* railHorMat1 =
new TGeoTranslation(xpos, ypos, 0);
752 railHorMat1->SetName(
"railhormat1");
753 railHorMat1->RegisterYourself();
755 TGeoTranslation* railHorMat2 =
new TGeoTranslation(xpos, -ypos, 0);
756 railHorMat2->SetName(
"railhormat2");
757 railHorMat2->RegisterYourself();
760 TString compoShape = Form(
"railvert%d",
index);
761 compoShape += Form(
"+railhor%d:railhormat1",
index);
762 compoShape += Form(
"+railhor%d:railhormat2",
index);
764 TGeoCompositeShape* railSh =
new TGeoCompositeShape(compoShape);
770TGeoVolume* V3Cage::createCageEndCap(
const TGeoManager* mgr)
787 Double_t rmin, rmid, rmax;
788 Double_t xlen, ylen, zlen;
789 Double_t xpos, ypos, zpos;
792 TGeoVolumeAssembly* endCapVol =
new TGeoVolumeAssembly(
"CageEndCap");
795 rmin = sCageEndCapDint / 2;
796 rmax = sCageEndCapDext / 2;
797 zlen = sCageEndCapFabThick / 2;
799 TGeoTube* baseFabric =
new TGeoTube(rmin, rmax, zlen);
800 baseFabric->SetName(
"endCapBaseFabric");
803 zlen = sCageEndCapFoamThick / 2;
805 TGeoTube* baseFoam =
new TGeoTube(rmin, rmax, zlen);
806 baseFoam->SetName(
"endCapBaseFoam");
809 xlen = (sCageEndCapDext - sCageEndCapXWidth) / 2;
812 TGeoBBox* sideCut =
new TGeoBBox(xlen, ylen, 2 * zlen);
813 sideCut->SetName(
"endCapBoxCut");
815 TGeoTube* sideHole =
new TGeoTube(0, sCageEndCapSideHoleR, 2 * zlen);
816 sideHole->SetName(
"endCapSideHole");
818 xlen = sCageEndCapCableCutWid / 2;
819 ylen = rmax - sCageEndCapCableCutR;
821 TGeoBBox* cableCut =
new TGeoBBox(xlen, ylen, 2 * zlen);
822 cableCut->SetName(
"endCapCableCut");
827 TGeoTranslation* boxCutTr1 =
new TGeoTranslation(
"boxCutTr1", xpos, 0, 0);
828 boxCutTr1->RegisterYourself();
830 TGeoTranslation* boxCutTr2 =
new TGeoTranslation(
"boxCutTr2", -xpos, 0, 0);
831 boxCutTr2->RegisterYourself();
833 xpos = sCageEndCapSideHoleX / 2;
835 TGeoTranslation* sidHolTr1 =
new TGeoTranslation(
"sideHoleTr1", xpos, 0, 0);
836 sidHolTr1->RegisterYourself();
838 TGeoTranslation* sidHolTr2 =
new TGeoTranslation(
"sideHoleTr2", -xpos, 0, 0);
839 sidHolTr2->RegisterYourself();
841 xpos = rmax * TMath::Sin(sCageEndCapCableCutPhi * TMath::DegToRad());
842 ypos = rmax * TMath::Cos(sCageEndCapCableCutPhi * TMath::DegToRad());
844 TGeoCombiTrans* cableMat1 =
new TGeoCombiTrans(xpos, ypos, 0,
new TGeoRotation(
"", -sCageEndCapCableCutPhi, 0, 0));
845 cableMat1->SetName(
"cableMat1");
846 cableMat1->RegisterYourself();
848 TGeoCombiTrans* cableMat2 =
new TGeoCombiTrans(-xpos, ypos, 0,
new TGeoRotation(
"", sCageEndCapCableCutPhi, 0, 0));
849 cableMat2->SetName(
"cableMat2");
850 cableMat2->RegisterYourself();
852 TGeoCombiTrans* cableMat3 =
new TGeoCombiTrans(xpos, -ypos, 0,
new TGeoRotation(
"", -180 + sCageEndCapCableCutPhi, 0, 0));
853 cableMat3->SetName(
"cableMat3");
854 cableMat3->RegisterYourself();
856 TGeoCombiTrans* cableMat4 =
new TGeoCombiTrans(-xpos, -ypos, 0,
new TGeoRotation(
"", 180 - sCageEndCapCableCutPhi, 0, 0));
857 cableMat4->SetName(
"cableMat4");
858 cableMat4->RegisterYourself();
861 TGeoCompositeShape* fabricSh =
new TGeoCompositeShape(
"endCapBaseFabric-endCapBoxCut:boxCutTr1-endCapBoxCut:boxCutTr2-endCapSideHole:sideHoleTr1-endCapSideHole:sideHoleTr2-endCapCableCut:cableMat1-endCapCableCut:cableMat2-endCapCableCut:cableMat3-endCapCableCut:cableMat4");
864 TGeoCompositeShape* foamSh =
new TGeoCompositeShape(
"endCapBaseFoam-endCapBoxCut:boxCutTr1-endCapBoxCut:boxCutTr2-endCapSideHole:sideHoleTr1-endCapSideHole:sideHoleTr2-endCapCableCut:cableMat1-endCapCableCut:cableMat2-endCapCableCut:cableMat3-endCapCableCut:cableMat4");
870 TGeoPcon* rndCrosSh =
new TGeoPcon(0, 360, 6);
872 rmin = sCageECRoundCrossDmin / 2;
873 rmid = sCageECRoundCrossDmid / 2;
874 rmax = sCageECRoundCrossDmax / 2;
876 rndCrosSh->DefineSection(0, -sCageECRoundCrossZext, rmin, rmax);
877 rndCrosSh->DefineSection(1, -sCageECRoundCrossZint, rmin, rmax);
878 rndCrosSh->DefineSection(2, -sCageECRoundCrossZint, rmin, rmid);
879 rndCrosSh->DefineSection(3, sCageECRoundCrossZint, rmin, rmid);
880 rndCrosSh->DefineSection(4, sCageECRoundCrossZint, rmin, rmax);
881 rndCrosSh->DefineSection(5, sCageECRoundCrossZext, rmin, rmax);
884 TGeoCompositeShape* cblCrosSh = createCageEndCapCableCross(mgr);
887 TGeoMedium* medFabric = mgr->GetMedium(Form(
"%s_M46J6K$",
GetDetName()));
888 TGeoMedium* medFoam = mgr->GetMedium(Form(
"%s_ROHACELL$",
GetDetName()));
889 TGeoMedium* medAl = mgr->GetMedium(Form(
"%s_ALUMINUM$",
GetDetName()));
891 TGeoVolume* fabVol =
new TGeoVolume(
"CageEndCapFabric", fabricSh, medFabric);
892 fabVol->SetFillColor(kBlue);
893 fabVol->SetLineColor(kBlue);
895 TGeoVolume* foamVol =
new TGeoVolume(
"CageEndCapFoam", foamSh, medFoam);
896 foamVol->SetFillColor(kYellow);
897 foamVol->SetLineColor(kYellow);
899 TGeoVolume* rndCrosVol =
new TGeoVolume(
"CageEndCapRoundCross", rndCrosSh, medAl);
900 rndCrosVol->SetFillColor(kGray);
901 rndCrosVol->SetLineColor(kGray);
903 TGeoVolume* cblCrosVol =
new TGeoVolume(
"CageEndCapCableCross", cblCrosSh, medAl);
904 cblCrosVol->SetFillColor(kGray);
905 cblCrosVol->SetLineColor(kGray);
908 endCapVol->AddNode(foamVol, 1,
nullptr);
910 zpos = (sCageEndCapFoamThick + sCageEndCapFabThick) / 2;
911 endCapVol->AddNode(fabVol, 1,
new TGeoTranslation(0, 0, zpos));
912 endCapVol->AddNode(fabVol, 2,
new TGeoTranslation(0, 0, -zpos));
914 endCapVol->AddNode(rndCrosVol, 1,
nullptr);
916 rmax = sCageEndCapDext / 2 - sCageECCableCrosTotHi;
917 xpos = rmax * TMath::Sin(sCageEndCapCableCutPhi * TMath::DegToRad());
918 ypos = rmax * TMath::Cos(sCageEndCapCableCutPhi * TMath::DegToRad());
919 endCapVol->AddNode(cblCrosVol, 1,
new TGeoCombiTrans(xpos, ypos, 0,
new TGeoRotation(
"", -sCageEndCapCableCutPhi, 0, 0)));
920 endCapVol->AddNode(cblCrosVol, 2,
new TGeoCombiTrans(-xpos, ypos, 0,
new TGeoRotation(
"", sCageEndCapCableCutPhi, 0, 0)));
921 endCapVol->AddNode(cblCrosVol, 3,
new TGeoCombiTrans(xpos, -ypos, 0,
new TGeoRotation(
"", -180 + sCageEndCapCableCutPhi, 0, 0)));
922 endCapVol->AddNode(cblCrosVol, 4,
new TGeoCombiTrans(-xpos, -ypos, 0,
new TGeoRotation(
"", 180 - sCageEndCapCableCutPhi, 0, 0)));
928TGeoCompositeShape* V3Cage::createCageEndCapCableCross(
const TGeoManager* mgr)
946 Double_t rmin, rmid, rmax;
947 Double_t xlen, ylen, zlen;
948 Double_t xpos, ypos, zpos;
951 TString crossShape =
"";
954 xlen = sCageECCableCrosInXWid / 2;
955 ylen = sCageECCableCrosInThik / 2;
956 zlen = sCageECCableCrosInZLen / 2;
957 TGeoBBox* cabCrosLow =
new TGeoBBox(xlen, ylen, zlen);
958 cabCrosLow->SetName(
"CabCrosLow");
960 TGeoTranslation* matCrosLow =
new TGeoTranslation(
"MatCrosLow", 0, ylen, 0);
961 matCrosLow->RegisterYourself();
963 crossShape =
"CabCrosLow:MatCrosLow";
966 xlen = (sCageECCableCrosInXWid + 2 * (sCageECCableCrosSidWid - sCageECCableCrosInThik)) / 2;
967 ylen = sCageECCableCrosSidWid / 2;
968 zlen = (sCageECCableCrosTotZ - sCageECCableCrosInZLen) / 4;
969 TGeoBBox* cabCrosSide =
new TGeoBBox(xlen, ylen, zlen);
970 cabCrosSide->SetName(
"CabCrosSide");
972 ypos = 2 * cabCrosLow->GetDY() - cabCrosSide->GetDY();
973 zpos = cabCrosLow->GetDZ() + cabCrosSide->GetDZ();
974 TGeoTranslation* matCrosSid1 =
new TGeoTranslation(
"MatCrosSid1", 0, ypos, zpos);
975 matCrosSid1->RegisterYourself();
976 TGeoTranslation* matCrosSid2 =
new TGeoTranslation(
"MatCrosSid2", 0, ypos, -zpos);
977 matCrosSid2->RegisterYourself();
979 crossShape +=
"+CabCrosSide:MatCrosSid1+CabCrosSide:MatCrosSid2";
983 rmax = sCageEndCapDext / 2;
984 xlen = sCageECCableCrosInXWid / 2;
986 Double_t apothem = TMath::Sqrt(rmax * rmax - xlen * xlen);
987 Double_t sagitta = rmax - apothem;
989 xlen = sCageECCableCrosInThik / 2;
990 ylen = (sCageECCableCrosTotHi - sagitta - sCageECCableCrosInThik) / 2;
991 zlen = sCageECCableCrosInZLen / 2;
992 TGeoBBox* cabCrosLat =
new TGeoBBox(xlen, ylen, zlen);
993 cabCrosLat->SetName(
"CabCrosLateral");
995 xpos = 0.5 * sCageECCableCrosInXWid - cabCrosLat->GetDX();
996 ypos = cabCrosLat->GetDY() + sCageECCableCrosInThik;
997 TGeoTranslation* matCrosLat1 =
new TGeoTranslation(
"MatCrosLat1", xpos, ypos, 0);
998 matCrosLat1->RegisterYourself();
999 TGeoTranslation* matCrosLat2 =
new TGeoTranslation(
"MatCrosLat2", -xpos, ypos, 0);
1000 matCrosLat2->RegisterYourself();
1002 crossShape +=
"+CabCrosLateral:MatCrosLat1+CabCrosLateral:MatCrosLat2";
1005 xlen = sCageECCableCrosSidWid / 2;
1006 zlen = cabCrosSide->GetDZ();
1007 TGeoBBox* cabCrosLatSide =
new TGeoBBox(xlen, ylen, zlen);
1008 cabCrosLatSide->SetName(
"CabCrosLatSide");
1010 xpos = cabCrosSide->GetDX() - cabCrosLatSide->GetDX();
1011 zpos = cabCrosLat->GetDZ() + cabCrosLatSide->GetDZ();
1012 TGeoTranslation* matCrosLatSid1 =
new TGeoTranslation(
"MatCrosLatSid1", xpos, ypos, zpos);
1013 matCrosLatSid1->RegisterYourself();
1014 TGeoTranslation* matCrosLatSid2 =
new TGeoTranslation(
"MatCrosLatSid2", xpos, ypos, -zpos);
1015 matCrosLatSid2->RegisterYourself();
1016 TGeoTranslation* matCrosLatSid3 =
new TGeoTranslation(
"MatCrosLatSid3", -xpos, ypos, zpos);
1017 matCrosLatSid3->RegisterYourself();
1018 TGeoTranslation* matCrosLatSid4 =
new TGeoTranslation(
"MatCrosLatSid4", -xpos, ypos, -zpos);
1019 matCrosLatSid4->RegisterYourself();
1021 crossShape +=
"+CabCrosLatSide:MatCrosLatSid1+CabCrosLatSide:MatCrosLatSid2+CabCrosLatSide:MatCrosLatSid3+CabCrosLatSide:MatCrosLatSid4";
1024 xlen = sCageECCableCrosInXWid / 2;
1025 Double_t
phi = TMath::ASin(xlen / rmax) * TMath::RadToDeg();
1026 rmin = rmax - sCageECCableCrosSidWid;
1027 zlen = sCageECCableCrosTotZ / 2;
1028 TGeoTubeSeg* cabCrosRnd =
new TGeoTubeSeg(rmin, rmax, zlen, 90 - phi, 90 + phi);
1029 cabCrosRnd->SetName(
"CabCrosRoundTop");
1031 ypos = -rmax + sCageECCableCrosTotHi;
1032 TGeoTranslation* matCrosRnd =
new TGeoTranslation(
"MatCrosRound", 0, ypos, 0);
1033 matCrosRnd->RegisterYourself();
1035 crossShape +=
"+CabCrosRoundTop:MatCrosRound";
1039 TGeoCompositeShape* cableCross =
new TGeoCompositeShape(crossShape.Data());
1044TGeoVolume* V3Cage::createBeamPipeSupport(
const TGeoManager* mgr)
1064 Double_t xv[nv], yv[nv];
1065 Double_t xpos, ypos, zpos;
1068 TGeoVolumeAssembly* bpSuppVol =
new TGeoVolumeAssembly(
"CageBeamPipeSupport");
1071 TGeoCompositeShape* lowCollarSh = createBPSuppLowerCollar();
1074 TGeoCompositeShape* upCollarSh = createBPSuppUpperCollar();
1077 TGeoCompositeShape* collarBeamSh = createBPSuppCollarBeam();
1080 TGeoCompositeShape* bracketSh = createBPSuppBracket();
1083 TGeoCompositeShape* clampSh = createBPSuppClamp();
1086 TGeoTube* bushSh =
new TGeoTube(0.5 * sBPSuppCollarBushD, 0.5 * sBPSuppCollarIntD, 0.5 * sBPSuppBracketWidth);
1089 TGeoBBox* shimSh =
new TGeoBBox(0.5 * sBPSuppClampShimWid, 0.5 * sBPSuppClampShimThick, 0.5 * sBPSuppClampShimLen);
1092 TGeoTube* m4ScrewSh =
new TGeoTube(0, 0.5 * sBPSuppCollarM4Diam, 0.5 * sBPSuppCollarM4High);
1095 TGeoTube* m5ScrewSh =
new TGeoTube(0, 0.5 * sBPSuppClampM5Diam, 0.5 * sBPSuppClampM5High);
1098 TGeoCone* insHeadSh =
new TGeoCone(0.5 * sBPSuppClampInsH, 0, 0.5 * sBPSuppClampInsDmin, 0, 0.5 * sBPSuppClampInsDmax);
1101 TGeoMedium* medCFRP = mgr->GetMedium(Form(
"%s_CFRP$",
GetDetName()));
1102 TGeoMedium* medTitanium = mgr->GetMedium(Form(
"%s_TITANIUM$",
GetDetName()));
1103 TGeoMedium* medSteel = mgr->GetMedium(Form(
"%s_INOX304$",
GetDetName()));
1104 TGeoMedium* medBrass = mgr->GetMedium(Form(
"%s_BRASS$",
GetDetName()));
1105 TGeoMedium* medVespel = mgr->GetMedium(Form(
"%s_VESPEL$",
GetDetName()));
1107 Color_t kTitanium = kGray + 1;
1109 TGeoVolume* lowCollarVol =
new TGeoVolume(
"BPSupportLowerCollar", lowCollarSh, medTitanium);
1110 lowCollarVol->SetFillColor(kTitanium);
1111 lowCollarVol->SetLineColor(kTitanium);
1113 TGeoVolume* upCollarVol =
new TGeoVolume(
"BPSupportUpperCollar", upCollarSh, medTitanium);
1114 upCollarVol->SetFillColor(kTitanium);
1115 upCollarVol->SetLineColor(kTitanium);
1117 TGeoVolume* bushVol =
new TGeoVolume(
"BPSupportCollarBushing", bushSh, medVespel);
1118 bushVol->SetFillColor(kGreen);
1119 bushVol->SetLineColor(kGreen);
1121 TGeoVolume* collarBeamVol =
new TGeoVolume(
"BPSupportCollarBeam", collarBeamSh, medCFRP);
1122 collarBeamVol->SetFillColor(kBlue);
1123 collarBeamVol->SetLineColor(kBlue);
1125 TGeoVolume* bracketVol =
new TGeoVolume(
"BPSupportBracket", bracketSh, medTitanium);
1126 bracketVol->SetFillColor(kTitanium);
1127 bracketVol->SetLineColor(kTitanium);
1129 TGeoVolume* clampVol =
new TGeoVolume(
"BPSupportClamp", clampSh, medTitanium);
1130 clampVol->SetFillColor(kTitanium);
1131 clampVol->SetLineColor(kTitanium);
1133 TGeoVolume* shimVol =
new TGeoVolume(
"BPSupportClampShim", shimSh, medBrass);
1134 shimVol->SetFillColor(kOrange - 4);
1135 shimVol->SetLineColor(kOrange - 4);
1137 TGeoVolume* m4ScrewVol =
new TGeoVolume(
"BPSupportCollarScrew", m4ScrewSh, medTitanium);
1138 m4ScrewVol->SetFillColor(kTitanium);
1139 m4ScrewVol->SetLineColor(kTitanium);
1141 TGeoVolume* m5ScrewVol =
new TGeoVolume(
"BPSupportClampScrew", m5ScrewSh, medSteel);
1142 m5ScrewVol->SetFillColor(kGray);
1143 m5ScrewVol->SetLineColor(kGray);
1145 TGeoVolume* insHeadVol =
new TGeoVolume(
"BPSupportClampInsert", insHeadSh, medSteel);
1146 insHeadVol->SetFillColor(kGray);
1147 insHeadVol->SetLineColor(kGray);
1150 bpSuppVol->AddNode(lowCollarVol, 1,
nullptr);
1152 ypos = sBPSuppLowCollTailHei / 2;
1153 bpSuppVol->AddNode(upCollarVol, 1,
new TGeoTranslation(0, ypos, 0));
1155 bpSuppVol->AddNode(bushVol, 1,
new TGeoTranslation(0, ypos, 0));
1157 xpos = sBPSuppCollarM4XDist / 2;
1158 ypos += (sBPSuppUpperCollarHei + m4ScrewSh->GetDz());
1159 zpos = sBPSuppCollarM4ZPos;
1160 bpSuppVol->AddNode(m4ScrewVol, 1,
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", 0, 90, 0)));
1161 bpSuppVol->AddNode(m4ScrewVol, 2,
new TGeoCombiTrans(-xpos, ypos, zpos,
new TGeoRotation(
"", 0, 90, 0)));
1162 bpSuppVol->AddNode(m4ScrewVol, 3,
new TGeoCombiTrans(xpos, ypos, -zpos,
new TGeoRotation(
"", 0, 90, 0)));
1163 bpSuppVol->AddNode(m4ScrewVol, 4,
new TGeoCombiTrans(-xpos, ypos, -zpos,
new TGeoRotation(
"", 0, 90, 0)));
1165 xpos = sBPSuppLowerCollarLen / 2 - sBPSuppBracketInLen + sBPSuppCollarBeamLen / 2;
1166 bpSuppVol->AddNode(collarBeamVol, 1,
new TGeoCombiTrans(xpos, 0, 0,
new TGeoRotation(
"", 0, 90, 0)));
1167 bpSuppVol->AddNode(collarBeamVol, 2,
new TGeoCombiTrans(-xpos, 0, 0,
new TGeoRotation(
"", 0, 90, 0)));
1169 xpos += (sBPSuppCollarBeamLen / 2 - sBPSuppBracketInLen);
1170 bpSuppVol->AddNode(bracketVol, 1,
new TGeoTranslation(xpos, 0, 0));
1171 bpSuppVol->AddNode(bracketVol, 2,
new TGeoCombiTrans(-xpos, 0, 0,
new TGeoRotation(
"", 90, 180, -90)));
1173 xpos = 0.5 * sBPSuppClampsXDist - sBPSuppClampTotWid + shimSh->GetDX();
1174 ypos = -shimSh->GetDY();
1175 bpSuppVol->AddNode(shimVol, 1,
new TGeoTranslation(xpos, ypos, 0));
1176 bpSuppVol->AddNode(shimVol, 2,
new TGeoTranslation(-xpos, ypos, 0));
1178 xpos = 0.5 * sBPSuppClampsXDist - sBPSuppClampLatThick;
1179 ypos -= shimSh->GetDY();
1180 bpSuppVol->AddNode(clampVol, 1,
new TGeoTranslation(-xpos, ypos, 0));
1181 bpSuppVol->AddNode(clampVol, 2,
new TGeoCombiTrans(xpos, ypos, 0,
new TGeoRotation(
"", 90, 180, -90)));
1183 xpos -= m5ScrewSh->GetDz();
1184 ypos += (0.5 * sBPSuppClampTotHei - sBPSuppClampShelfHei);
1185 zpos = sBPSuppClampM5ZPos;
1186 bpSuppVol->AddNode(m5ScrewVol, 1,
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", 90, 90, -90)));
1187 bpSuppVol->AddNode(m5ScrewVol, 2,
new TGeoCombiTrans(xpos, ypos, -zpos,
new TGeoRotation(
"", 90, 90, -90)));
1188 bpSuppVol->AddNode(m5ScrewVol, 3,
new TGeoCombiTrans(-xpos, ypos, zpos,
new TGeoRotation(
"", 90, 90, -90)));
1189 bpSuppVol->AddNode(m5ScrewVol, 4,
new TGeoCombiTrans(-xpos, ypos, -zpos,
new TGeoRotation(
"", 90, 90, -90)));
1191 xpos = 0.5 * sBPSuppClampsXDist - sBPSuppClampInsXPos;
1192 ypos = sBPSuppBracketTailHei + insHeadSh->GetDz();
1193 zpos = sBPSuppClampInsZPos;
1194 bpSuppVol->AddNode(insHeadVol, 1,
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", 0, 90, 0)));
1195 bpSuppVol->AddNode(insHeadVol, 2,
new TGeoCombiTrans(-xpos, ypos, zpos,
new TGeoRotation(
"", 0, 90, 0)));
1196 bpSuppVol->AddNode(insHeadVol, 3,
new TGeoCombiTrans(xpos, ypos, -zpos,
new TGeoRotation(
"", 0, 90, 0)));
1197 bpSuppVol->AddNode(insHeadVol, 4,
new TGeoCombiTrans(-xpos, ypos, -zpos,
new TGeoRotation(
"", 0, 90, 0)));
1203TGeoCompositeShape* V3Cage::createBPSuppLowerCollar()
1220 const Int_t nv = 12;
1221 Double_t xv[nv], yv[nv], xy8[16];
1223 Double_t xpos, ypos;
1226 Double_t totlen = (sBPSuppLowerCollarLen - sBPSuppCollarIntD) / 2;
1227 Double_t xtail = (sBPSuppLowCollHolDist - sBPSuppCollarIntD) / 2;
1228 Double_t taillen = sBPSuppLowerCollarTlX - sBPSuppCollarIntD / 2;
1231 yv[0] = -sBPSuppCollarBeamHei / 2;
1232 xv[1] = totlen - xtail;
1234 xv[2] = totlen - taillen;
1235 yv[2] = -sBPSuppLowCollTailHei / 2;
1239 yv[4] = sBPSuppLowCollTailHei / 2;
1247 yv[8] = sBPSuppBracketInHei / 2;
1248 xv[9] = sBPSuppBracketInLen;
1255 zlen = sBPSuppBracketWidth / 2;
1256 TGeoXtru* brktlat =
new TGeoXtru(2);
1257 brktlat->DefinePolygon(nv, xv, yv);
1258 brktlat->DefineSection(0, -zlen);
1259 brktlat->DefineSection(1, zlen);
1260 brktlat->SetName(
"latBrackBody");
1263 zlen = sBPSuppBracketWidth / 2 + 0.001;
1264 TGeoTube* brktcenthole =
new TGeoTube(0, sBPSuppBrktCentHoleD / 2, zlen);
1265 brktcenthole->SetName(
"latBrackCentHole");
1267 xpos = totlen - xtail;
1268 TGeoTranslation* brktcenthmat =
new TGeoTranslation(xpos, 0, 0);
1269 brktcenthmat->SetName(
"latCentHoleMat");
1270 brktcenthmat->RegisterYourself();
1276 xy8[2] = -sBPSuppBrktLatHoleW;
1277 xy8[3] = -sBPSuppBrktLatHoleH / 2;
1282 for (Int_t
i = 0;
i < 8;
i++) {
1283 xy8[8 +
i] = xy8[
i];
1285 TGeoArb8* brktlathole =
new TGeoArb8(zlen, xy8);
1286 brktlathole->SetName(
"latBrackLatHole");
1288 xpos = totlen - taillen;
1289 TGeoTranslation* brktlathmat =
new TGeoTranslation(xpos, 0, 0);
1290 brktlathmat->SetName(
"latLatHoleMat");
1291 brktlathmat->RegisterYourself();
1294 TGeoCompositeShape* latbrkt =
new TGeoCompositeShape(
"latBrackBody-latBrackCentHole:latCentHoleMat-latBrackLatHole:latLatHoleMat");
1295 latbrkt->SetName(
"lateralBracket");
1298 xpos = sBPSuppLowerCollarLen / 2;
1299 TGeoTranslation* latmat1 =
new TGeoTranslation(-xpos, 0, 0);
1300 latmat1->SetName(
"latBrackMat1");
1301 latmat1->RegisterYourself();
1303 TGeoCombiTrans* latmat2 =
new TGeoCombiTrans(xpos, 0, 0,
new TGeoRotation(
"", 90, 180, -90));
1304 latmat2->SetName(
"latBrackMat2");
1305 latmat2->RegisterYourself();
1308 TGeoTubeSeg* collar =
new TGeoTubeSeg(0.5 * sBPSuppCollarIntD, 0.5 * sBPSuppCollarExtD, 0.5 * sBPSuppBracketWidth, 180, 360);
1309 collar->SetName(
"lowerCollar");
1311 ypos = brktlat->GetY(4);
1312 TGeoTranslation* collmat =
new TGeoTranslation(0, ypos, 0);
1313 collmat->SetName(
"lowerCollMat");
1314 collmat->RegisterYourself();
1318 TGeoCompositeShape* collarShape =
new TGeoCompositeShape(
"lowerCollar:lowerCollMat+lateralBracket:latBrackMat1+lateralBracket:latBrackMat2");
1323TGeoCompositeShape* V3Cage::createBPSuppUpperCollar()
1340 Double_t xpos, ypos;
1343 xlen = (sBPSuppUpperCollarLen - sBPSuppCollarIntD) / 2;
1344 TGeoBBox* plate =
new TGeoBBox(0.5 * xlen, 0.5 * sBPSuppUpperCollarHei, 0.5 * sBPSuppBracketWidth);
1345 plate->SetName(
"lateralPlate");
1347 xpos = sBPSuppUpperCollarLen / 2 - plate->GetDX();
1348 ypos = plate->GetDY();
1349 TGeoTranslation* latplmat1 =
new TGeoTranslation(xpos, ypos, 0);
1350 latplmat1->SetName(
"lateralPlateMat1");
1351 latplmat1->RegisterYourself();
1353 TGeoTranslation* latplmat2 =
new TGeoTranslation(-xpos, ypos, 0);
1354 latplmat2->SetName(
"lateralPlateMat2");
1355 latplmat2->RegisterYourself();
1358 TGeoTubeSeg* collar =
new TGeoTubeSeg(0.5 * sBPSuppCollarIntD, 0.5 * sBPSuppCollarExtD, 0.5 * sBPSuppBracketWidth, 0, 180);
1359 collar->SetName(
"upperCollar");
1363 TGeoCompositeShape* collarShape =
new TGeoCompositeShape(
"upperCollar+lateralPlate:lateralPlateMat1+lateralPlate:lateralPlateMat2");
1368TGeoCompositeShape* V3Cage::createBPSuppCollarBeam()
1386 Double_t xv[nv], yv[nv];
1387 Double_t xlen, xwid, ylen, zlen;
1391 xlen = (sBPSuppCollarBeamLen - 2 * sBPSuppBracketInLen) / 2;
1392 xwid = (sBPSuppCollarBeamWid - sBPSuppBracketWidth) / 2;
1394 yv[0] = -sBPSuppBracketWidth / 2;
1395 xv[1] = xv[0] + xwid;
1396 yv[1] = -sBPSuppCollarBeamWid / 2;
1401 for (Int_t
i = 0;
i < 4;
i++) {
1402 xv[4 +
i] = xv[3 -
i];
1403 yv[4 +
i] = -yv[3 -
i];
1406 zlen = sBPSuppCollarBeamHei / 2;
1407 TGeoXtru* colcent =
new TGeoXtru(2);
1408 colcent->SetName(
"collarCentral");
1409 colcent->DefinePolygon(nv, xv, yv);
1410 colcent->DefineSection(0, -zlen);
1411 colcent->DefineSection(1, zlen);
1414 xlen = sBPSuppBracketInLen / 2;
1415 ylen = sBPSuppBracketWidth / 2;
1416 zlen = sBPSuppBracketInHei / 2;
1417 TGeoBBox* colins =
new TGeoBBox(
"collarInsert", xlen, ylen, zlen);
1419 xpos = colcent->GetX(0) - colins->GetDX();
1420 TGeoTranslation* insmat1 =
new TGeoTranslation(-xpos, 0, 0);
1421 insmat1->SetName(
"colInsMat1");
1422 insmat1->RegisterYourself();
1424 TGeoTranslation* insmat2 =
new TGeoTranslation(xpos, 0, 0);
1425 insmat2->SetName(
"colInsMat2");
1426 insmat2->RegisterYourself();
1430 TGeoCompositeShape* beamShape =
new TGeoCompositeShape(
"collarCentral+collarInsert:colInsMat1+collarInsert:colInsMat2");
1435TGeoCompositeShape* V3Cage::createBPSuppBracket()
1452 const Int_t nv = 12;
1453 Double_t xv[nv], yv[nv];
1459 yv[0] = -sBPSuppCollarBeamHei / 2;
1460 xv[1] = sBPSuppBracketTotLen - sBPSuppBrktCentHoleX;
1462 xv[2] = sBPSuppBracketTotLen - sBPSuppBracketTailLen;
1464 xv[3] = sBPSuppBracketTotLen;
1467 yv[4] = sBPSuppBracketTailHei;
1475 yv[8] = sBPSuppBracketInHei / 2;
1476 xv[9] = sBPSuppBracketInLen;
1483 zlen = sBPSuppBracketWidth / 2;
1484 TGeoXtru* brktbody =
new TGeoXtru(2);
1485 brktbody->DefinePolygon(nv, xv, yv);
1486 brktbody->DefineSection(0, -zlen);
1487 brktbody->DefineSection(1, zlen);
1488 brktbody->SetName(
"bracketBody");
1491 zlen = sBPSuppBracketWidth / 2 + 0.001;
1492 TGeoTube* brktcenthole =
new TGeoTube(0, sBPSuppBrktCentHoleD / 2, zlen);
1493 brktcenthole->SetName(
"bracketCentHole");
1495 xpos = sBPSuppBracketTotLen - sBPSuppBrktCentHoleX;
1496 TGeoTranslation* brktcenthmat =
new TGeoTranslation(xpos, -sBPSuppBrktHolesY, 0);
1497 brktcenthmat->SetName(
"bracketCentHMat");
1498 brktcenthmat->RegisterYourself();
1501 TGeoTube* brktlathole =
new TGeoTube(0, sBPSuppBrktLatHoleD / 2, zlen);
1502 brktlathole->SetName(
"bracketLatHole");
1504 xpos = sBPSuppBracketTotLen - sBPSuppBrktLatHoleX;
1505 TGeoTranslation* brktlathmat =
new TGeoTranslation(xpos, sBPSuppBrktHolesY, 0);
1506 brktlathmat->SetName(
"bracketLatHMat");
1507 brktlathmat->RegisterYourself();
1511 TGeoCompositeShape* bracketShape =
new TGeoCompositeShape(
"bracketBody-bracketCentHole:bracketCentHMat-bracketLatHole:bracketLatHMat");
1513 return bracketShape;
1516TGeoCompositeShape* V3Cage::createBPSuppClamp()
1533 Double_t xlen, ylen, zlen;
1534 Double_t xpos, ypos;
1537 xlen = sBPSuppClampLatThick / 2;
1538 ylen = sBPSuppClampTotHei / 2;
1539 zlen = sBPSuppClampTotLen / 2;
1540 TGeoBBox* clampwall =
new TGeoBBox(xlen, ylen, zlen);
1541 clampwall->SetName(
"clampWall");
1543 xpos = -clampwall->GetDX();
1544 ypos = clampwall->GetDY() - sBPSuppClampShelfHei;
1545 TGeoTranslation* clampwallmat =
new TGeoTranslation(xpos, ypos, 0);
1546 clampwallmat->SetName(
"clampWallMat");
1547 clampwallmat->RegisterYourself();
1550 xlen = (sBPSuppClampTotWid - sBPSuppClampLatThick) / 2;
1551 ylen = sBPSuppClampShelfHei / 2;
1552 zlen = sBPSuppClampShelfLen / 2;
1553 TGeoBBox* clampshelf =
new TGeoBBox(xlen, ylen, zlen);
1554 clampshelf->SetName(
"clampShelf");
1556 xpos = clampshelf->GetDX();
1557 ypos = -clampshelf->GetDY();
1558 TGeoTranslation* clampshelfmat =
new TGeoTranslation(xpos, ypos, 0);
1559 clampshelfmat->SetName(
"clampShelfMat");
1560 clampshelfmat->RegisterYourself();
1565 TGeoCompositeShape* clampShape =
new TGeoCompositeShape(
"clampWall:clampWallMat+clampShelf:clampShelfMat");
1570TGeoVolume* V3Cage::createCageClosingCross(
const TGeoManager* mgr)
1588 Double_t xv[nv], yv[nv];
1589 Double_t xlen, ylen, zlen;
1590 Double_t xpos, ypos;
1597 xv[1] = (sCageCrossXWidthTot - sCageCrossXWidthInt) / 2;
1600 yv[2] = (sCageCrossYHeightTot - sCageCrossYHeightInt) / 2;
1601 xv[3] = (sCageCrossXWidthExt - sCageCrossXWidthInt) / 2;
1604 yv[4] = yv[3] + sCageCrossYHeightInt;
1608 yv[6] = sCageCrossYHeightTot;
1612 zlen = sCageCrossZLength / 2;
1614 TGeoXtru* vpost =
new TGeoXtru(2);
1615 vpost->SetName(
"crossvertpost");
1616 vpost->DefinePolygon(nv, xv, yv);
1617 vpost->DefineSection(0, -zlen);
1618 vpost->DefineSection(1, zlen);
1621 xpos = sCageCrossXWidthInt / 2;
1622 TGeoTranslation* vpostmat1 =
new TGeoTranslation(
"vertpostmat1", xpos, 0, 0);
1623 vpostmat1->RegisterYourself();
1625 TGeoCombiTrans* vpostmat2 =
new TGeoCombiTrans(-xpos, 0, 0,
new TGeoRotation(
"", 90, 180, -90));
1626 vpostmat2->SetName(
"vertpostmat2");
1627 vpostmat2->RegisterYourself();
1629 compoShape = Form(
"crossvertpost:vertpostmat1+crossvertpost:vertpostmat2");
1632 Double_t
leg = vpost->GetY(4);
1633 xlen = TMath::Sqrt(sCageCrossXWidthInt * sCageCrossXWidthInt +
leg *
leg) / 2;
1634 ylen = sCageCrossBarThick / 2;
1635 TGeoBBox* xpost =
new TGeoBBox(
"crossoblqpost", xlen, ylen, zlen);
1638 Double_t
phi = sCageCrossBarPhi / 2;
1639 ypos = sCageCrossYHeightTot - sCageCrossYMid;
1641 TGeoCombiTrans* xpostmat1 =
new TGeoCombiTrans(0, ypos, 0,
new TGeoRotation(
"", phi, 0, 0));
1642 xpostmat1->SetName(
"oblqpostmat1");
1643 xpostmat1->RegisterYourself();
1645 TGeoCombiTrans* xpostmat2 =
new TGeoCombiTrans(0, ypos, 0,
new TGeoRotation(
"", -phi, 0, 0));
1646 xpostmat2->SetName(
"oblqpostmat2");
1647 xpostmat2->RegisterYourself();
1649 compoShape += Form(
"+crossoblqpost:oblqpostmat1+crossoblqpost:oblqpostmat2");
1652 TGeoCompositeShape* closCrossSh =
new TGeoCompositeShape(compoShape);
1655 TGeoMedium* medAl = mgr->GetMedium(Form(
"%s_ALUMINUM$",
GetDetName()));
1657 TGeoVolume* closCrossVol =
new TGeoVolume(
"CageClosingCross", closCrossSh, medAl);
1658 closCrossVol->SetFillColor(kGray);
1659 closCrossVol->SetLineColor(kGray);
1662 return closCrossVol;
1665void V3Cage::createAndPlaceMFTRailsInsideCage(TGeoVolume* mother,
const TGeoManager* mgr)
1682 Double_t rdist, rpos, xpos, ypos,
alpha;
1683 Double_t xbox, ybox;
1686 TGeoVolume* cageMFTRails = createMFTRailsPair(mother->GetMedium(), mgr);
1689 xbox = (
static_cast<TGeoBBox*
>(cageMFTRails->GetShape()))->GetDX();
1690 ybox = (
static_cast<TGeoBBox*
>(cageMFTRails->GetShape()))->GetDY();
1692 rdist = TMath::Sqrt(sCageCoverRint * sCageCoverRint - xbox * xbox);
1693 rpos = rdist - ybox;
1696 xpos = rpos * TMath::Sin(sCageEndCapCableCutPhi * TMath::DegToRad());
1697 ypos = rpos * TMath::Cos(sCageEndCapCableCutPhi * TMath::DegToRad()) + sCageYInBarrel;
1699 alpha = -sCageEndCapCableCutPhi + 180;
1700 mother->AddNode(cageMFTRails, 1,
new TGeoCombiTrans(xpos, ypos, 0,
new TGeoRotation(
"",
alpha, 0, 0)));
1701 alpha = sCageEndCapCableCutPhi + 180;
1702 mother->AddNode(cageMFTRails, 2,
new TGeoCombiTrans(-xpos, ypos, 0,
new TGeoRotation(
"",
alpha, 0, 0)));
1704 ypos = rpos * TMath::Cos(sCageEndCapCableCutPhi * TMath::DegToRad()) - sCageYInBarrel;
1706 alpha = sCageEndCapCableCutPhi;
1707 mother->AddNode(cageMFTRails, 3,
new TGeoCombiTrans(xpos, -ypos, 0,
new TGeoRotation(
"",
alpha, 0, 0)));
1708 alpha = -sCageEndCapCableCutPhi;
1709 mother->AddNode(cageMFTRails, 4,
new TGeoCombiTrans(-xpos, -ypos, 0,
new TGeoRotation(
"",
alpha, 0, 0)));
1714TGeoVolume* V3Cage::createMFTRailsPair(
const TGeoMedium* motmed,
const TGeoManager* mgr)
1735 const Int_t nv = 16;
1736 Double_t xv[nv], yv[nv];
1737 Double_t deltah, xlen, ylen, zlen;
1738 Double_t xpos, ypos;
1741 xv[0] = sCageMFTRailBaseWidth / 2;
1744 yv[1] = sCageMFTRailTotHeight - sCageMFTRailExtHeight;
1745 xv[2] = sCageMFTRailTotWidth / 2;
1748 yv[3] = sCageMFTRailTotHeight;
1749 xv[4] = sCageMFTRailIntWidth / 2;
1751 deltah = (sCageMFTRailExtHeight - sCageMFTRailIntHeight) / 2;
1753 yv[5] = yv[4] - deltah;
1754 xv[6] = sCageMFTRailExtWidth / 2;
1757 yv[7] = yv[6] - sCageMFTRailIntHeight;
1759 for (Int_t
i = 8;
i < nv;
i++) {
1760 xv[
i] = -xv[15 -
i];
1764 zlen = sCageMFTRailZLen / 2;
1766 TGeoXtru* mftRailSh =
new TGeoXtru(2);
1767 mftRailSh->SetName(
"mftrailshape");
1768 mftRailSh->DefinePolygon(nv, xv, yv);
1769 mftRailSh->DefineSection(0, -zlen);
1770 mftRailSh->DefineSection(1, zlen);
1773 xlen = 2 * sCageMFTRailTotWidth + sCageMFTRailsXDist;
1774 ylen = sCageMFTRailTotHeight / 2;
1775 zlen = sCageMFTRailZLen / 2;
1776 TGeoBBox* mftRailBoxSh =
new TGeoBBox(xlen / 2, ylen, zlen);
1779 TGeoMedium* medAl = mgr->GetMedium(Form(
"%s_ALUMINUM$",
GetDetName()));
1781 TGeoVolume* mftRailVol =
new TGeoVolume(
"MFTRailInsideCage", mftRailSh, medAl);
1782 mftRailVol->SetFillColor(kGray);
1783 mftRailVol->SetLineColor(kGray);
1785 TGeoVolume* mftRailBoxVol =
new TGeoVolume(
"MFTRailPairInsideCage", mftRailBoxSh, motmed);
1789 xpos = mftRailBoxSh->GetDX() - 0.5 * sCageMFTRailTotWidth;
1790 ypos = mftRailBoxSh->GetDY();
1791 mftRailBoxVol->AddNode(mftRailVol, 1,
new TGeoTranslation(xpos, -ypos, 0));
1792 mftRailBoxVol->AddNode(mftRailVol, 2,
new TGeoTranslation(-xpos, -ypos, 0));
1795 return mftRailBoxVol;
Definition of the GeometryTGeo class.
Definition of the V11Geometry class.
Definition of the V3Cage class.
const char * GetDetName() const
Get detector name.
This class defines the Geometry for the Cage of the ITS Upgrade using TGeo.
~V3Cage() override
Default destructor.
void createAndPlaceCage(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
GLfloat GLfloat GLfloat alpha
GLuint const GLchar * name