287 auto vmc = TVirtualMC::GetMC();
290 if (vmc ==
nullptr) {
291 throw std::runtime_error(
"VMC instance not initialized");
295 if (gGeoManager !=
nullptr && gGeoManager->GetVolume(
TOPNAME)) {
296 mCaveIsAvailable =
true;
304 AliMatrix(idrotm[2070], 90.0, 0.0, 90.0, 270.0, 0.0, 0.0);
306 AliMatrix(idrotm[2083], 170.0, 0.0, 90.0, 90.0, 80.0, 0.0);
307 AliMatrix(idrotm[2084], 170.0, 180.0, 90.0, 90.0, 80.0, 180.0);
308 AliMatrix(idrotm[2085], 90.0, 180.0, 90.0, 90.0, 0.0, 0.0);
310 AliMatrix(idrotm[2086], 80.0, 0.0, 90.0, 90., -10.0, 0.0);
311 AliMatrix(idrotm[2096], 100.0, 0.0, 90.0, 90., 10.0, 0.0);
313 AliMatrix(idrotm[2087], -100.0, 0.0, 90.0, 270., -10.0, 0.0);
314 AliMatrix(idrotm[2097], -80.0, 0.0, 90.0, 270., 10.0, 0.0);
317 AliMatrix(idrotm[2088], 90.0, 180.0, 90.0, 270., 0.0, 0.0);
318 AliMatrix(idrotm[2089], 90.0, -90.0, 90.0, 0., 0.0, 0.0);
320 AliMatrix(idrotm[2090], 90.0, 0.0, 0.0, 0., 90.0, 90.0);
321 AliMatrix(idrotm[2091], 0.0, 0.0, 90.0, 90., 90.0, 0.0);
327 AliMatrix(idrotm[2003], 0.0, 0.0, 90.0, 130.0, 90.0, 40.0);
328 AliMatrix(idrotm[2004], 180.0, 0.0, 90.0, 130.0, 90.0, 40.0);
329 AliMatrix(idrotm[2005], 180.0, 0.0, 90.0, 150.0, 90.0, 240.0);
330 AliMatrix(idrotm[2006], 0.0, 0.0, 90.0, 150.0, 90.0, 240.0);
331 AliMatrix(idrotm[2007], 0.0, 0.0, 90.0, 170.0, 90.0, 80.0);
332 AliMatrix(idrotm[2008], 180.0, 0.0, 90.0, 190.0, 90.0, 280.0);
333 AliMatrix(idrotm[2009], 180.0, 0.0, 90.0, 170.0, 90.0, 80.0);
334 AliMatrix(idrotm[2010], 0.0, 0.0, 90.0, 190.0, 90.0, 280.0);
335 AliMatrix(idrotm[2011], 0.0, 0.0, 90.0, 350.0, 90.0, 260.0);
336 AliMatrix(idrotm[2012], 180.0, 0.0, 90.0, 350.0, 90.0, 260.0);
337 AliMatrix(idrotm[2013], 180.0, 0.0, 90.0, 10.0, 90.0, 100.0);
338 AliMatrix(idrotm[2014], 0.0, 0.0, 90.0, 10.0, 90.0, 100.0);
339 AliMatrix(idrotm[2015], 0.0, 0.0, 90.0, 30.0, 90.0, 300.0);
340 AliMatrix(idrotm[2016], 180.0, 0.0, 90.0, 30.0, 90.0, 300.0);
341 AliMatrix(idrotm[2017], 180.0, 0.0, 90.0, 50.0, 90.0, 140.0);
342 AliMatrix(idrotm[2018], 0.0, 0.0, 90.0, 50.0, 90.0, 140.0);
344 AliMatrix(idrotm[2019], 180.0, 0.0, 90.0, 130.0, 90.0, 220.0);
345 AliMatrix(idrotm[2020], 180.0, 0.0, 90.0, 50.0, 90.0, 320.0);
346 AliMatrix(idrotm[2021], 180.0, 0.0, 90.0, 150.0, 90.0, 60.0);
347 AliMatrix(idrotm[2022], 180.0, 0.0, 90.0, 30.0, 90.0, 120.0);
348 AliMatrix(idrotm[2023], 180.0, 0.0, 90.0, 170.0, 90.0, 260.0);
349 AliMatrix(idrotm[2024], 180.0, 0.0, 90.0, 190.0, 90.0, 100.0);
350 AliMatrix(idrotm[2025], 180.0, 0.0, 90.0, 350.0, 90.0, 80.0);
351 AliMatrix(idrotm[2026], 180.0, 0.0, 90.0, 10.0, 90.0, 280.0);
353 AliMatrix(idrotm[2100], 180.0, 0.0, 90.0, 210.0, 90.0, 120.0);
354 AliMatrix(idrotm[2101], 180.0, 0.0, 90.0, 330.0, 90.0, 60.0);
356 AliMatrix(idrotm[2027], 0.0, 0.0, 90.0, 50.0, 90.0, 320.0);
357 AliMatrix(idrotm[2028], 0.0, 0.0, 90.0, 150.0, 90.0, 60.0);
358 AliMatrix(idrotm[2029], 0.0, 0.0, 90.0, 30.0, 90.0, 120.0);
359 AliMatrix(idrotm[2030], 0.0, 0.0, 90.0, 10.0, 90.0, 280.0);
360 AliMatrix(idrotm[2031], 0.0, 0.0, 90.0, 170.0, 90.0, 260.0);
361 AliMatrix(idrotm[2032], 0.0, 0.0, 90.0, 190.0, 90.0, 100.0);
362 AliMatrix(idrotm[2033], 0.0, 0.0, 90.0, 350.0, 90.0, 80.0);
369 float pbox[3], ptrap[11], ptrd1[4], ppgon[10];
377 const TGeoMedium* kMedAir = gGeoManager->GetMedium(
"FRAME_Air");
378 const TGeoMedium* kMedSteel = gGeoManager->GetMedium(
"FRAME_Steel");
379 const TGeoMedium* kMedAlu = gGeoManager->GetMedium(
"FRAME_Aluminum");
380 const int kAir = mAirMedID;
381 const int kSteel = mSteelMedID;
382 const int kAlu = mAluMedID;
383 const int kG10 = mG10MedID;
385 const float kEps = 0.01;
386 const float krad2deg = 180. / TMath::Pi();
387 const float kdeg2rad = 1. / krad2deg;
388 const float sin10 = TMath::Sin(10. * kdeg2rad);
389 const float tan10 = TMath::Tan(10. * kdeg2rad);
390 const float cos10 = TMath::Cos(10. * kdeg2rad);
393 const float hR = 286.00;
395 const float iFrH = 119.00;
398 const float dHz = 113. / cos10 - 0.3;
401 const float dymodU[3] = {71.5, 228.5, 339.5};
403 const float dymodL[3] = {50.0, 175.0, 297.5};
406 const float dymodO[5] = {10., -40., 20., -27.1, 18.4};
408 float dymodW[5] = {70., 73.6, 224.5, 231.4, 340.2};
409 for (
int ii = 0; ii < 5; ii++) {
410 dymodW[ii] = dymodW[ii] - 3. * TMath::Tan(dymodO[ii] * kdeg2rad);
413 const float ringH = 6.00;
414 const float ringW = 10.00;
415 const float ringT = 1.00;
417 const float longH = 6.00;
418 const float longW = 4.00;
422 const float dext = sin10 * longW / 2. + 0.01;
424 const float iFrH0 = iFrH + dext;
427 const float longLI = 615.;
428 const float zE = 376.5;
432 TGeoPgon* shB77A =
new TGeoPgon(0., 360., 18, 2);
433 shB77A->SetName(
"shB77A");
434 shB77A->DefineSection(0, -zE, 280., 422.15);
435 shB77A->DefineSection(1, zE, 280., 422.15);
436 TGeoBBox* shB77B =
new TGeoBBox(3.42, 2., 375.5);
437 shB77B->SetName(
"shB77B");
438 TGeoTranslation* trB77A =
new TGeoTranslation(
"trB77A", +283.32, 0., 0.);
439 TGeoTranslation* trB77B =
new TGeoTranslation(
"trB77B", -283.32, 0., 0.);
440 trB77A->RegisterYourself();
441 trB77B->RegisterYourself();
442 TGeoPgon* shB77C =
new TGeoPgon(60., 360., 18, 2);
443 shB77C->SetName(
"shB77C");
444 shB77C->DefineSection(0, -zE, 422.15, 423.70);
445 shB77C->DefineSection(1, zE, 422.15, 423.70);
446 TGeoCompositeShape* shB77 =
new TGeoCompositeShape(
"shB77",
"shB77A+shB77B:trB77A+shB77B:trB77B+shB77C");
447 TGeoVolume* voB77 =
new TGeoVolume(
"B077", shB77, gGeoManager->GetMedium(
"FRAME_Air"));
448 voB77->SetName(
"B077");
449 vmc->Gspos(
"B077", 1,
TOPNAME, 0., 30., 0., 0,
"ONLY");
452 TGeoPgon* shBREFA =
new TGeoPgon(0.0, 360., 18, 2);
453 shBREFA->DefineSection(0, -376., 280., 280.1);
454 shBREFA->DefineSection(1, 376., 280., 280.1);
455 shBREFA->SetName(
"shBREFA");
456 TGeoCompositeShape* shBREF1 =
new TGeoCompositeShape(
"shBREF1",
"shBREFA-(shB77B:trB77A+shB77B:trB77B)");
457 TGeoVolume* voBREF =
new TGeoVolume(
"BREF1", shBREF1, gGeoManager->GetMedium(
"FRAME_Air"));
458 voBREF->SetVisibility(0);
459 vmc->Gspos(
"BREF1", 1,
"B077", 0., 0., 0., 0,
"ONLY");
470 dz = 2. * 410.2 * sin10 - 2. * dol * cos10 - 2. * doh * tan10;
472 float l2 = dz / 2. + 2. * doh * tan10;
474 TGeoVolumeAssembly* asBI42 =
new TGeoVolumeAssembly(
"BI42");
476 ptrd1[0] = l2 - 0.6 * tan10;
480 vmc->Gsvolu(
"BIH142",
"TRD1", kSteel, ptrd1, 4);
482 ptrd1[1] = l1 + 0.6 * tan10;
485 vmc->Gsvolu(
"BIH242",
"TRD1", kSteel, ptrd1, 4);
488 ptrd1[0] = l1 + 0.6 * tan10;
489 ptrd1[1] = l2 - 0.6 * tan10;
492 vmc->Gsvolu(
"BIV42",
"TRD1", kSteel, ptrd1, 4);
494 asBI42->AddNode(gGeoManager->GetVolume(
"BIV42"), 1,
new TGeoTranslation(0., 0., 0.0));
495 asBI42->AddNode(gGeoManager->GetVolume(
"BIH142"), 1,
new TGeoTranslation(0., 0., 3.7));
496 asBI42->AddNode(gGeoManager->GetVolume(
"BIH242"), 1,
new TGeoTranslation(0., 0., -3.7));
505 vmc->Gsvolu(
"B033",
"BOX", kSteel, pbox, 3);
508 vmc->Gsvolu(
"B034",
"BOX", kAir, pbox, 3);
509 vmc->Gspos(
"B034", 1,
"B033", 0., 0., 0., 0,
"ONLY");
516 pbox[2] = longLI / 2.;
517 vmc->Gsvolu(
"B080",
"BOX", kSteel, pbox, 3);
520 pbox[2] = longLI / 2.;
521 vmc->Gsvolu(
"B081",
"BOX", kAir, pbox, 3);
522 vmc->Gspos(
"B081", 1,
"B080", 0., 0., 0., 0,
"ONLY");
527 pbox[2] = longLI / 2.;
528 vmc->Gsvolu(
"BREF2",
"BOX", kAir, pbox, 3);
529 vmc->Gspos(
"BREF2", 1,
"B080", 3.37 - 0.05, 0., 0., 0,
"ONLY");
531 vmc->Gspos(
"B080", 1,
"B077", 283.25, 0., 0., 0,
"ONLY");
532 vmc->Gspos(
"B080", 2,
"B077", -283.25, 0., 0., idrotm[2088],
"ONLY");
537 float h, d, dq,
x, theta;
539 h = (dymodU[1] - dymodU[0] - 2. * dol) * .999;
541 dq =
h *
h + dz * dz;
543 x = TMath::Sqrt((dz * dz - d * d) / dq + d * d *
h *
h / dq / dq) + d *
h / dq;
545 theta = krad2deg * TMath::ACos(
x);
559 vmc->Gsvolu(
"B047",
"TRAP", kSteel, ptrap, 11);
561 ptrap[4] = (dol -
ds) /
x;
566 vmc->Gsvolu(
"B048",
"TRAP", kAir, ptrap, 11);
567 vmc->Gspos(
"B048", 1,
"B047", 0.0, 0.0, 0., 0,
"ONLY");
576 h = (2. * dymodU[0] - 2. * dol) * .999;
583 vmc->Gsvolu(
"BM49",
"BOX ", kAir, pbox, 3);
585 dq =
h *
h + dz * dz;
586 x = TMath::Sqrt((dz * dz - d * d) / dq + d * d *
h *
h / dq / dq) + d *
h / dq;
587 theta = krad2deg * TMath::ACos(
x);
589 ptrap[0] = dz / 2. - kEps;
592 ptrap[3] = doh - kEps;
599 vmc->Gsvolu(
"B049",
"TRAP", kSteel, ptrap, 11);
600 ptrap[0] = ptrap[0] - kEps;
601 ptrap[3] = (doh -
ds);
602 ptrap[4] = (dol -
ds) /
x;
607 vmc->Gsvolu(
"B050",
"TRAP", kAir, ptrap, 11);
608 vmc->Gspos(
"B050", 1,
"B049", 0.0, 0.0, 0., 0,
"ONLY");
609 vmc->Gspos(
"B049", 1,
"BM49", 0.0, 0.0, 0., 0,
"ONLY");
611 float dd1 = d * TMath::Tan(theta * kdeg2rad);
612 float dd2 = d / TMath::Tan(2. * theta * kdeg2rad);
613 float theta2 = TMath::ATan(TMath::Abs(dd2 - dd1) / d / 2.);
616 ptrap[1] = theta2 * krad2deg;
619 ptrap[4] = (dz / 2. /
x - dd1 - dd2) / 2.;
623 ptrap[8] = dz / 4. /
x;
626 vmc->Gsvolu(
"B051",
"TRAP", kSteel, ptrap, 11);
627 float ddx0 = ptrap[8];
629 float dd1s = dd1 * (1. - 2. *
ds / d);
630 float dd2s = dd2 * (1. - 2. *
ds / d);
631 float theta2s = TMath::ATan(TMath::Abs(dd2s - dd1s) / (d - 2. *
ds) / 2.);
634 ptrap[1] = theta2s * krad2deg;
637 ptrap[4] = ptrap[4] +
ds / d / 2. * (dd1 + dd2);
641 ptrap[8] = ptrap[8] -
ds / 2. / d * (dd1 + dd2);
644 vmc->Gsvolu(
"B052",
"TRAP", kAir, ptrap, 11);
645 vmc->Gspos(
"B052", 1,
"B051", 0.0, 0.0, 0., 0,
"ONLY");
647 float ddx, ddz, drx, drz, rtheta;
649 AliMatrix(idrotm[2001], -theta + 180, 0.0, 90.0, 90.0, 90. - theta, 0.0);
650 rtheta = (90. - theta) * kdeg2rad;
651 ddx = -ddx0 - dol * TMath::Tan(theta2);
654 drx = TMath::Cos(rtheta) * ddx + TMath::Sin(rtheta) * ddz + pbox[0];
655 drz = -TMath::Sin(rtheta) * ddx + TMath::Cos(rtheta) * ddz - pbox[2];
656 vmc->Gspos(
"B051", 1,
"BM49", drx, 0.0, drz, idrotm[2001],
"ONLY");
658 AliMatrix(idrotm[2002], -theta, 0.0, 90.0, 90.0, 270. - theta, 0.0);
659 rtheta = (270. - theta) * kdeg2rad;
661 drx = TMath::Cos(rtheta) * ddx + TMath::Sin(rtheta) * ddz - pbox[0];
662 drz = -TMath::Sin(rtheta) * ddx + TMath::Cos(rtheta) * ddz + pbox[2];
663 vmc->Gspos(
"B051", 2,
"BM49", drx, 0.0, drz, idrotm[2002],
"ONLY");
668 h = ((dymodU[2] - dymodU[1]) - 2. * dol) * .999;
669 dq =
h *
h + dz * dz;
670 x = TMath::Sqrt((dz * dz - d * d) / dq + d * d *
h *
h / dq / dq) + d *
h / dq;
671 theta = krad2deg * TMath::ACos(
x);
682 vmc->Gsvolu(
"B045",
"TRAP", kSteel, ptrap, 11);
684 TGeoTrap* b045shape =
new TGeoTrap(
"B045shape", ptrap[0], ptrap[1], ptrap[2], ptrap[3], ptrap[4], ptrap[5], ptrap[6], ptrap[7], ptrap[8], ptrap[9], ptrap[10]);
685 double cutAngle = 43 * TMath::DegToRad();
686 double trd1par[4] = {0., 15 + 0.1, 15, 15 * TMath::Tan(cutAngle) * 0.5 + 0.45};
687 TGeoTranslation* trnsB045cut =
new TGeoTranslation(
"trnsB045cut", ptrap[0] * TMath::Tan(ptrap[1] * TMath::DegToRad()) - trd1par[2] + ptrap[4], -ptrap[3] + 0.5, ptrap[0] + 0.6);
688 TGeoRotation* rotB045cut =
new TGeoRotation(
"rotB045cut");
689 rotB045cut->RotateZ(90);
690 TGeoCombiTrans* moveB045cut =
new TGeoCombiTrans(*trnsB045cut, *rotB045cut);
691 moveB045cut->SetName(
"moveB045cut");
692 moveB045cut->RegisterYourself();
695 ptrap[4] = (dol -
ds) /
x;
701 vmc->Gsvolu(
"B046",
"TRAP", kAir, ptrap, 11);
702 vmc->Gspos(
"B046", 1,
"B045", 0.0, 0.0, 0., 0,
"ONLY");
704 TGeoTrd1* cutOnB045 =
new TGeoTrd1(
"cutOnB045", trd1par[0], trd1par[1], trd1par[2], trd1par[3]);
706 TGeoCompositeShape* b045shapeCut =
new TGeoCompositeShape(
"B045shapeCut",
"(B045shape)-(cutOnB045:moveB045cut)");
707 TGeoVolume* B045cutVol =
new TGeoVolume(
"B045cut", b045shapeCut, kMedSteel);
712 float rd = 405.5 + 0.51;
713 dz = (dymodU[1] + dymodU[0]) / 2.;
714 float dz2 = (dymodU[1] + dymodU[2]) / 2.;
721 dx =
rd * TMath::Sin(phi * kdeg2rad);
722 dy =
rd * TMath::Cos(phi * kdeg2rad);
724 vmc->Gspos(
"B045", 1,
"B077", -dx, dy, dz2, idrotm[2021],
"ONLY");
725 vmc->Gspos(
"B045", 2,
"B077", -dx, dy, -dz2, idrotm[2028],
"ONLY");
726 vmc->Gspos(
"B045", 3,
"B077", dx, dy, dz2, idrotm[2022],
"ONLY");
727 vmc->Gspos(
"B045", 4,
"B077", dx, dy, -dz2, idrotm[2029],
"ONLY");
729 vmc->Gspos(
"B045", 5,
"B077", dx, -dy, -dz2, idrotm[2021],
"ONLY");
730 vmc->Gspos(
"B045cut", 6,
"B077", dx, -dy, +dz2, idrotm[2028],
"ONLY");
731 vmc->Gspos(
"B045", 7,
"B077", -dx, -dy, -dz2, idrotm[2022],
"ONLY");
732 vmc->Gspos(
"B045", 8,
"B077", -dx, -dy, +dz2, idrotm[2029],
"ONLY");
734 vmc->Gspos(
"B047", 1,
"B077", -dx, -dy, dz, idrotm[2022],
"ONLY");
735 vmc->Gspos(
"B047", 2,
"B077", -dx, -dy, -dz, idrotm[2029],
"ONLY");
737 vmc->Gspos(
"B047", 3,
"B077", dx, -dy, dz, idrotm[2021],
"ONLY");
738 vmc->Gspos(
"B047", 4,
"B077", dx, -dy, -dz, idrotm[2028],
"ONLY");
740 vmc->Gspos(
"BM49", 1,
"B077", dx, -dy, 0., idrotm[2101],
"ONLY");
741 vmc->Gspos(
"BM49", 2,
"B077", -dx, -dy, 0., idrotm[2100],
"ONLY");
748 dx =
rd * TMath::Sin(phi * kdeg2rad);
749 dy =
rd * TMath::Cos(phi * kdeg2rad);
751 vmc->Gspos(
"B047", 13,
"B077", -dx, -dy, dz, idrotm[2008],
"ONLY");
752 vmc->Gspos(
"B047", 14,
"B077", -dx, -dy, -dz, idrotm[2010],
"ONLY");
753 vmc->Gspos(
"B047", 15,
"B077", dx, -dy, dz, idrotm[2012],
"ONLY");
754 vmc->Gspos(
"B047", 16,
"B077", dx, -dy, -dz, idrotm[2011],
"ONLY");
756 vmc->Gspos(
"B045", 11,
"B077", -dx, dy, dz2, idrotm[2023],
"ONLY");
757 vmc->Gspos(
"B045", 12,
"B077", -dx, dy, -dz2, idrotm[2031],
"ONLY");
758 vmc->Gspos(
"B045", 13,
"B077", dx, dy, dz2, idrotm[2026],
"ONLY");
759 vmc->Gspos(
"B045", 14,
"B077", dx, dy, -dz2, idrotm[2030],
"ONLY");
761 vmc->Gspos(
"B045", 15,
"B077", -dx, -dy, dz2, idrotm[2024],
"ONLY");
762 vmc->Gspos(
"B045", 16,
"B077", -dx, -dy, -dz2, idrotm[2032],
"ONLY");
763 vmc->Gspos(
"B045", 17,
"B077", dx, -dy, dz2, idrotm[2025],
"ONLY");
764 vmc->Gspos(
"B045", 18,
"B077", dx, -dy, -dz2, idrotm[2033],
"ONLY");
766 vmc->Gspos(
"BM49", 3,
"B077", dx, -dy, 0., idrotm[2025],
"ONLY");
767 vmc->Gspos(
"BM49", 4,
"B077", -dx, -dy, 0., idrotm[2024],
"ONLY");
775 ptrd1[0] = (hR - longH / 2. - dext) * tan10;
776 ptrd1[1] = (hR - longH / 2. + iFrH0) * tan10;
778 ptrd1[3] = iFrH0 / 2.;
779 float dd = longW / 2. * cos10 + 0.1;
780 TGeoTrd1* shTRD1 =
new TGeoTrd1(
"shTRD1", ptrd1[0], ptrd1[1], ptrd1[2], ptrd1[3]);
781 TGeoBBox* shBox =
new TGeoBBox(
"shBox", 50., zE + 10., 1.);
782 TGeoRotation* rot1 =
new TGeoRotation(
"urot1", 100., 0., 90., 90., 10., 0.);
783 TGeoRotation* rot2 =
new TGeoRotation(
"urot2", 80., 0., 90., 90., -10., 0.);
784 float trotDz = iFrH0 / 2. + 1.;
785 float trotDx = 402. * tan10;
786 TGeoCombiTrans* trot1 =
new TGeoCombiTrans(-trotDx, 0., trotDz, rot2);
787 TGeoCombiTrans* trot2 =
new TGeoCombiTrans(+trotDx, 0., trotDz, rot1);
788 TGeoUnion* uni =
new TGeoUnion(shBox, shBox, trot1, trot2);
789 TGeoCompositeShape* shU =
new TGeoCompositeShape(
"shU", uni);
790 TGeoSubtraction* sub =
new TGeoSubtraction(shTRD1, shU,
nullptr,
nullptr);
791 TGeoCompositeShape* shCS =
new TGeoCompositeShape(
"shCS", sub);
793 float r = (hR - longH / 2. + iFrH0 / 2.) - dext;
798 float rout2 = 412.3 - 2. * sin10 + 0.25;
801 for (
i = 0;
i < 18;
i++) {
809 snprintf(
name, 16,
"BSEGMO%d", mod);
811 TGeoVolume* voTRD1 =
new TGeoVolume(
name, shCS, kMedAir);
814 float phi1 =
i * 20.;
815 float phi2 = 270. + phi1;
819 dx = TMath::Sin(phi1 * kdeg2rad) *
r;
820 dy = -TMath::Cos(phi1 * kdeg2rad) *
r;
823 snprintf(nameR, 16,
"B43_Rot_%d",
i);
824 TGeoRotation* rot =
new TGeoRotation(nameR, 90.0, phi1, 0., 0., 90., phi2);
825 AliMatrix(idrotm[2034 +
i], 90.0, phi1, 0., 0., 90., phi2);
826 TGeoVolume* vol77 = gGeoManager->GetVolume(
"B077");
827 vol77->AddNode(voTRD1, 1,
new TGeoCombiTrans(dx, dy, 0., rot));
832 dx = TMath::Sin(phi1 * kdeg2rad) * rout1;
833 dy = -TMath::Cos(phi1 * kdeg2rad) * rout1;
834 for (
j = 0;
j < 3;
j++) {
836 TGeoVolume* vol = gGeoManager->GetVolume(
"B077");
837 vol->AddNode(asBI42, 6 *
i + 2 *
j + 1,
new TGeoCombiTrans(dx, dy, dz, rot));
838 vol->AddNode(asBI42, 6 *
i + 2 *
j + 2,
new TGeoCombiTrans(dx, dy, -dz, rot));
843 AliMatrix(idrotm[2052 +
i], 90.0, phi1, 90., phi2, 0., 0.);
845 dx = TMath::Sin(phi1 * kdeg2rad) * rout2;
846 dy = -TMath::Cos(phi1 * kdeg2rad) * rout2;
847 vmc->Gspos(
"B033",
i + 1,
"B077", dx, dy, 0., idrotm[2052 +
i],
"ONLY");
859 ptrd1[0] = (hR - longH / 2.) * tan10 - dd;
860 ptrd1[1] = (hR + longH / 2.) * tan10 - dd;
861 ptrd1[2] = ringW / 2.;
862 ptrd1[3] = ringH / 2.;
864 vmc->Gsvolu(
"B072",
"TRD1", kSteel, ptrd1, 4);
866 ptrd1[0] = (hR - longH / 2. + 0.5) * tan10 - dd;
867 ptrd1[1] = (hR + longH / 2. - 0.5) * tan10 - dd;
868 ptrd1[2] = ringW / 2. - 0.5;
869 ptrd1[3] = ringH / 2. - 0.5;
871 vmc->Gsvolu(
"B073",
"TRD1", kAir, ptrd1, 4);
872 vmc->Gspos(
"B073", 1,
"B072", 0., 0., 0., 0,
"ONLY");
876 TGeoVolumeAssembly* asBI72 =
new TGeoVolumeAssembly(
"BI72");
878 float rIB1 = hR + ringH / 2.;
879 float rIB2 = hR - ringH / 2.;
880 ptrd1[0] = (rIB1 - ringT / 2.) * tan10 - dd;
881 ptrd1[1] = (rIB1)*tan10 - dd;
882 ptrd1[2] = ringH / 2.;
883 ptrd1[3] = ringT / 4.;
884 vmc->Gsvolu(
"BIH172",
"TRD1", kSteel, ptrd1, 4);
885 ptrd1[0] = (rIB2)*tan10 - dd;
886 ptrd1[1] = (rIB2 + ringT / 2.) * tan10 - dd;
887 ptrd1[2] = ringH / 2.;
888 ptrd1[3] = ringT / 4.;
889 vmc->Gsvolu(
"BIH272",
"TRD1", kSteel, ptrd1, 4);
892 ptrd1[0] = (rIB2 + ringT / 2.) * tan10 - dd;
893 ptrd1[1] = (rIB1 - ringT / 2.) * tan10 - dd;
895 ptrd1[3] = (ringH - ringT) / 2.;
896 vmc->Gsvolu(
"BIV72",
"TRD1", kSteel, ptrd1, 4);
898 asBI72->AddNode(gGeoManager->GetVolume(
"BIV72"), 1,
new TGeoTranslation(0., 0., 0.));
899 asBI72->AddNode(gGeoManager->GetVolume(
"BIH172"), 1,
new TGeoTranslation(0., 0., (ringH / 2. - ringT / 4.)));
900 asBI72->AddNode(gGeoManager->GetVolume(
"BIH272"), 1,
new TGeoTranslation(0., 0., -(ringH / 2. - ringT / 4.)));
908 createWebFrame(
"B063", dHz, dymodO[0], 10.);
909 createWebFrame(
"B163", dHz, dymodO[1], 10.);
910 createWebFrame(
"B263", dHz, dymodO[2], 10.);
911 createWebFrame(
"B363", dHz, dymodO[3], 10.);
912 createWebFrame(
"B463", dHz, dymodO[4], 10.);
914 dz = -iFrH0 / 2. + ringH / 2. + dext;
916 float dz0 = -iFrH0 / 2. + longH + 113. / 2. + dext - 0.1;
917 float dx0 = (hR + iFrH / 2.) * tan10 - longW / 4. * cos10 - 0.065;
918 for (jmod = 0; jmod < 18; jmod++) {
921 for (
i = 0;
i < 3;
i++) {
923 vmc->Gspos(
"B072", 6 * jmod +
i + 1, module[jmod], 0, dymodL[
i], dz, 0,
"ONLY");
924 vmc->Gspos(
"B072", 6 * jmod +
i + 4, module[jmod], 0, -dymodL[
i], dz, idrotm[2070],
"ONLY");
926 TGeoVolume* vol = gGeoManager->GetVolume(module[jmod]);
927 vol->AddNode(asBI72, 6 * jmod +
i + 1,
new TGeoTranslation(0, dymodL[
i], dz));
928 vol->AddNode(asBI72, 6 * jmod +
i + 4,
new TGeoTranslation(0, -dymodL[
i], dz));
935 dy = dymodW[0] - (dHz / 2.) * TMath::Tan(dymodO[0] * kdeg2rad);
937 for (jmod = 0; jmod < 18; jmod++) {
938 vmc->Gspos(
"B063I", 4 * jmod + 1, module[jmod], dx0, dy, dz0, idrotm[2096],
"ONLY");
939 vmc->Gspos(
"B063", 4 * jmod + 2, module[jmod], dx0, -dy, dz0, idrotm[2097],
"ONLY");
940 vmc->Gspos(
"B063I", 4 * jmod + 3, module[jmod], -dx0, -dy, dz0, idrotm[2087],
"ONLY");
941 vmc->Gspos(
"B063", 4 * jmod + 4, module[jmod], -dx0, dy, dz0, idrotm[2086],
"ONLY");
944 dy = dymodW[1] - (dHz / 2.) * TMath::Tan(dymodO[1] * kdeg2rad);
946 for (jmod = 0; jmod < 18; jmod++) {
947 vmc->Gspos(
"B163I", 4 * jmod + 1, module[jmod], dx0, -dy, dz0, idrotm[2096],
"ONLY");
948 vmc->Gspos(
"B163", 4 * jmod + 2, module[jmod], dx0, dy, dz0, idrotm[2097],
"ONLY");
949 vmc->Gspos(
"B163I", 4 * jmod + 3, module[jmod], -dx0, dy, dz0, idrotm[2087],
"ONLY");
950 vmc->Gspos(
"B163", 4 * jmod + 4, module[jmod], -dx0, -dy, dz0, idrotm[2086],
"ONLY");
953 dy = dymodW[2] - (dHz / 2) * TMath::Tan(dymodO[2] * kdeg2rad);
955 for (jmod = 0; jmod < 18; jmod++) {
956 vmc->Gspos(
"B263I", 4 * jmod + 1, module[jmod], dx0, dy, dz0, idrotm[2096],
"ONLY");
957 vmc->Gspos(
"B263", 4 * jmod + 2, module[jmod], dx0, -dy, dz0, idrotm[2097],
"ONLY");
958 vmc->Gspos(
"B263I", 4 * jmod + 3, module[jmod], -dx0, -dy, dz0, idrotm[2087],
"ONLY");
959 vmc->Gspos(
"B263", 4 * jmod + 4, module[jmod], -dx0, dy, dz0, idrotm[2086],
"ONLY");
962 dy = dymodW[3] - (dHz / 2.) * TMath::Tan(dymodO[3] * kdeg2rad);
964 for (jmod = 0; jmod < 18; jmod++) {
965 vmc->Gspos(
"B363I", 4 * jmod + 1, module[jmod], dx0, -dy, dz0, idrotm[2096],
"ONLY");
966 vmc->Gspos(
"B363", 4 * jmod + 2, module[jmod], dx0, dy, dz0, idrotm[2097],
"ONLY");
967 vmc->Gspos(
"B363I", 4 * jmod + 3, module[jmod], -dx0, dy, dz0, idrotm[2087],
"ONLY");
968 vmc->Gspos(
"B363", 4 * jmod + 4, module[jmod], -dx0, -dy, dz0, idrotm[2086],
"ONLY");
971 dy = dymodW[4] - (dHz / 2.) * TMath::Tan(dymodO[4] * kdeg2rad);
973 for (jmod = 0; jmod < 18; jmod++) {
974 vmc->Gspos(
"B463I", 4 * jmod + 1, module[jmod], dx0, dy, dz0, idrotm[2096],
"ONLY");
975 vmc->Gspos(
"B463", 4 * jmod + 2, module[jmod], dx0, -dy, dz0, idrotm[2097],
"ONLY");
976 vmc->Gspos(
"B463I", 4 * jmod + 3, module[jmod], -dx0, -dy, dz0, idrotm[2087],
"ONLY");
977 vmc->Gspos(
"B463", 4 * jmod + 4, module[jmod], -dx0, dy, dz0, idrotm[2086],
"ONLY");
990 lbox[0] = longW / 4.;
991 lbox[2] = longH / 2.;
992 lbox[1] = longLI / 2.;
993 vmc->Gsvolu(
"BA59",
"BOX", kSteel, lbox, 3);
994 gGeoManager->GetVolume(
"BA59")->SetVisContainers();
995 lbox[0] = longW / 4. - 0.25;
996 lbox[2] = longH / 2. - 0.50;
997 vmc->Gsvolu(
"BA62",
"BOX", kAir, lbox, 3);
998 vmc->Gspos(
"BA62", 1,
"BA59", 0.25, 0.0, 0.0, 0,
"ONLY");
1000 dz = -iFrH0 / 2. + longH / 2. - 1. * sin10 + dext;
1001 dx = hR * tan10 - longW / 4. * cos10 - 0.065;
1002 for (jmod = 0; jmod < 18; jmod++) {
1003 vmc->Gspos(
"BA59", 2 * jmod + 1, module[jmod], dx, 0.0, dz, idrotm[2096],
"ONLY");
1004 vmc->Gspos(
"BA59", 2 * jmod + 2, module[jmod], -dx, 0.0, dz, idrotm[2087],
"ONLY");
1015 lbox[1] = longLI / 2.;
1016 vmc->Gsvolu(
"BTRDR_10",
"BOX", kSteel, lbox, 3);
1019 ptrd1[1] = 3. + 0.4 * tan10;
1020 ptrd1[2] = longLI / 2.;
1022 vmc->Gsvolu(
"BTRDR_11",
"TRD1", kSteel, ptrd1, 4);
1026 lbox[1] = longLI / 2.;
1027 vmc->Gsvolu(
"BTRDR_12",
"BOX", kAlu, lbox, 3);
1028 gGeoManager->GetVolume(
"BTRDR_12")->SetVisContainers();
1032 lbox[1] = longLI / 2.;
1033 vmc->Gsvolu(
"BTRDR_13",
"BOX", kG10, lbox, 3);
1034 vmc->Gspos(
"BTRDR_13", 1,
"BTRDR_12", -0.2, 0.0, 0.0, 0,
"ONLY");
1038 lbox[1] = longLI / 2.;
1039 vmc->Gsvolu(
"BTRDR_14",
"BOX", kG10, lbox, 3);
1040 dz = -iFrH0 / 2. + longH / 2. + dext;
1042 int isec_1[11] = {0, 1, 2, 3, 4, 5, 13, 14, 15, 16, 17};
1045 jmod = isec_1[
index];
1046 float dz1 = dz + 3. + (zpos - 4.);
1047 dx0 = (hR + dz0 + zpos - 4.) * tan10 - (longW / 2. + 0.2) / cos10 - 0.05;
1049 vmc->Gspos(
"BTRDR_10", 2 * jmod + 1, module[jmod], dx0, 0.0, dz1, idrotm[2096],
"ONLY");
1052 vmc->Gspos(
"BTRDR_10", 2 * jmod + 2, module[jmod], -dx0, 0.0, dz1, idrotm[2086],
"ONLY");
1056 vmc->Gspos(
"BTRDR_12", 2 * jmod + 1, module[jmod], dx0, 0.0, dz1, idrotm[2096],
"ONLY");
1059 vmc->Gspos(
"BTRDR_12", 2 * jmod + 2, module[jmod], -dx0, 0.0, dz1, idrotm[2087],
"ONLY");
1063 dx0 = (hR + dz0 + zpos - 0.2) * tan10 - (longW / 2. + 3. + 0.4) / cos10;
1065 vmc->Gspos(
"BTRDR_11", 2 * jmod + 1, module[jmod], dx0, 0.0, dz1, 0,
"ONLY");
1068 vmc->Gspos(
"BTRDR_11", 2 * jmod + 2, module[jmod], -dx0, 0.0, dz1, 0,
"ONLY");
1073 vmc->Gspos(
"BTRDR_14", 2 * jmod + 1, module[jmod], dx0, 0.0, dz1, 0,
"ONLY");
1076 vmc->Gspos(
"BTRDR_14", 2 * jmod + 2, module[jmod], -dx0, 0.0, dz1, 0,
"ONLY");
1084 lbox[1] = longLI / 2.;
1085 vmc->Gsvolu(
"BTRDR_2",
"BOX", kAlu, lbox, 3);
1088 lbox[1] = longLI / 2.;
1089 vmc->Gsvolu(
"BTRDR_21",
"BOX", kG10, lbox, 3);
1090 vmc->Gspos(
"BTRDR_21", 1,
"BTRDR_2", -0.4, 0.0, 0.0, 0,
"ONLY");
1092 int isec_2a[16] = {1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17};
1094 jmod = isec_2a[
index];
1095 dx0 = (hR + dz0) * tan10 + 10. * sin10 - (longW / 4. + 0.5) / cos10;
1097 vmc->Gspos(
"BTRDR_2", 2 * jmod + 1, module[jmod], dx0 - 1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2096],
"ONLY");
1099 vmc->Gspos(
"BTRDR_2", 2 * jmod + 2, module[jmod], -dx0 + 1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2087],
"ONLY");
1103 int isec_2b[6] = {6, 7, 8, 10, 11, 12};
1105 jmod = isec_2b[
index];
1106 dx0 = (hR + dz0 + zpos - 3.) * tan10 - (longW / 4. + 0.5) / cos10;
1108 vmc->Gspos(
"BTRDR_2", 2 * jmod + 2, module[jmod], -dx0 + 1.5, 0.0, dz + 3. + zpos - 3., idrotm[2087],
"ONLY");
1110 vmc->Gspos(
"BTRDR_2", 2 * jmod + 1, module[jmod], dx0 - 1.5, 0.0, dz + 3. + zpos - 3., idrotm[2096],
"ONLY");
1118 lbox[1] = longLI / 2.;
1119 vmc->Gsvolu(
"BTRDR_3",
"BOX", kAlu, lbox, 3);
1123 lbox[1] = longLI / 2.;
1124 vmc->Gsvolu(
"BTRDR_31",
"BOX", kG10, lbox, 3);
1125 vmc->Gspos(
"BTRDR_31", 1,
"BTRDR_3", 0, 0.0, 0.6, 0,
"ONLY");
1127 int isec_3[9] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
1130 jmod = isec_3[
index];
1132 vmc->Gspos(
"BTRDR_3", 2 * jmod + 1, module[jmod], 50.96 - 5 - 2., 0.0, dz + 3.7, 0,
"ONLY");
1135 vmc->Gspos(
"BTRDR_3", 2 * jmod + 2, module[jmod], -50.96 + 5 + 2., 0.0, dz + 3.7, 0,
"ONLY");
1142 float thetFB1 = 10. / 180. * TMath::Pi();
1143 float thetFB2 = 40. / 180. * TMath::Pi();
1147 float dyFB = 3.9 / 2.;
1151 float dx1FB = dxFB / 2. - 2. * dzFB * TMath::Tan(thetFB1);
1152 float dx2FB = dxFB / 2. - 2. * dzFB * TMath::Tan(thetFB2);
1154 TGeoArb8* shFB1 =
new TGeoArb8(dzFB);
1155 shFB1->SetVertex(0, -dyFB / 2., -dxFB / 2.);
1156 shFB1->SetVertex(1, -dyFB / 2., dxFB / 2.);
1157 shFB1->SetVertex(2, dyFB / 2., dxFB / 2.);
1158 shFB1->SetVertex(3, dyFB / 2., -dxFB / 2.);
1160 shFB1->SetVertex(4, -dyFB / 2., -dx1FB);
1161 shFB1->SetVertex(5, -dyFB / 2., dx2FB);
1162 shFB1->SetVertex(6, dyFB / 2., dx2FB);
1163 shFB1->SetVertex(7, dyFB / 2., -dx1FB);
1165 TGeoVolume* volFB1 =
new TGeoVolume(
"BTRD_FB1", shFB1, kMedAlu);
1168 TGeoVolume* volTAR11 =
new TGeoVolume(
"BTRD_TAR11",
new TGeoBBox(dyFB / 2., dxFB / 2., 3.), kMedAlu);
1169 TGeoVolume* volTAR12 =
new TGeoVolume(
"BTRD_TAR12",
new TGeoBBox(dyFB / 2. - 0.25, dxFB / 2. - 0.7, 2.5), kMedAir);
1170 volTAR11->AddNode(volTAR12, 1,
new TGeoTranslation(0.25, 0., 0.0));
1172 TGeoVolume* volTAR13 =
new TGeoVolume(
"BTRD_TAR13",
new TGeoBBox(0.3, 45., 3.), kMedAlu);
1174 TGeoVolume* volTAR141 =
new TGeoVolume(
"BTRD_TAR141",
new TGeoBBox(1., 2., 6.), kMedAir);
1175 TGeoVolume* volTAR142 =
new TGeoVolume(
"BTRD_TAR142",
new TGeoBBox(1., 2., 6.), kMedAir);
1177 TGeoVolume* volTAR15 =
new TGeoVolume(
"BTRD_TAR15",
new TGeoBBox(1., 2., 3.), kMedAlu);
1178 TGeoVolume* volTAR16 =
new TGeoVolume(
"BTRD_TAR16",
new TGeoTubeSeg(0., 0.78, 1.5, 90., 270.), kMedSteel);
1179 TGeoVolume* volTAR17 =
new TGeoVolume(
"BTRD_TAR17",
new TGeoTubeSeg(0., 0.78, 1.5, -90, 90.), kMedSteel);
1180 volTAR141->AddNode(volTAR15, 1,
new TGeoTranslation(0, 0, 0));
1181 volTAR141->AddNode(volTAR16, 1,
new TGeoTranslation(1., 0, +4.5));
1182 volTAR141->AddNode(volTAR16, 2,
new TGeoTranslation(1., 0, -4.5));
1184 volTAR142->AddNode(volTAR15, 1,
new TGeoTranslation(0, 0, 0));
1185 volTAR142->AddNode(volTAR17, 1,
new TGeoTranslation(-1., 0, +4.5));
1186 volTAR142->AddNode(volTAR17, 2,
new TGeoTranslation(-1., 0, -4.5));
1188 TGeoVolumeAssembly* asFB1 =
new TGeoVolumeAssembly(
"BTRD_FBAS1");
1189 TGeoVolumeAssembly* asFB2 =
new TGeoVolumeAssembly(
"BTRD_FBAS2");
1190 asFB1->AddNode(volFB1, 1, gGeoIdentity);
1191 asFB1->AddNode(volTAR11, 1,
new TGeoTranslation(0., 0., -dzFB - 3.55));
1192 asFB1->AddNode(volTAR13, 1,
new TGeoTranslation(-1.36, 4.5, -dzFB - 3.));
1193 asFB1->AddNode(volTAR141, 1,
new TGeoTranslation(0., dxFB - 2. + 4.5, -dzFB - 3.));
1194 asFB1->AddNode(volTAR141, 2,
new TGeoTranslation(0., -dxFB + 2. + 4.5, -dzFB - 3.));
1196 asFB2->AddNode(volFB1, 2, gGeoIdentity);
1197 asFB2->AddNode(volTAR11, 2,
new TGeoTranslation(0., 0., -dzFB - 3.));
1198 asFB2->AddNode(volTAR13, 2,
new TGeoTranslation(1.36, 4.5, -dzFB - 3.));
1199 asFB2->AddNode(volTAR142, 3,
new TGeoTranslation(0., dxFB - 2. + 4.5, -dzFB - 3.));
1200 asFB2->AddNode(volTAR142, 4,
new TGeoTranslation(0., -dxFB + 2. + 4.5, -dzFB - 3.));
1204 thetFB1 = 20. / 180. * TMath::Pi();
1205 thetFB2 = 27. / 180. * TMath::Pi();
1209 dx1FB = dxFB / 2. - 2. * dzFB * TMath::Tan(thetFB1);
1210 dx2FB = dxFB / 2. - 2. * dzFB * TMath::Tan(thetFB2);
1212 TGeoArb8* shFB2 =
new TGeoArb8(dzFB);
1213 shFB2->SetVertex(0, -dyFB / 2., -dxFB / 2.);
1214 shFB2->SetVertex(1, -dyFB / 2., dxFB / 2.);
1215 shFB2->SetVertex(2, dyFB / 2., dxFB / 2.);
1216 shFB2->SetVertex(3, dyFB / 2., -dxFB / 2.);
1218 shFB2->SetVertex(4, -dyFB / 2., -dx1FB);
1219 shFB2->SetVertex(5, -dyFB / 2., dx2FB);
1220 shFB2->SetVertex(6, dyFB / 2., dx2FB);
1221 shFB2->SetVertex(7, dyFB / 2., -dx1FB);
1223 TGeoVolume* volFB2 =
new TGeoVolume(
"BTRD_FB2", shFB2, kMedAlu);
1224 TGeoVolume* volTAR21 =
new TGeoVolume(
"BTRD_TAR21",
new TGeoBBox(dyFB / 2., dxFB / 2., 3.), kMedAlu);
1225 TGeoVolume* volTAR22 =
new TGeoVolume(
"BTRD_TAR22",
new TGeoBBox(dyFB / 2. - 0.25, dxFB / 2., 3. - 0.5), kMedAir);
1226 volTAR21->AddNode(volTAR22, 1,
new TGeoTranslation(-0.25, 0., 0.0));
1228 TGeoVolume* volTAR23 =
new TGeoVolume(
"BTRD_TAR23",
new TGeoBBox(0.3, 40., 3.), kMedAlu);
1230 TGeoVolumeAssembly* asFB3 =
new TGeoVolumeAssembly(
"BTRD_FBAS3");
1231 TGeoVolumeAssembly* asFB4 =
new TGeoVolumeAssembly(
"BTRD_FBAS4");
1232 asFB3->AddNode(volFB2, 1, gGeoIdentity);
1233 asFB3->AddNode(volTAR21, 1,
new TGeoTranslation(0., 0., -dzFB - 3.));
1234 asFB3->AddNode(volTAR23, 1,
new TGeoTranslation(-1.36, 0., -dzFB - 3.));
1235 asFB3->AddNode(volTAR141, 1,
new TGeoTranslation(0., dxFB - 2., -dzFB - 3.));
1236 asFB3->AddNode(volTAR141, 2,
new TGeoTranslation(0., -dxFB + 2., -dzFB - 3.));
1238 asFB4->AddNode(volFB2, 2, gGeoIdentity);
1239 asFB4->AddNode(volTAR21, 2,
new TGeoTranslation(0., 0., -dzFB - 3.));
1240 asFB4->AddNode(volTAR23, 2,
new TGeoTranslation(1.36, 0.5, -dzFB - 3.));
1241 asFB4->AddNode(volTAR142, 3,
new TGeoTranslation(0., dxFB - 2. + 0.5, -dzFB - 3.));
1242 asFB4->AddNode(volTAR142, 4,
new TGeoTranslation(0., -dxFB + 2. + 0.5, -dzFB - 3.));
1247 dx = ((hR - longH / 2. + iFrH0 / 2.) - dext + zTA1) * tan10 - 3.9 / 4.;
1250 int imod = isec_1[
index];
1252 vmc->Gspos(
"BTRD_FBAS2",
index, module[imod], dx, -yFB1, zTA1, idrotm[2097],
"ONLY");
1256 vmc->Gspos(
"BTRD_FBAS1", 11 +
index, module[imod], -dx, -yFB1, zTA1, idrotm[2087],
"ONLY");
1260 vmc->Gspos(
"BTRD_FBAS1", 22 +
index, module[imod], dx, yFB1, zTA1, idrotm[2096],
"ONLY");
1264 vmc->Gspos(
"BTRD_FBAS2", 33 +
index, module[imod], -dx, yFB1, zTA1, idrotm[2086],
"ONLY");
1268 vmc->Gspos(
"BTRD_FBAS4",
index, module[imod], dx, -yFB2, zTA1, idrotm[2097],
"ONLY");
1272 vmc->Gspos(
"BTRD_FBAS3", 11 +
index, module[imod], -dx, -yFB2, zTA1, idrotm[2087],
"ONLY");
1276 vmc->Gspos(
"BTRD_FBAS3", 22 +
index, module[imod], dx, yFB2, zTA1, idrotm[2096],
"ONLY");
1280 vmc->Gspos(
"BTRD_FBAS4", 33 +
index, module[imod], -dx, yFB2, zTA1, idrotm[2086],
"ONLY");
1292 TGeoVolume* voBTOFS1 =
new TGeoVolume(
"BTOFS1",
new TGeoBBox(lbox), gGeoManager->GetMedium(
"FRAME_Steel"));
1296 TGeoVolume* voBTOFS11 =
new TGeoVolume(
"BTOFS11",
new TGeoBBox(lbox), gGeoManager->GetMedium(
"FRAME_Air"));
1297 voBTOFS1->AddNode(voBTOFS11, 1, gGeoIdentity);
1302 TGeoXtru* shBTOFS2 =
new TGeoXtru(2);
1303 TGeoXtru* shBTOFS3 =
new TGeoXtru(2);
1304 TGeoXtru* shBTOFS4 =
new TGeoXtru(2);
1305 TGeoXtru* shBTOFS5 =
new TGeoXtru(2);
1317 yxtru1[2] = 4.5 - 2.5 * sin10;
1319 xxtru1[3] = 8.5 - 14.5 / cos10;
1320 yxtru1[3] = -6. - 14.5 * sin10;
1322 xxtru1[4] = 8.5 - 10.5 / cos10;
1323 yxtru1[4] = -6. - 10.5 * sin10;
1325 xxtru1[5] = xxtru1[4] + 8. * sin10;
1326 yxtru1[5] = yxtru1[4] - 8. / cos10;
1332 for (
i = 0;
i < 7;
i++) {
1333 xxtru2[
i] = -xxtru1[
i];
1339 for (
i = 0;
i < 4;
i++) {
1340 xxtru3[
i] = xxtru1[
i];
1341 yxtru3[
i] = yxtru1[
i];
1343 xxtru3[4] = xxtru1[6];
1344 yxtru3[4] = yxtru1[6];
1345 for (
i = 0;
i < 5;
i++) {
1346 xxtru4[
i] = -xxtru3[
i];
1349 shBTOFS2->DefinePolygon(7, xxtru1, yxtru1);
1350 shBTOFS2->DefineSection(0, -4.);
1351 shBTOFS2->DefineSection(1, +4.);
1353 shBTOFS3->DefinePolygon(7, xxtru2, yxtru1);
1354 shBTOFS3->DefineSection(0, -4.);
1355 shBTOFS3->DefineSection(1, +4.);
1356 TGeoVolume* voBTOFS2 =
new TGeoVolume(
"BTOFS2", shBTOFS2, gGeoManager->GetMedium(
"FRAME_Steel"));
1357 TGeoVolume* voBTOFS3 =
new TGeoVolume(
"BTOFS3", shBTOFS3, gGeoManager->GetMedium(
"FRAME_Steel"));
1360 shBTOFS4->DefinePolygon(5, xxtru3, yxtru3);
1361 shBTOFS4->DefineSection(0, -4.);
1362 shBTOFS4->DefineSection(1, +4.);
1364 shBTOFS5->DefinePolygon(5, xxtru4, yxtru3);
1365 shBTOFS5->DefineSection(0, -4.);
1366 shBTOFS5->DefineSection(1, +4.);
1367 TGeoVolume* voBTOFS4 =
new TGeoVolume(
"BTOFS4", shBTOFS4, gGeoManager->GetMedium(
"FRAME_Steel"));
1368 TGeoVolume* voBTOFS5 =
new TGeoVolume(
"BTOFS5", shBTOFS5, gGeoManager->GetMedium(
"FRAME_Steel"));
1373 TGeoVolume* voBTOFS21 =
new TGeoVolume(
"BTOFS21",
new TGeoBBox(lbox), gGeoManager->GetMedium(
"FRAME_Air"));
1374 voBTOFS2->AddNode(voBTOFS21, 1, gGeoIdentity);
1375 voBTOFS3->AddNode(voBTOFS21, 2, gGeoIdentity);
1376 voBTOFS4->AddNode(voBTOFS21, 3, gGeoIdentity);
1377 voBTOFS5->AddNode(voBTOFS21, 4, gGeoIdentity);
1379 TGeoVolumeAssembly* asTOFS00 =
new TGeoVolumeAssembly(
"BTOFS00");
1380 asTOFS00->AddNode(voBTOFS1, 1, gGeoIdentity);
1381 asTOFS00->AddNode(voBTOFS2, 1,
new TGeoTranslation(0., 0., 40.));
1382 asTOFS00->AddNode(voBTOFS2, 2,
new TGeoTranslation(0., 0., -40.));
1384 TGeoVolumeAssembly* asTOFS01 =
new TGeoVolumeAssembly(
"BTOFS01");
1385 asTOFS01->AddNode(voBTOFS1, 2, gGeoIdentity);
1386 asTOFS01->AddNode(voBTOFS3, 1,
new TGeoTranslation(0., 0., 40.));
1387 asTOFS01->AddNode(voBTOFS3, 2,
new TGeoTranslation(0., 0., -40.));
1389 TGeoVolumeAssembly* asTOFS02 =
new TGeoVolumeAssembly(
"BTOFS02");
1390 asTOFS02->AddNode(voBTOFS1, 3, gGeoIdentity);
1391 asTOFS02->AddNode(voBTOFS2, 3,
new TGeoTranslation(0., 0., -40.));
1392 asTOFS02->AddNode(voBTOFS4, 2,
new TGeoTranslation(0., 0., 40.));
1394 TGeoVolumeAssembly* asTOFS03 =
new TGeoVolumeAssembly(
"BTOFS03");
1395 asTOFS03->AddNode(voBTOFS1, 4, gGeoIdentity);
1396 asTOFS03->AddNode(voBTOFS3, 3,
new TGeoTranslation(0., 0., -40.));
1397 asTOFS03->AddNode(voBTOFS5, 2,
new TGeoTranslation(0., 0., 40.));
1399 asTOFS00->SetVisibility(1);
1400 asTOFS01->SetVisibility(1);
1402 for (
i = 0;
i < 18;
i++) {
1403 if (
i >= 4 &&
i <= 8) {
1406 float phi1 =
i * 20.;
1407 float phi2 = 270. + phi1;
1408 rot1 =
new TGeoRotation(Form(
"TOFS_R1_%d",
i), 90.0, phi1, 90., phi2, 0., 0.);
1409 dx = TMath::Sin((phi1 + 8.95) * kdeg2rad) * (rout2 + 12.);
1410 dy = -TMath::Cos((phi1 + 8.95) * kdeg2rad) * (rout2 + 12.);
1411 if ((
i > 3 &&
i < 8) || (
i > 10 &&
i < 15)) {
1412 (gGeoManager->GetVolume(
"B077"))->AddNode(asTOFS03,
i,
new TGeoCombiTrans(dx, dy, 345. - 53. - 0.5, rot1));
1414 (gGeoManager->GetVolume(
"B077"))->AddNode(asTOFS01,
i,
new TGeoCombiTrans(dx, dy, 345. - 53. - 0.5, rot1));
1416 dx = TMath::Sin((phi1 - 8.95) * kdeg2rad) * (rout2 + 12.);
1417 dy = -TMath::Cos((phi1 - 8.95) * kdeg2rad) * (rout2 + 12.);
1418 if ((
i > 3 &&
i < 8) || (
i > 10 &&
i <= 15)) {
1419 (gGeoManager->GetVolume(
"B077"))->AddNode(asTOFS02,
i,
new TGeoCombiTrans(dx, dy, 345. - 53 - 0.5, rot1));
1421 (gGeoManager->GetVolume(
"B077"))->AddNode(asTOFS00,
i,
new TGeoCombiTrans(dx, dy, 345. - 53 - 0.5, rot1));
1430 makeHeatScreen(
"M", dyM, idrotm[2090], idrotm[2091]);
1432 makeHeatScreen(
"AM", dyAM, idrotm[2090], idrotm[2091]);
1433 float dyA = 122.5 - 5.5;
1434 makeHeatScreen(
"A", dyA, idrotm[2090], idrotm[2091]);
1440 for (
i = 0;
i < 18;
i++) {
1442 snprintf(nameMo, 16,
"BSEGMO%d",
i);
1444 vmc->Gspos(
"BTSH_M",
i + 1, nameMo, 0., 0., dz, 0,
"ONLY");
1446 dy = dymodL[0] + dyAM / 2. + 3.;
1447 vmc->Gspos(
"BTSH_AM",
i + 1, nameMo, 0., dy, dz, 0,
"ONLY");
1448 vmc->Gspos(
"BTSH_AM",
i + 19, nameMo, 0., -dy, dz, 0,
"ONLY");
1450 dy = dymodL[1] + dyA / 2 + 0.4;
1451 vmc->Gspos(
"BTSH_A",
i + 1, nameMo, 0., dy, dz, 0,
"ONLY");
1452 vmc->Gspos(
"BTSH_A",
i + 19, nameMo, 0., -dy, dz, 0,
"ONLY");
1464 const float zsh = -0.326;
1471 for (
i = 0;
i < 18;
i++) {
1473 snprintf(nameCh, 16,
"BTRD%d",
i);
1475 snprintf(nameMo, 16,
"BSEGMO%d",
i);
1476 vmc->Gsvolu(nameCh,
"TRD1", kAir, ptrd1, 4);
1477 gGeoManager->GetVolume(nameCh)->SetVisibility(
false);
1478 vmc->Gspos(nameCh, 1, nameMo, 0., 0., -12.62 + zsh, 0,
"ONLY");
1488 ptrd1[3] = 14.525 / 2;
1491 snprintf(nameChA, 16,
"BTOFA");
1492 TGeoTrd1* trd1 =
new TGeoTrd1(nameChA, ptrd1[0], ptrd1[1], ptrd1[2], ptrd1[3]);
1493 trd1->SetName(
"BTOFA");
1496 snprintf(nameChB, 16,
"BTOFB");
1497 TGeoBBox* box1 =
new TGeoBBox(nameChB, 64.25, 372.6, 1.0);
1498 box1->SetName(
"BTOFB");
1501 snprintf(nameChC, 16,
"BTOFC");
1502 TGeoBBox* box2 =
new TGeoBBox(nameChC, 62.25, 372.6, 6.2625);
1503 box2->SetName(
"BTOFC");
1505 TGeoTranslation* tr1 =
new TGeoTranslation(
"trnsl1", 0, 0, -14.525 / 2);
1506 tr1->RegisterYourself();
1507 TGeoTranslation* tr2 =
new TGeoTranslation(
"trnsl2", 0, 0, +1.0);
1508 tr2->RegisterYourself();
1509 TGeoTranslation* tr3 =
new TGeoTranslation(
"trnsl3", 0, 0, 8.2625);
1510 tr3->RegisterYourself();
1511 TGeoCompositeShape* btofcs =
new TGeoCompositeShape(
"Btofcs",
"(BTOFA:trnsl1)+(BTOFB:trnsl2)+(BTOFC:trnsl3)");
1512 for (
i = 0;
i < 18;
i++) {
1514 snprintf(nameCh, 16,
"BTOF%d",
i);
1516 snprintf(nameMo, 16,
"BSEGMO%d",
i);
1517 TGeoVolume* btf =
new TGeoVolume(nameCh, btofcs, gGeoManager->GetMedium(
"FRAME_Air"));
1518 btf->SetName(nameCh);
1519 gGeoManager->GetVolume(nameCh)->SetVisibility(
false);
1520 vmc->Gspos(nameCh, 1, nameMo, 0., 0., 43.525 + zsh, 0,
"ONLY");
1525 snprintf(nameRaV1, 16,
"RaV1");
1526 TGeoBBox* boxRaV1 =
new TGeoBBox(nameRaV1, 0.5, 350.0, 1.5);
1528 snprintf(nameRaO1, 16,
"RaO1");
1529 TGeoBBox* boxRaO1 =
new TGeoBBox(nameRaO1, 1.5, 350.0, 0.5);
1530 TGeoCompositeShape* C1 = (TGeoCompositeShape*)createTOFRail(45.61);
1532 TGeoCompositeShape* C2 = (TGeoCompositeShape*)createTOFRail(61.61);
1534 TGeoCompositeShape* C3 = (TGeoCompositeShape*)createTOFRail(63.11);
1536 TGeoCompositeShape* C4 = (TGeoCompositeShape*)createTOFRail(61.61);
1538 TGeoCompositeShape* C5 = (TGeoCompositeShape*)createTOFRail(45.61);
1540 TGeoTranslation* trRaO1 =
new TGeoTranslation(
"trRaO1", 1., 0., -2.);
1541 trRaO1->RegisterYourself();
1542 TGeoTranslation* trC1 =
new TGeoTranslation(
"trC1", -3.39, -286.6, -0.15);
1543 trC1->RegisterYourself();
1544 TGeoTranslation* trC2 =
new TGeoTranslation(
"trC2", -3.39, -152., -0.15);
1545 trC2->RegisterYourself();
1546 TGeoTranslation* trC3 =
new TGeoTranslation(
"trC3", -3.39, +8.5, -0.15);
1547 trC3->RegisterYourself();
1548 TGeoTranslation* trC4 =
new TGeoTranslation(
"trC4", -3.39, +151.8, -0.15);
1549 trC4->RegisterYourself();
1550 TGeoTranslation* trC5 =
new TGeoTranslation(
"trC5", -3.39, 286.6, -0.15);
1551 trC5->RegisterYourself();
1553 TGeoCompositeShape* TOFrail =
1554 new TGeoCompositeShape(
"TOFrail",
"(RaV1+RaO1:trRaO1)+C1:trC1+C2:trC2+C3:trC3+C4:trC4+C5:trC5");
1557 snprintf(nameTR, 16,
"VolTOFrail");
1558 TGeoVolume* VolTOFrail =
new TGeoVolume(nameTR, TOFrail, gGeoManager->GetMedium(
"FRAME_Aluminum"));
1559 VolTOFrail->SetName(nameTR);
1560 gGeoManager->GetVolume(nameTR)->SetVisibility(
true);
1561 AliMatrix(idrotm[2102], 90.0, 180.0, 90.0, 270.0, 0.0, 180.0);
1563 for (
i = 0;
i < 18;
i++) {
1565 snprintf(nameMo, 16,
"BSEGMO%d",
i);
1566 vmc->Gspos(
"VolTOFrail", 2 *
i, nameMo, -66.27, 0., +56.33 + zsh, 0,
"ONLY");
1567 vmc->Gspos(
"VolTOFrail", 2 *
i + 1, nameMo, 66.27, 0., +56.33 + zsh, idrotm[2102],
"ONLY");
1582 vmc->Gsvolu(
"BRS1",
"BOX", kAir, rbox, 3);
1586 vmc->Gsvolu(
"BRS2",
"BOX", kSteel, rbox, 3);
1590 vmc->Gsvolu(
"BRS3",
"BOX", kSteel, rbox, 3);
1592 vmc->Gspos(
"BRS2", 1,
"BRS1", 0., -27.5 + 3.75, 0., 0,
"ONLY");
1593 vmc->Gspos(
"BRS2", 2,
"BRS1", 0., 27.5 - 3.75, 0., 0,
"ONLY");
1594 vmc->Gspos(
"BRS3", 1,
"BRS1", 0., 0., 0., 0,
"ONLY");
1595 vmc->Gspos(
"BRS1", 1,
TOPNAME, -430. - 3.1 + 30., -190., 0., 0,
"ONLY");
1596 vmc->Gspos(
"BRS1", 2,
TOPNAME, 430. + 3.1 + 30., -190., 0., 0,
"ONLY");
1599 rbox[1] = 145. / 4.;
1601 vmc->Gsvolu(
"BRS4",
"BOX", kSteel, rbox, 3);
1603 vmc->Gspos(
"BRS4", 1,
TOPNAME, 430. + 3., -190. + 55. / 2. + rbox[1] + 30., 224., 0,
"ONLY");
1604 vmc->Gspos(
"BRS4", 2,
TOPNAME, 430. + 3., -190. + 55. / 2. + rbox[1] + 30., -224., 0,
"ONLY");
1610 float kBFMRin = 270.0;
1612 float kBFMRou = 417.5;
1614 float kBFMdz = 118.0;
1631 tpar[2] = kBFMdz / 2.;
1632 vmc->Gsvolu(
"BFMO",
"TUBE", kAir, tpar, 3);
1639 ptrd1[0] = 47.4405 - 0.3;
1640 ptrd1[1] = 61.1765 - 0.3;
1641 ptrd1[2] = kBFMdz / 2.;
1643 vmc->Gsvolu(
"BFTRD",
"TRD1", kAir, ptrd1, 4);
1644 gGeoManager->GetVolume(
"BFTRD")->SetVisibility(
false);
1646 for (
i = 0;
i < 18;
i++) {
1647 float phiBF =
i * 20.0;
1648 dx = TMath::Sin(phiBF * kdeg2rad) * (342.0 - 12.62);
1649 dy = -TMath::Cos(phiBF * kdeg2rad) * (342.0 - 12.62);
1650 vmc->Gspos(
"BFTRD",
i,
"BFMO", dx, dy, 0.0, idrotm[2034 +
i],
"ONLY");
1659 tpar[1] = tpar[0] + kBFRdr;
1660 tpar[2] = kBFRdz / 2.;
1662 vmc->Gsvolu(
"BFIR",
"TUBE", kSteel, tpar, 3);
1664 tpar[0] = tpar[0] + kBFBdd;
1665 tpar[1] = tpar[1] - kBFBdd;
1666 tpar[2] = (kBFRdz - 2. * kBFBdd) / 2.;
1668 vmc->Gsvolu(
"BFII",
"TUBE", kAir, tpar, 3);
1669 vmc->Gspos(
"BFII", 1,
"BFIR", 0., 0., 0., 0,
"ONLY");
1673 tpar[0] = kBFMRou - kBFRdr + 0.1;
1675 tpar[2] = kBFRdz / 2.;
1677 vmc->Gsvolu(
"BFOR",
"TUBE", kSteel, tpar, 3);
1679 tpar[0] = tpar[0] + kBFBdd;
1680 tpar[1] = tpar[1] - kBFBdd;
1681 tpar[2] = (kBFRdz - 2. * kBFBdd) / 2.;
1683 vmc->Gsvolu(
"BFOO",
"TUBE", kAir, tpar, 3);
1684 vmc->Gspos(
"BFOO", 1,
"BFOR", 0., 0., 0., 0,
"ONLY");
1686 dz = kBFMdz / 2. - kBFRdz / 2.;
1687 vmc->Gspos(
"BFIR", 1,
"BFMO", 0., 0., dz, 0,
"ONLY");
1688 vmc->Gspos(
"BFIR", 2,
"BFMO", 0., 0., -dz, 0,
"ONLY");
1689 vmc->Gspos(
"BFOR", 1,
"BFMO", 0., 0., dz, 0,
"ONLY");
1690 vmc->Gspos(
"BFOR", 2,
"BFMO", 0., 0., -dz, 0,
"ONLY");
1697 bpar[0] = kBFBd / 2;
1699 bpar[2] = kBFMdz / 2. - kBFBd;
1700 vmc->Gsvolu(
"BFLB",
"BOX ", kSteel, bpar, 3);
1702 bpar[0] = bpar[0] - kBFBdd;
1703 bpar[1] = bpar[1] - kBFBdd;
1704 bpar[2] = bpar[2] - kBFBdd;
1705 vmc->Gsvolu(
"BFLL",
"BOX ", kAir, bpar, 3);
1706 vmc->Gspos(
"BFLL", 1,
"BFLB", 0., 0., 0., 0,
"ONLY");
1708 for (
i = 0;
i < 18;
i++) {
1709 float ro = kBFMRou - kBFBd / 2. - 0.02;
1710 float ri = kBFMRin + kBFBd / 2.;
1712 float phi0 = float(
i) * 20.;
1714 float xb = ri * TMath::Cos(phi0 *
kDegrad);
1715 float yb = ri * TMath::Sin(phi0 *
kDegrad);
1716 AliMatrix(idrotm[2090 +
i], 90.0, phi0, 90.0, phi0 + 270., 0., 0.);
1718 vmc->Gspos(
"BFLB",
i + 1,
"BFMO", xb, yb, 0., idrotm[2090 +
i],
"ONLY");
1720 xb = ro * TMath::Cos(phi0 *
kDegrad);
1721 yb = ro * TMath::Sin(phi0 *
kDegrad);
1723 vmc->Gspos(
"BFLB",
i + 19,
"BFMO", xb, yb, 0., idrotm[2090 +
i],
"ONLY");
1729 bpar[0] = (kBFMRou - kBFMRin - 2. * kBFRdr) / 2.;
1730 bpar[1] = kBFBd / 2;
1734 float rr = kBFMRou - kBFRdr;
1735 float delta =
rr - TMath::Sqrt(
rr *
rr - kBFBd * kBFBd / 4.) + 0.01;
1736 bpar[0] -= delta / 2.;
1738 vmc->Gsvolu(
"BFRB",
"BOX ", kSteel, bpar, 3);
1740 bpar[0] = bpar[0] - kBFBdd;
1741 bpar[1] = bpar[1] - kBFBdd;
1742 bpar[2] = bpar[2] - kBFBdd;
1743 vmc->Gsvolu(
"BFRR",
"BOX ", kAir, bpar, 3);
1744 vmc->Gspos(
"BFRR", 1,
"BFRB", 0., 0., 0., 0,
"ONLY");
1746 int iphi[10] = {0, 1, 3, 6, 8, 9, 10, 12, 15, 17};
1748 for (
i = 0;
i < 10;
i++) {
1749 float rb = (kBFMRin + kBFMRou) / 2.;
1750 float phib = float(iphi[
i]) * 20.;
1752 float xb = rb * TMath::Cos(phib *
kDegrad);
1753 float yb = rb * TMath::Sin(phib *
kDegrad);
1755 vmc->Gspos(
"BFRB",
i + 1,
"BFMO", xb, yb, dz, idrotm[2034 + iphi[
i]],
"ONLY");
1756 vmc->Gspos(
"BFRB",
i + 11,
"BFMO", xb, yb, -dz, idrotm[2034 + iphi[
i]],
"ONLY");
1759 vmc->Gspos(
"BFMO",
i + 19,
TOPNAME, 0, 30., -376. - kBFMdz / 2. - 0.5, 0,
"ONLY");
1768 float kBBMRin = 278.0;
1770 float kBBMRou = 410.5;
1772 float kBBMdz = 223.0;
1783 ppgon[4] = -kBBMdz / 2.;
1787 ppgon[7] = -ppgon[4];
1788 ppgon[8] = ppgon[5];
1789 ppgon[9] = ppgon[6];
1791 vmc->Gsvolu(
"BBMO",
"PGON", kAir, ppgon, 10);
1792 vmc->Gsdvn(
"BBCE",
"BBMO", 18, 2);
1799 AliMatrix(idrotm[2092], 90.0, 90.0, 0.0, 0.0, 90.0, 0.0);
1801 ptrd1[0] = 47.4405 - 2.5;
1802 ptrd1[1] = 61.1765 - 2.5;
1803 ptrd1[2] = kBBMdz / 2.;
1805 vmc->Gsvolu(
"BBTRD",
"TRD1", kAir, ptrd1, 4);
1806 gGeoManager->GetVolume(
"BBTRD")->SetVisibility(
false);
1807 vmc->Gspos(
"BBTRD", 1,
"BBCE", 342.0 - 12.62, 0.0, 0.0, idrotm[2092],
"ONLY");
1812 bpar[0] = kBBBdz / 2.;
1814 bpar[2] = kBBMdz / 2. - kBBBdz;
1815 vmc->Gsvolu(
"BBLB",
"BOX ", kSteel, bpar, 3);
1819 vmc->Gsvolu(
"BBLL",
"BOX ", kAir, bpar, 3);
1820 vmc->Gspos(
"BBLL", 1,
"BBLB", 0., 0., 0., 0,
"ONLY");
1822 dx = kBBMRin + kBBBdz / 2. + (bpar[1] + kBBBdd) * TMath::Sin(10. *
kDegrad);
1823 dy = dx * TMath::Tan(10. *
kDegrad) - kBBBdz / 2. / TMath::Cos(10. *
kDegrad);
1824 vmc->Gspos(
"BBLB", 1,
"BBCE", dx, dy, 0., idrotm[2052],
"ONLY");
1826 dx = kBBMRou - kBBBdz / 2. - (bpar[1] + kBBBdd) * TMath::Sin(10. *
kDegrad);
1827 dy = dx * TMath::Tan(10. *
kDegrad) - kBBBdz / 2. / TMath::Cos(10. *
kDegrad);
1829 vmc->Gspos(
"BBLB", 2,
"BBCE", dx, dy, 0., idrotm[2052],
"ONLY");
1834 bpar[0] = (kBBMRou - kBBMRin) / 2. - kBBBdz;
1835 bpar[1] = kBBBdz / 2;
1838 vmc->Gsvolu(
"BBRB",
"BOX ", kSteel, bpar, 3);
1842 vmc->Gsvolu(
"BBRR",
"BOX ", kAir, bpar, 3);
1843 vmc->Gspos(
"BBRR", 1,
"BBRB", 0., 0., 0., 0,
"ONLY");
1845 dx = (kBBMRou + kBBMRin) / 2.;
1846 dy = ((kBBMRou + kBBMRin) / 2) * TMath::Tan(10 *
kDegrad) - kBBBdz / 2. / TMath::Cos(10 *
kDegrad);
1847 dz = kBBMdz / 2. - kBBBdz / 2.;
1849 vmc->Gspos(
"BBRB", 1,
"BBCE", dx, dy, dz, idrotm[2052],
"ONLY");
1850 vmc->Gspos(
"BBRB", 2,
"BBCE", dx, dy, -dz, idrotm[2052],
"ONLY");
1851 vmc->Gspos(
"BBRB", 3,
"BBCE", dx, dy, 0., idrotm[2052],
"ONLY");
1858 bpar[1] = kBBMRin * TMath::Sin(10. *
kDegrad);
1859 bpar[0] = kBBBdz / 2;
1861 vmc->Gsvolu(
"BBC1",
"BOX ", kSteel, bpar, 3);
1865 vmc->Gsvolu(
"BBC2",
"BOX ", kAir, bpar, 3);
1866 vmc->Gspos(
"BBC2", 1,
"BBC1", 0., 0., 0., 0,
"ONLY");
1867 dx = kBBMRin + kBBBdz / 2;
1869 vmc->Gspos(
"BBC1", 1,
"BBCE", dx, dy, dz, 0,
"ONLY");
1870 vmc->Gspos(
"BBC1", 2,
"BBCE", dx, dy, -dz, 0,
"ONLY");
1873 bpar[1] = (kBBMRou - kBBBdz) * TMath::Sin(10. *
kDegrad);
1874 bpar[0] = kBBBdz / 2;
1876 vmc->Gsvolu(
"BBC3",
"BOX ", kSteel, bpar, 3);
1880 vmc->Gsvolu(
"BBC4",
"BOX ", kAir, bpar, 3);
1881 vmc->Gspos(
"BBC4", 1,
"BBC3", 0., 0., 0., 0,
"ONLY");
1882 dx = kBBMRou - kBBBdz / 2;
1884 vmc->Gspos(
"BBC3", 1,
"BBCE", dx, dy, dz, 0,
"ONLY");
1885 vmc->Gspos(
"BBC3", 2,
"BBCE", dx, dy, -dz, 0,
"ONLY");
1889 h = (kBBMRou - kBBMRin - 2. * kBBBdz);
1892 dz = kBBMdz / 2. - 1.6 * kBBBdz;
1893 dq =
h *
h + dz * dz;
1895 x = TMath::Sqrt((dz * dz - d * d) / dq + d * d *
h *
h / dq / dq) + d *
h / dq;
1903 ptrap[4] = d /
x / 2;
1904 ptrap[5] = ptrap[4];
1906 ptrap[7] = ptrap[3];
1907 ptrap[8] = ptrap[4];
1908 ptrap[9] = ptrap[4];
1910 vmc->Gsvolu(
"BBD1",
"TRAP", kSteel, ptrap, 11);
1911 ptrap[3] = d / 2 - kBBBdd;
1912 ptrap[4] = (d / 2 - kBBBdd) /
x;
1913 ptrap[5] = ptrap[4];
1914 ptrap[7] = ptrap[3];
1915 ptrap[8] = ptrap[4];
1916 ptrap[9] = ptrap[4];
1917 vmc->Gsvolu(
"BBD3",
"TRAP", kAir, ptrap, 11);
1918 vmc->Gspos(
"BBD3", 1,
"BBD1", 0.0, 0.0, 0., 0,
"ONLY");
1919 dx = (kBBMRou + kBBMRin) / 2.;
1920 dy = ((kBBMRou + kBBMRin) / 2) * TMath::Tan(10 *
kDegrad) - kBBBdz / 2. / TMath::Cos(10 *
kDegrad);
1921 vmc->Gspos(
"BBD1", 1,
"BBCE", dx, dy, dz / 2. + kBBBdz / 2., idrotm[2052],
"ONLY");
1927 ptrap[4] = d / 2 /
x;
1928 ptrap[5] = ptrap[4];
1930 ptrap[7] = ptrap[3];
1931 ptrap[8] = ptrap[4];
1932 ptrap[9] = ptrap[4];
1934 vmc->Gsvolu(
"BBD2",
"TRAP", kSteel, ptrap, 11);
1935 ptrap[3] = d / 2 - kBBBdd;
1936 ptrap[4] = (d / 2 - kBBBdd) /
x;
1937 ptrap[5] = ptrap[4];
1938 ptrap[7] = ptrap[3];
1939 ptrap[8] = ptrap[4];
1940 ptrap[9] = ptrap[4];
1941 vmc->Gsvolu(
"BBD4",
"TRAP", kAir, ptrap, 11);
1942 vmc->Gspos(
"BBD4", 1,
"BBD2", 0.0, 0.0, 0., 0,
"ONLY");
1943 dx = (kBBMRou + kBBMRin) / 2.;
1944 dy = ((kBBMRou + kBBMRin) / 2) * TMath::Tan(10 *
kDegrad) - kBBBdz / 2. / TMath::Cos(10 *
kDegrad);
1945 vmc->Gspos(
"BBD2", 1,
"BBCE", dx, dy, -dz / 2. - kBBBdz / 2., idrotm[2052],
"ONLY");
1947 vmc->Gspos(
"BBMO", 1,
TOPNAME, 0., 30., +376. + kBBMdz / 2. + 0.5, 0,
"ONLY");