22#include <fairlogger/Logger.h>
28#include <TGeoManager.h>
29#include <TGeoMatrix.h>
32#include <TGeoVolume.h>
34#include <TGeoCompositeShape.h>
46const Double_t V3Services::sIBWheelACZdist = 306.0 * sMm;
47const Double_t V3Services::sIBCYSSFlangeCZPos = 171.5 * sMm;
48const Double_t V3Services::sOBWheelThickness = 2.0 * sMm;
49const Double_t V3Services::sMBWheelsZpos = 457.0 * sMm;
50const Double_t V3Services::sOBWheelsZpos = 770.0 * sMm;
51const Double_t V3Services::sOBConesZpos = 798.0 * sMm;
55#define SQ(A) (A) * (A)
86 TGeoVolume* endWheelsVol =
new TGeoVolumeAssembly(
"EndWheelsSideA");
87 endWheelsVol->SetVisibility(kTRUE);
89 for (Int_t jLay = 0; jLay < sNumberInnerLayers; jLay++) {
90 ibEndWheelSideA(jLay, endWheelsVol, mgr);
114 TGeoVolume* endWheelsVol =
new TGeoVolumeAssembly(
"EndWheelsSideC");
115 endWheelsVol->SetVisibility(kTRUE);
117 for (Int_t jLay = 0; jLay < sNumberInnerLayers; jLay++) {
118 ibEndWheelSideC(jLay, endWheelsVol, mgr);
142 static const Double_t sCyssFlangeAZpos = 9.0 *
sMm;
143 static const Double_t sCyssFlangeCZpos = 1.0 *
sMm;
147 TGeoVolume* cyssVol =
new TGeoVolumeAssembly(
"IBCYSSAssembly");
148 cyssVol->SetVisibility(kTRUE);
150 TGeoVolume* cyssCylinder = ibCyssCylinder(mgr);
151 zlen = (
static_cast<TGeoTubeSeg*
>(cyssCylinder->GetShape()))->GetDz();
152 zpos = sIBCYSSFlangeCZPos - sCyssFlangeCZpos - zlen;
153 cyssVol->AddNode(cyssCylinder, 1,
new TGeoTranslation(0, 0, -zpos));
154 cyssVol->AddNode(cyssCylinder, 2,
new TGeoCombiTrans(0, 0, -zpos,
new TGeoRotation(
"", 180, 0, 0)));
156 TGeoVolume* cyssCone = ibCyssCone(mgr);
157 zpos = -zpos + zlen - (
static_cast<TGeoPcon*
>(cyssCone->GetShape()))->GetZ(2);
158 cyssVol->AddNode(cyssCone, 1,
new TGeoTranslation(0, 0, zpos));
159 cyssVol->AddNode(cyssCone, 2,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 180, 0, 0)));
161 TGeoVolume* cyssFlangeA = ibCyssFlangeSideA(mgr);
162 Int_t nZPlanes = (
static_cast<TGeoPcon*
>(cyssCone->GetShape()))->GetNz();
163 zpos = zpos + (
static_cast<TGeoPcon*
>(cyssCone->GetShape()))->GetZ(nZPlanes - 1) + sCyssFlangeAZpos;
164 cyssVol->AddNode(cyssFlangeA, 1,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 180, 180, 0)));
165 cyssVol->AddNode(cyssFlangeA, 2,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 0, 180, 0)));
167 TGeoVolume* cyssFlangeC = ibCyssFlangeSideC(mgr);
168 zpos = sIBCYSSFlangeCZPos;
169 cyssVol->AddNode(cyssFlangeC, 1,
new TGeoTranslation(0, 0, -zpos));
170 cyssVol->AddNode(cyssFlangeC, 2,
new TGeoCombiTrans(0, 0, -zpos,
new TGeoRotation(
"", 180, 0, 0)));
192 for (Int_t jLay = 0; jLay < sNumberMiddlLayers; jLay++) {
193 obEndWheelSideA(jLay, mother, mgr);
213 for (Int_t jLay = 0; jLay < sNumberMiddlLayers; jLay++) {
214 mbEndWheelSideC(jLay, mother, mgr);
234 for (Int_t jLay = 0; jLay < sNumberOuterLayers; jLay++) {
235 obEndWheelSideA(jLay + sNumberMiddlLayers, mother, mgr);
255 for (Int_t jLay = 0; jLay < sNumberOuterLayers; jLay++) {
256 obEndWheelSideC(jLay, mother, mgr);
276 obConeSideA(mother, mgr);
277 obConeTraysSideA(mother, mgr);
296 obConeSideC(mother, mgr);
316 obCYSS11(mother, mgr);
336 ibConvWire(mother, mgr);
356 obConvWire(mother, mgr);
359void V3Services::ibEndWheelSideA(
const Int_t iLay, TGeoVolume* endWheel,
const TGeoManager* mgr)
386 static const Double_t sConeATotalLength[3] = {191.0 *
sMm, 184.0 *
sMm, 177 *
sMm};
387 static const Double_t sConeAIntSectZlen1[3] = {40.35 *
sMm, 39.0 *
sMm, 36.0 *
sMm};
388 static const Double_t sConeAIntSectZlen2[3] = {47.0 *
sMm, 44.0 *
sMm, 41.0 *
sMm};
389 static const Double_t sConeAIntSectDmin[3] = {55.8 *
sMm, 71.8 *
sMm, 87.8 *
sMm};
390 static const Double_t sConeAIntSectDmax[3] = {57.0 *
sMm, 73.0 *
sMm, 89.0 *
sMm};
391 static const Double_t sConeAExtSectZlen1[3] = {60.0 *
sMm, 47.0 *
sMm, 44.0 *
sMm};
392 static const Double_t sConeAExtSectZlen2[3] = {66.0 *
sMm, 52.0 *
sMm, 50.0 *
sMm};
393 static const Double_t sConeAExtSectDmin[3] = {114.0 *
sMm, 174.0 *
sMm, 234.0 *
sMm};
394 static const Double_t sConeAExtSectDmax[3] = {116.0 *
sMm, 176.0 *
sMm, 236.0 *
sMm};
395 static const Double_t sConeASectThicker = 0.8 *
sMm;
396 static const Double_t sConeAOpeningAngle[3] = {20.0, 30.0, 40.2};
398 static const Int_t sConeAWallNHoles[3] = {6, 8, 10};
399 static const Double_t sConeAWallHoleD = 4.5 *
sMm;
400 static const Double_t sConeAWallHoleZpos = 4.0 *
sMm;
402 static const Double_t sConeACentralHole1D = 3.0 *
sMm;
403 static const Double_t sConeACentralHole2D = 3.4 *
sMm;
404 static const Double_t sConeACentralHole3D = 3.0 *
sMm;
405 static const Double_t sConeACentralHole1Z = 20.0 *
sMm;
406 static const Double_t sConeACentralHole2Z = 30.0 *
sMm;
407 static const Double_t sConeACentralHole3Z[3] = {177.0 *
sMm, 170.0 *
sMm, 163.0 *
sMm};
410 static const Double_t sConeARenfDmin[3] = {54.3 *
sMm, 69.85 *
sMm, 85.0 *
sMm};
411 static const Double_t sConeARenfZlen = 2.5 *
sMm;
412 static const Double_t sConeARenfZpos = 14.5 *
sMm;
415 static const Double_t sConeAMidRingDmin[3] = {56.0 *
sMm, 116.0 *
sMm, 176.0 *
sMm};
416 static const Double_t sConeAMidRingDmax[3] = {58.0 *
sMm, 118.0 *
sMm, 178.0 *
sMm};
417 static const Double_t sConeAMidRingZlen = 42.0 *
sMm;
419 static const Double_t sConeAMidRingZpos[3] = {5.0 *
sMm, 0.0 *
sMm, 0.0 *
sMm};
422 static const Int_t sConeANRibs[3] = {6, 8, 10};
423 static const Double_t sConeARibsZpos = 17.0 *
sMm;
426 static const Double_t sConeAStepXdispl[3] = {4.0 *
sMm, 6.5 *
sMm, 8.5 *
sMm};
427 static const Double_t sConeAStepYdispl[3] = {24.4 *
sMm, 32.1 *
sMm, 39.6 *
sMm};
428 static const Double_t sConeAStepR[3] = {27.8 *
sMm, 35.8 *
sMm, 43.8 *
sMm};
430 static const Double_t sConeAStepZlen = 14.0 *
sMm;
432 static const Double_t sConeAStepHoleXpos = 3.0 *
sMm;
433 static const Double_t sConeAStepHoleZpos = 4.0 *
sMm;
434 static const Double_t sConeAStepHoleZdist = 4.0 *
sMm;
436 static const Double_t sConeAStepHolePhi[3] = {30.0, 22.5, 18.0};
437 static const Double_t sConeAStepHolePhi0[3] = {0.7, -16.2, -10.5};
440 Double_t xlen, ylen, zlen;
441 Double_t rmin, rmax, thick, phimin, dphi;
442 Double_t xpos, ypos, zpos, zref;
446 TGeoPcon* coneabasis =
new TGeoPcon(Form(
"coneabasis%d", iLay), 0, 360, 15);
448 rmin = sConeAIntSectDmin[iLay] / 2;
449 rmax = sConeAIntSectDmax[iLay] / 2;
450 coneabasis->DefineSection(0, 0., rmin, rmax);
451 zpos = sConeARenfZpos;
452 coneabasis->DefineSection(1, zpos, rmin, rmax);
453 rmin = sConeARenfDmin[iLay] / 2;
454 coneabasis->DefineSection(2, zpos, rmin, rmax);
455 zpos += sConeARenfZlen;
456 coneabasis->DefineSection(3, zpos, rmin, rmax);
457 rmin = coneabasis->GetRmin(0);
458 coneabasis->DefineSection(4, zpos, rmin, rmax);
459 coneabasis->DefineSection(5, sConeAIntSectZlen1[iLay], rmin, rmax);
460 rmax += sConeASectThicker;
461 coneabasis->DefineSection(6, sConeAIntSectZlen1[iLay], rmin, rmax);
462 coneabasis->DefineSection(7, sConeAIntSectZlen2[iLay], rmin, rmax);
463 rmin = coneabasis->GetRmax(1);
464 coneabasis->DefineSection(8, sConeAIntSectZlen2[iLay], rmin, rmax);
465 rmin = sConeAExtSectDmin[iLay] / 2 - sConeASectThicker;
466 rmax = sConeAExtSectDmin[iLay] / 2;
467 zlen = sConeAIntSectZlen2[iLay] + (rmin - coneabasis->GetRmin(4)) / TMath::Tan(sConeAOpeningAngle[iLay] * TMath::DegToRad());
468 coneabasis->DefineSection(9, zlen, rmin, rmax);
469 zlen = sConeATotalLength[iLay] - sConeAExtSectZlen2[iLay];
470 coneabasis->DefineSection(10, zlen, rmin, rmax);
471 rmax = sConeAExtSectDmax[iLay] / 2;
472 coneabasis->DefineSection(11, zlen, rmin, rmax);
473 zlen = sConeATotalLength[iLay] - sConeAExtSectZlen1[iLay];
474 coneabasis->DefineSection(12, zlen, rmin, rmax);
475 rmin = sConeAExtSectDmin[iLay] / 2;
476 coneabasis->DefineSection(13, zlen, rmin, rmax);
477 coneabasis->DefineSection(14, sConeATotalLength[iLay], rmin, rmax);
479 TString coneAComposite = Form(
"coneabasis%d", iLay);
482 thick = coneabasis->GetRmax(0) - coneabasis->GetRmin(0);
483 TGeoTube* coneawallhole =
new TGeoTube(Form(
"coneawallhole%d", iLay), 0, sConeAWallHoleD / 2, 4 * thick);
485 rmin = sConeAIntSectDmax[iLay] / 2 - thick / 2;
486 zpos = sConeAWallHoleZpos;
487 dphi = 180. / sConeAWallNHoles[iLay];
489 for (Int_t ihole = 0; ihole < 2 * sConeAWallNHoles[iLay]; ihole++) {
490 Double_t
phi = phimin + ihole * dphi;
491 xpos = rmin * TMath::Sin(phi * TMath::DegToRad());
492 ypos = rmin * TMath::Cos(phi * TMath::DegToRad());
493 TGeoCombiTrans* coneawhmat =
new TGeoCombiTrans(Form(
"coneawhmat%dl%d", ihole, iLay), xpos, ypos, zpos,
new TGeoRotation(
"", -phi, 90, 0));
494 coneawhmat->RegisterYourself();
495 coneAComposite += Form(
"-coneawallhole%d:coneawhmat%dl%d", iLay, ihole, iLay);
499 TGeoTube* coneacenthole1 =
new TGeoTube(Form(
"coneacenthole1l%d", iLay), 0, sConeACentralHole1D / 2, 4 * thick);
501 TGeoCombiTrans* coneach1mat1 =
new TGeoCombiTrans(Form(
"coneach1mat1l%d", iLay), 0, rmin, sConeACentralHole1Z,
new TGeoRotation(
"", 0, 90, 0));
502 coneach1mat1->RegisterYourself();
503 TGeoCombiTrans* coneach1mat2 =
new TGeoCombiTrans(Form(
"coneach1mat2l%d", iLay), 0, -rmin, sConeACentralHole1Z,
new TGeoRotation(
"", 0, 90, 0));
504 coneach1mat2->RegisterYourself();
506 coneAComposite += Form(
"-coneacenthole1l%d:coneach1mat1l%d-coneacenthole1l%d:coneach1mat2l%d", iLay, iLay, iLay, iLay);
508 TGeoTube* coneacenthole2 =
new TGeoTube(Form(
"coneacenthole2l%d", iLay), 0, sConeACentralHole2D / 2, 4 * thick);
510 TGeoCombiTrans* coneach2mat1 =
new TGeoCombiTrans(Form(
"coneach2mat1l%d", iLay), 0, rmin, sConeACentralHole2Z,
new TGeoRotation(
"", 0, 90, 0));
511 coneach2mat1->RegisterYourself();
512 TGeoCombiTrans* coneach2mat2 =
new TGeoCombiTrans(Form(
"coneach2mat2l%d", iLay), 0, -rmin, sConeACentralHole2Z,
new TGeoRotation(
"", 0, 90, 0));
513 coneach2mat2->RegisterYourself();
515 coneAComposite += Form(
"-coneacenthole2l%d:coneach2mat1l%d-coneacenthole2l%d:coneach2mat2l%d", iLay, iLay, iLay, iLay);
517 TGeoTube* coneacenthole3 =
new TGeoTube(Form(
"coneacenthole3l%d", iLay), 0, sConeACentralHole3D / 2, 4 * thick);
519 rmin = sConeAExtSectDmax[iLay] / 2 - thick / 2;
520 TGeoCombiTrans* coneach3mat1 =
new TGeoCombiTrans(Form(
"coneach3mat1l%d", iLay), 0, rmin, sConeACentralHole3Z[iLay],
new TGeoRotation(
"", 0, 90, 0));
521 coneach3mat1->RegisterYourself();
522 TGeoCombiTrans* coneach3mat2 =
new TGeoCombiTrans(Form(
"coneach3mat2l%d", iLay), 0, -rmin, sConeACentralHole3Z[iLay],
new TGeoRotation(
"", 0, 90, 0));
523 coneach3mat2->RegisterYourself();
525 coneAComposite += Form(
"-coneacenthole3l%d:coneach3mat1l%d-coneacenthole3l%d:coneach3mat2l%d", iLay, iLay, iLay, iLay);
527 TGeoCompositeShape* coneABasisSh =
new TGeoCompositeShape(coneAComposite.Data());
530 rmin = sConeAMidRingDmin[iLay] / 2;
531 rmax = sConeAMidRingDmax[iLay] / 2;
532 zlen = sConeAMidRingZlen / 2;
533 TGeoTube* midRingSh =
new TGeoTube(Form(
"midRingSh%d", iLay), rmin, rmax, zlen);
536 TGeoXtru* coneARibSh = ibEndWheelARibShape(iLay);
540 rmin = sConeAStepR[iLay];
542 xlen = TMath::Sqrt(rmin * rmin - sConeAStepYdispl[iLay] * sConeAStepYdispl[iLay]) - sConeAStepXdispl[iLay];
543 ylen = TMath::Sqrt(rmin * rmin - sConeAStepXdispl[iLay] * sConeAStepXdispl[iLay]) - sConeAStepYdispl[iLay];
544 TGeoBBox* stepBoxSh =
new TGeoBBox(Form(
"stepBoxASh%d", iLay), xlen / 2, ylen / 2, sConeAStepZlen / 2);
546 xpos = sConeAStepXdispl[iLay] + stepBoxSh->GetDX();
547 ypos = sConeAStepYdispl[iLay] + stepBoxSh->GetDY();
548 TGeoTranslation* stepBoxTr =
new TGeoTranslation(Form(
"stepBoxATr%d", iLay), xpos, ypos, 0);
549 stepBoxTr->RegisterYourself();
551 phimin = 90. - TMath::ACos(sConeAStepYdispl[iLay] / rmin) * TMath::RadToDeg() - 5;
552 dphi = 90. - TMath::ASin(sConeAStepXdispl[iLay] / rmin) * TMath::RadToDeg() - phimin + 10;
553 rmax = rmin + 2 * stepBoxSh->GetDY();
555 TGeoPcon* stepPconSh =
new TGeoPcon(Form(
"stepPconASh%d", iLay), phimin, dphi, 2);
556 stepPconSh->DefineSection(0, -1.05 * sConeAStepZlen / 2, rmin, rmax);
557 stepPconSh->DefineSection(1, 1.05 * sConeAStepZlen / 2, rmin, rmax);
559 TGeoCompositeShape* stepASh =
new TGeoCompositeShape(Form(
"stepBoxASh%d:stepBoxATr%d-stepPconASh%d", iLay, iLay, iLay));
562 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
563 TGeoMedium* medPEEK = mgr->GetMedium(Form(
"%s_PEEKCF30$",
GetDetName()));
565 TGeoVolume* coneABasisVol =
new TGeoVolume(Form(
"ConeABasis%d", iLay), coneABasisSh, medCarbon);
566 coneABasisVol->SetFillColor(kBlue);
567 coneABasisVol->SetLineColor(kBlue);
569 TGeoVolume* midRingVol =
new TGeoVolume(Form(
"ConeAMidRing%d", iLay), midRingSh, medCarbon);
570 coneABasisVol->SetFillColor(kBlue);
571 coneABasisVol->SetLineColor(kBlue);
573 TGeoVolume* coneARibVol =
new TGeoVolume(Form(
"ConeARibVol%d", iLay), coneARibSh, medCarbon);
574 coneARibVol->SetFillColor(kBlue);
575 coneARibVol->SetLineColor(kBlue);
577 TGeoVolume* stepAVol =
new TGeoVolume(Form(
"ConeAStep%d", iLay), stepASh, medPEEK);
578 stepAVol->SetFillColor(kBlue);
579 stepAVol->SetLineColor(kBlue);
583 zref = sIBWheelACZdist / 2 - (sConeAStepHoleZpos + sConeAStepHoleZdist);
586 endWheel->AddNode(coneABasisVol, 1,
new TGeoTranslation(0, 0, zpos));
588 zpos = zref + sConeATotalLength[iLay] - sConeAMidRingZpos[iLay] - midRingSh->GetDz();
589 endWheel->AddNode(midRingVol, 1,
new TGeoTranslation(0, 0, zpos));
591 rmin = sConeAExtSectDmin[iLay] / 2 - 0.035;
592 zpos = zref + sConeATotalLength[iLay] - sConeARibsZpos;
593 dphi = 180. / sConeANRibs[iLay];
594 for (Int_t irib = 0; irib < 2 * sConeANRibs[iLay]; irib++) {
595 Double_t
phi = irib * dphi;
596 xpos = rmin * TMath::Sin(phi * TMath::DegToRad());
597 ypos = rmin * TMath::Cos(phi * TMath::DegToRad());
598 endWheel->AddNode(coneARibVol, 1,
new TGeoCombiTrans(xpos, -ypos, zpos,
new TGeoRotation(
"", 90 + phi, 90, -90)));
602 dphi = 180. - sConeAStepHolePhi0[iLay];
605 zpos = zref + (
static_cast<TGeoBBox*
>(stepAVol->GetShape()))->GetDZ();
606 for (Int_t
j = 0;
j < numberOfStaves;
j++) {
607 Double_t
phi = dphi +
j * sConeAStepHolePhi[iLay];
608 endWheel->AddNode(stepAVol,
j + 1,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 180, 180, -90 - phi)));
612void V3Services::ibEndWheelSideC(
const Int_t iLay, TGeoVolume* endWheel,
const TGeoManager* mgr)
640 static const Double_t sEndWheelCDmax[3] = {57.0 *
sMm, 73.0 *
sMm, 89.0 *
sMm};
641 static const Double_t sEndWheelCDmin[3] = {44.5 *
sMm, 58.0 *
sMm, 74.0 *
sMm};
642 static const Double_t sEndWheelCHeigh[3] = {25.0 *
sMm, 22.5 *
sMm, 20.0 *
sMm};
643 static const Double_t sEndWheelCThick = 0.6 *
sMm;
645 static const Int_t sEndWCWallNHoles[3] = {6, 8, 10};
646 static const Double_t sEndWCWallHoleD = 4.5 *
sMm;
647 static const Double_t sEndWCWallHoleZpos = 4.0 *
sMm;
649 static const Int_t sEndWCBaseNBigHoles = 5;
650 static const Int_t sEndWCBaseNSmalHoles = 6;
651 static const Double_t sEndWCBaseBigHoleD = 3.6 *
sMm;
652 static const Double_t sEndWCBaseSmalHoleD = 2.5 *
sMm;
653 static const Double_t sEndWCBaseHolesDpos[3] = {50.0 *
sMm, 64.0 *
sMm, 80.0 *
sMm};
654 static const Double_t sEndWCBaseHolesPhi = 15.0;
657 static const Double_t sEndWCRenfDmin[3] = {44.0 *
sMm, 58.0 *
sMm, 74.0 *
sMm};
658 static const Double_t sEndWCRenfDint[3] = {55.0 *
sMm, 71.0 *
sMm, 87.0 *
sMm};
659 static const Double_t sEndWCRenfHeigh[3] = {4.0 *
sMm, 3.0 *
sMm, 3.0 *
sMm};
660 static const Double_t sEndWCRenfThick = 0.6 *
sMm;
662 static const Double_t sEndWCRenfZpos = 14.2 *
sMm;
664 static const Int_t sEndWCRenfNSmalHoles[3] = {5, 7, 9};
667 static const Double_t sEndWCStepXdispl[3] = {4.0 *
sMm, 6.5 *
sMm, 8.5 *
sMm};
668 static const Double_t sEndWCStepYdispl[3] = {24.4 *
sMm, 32.1 *
sMm, 39.6 *
sMm};
669 static const Double_t sEndWCStepR[3] = {27.8 *
sMm, 35.8 *
sMm, 43.8 *
sMm};
671 static const Double_t sEndWCStepZlen = 14.0 *
sMm;
673 static const Double_t sEndWCStepHoleXpos = 3.0 *
sMm;
674 static const Double_t sEndWCStepHoleZpos = 4.0 *
sMm;
675 static const Double_t sEndWCStepHoleZdist = 4.0 *
sMm;
677 static const Double_t sEndWCStepHolePhi[3] = {30.0, 22.5, 18.0};
678 static const Double_t sEndWCStepHolePhi0[2] = {9.5, 10.5};
679 static const Double_t sEndWCStepYlow = 7.0 *
sMm;
682 Double_t xlen, ylen, zlen;
683 Double_t rmin, rmax, phimin, dphi;
684 Double_t xpos, ypos, zpos;
688 TGeoPcon* endwcbasis =
new TGeoPcon(Form(
"endwcbasis%d", iLay), 0, 360, 10);
690 rmin = sEndWheelCDmax[iLay] / 2 - sEndWheelCThick;
691 endwcbasis->DefineSection(0, 0., rmin, sEndWheelCDmax[iLay] / 2);
692 endwcbasis->DefineSection(1, sEndWCRenfZpos, rmin, sEndWheelCDmax[iLay] / 2);
693 endwcbasis->DefineSection(2, sEndWCRenfZpos, sEndWCRenfDmin[iLay] / 2, sEndWheelCDmax[iLay] / 2);
694 zlen = sEndWCRenfZpos + sEndWCRenfThick;
695 endwcbasis->DefineSection(3, zlen, sEndWCRenfDmin[iLay] / 2, sEndWheelCDmax[iLay] / 2);
696 endwcbasis->DefineSection(4, zlen, sEndWCRenfDint[iLay] / 2, sEndWheelCDmax[iLay] / 2);
697 zlen = sEndWCRenfZpos + sEndWCRenfHeigh[iLay];
698 endwcbasis->DefineSection(5, zlen, sEndWCRenfDint[iLay] / 2, sEndWheelCDmax[iLay] / 2);
699 endwcbasis->DefineSection(6, zlen, rmin, sEndWheelCDmax[iLay] / 2);
700 zlen = sEndWheelCHeigh[iLay] - sEndWheelCThick;
701 endwcbasis->DefineSection(7, zlen, rmin, sEndWheelCDmax[iLay] / 2);
702 endwcbasis->DefineSection(8, zlen, sEndWheelCDmin[iLay] / 2, sEndWheelCDmax[iLay] / 2);
703 endwcbasis->DefineSection(9, sEndWheelCHeigh[iLay], sEndWheelCDmin[iLay] / 2, sEndWheelCDmax[iLay] / 2);
705 TString endWheelComposite = Form(
"endwcbasis%d", iLay);
708 TGeoTube* endwcwalhol =
new TGeoTube(Form(
"endwcwalhol%d", iLay), 0, sEndWCWallHoleD / 2, 4 * sEndWheelCThick);
710 rmin = sEndWheelCDmax[iLay] / 2 - sEndWheelCThick / 2;
711 zpos = sEndWCWallHoleZpos;
712 dphi = 180. / sEndWCWallNHoles[iLay];
714 for (Int_t ihole = 0; ihole < 2 * sEndWCWallNHoles[iLay]; ihole++) {
715 Double_t
phi = phimin + ihole * dphi;
716 xpos = rmin * TMath::Sin(phi * TMath::DegToRad());
717 ypos = rmin * TMath::Cos(phi * TMath::DegToRad());
718 TGeoCombiTrans* endwcwhmat =
new TGeoCombiTrans(Form(
"endwcwhmat%dl%d", ihole, iLay), xpos, ypos, zpos,
new TGeoRotation(
"", -phi, 90, 0));
719 endwcwhmat->RegisterYourself();
720 endWheelComposite += Form(
"-endwcwalhol%d:endwcwhmat%dl%d", iLay, ihole, iLay);
724 TGeoTube* endwcbasBhol =
new TGeoTube(Form(
"endwcbasBhol%d", iLay), 0, sEndWCBaseBigHoleD / 2, 1.5 * sEndWheelCThick);
726 TGeoTube* endwcbasShol =
new TGeoTube(Form(
"endwcbasShol%d", iLay), 0, sEndWCBaseSmalHoleD / 2, 1.5 * sEndWheelCThick);
728 rmin = sEndWCBaseHolesDpos[iLay] / 2;
729 zpos = (endwcbasis->GetZ(8) + endwcbasis->GetZ(9)) / 2;
731 char holename[strlen(endwcbasBhol->GetName()) + 1];
734 for (Int_t ihole = 0; ihole < (sEndWCBaseNBigHoles + sEndWCBaseNSmalHoles); ihole++) {
735 phimin += sEndWCBaseHolesPhi;
736 xpos = rmin * TMath::Cos(phimin * TMath::DegToRad());
737 ypos = rmin * TMath::Sin(phimin * TMath::DegToRad());
738 TGeoTranslation* endwcbshmata =
new TGeoTranslation(Form(
"endwcbshmat%dl%da", ihole, iLay), xpos, ypos, zpos);
739 endwcbshmata->RegisterYourself();
740 TGeoTranslation* endwcbshmatb =
new TGeoTranslation(Form(
"endwcbshmat%dl%db", ihole, iLay), -xpos, -ypos, zpos);
741 endwcbshmatb->RegisterYourself();
742 if ((ihole > 1 && ihole < 5) || (ihole > 5 && ihole < 9)) {
743 strcpy(holename, endwcbasShol->GetName());
745 strcpy(holename, endwcbasBhol->GetName());
747 endWheelComposite += Form(
"-%s:endwcbshmat%dl%da-%s:endwcbshmat%dl%db", holename, ihole, iLay, holename, ihole, iLay);
751 zpos = (endwcbasis->GetZ(2) + endwcbasis->GetZ(3)) / 2;
754 dphi = 180. / (sEndWCRenfNSmalHoles[iLay] + 1);
755 for (Int_t ihole = 0; ihole < sEndWCRenfNSmalHoles[iLay]; ihole++) {
757 xpos = rmin * TMath::Cos(phimin * TMath::DegToRad());
758 ypos = rmin * TMath::Sin(phimin * TMath::DegToRad());
759 TGeoTranslation* endwcrshmata =
new TGeoTranslation(Form(
"endwcrshmat%dl%da", ihole, iLay), xpos, ypos, zpos);
760 endwcrshmata->RegisterYourself();
761 TGeoTranslation* endwcrshmatb =
new TGeoTranslation(Form(
"endwcrshmat%dl%db", ihole, iLay), -xpos, -ypos, zpos);
762 endwcrshmatb->RegisterYourself();
763 endWheelComposite += Form(
"-endwcbasShol%d:endwcrshmat%dl%da-endwcbasShol%d:endwcrshmat%dl%db", iLay, ihole, iLay, iLay, ihole, iLay);
766 TGeoCompositeShape* endWheelCSh =
new TGeoCompositeShape(endWheelComposite.Data());
770 rmin = sEndWCStepR[iLay];
772 xlen = TMath::Sqrt(rmin * rmin - sEndWCStepYdispl[iLay] * sEndWCStepYdispl[iLay]) - sEndWCStepXdispl[iLay];
773 ylen = TMath::Sqrt(rmin * rmin - sEndWCStepXdispl[iLay] * sEndWCStepXdispl[iLay]) - sEndWCStepYdispl[iLay];
774 TGeoBBox* stepBoxSh =
new TGeoBBox(Form(
"stepBoxCSh%d", iLay), xlen / 2, ylen / 2, sEndWCStepZlen / 2);
776 xpos = sEndWCStepXdispl[iLay] + stepBoxSh->GetDX();
777 ypos = sEndWCStepYdispl[iLay] + stepBoxSh->GetDY();
778 TGeoTranslation* stepBoxTr =
new TGeoTranslation(Form(
"stepBoxCTr%d", iLay), xpos, ypos, 0);
779 stepBoxTr->RegisterYourself();
781 phimin = 90. - TMath::ACos(sEndWCStepYdispl[iLay] / rmin) * TMath::RadToDeg() - 5;
782 dphi = 90. - TMath::ASin(sEndWCStepXdispl[iLay] / rmin) * TMath::RadToDeg() - phimin + 10;
783 rmax = rmin + 2 * stepBoxSh->GetDY();
785 TGeoPcon* stepPconSh =
new TGeoPcon(Form(
"stepPconCSh%d", iLay), phimin, dphi, 2);
786 stepPconSh->DefineSection(0, -1.05 * sEndWCStepZlen / 2, rmin, rmax);
787 stepPconSh->DefineSection(1, 1.05 * sEndWCStepZlen / 2, rmin, rmax);
789 TGeoCompositeShape* stepCSh =
new TGeoCompositeShape(Form(
"stepBoxCSh%d:stepBoxCTr%d-stepPconCSh%d", iLay, iLay, iLay));
792 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
793 TGeoMedium* medPEEK = mgr->GetMedium(Form(
"%s_PEEKCF30$",
GetDetName()));
795 TGeoVolume* endWheelCVol =
new TGeoVolume(Form(
"EndWheelCBasis%d", iLay), endWheelCSh, medCarbon);
796 endWheelCVol->SetFillColor(kBlue);
797 endWheelCVol->SetLineColor(kBlue);
799 TGeoVolume* stepCVol =
new TGeoVolume(Form(
"EndWheelCStep%d", iLay), stepCSh, medPEEK);
800 stepCVol->SetFillColor(kBlue);
801 stepCVol->SetLineColor(kBlue);
804 zpos = sIBWheelACZdist / 2 - (sEndWCStepHoleZpos + sEndWCStepHoleZdist);
805 endWheel->AddNode(endWheelCVol, 1,
new TGeoCombiTrans(0, 0, -zpos,
new TGeoRotation(
"", 0, 180, 0)));
809 dphi = (sEndWCStepYlow / sEndWCStepYdispl[iLay]) * TMath::RadToDeg();
811 dphi = sEndWCStepHolePhi0[iLay - 1];
815 zpos += (
static_cast<TGeoBBox*
>(stepCVol->GetShape()))->GetDZ();
816 for (Int_t
j = 0;
j < numberOfStaves;
j++) {
817 Double_t
phi = dphi +
j * sEndWCStepHolePhi[iLay];
818 endWheel->AddNode(stepCVol,
j + 1,
new TGeoCombiTrans(0, 0, -zpos,
new TGeoRotation(
"", 180, 180, -90 - phi)));
822TGeoXtru* V3Services::ibEndWheelARibShape(
const Int_t iLay)
841 static const Int_t sConeARibNVert = 8;
843 static const Double_t sConeARibWidth = 27.3 *
sMm;
844 static const Double_t sConeARibTotalLen[3] = {98.03 *
sMm, 104.65 *
sMm, 101.43 *
sMm};
845 static const Double_t sConeARibIntLen[3] = {50.0 *
sMm, 40.0 *
sMm, 28.5 *
sMm};
846 static const Double_t sConeARibStep[3] = {1.0 *
sMm, 1.1 *
sMm, 1.0 *
sMm};
847 static const Double_t sConeARibLenToStep[3] = {42.0 *
sMm, 29.0 *
sMm, 26.0 *
sMm};
848 static const Double_t sConeARibLenAfterStep[3] = {50.5 *
sMm, 37.0 *
sMm, 33.5 *
sMm};
849 static const Double_t sConeARibVertexPos[3] = {9.0 *
sMm, 40.0 *
sMm, 58.0 *
sMm};
850 static const Double_t sConeARibIntAngle = 45.0;
851 static const Double_t sConeARibVertexAngle[2] = {20.0, 30.0};
853 static const Double_t sConeARibThick = 0.9 *
sMm;
856 Double_t xtru[sConeARibNVert], ytru[sConeARibNVert];
861 xtru[1] = sConeARibLenToStep[iLay];
864 ytru[2] = sConeARibStep[iLay];
865 xtru[3] = sConeARibLenAfterStep[iLay];
867 xtru[4] = sConeARibTotalLen[iLay];
869 ytru[4] = sConeARibWidth - sConeARibVertexPos[iLay];
870 xtru[5] = sConeARibIntLen[iLay] + sConeARibVertexPos[iLay] / TMath::Tan(sConeARibIntAngle * TMath::DegToRad());
872 ytru[4] = sConeARibVertexPos[iLay];
873 xtru[5] = sConeARibIntLen[iLay] + (sConeARibVertexPos[iLay] - sConeARibWidth) / TMath::Tan(sConeARibVertexAngle[iLay - 1] * TMath::DegToRad());
876 xtru[6] = sConeARibIntLen[iLay];
877 ytru[6] = sConeARibWidth;
882 TGeoXtru* ribShape =
new TGeoXtru(2);
883 ribShape->DefinePolygon(sConeARibNVert, xtru, ytru);
884 ribShape->DefineSection(0, -sConeARibThick / 2);
885 ribShape->DefineSection(1, sConeARibThick / 2);
890TGeoVolume* V3Services::ibCyssCylinder(
const TGeoManager* mgr)
907 static const Double_t sCyssCylInnerD = 95.6 *
sMm;
908 static const Double_t sCyssCylOuterD = 100.0 *
sMm;
909 static const Double_t sCyssCylZLength = 353.0 *
sMm;
910 static const Double_t sCyssCylFabricThick = 0.1 *
sMm;
913 Double_t rmin, rmax, zlen, phimin, phimax, dphi;
916 rmin = sCyssCylInnerD / 2;
917 rmax = sCyssCylOuterD / 2;
918 zlen = sCyssCylZLength / 2;
919 TGeoTubeSeg* cyssOuterCylSh =
new TGeoTubeSeg(rmin, rmax, zlen, 180, 360);
921 rmin += sCyssCylFabricThick;
922 rmax -= sCyssCylFabricThick;
923 zlen -= sCyssCylFabricThick;
925 dphi = TMath::ASin(sCyssCylFabricThick / rmax);
926 phimin = 180 + dphi * TMath::RadToDeg();
927 phimax = 360 - dphi * TMath::RadToDeg();
929 TGeoTubeSeg* cyssInnerCylSh =
new TGeoTubeSeg(rmin, rmax, zlen, phimin, phimax);
932 TGeoMedium* medPrepreg = mgr->GetMedium(Form(
"%s_AS4C200$",
GetDetName()));
933 TGeoMedium* medRohacell = mgr->GetMedium(Form(
"%s_RIST110$",
GetDetName()));
935 TGeoVolume* cyssOuterCylVol =
new TGeoVolume(
"IBCYSSCylinder", cyssOuterCylSh, medPrepreg);
936 cyssOuterCylVol->SetLineColor(35);
938 TGeoVolume* cyssInnerCylVol =
new TGeoVolume(
"IBCYSSCylinderFoam", cyssInnerCylSh, medRohacell);
939 cyssInnerCylVol->SetLineColor(kGreen);
941 cyssOuterCylVol->AddNode(cyssInnerCylVol, 1,
nullptr);
944 return cyssOuterCylVol;
947TGeoVolume* V3Services::ibCyssCone(
const TGeoManager* mgr)
964 static const Double_t sCyssConeTotalLength = 150.0 *
sMm;
966 static const Double_t sCyssConeIntSectDmin = 100.0 *
sMm;
967 static const Double_t sCyssConeIntSectDmax = 101.2 *
sMm;
968 static const Double_t sCyssConeIntSectZlen = 23.0 *
sMm;
969 static const Double_t sCyssConeIntCylZlen = 15.0 *
sMm;
971 static const Double_t sCyssConeExtSectDmin = 246.0 *
sMm;
972 static const Double_t sCyssConeExtSectDmax = 257.2 *
sMm;
973 static const Double_t sCyssConeExtSectZlen = 42.0 *
sMm;
974 static const Double_t sCyssConeExtCylZlen = 40.0 *
sMm;
976 static const Double_t sCyssConeOpeningAngle = 40.0;
978 static const Double_t sCyssConeFabricThick = 0.3 *
sMm;
981 Double_t rmin, rmax, zlen1, zlen2, phimin, phirot, dphi;
989 TGeoPcon* cyssConeSh =
new TGeoPcon(180, 180, 6);
991 rmin = sCyssConeIntSectDmin / 2;
992 rmax = sCyssConeIntSectDmax / 2;
993 cyssConeSh->DefineSection(0, 0, rmin, rmax);
994 cyssConeSh->DefineSection(1, sCyssConeIntCylZlen, rmin, rmax);
995 zlen1 = sCyssConeTotalLength - sCyssConeExtSectZlen;
996 rmax =
yFrom2Points(sCyssConeIntCylZlen, sCyssConeIntSectDmax / 2, zlen1, sCyssConeExtSectDmax / 2, sCyssConeIntSectZlen);
997 cyssConeSh->DefineSection(2, sCyssConeIntSectZlen, rmin, rmax);
998 zlen2 = sCyssConeTotalLength - sCyssConeExtCylZlen;
999 rmin =
yFrom2Points(sCyssConeIntSectZlen, sCyssConeIntSectDmin / 2, zlen2, sCyssConeExtSectDmin / 2, zlen1);
1000 rmax = sCyssConeExtSectDmax / 2;
1001 cyssConeSh->DefineSection(3, zlen1, rmin, rmax);
1002 rmin = sCyssConeExtSectDmin / 2;
1003 cyssConeSh->DefineSection(4, zlen2, rmin, rmax);
1004 cyssConeSh->DefineSection(5, sCyssConeTotalLength, rmin, rmax);
1006 dphi = TMath::ASin(sCyssConeFabricThick / (0.5 * sCyssConeIntSectDmax));
1007 phimin = 180 + dphi * TMath::RadToDeg();
1008 phirot = 180 - 2 * dphi * TMath::RadToDeg();
1011 TGeoPcon* cyssConeFoamSh =
new TGeoPcon(phimin, phirot, 5);
1013 m = TMath::Tan(sCyssConeOpeningAngle * TMath::DegToRad());
1014 x1 = cyssConeSh->GetZ(2);
1015 y1 = cyssConeSh->GetRmin(2);
1016 x2 = cyssConeSh->GetZ(1);
1017 y2 = cyssConeSh->GetRmin(1);
1022 cyssConeFoamSh->DefineSection(0, xin, yin, yin);
1024 x3 = cyssConeSh->GetZ(3);
1025 y3 = cyssConeSh->GetRmin(3);
1030 rmax =
y2 +
m * (zlen1 -
x2);
1031 cyssConeFoamSh->DefineSection(1, zlen1, rmin, rmax);
1033 x1 = cyssConeSh->GetZ(5);
1034 y1 = cyssConeSh->GetRmax(5);
1035 x2 = cyssConeSh->GetZ(3);
1036 y2 = cyssConeSh->GetRmax(3);
1037 x3 = cyssConeSh->GetZ(2);
1038 y3 = cyssConeSh->GetRmax(2);
1042 rmin = cyssConeFoamSh->GetRmin(1) +
m * (zlen1 - cyssConeFoamSh->GetZ(1));
1043 rmax = sCyssConeExtSectDmax / 2 - sCyssConeFabricThick;
1044 cyssConeFoamSh->DefineSection(2, zlen1, rmin, rmax);
1046 rmin = sCyssConeExtSectDmin / 2 + sCyssConeFabricThick;
1047 zlen1 = cyssConeSh->GetZ(4);
1048 cyssConeFoamSh->DefineSection(3, zlen1, rmin, rmax);
1050 zlen1 = sCyssConeTotalLength - sCyssConeFabricThick;
1051 cyssConeFoamSh->DefineSection(4, zlen1, rmin, rmax);
1054 TGeoMedium* medPrepreg = mgr->GetMedium(Form(
"%s_AS4C200$",
GetDetName()));
1055 TGeoMedium* medRohacell = mgr->GetMedium(Form(
"%s_RIST110$",
GetDetName()));
1057 TGeoVolume* cyssConeVol =
new TGeoVolume(
"IBCYSSCone", cyssConeSh, medPrepreg);
1058 cyssConeVol->SetLineColor(35);
1060 TGeoVolume* cyssConeFoamVol =
new TGeoVolume(
"IBCYSSConeFoam", cyssConeFoamSh, medRohacell);
1061 cyssConeFoamVol->SetLineColor(kGreen);
1063 cyssConeVol->AddNode(cyssConeFoamVol, 1,
nullptr);
1069TGeoVolume* V3Services::ibCyssFlangeSideA(
const TGeoManager* mgr)
1087 static const Double_t sCyssFlangeAStep1Dmin = 254.1 *
sMm;
1088 static const Double_t sCyssFlangeAStep1Dmax = 287.0 *
sMm;
1089 static const Double_t sCyssFlangeAStep2Dmax = 259.0 *
sMm;
1090 static const Double_t sCyssFlangeAStep3Dmin = 243.0 *
sMm;
1091 static const Double_t sCyssFlangeAStep3Dmax = 245.5 *
sMm;
1092 static const Double_t sCyssFlangeAStep4Dmax = 239.0 *
sMm;
1093 static const Double_t sCyssFlangeAInnerD = 236.0 *
sMm;
1094 static const Double_t sCyssFlangeAInRingD = 238.0 *
sMm;
1097 static const Double_t sCyssFlangeATotHei = 39.0 *
sMm;
1098 static const Double_t sCyssFlangeAStep1H = 5.5 *
sMm;
1099 static const Double_t sCyssFlangeAInRingH = 7.0 *
sMm;
1100 static const Double_t sCyssFlangeAInRingUp = 1.0 *
sMm;
1101 static const Double_t sCyssFlangeAStep2H = 9.0 *
sMm;
1102 static const Double_t sCyssFlangeAStep3H = 10.0 *
sMm;
1103 static const Double_t sCyssFlangeAStep4H = 8.5 *
sMm;
1106 static const Double_t sCyssFlangeAWingD = 307.0 *
sMm;
1107 static const Double_t sCyssFlangeAWingW = 16.0 *
sMm;
1110 static const Double_t sCyssFlangeANotchW = 3.0 *
sMm;
1112 static const Double_t sCyssFlangeAHolesDpos = 274.0 *
sMm;
1114 static const Double_t sCyssFlangeAHole1Num = 8;
1115 static const Double_t sCyssFlangeAHole1D = 5.5 *
sMm;
1116 static const Double_t sCyssFlangeAHole1Phi0 = 10;
1117 static const Double_t sCyssFlangeAHole1PhiStep = 20;
1119 static const Double_t sCyssFlangeAHole2D = 4.0 *
sMm;
1120 static const Double_t sCyssFlangeAHole2Phi = 20;
1122 static const Double_t sCyssFlangeAHole3D = 7.0 *
sMm;
1123 static const Double_t sCyssFlangeAHole3Phi = 6;
1125 static const Double_t sCyssFlangeAWingHoleD = 8.1 *
sMm;
1126 static const Double_t sCyssFlangeAWingHoleYpos = 9.0 *
sMm;
1127 static const Double_t sCyssFlangeAWingHoleRpos = 146.0 *
sMm;
1130 Double_t rmin, rmax, zlen,
phi, dphi;
1131 Double_t xpos, ypos;
1138 TGeoPcon* cyssFlangeABody =
new TGeoPcon(
"cyssflangeabody", 180, 180, 12);
1140 rmin = sCyssFlangeAStep1Dmin / 2;
1141 rmax = sCyssFlangeAStep1Dmax / 2;
1142 cyssFlangeABody->DefineSection(0, 0, rmin, rmax);
1143 cyssFlangeABody->DefineSection(1, sCyssFlangeAStep1H, rmin, rmax);
1144 rmax = sCyssFlangeAStep2Dmax / 2;
1145 cyssFlangeABody->DefineSection(2, sCyssFlangeAStep1H, rmin, rmax);
1146 cyssFlangeABody->DefineSection(3, sCyssFlangeAInRingH, rmin, rmax);
1147 rmin = sCyssFlangeAStep3Dmin / 2;
1148 cyssFlangeABody->DefineSection(4, sCyssFlangeAInRingH, rmin, rmax);
1149 cyssFlangeABody->DefineSection(5, sCyssFlangeAStep2H, rmin, rmax);
1150 rmax = sCyssFlangeAStep3Dmax / 2;
1151 cyssFlangeABody->DefineSection(6, sCyssFlangeAStep2H, rmin, rmax);
1152 zlen = sCyssFlangeATotHei - sCyssFlangeAStep3H;
1153 cyssFlangeABody->DefineSection(7, zlen, rmin, rmax);
1154 rmin = sCyssFlangeAInnerD / 2;
1155 cyssFlangeABody->DefineSection(8, zlen, rmin, rmax);
1156 zlen = sCyssFlangeATotHei - sCyssFlangeAStep4H;
1157 cyssFlangeABody->DefineSection(9, zlen, rmin, rmax);
1158 rmax = sCyssFlangeAStep4Dmax / 2;
1159 cyssFlangeABody->DefineSection(10, zlen, rmin, rmax);
1160 cyssFlangeABody->DefineSection(11, sCyssFlangeATotHei, rmin, rmax);
1164 rmin = sCyssFlangeAStep3Dmin / 2;
1165 phi = 0.5 * (sCyssFlangeANotchW / rmin) * TMath::RadToDeg();
1167 TGeoPcon* cyssFlangeAInRing =
new TGeoPcon(
"cflangearing", 180, 90 - phi, 4);
1169 rmin = sCyssFlangeAInnerD / 2;
1170 rmax = sCyssFlangeAInRingD / 2;
1171 cyssFlangeAInRing->DefineSection(0, sCyssFlangeAInRingUp, rmin, rmax);
1172 cyssFlangeAInRing->DefineSection(1, sCyssFlangeAInRingH, rmin, rmax);
1173 rmax = sCyssFlangeAStep3Dmin / 2;
1174 cyssFlangeAInRing->DefineSection(2, sCyssFlangeAInRingH, rmin, rmax);
1175 cyssFlangeAInRing->DefineSection(3, sCyssFlangeAStep2H, rmin, rmax);
1177 TGeoRotation* flangeARingRot =
new TGeoRotation(
"cringrot", 90 + phi, 0, 0);
1178 flangeARingRot->RegisterYourself();
1180 TString cyssFlangeAComposite = Form(
"cyssflangeabody+cflangearing+cflangearing:cringrot");
1183 rmin = sCyssFlangeAStep1Dmax / 2;
1184 rmax = sCyssFlangeAWingD / 2;
1185 zlen = sCyssFlangeAStep1H / 2;
1186 phi = 0.5 * (sCyssFlangeAWingW / rmin) * TMath::RadToDeg();
1188 TGeoTubeSeg* cyssFlangeAWing =
new TGeoTubeSeg(
"cflangeawing", rmin, rmax, zlen, 270 - phi, 270 + phi);
1190 TGeoTranslation* cwingTR1 =
new TGeoTranslation(
"cwingtr1", 0, 0, zlen);
1191 cwingTR1->RegisterYourself();
1193 TGeoCombiTrans* cwingCT2 =
new TGeoCombiTrans(
"cwingct2", 0, 0, zlen,
new TGeoRotation(
"", 90 - phi, 0, 0));
1194 cwingCT2->RegisterYourself();
1196 TGeoCombiTrans* cwingCT3 =
new TGeoCombiTrans(
"cwingct3", 0, 0, zlen,
new TGeoRotation(
"", -90 + phi, 0, 0));
1197 cwingCT3->RegisterYourself();
1199 cyssFlangeAComposite +=
"+cflangeawing:cwingtr1+cflangeawing:cwingct2+cflangeawing:cwingct3";
1202 zlen = cyssFlangeAWing->GetDz();
1205 rmax = sCyssFlangeAHole1D / 2;
1206 TGeoTube* hole1 =
new TGeoTube(
"hole1", 0, rmax, 2 * zlen);
1208 for (Int_t
i = 0;
i < sCyssFlangeAHole1Num / 2;
i++) {
1209 Double_t
phi = sCyssFlangeAHole1Phi0 +
i * sCyssFlangeAHole1PhiStep;
1210 xpos = 0.5 * sCyssFlangeAHolesDpos * TMath::Sin(phi * TMath::DegToRad());
1211 ypos = 0.5 * sCyssFlangeAHolesDpos * TMath::Cos(phi * TMath::DegToRad());
1212 TGeoTranslation* hole1Tr1 =
new TGeoTranslation(Form(
"hole1Tr1%d",
i), xpos, -ypos, zlen);
1213 hole1Tr1->RegisterYourself();
1214 TGeoTranslation* hole1Tr2 =
new TGeoTranslation(Form(
"hole1Tr2%d",
i), -xpos, -ypos, zlen);
1215 hole1Tr2->RegisterYourself();
1216 cyssFlangeAComposite += Form(
"-hole1:hole1Tr1%d-hole1:hole1Tr2%d",
i,
i);
1220 rmax = sCyssFlangeAHole2D / 2;
1221 TGeoTube* hole2 =
new TGeoTube(
"hole2", 0, rmax, 2 * zlen);
1223 xpos = 0.5 * sCyssFlangeAHolesDpos * TMath::Sin(sCyssFlangeAHole2Phi * TMath::DegToRad());
1224 ypos = 0.5 * sCyssFlangeAHolesDpos * TMath::Cos(sCyssFlangeAHole2Phi * TMath::DegToRad());
1225 TGeoTranslation* hole2Tr1 =
new TGeoTranslation(
"hole2Tr1", xpos, -ypos, zlen);
1226 hole2Tr1->RegisterYourself();
1227 TGeoTranslation* hole2Tr2 =
new TGeoTranslation(
"hole2Tr2", -xpos, -ypos, zlen);
1228 hole2Tr2->RegisterYourself();
1230 cyssFlangeAComposite +=
"-hole2:hole2Tr1-hole2:hole2Tr2";
1233 rmax = sCyssFlangeAHole3D / 2;
1234 TGeoTube* hole3 =
new TGeoTube(
"hole3", 0, rmax, 2 * zlen);
1236 xpos = 0.5 * sCyssFlangeAHolesDpos * TMath::Sin(sCyssFlangeAHole3Phi * TMath::DegToRad());
1237 ypos = 0.5 * sCyssFlangeAHolesDpos * TMath::Cos(sCyssFlangeAHole3Phi * TMath::DegToRad());
1238 TGeoTranslation* hole3Tr1 =
new TGeoTranslation(
"hole3Tr1", xpos, -ypos, zlen);
1239 hole3Tr1->RegisterYourself();
1240 TGeoTranslation* hole3Tr2 =
new TGeoTranslation(
"hole3Tr2", -xpos, -ypos, zlen);
1241 hole3Tr2->RegisterYourself();
1243 cyssFlangeAComposite +=
"-hole3:hole3Tr1-hole3:hole3Tr2";
1246 rmax = sCyssFlangeAWingHoleD / 2;
1247 TGeoTube* wingHole =
new TGeoTube(
"wingHole", 0, rmax, 2 * zlen);
1249 TGeoTranslation* wingHoleTr1 =
new TGeoTranslation(
"wingHoleTr1", 0, -sCyssFlangeAWingHoleRpos, zlen);
1250 wingHoleTr1->RegisterYourself();
1252 TGeoTranslation* wingHoleTr2 =
new TGeoTranslation(
"wingHoleTr2", sCyssFlangeAWingHoleRpos, -sCyssFlangeAWingHoleYpos, zlen);
1253 wingHoleTr2->RegisterYourself();
1255 TGeoTranslation* wingHoleTr3 =
new TGeoTranslation(
"wingHoleTr3", -sCyssFlangeAWingHoleRpos, -sCyssFlangeAWingHoleYpos, zlen);
1256 wingHoleTr3->RegisterYourself();
1258 cyssFlangeAComposite +=
"-wingHole:wingHoleTr1-wingHole:wingHoleTr2-wingHole:wingHoleTr3";
1261 TString cyssFlangeAHollows = ibCreateHollowsCyssFlangeSideA(zlen);
1263 cyssFlangeAComposite += cyssFlangeAHollows.Data();
1266 TGeoCompositeShape* cyssFlangeASh =
new TGeoCompositeShape(cyssFlangeAComposite.Data());
1269 TGeoMedium* medAlu = mgr->GetMedium(Form(
"%s_ALUMINUM$",
GetDetName()));
1271 TGeoVolume* cyssFlangeAVol =
new TGeoVolume(
"IBCYSSFlangeA", cyssFlangeASh, medAlu);
1272 cyssFlangeAVol->SetLineColor(kCyan);
1273 cyssFlangeAVol->SetFillColor(kCyan);
1276 return cyssFlangeAVol;
1279TString V3Services::ibCreateHollowsCyssFlangeSideA(
const Double_t zlen)
1297 static const Double_t sCyssFlangeAHolesDpos = 274.0 *
sMm;
1299 static const Double_t sCyssFlangeAHole1Phi0 = 10;
1300 static const Double_t sCyssFlangeAHole1PhiStep = 20;
1302 static const Double_t sCyssFlangeAHole2Phi = 20;
1304 static const Double_t sCyssFlangeAHollowD = 7.0 *
sMm;
1305 static const Double_t sCyssFlangeAHollowPhi0 = 13;
1306 static const Double_t sCyssFlangeAHollowPhi1 = 8;
1309 Double_t rmin, rmax,
phi, dphi;
1310 Double_t xpos, ypos;
1312 TString cyssFlangeAHollows;
1315 rmax = sCyssFlangeAHollowD / 2;
1316 TGeoTubeSeg* roundHalf =
new TGeoTubeSeg(
"roundhalf", 0, rmax, 2 * zlen, 0, 180);
1318 Double_t rHoles = sCyssFlangeAHolesDpos / 2;
1320 xpos = rHoles * TMath::Cos(sCyssFlangeAHollowPhi0 * TMath::DegToRad());
1321 ypos = rHoles * TMath::Sin(sCyssFlangeAHollowPhi0 * TMath::DegToRad());
1322 TGeoCombiTrans* roundTr1 =
new TGeoCombiTrans(
"roundtr1", xpos, -ypos, zlen,
new TGeoRotation(
"", -sCyssFlangeAHollowPhi0, 0, 0));
1323 roundTr1->RegisterYourself();
1324 TGeoCombiTrans* roundTr2 =
new TGeoCombiTrans(
"roundtr2", -xpos, -ypos, zlen,
new TGeoRotation(
"", sCyssFlangeAHollowPhi0, 0, 0));
1325 roundTr2->RegisterYourself();
1327 cyssFlangeAHollows +=
"-roundhalf:roundtr1-roundhalf:roundtr2";
1329 TGeoTranslation* noRot =
new TGeoTranslation(
"norot", 0, 0, zlen);
1330 noRot->RegisterYourself();
1331 TGeoCombiTrans* yRot180 =
new TGeoCombiTrans(
"yrot180", 0, 0, zlen,
new TGeoRotation(
"", 0, 180, 180));
1332 yRot180->RegisterYourself();
1334 rmin = sCyssFlangeAHolesDpos / 2 - sCyssFlangeAHollowD / 2;
1335 rmax = sCyssFlangeAHolesDpos / 2 + sCyssFlangeAHollowD / 2;
1337 for (Int_t
j = 1;
j < 4;
j++) {
1338 phi = 90 - (sCyssFlangeAHole1Phi0 +
j * sCyssFlangeAHole1PhiStep + 0.5 * sCyssFlangeAHollowPhi1);
1339 xpos = rHoles * TMath::Cos(phi * TMath::DegToRad());
1340 ypos = rHoles * TMath::Sin(phi * TMath::DegToRad());
1341 TGeoCombiTrans* roundTr3 =
new TGeoCombiTrans(Form(
"roundtr%d",
j + 2), xpos, -ypos, zlen,
new TGeoRotation(
"", 180 - phi, 0, 0));
1342 roundTr3->RegisterYourself();
1343 TGeoCombiTrans* roundTr4 =
new TGeoCombiTrans(Form(
"roundtr%d",
j + 5), -xpos, -ypos, zlen,
new TGeoRotation(
"", phi - 180, 0, 0));
1344 roundTr4->RegisterYourself();
1346 cyssFlangeAHollows += Form(
"-roundhalf:roundtr%d-roundhalf:roundtr%d",
j + 2,
j + 5);
1350 dphi = 360 - sCyssFlangeAHollowPhi0 + 0.05;
1352 dphi =
phi + (sCyssFlangeAHole1PhiStep - sCyssFlangeAHollowPhi1) + 0.1;
1355 TGeoTubeSeg* hollow1 =
new TGeoTubeSeg(Form(
"hollow%d",
j), rmin, rmax, 2 * zlen, phi, dphi);
1357 cyssFlangeAHollows += Form(
"-hollow%d:norot-hollow%d:yrot180",
j,
j);
1359 phi = 90 - (sCyssFlangeAHole1Phi0 +
j * sCyssFlangeAHole1PhiStep - 0.5 * sCyssFlangeAHollowPhi1);
1360 xpos = rHoles * TMath::Cos(phi * TMath::DegToRad());
1361 ypos = rHoles * TMath::Sin(phi * TMath::DegToRad());
1362 TGeoCombiTrans* roundTr5 =
new TGeoCombiTrans(Form(
"roundtr%d",
j + 8), xpos, -ypos, zlen,
new TGeoRotation(
"", -phi, 0, 0));
1363 roundTr5->RegisterYourself();
1364 TGeoCombiTrans* roundTr6 =
new TGeoCombiTrans(Form(
"roundtr%d",
j + 11), -xpos, -ypos, zlen,
new TGeoRotation(
"", phi, 0, 0));
1365 roundTr6->RegisterYourself();
1367 cyssFlangeAHollows += Form(
"-roundhalf:roundtr%d-roundhalf:roundtr%d",
j + 8,
j + 11);
1371 phi = 90 - (sCyssFlangeAHole2Phi + 0.5 * sCyssFlangeAHollowPhi1);
1372 xpos = rHoles * TMath::Cos(phi * TMath::DegToRad());
1373 ypos = rHoles * TMath::Sin(phi * TMath::DegToRad());
1374 TGeoCombiTrans* roundTr15 =
new TGeoCombiTrans(
"roundtr15", xpos, -ypos, zlen,
new TGeoRotation(
"", 180 - phi, 0, 0));
1375 roundTr15->RegisterYourself();
1376 TGeoCombiTrans* roundTr16 =
new TGeoCombiTrans(
"roundtr16", -xpos, -ypos, zlen,
new TGeoRotation(
"", phi - 180, 0, 0));
1377 roundTr16->RegisterYourself();
1379 cyssFlangeAHollows +=
"-roundhalf:roundtr15-roundhalf:roundtr16";
1382 dphi =
phi + (sCyssFlangeAHole1Phi0 + sCyssFlangeAHole1PhiStep - sCyssFlangeAHole2Phi - sCyssFlangeAHollowPhi1) + 0.5;
1383 TGeoTubeSeg* hollow4 =
new TGeoTubeSeg(
"hollow4", rmin, rmax, 2 * zlen, phi, dphi);
1385 cyssFlangeAHollows +=
"-hollow4:norot-hollow4:yrot180";
1388 phi = 90 - (sCyssFlangeAHole2Phi - 0.5 * sCyssFlangeAHollowPhi1);
1389 xpos = rHoles * TMath::Cos(phi * TMath::DegToRad());
1390 ypos = rHoles * TMath::Sin(phi * TMath::DegToRad());
1391 TGeoCombiTrans* roundTr17 =
new TGeoCombiTrans(
"roundtr17", xpos, -ypos, zlen,
new TGeoRotation(
"", -phi, 0, 0));
1392 roundTr17->RegisterYourself();
1393 TGeoCombiTrans* roundTr18 =
new TGeoCombiTrans(
"roundtr18", -xpos, -ypos, zlen,
new TGeoRotation(
"", phi, 0, 0));
1394 roundTr18->RegisterYourself();
1396 cyssFlangeAHollows +=
"-roundhalf:roundtr17-roundhalf:roundtr18";
1398 phi = 90 - (sCyssFlangeAHole1Phi0 + 0.5 * sCyssFlangeAHollowPhi1);
1399 xpos = rHoles * TMath::Cos(phi * TMath::DegToRad());
1400 ypos = rHoles * TMath::Sin(phi * TMath::DegToRad());
1401 TGeoCombiTrans* roundTr19 =
new TGeoCombiTrans(
"roundtr19", xpos, -ypos, zlen,
new TGeoRotation(
"", 180 - phi, 0, 0));
1402 roundTr19->RegisterYourself();
1403 TGeoCombiTrans* roundTr20 =
new TGeoCombiTrans(
"roundtr20", -xpos, -ypos, zlen,
new TGeoRotation(
"", phi - 180, 0, 0));
1404 roundTr20->RegisterYourself();
1406 cyssFlangeAHollows +=
"-roundhalf:roundtr19-roundhalf:roundtr20";
1408 TGeoCombiTrans* zRotPhi =
new TGeoCombiTrans(
"zrotphi", 0, 0, zlen,
new TGeoRotation(
"", -sCyssFlangeAHole1Phi0, 0, 0));
1409 zRotPhi->RegisterYourself();
1410 TGeoCombiTrans* yzRot180Phi =
new TGeoCombiTrans(
"yzrot180phi", 0, 0, zlen,
new TGeoRotation(
"", 0, 180, 180 - sCyssFlangeAHole1Phi0));
1411 yzRot180Phi->RegisterYourself();
1413 cyssFlangeAHollows +=
"-hollow4:zrotphi-hollow4:yzrot180phi";
1416 return cyssFlangeAHollows;
1419TGeoVolume* V3Services::ibCyssFlangeSideC(
const TGeoManager* mgr)
1437 static const Double_t sCyssFlangeCDmin1 = 44.0 *
sMm;
1438 static const Double_t sCyssFlangeCDmin2 = 57.0 *
sMm;
1439 static const Double_t sCyssFlangeCDmin3 = 73.0 *
sMm;
1441 static const Double_t sCyssFlangeCDmax1 = 58.8 *
sMm;
1442 static const Double_t sCyssFlangeCDmax2 = 74.8 *
sMm;
1443 static const Double_t sCyssFlangeCDmax3 = 94.0 *
sMm;
1445 static const Double_t sCyssFlangeCDWallIn = 89.0 *
sMm;
1446 static const Double_t sCyssFlangeCDWallOut = 95.6 *
sMm;
1448 static const Double_t sCyssFlangeCDExt = 100.0 *
sMm;
1451 static const Double_t sCyssFlangeCTotH = 10.0 *
sMm;
1452 static const Double_t sCyssFlangeCExtThick = 1.0 *
sMm;
1454 static const Double_t sCyssFlangeCHmax1 = 1.5 *
sMm;
1455 static const Double_t sCyssFlangeCHmax2 = 4.0 *
sMm;
1456 static const Double_t sCyssFlangeCHmax3 = 6.5 *
sMm;
1458 static const Double_t sCyssFlangeCHmin2 = 2.5 *
sMm;
1459 static const Double_t sCyssFlangeCHmin3 = 5.0 *
sMm;
1462 static const Double_t sHoles22Dia = 2.2 *
sMm;
1463 static const Double_t sHoles22Phi = 60;
1465 static const Double_t sHoles30Dia = 3.0 *
sMm;
1466 static const Double_t sHoles30Phi = 15;
1468 static const Double_t sHoles12Dia = 1.2 *
sMm;
1469 static const Double_t sHoles12Phi = 75;
1471 static const Double_t sHolesDdist[3] = {50.0 *
sMm, 64.0 *
sMm, 80.0 *
sMm};
1473 static const Double_t sCyssFlangeCNotchH = 3.2 *
sMm;
1474 static const Double_t sCyssFlangeCNotchW = 3.0 *
sMm;
1477 Double_t rmin, rmax, zlen;
1478 Double_t xpos, ypos;
1484 TGeoPcon* cyssFlangeCDisks =
new TGeoPcon(
"cyssflangecdisks", 180, 180, 12);
1486 rmin = sCyssFlangeCDmin1 / 2;
1487 rmax = sCyssFlangeCDmax1 / 2;
1488 cyssFlangeCDisks->DefineSection(0, 0, rmin, rmax);
1489 cyssFlangeCDisks->DefineSection(1, sCyssFlangeCHmax1, rmin, rmax);
1490 rmin = sCyssFlangeCDmin2 / 2;
1491 cyssFlangeCDisks->DefineSection(2, sCyssFlangeCHmax1, rmin, rmax);
1492 cyssFlangeCDisks->DefineSection(3, sCyssFlangeCHmin2, rmin, rmax);
1493 rmax = sCyssFlangeCDmax2 / 2;
1494 cyssFlangeCDisks->DefineSection(4, sCyssFlangeCHmin2, rmin, rmax);
1495 cyssFlangeCDisks->DefineSection(5, sCyssFlangeCHmax2, rmin, rmax);
1496 rmin = sCyssFlangeCDmin3 / 2;
1497 cyssFlangeCDisks->DefineSection(6, sCyssFlangeCHmax2, rmin, rmax);
1498 cyssFlangeCDisks->DefineSection(7, sCyssFlangeCHmin3, rmin, rmax);
1499 rmax = sCyssFlangeCDWallOut / 2;
1500 cyssFlangeCDisks->DefineSection(8, sCyssFlangeCHmin3, rmin, rmax);
1501 cyssFlangeCDisks->DefineSection(9, sCyssFlangeCHmax3, rmin, rmax);
1502 rmin = sCyssFlangeCDWallIn / 2;
1503 cyssFlangeCDisks->DefineSection(10, sCyssFlangeCHmax3, rmin, rmax);
1504 cyssFlangeCDisks->DefineSection(11, sCyssFlangeCTotH, rmin, rmax);
1506 TGeoPcon* cyssFlangeCExt =
new TGeoPcon(
"cflangecext", 180, 180, 4);
1508 rmin = sCyssFlangeCDmax3 / 2;
1509 rmax = sCyssFlangeCDExt / 2;
1510 cyssFlangeCExt->DefineSection(0, 0, rmin, rmax);
1511 cyssFlangeCExt->DefineSection(1, sCyssFlangeCExtThick, rmin, rmax);
1512 rmax = sCyssFlangeCDWallOut / 2;
1513 cyssFlangeCExt->DefineSection(2, sCyssFlangeCExtThick, rmin, rmax);
1514 cyssFlangeCExt->DefineSection(3, sCyssFlangeCHmin3, rmin, rmax);
1516 TString cyssFlangeCComposite = Form(
"cyssflangecdisks+cflangecext");
1519 rmax = sHoles22Dia / 2;
1520 zlen = sCyssFlangeCTotH / 2;
1521 TGeoTube* hole22 =
new TGeoTube(
"hole22", 0, rmax, 1.1 * zlen);
1523 for (Int_t
j = 0;
j < 3;
j++) {
1524 ypos = sHolesDdist[
j] / 2;
1525 TGeoTranslation* holeCTr =
new TGeoTranslation(Form(
"holeCTr%d",
j), 0, -ypos, zlen);
1526 holeCTr->RegisterYourself();
1527 cyssFlangeCComposite += Form(
"-hole22:holeCTr%d",
j);
1529 xpos = TMath::Sin(sHoles22Phi * TMath::DegToRad()) * sHolesDdist[
j] / 2;
1530 ypos = TMath::Cos(sHoles22Phi * TMath::DegToRad()) * sHolesDdist[
j] / 2;
1531 TGeoTranslation* holeLTr =
new TGeoTranslation(Form(
"holeLTr%d",
j), xpos, -ypos, zlen);
1532 holeLTr->RegisterYourself();
1533 cyssFlangeCComposite += Form(
"-hole22:holeLTr%d",
j);
1535 TGeoTranslation* holeRTr =
new TGeoTranslation(Form(
"holeRTr%d",
j), -xpos, -ypos, zlen);
1536 holeRTr->RegisterYourself();
1537 cyssFlangeCComposite += Form(
"-hole22:holeRTr%d",
j);
1540 rmax = sHoles30Dia / 2;
1541 TGeoTube* hole30 =
new TGeoTube(
"hole30", 0, rmax, zlen);
1543 for (Int_t k = 0; k < 3; k++) {
1544 Double_t
phi = (k + 1) * sHoles30Phi;
1545 for (Int_t
j = 0;
j < 3;
j++) {
1546 xpos = TMath::Sin(phi * TMath::DegToRad()) * sHolesDdist[
j] / 2;
1547 ypos = TMath::Cos(phi * TMath::DegToRad()) * sHolesDdist[
j] / 2;
1549 TGeoTranslation* holeLTr =
new TGeoTranslation(Form(
"holeLTr%d%d", k,
j), xpos, -ypos, zlen);
1550 holeLTr->RegisterYourself();
1551 cyssFlangeCComposite += Form(
"-hole30:holeLTr%d%d", k,
j);
1553 TGeoTranslation* holeRTr =
new TGeoTranslation(Form(
"holeRTr%d%d", k,
j), -xpos, -ypos, zlen);
1554 holeRTr->RegisterYourself();
1555 cyssFlangeCComposite += Form(
"-hole30:holeRTr%d%d", k,
j);
1559 rmax = sHoles12Dia / 2;
1560 TGeoTube* hole12 =
new TGeoTube(
"hole12", 0, rmax, 1.1 * zlen);
1562 for (Int_t
j = 0;
j < 3;
j++) {
1563 xpos = TMath::Sin(sHoles12Phi * TMath::DegToRad()) * sHolesDdist[
j] / 2;
1564 ypos = TMath::Cos(sHoles12Phi * TMath::DegToRad()) * sHolesDdist[
j] / 2;
1565 TGeoTranslation* holeLTr =
new TGeoTranslation(Form(
"holeLTrM%d",
j), xpos, -ypos, zlen);
1566 holeLTr->RegisterYourself();
1567 cyssFlangeCComposite += Form(
"-hole12:holeLTrM%d",
j);
1569 TGeoTranslation* holeRTr =
new TGeoTranslation(Form(
"holeRTrM%d",
j), -xpos, -ypos, zlen);
1570 holeRTr->RegisterYourself();
1571 cyssFlangeCComposite += Form(
"-hole12:holeRTrM%d",
j);
1574 TGeoBBox* notch =
new TGeoBBox(
"notch", sCyssFlangeCNotchW / 2, (sCyssFlangeCDWallOut - sCyssFlangeCDWallIn), sCyssFlangeCNotchH);
1576 ypos = (sCyssFlangeCDWallIn + sCyssFlangeCDWallOut) / 4;
1577 TGeoTranslation* notchTr =
new TGeoTranslation(
"notchTr", 0, -ypos, sCyssFlangeCTotH);
1578 notchTr->RegisterYourself();
1580 cyssFlangeCComposite +=
"-notch:notchTr";
1583 TGeoCompositeShape* cyssFlangeCSh =
new TGeoCompositeShape(cyssFlangeCComposite.Data());
1586 TGeoMedium* medAlu = mgr->GetMedium(Form(
"%s_ALUMINUM$",
GetDetName()));
1588 TGeoVolume* cyssFlangeCVol =
new TGeoVolume(
"IBCYSSFlangeC", cyssFlangeCSh, medAlu);
1589 cyssFlangeCVol->SetLineColor(kCyan);
1590 cyssFlangeCVol->SetFillColor(kCyan);
1593 return cyssFlangeCVol;
1596void V3Services::obEndWheelSideA(
const Int_t iLay, TGeoVolume* mother,
const TGeoManager* mgr)
1618 static const Double_t sOBWheelTotZlen = 55.0 *
sMm;
1619 static const Double_t sOBWheelSuppZlen = 35.0 *
sMm;
1621 static const Double_t sOBWheelSuppRmin[4] = {204.0 *
sMm, 254.0 *
sMm, 352.5 *
sMm, 402.0 *
sMm};
1622 static const Double_t sOBWheelSuppRmax[4] = {241.0 *
sMm, 291.0 *
sMm, 389.0 *
sMm, 448.5 *
sMm};
1625 static const Double_t sOBWheelShelfWide[4] = {56.05 *
sMm, 55.15 *
sMm, 54.10 *
sMm, 53.81 *
sMm};
1626 static const Double_t sOBWheelShelfHoleZpos = 48.0 *
sMm;
1628 static const Double_t sOBWheelShelfRpos[4] = {213.0 *
sMm, 262.5 *
sMm, 361.0 *
sMm, 410.5 *
sMm};
1629 static const Double_t sOBWheelShelfPhi0[4] = {0.0, 0.0, 0.0, 0.0};
1632 Double_t xlen, ylen, zlen;
1633 Double_t rmin, rmax, phimin, dphi;
1634 Double_t xpos, ypos, zpos;
1643 TGeoTube* innerRingSh =
new TGeoTube(sOBWheelSuppRmin[iLay], sOBWheelSuppRmax[iLay], sOBWheelThickness / 2);
1646 TGeoTube* outerRingSh =
new TGeoTube(sOBWheelSuppRmin[iLay], sOBWheelSuppRmax[iLay], sOBWheelThickness / 2);
1649 rmax = sOBWheelSuppRmin[iLay] + sOBWheelThickness;
1650 zlen = sOBWheelSuppZlen - 2 * sOBWheelThickness;
1651 TGeoTube* lowerRingSh =
new TGeoTube(sOBWheelSuppRmin[iLay], rmax, zlen / 2);
1654 rmin = sOBWheelSuppRmax[iLay] - sOBWheelThickness;
1655 TGeoTube* upperRingSh =
new TGeoTube(rmin, sOBWheelSuppRmax[iLay], zlen / 2);
1658 xlen = sOBWheelShelfWide[iLay];
1659 ylen = 2 * sOBWheelThickness;
1660 zlen = sOBWheelTotZlen - sOBWheelSuppZlen;
1661 TGeoBBox* shelfSh =
new TGeoBBox(xlen / 2, ylen / 2, zlen / 2);
1664 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
1666 Int_t nLay = iLay + sNumberInnerLayers;
1668 TGeoVolume* ringInnerVol =
new TGeoVolume(Form(
"OBEndWheelAInnerRing%d", nLay), innerRingSh, medCarbon);
1669 ringInnerVol->SetFillColor(kBlue);
1670 ringInnerVol->SetLineColor(kBlue);
1672 TGeoVolume* ringOuterVol =
new TGeoVolume(Form(
"OBEndWheelAOuterRing%d", nLay), outerRingSh, medCarbon);
1673 ringOuterVol->SetFillColor(kBlue);
1674 ringOuterVol->SetLineColor(kBlue);
1676 TGeoVolume* ringLowerVol =
new TGeoVolume(Form(
"OBEndWheelALowerRing%d", nLay), lowerRingSh, medCarbon);
1677 ringLowerVol->SetFillColor(kBlue);
1678 ringLowerVol->SetLineColor(kBlue);
1680 TGeoVolume* ringUpperVol =
new TGeoVolume(Form(
"OBEndWheelAUpperRing%d", nLay), upperRingSh, medCarbon);
1681 ringUpperVol->SetFillColor(kBlue);
1682 ringUpperVol->SetLineColor(kBlue);
1684 TGeoVolume* shelfVol =
new TGeoVolume(Form(
"OBEndWheelAShelf%d", nLay), shelfSh, medCarbon);
1685 shelfVol->SetFillColor(kBlue);
1686 shelfVol->SetLineColor(kBlue);
1691 if (iLay < sNumberMiddlLayers) {
1692 zpos = sMBWheelsZpos + sOBWheelShelfHoleZpos;
1694 zpos = sOBWheelsZpos + sOBWheelShelfHoleZpos;
1697 zpos -= outerRingSh->GetDz();
1698 mother->AddNode(ringOuterVol, 1,
new TGeoTranslation(0, 0, zpos));
1700 zpos -= (outerRingSh->GetDz() + lowerRingSh->GetDz());
1701 mother->AddNode(ringLowerVol, 1,
new TGeoTranslation(0, 0, zpos));
1702 mother->AddNode(ringUpperVol, 1,
new TGeoTranslation(0, 0, zpos));
1704 zpos -= (lowerRingSh->GetDz() + innerRingSh->GetDz());
1705 mother->AddNode(ringInnerVol, 1,
new TGeoTranslation(0, 0, zpos));
1709 Double_t
alpha = 360. / numberOfStaves;
1711 rmin = sOBWheelShelfRpos[iLay] + shelfSh->GetDY();
1712 zpos -= (innerRingSh->GetDz() + shelfSh->GetDZ());
1714 for (Int_t
j = 0;
j < numberOfStaves;
j++) {
1715 Double_t
phi =
j *
alpha + sOBWheelShelfPhi0[iLay];
1716 xpos = rmin *
cosD(phi);
1717 ypos = rmin *
sinD(phi);
1719 mother->AddNode(shelfVol,
j,
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", phi, 0, 0)));
1723void V3Services::mbEndWheelSideC(
const Int_t iLay, TGeoVolume* mother,
const TGeoManager* mgr)
1745 static const Double_t sOBWheelTotZlen[2] = {63.0 *
sMm, 55.0 *
sMm};
1746 static const Double_t sOBWheelSuppZlen[2] = {43.0 *
sMm, 35.0 *
sMm};
1748 static const Double_t sOBWheelSuppRmin[2] = {200.5 *
sMm, 254.0 *
sMm};
1749 static const Double_t sOBWheelSuppRmax[2] = {237.5 *
sMm, 291.0 *
sMm};
1750 static const Double_t sOBWheelFlangeR[2] = {255.0 *
sMm, 239.5 *
sMm};
1751 static const Double_t sOBWheelFlangeZlen = 8.0 *
sMm;
1754 static const Double_t sOBWheelShelfWide[2] = {56.05 *
sMm, 55.15 *
sMm};
1755 static const Double_t sOBWheelShelfHoleZpos[2] = {56.0 *
sMm, 48.0 *
sMm};
1757 static const Double_t sOBWheelShelfRpos[2] = {213.0 *
sMm, 262.5 *
sMm};
1758 static const Double_t sOBWheelShelfPhi0[2] = {0.0, 0.0};
1761 Double_t xlen, ylen, zlen;
1762 Double_t rmin, rmax, phimin, dphi;
1763 Double_t xpos, ypos, zpos;
1775 TGeoTube* innerRingSh =
new TGeoTube(sOBWheelSuppRmin[iLay], sOBWheelSuppRmax[iLay], sOBWheelThickness / 2);
1784 TGeoPcon* outerRingSh =
new TGeoPcon(0, 360, nsect);
1787 rmin = sOBWheelSuppRmax[0] - 2 * sOBWheelThickness;
1788 outerRingSh->DefineSection(0, 0., rmin, sOBWheelFlangeR[0]);
1789 outerRingSh->DefineSection(1, 2 * sOBWheelThickness, rmin, sOBWheelFlangeR[0]);
1790 outerRingSh->DefineSection(2, 2 * sOBWheelThickness, rmin, sOBWheelSuppRmax[0]);
1791 outerRingSh->DefineSection(3, sOBWheelFlangeZlen, rmin, sOBWheelSuppRmax[0]);
1792 outerRingSh->DefineSection(4, sOBWheelFlangeZlen, sOBWheelSuppRmin[0], sOBWheelSuppRmax[0]);
1793 zlen = sOBWheelFlangeZlen + sOBWheelThickness;
1794 outerRingSh->DefineSection(5, zlen, sOBWheelSuppRmin[0], sOBWheelSuppRmax[0]);
1796 outerRingSh->DefineSection(0, 0., sOBWheelFlangeR[1], sOBWheelSuppRmax[1]);
1797 outerRingSh->DefineSection(1, sOBWheelThickness, sOBWheelFlangeR[1], sOBWheelSuppRmax[1]);
1798 rmax = sOBWheelSuppRmin[1] + sOBWheelThickness;
1799 outerRingSh->DefineSection(2, sOBWheelThickness, sOBWheelFlangeR[1], rmax);
1800 outerRingSh->DefineSection(3, 2 * sOBWheelThickness, sOBWheelFlangeR[1], rmax);
1805 zlen = sOBWheelSuppZlen[iLay] - sOBWheelFlangeZlen - 2 * sOBWheelThickness;
1807 zlen = sOBWheelSuppZlen[iLay] - sOBWheelThickness - outerRingSh->GetZ(nsect - 1);
1810 rmax = sOBWheelSuppRmin[iLay] + sOBWheelThickness;
1811 TGeoTube* lowerRingSh =
new TGeoTube(sOBWheelSuppRmin[iLay], rmax, zlen / 2);
1815 zlen = sOBWheelSuppZlen[iLay] - 2 * sOBWheelThickness;
1818 rmin = sOBWheelSuppRmax[iLay] - sOBWheelThickness;
1819 TGeoTube* upperRingSh =
new TGeoTube(rmin, sOBWheelSuppRmax[iLay], zlen / 2);
1822 xlen = sOBWheelShelfWide[iLay];
1823 ylen = 2 * sOBWheelThickness;
1824 zlen = sOBWheelTotZlen[iLay] - sOBWheelSuppZlen[iLay];
1825 TGeoBBox* shelfSh =
new TGeoBBox(xlen / 2, ylen / 2, zlen / 2);
1828 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
1830 Int_t nLay = iLay + sNumberInnerLayers;
1832 TGeoVolume* ringInnerVol =
new TGeoVolume(Form(
"OBEndWheelCInnerRing%d", nLay), innerRingSh, medCarbon);
1833 ringInnerVol->SetFillColor(kBlue);
1834 ringInnerVol->SetLineColor(kBlue);
1836 TGeoVolume* ringOuterVol =
new TGeoVolume(Form(
"OBEndWheelCOuterRing%d", nLay), outerRingSh, medCarbon);
1837 ringOuterVol->SetFillColor(kBlue);
1838 ringOuterVol->SetLineColor(kBlue);
1840 TGeoVolume* ringLowerVol =
new TGeoVolume(Form(
"OBEndWheelCLowerRing%d", nLay), lowerRingSh, medCarbon);
1841 ringLowerVol->SetFillColor(kBlue);
1842 ringLowerVol->SetLineColor(kBlue);
1844 TGeoVolume* ringUpperVol =
new TGeoVolume(Form(
"OBEndWheelCUpperRing%d", nLay), upperRingSh, medCarbon);
1845 ringUpperVol->SetFillColor(kBlue);
1846 ringUpperVol->SetLineColor(kBlue);
1848 TGeoVolume* shelfVol =
new TGeoVolume(Form(
"OBEndWheelCShelf%d", nLay), shelfSh, medCarbon);
1849 shelfVol->SetFillColor(kBlue);
1850 shelfVol->SetLineColor(kBlue);
1855 zpos = sMBWheelsZpos + sOBWheelShelfHoleZpos[iLay] - sOBWheelSuppZlen[iLay];
1857 zpos += innerRingSh->GetDz();
1858 mother->AddNode(ringInnerVol, 1,
new TGeoTranslation(0, 0, -zpos));
1860 zpos += (innerRingSh->GetDz() + upperRingSh->GetDz());
1861 mother->AddNode(ringUpperVol, 1,
new TGeoTranslation(0, 0, -zpos));
1863 zpos += (-upperRingSh->GetDz() + lowerRingSh->GetDz());
1864 mother->AddNode(ringLowerVol, 1,
new TGeoTranslation(0, 0, -zpos));
1866 zpos += (lowerRingSh->GetDz() + outerRingSh->GetZ(nsect - 1));
1867 mother->AddNode(ringOuterVol, 1,
new TGeoTranslation(0, 0, -zpos));
1871 Double_t
alpha = 360. / numberOfStaves;
1873 rmin = sOBWheelShelfRpos[iLay] + shelfSh->GetDY();
1874 zpos = sMBWheelsZpos + sOBWheelShelfHoleZpos[iLay] - sOBWheelSuppZlen[iLay];
1875 zpos -= shelfSh->GetDZ();
1877 for (Int_t
j = 0;
j < numberOfStaves;
j++) {
1878 Double_t
phi =
j *
alpha + sOBWheelShelfPhi0[iLay];
1879 xpos = rmin *
cosD(phi);
1880 ypos = rmin *
sinD(phi);
1882 mother->AddNode(shelfVol,
j,
new TGeoCombiTrans(xpos, ypos, -zpos,
new TGeoRotation(
"", phi, 0, 0)));
1886void V3Services::obEndWheelSideC(
const Int_t iLay, TGeoVolume* mother,
const TGeoManager* mgr)
1908 static const Double_t sOBWheelTotZlen[2] = {37.0 *
sMm, 35.0 *
sMm};
1910 static const Double_t sOBWheelSuppRmin = 354.0 *
sMm;
1911 static const Double_t sOBWheelSuppRmax[2] = {389.5 *
sMm, 448.5 *
sMm};
1912 static const Double_t sOBWheelIntFlangeR[2] = {335.0 *
sMm, 393.0 *
sMm};
1913 static const Double_t sOBWheelExtFlangeR = 409.0 *
sMm;
1914 static const Double_t sOBWheelIntFlangeZ = 4.0 *
sMm;
1916 static const Double_t sOBWheelShelfRpos[2] = {361.0 *
sMm, 410.5 *
sMm};
1917 static const Double_t sOBWheelShelfHoleZpos[2] = {28.0 *
sMm, 26.0 *
sMm};
1920 Double_t xlen, ylen, zlen;
1921 Double_t rmin, rmax, phimin, dphi;
1922 Double_t xpos, ypos, zpos;
1932 TGeoShape* upperRingSh;
1934 rmin = sOBWheelSuppRmax[iLay] - sOBWheelThickness;
1937 TGeoPcon* ring =
new TGeoPcon(0, 360, nsect);
1938 ring->DefineSection(0, sOBWheelThickness, rmin, sOBWheelExtFlangeR);
1939 ring->DefineSection(1, 2 * sOBWheelThickness, rmin, sOBWheelExtFlangeR);
1940 ring->DefineSection(2, 2 * sOBWheelThickness, rmin, sOBWheelSuppRmax[iLay]);
1941 zlen = sOBWheelTotZlen[iLay] - sOBWheelThickness;
1942 ring->DefineSection(3, zlen, rmin, sOBWheelSuppRmax[iLay]);
1943 upperRingSh = (TGeoShape*)ring;
1945 zlen = sOBWheelTotZlen[iLay] - 2 * sOBWheelThickness;
1946 TGeoTube* ring =
new TGeoTube(rmin, sOBWheelSuppRmax[iLay], zlen / 2);
1947 upperRingSh = (TGeoShape*)ring;
1951 TGeoPcon* lowerRingSh;
1955 lowerRingSh =
new TGeoPcon(0, 360, nsect);
1956 lowerRingSh->DefineSection(0, 0., sOBWheelSuppRmin, sOBWheelExtFlangeR);
1957 lowerRingSh->DefineSection(1, sOBWheelThickness, sOBWheelSuppRmin, sOBWheelExtFlangeR);
1958 rmax = sOBWheelSuppRmin + sOBWheelThickness;
1959 lowerRingSh->DefineSection(2, sOBWheelThickness, sOBWheelSuppRmin, rmax);
1960 lowerRingSh->DefineSection(3, sOBWheelIntFlangeZ, sOBWheelSuppRmin, rmax);
1961 lowerRingSh->DefineSection(4, sOBWheelIntFlangeZ, sOBWheelIntFlangeR[iLay], rmax);
1962 zpos = sOBWheelIntFlangeZ + 2 * sOBWheelThickness;
1963 lowerRingSh->DefineSection(5, zpos, sOBWheelIntFlangeR[iLay], rmax);
1964 lowerRingSh->DefineSection(6, zpos, sOBWheelSuppRmin, rmax);
1965 zpos += sOBWheelIntFlangeZ;
1966 lowerRingSh->DefineSection(7, zpos, sOBWheelSuppRmin, rmax);
1967 rmax = sOBWheelShelfRpos[iLay] + sOBWheelThickness;
1968 lowerRingSh->DefineSection(8, zpos, sOBWheelSuppRmin, rmax);
1969 zpos += sOBWheelThickness;
1970 lowerRingSh->DefineSection(9, zpos, sOBWheelSuppRmin, rmax);
1971 lowerRingSh->DefineSection(10, zpos, sOBWheelShelfRpos[iLay], rmax);
1972 zpos = sOBWheelTotZlen[iLay] - sOBWheelThickness;
1973 lowerRingSh->DefineSection(11, zpos, sOBWheelShelfRpos[iLay], rmax);
1974 lowerRingSh->DefineSection(12, zpos, sOBWheelShelfRpos[iLay], sOBWheelSuppRmax[iLay]);
1975 lowerRingSh->DefineSection(13, sOBWheelTotZlen[iLay], sOBWheelShelfRpos[iLay], sOBWheelSuppRmax[iLay]);
1978 lowerRingSh =
new TGeoPcon(0, 360, nsect);
1979 lowerRingSh->DefineSection(0, 0., sOBWheelShelfRpos[iLay], sOBWheelSuppRmax[iLay]);
1980 lowerRingSh->DefineSection(1, sOBWheelThickness, sOBWheelShelfRpos[iLay], sOBWheelSuppRmax[iLay]);
1981 rmax = sOBWheelShelfRpos[iLay] + sOBWheelThickness;
1982 lowerRingSh->DefineSection(2, sOBWheelThickness, sOBWheelShelfRpos[iLay], rmax);
1983 lowerRingSh->DefineSection(3, sOBWheelIntFlangeZ, sOBWheelShelfRpos[iLay], rmax);
1984 lowerRingSh->DefineSection(4, sOBWheelIntFlangeZ, sOBWheelIntFlangeR[iLay], rmax);
1985 zpos = sOBWheelIntFlangeZ + 2 * sOBWheelThickness;
1986 lowerRingSh->DefineSection(5, zpos, sOBWheelIntFlangeR[iLay], rmax);
1987 lowerRingSh->DefineSection(6, zpos, sOBWheelShelfRpos[iLay], rmax);
1988 zpos = sOBWheelTotZlen[iLay] - sOBWheelThickness;
1989 lowerRingSh->DefineSection(7, zpos, sOBWheelShelfRpos[iLay], rmax);
1990 lowerRingSh->DefineSection(8, zpos, sOBWheelShelfRpos[iLay], sOBWheelSuppRmax[iLay]);
1991 lowerRingSh->DefineSection(9, sOBWheelTotZlen[iLay], sOBWheelShelfRpos[iLay], sOBWheelSuppRmax[iLay]);
1995 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
1997 Int_t nLay = iLay + sNumberInnerLayers + sNumberMiddlLayers;
1999 TGeoVolume* ringUpperVol =
new TGeoVolume(Form(
"OBEndWheelCUpperRing%d", nLay), upperRingSh, medCarbon);
2000 ringUpperVol->SetFillColor(kBlue);
2001 ringUpperVol->SetLineColor(kBlue);
2003 TGeoVolume* ringLowerVol =
new TGeoVolume(Form(
"OBEndWheelCLowerRing%d", nLay), lowerRingSh, medCarbon);
2004 ringLowerVol->SetFillColor(kBlue);
2005 ringLowerVol->SetLineColor(kBlue);
2009 zpos = sOBWheelsZpos + sOBWheelShelfHoleZpos[iLay];
2011 mother->AddNode(ringLowerVol, 1,
new TGeoTranslation(0, 0, -zpos));
2014 zpos -= (sOBWheelThickness + (
static_cast<TGeoTube*
>(upperRingSh))->GetDz());
2016 mother->AddNode(ringUpperVol, 1,
new TGeoTranslation(0, 0, -zpos));
2019void V3Services::obConeSideA(TGeoVolume* mother,
const TGeoManager* mgr)
2036 static const Double_t sOBConeATotZlen = 350.0 *
sMm;
2037 static const Double_t sOBConeAStartCyl2 = 170.0 *
sMm;
2038 static const Double_t sOBConeAEndCyl1 = 160.8 *
sMm;
2039 static const Double_t sOBConeAThinCylZ = 36.0 *
sMm;
2041 static const Double_t sOBConeAIntR = 291.5 *
sMm;
2042 static const Double_t sOBConeAExtR = 302.5 *
sMm;
2044 static const Double_t sOBConeARingExtR = 339.5 *
sMm;
2045 static const Double_t sOBConeARingZlen = 55.0 *
sMm;
2046 static const Double_t sOBConeARingZout = 35.0 *
sMm;
2048 static const Double_t sOBConeAThickAll = 2.0 *
sMm;
2049 static const Double_t sOBConeAThickThin = 1.0 *
sMm;
2051 static const Double_t sOBConeAReinfZIn = 1.0 *
sMm;
2052 static const Double_t sOBConeAReinfRIn = 301.6 *
sMm;
2054 static const Double_t sOBConeAReinfThick = 6.5 *
sMm;
2056 static const Int_t sOBConeARibNVert = 8;
2059 Double_t rmin, rmax, zlen;
2060 Double_t xpos, ypos, zpos;
2065 Double_t
phi = sOBConeAReinfThick / sOBConeAIntR;
2066 phi *= TMath::RadToDeg();
2069 TGeoPcon* obConeSh =
new TGeoPcon(phi, 180 - 2 * phi, 10);
2071 rmin = sOBConeAIntR;
2072 rmax = sOBConeAReinfRIn;
2073 obConeSh->DefineSection(0, 0., rmin, rmax);
2074 obConeSh->DefineSection(1, sOBConeAReinfZIn, rmin, rmax);
2075 rmax = rmin + sOBConeAThickThin;
2076 obConeSh->DefineSection(2, sOBConeAReinfZIn, rmin, rmax);
2077 obConeSh->DefineSection(3, sOBConeAThinCylZ, rmin, rmax);
2078 rmax = rmin + sOBConeAThickAll;
2079 obConeSh->DefineSection(4, sOBConeAThinCylZ, rmin, rmax);
2080 zlen = sOBConeATotZlen - sOBConeAStartCyl2;
2081 obConeSh->DefineSection(5, zlen, rmin, rmax);
2082 rmin = sOBConeAExtR;
2083 rmax = rmin + sOBConeAThickAll;
2084 zlen = sOBConeATotZlen - sOBConeAEndCyl1;
2085 obConeSh->DefineSection(6, zlen, rmin, rmax);
2086 zlen = sOBConeATotZlen - sOBConeAThickAll;
2087 obConeSh->DefineSection(7, zlen, rmin, rmax);
2088 rmax = sOBConeARingExtR;
2089 obConeSh->DefineSection(8, zlen, rmin, rmax);
2090 obConeSh->DefineSection(9, sOBConeATotZlen, rmin, rmax);
2093 TGeoPcon* obConeRingSh =
new TGeoPcon(phi, 180 - 2 * phi, 6);
2095 rmin = obConeSh->GetRmax(7);
2096 rmax = rmin + sOBConeAThickAll;
2097 obConeRingSh->DefineSection(0, 0., rmin, rmax);
2098 zlen = sOBConeARingZlen - sOBConeARingZout;
2099 obConeRingSh->DefineSection(1, zlen, rmin, rmax);
2100 rmax = sOBConeARingExtR;
2101 obConeRingSh->DefineSection(2, zlen, rmin, rmax);
2102 zlen += sOBConeAThickAll;
2103 obConeRingSh->DefineSection(3, zlen, rmin, rmax);
2104 rmin = rmax - sOBConeAThickAll;
2105 obConeRingSh->DefineSection(4, zlen, rmin, rmax);
2106 zlen = sOBConeARingZlen - sOBConeAThickAll;
2107 obConeRingSh->DefineSection(5, zlen, rmin, rmax);
2110 Double_t xr[sOBConeARibNVert], yr[sOBConeARibNVert];
2114 xr[1] = obConeSh->GetRmax(0) - obConeSh->GetRmin(0);
2117 yr[2] = obConeSh->GetZ(5);
2120 xr[6] = obConeSh->GetRmin(6) - obConeSh->GetRmin(5);
2121 yr[6] = obConeSh->GetZ(6);
2122 xr[3] = xr[6] + (xr[1] - xr[0]);
2125 yr[5] = sOBConeATotZlen - sOBConeARingZout + sOBConeAThickAll;
2129 TGeoXtru* obConeRibSh =
new TGeoXtru(2);
2130 obConeRibSh->DefinePolygon(sOBConeARibNVert, xr, yr);
2131 obConeRibSh->DefineSection(0, 0);
2132 obConeRibSh->DefineSection(1, sOBConeAThickAll);
2135 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
2137 TGeoVolume* obConeVol =
new TGeoVolume(
"OBConeSideA", obConeSh, medCarbon);
2138 obConeVol->SetFillColor(kBlue);
2139 obConeVol->SetLineColor(kBlue);
2141 TGeoVolume* obConeRingVol =
new TGeoVolume(
"OBConeRingSideA", obConeRingSh, medCarbon);
2142 obConeRingVol->SetFillColor(kBlue);
2143 obConeRingVol->SetLineColor(kBlue);
2145 TGeoVolume* obConeRibVol =
new TGeoVolume(
"OBConeRibSideA", obConeRibSh, medCarbon);
2146 obConeRibVol->SetFillColor(kBlue);
2147 obConeRibVol->SetLineColor(kBlue);
2150 zpos = sOBConesZpos - sOBConeATotZlen;
2152 mother->AddNode(obConeVol, 1,
new TGeoTranslation(0, 0, zpos));
2153 mother->AddNode(obConeVol, 2,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 180, 0, 0)));
2155 zpos = sOBConesZpos - sOBConeARingZlen;
2157 mother->AddNode(obConeRingVol, 1,
new TGeoTranslation(0, 0, zpos));
2158 mother->AddNode(obConeRingVol, 2,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 180, 0, 0)));
2160 xpos = obConeSh->GetRmin(0);
2161 ypos = sOBConeAReinfThick;
2162 zpos = sOBConesZpos - sOBConeATotZlen;
2164 mother->AddNode(obConeRibVol, 1,
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", 0, 90, 0)));
2165 mother->AddNode(obConeRibVol, 4,
new TGeoCombiTrans(-xpos, -ypos, zpos,
new TGeoRotation(
"", 0, -90, 180)));
2167 ypos = sOBConeAReinfThick - sOBConeAThickAll;
2169 mother->AddNode(obConeRibVol, 3,
new TGeoCombiTrans(-xpos, ypos, zpos,
new TGeoRotation(
"", 0, -90, -180)));
2170 mother->AddNode(obConeRibVol, 4,
new TGeoCombiTrans(xpos, -ypos, zpos,
new TGeoRotation(
"", 0, 90, 0)));
2173void V3Services::obConeTraysSideA(TGeoVolume* mother,
const TGeoManager* mgr)
2190 static const Double_t sOBTrayZlen[2] = {112.0 *
sMm, 115.0 *
sMm};
2191 static const Double_t sOBTrayRmin[2] = {222.0 *
sMm, 370.0 *
sMm};
2192 static const Double_t sOBTrayRmax[2] = {240.0 *
sMm, 386.0 *
sMm};
2194 static const Double_t sOBTrayZpos[2] = {181.0 *
sMm, 20.0 *
sMm};
2196 static const Double_t sOBTrayThick = 2.0 *
sMm;
2198 static const Double_t sOBTrayReinfWide[2] = {27.0 *
sMm, 24.0 *
sMm};
2199 static const Double_t sOBTrayReinfYpos = 6.0 *
sMm;
2202 Double_t rmin, rmax, zlen;
2203 Double_t xpos, ypos, zpos;
2208 TGeoPcon* obTraySh[2];
2209 TGeoBBox* obTrayRibSh[2];
2211 for (Int_t
j = 0;
j < 2;
j++) {
2212 Double_t
phi = (sOBTrayReinfYpos + sOBTrayThick) / sOBTrayRmin[
j];
2213 phi *= TMath::RadToDeg();
2216 obTraySh[
j] =
new TGeoPcon(180 + phi, 180 - 2 * phi, 4);
2218 rmin = sOBTrayRmin[
j];
2219 rmax = sOBTrayRmax[
j];
2220 obTraySh[
j]->DefineSection(0, 0., rmin, rmax);
2221 obTraySh[
j]->DefineSection(1, sOBTrayThick, rmin, rmax);
2222 rmin = rmax - sOBTrayThick;
2223 obTraySh[
j]->DefineSection(2, sOBTrayThick, rmin, rmax);
2224 obTraySh[
j]->DefineSection(3, sOBTrayZlen[
j], rmin, rmax);
2227 obTrayRibSh[
j] =
new TGeoBBox(sOBTrayReinfWide[
j] / 2,
2229 sOBTrayZlen[
j] / 2);
2233 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
2235 TGeoVolume *obTrayVol[2], *obTrayRibVol[2];
2237 for (Int_t
j = 0;
j < 2;
j++) {
2238 obTrayVol[
j] =
new TGeoVolume(Form(
"OBConeTray%d",
j), obTraySh[
j], medCarbon);
2239 obTrayVol[
j]->SetFillColor(kBlue);
2240 obTrayVol[
j]->SetLineColor(kBlue);
2242 obTrayRibVol[
j] =
new TGeoVolume(Form(
"OBConeTrayRib%d",
j), obTrayRibSh[
j], medCarbon);
2243 obTrayRibVol[
j]->SetFillColor(kBlue);
2244 obTrayRibVol[
j]->SetLineColor(kBlue);
2249 for (Int_t
j = 0;
j < 2;
j++) {
2251 zpos = sOBConesZpos - sOBTrayZpos[
j] - sOBTrayZlen[
j];
2253 zpos = sOBConesZpos + sOBTrayZpos[
j];
2256 mother->AddNode(obTrayVol[
j], 1,
new TGeoTranslation(0, 0, zpos));
2257 mother->AddNode(obTrayVol[
j], 2,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 180, 0, 0)));
2259 xpos = obTraySh[
j]->GetRmin(0) + obTrayRibSh[
j]->GetDX();
2260 ypos = sOBTrayReinfYpos + obTrayRibSh[
j]->GetDY();
2261 zpos += obTrayRibSh[
j]->GetDZ();
2263 mother->AddNode(obTrayRibVol[
j], 1,
new TGeoTranslation(xpos, -ypos, zpos));
2264 mother->AddNode(obTrayRibVol[
j], 2,
new TGeoTranslation(-xpos, -ypos, zpos));
2265 mother->AddNode(obTrayRibVol[
j], 3,
new TGeoTranslation(xpos, ypos, zpos));
2266 mother->AddNode(obTrayRibVol[
j], 4,
new TGeoTranslation(-xpos, ypos, zpos));
2270void V3Services::obConeSideC(TGeoVolume* mother,
const TGeoManager* mgr)
2287 static const Double_t sOBConeCTotZlen = 332.5 *
sMm;
2288 static const Double_t sOBConeCStartCyl2 = 132.8 *
sMm;
2289 static const Double_t sOBConeCEndCyl1 = 82.4 *
sMm;
2290 static const Double_t sOBConeCThinCylZ = 36.0 *
sMm;
2292 static const Double_t sOBConeCIntR = 291.5 *
sMm;
2293 static const Double_t sOBConeCExtR = 315.0 *
sMm;
2295 static const Double_t sOBConeCRingExtR = 333.0 *
sMm;
2296 static const Double_t sOBConeCRingZlen = 61.0 *
sMm;
2297 static const Double_t sOBConeCRingZout = 42.0 *
sMm;
2299 static const Double_t sOBConeCThickAll = 2.0 *
sMm;
2300 static const Double_t sOBConeCThickThin = 1.0 *
sMm;
2302 static const Double_t sOBConeCReinfZIn = 2.0 *
sMm;
2303 static const Double_t sOBConeCReinfRIn = 301.6 *
sMm;
2304 static const Double_t sOBConeCReinfROut = 351.5 *
sMm;
2306 static const Double_t sOBConeCReinfThick = 6.5 *
sMm;
2308 static const Int_t sOBConeCRibNVert = 8;
2311 Double_t rmin, rmax, zlen;
2312 Double_t xpos, ypos, zpos;
2317 Double_t
phi = sOBConeCReinfThick / sOBConeCIntR;
2318 phi *= TMath::RadToDeg();
2321 TGeoPcon* obConeSh =
new TGeoPcon(phi, 180 - 2 * phi, 10);
2323 rmin = sOBConeCExtR;
2324 rmax = sOBConeCReinfROut;
2325 obConeSh->DefineSection(0, 0., rmin, rmax);
2326 obConeSh->DefineSection(1, sOBConeCThickAll, rmin, rmax);
2327 rmax = rmin + sOBConeCThickAll;
2328 obConeSh->DefineSection(2, sOBConeCThickAll, rmin, rmax);
2329 obConeSh->DefineSection(3, sOBConeCEndCyl1, rmin, rmax);
2330 rmin = sOBConeCIntR;
2331 rmax = rmin + sOBConeCThickAll;
2332 obConeSh->DefineSection(4, sOBConeCStartCyl2, rmin, rmax);
2333 zlen = sOBConeCTotZlen - sOBConeCThinCylZ;
2334 obConeSh->DefineSection(5, zlen, rmin, rmax);
2335 rmax = rmin + sOBConeCThickThin;
2336 obConeSh->DefineSection(6, zlen, rmin, rmax);
2337 zlen = sOBConeCTotZlen - sOBConeCReinfZIn;
2338 obConeSh->DefineSection(7, zlen, rmin, rmax);
2339 rmax = sOBConeCReinfRIn;
2340 obConeSh->DefineSection(8, zlen, rmin, rmax);
2341 obConeSh->DefineSection(9, sOBConeCTotZlen, rmin, rmax);
2344 TGeoPcon* obConeRingSh =
new TGeoPcon(phi, 180 - 2 * phi, 8);
2346 rmin = sOBConeCRingExtR - sOBConeCThickAll;
2347 rmax = sOBConeCReinfROut;
2348 obConeRingSh->DefineSection(0, 0., rmin, rmax);
2349 obConeRingSh->DefineSection(1, sOBConeCThickAll, rmin, rmax);
2350 rmax = sOBConeCRingExtR;
2351 obConeRingSh->DefineSection(2, sOBConeCThickAll, rmin, rmax);
2352 zlen = sOBConeCRingZout - sOBConeCThickAll;
2353 obConeRingSh->DefineSection(3, zlen, rmin, rmax);
2354 rmin = sOBConeCExtR + sOBConeCThickAll;
2355 obConeRingSh->DefineSection(4, zlen, rmin, rmax);
2356 obConeRingSh->DefineSection(5, sOBConeCRingZout, rmin, rmax);
2357 rmax = rmin + sOBConeCThickAll;
2358 obConeRingSh->DefineSection(6, sOBConeCRingZout, rmin, rmax);
2359 obConeRingSh->DefineSection(7, sOBConeCRingZlen, rmin, rmax);
2362 Double_t xr[sOBConeCRibNVert], yr[sOBConeCRibNVert];
2366 xr[1] = obConeSh->GetRmax(9) - obConeSh->GetRmin(9);
2369 yr[2] = obConeSh->GetZ(9) - obConeSh->GetZ(4);
2372 xr[6] = obConeSh->GetRmin(3) - obConeSh->GetRmin(4);
2373 yr[6] = obConeSh->GetZ(9) - obConeSh->GetZ(3);
2374 xr[3] = xr[6] + (xr[1] - xr[0]);
2377 yr[5] = sOBConeCTotZlen - sOBConeCRingZout;
2381 TGeoXtru* obConeRibSh =
new TGeoXtru(2);
2382 obConeRibSh->DefinePolygon(sOBConeCRibNVert, xr, yr);
2383 obConeRibSh->DefineSection(0, 0);
2384 obConeRibSh->DefineSection(1, sOBConeCThickAll);
2387 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_M55J6K$",
GetDetName()));
2389 TGeoVolume* obConeVol =
new TGeoVolume(
"OBConeSideC", obConeSh, medCarbon);
2390 obConeVol->SetFillColor(kBlue);
2391 obConeVol->SetLineColor(kBlue);
2393 TGeoVolume* obConeRingVol =
new TGeoVolume(
"OBConeRingSideC", obConeRingSh, medCarbon);
2394 obConeRingVol->SetFillColor(kBlue);
2395 obConeRingVol->SetLineColor(kBlue);
2397 TGeoVolume* obConeRibVol =
new TGeoVolume(
"OBConeRibSideC", obConeRibSh, medCarbon);
2398 obConeRibVol->SetFillColor(kBlue);
2399 obConeRibVol->SetLineColor(kBlue);
2402 zpos = sOBConesZpos;
2404 mother->AddNode(obConeVol, 1,
new TGeoTranslation(0, 0, -zpos));
2405 mother->AddNode(obConeVol, 2,
new TGeoCombiTrans(0, 0, -zpos,
new TGeoRotation(
"", 180, 0, 0)));
2407 zpos -= sOBConeCThickAll;
2409 mother->AddNode(obConeRingVol, 1,
new TGeoTranslation(0, 0, -zpos));
2410 mother->AddNode(obConeRingVol, 2,
new TGeoCombiTrans(0, 0, -zpos,
new TGeoRotation(
"", 180, 0, 0)));
2412 xpos = obConeSh->GetRmin(9);
2413 ypos = sOBConeCReinfThick;
2414 zpos = sOBConesZpos - obConeSh->GetZ(9);
2416 mother->AddNode(obConeRibVol, 1,
new TGeoCombiTrans(xpos, -ypos, -zpos,
new TGeoRotation(
"", 0, -90, 0)));
2417 mother->AddNode(obConeRibVol, 2,
new TGeoCombiTrans(-xpos, ypos, -zpos,
new TGeoRotation(
"", 0, 90, 180)));
2419 ypos = sOBConeCReinfThick - sOBConeCThickAll;
2421 mother->AddNode(obConeRibVol, 3,
new TGeoCombiTrans(xpos, ypos, -zpos,
new TGeoRotation(
"", 0, -90, 0)));
2422 mother->AddNode(obConeRibVol, 4,
new TGeoCombiTrans(-xpos, -ypos, -zpos,
new TGeoRotation(
"", 0, 90, 180)));
2425void V3Services::obCYSS11(TGeoVolume* mother,
const TGeoManager* mgr)
2446 static const Double_t sOBCYSS14Zlen = 1556.8 *
sMm;
2447 static const Double_t sOBCYSS14DInt = 898.0 *
sMm;
2448 static const Double_t sOBCYSS14DExt = 902.0 *
sMm;
2449 static const Double_t sOBCYSS14PhiCut = 4.0 *
sMm;
2451 static const Double_t sOBCYSS13Zlen = 1481.0 *
sMm;
2452 static const Double_t sOBCYSS13DInt = sOBCYSS14DExt;
2453 static const Double_t sOBCYSS13DExt = 918.0 *
sMm;
2454 static const Double_t sOBCYSS13PhiCut = 10.55 *
sMm;
2456 static const Double_t sOBCYSS12Zlen = 1520.6 *
sMm;
2457 static const Double_t sOBCYSS12DInt = sOBCYSS13DExt;
2458 static const Double_t sOBCYSS12DExt = 922.0 *
sMm;
2459 static const Double_t sOBCYSS12PhiCut = 4.0 *
sMm;
2461 static const Double_t sOBCYSS20Zlen = 1500.6 *
sMm;
2462 static const Double_t sOBCYSS20Width = 7.1 *
sMm;
2463 static const Double_t sOBCYSS20Height = 6.35 *
sMm;
2466 Double_t rmin, rmax,
phi;
2467 Double_t xpos, ypos, zpos;
2473 rmin = sOBCYSS14DInt / 2;
2474 rmax = sOBCYSS14DExt / 2;
2476 phi = sOBCYSS14PhiCut / rmin;
2477 phi *= TMath::RadToDeg();
2479 TGeoTubeSeg* obCyss14Sh =
new TGeoTubeSeg(rmin, rmax, sOBCYSS14Zlen / 2, phi, 180. - phi);
2482 rmin = sOBCYSS13DInt / 2;
2483 rmax = sOBCYSS13DExt / 2;
2485 phi = sOBCYSS13PhiCut / rmin;
2486 phi *= TMath::RadToDeg();
2488 TGeoTubeSeg* obCyss13Sh =
new TGeoTubeSeg(rmin, rmax, sOBCYSS13Zlen / 2, phi, 180. - phi);
2491 rmin = sOBCYSS12DInt / 2;
2492 rmax = sOBCYSS12DExt / 2;
2494 phi = sOBCYSS12PhiCut / rmin;
2495 phi *= TMath::RadToDeg();
2497 TGeoTubeSeg* obCyss12Sh =
new TGeoTubeSeg(rmin, rmax, sOBCYSS12Zlen / 2, phi, 180. - phi);
2500 TGeoBBox* obCyss20Sh =
new TGeoBBox(sOBCYSS20Width / 2, sOBCYSS20Height / 2, sOBCYSS20Zlen / 2);
2503 TGeoMedium* medRist = mgr->GetMedium(Form(
"%s_RIST110$",
GetDetName()));
2504 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_AS4C200$",
GetDetName()));
2506 TGeoVolume* obCyss14Vol =
new TGeoVolume(
"OBCYSS14", obCyss14Sh, medCarbon);
2507 obCyss14Vol->SetFillColor(kBlue);
2508 obCyss14Vol->SetLineColor(kBlue);
2510 TGeoVolume* obCyss13Vol =
new TGeoVolume(
"OBCYSS13", obCyss13Sh, medRist);
2511 obCyss13Vol->SetFillColor(kBlue);
2512 obCyss13Vol->SetLineColor(kBlue);
2514 TGeoVolume* obCyss12Vol =
new TGeoVolume(
"OBCYSS12", obCyss12Sh, medCarbon);
2515 obCyss12Vol->SetFillColor(kBlue);
2516 obCyss12Vol->SetLineColor(kBlue);
2518 TGeoVolume* obCyss20Vol =
new TGeoVolume(
"OBCYSS20", obCyss20Sh, medCarbon);
2519 obCyss20Vol->SetFillColor(kYellow);
2520 obCyss20Vol->SetLineColor(kYellow);
2523 mother->AddNode(obCyss14Vol, 1,
nullptr);
2524 mother->AddNode(obCyss14Vol, 2,
new TGeoRotation(
"", 180, 0, 0));
2526 mother->AddNode(obCyss13Vol, 1,
nullptr);
2527 mother->AddNode(obCyss13Vol, 2,
new TGeoRotation(
"", 180, 0, 0));
2529 mother->AddNode(obCyss12Vol, 1,
nullptr);
2530 mother->AddNode(obCyss12Vol, 2,
new TGeoRotation(
"", 180, 0, 0));
2532 xpos = (obCyss13Sh->GetRmin() + obCyss13Sh->GetRmax()) / 2;
2533 ypos = sOBCYSS13PhiCut - obCyss20Sh->GetDY();
2534 mother->AddNode(obCyss20Vol, 1,
new TGeoTranslation(xpos, ypos, 0));
2535 mother->AddNode(obCyss20Vol, 2,
new TGeoTranslation(-xpos, ypos, 0));
2536 mother->AddNode(obCyss20Vol, 3,
new TGeoTranslation(xpos, -ypos, 0));
2537 mother->AddNode(obCyss20Vol, 4,
new TGeoTranslation(-xpos, -ypos, 0));
2540void V3Services::ibConvWire(TGeoVolume* mother,
const TGeoManager* mgr)
2562 static const Double_t sIBGWireLength = 492.0 *
sMm;
2563 static const Double_t sIBGWireDiam = 1.0 *
sMm;
2565 static const Double_t sIBGWireXPosIn = 55.1 *
sMm;
2566 static const Double_t sIBGWireXPosOut = 148.6 *
sMm;
2567 static const Double_t sIBGWireYPos = 14.0 *
sMm;
2568 static const Double_t sIBGWireZPos = 68.25 *
sMm;
2569 static const Double_t sIBGWirePhiPos = 10.9;
2570 static const Double_t sIBGWireThetaPos = 8.7;
2573 static const Double_t sIBGWireIntSuppBaseCentWid = 11.54 *
sMm;
2574 static const Double_t sIBGWireIntSuppBaseCentHi = 11.3 *
sMm;
2575 static const Double_t sIBGWireIntSuppBaseCentThik = 3.9 *
sMm;
2577 static const Double_t sIBGWireIntSuppZpos = 171.5 *
sMm;
2578 static const Double_t sIBGWireIntSuppXDist = 116.2 *
sMm;
2581 static const Double_t sIBGWireOutSuppLength = 26.5 *
sMm;
2582 static const Double_t sIBGWireOutSuppThick = 3.0 *
sMm;
2584 static const Double_t sIBGWireOutSuppHoleXpos = 16.0 *
sMm;
2585 static const Double_t sIBGWireOutSuppXDist = 292.0 *
sMm;
2586 static const Double_t sIBGWireOutSuppYpos = 1.0 *
sMm;
2587 static const Double_t sIBGWireOutSuppZpos = 312.9 *
sMm;
2590 Double_t xpos, ypos, zpos;
2593 TGeoTube* ibWireSh =
new TGeoTube(0, sIBGWireDiam / 2, sIBGWireLength / 2);
2596 TGeoCompositeShape* ibWireIntSuppLeftSh = ibConvWireIntSupport(kTRUE);
2597 TGeoCompositeShape* ibWireIntSuppRightSh = ibConvWireIntSupport(kFALSE);
2598 TGeoCompositeShape* ibWireOutSuppSh = ibConvWireOutSupport();
2601 TGeoMedium* medAl = mgr->GetMedium(Form(
"%s_ALUMINUM$",
GetDetName()));
2602 TGeoMedium* medTungsten = mgr->GetMedium(Form(
"%s_TUNGSTEN$",
GetDetName()));
2604 TGeoVolume* ibWireVol =
new TGeoVolume(
"IBGammaConvWire", ibWireSh, medTungsten);
2605 ibWireVol->SetFillColor(kGray);
2606 ibWireVol->SetLineColor(kGray);
2608 TGeoVolume* ibWireIntSuppLeftVol =
new TGeoVolume(
"IBGammaConvWireInnerSupportLeft", ibWireIntSuppLeftSh, medAl);
2609 ibWireIntSuppLeftVol->SetFillColor(kRed);
2610 ibWireIntSuppLeftVol->SetLineColor(kRed);
2612 TGeoVolume* ibWireIntSuppRightVol =
new TGeoVolume(
"IBGammaConvWireInnerSupportRight", ibWireIntSuppRightSh, medAl);
2613 ibWireIntSuppRightVol->SetFillColor(kRed);
2614 ibWireIntSuppRightVol->SetLineColor(kRed);
2616 TGeoVolume* ibWireOutSuppVol =
new TGeoVolume(
"IBGammaConvWireOuterSupport", ibWireOutSuppSh, medAl);
2617 ibWireOutSuppVol->SetFillColor(kRed);
2618 ibWireOutSuppVol->SetLineColor(kRed);
2621 xpos = (sIBGWireXPosIn + sIBGWireXPosOut) / 2;
2622 ypos = sIBGWireYPos;
2623 zpos = sIBGWireZPos;
2624 mother->AddNode(ibWireVol, 1,
new TGeoCombiTrans(xpos, -ypos, zpos,
new TGeoRotation(
"", 90 - sIBGWireThetaPos, sIBGWirePhiPos, 0)));
2625 mother->AddNode(ibWireVol, 2,
new TGeoCombiTrans(-xpos, -ypos, zpos,
new TGeoRotation(
"", 90 + sIBGWireThetaPos, -sIBGWirePhiPos, 0)));
2627 xpos = sIBGWireIntSuppXDist / 2 - sIBGWireIntSuppBaseCentWid / 2;
2628 ypos = sIBGWireIntSuppBaseCentHi / 2;
2629 zpos = sIBGWireIntSuppZpos + sIBGWireIntSuppBaseCentThik;
2630 mother->AddNode(ibWireIntSuppLeftVol, 1,
new TGeoTranslation(xpos, -ypos, -zpos));
2631 mother->AddNode(ibWireIntSuppRightVol, 1,
new TGeoTranslation(-xpos, -ypos, -zpos));
2633 xpos = sIBGWireOutSuppXDist / 2 - sIBGWireOutSuppHoleXpos;
2634 ypos = -sIBGWireOutSuppLength - sIBGWireOutSuppYpos;
2635 zpos = sIBGWireOutSuppZpos - sIBGWireOutSuppThick;
2636 mother->AddNode(ibWireOutSuppVol, 1,
new TGeoTranslation(xpos, ypos, zpos));
2638 zpos = sIBGWireOutSuppZpos;
2639 mother->AddNode(ibWireOutSuppVol, 2,
new TGeoCombiTrans(-xpos, ypos, zpos,
new TGeoRotation(
"", 180, 180, 0)));
2642TGeoCompositeShape* V3Services::ibConvWireIntSupport(
const Bool_t
left)
2666 static const Double_t sIBGWireIntSuppBaseFullWid = 19.5 *
sMm;
2667 static const Double_t sIBGWireIntSuppBaseFullSpan = 18.5 *
sMm;
2668 static const Double_t sIBGWireIntSuppBaseOutSpan = 2.5 *
sMm;
2669 static const Double_t sIBGWireIntSuppBaseCentWid = 11.94 *
sMm;
2670 static const Double_t sIBGWireIntSuppBaseCentHi = 11.3 *
sMm;
2671 static const Double_t sIBGWireIntSuppBaseCentThik = 3.9 *
sMm;
2672 static const Double_t sIBGWireIntSuppFingerLen = 9.6 *
sMm;
2673 static const Double_t sIBGWireIntSuppFingerWid = 4.8 *
sMm;
2674 static const Double_t sIBGWireIntSuppFingerShift = 1.4 *
sMm;
2675 static const Double_t sIBGWireIntSuppFingerThik = 8.1 *
sMm;
2676 static const Double_t sIBGWireIntSuppFingerPhi = 15.0;
2677 static const Double_t sIBGWireIntSuppSpikyWid = 10.0 *
sMm;
2678 static const Double_t sIBGWireIntSuppSpikyHi = 12.6 *
sMm;
2679 static const Double_t sIBGWireIntSuppSpikyXin = 2.5 *
sMm;
2680 static const Double_t sIBGWireIntSuppSpikyYin = 9.2 *
sMm;
2681 static const Double_t sIBGWireIntSuppSpikyThik = 3.0 *
sMm;
2684 Double_t xtru[11], ytru[11];
2685 Double_t xlen, ylen, zlen;
2686 Double_t xpos, ypos, zpos, phirot;
2694 xlen = (sIBGWireIntSuppBaseCentWid + sIBGWireIntSuppFingerShift) / 2;
2695 ylen = sIBGWireIntSuppBaseCentHi / 2;
2696 zlen = sIBGWireIntSuppBaseCentThik / 2;
2697 TGeoBBox* intSuppCent =
new TGeoBBox(xlen, ylen, zlen);
2698 intSuppCent->SetName(Form(
"suppcent%d", shapeId));
2703 xtru[1] = sIBGWireIntSuppBaseFullWid - sIBGWireIntSuppBaseCentWid;
2705 xtru[2] = xtru[1] + sIBGWireIntSuppFingerLen * TMath::Cos(sIBGWireIntSuppFingerPhi * TMath::DegToRad());
2706 ytru[2] = sIBGWireIntSuppFingerLen * TMath::Sin(sIBGWireIntSuppFingerPhi * TMath::DegToRad());
2707 xtru[3] = xtru[2] - sIBGWireIntSuppFingerWid * TMath::Sin(sIBGWireIntSuppFingerPhi * TMath::DegToRad());
2708 ytru[3] = ytru[2] + sIBGWireIntSuppFingerWid * TMath::Cos(sIBGWireIntSuppFingerPhi * TMath::DegToRad());
2710 ytru[4] = ytru[3] - sIBGWireIntSuppFingerLen * TMath::Sin(sIBGWireIntSuppFingerPhi * TMath::DegToRad());
2711 xtru[5] = sIBGWireIntSuppBaseOutSpan;
2712 ytru[5] = sIBGWireIntSuppBaseCentHi;
2713 xtru[6] = -sIBGWireIntSuppFingerShift;
2716 TGeoXtru* intSuppFing =
new TGeoXtru(2);
2717 intSuppFing->DefinePolygon(7, xtru, ytru);
2718 intSuppFing->DefineSection(0, 0);
2719 intSuppFing->DefineSection(1, sIBGWireIntSuppFingerThik);
2720 intSuppFing->SetName(Form(
"suppfinger%d", shapeId));
2722 ypos = -intSuppCent->GetDY();
2724 xpos = -intSuppCent->GetDX();
2725 zpos = -intSuppCent->GetDZ() + sIBGWireIntSuppFingerThik;
2728 xpos = intSuppCent->GetDX();
2729 zpos = -intSuppCent->GetDZ();
2732 TGeoCombiTrans* intSuppFingMat =
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", phirot, phirot, 0));
2733 intSuppFingMat->SetName(Form(
"suppfingermat%d", shapeId));
2734 intSuppFingMat->RegisterYourself();
2739 xtru[1] = sIBGWireIntSuppBaseCentWid;
2742 ytru[2] = sIBGWireIntSuppBaseCentHi;
2743 xtru[3] = xtru[2] - (sIBGWireIntSuppBaseFullSpan - sIBGWireIntSuppSpikyWid - sIBGWireIntSuppBaseOutSpan);
2746 ytru[4] = ytru[3] + sIBGWireIntSuppSpikyHi;
2747 xtru[5] = xtru[4] - (sIBGWireIntSuppSpikyWid - sIBGWireIntSuppSpikyXin) / 2;
2748 ytru[5] = ytru[4] - (sIBGWireIntSuppSpikyHi - sIBGWireIntSuppSpikyYin);
2751 xtru[7] = xtru[6] - sIBGWireIntSuppSpikyXin;
2755 xtru[9] = xtru[8] - (sIBGWireIntSuppSpikyWid - sIBGWireIntSuppSpikyXin) / 2;
2760 TGeoXtru* intSuppSpiky =
new TGeoXtru(2);
2761 intSuppSpiky->DefinePolygon(11, xtru, ytru);
2762 intSuppSpiky->DefineSection(0, 0);
2763 intSuppSpiky->DefineSection(1, sIBGWireIntSuppSpikyThik);
2764 intSuppSpiky->SetName(Form(
"suppspiky%d", shapeId));
2766 ypos = -intSuppCent->GetDY();
2768 xpos = intSuppCent->GetDX();
2769 zpos = intSuppCent->GetDZ() - sIBGWireIntSuppSpikyThik;
2772 xpos = -intSuppCent->GetDX();
2773 zpos = -intSuppCent->GetDZ() - sIBGWireIntSuppSpikyThik;
2776 TGeoCombiTrans* intSuppSpikyMat =
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", phirot, phirot, 0));
2777 intSuppSpikyMat->SetName(Form(
"suppspikymat%d", shapeId));
2778 intSuppSpikyMat->RegisterYourself();
2781 TString compoShape = Form(
"suppcent%d", shapeId);
2782 compoShape += Form(
"+suppfinger%d:suppfingermat%d", shapeId, shapeId);
2783 compoShape += Form(
"+suppspiky%d:suppspikymat%d", shapeId, shapeId);
2784 TGeoCompositeShape* supportShape =
new TGeoCompositeShape(compoShape);
2787 return supportShape;
2790TGeoCompositeShape* V3Services::ibConvWireOutSupport()
2810 static const Double_t sIBGWireOutSuppWideIn = 22.5 *
sMm;
2811 static const Double_t sIBGWireOutSuppWideOut = 24.0 *
sMm;
2812 static const Double_t sIBGWireOutSuppWideTot = 31.0 *
sMm;
2813 static const Double_t sIBGWireOutSuppLenIn = 8.0 *
sMm;
2814 static const Double_t sIBGWireOutSuppLenOut = 9.3 *
sMm;
2815 static const Double_t sIBGWireOutSuppLength = 26.5 *
sMm;
2816 static const Double_t sIBGWireOutSuppLenToSide = 10.5 *
sMm;
2817 static const Double_t sIBGWireOutSuppThick = 3.0 *
sMm;
2818 static const Double_t sIBGWireOutSuppPhi = 30.0;
2819 static const Double_t sIBGWireOutSuppLenToPlate = 16.3 *
sMm;
2820 static const Double_t sIBGWireOutSuppWidToPlate = 27.75 *
sMm;
2821 static const Double_t sIBGWireOutSuppPlateWid = 17.0 *
sMm;
2824 Double_t xtru[8], ytru[8], xyarb[16];
2825 Double_t xlen, ylen, zlen;
2826 Double_t xpos, ypos, zpos;
2832 xtru[1] = sIBGWireOutSuppWideIn;
2835 xtru[3] = sIBGWireOutSuppWideOut;
2836 ytru[3] = sIBGWireOutSuppLenToSide;
2837 ytru[2] = ytru[3] - (xtru[3] - xtru[2]) * TMath::Tan((90 - sIBGWireOutSuppPhi) * TMath::DegToRad());
2839 ytru[4] = sIBGWireOutSuppLength - sIBGWireOutSuppLenIn;
2843 ytru[6] = sIBGWireOutSuppLength;
2847 TGeoXtru* ibWireOutSuppBase =
new TGeoXtru(2);
2848 ibWireOutSuppBase->DefinePolygon(8, xtru, ytru);
2849 ibWireOutSuppBase->DefineSection(0, 0);
2850 ibWireOutSuppBase->DefineSection(1, sIBGWireOutSuppThick);
2851 ibWireOutSuppBase->SetName(
"ibwireoutsuppbase");
2854 zlen = ibWireOutSuppBase->GetY(4) - ibWireOutSuppBase->GetY(3);
2855 ylen = zlen * TMath::Tan(sIBGWireOutSuppPhi * TMath::DegToRad());
2857 xyarb[0] = sIBGWireOutSuppThick / 2;
2860 xyarb[2] = -sIBGWireOutSuppThick / 2;
2863 xyarb[4] = xyarb[2];
2866 xyarb[6] = xyarb[0];
2869 xyarb[8] = sIBGWireOutSuppPlateWid / 2;
2872 xyarb[10] = -sIBGWireOutSuppPlateWid / 2;
2875 xyarb[12] = xyarb[10];
2878 xyarb[14] = xyarb[8];
2881 TGeoArb8* ibWireOutSuppArb =
new TGeoArb8(zlen / 2, xyarb);
2882 ibWireOutSuppArb->SetName(
"ibwireoutsupparb");
2884 xpos = ibWireOutSuppBase->GetX(3);
2885 ypos = (ibWireOutSuppBase->GetY(3) + ibWireOutSuppBase->GetY(4)) / 2;
2886 zpos = sIBGWireOutSuppThick / 2;
2887 TGeoCombiTrans* ibOutSuppArbMat =
new TGeoCombiTrans(xpos, ypos, zpos,
new TGeoRotation(
"", 0, -90, -90));
2888 ibOutSuppArbMat->SetName(
"iboutsupparbmat");
2889 ibOutSuppArbMat->RegisterYourself();
2892 xlen = sIBGWireOutSuppWideTot - sIBGWireOutSuppWidToPlate;
2893 ylen = sIBGWireOutSuppLength + sIBGWireOutSuppLenOut - ibWireOutSuppBase->GetY(4);
2894 zlen = sIBGWireOutSuppPlateWid;
2895 TGeoBBox* ibWireOutSuppPlate =
new TGeoBBox(xlen / 2, ylen / 2, zlen / 2);
2896 ibWireOutSuppPlate->SetName(
"ibwireoutsuppplate");
2898 xpos += (xyarb[15] - ibWireOutSuppPlate->GetDX());
2899 ypos += (ibWireOutSuppArb->GetDz() + ibWireOutSuppPlate->GetDY());
2900 TGeoTranslation* ibOutSuppPlateMat =
new TGeoTranslation(xpos, ypos, zpos);
2901 ibOutSuppPlateMat->SetName(
"iboutsuppplatemat");
2902 ibOutSuppPlateMat->RegisterYourself();
2905 TGeoCompositeShape* supportShape =
new TGeoCompositeShape(
"ibwireoutsuppbase+ibwireoutsupparb:iboutsupparbmat+ibwireoutsuppplate:iboutsuppplatemat");
2908 return supportShape;
2933 static const Double_t sIBServicesZIn = 35.0 *
sCm;
2934 static const Double_t sIBServicesZMid = 44.0 *
sCm;
2935 static const Double_t sIBServicesZOut = 253.45 *
sCm;
2937 static const Double_t sIBServicesR1max = 13.3 *
sCm;
2938 static const Double_t sIBServicesR2max = 43.53 *
sCm;
2940 static const Double_t sIBServicesCarbonThick = 0.2 *
sCm;
2941 static const Double_t sIBServicesCopperThick = 0.018 *
sCm;
2942 static const Double_t sIBServicesPolymerThick = 0.42 *
sCm;
2945 static const Double_t sOBServicesZIn = 83.0 *
sCm;
2946 static const Double_t sOBServicesZOut = 248.00 *
sCm;
2948 static const Double_t sOBServicesRmax = 47.2 *
sCm;
2950 static const Double_t sOBServicesTotalThick = 4.42 *
sCm;
2951 static const Double_t sOBServicesCarbonThick = 0.25 *
sCm;
2952 static const Double_t sOBServicesCopperThick = 0.23 *
sCm;
2953 static const Double_t sOBServicesPolymerThick = 3.8 *
sCm;
2955 static const Double_t sBeamPipeSupportRHole = 28.2 *
sMm;
2956 static const Double_t sBeamPipeSupportZPos = 182.1 *
sCm;
2957 static const Double_t sBeamPipeSupportXIB = 32.5 *
sCm;
2960 Double_t rmin, rmax, zlen, xpos, zpos;
2963 zlen = 0.9 * sOBServicesTotalThick;
2964 TGeoTube* obBPSuppHole =
new TGeoTube(0, sBeamPipeSupportRHole, zlen);
2965 obBPSuppHole->SetName(
"bpSuppHole");
2970 TGeoPcon* ibCarbonCon =
new TGeoPcon(0., 360., 3);
2971 rmin = sIBServicesR1max - (sIBServicesCarbonThick + 1.8 * 0.462);
2972 ibCarbonCon->DefineSection(0, sIBServicesZIn, rmin, sIBServicesR1max);
2973 ibCarbonCon->DefineSection(1, sIBServicesZMid, rmin, sIBServicesR1max);
2974 rmin = sIBServicesR2max - (sIBServicesCarbonThick + 0.462 / 1.8);
2975 ibCarbonCon->DefineSection(2, sIBServicesZOut, rmin, sIBServicesR2max);
2976 ibCarbonCon->SetName(
"ibCarbonCon");
2978 xpos = sBeamPipeSupportXIB;
2979 zpos = sBeamPipeSupportZPos;
2980 TGeoCombiTrans* ibHoleMatL =
new TGeoCombiTrans(xpos, 0, zpos,
new TGeoRotation(
"", 90, 90, -90));
2981 ibHoleMatL->SetName(
"ibHoleMatL");
2982 ibHoleMatL->RegisterYourself();
2984 TGeoCombiTrans* ibHoleMatR =
new TGeoCombiTrans(-xpos, 0, zpos,
new TGeoRotation(
"", 90, 90, -90));
2985 ibHoleMatR->SetName(
"ibHoleMatR");
2986 ibHoleMatR->RegisterYourself();
2988 TGeoCompositeShape* ibCarbonSh =
new TGeoCompositeShape(
"ibCarbonCon-bpSuppHole:ibHoleMatL-bpSuppHole:ibHoleMatR");
2991 TGeoPcon* ibCopperCon =
new TGeoPcon(0., 360., 3);
2992 rmin = ibCarbonCon->GetRmin(0);
2993 rmax = ibCarbonCon->GetRmax(0) - sIBServicesCarbonThick;
2994 ibCopperCon->DefineSection(0, sIBServicesZIn, rmin, rmax);
2995 ibCopperCon->DefineSection(1, sIBServicesZMid, rmin, rmax);
2996 rmin = ibCarbonCon->GetRmin(2);
2997 rmax = ibCarbonCon->GetRmax(2) - sIBServicesCarbonThick;
2998 ibCopperCon->DefineSection(2, sIBServicesZOut, rmin, rmax);
2999 ibCopperCon->SetName(
"ibCopperCon");
3001 TGeoCompositeShape* ibCopperSh =
new TGeoCompositeShape(
"ibCopperCon-bpSuppHole:ibHoleMatL-bpSuppHole:ibHoleMatR");
3004 TGeoPcon* ibPolyCon =
new TGeoPcon(0., 360., 3);
3005 rmin = ibCarbonCon->GetRmin(0);
3006 rmax = ibCopperCon->GetRmax(0) - sIBServicesCopperThick * 1.8;
3007 ibPolyCon->DefineSection(0, sIBServicesZIn, rmin, rmax);
3008 ibPolyCon->DefineSection(1, sIBServicesZMid, rmin, rmax);
3009 rmin = ibCopperCon->GetRmin(2);
3010 rmax = ibCopperCon->GetRmax(2) - sIBServicesCopperThick / 1.8;
3011 ibPolyCon->DefineSection(2, sIBServicesZOut, rmin, rmax);
3012 ibPolyCon->SetName(
"ibPolyCon");
3014 TGeoCompositeShape* ibPolySh =
new TGeoCompositeShape(
"ibPolyCon-bpSuppHole:ibHoleMatL-bpSuppHole:ibHoleMatR");
3017 TGeoPcon* ibWaterCon =
new TGeoPcon(0., 360., 3);
3018 rmin = ibCarbonCon->GetRmin(0);
3019 rmax = ibPolyCon->GetRmax(0) - sIBServicesPolymerThick * 1.8;
3020 ibWaterCon->DefineSection(0, sIBServicesZIn, rmin, rmax);
3021 ibWaterCon->DefineSection(1, sIBServicesZMid, rmin, rmax);
3022 rmin = ibPolyCon->GetRmin(2);
3023 rmax = ibPolyCon->GetRmax(2) - sIBServicesPolymerThick / 1.8;
3024 ibWaterCon->DefineSection(2, sIBServicesZOut, rmin, rmax);
3025 ibWaterCon->SetName(
"ibWaterCon");
3027 TGeoCompositeShape* ibWaterSh =
new TGeoCompositeShape(
"ibWaterCon-bpSuppHole:ibHoleMatL-bpSuppHole:ibHoleMatR");
3032 rmin = sOBServicesRmax - sOBServicesTotalThick;
3033 zlen = sOBServicesZOut - sOBServicesZIn;
3034 TGeoTube* obCarbonTub =
new TGeoTube(rmin, sOBServicesRmax, zlen / 2);
3035 obCarbonTub->SetName(
"obCarbonTub");
3037 xpos = (rmin + sOBServicesRmax) / 2;
3038 zpos = sBeamPipeSupportZPos - (sOBServicesZIn + zlen / 2);
3039 TGeoCombiTrans* obHoleMatL =
new TGeoCombiTrans(xpos, 0, zpos,
new TGeoRotation(
"", 90, 90, -90));
3040 obHoleMatL->SetName(
"obHoleMatL");
3041 obHoleMatL->RegisterYourself();
3043 TGeoCombiTrans* obHoleMatR =
new TGeoCombiTrans(-xpos, 0, zpos,
new TGeoRotation(
"", 90, 90, -90));
3044 obHoleMatR->SetName(
"obHoleMatR");
3045 obHoleMatR->RegisterYourself();
3047 TGeoCompositeShape* obCarbonSh =
new TGeoCompositeShape(
"obCarbonTub-bpSuppHole:obHoleMatL-bpSuppHole:obHoleMatR");
3050 rmax = sOBServicesRmax - sOBServicesCarbonThick;
3051 TGeoTube* obCopperTub =
new TGeoTube(rmin, rmax, zlen / 2);
3052 obCopperTub->SetName(
"obCopperTub");
3054 TGeoCompositeShape* obCopperSh =
new TGeoCompositeShape(
"obCopperTub-bpSuppHole:obHoleMatL-bpSuppHole:obHoleMatR");
3057 rmax -= sOBServicesCopperThick;
3058 TGeoTube* obPolyTub =
new TGeoTube(rmin, rmax, zlen / 2);
3059 obPolyTub->SetName(
"obPolyTub");
3061 TGeoCompositeShape* obPolySh =
new TGeoCompositeShape(
"obPolyTub-bpSuppHole:obHoleMatL-bpSuppHole:obHoleMatR");
3064 rmax -= sOBServicesPolymerThick;
3065 TGeoTube* obWaterTub =
new TGeoTube(rmin, rmax, zlen / 2);
3066 obWaterTub->SetName(
"obWaterTub");
3068 TGeoCompositeShape* obWaterSh =
new TGeoCompositeShape(
"obWaterTub-bpSuppHole:obHoleMatL-bpSuppHole:obHoleMatR");
3071 TGeoMedium* medCarbon = mgr->GetMedium(Form(
"%s_C4SERVICES$",
GetDetName()));
3072 TGeoMedium* medCopper = mgr->GetMedium(Form(
"%s_COPPER$",
GetDetName()));
3073 TGeoMedium* medPolymer = mgr->GetMedium(Form(
"%s_POLY4SERVICES$",
GetDetName()));
3074 TGeoMedium* medWater = mgr->GetMedium(Form(
"%s_WATER$",
GetDetName()));
3076 TGeoVolume* ibCarbonVol =
new TGeoVolume(
"ITSServicesCarbonIB", ibCarbonSh, medCarbon);
3077 ibCarbonVol->SetFillColor(kGray);
3078 ibCarbonVol->SetLineColor(kGray);
3080 TGeoVolume* ibCopperVol =
new TGeoVolume(
"ITSServicesCopperIB", ibCopperSh, medCopper);
3081 ibCopperVol->SetFillColor(kRed);
3082 ibCopperVol->SetLineColor(kRed);
3084 TGeoVolume* ibPolyVol =
new TGeoVolume(
"ITSServicesPolymerIB", ibPolySh, medPolymer);
3085 ibPolyVol->SetFillColor(kYellow);
3086 ibPolyVol->SetLineColor(kYellow);
3088 TGeoVolume* ibWaterVol =
new TGeoVolume(
"ITSServicesWaterIB", ibWaterSh, medWater);
3089 ibWaterVol->SetFillColor(kBlue);
3090 ibWaterVol->SetLineColor(kBlue);
3092 TGeoVolume* obCarbonVol =
new TGeoVolume(
"ITSServicesCarbonOB", obCarbonSh, medCarbon);
3093 obCarbonVol->SetFillColor(kGray);
3094 obCarbonVol->SetLineColor(kGray);
3096 TGeoVolume* obCopperVol =
new TGeoVolume(
"ITSServicesCopperOB", obCopperSh, medCopper);
3097 obCopperVol->SetFillColor(kRed);
3098 obCopperVol->SetLineColor(kRed);
3100 TGeoVolume* obPolyVol =
new TGeoVolume(
"ITSServicesPolymerOB", obPolySh, medPolymer);
3101 obPolyVol->SetFillColor(kYellow);
3102 obPolyVol->SetLineColor(kYellow);
3104 TGeoVolume* obWaterVol =
new TGeoVolume(
"ITSServicesWaterOB", obWaterSh, medWater);
3105 obWaterVol->SetFillColor(kBlue);
3106 obWaterVol->SetLineColor(kBlue);
3109 mother->AddNode(ibCarbonVol, 1,
new TGeoTranslation(0., 30., 0.));
3110 ibCarbonVol->AddNode(ibCopperVol, 1,
nullptr);
3111 ibCopperVol->AddNode(ibPolyVol, 1,
nullptr);
3112 ibPolyVol->AddNode(ibWaterVol, 1,
nullptr);
3114 zpos = sOBServicesZIn + zlen / 2;
3115 mother->AddNode(obCarbonVol, 1,
new TGeoTranslation(0., 30., zpos));
3116 obCarbonVol->AddNode(obCopperVol, 1,
nullptr);
3117 obCopperVol->AddNode(obPolyVol, 1,
nullptr);
3118 obPolyVol->AddNode(obWaterVol, 1,
nullptr);
3121void V3Services::obConvWire(TGeoVolume* mother,
const TGeoManager* mgr)
3143 static const Double_t sOBGWireOverallLen = 1014.0 *
sMm;
3144 static const Double_t sOBGWireDout = 1.0 *
sMm;
3147 static const Double_t sOBGWireSuppLenTot = 55.0 *
sMm;
3148 static const Double_t sOBGWireSuppLenWide = (16.5 + 18.0) *
sMm;
3149 static const Double_t sOBGWireSuppLenNarrow = 3.5 *
sMm;
3150 static const Double_t sOBGWireSuppWideMin = 15.0 *
sMm;
3151 static const Double_t sOBGWireSuppWideMax = 20.0 *
sMm;
3152 static const Double_t sOBGWireSuppThick = 1.8 *
sMm;
3153 static const Double_t sOBGWireSuppBulgeH = 5.0 *
sMm;
3154 static const Double_t sOBGWireSuppBulgeD = 5.9 *
sMm;
3155 static const Double_t sOBGWireSuppBulgeYdist = 21.0 *
sMm;
3156 static const Double_t sOBGWireSuppHoleYpos = 16.5 *
sMm;
3157 static const Double_t sOBGWireSuppCylDmin = 3.1 *
sMm;
3158 static const Double_t sOBGWireSuppCylDmax = 6.0 *
sMm;
3160 static const Double_t sOBGWireSuppZpos = 487.5 *
sMm;
3161 static const Double_t sOBGWireSuppXtrans = 4.8 *
sMm;
3162 static const Double_t sOBGWireSuppYtrans = 4.7 *
sMm;
3165 static const Double_t sOBGWireScrewDout = 3.0 *
sMm;
3166 static const Double_t sOBGWireScrewLen = 37.0 *
sMm;
3169 Double_t xtru[8], ytru[8];
3170 Double_t zlen, radius;
3171 Double_t xpos, ypos, zpos;
3174 zlen = sOBGWireOverallLen - 2 * sOBGWireScrewLen;
3175 TGeoTube* obWireSh =
new TGeoTube(0, sOBGWireDout / 2, zlen / 2);
3179 zpos = sOBGWireSuppLenTot - 0.5 * sOBGWireSuppCylDmax - sOBGWireSuppLenNarrow;
3181 xtru[0] = sOBGWireSuppWideMax / 2;
3184 ytru[1] = sOBGWireSuppLenWide;
3185 xtru[2] = sOBGWireSuppWideMin / 2;
3188 ytru[3] = ytru[2] + sOBGWireSuppLenNarrow;
3189 for (Int_t
j = 0;
j < 4;
j++) {
3190 xtru[4 +
j] = -xtru[3 -
j];
3191 ytru[4 +
j] = ytru[3 -
j];
3194 TGeoXtru* obWireSuppBase =
new TGeoXtru(2);
3195 obWireSuppBase->DefinePolygon(8, xtru, ytru);
3196 obWireSuppBase->DefineSection(0, 0);
3197 obWireSuppBase->DefineSection(1, sOBGWireSuppThick);
3198 obWireSuppBase->SetName(
"obwiresuppbase");
3201 TGeoTube* obWireSuppBulge =
new TGeoTube(0, sOBGWireSuppBulgeD / 2, sOBGWireSuppBulgeH / 2);
3202 obWireSuppBulge->SetName(
"obwiresuppbulge");
3204 ypos = sOBGWireSuppHoleYpos - 0.5 * sOBGWireSuppBulgeYdist;
3205 zpos = sOBGWireSuppThick + obWireSuppBulge->GetDz();
3206 TGeoTranslation* obWireSuppBulgeMat1 =
new TGeoTranslation(0, ypos, zpos);
3207 obWireSuppBulgeMat1->SetName(
"obwiresuppbulgemat1");
3208 obWireSuppBulgeMat1->RegisterYourself();
3210 ypos = sOBGWireSuppHoleYpos + 0.5 * sOBGWireSuppBulgeYdist;
3211 TGeoTranslation* obWireSuppBulgeMat2 =
new TGeoTranslation(0, ypos, zpos);
3212 obWireSuppBulgeMat2->SetName(
"obwiresuppbulgemat2");
3213 obWireSuppBulgeMat2->RegisterYourself();
3216 TGeoTube* obWireSuppCyl =
new TGeoTube(0, sOBGWireSuppCylDmax / 2, xtru[3]);
3217 obWireSuppCyl->SetName(
"obwiresuppcyl");
3220 zpos = obWireSuppCyl->GetRmax();
3221 TGeoCombiTrans* obWireSuppCylMat =
new TGeoCombiTrans(0, ypos, zpos,
new TGeoRotation(
"", 90, 90, 0));
3222 obWireSuppCylMat->SetName(
"obwiresuppcylmat");
3223 obWireSuppCylMat->RegisterYourself();
3226 TGeoTube* obWireSuppCylHol =
new TGeoTube(0, sOBGWireSuppCylDmin / 2, 1.05 * xtru[3]);
3227 obWireSuppCylHol->SetName(
"obwiresuppcylhol");
3229 TGeoCombiTrans* obWireSuppCylHolMat =
new TGeoCombiTrans(0, ypos, zpos,
new TGeoRotation(
"", 90, 90, 0));
3230 obWireSuppCylHolMat->SetName(
"obwiresuppcylholmat");
3231 obWireSuppCylHolMat->RegisterYourself();
3234 TGeoCompositeShape* obWireSuppSh =
new TGeoCompositeShape(
"obwiresuppbase+obwiresuppbulge:obwiresuppbulgemat1+obwiresuppbulge:obwiresuppbulgemat2+obwiresuppcyl:obwiresuppcylmat-obwiresuppcylhol:obwiresuppcylholmat");
3237 TGeoTube* obWireScrewSh =
new TGeoTube(0, sOBGWireScrewDout / 2, sOBGWireScrewLen / 2);
3240 TGeoMedium* medTungsten = mgr->GetMedium(Form(
"%s_TUNGSTEN$",
GetDetName()));
3241 TGeoMedium* medTitanium = mgr->GetMedium(Form(
"%s_TITANIUM$",
GetDetName()));
3242 TGeoMedium* medBrass = mgr->GetMedium(Form(
"%s_BRASS$",
GetDetName()));
3244 TGeoVolume* obWireVol =
new TGeoVolume(
"OBGammaConvWire", obWireSh, medTungsten);
3245 obWireVol->SetFillColor(kGray);
3246 obWireVol->SetLineColor(kGray);
3248 TGeoVolume* obWireSuppVol =
new TGeoVolume(
"OBGammaConvWireSupport", obWireSuppSh, medTitanium);
3249 obWireSuppVol->SetFillColor(kRed);
3250 obWireSuppVol->SetLineColor(kRed);
3252 TGeoVolume* obWireScrewVol =
new TGeoVolume(
"OBGammaConvWireScrew", obWireScrewSh, medBrass);
3253 obWireScrewVol->SetFillColor(kYellow);
3254 obWireScrewVol->SetLineColor(kYellow);
3257 TGeoVolumeAssembly* obGammaConvWire =
new TGeoVolumeAssembly(
"OBGammaConversionWire");
3259 zpos = sOBGWireSuppZpos;
3260 obGammaConvWire->AddNode(obWireSuppVol, 1,
new TGeoCombiTrans(0, 0, zpos,
new TGeoRotation(
"", 90, 90, 90)));
3261 obGammaConvWire->AddNode(obWireSuppVol, 2,
new TGeoCombiTrans(0, 0, -zpos,
new TGeoRotation(
"", 90, 90, 90)));
3263 xpos = obWireSuppCyl->GetRmax();
3265 zpos = 0.5 * sOBGWireOverallLen - obWireScrewSh->GetDz();
3266 obGammaConvWire->AddNode(obWireScrewVol, 1,
new TGeoTranslation(xpos, -ypos, zpos));
3267 obGammaConvWire->AddNode(obWireScrewVol, 2,
new TGeoTranslation(xpos, -ypos, -zpos));
3269 obGammaConvWire->AddNode(obWireVol, 1,
new TGeoTranslation(xpos, -ypos, 0));
3272 TGeoVolume* obConeVol = gGeoManager->GetVolume(
"OBConeSideA");
3274 LOG(error) <<
"OBConeSideA not defined in geometry, using default radius";
3275 radius = 292.5 *
sMm;
3277 radius = (
static_cast<TGeoPcon*
>(obConeVol->GetShape()))->GetRmax(2);
3280 xpos = radius - sOBGWireSuppXtrans;
3281 ypos = sOBGWireSuppLenTot + sOBGWireSuppYtrans;
3282 mother->AddNode(obGammaConvWire, 1,
new TGeoCombiTrans(xpos, ypos, 0,
new TGeoRotation(
"", 15, 0, 0)));
Creates an ALPIDE chip in simulation.
Definition of the GeometryTGeo class.
Definition of the V11Geometry class.
Definition of the V3Services class.
int getNumberOfStaves(int lay) const
static GeometryTGeo * Instance()
void insidePoint(const TGeoPcon *p, Int_t i1, Int_t i2, Int_t i3, Double_t Cthick, TGeoPcon *q, Int_t j1, Bool_t max) const
Double_t cosD(Double_t deg) const
Cosine function.
const char * GetDetName() const
Get detector name.
Double_t sinD(Double_t deg) const
static const Double_t sMm
Convert mm to TGeom's cm.
Double_t yFrom2Points(Double_t x0, Double_t y0, Double_t x1, Double_t y1, Double_t x) const
static const Double_t sCm
Convert cm to TGeom's cm.
This class defines the Geometry for the Services of the ITS Upgrade using TGeo.
~V3Services() override
Default destructor.
void createMBEndWheelsSideC(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
TGeoVolume * createCYSSAssembly(const TGeoManager *mgr=gGeoManager)
TGeoVolume * createIBEndWheelsSideC(const TGeoManager *mgr=gGeoManager)
void createOBConeSideA(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
void createMBEndWheelsSideA(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
void createOBCYSSCylinder(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
void createIBGammaConvWire(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
void createOBConeSideC(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
void createOBEndWheelsSideC(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
void createOBEndWheelsSideA(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
void createAllITSServices(TGeoVolume *motherVolume, const TGeoManager *mgr=gGeoManager)
void createOBGammaConvWire(TGeoVolume *mother, const TGeoManager *mgr=gGeoManager)
TGeoVolume * createIBEndWheelsSideA(const TGeoManager *mgr=gGeoManager)
GLfloat GLfloat GLfloat alpha
GLuint GLfloat GLfloat GLfloat GLfloat y1
GLuint GLfloat GLfloat GLfloat x1
GLuint const GLchar * name
const float3 float float x2
const float3 float float float float float y3
const float3 float float float float x3
const float3 float float float y2
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"