+ voRB26s1RFlange->AddNode(voRB26s1RFlangeIs, 1, gGeoIdentity);
+ voRB26s1RFlange->AddNode(voRB26s1RFlangeCr, 1, gGeoIdentity);
+ voRB26s1RFlange->AddNode(voRB26s1RFlangeFp, 1, new TGeoTranslation(0., 0., kRB26s1RFlangeIsL));
+
+///////////////////////////////////
+// Fixed Flange //
+// Drawing LHCVFX_0006 //
+///////////////////////////////////
+ const Float_t kRB26s2FFlangeL = 2.13; // Length of the flange
+ const Float_t kRB26s2FFlangeD1 = 0.97; // Length of section 1
+ const Float_t kRB26s2FFlangeD2 = 0.29; // Length of section 2
+ const Float_t kRB26s2FFlangeD3 = 0.87; // Length of section 3
+ const Float_t kRB26s2FFlangeRo = 17.15/2.; // Flange outer radius
+ const Float_t kRB26s2FFlangeRi1 = 12.30/2.; // Flange inner radius section 1
+ const Float_t kRB26s2FFlangeRi2 = 12.00/2.; // Flange inner radius section 2
+ const Float_t kRB26s2FFlangeRi3 = 12.30/2.; // Flange inner radius section 3
+ z0 = 0;
+ TGeoPcon* shRB26s2FFlange = new TGeoPcon(0., 360., 6);
+ z0 = 0.;
+ shRB26s2FFlange->DefineSection(0, z0, kRB26s2FFlangeRi1, kRB26s2FFlangeRo);
+ z0 += kRB26s2FFlangeD1;
+ shRB26s2FFlange->DefineSection(1, z0, kRB26s2FFlangeRi1, kRB26s2FFlangeRo);
+ shRB26s2FFlange->DefineSection(2, z0, kRB26s2FFlangeRi2, kRB26s2FFlangeRo);
+ z0 += kRB26s2FFlangeD2;
+ shRB26s2FFlange->DefineSection(3, z0, kRB26s2FFlangeRi2, kRB26s2FFlangeRo);
+ shRB26s2FFlange->DefineSection(4, z0, kRB26s2FFlangeRi3, kRB26s2FFlangeRo);
+ z0 += kRB26s2FFlangeD3;
+ shRB26s2FFlange->DefineSection(5, z0, kRB26s2FFlangeRi3, kRB26s2FFlangeRo);
+ TGeoVolume* voRB26s2FFlange = new TGeoVolume("RB26s2FFlange", shRB26s2FFlange, kMedSteel);
+
+ TGeoVolume* voRB26s2FFlangeM = new TGeoVolume("RB26s2FFlangeM", MakeMotherFromTemplate(shRB26s2FFlange, 2, 5), kMedVac);
+ voRB26s2FFlangeM->AddNode(voRB26s2FFlange, 1, gGeoIdentity);
+
+
+
+////////////////////////////////////////
+// //
+// RB26/3 //
+// Drawing LHCV2a_0048 //
+// Drawing LHCV2a_0002 //
+////////////////////////////////////////
+//
+// Pos 1 Vacuum Tubes LHCVC2A__0003
+// Pos 2 Fixed Point LHCVFX___0005
+// Pos 3 Split Flange LHCVFX___0007
+// Pos 4 Fixed Flange LHCVFX___0004
+// Pos 5 Axial Compensator LHCVC2A__0065
+//
+//
+//
+//
+///////////////////////////////////
+// Vacuum Tube //
+// Drawing LHCVC2A_0003 //
+///////////////////////////////////
+ const Float_t kRB26s3TubeL = 629.35 + 0.3; // 0.3 cm added for welding
+ const Float_t kRB26s3TubeR1 = 12./2.;
+ const Float_t kRB26s3TubeR2 = kRB26s3TubeR1 + 215.8 * TMath::Tan(0.829 / 180. * TMath::Pi());
+
+
+ TGeoPcon* shRB26s3Tube = new TGeoPcon(0., 360., 7);
+ // Section 1: straight section
+ shRB26s3Tube->DefineSection(0, 0.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);
+ shRB26s3Tube->DefineSection(1, 2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);
+ // Section 2: 0.829 deg opening cone
+ shRB26s3Tube->DefineSection(2, 2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.20);
+
+ shRB26s3Tube->DefineSection(3, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.20);
+ shRB26s3Tube->DefineSection(4, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.30);
+
+ shRB26s3Tube->DefineSection(5, 622.20, 30.00/2., 30.60/2.);
+ shRB26s3Tube->DefineSection(6, kRB26s3TubeL, 30.00/2., 30.60/2.);
+
+ TGeoVolume* voRB26s3Tube = new TGeoVolume("RB26s3Tube", shRB26s3Tube, kMedSteel);
+// Add the insulation layer
+ TGeoVolume* voRB26s3TubeIns = new TGeoVolume("RB26s3TubeIns", MakeInsulationFromTemplate(shRB26s3Tube), kMedInsu);
+ voRB26s3Tube->AddNode(voRB26s3TubeIns, 1, gGeoIdentity);
+
+ TGeoVolume* voRB26s3TubeM = new TGeoVolume("RB26s3TubeM", MakeMotherFromTemplate(shRB26s3Tube), kMedVac);
+ voRB26s3TubeM->AddNode(voRB26s3Tube, 1, gGeoIdentity);
+
+
+
+///////////////////////////////////
+// Fixed Point //
+// Drawing LHCVFX_0005 //
+///////////////////////////////////
+ const Float_t kRB26s3FixedPointL = 16.37 ; // Length of the fixed point section (0.3 cm added for welding)
+ const Float_t kRB26s3FixedPointZ = 9.72 ; // Position of the ring (0.15 cm added for welding)
+ const Float_t kRB26s3FixedPointD = 0.595 ; // Width of the ring
+ const Float_t kRB26s3FixedPointR = 13.30/2. ; // Radius of the ring
+ const Float_t kRB26s3FixedPointRi = 12.00/2. ; // Inner radius of the tube
+ const Float_t kRB26s3FixedPointRo1 = 12.30/2. ; // Outer radius of the tube (in)
+ const Float_t kRB26s3FixedPointRo2 = 12.40/2. ; // Outer radius of the tube (out)
+ const Float_t kRB26s3FixedPointDs = 1.5 ; // Width of straight section behind ring
+ const Float_t kRB26s3FixedPointDc = 3.15 ; // Width of conical section behind ring (0.15 cm added for welding)
+
+ TGeoPcon* shRB26s3FixedPoint = new TGeoPcon(0., 360., 8);
+ z0 = 0.;
+ shRB26s3FixedPoint->DefineSection(0, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
+ z0 += kRB26s3FixedPointZ;
+ shRB26s3FixedPoint->DefineSection(1, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
+ shRB26s3FixedPoint->DefineSection(2, z0, kRB26s3FixedPointRi, kRB26s3FixedPointR);
+ z0 += kRB26s3FixedPointD;
+ shRB26s3FixedPoint->DefineSection(3, z0, kRB26s3FixedPointRi, kRB26s3FixedPointR);
+ shRB26s3FixedPoint->DefineSection(4, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
+ z0 += kRB26s3FixedPointDs;
+ shRB26s3FixedPoint->DefineSection(5, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
+ z0 += kRB26s3FixedPointDc;
+ shRB26s3FixedPoint->DefineSection(6, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo2);
+ z0 = kRB26s3FixedPointL;
+ shRB26s3FixedPoint->DefineSection(7, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo2);
+ TGeoVolume* voRB26s3FixedPoint = new TGeoVolume("RB26s3FixedPoint", shRB26s3FixedPoint, kMedSteel);
+
+ TGeoVolume* voRB26s3FixedPointM = new TGeoVolume("RB26s3FixedPointM", MakeMotherFromTemplate(shRB26s3FixedPoint), kMedVac);
+ voRB26s3FixedPointM->AddNode(voRB26s3FixedPoint, 1, gGeoIdentity);
+
+///////////////////////////////////
+// Split Flange //
+// Drawing LHCVFX_0005 //
+///////////////////////////////////
+ const Float_t kRB26s3SFlangeL = 2.13; // Length of the flange
+ const Float_t kRB26s3SFlangeD1 = 0.57; // Length of section 1
+ const Float_t kRB26s3SFlangeD2 = 0.36; // Length of section 2
+ const Float_t kRB26s3SFlangeD3 = 0.50 + 0.70; // Length of section 3
+ const Float_t kRB26s3SFlangeRo = 17.15/2.; // Flange outer radius
+ const Float_t kRB26s3SFlangeRi1 = 12.30/2.; // Flange inner radius section 1
+ const Float_t kRB26s3SFlangeRi2 = 12.00/2.; // Flange inner radius section 2
+ const Float_t kRB26s3SFlangeRi3 = 12.30/2.; // Flange inner radius section 3
+ z0 = 0;
+ TGeoPcon* shRB26s3SFlange = new TGeoPcon(0., 360., 6);
+ z0 = 0.;
+ shRB26s3SFlange->DefineSection(0, z0, kRB26s3SFlangeRi1, kRB26s3SFlangeRo);
+ z0 += kRB26s3SFlangeD1;
+ shRB26s3SFlange->DefineSection(1, z0, kRB26s3SFlangeRi1, kRB26s3SFlangeRo);
+ shRB26s3SFlange->DefineSection(2, z0, kRB26s3SFlangeRi2, kRB26s3SFlangeRo);
+ z0 += kRB26s3SFlangeD2;
+ shRB26s3SFlange->DefineSection(3, z0, kRB26s3SFlangeRi2, kRB26s3SFlangeRo);
+ shRB26s3SFlange->DefineSection(4, z0, kRB26s3SFlangeRi3, kRB26s3SFlangeRo);
+ z0 += kRB26s3SFlangeD3;
+ shRB26s3SFlange->DefineSection(5, z0, kRB26s3SFlangeRi3, kRB26s3SFlangeRo);
+ TGeoVolume* voRB26s3SFlange = new TGeoVolume("RB26s3SFlange", shRB26s3SFlange, kMedSteel);
+
+ TGeoVolume* voRB26s3SFlangeM = new TGeoVolume("RB26s3SFlange", MakeMotherFromTemplate(shRB26s3SFlange, 0, 3), kMedVac);
+ voRB26s3SFlangeM->AddNode(voRB26s3SFlange, 1, gGeoIdentity);
+
+///////////////////////////////////
+// RB26/3 Fixed Flange //
+// Drawing LHCVFX___0004 //
+///////////////////////////////////
+ const Float_t kRB26s3FFlangeL = 2.99; // Length of the flange
+ const Float_t kRB26s3FFlangeD1 = 1.72; // Length of section 1
+ const Float_t kRB26s3FFlangeD2 = 0.30; // Length of section 2
+ const Float_t kRB26s3FFlangeD3 = 0.97; // Length of section 3
+ const Float_t kRB26s3FFlangeRo = 36.20/2.; // Flange outer radius
+ const Float_t kRB26s3FFlangeRi1 = 30.60/2.; // Flange inner radius section 1
+ const Float_t kRB26s3FFlangeRi2 = 30.00/2.; // Flange inner radius section 2
+ const Float_t kRB26s3FFlangeRi3 = 30.60/2.; // Flange inner radius section 3
+ z0 = 0;
+ TGeoPcon* shRB26s3FFlange = new TGeoPcon(0., 360., 6);
+ z0 = 0.;
+ shRB26s3FFlange->DefineSection(0, z0, kRB26s3FFlangeRi1, kRB26s3FFlangeRo);
+ z0 += kRB26s3FFlangeD1;
+ shRB26s3FFlange->DefineSection(1, z0, kRB26s3FFlangeRi1, kRB26s3FFlangeRo);
+ shRB26s3FFlange->DefineSection(2, z0, kRB26s3FFlangeRi2, kRB26s3FFlangeRo);
+ z0 += kRB26s3FFlangeD2;
+ shRB26s3FFlange->DefineSection(3, z0, kRB26s3FFlangeRi2, kRB26s3FFlangeRo);
+ shRB26s3FFlange->DefineSection(4, z0, kRB26s3FFlangeRi3, kRB26s3FFlangeRo);
+ z0 += kRB26s3FFlangeD3;
+ shRB26s3FFlange->DefineSection(5, z0, kRB26s3FFlangeRi3, kRB26s3FFlangeRo);
+ TGeoVolume* voRB26s3FFlange = new TGeoVolume("RB26s3FFlange", shRB26s3FFlange, kMedSteel);
+
+ TGeoVolume* voRB26s3FFlangeM = new TGeoVolume("RB26s3FFlange", MakeMotherFromTemplate(shRB26s3FFlange, 2, 5), kMedVac);
+ voRB26s3FFlangeM->AddNode(voRB26s3FFlange, 1, gGeoIdentity);
+
+
+
+///////////////////////////////////
+// RB26/3 Axial Compensator //
+// Drawing LHCVC2a_0065 //
+///////////////////////////////////
+ const Float_t kRB26s3CompL = 42.0; // Length of the compensator (0.3 cm added for welding)
+ const Float_t kRB26s3BellowRo = 34.00/2.; // Bellow outer radius [Pos 1]
+ const Float_t kRB26s3BellowRi = 30.10/2.; // Bellow inner radius [Pos 1]
+ const Int_t kRB26s3NumberOfPlies = 13; // Number of plies [Pos 1]
+ const Float_t kRB26s3BellowUndL = 17.70; // Length of undulated region [Pos 1]
+ const Float_t kRB26s3PlieThickness = 0.06; // Plie thickness [Pos 1]
+ const Float_t kRB26s3ConnectionPlieR = 0.21; // Connection plie radius [Pos 1]
+// Plie radius
+ const Float_t kRB26s3PlieR =
+ (kRB26s3BellowUndL - 4. * kRB26s3ConnectionPlieR + 2. * kRB26s3PlieThickness +
+ (2. * kRB26s3NumberOfPlies - 2.) * kRB26s3PlieThickness) / (4. * kRB26s3NumberOfPlies - 2.);
+
+ //
+ // The welding tubes have 3 sections with different radii and 2 transition regions.
+ // Section 1: connection to the outside
+ // Section 2: commection to the bellow
+ // Section 3: between 1 and 2
+ const Float_t kRB26s3CompTubeInnerR1 = 30.0/2.; // Outer Connection tubes inner radius [Pos 4 + 3]
+ const Float_t kRB26s3CompTubeOuterR1 = 30.6/2.; // Outer Connection tubes outer radius [Pos 4 + 3]
+ const Float_t kRB26s3CompTubeInnerR2 = 29.4/2.; // Connection tubes inner radius [Pos 4 + 3]
+ const Float_t kRB26s3CompTubeOuterR2 = 30.0/2.; // Connection tubes outer radius [Pos 4 + 3]
+ const Float_t kRB26s3CompTubeInnerR3 = 30.6/2.; // Connection tubes inner radius at bellow [Pos 4 + 3]
+ const Float_t kRB26s3CompTubeOuterR3 = 32.2/2.; // Connection tubes outer radius at bellow [Pos 4 + 3]
+
+ const Float_t kRB26s3WeldingTubeLeftL1 = 2.0; // Left connection tube length [Pos 4]
+ const Float_t kRB26s3WeldingTubeLeftL2 = 3.4; // Left connection tube length [Pos 4]
+ const Float_t kRB26s3WeldingTubeLeftL = 7.0; // Left connection tube total length [Pos 4]
+ const Float_t kRB26s3WeldingTubeRightL1 = 2.3; // Right connection tube length [Pos 3] (0.3 cm added for welding)
+ const Float_t kRB26s3WeldingTubeRightL2 = 13.4; // Right connection tube length [Pos 3]
+
+ const Float_t kRB26s3WeldingTubeT1 = 0.6; // Length of first r-transition [Pos 4 + 3]
+ const Float_t kRB26s3WeldingTubeT2 = 1.0; // Length of 2nd r-transition [Pos 4 + 3]
+
+
+
+ const Float_t kRB26s3RingOuterR = 36.1/2.; // Ring inner radius [Pos 4]
+ const Float_t kRB26s3RingL = 0.8/2.; // Ring half length [Pos 4]
+ const Float_t kRB26s3RingZ = 3.7 ; // Ring z-position [Pos 4]
+ const Float_t kRB26s3ProtOuterR = 36.2/2.; // Protection tube outer radius [Pos 2]
+ const Float_t kRB26s3ProtL = 27.0/2.; // Protection tube half length [Pos 2]
+ const Float_t kRB26s3ProtZ = 4.0 ; // Protection tube z-position [Pos 2]
+
+
+// Mother volume
+//
+ TGeoPcon* shRB26s3Compensator = new TGeoPcon(0., 360., 6);
+ shRB26s3Compensator->DefineSection( 0, 0.0, 0., kRB26s3CompTubeOuterR1);
+ shRB26s3Compensator->DefineSection( 1, kRB26s3RingZ, 0., kRB26s3CompTubeOuterR1);
+ shRB26s3Compensator->DefineSection( 2, kRB26s3RingZ, 0., kRB26s3ProtOuterR);
+ shRB26s3Compensator->DefineSection( 3, kRB26s3ProtZ + 2. * kRB26s3ProtL, 0., kRB26s3ProtOuterR);
+ shRB26s3Compensator->DefineSection( 4, kRB26s3ProtZ + 2. * kRB26s3ProtL, 0., kRB26s3CompTubeOuterR1);
+ shRB26s3Compensator->DefineSection( 5, kRB26s3CompL , 0., kRB26s3CompTubeOuterR1);
+ TGeoVolume* voRB26s3Compensator =
+ new TGeoVolume("RB26s3Compensator", shRB26s3Compensator, kMedVac);
+
+//
+// [Pos 1] Bellow
+//
+//
+ TGeoVolume* voRB26s3Bellow = new TGeoVolume("RB26s3Bellow",
+ new TGeoTube(kRB26s3BellowRi, kRB26s3BellowRo, kRB26s3BellowUndL/2.), kMedVac);
+//
+// Upper part of the undulation
+//
+ TGeoTorus* shRB26s3PlieTorusU = new TGeoTorus(kRB26s3BellowRo - kRB26s3PlieR, kRB26s3PlieR - kRB26s3PlieThickness, kRB26s3PlieR);
+ shRB26s3PlieTorusU->SetName("RB26s3TorusU");
+ TGeoTube* shRB26s3PlieTubeU = new TGeoTube (kRB26s3BellowRo - kRB26s3PlieR, kRB26s3BellowRo, kRB26s3PlieR);
+ shRB26s3PlieTubeU->SetName("RB26s3TubeU");
+ TGeoCompositeShape* shRB26s3UpperPlie = new TGeoCompositeShape("RB26s3UpperPlie", "RB26s3TorusU*RB26s3TubeU");
+
+ TGeoVolume* voRB26s3WiggleU = new TGeoVolume("RB26s3UpperPlie", shRB26s3UpperPlie, kMedSteel);
+//
+// Lower part of the undulation
+ TGeoTorus* shRB26s3PlieTorusL = new TGeoTorus(kRB26s3BellowRi + kRB26s3PlieR, kRB26s3PlieR - kRB26s3PlieThickness, kRB26s3PlieR);
+ shRB26s3PlieTorusL->SetName("RB26s3TorusL");
+ TGeoTube* shRB26s3PlieTubeL = new TGeoTube (kRB26s3BellowRi, kRB26s3BellowRi + kRB26s3PlieR, kRB26s3PlieR);
+ shRB26s3PlieTubeL->SetName("RB26s3TubeL");
+ TGeoCompositeShape* shRB26s3LowerPlie = new TGeoCompositeShape("RB26s3LowerPlie", "RB26s3TorusL*RB26s3TubeL");
+
+ TGeoVolume* voRB26s3WiggleL = new TGeoVolume("RB26s3LowerPlie", shRB26s3LowerPlie, kMedSteel);
+
+//
+// Connection between upper and lower part of undulation
+ TGeoVolume* voRB26s3WiggleC1 = new TGeoVolume("RB26s3PlieConn1",
+ new TGeoTube(kRB26s3BellowRi + kRB26s3PlieR,
+ kRB26s3BellowRo - kRB26s3PlieR, kRB26s3PlieThickness / 2.), kMedSteel);
+//
+// One wiggle
+ TGeoVolumeAssembly* voRB26s3Wiggle = new TGeoVolumeAssembly("RB26s3Wiggle");
+ z0 = - kRB26s3PlieThickness / 2.;
+ voRB26s3Wiggle->AddNode(voRB26s3WiggleC1, 1 , new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3PlieR - kRB26s3PlieThickness / 2.;
+ voRB26s3Wiggle->AddNode(voRB26s3WiggleU, 1 , new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3PlieR - kRB26s3PlieThickness / 2.;
+ voRB26s3Wiggle->AddNode(voRB26s3WiggleC1, 2 , new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3PlieR - kRB26s3PlieThickness;
+ voRB26s3Wiggle->AddNode(voRB26s3WiggleL, 1 , new TGeoTranslation(0., 0., z0));
+// Positioning of the volumes
+ z0 = - kRB26s3BellowUndL/2.+ kRB26s3ConnectionPlieR;
+ voRB26s3Bellow->AddNode(voRB26s3WiggleL, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3ConnectionPlieR;
+ zsh = 4. * kRB26s3PlieR - 2. * kRB26s3PlieThickness;
+ for (Int_t iw = 0; iw < kRB26s3NumberOfPlies; iw++) {
+ Float_t zpos = z0 + iw * zsh;
+ voRB26s3Bellow->AddNode(voRB26s3Wiggle, iw + 1, new TGeoTranslation(0., 0., zpos - kRB26s3PlieThickness));
+ }
+
+ voRB26s3Compensator->AddNode(voRB26s3Bellow, 1, new TGeoTranslation(0., 0., kRB26s3WeldingTubeLeftL + kRB26s3BellowUndL/2.));
+
+
+//
+// [Pos 2] Outer Protecting Tube
+//
+ TGeoTube* shRB26s3CompProtTube = new TGeoTube(kRB26s3RingOuterR, kRB26s3ProtOuterR, kRB26s3ProtL);
+ TGeoVolume* voRB26s3CompProtTube =
+ new TGeoVolume("RB26s3CompProtTube", shRB26s3CompProtTube, kMedSteel);
+ voRB26s3Compensator->AddNode(voRB26s3CompProtTube, 1, new TGeoTranslation(0., 0., kRB26s3ProtZ + kRB26s3ProtL));
+
+
+//
+// [Pos 3] Right Welding Tube
+//
+ TGeoPcon* shRB26s3CompRightTube = new TGeoPcon(0., 360., 5);
+ z0 = 0.;
+ shRB26s3CompRightTube->DefineSection(0, z0, kRB26s3CompTubeInnerR3, kRB26s3CompTubeOuterR3);
+ z0 += kRB26s3WeldingTubeT2;
+ shRB26s3CompRightTube->DefineSection(1, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
+ z0 += kRB26s3WeldingTubeRightL2;
+ shRB26s3CompRightTube->DefineSection(2, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
+ z0 += kRB26s3WeldingTubeT1;
+ shRB26s3CompRightTube->DefineSection(3, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
+ z0 += kRB26s3WeldingTubeRightL1;
+ shRB26s3CompRightTube->DefineSection(4, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
+
+ TGeoVolume* voRB26s3CompRightTube =
+ new TGeoVolume("RB26s3CompRightTube", shRB26s3CompRightTube, kMedSteel);
+ voRB26s3Compensator->AddNode(voRB26s3CompRightTube, 1, new TGeoTranslation(0., 0., kRB26s3CompL - z0));
+
+//
+// [Pos 4] Left Welding Tube
+//
+ TGeoPcon* shRB26s3CompLeftTube = new TGeoPcon(0., 360., 5);
+ z0 = 0.;
+ shRB26s3CompLeftTube->DefineSection(0, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
+ z0 += kRB26s3WeldingTubeLeftL1;
+ shRB26s3CompLeftTube->DefineSection(1, z0, kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
+ z0 += kRB26s3WeldingTubeT1;
+ shRB26s3CompLeftTube->DefineSection(2, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
+ z0 += kRB26s3WeldingTubeLeftL2;
+ shRB26s3CompLeftTube->DefineSection(3, z0, kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
+ z0 += kRB26s3WeldingTubeT2;
+ shRB26s3CompLeftTube->DefineSection(4, z0, kRB26s3CompTubeInnerR3, kRB26s3CompTubeOuterR3);
+
+ TGeoVolume* voRB26s3CompLeftTube =
+ new TGeoVolume("RB26s3CompLeftTube", shRB26s3CompLeftTube, kMedSteel);
+ voRB26s3Compensator->AddNode(voRB26s3CompLeftTube, 1, gGeoIdentity);
+//
+// [Pos 5] Ring
+//
+ TGeoTube* shRB26s3CompRing = new TGeoTube(kRB26s3CompTubeOuterR2, kRB26s3RingOuterR, kRB26s3RingL);
+ TGeoVolume* voRB26s3CompRing =
+ new TGeoVolume("RB26s3CompRing", shRB26s3CompRing, kMedSteel);
+ voRB26s3Compensator->AddNode(voRB26s3CompRing, 1, new TGeoTranslation(0., 0., kRB26s3RingZ + kRB26s3RingL));
+
+
+
+///////////////////////////////////////////
+// //
+// RB26/4-5 //
+// Drawing LHCV2a_0012 [as installed] //
+////////////////////////////////////////////
+// Pos1 Vacuum Tubes LHCVC2A__0014
+// Pos2 Compensator LHCVC2A__0066
+// Pos3 Fixed Point Section LHCVC2A__0016
+// Pos4 Split Flange LHCVFX___0005
+// Pos5 RotableFlange LHCVFX___0009
+////////////////////////////////////////////
+
+///////////////////////////////////
+// RB26/4-5 Vacuum Tubes //
+// Drawing LHCVC2a_0014 //
+///////////////////////////////////
+ const Float_t kRB26s45TubeL = 593.12 + 0.3; // 0.3 cm added for welding
+
+ TGeoPcon* shRB26s45Tube = new TGeoPcon(0., 360., 11);
+ // Section 1: straight section
+ shRB26s45Tube->DefineSection( 0, 0.00, 30.00/2., 30.60/2.);
+ shRB26s45Tube->DefineSection( 1, 1.20, 30.00/2., 30.60/2.);
+ shRB26s45Tube->DefineSection( 2, 1.20, 30.00/2., 30.80/2.);
+ shRB26s45Tube->DefineSection( 3, 25.10, 30.00/2., 30.80/2.);
+ // Section 2: 0.932 deg opening cone
+ shRB26s45Tube->DefineSection( 4, 486.10, 45.00/2., 45.80/2.);
+ // Section 3: straight section 4 mm
+ shRB26s45Tube->DefineSection( 5, 512.10, 45.00/2., 45.80/2.);
+ // Section 4: straight section 3 mm
+ shRB26s45Tube->DefineSection( 6, 512.10, 45.00/2., 45.60/2.);
+ shRB26s45Tube->DefineSection( 7, 527.70, 45.00/2., 45.60/2.);
+ // Section 4: closing cone
+ shRB26s45Tube->DefineSection( 8, 591.30, 10.00/2., 10.60/2.);
+ shRB26s45Tube->DefineSection( 9, 591.89, 10.00/2., 10.30/2.);
+
+ shRB26s45Tube->DefineSection(10, kRB26s45TubeL, 10.00/2., 10.30/2.);
+ TGeoVolume* voRB26s45Tube =
+ new TGeoVolume("RB26s45Tube", shRB26s45Tube, kMedSteel);
+
+ TGeoVolume* voRB26s45TubeM = new TGeoVolume("RB26s45TubeM", MakeMotherFromTemplate(shRB26s45Tube), kMedVac);
+ voRB26s45TubeM->AddNode(voRB26s45Tube, 1, gGeoIdentity);
+
+
+
+///////////////////////////////////
+// RB26/5 Axial Compensator //
+// Drawing LHCVC2a_0066 //
+///////////////////////////////////
+ const Float_t kRB26s5CompL = 27.60; // Length of the compensator (0.30 cm added for welding)
+ const Float_t kRB26s5BellowRo = 12.48/2.; // Bellow outer radius [Pos 1]
+ const Float_t kRB26s5BellowRi = 10.32/2.; // Bellow inner radius [Pos 1]
+ const Int_t kRB26s5NumberOfPlies = 15; // Number of plies [Pos 1]
+ const Float_t kRB26s5BellowUndL = 10.50; // Length of undulated region [Pos 1]
+ const Float_t kRB26s5PlieThickness = 0.025; // Plie thickness [Pos 1]
+ const Float_t kRB26s5ConnectionPlieR = 0.21; // Connection plie radius [Pos 1]
+ const Float_t kRB26s5ConnectionR = 11.2/2.; // Bellow connection radius [Pos 1]
+// Plie radius
+ const Float_t kRB26s5PlieR =
+ (kRB26s5BellowUndL - 4. * kRB26s5ConnectionPlieR + 2. * kRB26s5PlieThickness +
+ (2. * kRB26s5NumberOfPlies - 2.) * kRB26s5PlieThickness) / (4. * kRB26s5NumberOfPlies - 2.);
+ const Float_t kRB26s5CompTubeInnerR = 10.00/2.; // Connection tubes inner radius [Pos 2 + 3]
+ const Float_t kRB26s5CompTubeOuterR = 10.30/2.; // Connection tubes outer radius [Pos 2 + 3]
+ const Float_t kRB26s5WeldingTubeLeftL = 3.70/2.; // Left connection tube half length [Pos 2]
+ const Float_t kRB26s5WeldingTubeRightL = 13.40/2.; // Right connection tube half length [Pos 3] (0.3 cm added for welding)
+ const Float_t kRB26s5RingInnerR = 11.2/2.; // Ring inner radius [Pos 4]
+ const Float_t kRB26s5RingOuterR = 16.0/2.; // Ring inner radius [Pos 4]
+ const Float_t kRB26s5RingL = 0.4/2.; // Ring half length [Pos 4]
+ const Float_t kRB26s5RingZ = 14.97; // Ring z-position [Pos 4]
+ const Float_t kRB26s5ProtOuterR = 16.2/2.; // Protection tube outer radius [Pos 5]
+ const Float_t kRB26s5ProtL = 13.0/2.; // Protection tube half length [Pos 5]
+ const Float_t kRB26s5ProtZ = 2.17; // Protection tube z-position [Pos 5]
+ const Float_t kRB26s5DetailZR = 11.3/2.; // Detail Z max radius
+
+
+// Mother volume
+//
+ TGeoPcon* shRB26s5Compensator = new TGeoPcon(0., 360., 8);
+ shRB26s5Compensator->DefineSection( 0, 0.0, 0., kRB26s5CompTubeOuterR);
+ shRB26s5Compensator->DefineSection( 1, kRB26s5ProtZ, 0., kRB26s5CompTubeOuterR);
+ shRB26s5Compensator->DefineSection( 2, kRB26s5ProtZ, 0., kRB26s5ProtOuterR);
+ shRB26s5Compensator->DefineSection( 3, kRB26s5ProtZ + 2. * kRB26s5ProtL + 2. * kRB26s5RingL, 0., kRB26s5ProtOuterR);
+ shRB26s5Compensator->DefineSection( 4, kRB26s5ProtZ + 2. * kRB26s5ProtL + 2. * kRB26s5RingL, 0., kRB26s5DetailZR);
+ shRB26s5Compensator->DefineSection( 5, kRB26s5CompL - 8., 0., kRB26s5DetailZR);
+ shRB26s5Compensator->DefineSection( 6, kRB26s5CompL - 8., 0., kRB26s5CompTubeOuterR);
+ shRB26s5Compensator->DefineSection( 7, kRB26s5CompL, 0., kRB26s5CompTubeOuterR);
+ TGeoVolume* voRB26s5Compensator = new TGeoVolume("RB26s5Compensator", shRB26s5Compensator, kMedVac);
+
+//
+// [Pos 1] Bellow
+//
+//
+ TGeoVolume* voRB26s5Bellow = new TGeoVolume("RB26s5Bellow",
+ new TGeoTube(kRB26s5BellowRi, kRB26s5BellowRo, kRB26s5BellowUndL/2.), kMedVac);
+//
+// Upper part of the undulation
+//
+ TGeoTorus* shRB26s5PlieTorusU = new TGeoTorus(kRB26s5BellowRo - kRB26s5PlieR, kRB26s5PlieR - kRB26s5PlieThickness, kRB26s5PlieR);
+ shRB26s5PlieTorusU->SetName("RB26s5TorusU");
+ TGeoTube* shRB26s5PlieTubeU = new TGeoTube (kRB26s5BellowRo - kRB26s5PlieR, kRB26s5BellowRo, kRB26s5PlieR);
+ shRB26s5PlieTubeU->SetName("RB26s5TubeU");
+ TGeoCompositeShape* shRB26s5UpperPlie = new TGeoCompositeShape("RB26s5UpperPlie", "RB26s5TorusU*RB26s5TubeU");
+
+ TGeoVolume* voRB26s5WiggleU = new TGeoVolume("RB26s5UpperPlie", shRB26s5UpperPlie, kMedSteel);
+//
+// Lower part of the undulation
+ TGeoTorus* shRB26s5PlieTorusL = new TGeoTorus(kRB26s5BellowRi + kRB26s5PlieR, kRB26s5PlieR - kRB26s5PlieThickness, kRB26s5PlieR);
+ shRB26s5PlieTorusL->SetName("RB26s5TorusL");
+ TGeoTube* shRB26s5PlieTubeL = new TGeoTube (kRB26s5BellowRi, kRB26s5BellowRi + kRB26s5PlieR, kRB26s5PlieR);
+ shRB26s5PlieTubeL->SetName("RB26s5TubeL");
+ TGeoCompositeShape* shRB26s5LowerPlie = new TGeoCompositeShape("RB26s5LowerPlie", "RB26s5TorusL*RB26s5TubeL");
+
+ TGeoVolume* voRB26s5WiggleL = new TGeoVolume("RB26s5LowerPlie", shRB26s5LowerPlie, kMedSteel);
+
+//
+// Connection between upper and lower part of undulation
+ TGeoVolume* voRB26s5WiggleC1 = new TGeoVolume("RB26s5PlieConn1",
+ new TGeoTube(kRB26s5BellowRi + kRB26s5PlieR,
+ kRB26s5BellowRo - kRB26s5PlieR, kRB26s5PlieThickness / 2.), kMedSteel);
+//
+// One wiggle
+ TGeoVolumeAssembly* voRB26s5Wiggle = new TGeoVolumeAssembly("RB26s5Wiggle");
+ z0 = - kRB26s5PlieThickness / 2.;
+ voRB26s5Wiggle->AddNode(voRB26s5WiggleC1, 1 , new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s5PlieR - kRB26s5PlieThickness / 2.;
+ voRB26s5Wiggle->AddNode(voRB26s5WiggleU, 1 , new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s5PlieR - kRB26s5PlieThickness / 2.;
+ voRB26s5Wiggle->AddNode(voRB26s5WiggleC1, 2 , new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s5PlieR - kRB26s5PlieThickness;
+ voRB26s5Wiggle->AddNode(voRB26s5WiggleL , 1 , new TGeoTranslation(0., 0., z0));
+// Positioning of the volumes
+ z0 = - kRB26s5BellowUndL/2.+ kRB26s5ConnectionPlieR;
+ voRB26s5Bellow->AddNode(voRB26s5WiggleL, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s5ConnectionPlieR;
+ zsh = 4. * kRB26s5PlieR - 2. * kRB26s5PlieThickness;
+ for (Int_t iw = 0; iw < kRB26s5NumberOfPlies; iw++) {
+ Float_t zpos = z0 + iw * zsh;
+ voRB26s5Bellow->AddNode(voRB26s5Wiggle, iw + 1, new TGeoTranslation(0., 0., zpos - kRB26s5PlieThickness));
+ }
+
+ voRB26s5Compensator->AddNode(voRB26s5Bellow, 1, new TGeoTranslation(0., 0., 2. * kRB26s5WeldingTubeLeftL + kRB26s5BellowUndL/2.));
+
+//
+// [Pos 2] Left Welding Tube
+//
+ TGeoPcon* shRB26s5CompLeftTube = new TGeoPcon(0., 360., 3);
+ z0 = 0;
+ shRB26s5CompLeftTube->DefineSection(0, z0, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
+ z0 += 2 * kRB26s5WeldingTubeLeftL - ( kRB26s5ConnectionR - kRB26s5CompTubeOuterR);
+ shRB26s5CompLeftTube->DefineSection(1, z0, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
+ z0 += ( kRB26s5ConnectionR - kRB26s5CompTubeOuterR);
+ shRB26s5CompLeftTube->DefineSection(2, z0, kRB26s5ConnectionR - 0.15, kRB26s5ConnectionR);
+ TGeoVolume* voRB26s5CompLeftTube = new TGeoVolume("RB26s5CompLeftTube", shRB26s5CompLeftTube, kMedSteel);
+ voRB26s5Compensator->AddNode(voRB26s5CompLeftTube, 1, gGeoIdentity);
+//
+// [Pos 3] Right Welding Tube
+//
+ TGeoPcon* shRB26s5CompRightTube = new TGeoPcon(0., 360., 11);
+ // Detail Z
+ shRB26s5CompRightTube->DefineSection( 0, 0. , kRB26s5CompTubeInnerR + 0.22, 11.2/2.);
+ shRB26s5CompRightTube->DefineSection( 1, 0.05, kRB26s5CompTubeInnerR + 0.18, 11.2/2.);
+ shRB26s5CompRightTube->DefineSection( 2, 0.22, kRB26s5CompTubeInnerR , 11.2/2. - 0.22);
+ shRB26s5CompRightTube->DefineSection( 3, 0.44, kRB26s5CompTubeInnerR , 11.2/2.);
+ shRB26s5CompRightTube->DefineSection( 4, 1.70, kRB26s5CompTubeInnerR , 11.2/2.);
+ shRB26s5CompRightTube->DefineSection( 5, 2.10, kRB26s5CompTubeInnerR , kRB26s5CompTubeOuterR);
+ shRB26s5CompRightTube->DefineSection( 6, 2.80, kRB26s5CompTubeInnerR , kRB26s5CompTubeOuterR);
+ shRB26s5CompRightTube->DefineSection( 7, 2.80, kRB26s5CompTubeInnerR , 11.3/2.);
+ shRB26s5CompRightTube->DefineSection( 8, 3.40, kRB26s5CompTubeInnerR , 11.3/2.);
+ // Normal pipe
+ shRB26s5CompRightTube->DefineSection( 9, 3.50, kRB26s5CompTubeInnerR , kRB26s5CompTubeOuterR);
+ shRB26s5CompRightTube->DefineSection(10, 2. * kRB26s5WeldingTubeRightL, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
+
+ TGeoVolume* voRB26s5CompRightTube =
+ new TGeoVolume("RB26s5CompRightTube", shRB26s5CompRightTube, kMedSteel);
+ voRB26s5Compensator->AddNode(voRB26s5CompRightTube, 1,
+ new TGeoTranslation(0., 0., kRB26s5CompL - 2. * kRB26s5WeldingTubeRightL));
+//
+// [Pos 4] Ring
+//
+ TGeoTube* shRB26s5CompRing = new TGeoTube(kRB26s5RingInnerR, kRB26s5RingOuterR, kRB26s5RingL);
+ TGeoVolume* voRB26s5CompRing =
+ new TGeoVolume("RB26s5CompRing", shRB26s5CompRing, kMedSteel);
+ voRB26s5Compensator->AddNode(voRB26s5CompRing, 1, new TGeoTranslation(0., 0., kRB26s5RingZ + kRB26s5RingL));
+
+//
+// [Pos 5] Outer Protecting Tube
+//
+ TGeoTube* shRB26s5CompProtTube = new TGeoTube(kRB26s5RingOuterR, kRB26s5ProtOuterR, kRB26s5ProtL);
+ TGeoVolume* voRB26s5CompProtTube =
+ new TGeoVolume("RB26s5CompProtTube", shRB26s5CompProtTube, kMedSteel);
+ voRB26s5Compensator->AddNode(voRB26s5CompProtTube, 1, new TGeoTranslation(0., 0., kRB26s5ProtZ + kRB26s5ProtL));
+
+///////////////////////////////////////
+// RB26/4 Fixed Point Section //
+// Drawing LHCVC2a_0016 //
+///////////////////////////////////////
+ const Float_t kRB26s4TubeRi = 30.30/2. ; // Tube inner radius (0.3 cm added for welding)
+ const Float_t kRB26s4TubeRo = 30.60/2. ; // Tube outer radius
+ const Float_t kRB26s4FixedPointL = 12.63 ; // Length of the fixed point section
+ const Float_t kRB26s4FixedPointZ = 10.53 ; // Position of the ring (0.15 added for welding)
+ const Float_t kRB26s4FixedPointD = 0.595 ; // Width of the ring
+ const Float_t kRB26s4FixedPointR = 31.60/2. ; // Radius of the ring
+
+ TGeoPcon* shRB26s4FixedPoint = new TGeoPcon(0., 360., 6);
+ z0 = 0.;
+ shRB26s4FixedPoint->DefineSection(0, z0, kRB26s4TubeRi, kRB26s4TubeRo);
+ z0 += kRB26s4FixedPointZ;
+ shRB26s4FixedPoint->DefineSection(1, z0, kRB26s4TubeRi, kRB26s4TubeRo);
+ shRB26s4FixedPoint->DefineSection(2, z0, kRB26s4TubeRi, kRB26s4FixedPointR);
+ z0 += kRB26s4FixedPointD;
+ shRB26s4FixedPoint->DefineSection(3, z0, kRB26s4TubeRi, kRB26s4FixedPointR);
+ shRB26s4FixedPoint->DefineSection(4, z0, kRB26s4TubeRi, kRB26s4TubeRo);
+ z0 = kRB26s4FixedPointL;
+ shRB26s4FixedPoint->DefineSection(5, z0, kRB26s4TubeRi, kRB26s4TubeRo);
+ TGeoVolume* voRB26s4FixedPoint = new TGeoVolume("RB26s4FixedPoint", shRB26s4FixedPoint, kMedSteel);
+
+ TGeoVolume* voRB26s4FixedPointM = new TGeoVolume("RB26s4FixedPointM", MakeMotherFromTemplate(shRB26s4FixedPoint), kMedVac);
+ voRB26s4FixedPointM->AddNode(voRB26s4FixedPoint, 1, gGeoIdentity);
+
+
+///////////////////////////////////////
+// RB26/4 Split Flange //
+// Drawing LHCVFX__0005 //
+///////////////////////////////////////
+ const Float_t kRB26s4SFlangeL = 2.99; // Length of the flange
+ const Float_t kRB26s4SFlangeD1 = 0.85; // Length of section 1
+ const Float_t kRB26s4SFlangeD2 = 0.36; // Length of section 2
+ const Float_t kRB26s4SFlangeD3 = 0.73 + 1.05; // Length of section 3
+ const Float_t kRB26s4SFlangeRo = 36.20/2.; // Flange outer radius
+ const Float_t kRB26s4SFlangeRi1 = 30.60/2.; // Flange inner radius section 1
+ const Float_t kRB26s4SFlangeRi2 = 30.00/2.; // Flange inner radius section 2
+ const Float_t kRB26s4SFlangeRi3 = 30.60/2.; // Flange inner radius section 3
+ z0 = 0;
+ TGeoPcon* shRB26s4SFlange = new TGeoPcon(0., 360., 6);
+ z0 = 0.;
+ shRB26s4SFlange->DefineSection(0, z0, kRB26s4SFlangeRi1, kRB26s4SFlangeRo);
+ z0 += kRB26s4SFlangeD1;
+ shRB26s4SFlange->DefineSection(1, z0, kRB26s4SFlangeRi1, kRB26s4SFlangeRo);
+ shRB26s4SFlange->DefineSection(2, z0, kRB26s4SFlangeRi2, kRB26s4SFlangeRo);
+ z0 += kRB26s4SFlangeD2;
+ shRB26s4SFlange->DefineSection(3, z0, kRB26s4SFlangeRi2, kRB26s4SFlangeRo);
+ shRB26s4SFlange->DefineSection(4, z0, kRB26s4SFlangeRi3, kRB26s4SFlangeRo);
+ z0 += kRB26s4SFlangeD3;
+ shRB26s4SFlange->DefineSection(5, z0, kRB26s4SFlangeRi3, kRB26s4SFlangeRo);
+ TGeoVolume* voRB26s4SFlange = new TGeoVolume("RB26s4SFlange", shRB26s4SFlange, kMedSteel);
+
+ TGeoVolume* voRB26s4SFlangeM = new TGeoVolume("RB26s4SFlangeM", MakeMotherFromTemplate(shRB26s4SFlange, 0, 3), kMedVac);
+ voRB26s4SFlangeM->AddNode(voRB26s4SFlange, 1, gGeoIdentity);
+
+///////////////////////////////////////
+// RB26/5 Rotable Flange //
+// Drawing LHCVFX__0009 //
+///////////////////////////////////////
+ const Float_t kRB26s5RFlangeL = 1.86; // Length of the flange
+ const Float_t kRB26s5RFlangeD1 = 0.61; // Length of section 1
+ const Float_t kRB26s5RFlangeD2 = 0.15; // Length of section 2
+ const Float_t kRB26s5RFlangeD3 = 0.60; // Length of section 3
+ const Float_t kRB26s5RFlangeD4 = 0.50; // Length of section 4
+ const Float_t kRB26s5RFlangeRo = 15.20/2.; // Flange outer radius
+ const Float_t kRB26s5RFlangeRi1 = 10.30/2.; // Flange inner radius section 1
+ const Float_t kRB26s5RFlangeRi2 = 10.00/2.; // Flange inner radius section 2
+ const Float_t kRB26s5RFlangeRi3 = 10.30/2.; // Flange inner radius section 3
+ const Float_t kRB26s5RFlangeRi4 = 10.50/2.; // Flange inner radius section 4
+
+ z0 = 0;
+ TGeoPcon* shRB26s5RFlange = new TGeoPcon(0., 360., 8);
+ z0 = 0.;
+ shRB26s5RFlange->DefineSection(0, z0, kRB26s5RFlangeRi4, kRB26s5RFlangeRo);
+ z0 += kRB26s5RFlangeD4;
+ shRB26s5RFlange->DefineSection(1, z0, kRB26s5RFlangeRi4, kRB26s5RFlangeRo);
+ shRB26s5RFlange->DefineSection(2, z0, kRB26s5RFlangeRi3, kRB26s5RFlangeRo);
+ z0 += kRB26s5RFlangeD3;
+ shRB26s5RFlange->DefineSection(3, z0, kRB26s5RFlangeRi3, kRB26s5RFlangeRo);
+ shRB26s5RFlange->DefineSection(4, z0, kRB26s5RFlangeRi2, kRB26s5RFlangeRo);
+ z0 += kRB26s5RFlangeD2;
+ shRB26s5RFlange->DefineSection(5, z0, kRB26s5RFlangeRi2, kRB26s5RFlangeRo);
+ shRB26s5RFlange->DefineSection(6, z0, kRB26s5RFlangeRi1, kRB26s5RFlangeRo);
+ z0 += kRB26s5RFlangeD1;
+ shRB26s5RFlange->DefineSection(7, z0, kRB26s5RFlangeRi1, kRB26s5RFlangeRo);
+ TGeoVolume* voRB26s5RFlange = new TGeoVolume("RB26s5RFlange", shRB26s5RFlange, kMedSteel);
+
+ TGeoVolume* voRB26s5RFlangeM = new TGeoVolume("RB26s5RFlangeM", MakeMotherFromTemplate(shRB26s5RFlange, 4, 7), kMedVac);
+ voRB26s5RFlangeM->AddNode(voRB26s5RFlange, 1, gGeoIdentity);
+
+//
+// Assemble RB26/1-2
+//
+ TGeoVolumeAssembly* asRB26s12 = new TGeoVolumeAssembly("RB26s12");
+ z0 = 0.;
+ asRB26s12->AddNode(voRB26s1RFlange, 1, gGeoIdentity);
+ z0 += kRB26s1RFlangeIsL + kRB26s1RFlangeFpL;
+ asRB26s12->AddNode(voRB26s12TubeM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s12TubeL;
+ asRB26s12->AddNode(voRB26s2Compensator, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s2CompL;
+ z0 -= kRB26s2FFlangeD1;
+ asRB26s12->AddNode(voRB26s2FFlangeM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s2FFlangeL;
+ const Float_t kRB26s12L = z0;
+
+//
+// Assemble RB26/3
+//
+ TGeoVolumeAssembly* asRB26s3 = new TGeoVolumeAssembly("RB26s3");
+ z0 = 0.;
+ asRB26s3->AddNode(voRB26s3SFlangeM, 1, gGeoIdentity);
+ z0 += kRB26s3SFlangeL;
+ z0 -= kRB26s3SFlangeD3;
+ asRB26s3->AddNode(voRB26s3FixedPointM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3FixedPointL;
+ asRB26s3->AddNode(voRB26s3TubeM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3TubeL;
+ asRB26s3->AddNode(voRB26s3Compensator, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3CompL;
+ z0 -= kRB26s3FFlangeD1;
+ asRB26s3->AddNode(voRB26s3FFlangeM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3FFlangeL;
+ const Float_t kRB26s3L = z0;
+
+
+//
+// Assemble RB26/4-5
+//
+ TGeoVolumeAssembly* asRB26s45 = new TGeoVolumeAssembly("RB26s45");
+ z0 = 0.;
+ asRB26s45->AddNode(voRB26s4SFlangeM, 1, gGeoIdentity);
+ z0 += kRB26s4SFlangeL;
+ z0 -= kRB26s4SFlangeD3;
+ asRB26s45->AddNode(voRB26s4FixedPointM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s4FixedPointL;
+ asRB26s45->AddNode(voRB26s45TubeM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s45TubeL;
+ asRB26s45->AddNode(voRB26s5Compensator, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s5CompL;
+ z0 -= kRB26s5RFlangeD3;
+ z0 -= kRB26s5RFlangeD4;
+ asRB26s45->AddNode(voRB26s5RFlangeM, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s5RFlangeL;
+ const Float_t kRB26s45L = z0;
+
+//
+// Assemble RB26
+//
+ TGeoVolumeAssembly* asRB26Pipe = new TGeoVolumeAssembly("RB26Pipe");
+ z0 = 0.;
+ asRB26Pipe->AddNode(asRB26s12, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s12L;
+ asRB26Pipe->AddNode(asRB26s3, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s3L;
+ asRB26Pipe->AddNode(asRB26s45, 1, new TGeoTranslation(0., 0., z0));
+ z0 += kRB26s45L;
+ top->AddNode(asRB26Pipe, 1, new TGeoCombiTrans(0., 0., -82., rot180));