30                             mPCBRad{17.5, 17.5, 17.5, 23.0, 23.0},
 
 
   47  mHalfDisk = 
new TGeoVolumeAssembly(Form(
"PCB_H%d_D%d", half, disk));
 
   49  auto* PCBCu = 
new TGeoTubeSeg(Form(
"PCBCu_H%d_D%d", half, disk), 0, mPCBRad[disk], mCuThickness / 2., mPhi0, mPhi1);
 
   50  auto* PCBFR4 = 
new TGeoTubeSeg(Form(
"PCBFR4_H%d_D%d", half, disk), 0, mPCBRad[disk], mFR4Thickness / 2., mPhi0, mPhi1);
 
   54  for (
auto cut = 0; cut < mNumberOfBoxCuts[disk]; cut++) {
 
   55    auto* boxName = Form(
"PCBBoxCut_%d_H%d_D%d", cut, half, disk);
 
   56    auto* boxCSName = Form(
"PCBBoxCS_%d_H%d_D%d", cut, half, disk);
 
   57    mSomeBox = 
new TGeoBBox(boxName, mBoxCuts[disk][cut][0] / 2. + 2 * mT_delta, mBoxCuts[disk][cut][1] / 2. + 2 * mT_delta, mFR4Thickness + mT_delta);
 
   58    mSomeTranslation = 
new TGeoTranslation(mBoxCuts[disk][cut][2], mBoxCuts[disk][cut][3], 0.);
 
   61      mSomeSubtraction = 
new TGeoSubtraction(PCBCu, mSomeBox, 
nullptr, mSomeTranslation);
 
   63      mSomeSubtraction = 
new TGeoSubtraction(mPCBCu, mSomeBox, 
nullptr, mSomeTranslation);
 
   65    mPCBCu = 
new TGeoCompositeShape(boxCSName, mSomeSubtraction);
 
   68      mSomeSubtraction = 
new TGeoSubtraction(PCBFR4, mSomeBox, 
nullptr, mSomeTranslation);
 
   70      mSomeSubtraction = 
new TGeoSubtraction(mPCBFR4, mSomeBox, 
nullptr, mSomeTranslation);
 
   72    mPCBFR4 = 
new TGeoCompositeShape(boxCSName, mSomeSubtraction);
 
   76  if (mNumberOfBoxAdd[disk] != 0) {
 
   77    for (
auto iBox = 0; iBox < mNumberOfBoxAdd[disk]; iBox++) {
 
   78      auto* boxName = Form(
"PCBBoxAdd_%d_H%d_D%d", iBox, half, disk);
 
   79      auto* boxCSName = Form(
"PCBBoxAddCS_%d_H%d_D%d", iBox, half, disk);
 
   80      mSomeBox = 
new TGeoBBox(boxName, mBoxAdd[disk][iBox][0] / 2., mBoxAdd[disk][iBox][1] / 2., mFR4Thickness / 2.);
 
   81      mSomeTranslation = 
new TGeoTranslation(mBoxAdd[disk][iBox][2], mBoxAdd[disk][iBox][3], 0.);
 
   82      mSomeUnion = 
new TGeoUnion(mPCBFR4, mSomeBox, 
nullptr, mSomeTranslation);
 
   83      mPCBFR4 = 
new TGeoCompositeShape(boxCSName, mSomeUnion);
 
   84      mSomeBox = 
new TGeoBBox(boxName, mBoxAdd[disk][iBox][0] / 2., mBoxAdd[disk][iBox][1] / 2., mCuThickness / 2.);
 
   85      mSomeUnion = 
new TGeoUnion(mPCBCu, mSomeBox, 
nullptr, mSomeTranslation);
 
   86      mPCBCu = 
new TGeoCompositeShape(boxCSName, mSomeUnion);
 
   94  for (
auto iHole = 0; iHole < mNumberOfHoles[disk]; iHole++) {
 
   95    auto* tubeName = Form(
"PCBHole_%d_H%d_D%d", iHole, half, disk);
 
   96    auto* tubeCSName = Form(
"PCBHoleCS_%d_H%d_D%d", iHole, half, disk);
 
   97    mSomeTube = 
new TGeoTube(tubeName, 0, mHoles[disk][iHole][0] / 2.0, mFR4Thickness + 10 * mT_delta); 
 
   98    mSomeTranslation = 
new TGeoTranslation(mHoles[disk][iHole][1], mHoles[disk][iHole][2], 0.);
 
   99    mSomeSubtraction = 
new TGeoSubtraction(mPCBCu, mSomeTube, 
nullptr, mSomeTranslation);
 
  100    mPCBCu = 
new TGeoCompositeShape(tubeCSName, mSomeSubtraction);
 
  101    mSomeSubtraction = 
new TGeoSubtraction(mPCBFR4, mSomeTube, 
nullptr, mSomeTranslation);
 
  102    mPCBFR4 = 
new TGeoCompositeShape(tubeCSName, mSomeSubtraction);
 
  107  auto* PCB_Cu_vol = 
new TGeoVolume(Form(
"PCBCu_H%d_D%d", half, disk), mPCBCu, mPCBMediumCu);
 
  108  auto* PCB_FR4_vol = 
new TGeoVolume(Form(
"PCBFR4_H%d_D%d", half, disk), mPCBFR4, mPCBMediumFR4);
 
  110  auto* rot1 = 
new TGeoRotation(
"rot", 180, 0, 0);
 
  111  auto* rot2 = 
new TGeoRotation(
"rot", 180., 180., 180.);
 
  112  auto* tr_rot1_Cu = 
new TGeoCombiTrans(0., 0., 0.4 + mFR4Thickness + mCuThickness / 2., rot1);
 
  113  auto* tr_rot1_FR4 = 
new TGeoCombiTrans(0., 0., 0.4 + mFR4Thickness / 2., rot1);
 
  114  auto* tr_rot2_Cu = 
new TGeoCombiTrans(0., 0., -(0.4 + mFR4Thickness + mCuThickness / 2.), rot2);
 
  115  auto* tr_rot2_FR4 = 
new TGeoCombiTrans(0., 0., -(0.4 + mFR4Thickness / 2.), rot2);
 
  116  mHalfDisk->AddNode(PCB_Cu_vol, 0, tr_rot1_Cu);
 
  117  mHalfDisk->AddNode(PCB_FR4_vol, 0, tr_rot1_FR4);
 
  118  mHalfDisk->AddNode(PCB_Cu_vol, 0, tr_rot2_Cu);
 
  119  mHalfDisk->AddNode(PCB_FR4_vol, 0, tr_rot2_FR4);
 
 
  124void PCBSupport::initParameters()
 
  127  mPCBMediumCu = gGeoManager->GetMedium(
"MFT_Cu$");
 
  128  mPCBMediumFR4 = gGeoManager->GetMedium(
"MFT_FR4$");
 
  134  mNumberOfBoxCuts[0] = 10;
 
  136  mBoxCuts[00] = 
new Double_t[mNumberOfBoxCuts[0]][4]{
 
  137    {35.0, 8.91, 0., 4.455},
 
  138    {15.9, 0.49, 0., 9.155},
 
  139    {15.0, 2.52, 0.25, 10.66},
 
  140    {4.8, 2.1, 0.25, 12.97},
 
  141    {8.445, 1.4, 0., 16.8},
 
  142    {4.2775, 2., -6.36125, 16.5},
 
  143    {4.2775, 2., 6.36125, 16.5},
 
  144    {1.0, 1.0, -15.2, 9.41},
 
  145    {1.0, 1.0, 15.2, 9.41},
 
  146    {0.3, 0.3, -14.0, 9.5}};
 
  149  mNumberOfBoxCuts[1] = mNumberOfBoxCuts[0];
 
  150  mBoxCuts[01] = mBoxCuts[00];
 
  153  mNumberOfBoxCuts[2] = 9;
 
  154  mBoxCuts[02] = 
new Double_t[mNumberOfBoxCuts[2]][4]{
 
  155    {35, 8.91, 0.0, 4.455},
 
  156    {19.4, 0.49, 0.0, 9.155},
 
  157    {18.4, 2.52, .25, 10.66},
 
  158    {12.6, 0.48, 0.0, 12.16},
 
  159    {11.6, 1.62, 0.25, 13.21},
 
  160    {3.1, 0.91, 4.5, 14.475},
 
  161    {3.1, 0.91, -4.0, 14.475},
 
  162    {0.5, 0.69, 14.95, 9.255},
 
  163    {0.5, 0.69, -14.95, 9.255}};
 
  166  mNumberOfBoxCuts[3] = 14;
 
  167  mBoxCuts[03] = 
new Double_t[mNumberOfBoxCuts[3]][4]{
 
  170    {26.9, 1.92, -0.6, 10.96},
 
  171    {19.4, 0.48, 0, 12.16},
 
  172    {18.4, 2.53, 0.25, 13.665},
 
  173    {8.2, 1.8, 0.25, 15.83},
 
  174    {4.8, 1.4, 0.25, 17.43},
 
  175    {1.7, 0.46, -3, 16.96},
 
  176    {1.6, 0.6, 9.8, 20.8},
 
  177    {1.6, 0.6, -9.8, 20.8},
 
  178    {18.0, 1.9, 0, 22.05},
 
  181    {0.4, 0.3, -19.5, 10}};
 
  184  mNumberOfBoxCuts[4] = 14;
 
  185  mBoxCuts[04] = 
new Double_t[mNumberOfBoxCuts[4]][4]{
 
  186    {46.0, 5.0, 0.0, 2.5},
 
  187    {33.0, 5.0, 0.0, 7.5},
 
  188    {28.55, 1.92, .225, 10.96},
 
  189    {22.8, 0.48, 0.0, 12.16},
 
  190    {21.8, 2.53, 0.25, 13.665},
 
  191    {16.0, 0.42, 0.0, 15.14},
 
  192    {15.0, 2.01, 0.25, 16.355},
 
  193    {3.1, 0.58, 6.2, 17.65},
 
  194    {4.8, 1.17, 0.25, 17.945},
 
  195    {5.1, 0.58, -4.7, 17.65},
 
  196    {9.8, 0.5, 0.0, 22.75},
 
  197    {1.0, 1.8, 22.5, 5.9},
 
  198    {1.0, 1.8, -22.5, 5.9},
 
  199    {0.4, 0.3, -19.5, 10}};
 
  204  mNumberOfBoxAdd[0] = 0;
 
  205  mBoxAdd[00] = 
nullptr;
 
  208  mNumberOfBoxAdd[1] = mNumberOfBoxAdd[0];
 
  209  mBoxAdd[01] = mBoxAdd[00];
 
  212  mNumberOfBoxAdd[2] = 4;
 
  213  mBoxAdd[02] = 
new Double_t[mNumberOfBoxAdd[2]][4]{
 
  214    {1.51, 2.59, 13.945, 10.205},
 
  215    {1.51, 2.59, -13.945, 10.205},
 
  216    {13.5, 0.9, 0.0, 16.45},
 
  217    {10.2, 0.6, 0.0, 17.2}};
 
  220  mNumberOfBoxAdd[3] = 0;
 
  221  mBoxAdd[03] = 
nullptr;
 
  224  mNumberOfBoxAdd[4] = 1;
 
  225  mBoxAdd[04] = 
new Double_t[mNumberOfBoxAdd[4]][4]{
 
  226    {22, 2.339, 0.0, 21.3305}};
 
  230  mNumberOfHoles[0] = 7;
 
  231  mHoles[00] = 
new Double_t[mNumberOfHoles[0]][3]{
 
  241  mNumberOfHoles[1] = mNumberOfHoles[0];
 
  242  mHoles[01] = mHoles[00];
 
  245  mNumberOfHoles[2] = 7;
 
  246  mHoles[02] = 
new Double_t[mNumberOfHoles[2]][3]{
 
  256  mNumberOfHoles[3] = 13;
 
  257  mHoles[03] = 
new Double_t[mNumberOfHoles[3]][3]{
 
  267    {.424, 7.899, 20.415},
 
  268    {.424, -7.899, 20.415},
 
  270    {.424, -0.5, 20.415}};
 
  273  mNumberOfHoles[4] = 15;
 
  274  mHoles[04] = 
new Double_t[mNumberOfHoles[4]][3]{
 
  284    {0.424, 10.098, 21.815},
 
  285    {0.424, -10.098, 21.815},
 
  286    {0.424, 2.699, 21.815},
 
  287    {0.424, -2.699, 21.815},
 
  288    {0.424, 1.699, 21.815},
 
  289    {0.424, -1.699, 21.815}};
 
Constants for the MFT; distance unit is cm.
Class handling both virtual segmentation and real volumes.
Class describing geometry of one MFT half-disk PCBsupport.
TGeoVolumeAssembly * create(Int_t kHalf, Int_t disk)