LCOV - code coverage report
Current view: top level - STRUCT - AliPIPEv4.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1111 0.1 %
Date: 2016-06-14 17:26:59 Functions: 1 11 9.1 %

          Line data    Source code
       1             : 
       2             : /**************************************************************************
       3             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       4             :  *                                                                        *
       5             :  * Author: The ALICE Off-line Project.                                    *
       6             :  * Contributors are mentioned in the code where appropriate.              *
       7             :  *                                                                        *
       8             :  * Permission to use, copy, modify and distribute this software and its   *
       9             :  * documentation strictly for non-commercial purposes is hereby granted   *
      10             :  * without fee, provided that the above copyright notice appears in all   *
      11             :  * copies and that both the copyright notice and this permission notice   *
      12             :  * appear in the supporting documentation. The authors make no claims     *
      13             :  * about the suitability of this software for any purpose. It is          *
      14             :  * provided "as is" without express or implied warranty.                  *
      15             :  **************************************************************************/
      16             : 
      17             : 
      18             : //-------------------------------------------------------------------------
      19             : //  Beam pipe class for ALICE MFT upgrade
      20             : //  This version uses TGeo
      21             : //  Authors:
      22             : //  F. Manso 
      23             : //  A. Morsch
      24             : //  R. Tieulent
      25             : //-------------------------------------------------------------------------
      26             : 
      27             : 
      28             : #include <Riostream.h>
      29             : 
      30             : #include <TSystem.h>
      31             : #include <TVirtualMC.h>
      32             : #include <TGeoManager.h>
      33             : #include <TGeoMatrix.h>
      34             : #include <TGeoVolume.h>
      35             : #include <TGeoTorus.h>
      36             : #include <TGeoTube.h>
      37             : #include <TGeoCone.h>
      38             : #include <TGeoPcon.h>
      39             : #include <TGeoBBox.h>
      40             : #include <TGeoXtru.h>
      41             : #include <TGeoCompositeShape.h>
      42             : #include <TGeoGlobalMagField.h>
      43             : 
      44             : #include "AliConst.h"
      45             : #include "AliMagF.h"
      46             : #include "AliPIPEv4.h"
      47             : #include "AliRun.h"
      48             : #include "AliLog.h"
      49             : 
      50          12 : ClassImp(AliPIPEv4)
      51             : 
      52             : //_____________________________________________________________________________
      53           0 : AliPIPEv4::AliPIPEv4(): AliPIPE()              
      54             : 
      55           0 : {
      56             :   // Constructor
      57           0 : }
      58             : 
      59             : //_____________________________________________________________________________
      60             : AliPIPEv4::AliPIPEv4(const char *name, const char *title)
      61           0 :   : AliPIPE(name,title)
      62           0 : {
      63             :   // Constructor
      64           0 : }
      65             : 
      66             : 
      67             :  
      68             : //___________________________________________
      69             : void AliPIPEv4::CreateGeometry()
      70             : {
      71           0 :   AliDebug(1,"Create PIPEv4 geometry");
      72             :   //
      73             :   //  Class describing the beam pipe geometry
      74             :   //
      75             :   Float_t z, zsh, z0;
      76             :   //
      77             :   // Rotation Matrices
      78             :   //
      79           0 :   const Float_t  kDegRad = TMath::Pi() / 180.;
      80             :   // Rotation by 180 deg
      81           0 :   TGeoRotation* rot180        = new TGeoRotation("rot180", 90., 180.,  90.,  90., 180.,   0.);
      82           0 :   TGeoRotation* rotyz         = new TGeoRotation("rotyz",  90., 180.,   0., 180.,  90.,  90.);
      83           0 :   TGeoRotation* rotxz         = new TGeoRotation("rotxz",   0.,   0.,  90.,  90.,  90., 180.);
      84             :   //TGeoRotation* rot045        = new TGeoRotation("rot045", 90.,  45.,  90., 135.,   0.,   0.);
      85             :   //TGeoRotation* rot135        = new TGeoRotation("rot135", 90. ,135.,  90., 225.,   0.,   0.);
      86             :   //TGeoRotation* rot225        = new TGeoRotation("rot225", 90. ,225.,  90., 315.,   0.,   0.);
      87             :   //TGeoRotation* rot315        = new TGeoRotation("rot315", 90. ,315.,  90.,  45.,   0.,   0.);    
      88             :   //
      89             :   // Media
      90             :   //const TGeoMedium* kMedSi      =  gGeoManager->GetMedium("PIPE_SILICON"); //FM
      91           0 :   const TGeoMedium* kMedAir     =  gGeoManager->GetMedium("PIPE_AIR");
      92           0 :   const TGeoMedium* kMedAirHigh =  gGeoManager->GetMedium("PIPE_AIR_HIGH");
      93           0 :   const TGeoMedium* kMedVac     =  gGeoManager->GetMedium("PIPE_VACUUM");    
      94           0 :   const TGeoMedium* kMedInsu    =  gGeoManager->GetMedium("PIPE_INS_C0");    
      95           0 :   const TGeoMedium* kMedSteel   =  gGeoManager->GetMedium("PIPE_INOX");        
      96           0 :   const TGeoMedium* kMedBe      =  gGeoManager->GetMedium("PIPE_BE");       
      97           0 :   const TGeoMedium* kMedCu      =  gGeoManager->GetMedium("PIPE_CU");        
      98             :   //const TGeoMedium* kMedKapton  =  gGeoManager->GetMedium("PIPE_KAPTON");        
      99             :   //const TGeoMedium* kMedAco     =  gGeoManager->GetMedium("PIPE_ANTICORODAL");        
     100             :   //const TGeoMedium* kMedNEG     =  gGeoManager->GetMedium("PIPE_NEG COATING"); 
     101             :   //const TGeoMedium* kMedAlu     =  gGeoManager->GetMedium("PIPE_ALU");    // fm       
     102           0 :   const TGeoMedium* kMedAlu2219 =  gGeoManager->GetMedium("PIPE_AA2219");   // fm     
     103           0 :   const TGeoMedium* kMedRohacell =  gGeoManager->GetMedium("PIPE_ROHACELL");
     104           0 :   const TGeoMedium* kMedPolyimide =  gGeoManager->GetMedium("PIPE_POLYIMIDE");
     105           0 :   const TGeoMedium* kMedCarbonFiber =  gGeoManager->GetMedium("PIPE_M55J6K");
     106             : 
     107             :   // Top volume
     108           0 :   TGeoVolume* top    = gGeoManager->GetVolume("ALIC");
     109             :   //
     110             :   //
     111             :   ////////////////////////////////////////////////////////////////////////////////     
     112             :   //                                                                            //
     113             :   //                                  The Central Vacuum system                 // 
     114             :   //                                                                            //
     115             :   ////////////////////////////////////////////////////////////////////////////////
     116             :   //
     117             :   //
     118             :   //  The ALICE central beam-pipe according to drawing         LHCVC2C_0001 
     119             :   //  Drawings of sub-elements:
     120             :   //  
     121             :   //  Pos 7 - Minimised Flange:                                LHCVFX_P0025
     122             :   //  Pos 6 - Standard Flange:                                 STDVFUHV0009
     123             :   //  Pos 8 - Bellow:                                          LHCVBX__0001
     124             :   //
     125             :   //  Absolute z-coordinates -82.0 - 400.0 cm 
     126             :   //  Total length:                                          482.0 cm
     127             :   //  It consists of 3 main parts:
     128             :   //  CP/2 The flange on the non-absorber side:               36.5 cm  
     129             :   //  CP/1 The central Be pipe:                              405.0 cm 
     130             :   //  CP/3 The double-bellow and flange on the absorber side: 40.5 cm 
     131             : 
     132             :   //
     133             :   /*
     134             :   //  Starting position in z
     135             :   const Float_t kCPz0      = -400.0;
     136             :   //  Length of the CP/1 section
     137             :   const Float_t kCP1Length =  405.0;    
     138             :   //  Length of the CP/2 section    
     139             :   const Float_t kCP2Length =   36.5;
     140             :   //  Length of the CP/3 section    
     141             :   const Float_t kCP3Length =   40.5;
     142             :   //  Position of the CP/2 section    
     143             :   //    const Float_t kCP2pos    = kCPz0 + kCP2Length / 2.;
     144             :   //  Position of the CP/3 section
     145             :   const Float_t kCP3pos    = kCPz0 + kCP2Length + kCP1Length + kCP3Length/2.;
     146             :   */
     147             : 
     148             : 
     149             :   //////////////////// NEW BEAM PIPE GEOMETRY FOR MuonForwardTracker ,
     150             :   // Authors: F. Manso, R. Tieulent 
     151             :   // Drawings from C. Gargiulo :
     152             :   // \\cern.ch\dfs\Workspaces\c\cgargiul\EXPERIMENT\ALICE\ALICE_MECHANICS\ALICE_DATA_PACKAGE\IN\DETECTORS\ITS_UPGRADE\1-DESIGN\3D_cad_model\R14_20140311_ALI\
     153             :   //
     154             :   //------------------- Pipe version 4.7 March 2014 -----------------------------
     155             : 
     156           0 :   TGeoVolumeAssembly * beamPipeCsideSection = new TGeoVolumeAssembly("BeamPipeCsideSection");
     157             :   
     158             :   Float_t fBeryliumSectionOuterRadius = 1.9;
     159             :   Float_t fBeryliumSectionZmax        =  44.4;
     160             :   Float_t fBeryliumSectionZmin        = -44.4;
     161             :   Float_t fBeryliumSectionThickness   = 0.08;
     162             : 
     163             :   Float_t fBellowSectionOuterRadius   = 2.15;
     164             :   Float_t fCSideBPSOuterRadius        = 2.22;
     165             :   Float_t fCSideBPSWallThickness      = 0.15;
     166             :   Float_t fBellowSectionZmax          = -55.35;
     167             :   Float_t fBellowOuterRadius          = 2.8;
     168           0 :   Float_t fFirstConeAngle             = 15. * TMath::DegToRad();
     169           0 :   Float_t fChangeThicknessAngle       = 45. * TMath::DegToRad();
     170             :   //  Float_t fCSideBPSLength             = 3.53;
     171             :   Float_t fCSideBPSLength             = 3.53+1.52;
     172           0 :   Float_t fDzFirstCone = (fCSideBPSOuterRadius - fBeryliumSectionOuterRadius) / TMath::Tan(fFirstConeAngle);
     173             :   //  Float_t fReduceThicknessPartAfterBPSLength = 1.52;
     174             :   Float_t fReduceThicknessPartAfterBPSLength = 0.;
     175             :   Float_t fThinPartBeforeBellowLength = 1.025;
     176             : 
     177             :   
     178             :   Float_t fDistanceBetweenBellows = 2.5;
     179             :   
     180             :   
     181             :   Float_t fAdaptConeZmax = -77.43;
     182             :   Float_t fAdaptConeZmin = -80.6;
     183             :   Float_t fAdaptConeRmax = 3.0;
     184             :   Float_t fFlangeRmax = 4.3;
     185             :   Float_t fFlangeLength = 1.4;
     186             :   
     187             :   Float_t fBellowPlieRadius = 0.17;  // radius of bellow plies
     188             :   Float_t fBellowPlieThickness = 0.03;  // Thickness of bellow plies 300 microns
     189             :   Int_t fNBellowConvolutions = 7;
     190             :   
     191             :   
     192             : 
     193             :   Float_t fZ1 = fBeryliumSectionZmin; // z of Be - Al jonction on the C-side
     194           0 :   Float_t fZ2 = fBellowSectionZmax +fDzFirstCone ; // z of end of small diameter part (beginning of first cone before the bellow
     195           0 :   Float_t fZ3 = fBellowSectionZmax +(fCSideBPSOuterRadius - fBellowSectionOuterRadius) / TMath::Tan(fFirstConeAngle); // z of End of first cone part with 0.8mm thickness
     196             :   Float_t fZ4 = fBellowSectionZmax; // z of End of first Cone
     197             :   Float_t fZ5 = fBellowSectionZmax - fCSideBPSLength; // z of End of Beam Pipe support section
     198           0 :   Float_t fZ6 = fBellowSectionZmax - fCSideBPSLength - (fCSideBPSOuterRadius-fBellowSectionOuterRadius) / TMath::Tan(fChangeThicknessAngle); // z of End of Beam Pipe support section after reduction of thickness
     199             :   Float_t fZ7 = fZ6 - fReduceThicknessPartAfterBPSLength ; // Z of end of 800 microns section after Beam Pipe Support
     200           0 :   Float_t fZ8 = fZ7 - (fBeryliumSectionThickness-fBellowPlieThickness) / TMath::Tan(fChangeThicknessAngle);
     201           0 :   Float_t fZ9 = fZ7 - fThinPartBeforeBellowLength; // Z of the start of first bellow
     202             :   Float_t fFirstBellowZmax = fZ9;
     203             :   
     204             :   //---------------- Be pipe around the IP ----------
     205           0 :   TGeoPcon* berylliumTube = new TGeoPcon(0., 360., 2);
     206           0 :   berylliumTube->DefineSection(0,fBeryliumSectionZmax,fBeryliumSectionOuterRadius-fBeryliumSectionThickness,fBeryliumSectionOuterRadius);
     207           0 :   berylliumTube->DefineSection(1,fBeryliumSectionZmin,fBeryliumSectionOuterRadius-fBeryliumSectionThickness,fBeryliumSectionOuterRadius);
     208           0 :   TGeoVolume* voberylliumTube = new TGeoVolume("berylliumTube",berylliumTube,kMedBe);
     209           0 :   voberylliumTube->SetLineColor(kRed);
     210           0 :   beamPipeCsideSection->AddNode(voberylliumTube,1,new TGeoTranslation(0., 0., 0.));
     211             : 
     212           0 :   TGeoPcon* berylliumTubeVacuum = new TGeoPcon(0., 360., 2);
     213           0 :   berylliumTubeVacuum->DefineSection(0,fBeryliumSectionZmax, 0.,fBeryliumSectionOuterRadius-fBeryliumSectionThickness);
     214           0 :   berylliumTubeVacuum->DefineSection(1,fBeryliumSectionZmin, 0.,fBeryliumSectionOuterRadius-fBeryliumSectionThickness);
     215           0 :   TGeoVolume* voberylliumTubeVacuum = new TGeoVolume("berylliumTubeVacuum",berylliumTubeVacuum,kMedVac);
     216           0 :   voberylliumTubeVacuum->SetVisibility(0);voberylliumTubeVacuum->SetLineColor(kGreen);
     217           0 :   beamPipeCsideSection->AddNode(voberylliumTubeVacuum,1,new TGeoTranslation(0., 0., 0.));
     218             :   //-------------------------------------------------
     219             : 
     220             : 
     221             :   //----------------  Al tube ------------------
     222           0 :   TGeoPcon* aluBeforeBellows = new TGeoPcon(0., 360., 9);
     223           0 :   aluBeforeBellows->DefineSection(0,fZ1, fBeryliumSectionOuterRadius-fBeryliumSectionThickness,fBeryliumSectionOuterRadius);
     224           0 :   aluBeforeBellows->DefineSection(1,fZ2,fBeryliumSectionOuterRadius-fBeryliumSectionThickness,fBeryliumSectionOuterRadius);
     225           0 :   aluBeforeBellows->DefineSection(2,fZ3,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius);
     226           0 :   aluBeforeBellows->DefineSection(3,fZ4,fCSideBPSOuterRadius-fCSideBPSWallThickness,fCSideBPSOuterRadius);
     227           0 :   aluBeforeBellows->DefineSection(4,fZ5,fCSideBPSOuterRadius-fCSideBPSWallThickness,fCSideBPSOuterRadius);
     228           0 :   aluBeforeBellows->DefineSection(5,fZ6,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius);
     229           0 :   aluBeforeBellows->DefineSection(6,fZ7,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius);
     230           0 :   aluBeforeBellows->DefineSection(7,fZ8,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     231           0 :   aluBeforeBellows->DefineSection(8,fZ9,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     232           0 :   TGeoVolume* voaluBeforeBellows = new TGeoVolume("aluBeforeBellows",aluBeforeBellows,kMedAlu2219);
     233           0 :   voaluBeforeBellows->SetLineColor(kBlue);
     234           0 :   beamPipeCsideSection->AddNode(voaluBeforeBellows,1,new TGeoTranslation(0., 0., 0.));
     235             : 
     236           0 :   TGeoPcon* aluBeforeBellowsVacuum = new TGeoPcon(0., 360., 7);
     237           0 :   aluBeforeBellowsVacuum->DefineSection(0,fZ1,0.,fBeryliumSectionOuterRadius-fBeryliumSectionThickness);
     238           0 :   aluBeforeBellowsVacuum->DefineSection(1,fZ2,0.,fBeryliumSectionOuterRadius-fBeryliumSectionThickness);
     239           0 :   aluBeforeBellowsVacuum->DefineSection(2,fZ3,0.,fBellowSectionOuterRadius-fBeryliumSectionThickness);
     240           0 :   aluBeforeBellowsVacuum->DefineSection(3,fZ4,0.,fCSideBPSOuterRadius-fCSideBPSWallThickness);
     241           0 :   aluBeforeBellowsVacuum->DefineSection(4,fZ5,0.,fCSideBPSOuterRadius-fCSideBPSWallThickness);
     242           0 :   aluBeforeBellowsVacuum->DefineSection(5,fZ6,0.,fBellowSectionOuterRadius-fBeryliumSectionThickness);
     243           0 :   aluBeforeBellowsVacuum->DefineSection(6,fZ9,0.,fBellowSectionOuterRadius-fBeryliumSectionThickness);
     244           0 :   TGeoVolume* voaluBeforeBellowsVacuum = new TGeoVolume("aluBeforeBellowsVacuum",aluBeforeBellowsVacuum,kMedVac);
     245           0 :   voaluBeforeBellowsVacuum->SetVisibility(0);voaluBeforeBellowsVacuum->SetLineColor(kGreen);
     246           0 :   beamPipeCsideSection->AddNode(voaluBeforeBellowsVacuum,1,new TGeoTranslation(0., 0., 0.));
     247             :   //-------------------------------------------------
     248             : 
     249             :   
     250             :   Float_t fBellowLength = fNBellowConvolutions * (4.*fBellowPlieRadius - 2. *fBellowPlieThickness);
     251             :   // ------------------ First Bellow  --------------------
     252           0 :   TGeoVolume* vobellows1 = MakeBellowCside("bellows1", fNBellowConvolutions, fBellowSectionOuterRadius-fBeryliumSectionThickness, fBellowOuterRadius, fBellowPlieRadius ,fBellowPlieThickness);
     253           0 :   beamPipeCsideSection->AddNode(vobellows1, 1, new TGeoTranslation(0., 0., fFirstBellowZmax-fBellowLength/2. - 2.*fBellowPlieRadius));
     254             :   //------------------------------------------------------
     255             : 
     256           0 :   Float_t fZ10 = fFirstBellowZmax - fBellowLength; // End of First bellow
     257           0 :   Float_t fZ12 = fZ10 - fThinPartBeforeBellowLength;
     258           0 :   Float_t fZ11 = fZ12 +  (fBeryliumSectionThickness-fBellowPlieThickness) / TMath::Tan(fChangeThicknessAngle); // End of 300 microns thickness part after first bellow
     259           0 :   Float_t fZ13 = fZ12  - fDistanceBetweenBellows;
     260           0 :   Float_t fZ14 = fZ13 -(fBeryliumSectionThickness-fBellowPlieThickness) / TMath::Tan(fChangeThicknessAngle);
     261           0 :   Float_t fZ15 = fZ14 -fThinPartBeforeBellowLength;
     262             :   Float_t fSecondBellowZmax = fZ15;
     263             : 
     264             :   
     265             :   //---------- Al tube between the bellows ----------
     266           0 :   TGeoPcon* tube4 = new TGeoPcon(0., 360., 6);
     267           0 :   tube4->DefineSection(0,fZ10, fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     268           0 :   tube4->DefineSection(1,fZ11,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     269           0 :   tube4->DefineSection(2,fZ12,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius);
     270           0 :   tube4->DefineSection(3,fZ13,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius);
     271           0 :   tube4->DefineSection(4,fZ14,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     272           0 :   tube4->DefineSection(5,fZ15,fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     273           0 :   TGeoVolume* votube4 = new TGeoVolume("votube4",tube4,kMedAlu2219);
     274           0 :   votube4->SetLineColor(kBlue);
     275           0 :   beamPipeCsideSection->AddNode(votube4,1,new TGeoTranslation(0., 0., 0.));
     276             :   
     277           0 :   TGeoPcon* tube4Vacuum = new TGeoPcon(0., 360., 2);
     278           0 :   tube4Vacuum->DefineSection(0,fZ10,0., fBellowSectionOuterRadius-fBeryliumSectionThickness);
     279           0 :   tube4Vacuum->DefineSection(1,fZ15,0.,fBellowSectionOuterRadius-fBeryliumSectionThickness);
     280           0 :   TGeoVolume* votube4Vacuum = new TGeoVolume("tube4Vacuum",tube4Vacuum,kMedVac);
     281           0 :   votube4Vacuum->SetVisibility(0);
     282             : 
     283           0 :   beamPipeCsideSection->AddNode(votube4Vacuum,1,new TGeoTranslation(0., 0., 0.));
     284             :   
     285             :   
     286             :   // ------------------ Second Bellow --------------------
     287           0 :   TGeoVolume* vobellows2 = MakeBellowCside("bellows2", fNBellowConvolutions, fBellowSectionOuterRadius-fBeryliumSectionThickness, fBellowOuterRadius, fBellowPlieRadius ,fBellowPlieThickness);
     288           0 :   beamPipeCsideSection->AddNode(vobellows2, 1, new TGeoTranslation(0., 0., fSecondBellowZmax-fBellowLength/2. - 2.*fBellowPlieRadius));
     289             :   // -----------------------------------------------------
     290             :  
     291           0 :   Float_t fZ16 = fSecondBellowZmax - fBellowLength; // End of Second bellow
     292           0 :   Float_t fZ18 = fZ16 - fThinPartBeforeBellowLength;
     293           0 :   Float_t fZ17 = fZ18 +  (fBeryliumSectionThickness-fBellowPlieThickness) / TMath::Tan(fChangeThicknessAngle); // End of 300 microns thickness part after first bellow
     294             :   Float_t fZ19 = fAdaptConeZmax; // Start of the Adpation Cone
     295             :   Float_t fZ20 = fAdaptConeZmin; // End of the Adpation Cone
     296             :   Float_t fZ21 = fAdaptConeZmin - fFlangeLength; // End of the Flange
     297             :   
     298             :   
     299             :   //----------- 15 deg Conical adaptator + flange ----------
     300           0 :   TGeoPcon* adaptator = new TGeoPcon(0., 360., 7);
     301           0 :   adaptator->DefineSection(0,fZ16, fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     302           0 :   adaptator->DefineSection(1,fZ17, fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius-fBeryliumSectionThickness+fBellowPlieThickness);
     303           0 :   adaptator->DefineSection(2,fZ18, fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius);
     304           0 :   adaptator->DefineSection(3,fZ19, fBellowSectionOuterRadius-fBeryliumSectionThickness,fBellowSectionOuterRadius);
     305           0 :   adaptator->DefineSection(4,fZ20, fAdaptConeRmax-fBeryliumSectionThickness,fAdaptConeRmax);
     306           0 :   adaptator->DefineSection(5,fZ20, fAdaptConeRmax-fBeryliumSectionThickness,fFlangeRmax);
     307           0 :   adaptator->DefineSection(6,fZ21, fAdaptConeRmax-fBeryliumSectionThickness,fFlangeRmax);
     308           0 :   TGeoVolume* voadaptator = new TGeoVolume("voadaptator",adaptator,kMedAlu2219);
     309           0 :   voadaptator->SetLineColor(kBlue);
     310           0 :   beamPipeCsideSection->AddNode(voadaptator,1,new TGeoTranslation(0., 0., 0.));
     311             : 
     312           0 :   TGeoPcon* adaptatorvide = new TGeoPcon(0., 360., 4);
     313           0 :   adaptatorvide->DefineSection(0,fZ16, 0., fBellowSectionOuterRadius-fBeryliumSectionThickness);
     314           0 :   adaptatorvide->DefineSection(1,fZ19, 0., fBellowSectionOuterRadius-fBeryliumSectionThickness);
     315           0 :   adaptatorvide->DefineSection(2,fZ20, 0., fAdaptConeRmax-fBeryliumSectionThickness);
     316           0 :   adaptatorvide->DefineSection(3,fZ21, 0., fAdaptConeRmax-fBeryliumSectionThickness);
     317           0 :   TGeoVolume* voadaptatorvide = new TGeoVolume("voadaptatorvide",adaptatorvide,kMedVac);
     318           0 :   voadaptatorvide->SetVisibility(0);
     319             : //  voadaptatorvide->SetLineColor(kGreen);
     320           0 :   beamPipeCsideSection->AddNode(voadaptatorvide,1,new TGeoTranslation(0., 0., 0.));
     321             :   //------------------------------------------------------
     322             : 
     323           0 :   top->AddNode(beamPipeCsideSection,1);
     324             :  
     325             :   ///////////////////////////////////
     326             :   //    Beam Pipe support          //
     327             :   ///////////////////////////////////
     328             : 
     329             :   
     330             :   // Beam Pipe Support
     331           0 :   TGeoVolume *beamPipeSupport = new TGeoVolumeAssembly("BeamPipeSupport");
     332             :   Float_t beamPipesupportZpos = fZ5;
     333             :   
     334             :   // Dimensions :
     335             :   
     336             :   Float_t supportXdim= 20.67;
     337             :   Float_t beamPipeRingZdim = 4.0;
     338             :   Float_t vespelRmax = 2.3;
     339             :   Float_t vespelRmin = 2.22;
     340             :   Float_t beampipeCarbonCollarRmin = 2.4;
     341             :   Float_t beampipeCarbonCollarRmax = 2.7;
     342             :   
     343             :   Float_t fixationCarbonCollarRmin = 1.5;
     344             :   Float_t fixationCarbonCollarRmax = 1.7;
     345             :   Float_t fixationCarbonCollarDZ = 2.5;
     346             :   
     347             :   
     348             :   Float_t skinThickness = 0.1;
     349             :   Float_t skinXdim = 14.25;
     350             :   Float_t skinYdim = 1.;
     351             :   Float_t skinZdim = fixationCarbonCollarDZ;
     352             :   Float_t carbonEarsXdim = 1.01;
     353             :   Float_t carbonEarsYdim = 0.2;
     354             :   Float_t carbonEarsZdim = fixationCarbonCollarDZ;
     355             :   
     356             :   // Support Bar
     357           0 :   TGeoVolumeAssembly *supportBar = new TGeoVolumeAssembly("BPS_SupportBar");
     358             :   
     359           0 :   TGeoBBox * carbonSkinBPS = new TGeoBBox(skinXdim/2.,skinYdim/2.,skinZdim/2.);
     360           0 :   carbonSkinBPS->SetName("carbonSkinBPS");
     361             :   
     362           0 :   TGeoBBox * foambarBPS = new TGeoBBox("foambarBPS",skinXdim/2.-skinThickness,skinYdim/2.-skinThickness,skinZdim/2.-skinThickness/2.);
     363           0 :   TGeoBBox * carbonEarsBPS = new TGeoBBox(carbonEarsXdim/2.,carbonEarsYdim/2.,carbonEarsZdim/2.);
     364           0 :   carbonEarsBPS->SetName("carbonEarsBPS");
     365             :   
     366           0 :   TGeoTranslation * transBP1 = new TGeoTranslation("transBP1",(skinXdim+carbonEarsXdim)/2.,0.,0.);
     367           0 :   transBP1->RegisterYourself();
     368           0 :   TGeoTranslation * transBP2 = new TGeoTranslation("transBP2",-(skinXdim+carbonEarsXdim)/2.,0.,0.);
     369           0 :   transBP2->RegisterYourself();
     370           0 :   TGeoCompositeShape *supportBarCarbon = new TGeoCompositeShape("BPS_supportBarCarbon", "(carbonSkinBPS-foambarBPS)+carbonEarsBPS:transBP1+carbonEarsBPS:transBP2");
     371             :   
     372           0 :   TGeoVolume *supportBarCarbonVol = new TGeoVolume("BPS_supportBarCarbon",supportBarCarbon,kMedCarbonFiber);
     373           0 :   supportBarCarbonVol->SetLineColor(kGray+3);
     374             :   
     375           0 :   supportBar->AddNode(supportBarCarbonVol, 1, new TGeoTranslation(skinXdim/2.+carbonEarsXdim+beampipeCarbonCollarRmax,0,0));
     376           0 :   supportBar->AddNode(supportBarCarbonVol, 2, new TGeoTranslation(-(skinXdim/2.+carbonEarsXdim+beampipeCarbonCollarRmax),0,0));
     377             :   
     378           0 :   TGeoVolume *foamVol = new TGeoVolume("supportBarFoam",foambarBPS,kMedRohacell);
     379           0 :   foamVol->SetLineColor(kGray);
     380           0 :   supportBar->AddNode(foamVol, 1, new TGeoTranslation(skinXdim/2.+carbonEarsXdim+beampipeCarbonCollarRmax,0,0));
     381           0 :   supportBar->AddNode(foamVol, 2, new TGeoTranslation(-(skinXdim/2.+carbonEarsXdim+beampipeCarbonCollarRmax),0,0));
     382             :   
     383           0 :   beamPipeSupport->AddNode(supportBar,1);
     384             :   
     385             :   
     386             :   // Fixation to wings
     387             :   
     388           0 :   TGeoVolumeAssembly *fixationToWings = new TGeoVolumeAssembly("BPS_fixationToWings");
     389             :   
     390             :   Float_t delatX = 0.1;
     391             :   
     392           0 :   TGeoTubeSeg * fixationTube = new TGeoTubeSeg(fixationCarbonCollarRmin,fixationCarbonCollarRmax,fixationCarbonCollarDZ/2.,-90.,90.);
     393           0 :   fixationTube->SetName("fixationTube");
     394           0 :   TGeoBBox * fixationToBar = new TGeoBBox(carbonEarsXdim/2.+delatX,carbonEarsYdim/2.,carbonEarsZdim/2.);
     395           0 :   fixationToBar->SetName("fixationToBar");
     396             :   
     397           0 :   TGeoTranslation * transBP3 = new TGeoTranslation("transBP3",fixationCarbonCollarRmax+carbonEarsXdim/2.-delatX,carbonEarsYdim,0.);
     398           0 :   transBP3->RegisterYourself();
     399           0 :   TGeoTranslation * transBP4 = new TGeoTranslation("transBP4",fixationCarbonCollarRmax+carbonEarsXdim/2.-delatX,-carbonEarsYdim,0.);
     400           0 :   transBP4->RegisterYourself();
     401           0 :   TGeoCompositeShape *fixationToWing = new TGeoCompositeShape("fixationToWing", "fixationTube+fixationToBar:transBP3+fixationToBar:transBP4");
     402             :   
     403           0 :   TGeoVolume *fixationToWingVol = new TGeoVolume("fixationToWing",fixationToWing,kMedCarbonFiber);
     404           0 :   fixationToWingVol->SetLineColor(kGray+2);
     405             :   
     406             :   
     407           0 :   fixationToWings->AddNode(fixationToWingVol,1, new TGeoTranslation(-supportXdim,0,0));
     408           0 :   fixationToWings->AddNode(fixationToWingVol,2, new TGeoCombiTrans(+supportXdim,0,0,new TGeoRotation("rot",0.,0.,180.)));
     409             :   
     410             :   
     411           0 :   beamPipeSupport->AddNode(fixationToWings,1);
     412             :   
     413             :   
     414             :   // Fixation to pipe
     415             :   
     416           0 :   TGeoVolumeAssembly *fixationToPipe = new TGeoVolumeAssembly("fixationToPipe");
     417             :   
     418           0 :   TGeoTubeSeg * pipeSupportTubeCarbon = new TGeoTubeSeg(beampipeCarbonCollarRmin,beampipeCarbonCollarRmax,fixationCarbonCollarDZ/2.,0.,180.);
     419           0 :   pipeSupportTubeCarbon->SetName("pipeSupportTubeCarbon");
     420             :   
     421           0 :   TGeoBBox * fixationTubeToBar = new TGeoBBox(carbonEarsXdim/2.+delatX,carbonEarsYdim/2.,carbonEarsZdim/2.);
     422           0 :   fixationTubeToBar->SetName("fixationTubeToBar");
     423           0 :   TGeoBBox * hole = new TGeoBBox((beampipeCarbonCollarRmax-vespelRmin)/2.,carbonEarsYdim/2.,carbonEarsZdim/2.+1e-3);
     424           0 :   hole->SetName("hole");
     425             :   
     426           0 :   TGeoTranslation * transBP5 = new TGeoTranslation("transBP5",beampipeCarbonCollarRmax+carbonEarsXdim/2.-delatX,carbonEarsYdim,0.);
     427           0 :   transBP5->RegisterYourself();
     428           0 :   TGeoTranslation * transBP6 = new TGeoTranslation("transBP6",-(beampipeCarbonCollarRmax+carbonEarsXdim/2.-delatX),carbonEarsYdim,0.);
     429           0 :   transBP6->RegisterYourself();
     430           0 :   TGeoTranslation * transBP7 = new TGeoTranslation("transBP7",(beampipeCarbonCollarRmax+vespelRmin)/2.,0.,0.);
     431           0 :   transBP7->RegisterYourself();
     432           0 :   TGeoTranslation * transBP8 = new TGeoTranslation("transBP8",-((beampipeCarbonCollarRmax+vespelRmin)/2.),0.,0.);
     433           0 :   transBP8->RegisterYourself();
     434           0 :   TGeoCompositeShape *halfFixationToPipe = new TGeoCompositeShape("halfFixationToPipe", "(pipeSupportTubeCarbon-hole:transBP7-hole:transBP8)+fixationTubeToBar:transBP5+fixationTubeToBar:transBP6");
     435             :   
     436           0 :   TGeoVolume *halfFixationToPipeVol = new TGeoVolume("halfFixationToPipe",halfFixationToPipe,kMedCarbonFiber);
     437           0 :   halfFixationToPipeVol->SetLineColor(kRed+2);
     438             :   
     439           0 :   fixationToPipe->AddNode(halfFixationToPipeVol,1);
     440           0 :   fixationToPipe->AddNode(halfFixationToPipeVol,2, new TGeoCombiTrans(0,0,0,new TGeoRotation("rot",0.,0.,180.)));
     441             :   
     442           0 :   beamPipeSupport->AddNode(fixationToPipe,1);
     443             :   
     444             :   
     445             :   // Beam Pipe Ring
     446             :   
     447           0 :   TGeoVolumeAssembly *beamPipeRing = new TGeoVolumeAssembly("beamPipeRing");
     448             :   
     449           0 :   TGeoTube * beamPipeRingCarbon = new TGeoTube(vespelRmax,beampipeCarbonCollarRmin,beamPipeRingZdim/2.);
     450           0 :   TGeoVolume *beamPipeRingCarbonVol = new TGeoVolume("beamPipeRingCarbon",beamPipeRingCarbon,kMedCarbonFiber);
     451           0 :   beamPipeRingCarbonVol->SetLineColor(kGreen+2);
     452           0 :   beamPipeRing->AddNode(beamPipeRingCarbonVol,1, new TGeoTranslation(0.,0,(beamPipeRingZdim-fixationCarbonCollarDZ)/2.));
     453             :   
     454           0 :   TGeoTube * beamPipeRingVespel = new TGeoTube(vespelRmin,vespelRmax,beamPipeRingZdim/2.);
     455           0 :   TGeoVolume *beamPipeRingVespelVol = new TGeoVolume("beamPipeRingVespel",beamPipeRingVespel,kMedPolyimide);
     456           0 :   beamPipeRingVespelVol->SetLineColor(kGreen+4);
     457           0 :   beamPipeRing->AddNode(beamPipeRingVespelVol,1, new TGeoTranslation(0.,0,(beamPipeRingZdim-fixationCarbonCollarDZ)/2.));
     458             :   
     459           0 :   beamPipeSupport->AddNode(beamPipeRing,1);
     460           0 :   beamPipeSupport->SetVisibility(0);
     461             :   
     462           0 :   top->AddNode(beamPipeSupport,1,new TGeoTranslation(0.,0,beamPipesupportZpos+fixationCarbonCollarDZ/2.));
     463             :   
     464             :   
     465             :   
     466             :   ///////////// END NEW BEAM PIPE GEOMETRY fOR MFT ////////////////////
     467             :   
     468             :   ////////////////////////////////////////////////////////////////////////////////
     469             :   // Side A section after Beryllium
     470             :   // !!!!!! THIS PART NEED TO BE WORKED OUT !!!!!
     471             :   ////////////////////////////////////////////////////////////////////////////////
     472             : 
     473             :   //----------------  Al tube ------------------
     474             :   Float_t fSmallRadiusZmax =fBeryliumSectionZmax + 20.43;
     475             :   Float_t fLargeRadiusZmin =fSmallRadiusZmax + 2.61;
     476             :   Float_t fAdaptConeSideAZmin =fLargeRadiusZmin + 200.; // THIS PART NEED TO BE WORKED OUT
     477             :   Float_t fAluSideARmax = 2.5;
     478             : 
     479           0 :   TGeoPcon* aluSideA = new TGeoPcon(0., 360., 4);
     480           0 :   aluSideA->DefineSection(0,fBeryliumSectionZmax, fBeryliumSectionOuterRadius-fBeryliumSectionThickness,fBeryliumSectionOuterRadius);
     481           0 :   aluSideA->DefineSection(1,fSmallRadiusZmax, fBeryliumSectionOuterRadius-fBeryliumSectionThickness,fBeryliumSectionOuterRadius);
     482           0 :   aluSideA->DefineSection(2,fLargeRadiusZmin, fAluSideARmax-fBeryliumSectionThickness,fAluSideARmax);
     483           0 :   aluSideA->DefineSection(3,fAdaptConeSideAZmin, fAluSideARmax-fBeryliumSectionThickness,fAluSideARmax);
     484           0 :   TGeoVolume* voaluSideA = new TGeoVolume("aluSideA",aluSideA,kMedAlu2219);
     485           0 :   voaluSideA->SetLineColor(kBlue);
     486           0 :   top->AddNode(voaluSideA,1,new TGeoTranslation(0., 0., 0.));
     487             :   
     488           0 :   TGeoPcon* aluSideAVac = new TGeoPcon(0., 360., 4);
     489           0 :   aluSideAVac->DefineSection(0,fBeryliumSectionZmax, 0., fBeryliumSectionOuterRadius-fBeryliumSectionThickness);
     490           0 :   aluSideAVac->DefineSection(1,fSmallRadiusZmax, 0., fBeryliumSectionOuterRadius-fBeryliumSectionThickness);
     491           0 :   aluSideAVac->DefineSection(2,fLargeRadiusZmin, 0., fAluSideARmax-fBeryliumSectionThickness);
     492           0 :   aluSideAVac->DefineSection(3,fAdaptConeSideAZmin, 0., fAluSideARmax-fBeryliumSectionThickness);
     493           0 :   TGeoVolume* voaluSideAVac = new TGeoVolume("aluSideAVac",aluSideAVac,kMedVac);
     494           0 :   voaluSideAVac->SetLineColor(kGreen);
     495           0 :   voaluSideAVac->SetVisibility(0);
     496           0 :   top->AddNode(voaluSideAVac,1,new TGeoTranslation(0., 0., 0.));
     497             :   //-------------------------------------------------
     498             : 
     499             :   
     500             :   ////////////////////////////////////////////////////////////////////////////////     
     501             :   //                                                                            //
     502             :   //                                  RB24/1                                    // 
     503             :   //                                                                            //
     504             :   ////////////////////////////////////////////////////////////////////////////////
     505             :   //
     506             :   //
     507             :   // Drawing LHCVC2U_0001
     508             :   // Copper Tube RB24/1      393.5 cm 
     509             :   // Warm module VMACA        18.0 cm
     510             :   // Annular Ion Pump         35.0 cm
     511             :   // Valve                     7.5 cm
     512             :   // Warm module VMABC        28.0 cm
     513             :   // ================================
     514             :   //                         462.0 cm
     515             :   //
     516             : 
     517             :     
     518             :   // Copper Tube RB24/1
     519             :   const Float_t  kRB24CuTubeL   = 393.5;
     520             :   const Float_t  kRB24CuTubeRi  = 8.0/2.;
     521             :   const Float_t  kRB24CuTubeRo  = 8.4/2.;
     522             :   const Float_t  kRB24CuTubeFRo = 7.6;
     523             :   const Float_t  kRB24CuTubeFL  = 1.86;
     524             : 
     525           0 :   TGeoVolume* voRB24CuTubeM = new TGeoVolume("voRB24CuTubeM", 
     526           0 :                                              new TGeoTube(0., kRB24CuTubeRo, kRB24CuTubeL/2.), kMedVac);
     527           0 :   voRB24CuTubeM->SetVisibility(0);
     528           0 :   TGeoVolume* voRB24CuTube  = new TGeoVolume("voRB24CuTube", 
     529           0 :                                              new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB24CuTubeL/2.), kMedCu);
     530           0 :   voRB24CuTubeM->AddNode(voRB24CuTube, 1, gGeoIdentity);
     531             :   // Air outside tube with higher transport cuts
     532           0 :   TGeoVolume* voRB24CuTubeA  = new TGeoVolume("voRB24CuTubeA", 
     533           0 :                                               new TGeoTube(25., 100., kRB24CuTubeL/2.), kMedAirHigh);
     534           0 :   voRB24CuTubeA->SetVisibility(0);
     535             :   // Simplified DN 100 Flange
     536           0 :   TGeoVolume* voRB24CuTubeF = new TGeoVolume("voRB24CuTubeF", 
     537           0 :                                              new TGeoTube(kRB24CuTubeRo, kRB24CuTubeFRo, kRB24CuTubeFL/2.), kMedSteel);
     538             : 
     539             :   // Warm Module Type VMACA
     540             :   // LHCVMACA_0002
     541             :   // 
     542             :   // Pos 1 Warm Bellows DN100       LHCVBU__0012
     543             :   // Pos 2 RF Contact   D80         LHCVSR__0005
     544             :   // Pos 3 Trans. Tube Flange       LHCVSR__0065
     545             :   // [Pos 4 Hex. Countersunk Screw   Bossard BN4719]
     546             :   // [Pos 5 Tension spring           LHCVSR__0011]
     547             :   //
     548             :   //
     549             :   //
     550             :   // Pos1    Warm Bellows DN100
     551             :   // Pos1.1  Bellows                  LHCVBU__0006
     552             :   //
     553             :   //
     554             :   // Connection Tubes    
     555             :   // Connection tube inner r
     556             :   const Float_t kRB24B1ConTubeRin        = 10.0/2.;
     557             :   // Connection tube outer r
     558             :   const Float_t kRB24B1ConTubeRou        = 10.3/2.;
     559             :   // Connection tube length
     560             :   const Float_t kRB24B1ConTubeL          =  2.5;
     561             :   // 
     562             :   const Float_t kRB24B1CompL             = 16.00;    // Length of the compensator
     563             :   const Float_t kRB24B1BellowRi          = 10.25/2.; // Bellow inner radius        
     564             :   const Float_t kRB24B1BellowRo          = 11.40/2.; // Bellow outer radius        
     565             :   const Int_t   kRB24B1NumberOfPlies     = 27;       // Number of plies            
     566             :   const Float_t kRB24B1BellowUndL        = 11.00;    // Length of undulated region 
     567             :   const Float_t kRB24B1PlieThickness     =  0.015;   // Plie thickness             
     568             : 
     569             :   const Float_t kRB24B1PlieRadius = 
     570             :     (kRB24B1BellowUndL + (2. *  kRB24B1NumberOfPlies - 2.) * kRB24B1PlieThickness) / (4. * kRB24B1NumberOfPlies);
     571             : 
     572             :   const Float_t kRB24B1ProtTubeThickness = 0.02;     // Thickness of the protection tube
     573             :   const Float_t kRB24B1ProtTubeLength    = 4.2;      // Length of the protection tube
     574             : 
     575             :   const Float_t kRB24B1RFlangeL          = 1.86;     // Length of the flanges
     576             :   const Float_t kRB24B1RFlangeLO         = 0.26;     // Flange overlap
     577             :   const Float_t kRB24B1RFlangeRO         = 11.18/2;  // Inner radius at Flange overlap    
     578             :   const Float_t kRB24B1RFlangeRou        = 15.20/2.; // Outer radius of flange
     579             :   const Float_t kRB24B1RFlangeRecess     = 0.98;     // Flange recess
     580             :   const Float_t kRB24B1L                 = kRB24B1CompL +  2. * (kRB24B1RFlangeL - kRB24B1RFlangeRecess);
     581             :     
     582             :   ///      
     583             :   //
     584             :   // Bellow mother volume
     585           0 :   TGeoPcon* shRB24B1BellowM = new TGeoPcon(0., 360., 14);
     586             :   // Connection Tube and Flange
     587             :   z = 0.;
     588           0 :   shRB24B1BellowM->DefineSection( 0, z, 0.,               kRB24B1RFlangeRou);
     589             :   z += kRB24B1RFlangeLO;
     590           0 :   shRB24B1BellowM->DefineSection( 1, z, 0.,               kRB24B1RFlangeRou);
     591           0 :   shRB24B1BellowM->DefineSection( 2, z, 0.,               kRB24B1RFlangeRou);    
     592             :   z = kRB24B1RFlangeL;
     593           0 :   shRB24B1BellowM->DefineSection( 3, z, 0.,               kRB24B1RFlangeRou);    
     594           0 :   shRB24B1BellowM->DefineSection( 4, z, 0.,               kRB24B1ConTubeRou);
     595             :   z = kRB24B1ConTubeL +  kRB24B1RFlangeL - kRB24B1RFlangeRecess;
     596           0 :   shRB24B1BellowM->DefineSection( 5, z, 0.,               kRB24B1ConTubeRou);
     597             :   // Plie
     598           0 :   shRB24B1BellowM->DefineSection( 6, z, 0.,               kRB24B1BellowRo + kRB24B1ProtTubeThickness);
     599             :   z += kRB24B1BellowUndL;
     600           0 :   shRB24B1BellowM->DefineSection( 7, z, 0.,               kRB24B1BellowRo + kRB24B1ProtTubeThickness);
     601           0 :   shRB24B1BellowM->DefineSection( 8, z, 0.,               kRB24B1ConTubeRou);
     602             :   // Connection Tube and Flange
     603           0 :   z = kRB24B1L - shRB24B1BellowM->GetZ(3);
     604           0 :   shRB24B1BellowM->DefineSection( 9, z, 0.,               kRB24B1ConTubeRou);
     605           0 :   shRB24B1BellowM->DefineSection(10, z, 0.,               kRB24B1RFlangeRou);
     606           0 :   z = kRB24B1L - shRB24B1BellowM->GetZ(1);
     607           0 :   shRB24B1BellowM->DefineSection(11, z, 0.,               kRB24B1RFlangeRou);
     608           0 :   shRB24B1BellowM->DefineSection(12, z, 0.,               kRB24B1RFlangeRou);
     609           0 :   z = kRB24B1L - shRB24B1BellowM->GetZ(0);
     610           0 :   shRB24B1BellowM->DefineSection(13, z, 0.,               kRB24B1RFlangeRou);
     611             : 
     612           0 :   TGeoVolume* voRB24B1BellowM = new TGeoVolume("RB24B1BellowM", shRB24B1BellowM, kMedVac);
     613           0 :   voRB24B1BellowM->SetVisibility(0);
     614             :   //
     615             :   // Bellow Section    
     616             :   TGeoVolume* voRB24B1Bellow 
     617           0 :     = MakeBellow("RB24B1", kRB24B1NumberOfPlies, kRB24B1BellowRi, kRB24B1BellowRo, 
     618             :                  kRB24B1BellowUndL, kRB24B1PlieRadius ,kRB24B1PlieThickness);
     619           0 :   voRB24B1Bellow->SetVisibility(0);
     620             :     
     621             :   //
     622             :   // End Parts (connection tube)
     623           0 :   TGeoVolume* voRB24B1CT = new TGeoVolume("RB24B1CT", new TGeoTube(kRB24B1ConTubeRin, kRB24B1ConTubeRou,  kRB24B1ConTubeL/2.), kMedSteel); 
     624             :   //
     625             :   // Protection Tube      
     626           0 :   TGeoVolume* voRB24B1PT = new TGeoVolume("RB24B1PT", new TGeoTube(kRB24B1BellowRo, kRB24B1BellowRo + kRB24B1ProtTubeThickness,  
     627             :                                                                    kRB24B1ProtTubeLength / 2.), kMedSteel);
     628             :     
     629             :   z = kRB24B1ConTubeL/2. +  (kRB24B1RFlangeL - kRB24B1RFlangeRecess);
     630             :     
     631           0 :   voRB24B1BellowM->AddNode(voRB24B1CT, 1, new TGeoTranslation(0., 0., z));
     632             :   z += (kRB24B1ConTubeL/2.+ kRB24B1BellowUndL/2.);
     633           0 :   voRB24B1BellowM->AddNode(voRB24B1Bellow, 1, new TGeoTranslation(0., 0., z));
     634             :   z += (kRB24B1BellowUndL/2. + kRB24B1ConTubeL/2);
     635           0 :   voRB24B1BellowM->AddNode(voRB24B1CT, 2, new TGeoTranslation(0., 0., z));
     636             :   z =  kRB24B1ConTubeL +  kRB24B1ProtTubeLength / 2. + 1. + kRB24B1RFlangeLO;
     637           0 :   voRB24B1BellowM->AddNode(voRB24B1PT, 1, new TGeoTranslation(0., 0., z));
     638             :   z +=  kRB24B1ProtTubeLength + 0.6;
     639           0 :   voRB24B1BellowM->AddNode(voRB24B1PT, 2, new TGeoTranslation(0., 0., z));
     640             : 
     641             :                  
     642             : 
     643             :   // Pos 1/2 Rotatable Flange         LHCVBU__0013
     644             :   // Pos 1/3 Flange DN100/103         LHCVBU__0018
     645             :   // The two flanges can be represented by the same volume
     646             :   // Outer Radius (including the outer movable ring).
     647             :   // The inner ring has a diameter of 12.04 cm
     648             : 
     649             :   
     650           0 :   TGeoPcon* shRB24B1RFlange = new TGeoPcon(0., 360., 10);
     651             :   z = 0.;
     652           0 :   shRB24B1RFlange->DefineSection(0, z, 10.30/2., kRB24B1RFlangeRou);
     653             :   z += 0.55;  // 5.5 mm added for outer ring
     654             :   z += 0.43;
     655           0 :   shRB24B1RFlange->DefineSection(1, z, 10.30/2., kRB24B1RFlangeRou);
     656           0 :   shRB24B1RFlange->DefineSection(2, z, 10.06/2., kRB24B1RFlangeRou);    
     657             :   z += 0.15;
     658           0 :   shRB24B1RFlange->DefineSection(3, z, 10.06/2., kRB24B1RFlangeRou);    
     659             :   // In reality this part is rounded
     660           0 :   shRB24B1RFlange->DefineSection(4, z, 10.91/2., kRB24B1RFlangeRou);    
     661             :   z += 0.15;
     662           0 :   shRB24B1RFlange->DefineSection(5, z, 10.91/2., kRB24B1RFlangeRou);    
     663           0 :   shRB24B1RFlange->DefineSection(6, z, 10.06/2., kRB24B1RFlangeRou);    
     664             :   z += 0.32;
     665           0 :   shRB24B1RFlange->DefineSection(7, z, 10.06/2., kRB24B1RFlangeRou);    
     666           0 :   shRB24B1RFlange->DefineSection(8, z, kRB24B1RFlangeRO, kRB24B1RFlangeRou);    
     667             :   z += kRB24B1RFlangeLO;
     668           0 :   shRB24B1RFlange->DefineSection(9, z, kRB24B1RFlangeRO, kRB24B1RFlangeRou);    
     669             :     
     670           0 :   TGeoVolume* voRB24B1RFlange = new TGeoVolume("RB24B1RFlange", shRB24B1RFlange, kMedSteel);
     671             : 
     672             :     
     673             :   z = kRB24B1L - kRB24B1RFlangeL;
     674           0 :   voRB24B1BellowM->AddNode(voRB24B1RFlange, 1, new TGeoTranslation(0., 0., z));
     675             :   z = kRB24B1RFlangeL;
     676           0 :   voRB24B1BellowM->AddNode(voRB24B1RFlange, 2, new TGeoCombiTrans(0., 0., z, rot180));
     677             :   //
     678             :   // Pos 2 RF Contact   D80         LHCVSR__0005
     679             :   //
     680             :   // Pos 2.1 RF Contact Flange      LHCVSR__0003
     681             :   //
     682           0 :   TGeoPcon* shRB24B1RCTFlange = new TGeoPcon(0., 360., 6);
     683             :   const Float_t kRB24B1RCTFlangeRin  = 8.06/2. + 0.05;  // Inner radius
     684             :   const Float_t kRB24B1RCTFlangeL    = 1.45;            // Length
     685             :     
     686             :   z = 0.;
     687           0 :   shRB24B1RCTFlange->DefineSection(0, z, kRB24B1RCTFlangeRin,  8.20/2.);
     688             :   z += 0.15;
     689           0 :   shRB24B1RCTFlange->DefineSection(1, z, kRB24B1RCTFlangeRin,  8.20/2.);
     690           0 :   shRB24B1RCTFlange->DefineSection(2, z, kRB24B1RCTFlangeRin,  8.60/2.);
     691             :   z += 1.05;
     692           0 :   shRB24B1RCTFlange->DefineSection(3, z, kRB24B1RCTFlangeRin,  8.60/2.);
     693           0 :   shRB24B1RCTFlange->DefineSection(4, z, kRB24B1RCTFlangeRin, 11.16/2.);
     694             :   z += 0.25;
     695           0 :   shRB24B1RCTFlange->DefineSection(5, z, kRB24B1RCTFlangeRin, 11.16/2.);
     696           0 :   TGeoVolume* voRB24B1RCTFlange = new TGeoVolume("RB24B1RCTFlange", shRB24B1RCTFlange, kMedCu);
     697             :   z = kRB24B1L - kRB24B1RCTFlangeL;
     698             :     
     699           0 :   voRB24B1BellowM->AddNode(voRB24B1RCTFlange, 1, new TGeoTranslation(0., 0., z));
     700             :   //
     701             :   // Pos 2.2 RF-Contact        LHCVSR__0004
     702             :   //
     703           0 :   TGeoPcon* shRB24B1RCT = new TGeoPcon(0., 360., 3);
     704             :   const Float_t kRB24B1RCTRin  = 8.00/2.;        // Inner radius
     705             :   const Float_t kRB24B1RCTCRin = 8.99/2.;        // Max. inner radius conical section
     706             :   const Float_t kRB24B1RCTL    = 11.78;          // Length
     707             :   const Float_t kRB24B1RCTSL   = 10.48;          // Length of straight section
     708             :   const Float_t kRB24B1RCTd    =  0.03;          // Thickness
     709             :     
     710             :   z = 0;
     711           0 :   shRB24B1RCT->DefineSection(0, z,  kRB24B1RCTCRin,  kRB24B1RCTCRin + kRB24B1RCTd);
     712             :   z =  kRB24B1RCTL -  kRB24B1RCTSL;
     713             :   // In the (VSR0004) this section is straight in (LHCVC2U_0001) it is conical ????
     714           0 :   shRB24B1RCT->DefineSection(1, z,  kRB24B1RCTRin + 0.35,  kRB24B1RCTRin + 0.35 + kRB24B1RCTd);
     715             :   z = kRB24B1RCTL - 0.03;
     716           0 :   shRB24B1RCT->DefineSection(2, z,  kRB24B1RCTRin,  kRB24B1RCTRin + kRB24B1RCTd);
     717             : 
     718           0 :   TGeoVolume* voRB24B1RCT = new TGeoVolume("RB24B1RCT", shRB24B1RCT, kMedCu);
     719             :   z = kRB24B1L - kRB24B1RCTL - 0.45;
     720           0 :   voRB24B1BellowM->AddNode(voRB24B1RCT, 1, new TGeoTranslation(0., 0., z));    
     721             : 
     722             :   //
     723             :   // Pos 3 Trans. Tube Flange       LHCVSR__0065
     724             :   //
     725             :   // Pos 3.1 Transition Tube D53    LHCVSR__0064
     726             :   // Pos 3.2 Transition Flange      LHCVSR__0060
     727             :   // Pos 3.3 Transition Tube        LHCVSR__0058
     728           0 :   TGeoPcon* shRB24B1TTF = new TGeoPcon(0., 360., 7);
     729             :   // Flange
     730             :   z = 0.;
     731           0 :   shRB24B1TTF->DefineSection(0, z,  6.30/2., 11.16/2.);
     732             :   z += 0.25;
     733           0 :   shRB24B1TTF->DefineSection(1, z,  6.30/2., 11.16/2.);
     734           0 :   shRB24B1TTF->DefineSection(2, z,  6.30/2.,  9.3/2.);
     735             :   z += 0.55;
     736           0 :   shRB24B1TTF->DefineSection(3, z,  6.30/2.,  9.3/2.);
     737             :   // Tube
     738           0 :   shRB24B1TTF->DefineSection(4, z,  6.30/2.,  6.7/2.);
     739             :   z += 5.80;
     740           0 :   shRB24B1TTF->DefineSection(5, z,  6.30/2.,  6.7/2.);
     741             :   // Transition Tube
     742             :   z += 3.75;
     743           0 :   shRB24B1TTF->DefineSection(6, z,  8.05/2.,  8.45/2.);
     744           0 :   TGeoVolume* voRB24B1TTF = new TGeoVolume("RB24B1TTF", shRB24B1TTF, kMedSteel);
     745             :   z =  0.;
     746           0 :   voRB24B1BellowM->AddNode(voRB24B1TTF, 1, new TGeoTranslation(0., 0., z));    
     747             : 
     748             :   // Annular Ion Pump        
     749             :   // LHCVC2U_0003
     750             :   //
     751             :   // Pos  1 Rotable Flange         LHCVFX__0031
     752             :   // Pos  2 RF Screen Tube         LHCVC2U_0005
     753             :   // Pos  3 Shell                  LHCVC2U_0007
     754             :   // Pos  4 Extruded Shell         LHCVC2U_0006
     755             :   // Pos  5 Feedthrough Tube       LHCVC2U_0004
     756             :   // Pos  6 Tubulated Flange       STDVFUHV0021
     757             :   // Pos  7 Fixed Flange           LHCVFX__0032
     758             :   // Pos  8 Pumping Elements
     759             : 
     760             :   //
     761             :   // Pos 1 Rotable Flange          LHCVFX__0031
     762             :   // pos 7 Fixed Flange            LHCVFX__0032
     763             :   //
     764             :   //  Mother volume
     765             :   const Float_t kRB24AIpML = 35.;
     766             :     
     767           0 :   TGeoVolume* voRB24AIpM = new TGeoVolume("voRB24AIpM", new TGeoTube(0., 10., kRB24AIpML/2.), kMedAir);
     768           0 :   voRB24AIpM->SetVisibility(0);
     769             :     
     770             :   //
     771             :   // Length 35 cm
     772             :   // Flange 2 x 1.98 =   3.96
     773             :   // Tube            =  32.84
     774             :   //==========================
     775             :   //                    36.80
     776             :   // Overlap 2 * 0.90 =  1.80
     777             :                         
     778             :   const Float_t kRB24IpRFD1     =  0.68;    // Length of section 1
     779             :   const Float_t kRB24IpRFD2     =  0.30;    // Length of section 2                                                   
     780             :   const Float_t kRB24IpRFD3     =  0.10;    // Length of section 3                                                         
     781             :   const Float_t kRB24IpRFD4     =  0.35;    // Length of section 4                                                         
     782             :   const Float_t kRB24IpRFD5     =  0.55;    // Length of section 5                                                         
     783             :     
     784             :   const Float_t kRB24IpRFRo     = 15.20/2.; // Flange outer radius 
     785             :   const Float_t kRB24IpRFRi1    =  6.30/2.; // Flange inner radius section 1
     786             :   const Float_t kRB24IpRFRi2    =  6.00/2.; // Flange inner radius section 2
     787             :   const Float_t kRB24IpRFRi3    =  5.84/2.; // Flange inner radius section 3    
     788             :   const Float_t kRB24IpRFRi4    =  6.00/2.; // Flange inner radius section 1
     789             :   const Float_t kRB24IpRFRi5    = 10.50/2.; // Flange inner radius section 2
     790             : 
     791           0 :   TGeoPcon* shRB24IpRF = new TGeoPcon(0., 360., 9);
     792             :   z0 = 0.;
     793           0 :   shRB24IpRF->DefineSection(0, z0, kRB24IpRFRi1, kRB24IpRFRo);
     794             :   z0 += kRB24IpRFD1;
     795           0 :   shRB24IpRF->DefineSection(1, z0, kRB24IpRFRi2, kRB24IpRFRo);
     796             :   z0 += kRB24IpRFD2;
     797           0 :   shRB24IpRF->DefineSection(2, z0, kRB24IpRFRi2, kRB24IpRFRo);
     798           0 :   shRB24IpRF->DefineSection(3, z0, kRB24IpRFRi3, kRB24IpRFRo);
     799             :   z0 += kRB24IpRFD3;
     800           0 :   shRB24IpRF->DefineSection(4, z0, kRB24IpRFRi3, kRB24IpRFRo);
     801           0 :   shRB24IpRF->DefineSection(5, z0, kRB24IpRFRi4, kRB24IpRFRo);
     802             :   z0 += kRB24IpRFD4;
     803           0 :   shRB24IpRF->DefineSection(6, z0, kRB24IpRFRi4, kRB24IpRFRo);
     804           0 :   shRB24IpRF->DefineSection(7, z0, kRB24IpRFRi5, kRB24IpRFRo);
     805             :   z0 += kRB24IpRFD5;
     806           0 :   shRB24IpRF->DefineSection(8, z0, kRB24IpRFRi5, kRB24IpRFRo);
     807             : 
     808           0 :   TGeoVolume* voRB24IpRF = new TGeoVolume("RB24IpRF", shRB24IpRF, kMedSteel);
     809             :     
     810             :   //
     811             :   // Pos  2 RF Screen Tube         LHCVC2U_0005
     812             :   //
     813             : 
     814             :   //
     815             :   // Tube
     816             :   Float_t kRB24IpSTTL  = 32.84;            // Total length of the tube
     817             :   Float_t kRB24IpSTTRi =  5.80/2.;         // Inner Radius
     818             :   Float_t kRB24IpSTTRo =  6.00/2.;         // Outer Radius
     819           0 :   TGeoVolume* voRB24IpSTT = new TGeoVolume("RB24IpSTT", new TGeoTube(kRB24IpSTTRi, kRB24IpSTTRo, kRB24IpSTTL/2.), kMedSteel);
     820             :   // Screen
     821             :   Float_t kRB24IpSTCL  =  0.4;             // Lenth of the crochet detail
     822             :   // Length of the screen 
     823             :   Float_t kRB24IpSTSL  =  9.00 - 2. * kRB24IpSTCL; 
     824             :   // Rel. position of the screen 
     825             :   Float_t kRB24IpSTSZ  =  7.00 + kRB24IpSTCL; 
     826           0 :   TGeoVolume* voRB24IpSTS = new TGeoVolume("RB24IpSTS", new TGeoTube(kRB24IpSTTRi, kRB24IpSTTRo, kRB24IpSTSL/2.), kMedSteel);
     827             :   // Vacuum
     828           0 :   TGeoVolume* voRB24IpSTV = new TGeoVolume("RB24IpSTV", new TGeoTube(0., kRB24IpSTTRi, kRB24AIpML/2.), kMedVac);
     829             :   //
     830           0 :   voRB24IpSTT->AddNode(voRB24IpSTS, 1, new TGeoTranslation(0., 0., kRB24IpSTSZ -  kRB24IpSTTL/2. +  kRB24IpSTSL/2.));
     831             :     
     832             :   // Crochets
     833             :   // Inner radius
     834             :   Float_t kRB24IpSTCRi  = kRB24IpSTTRo + 0.25;
     835             :   // Outer radius
     836             :   Float_t kRB24IpSTCRo  = kRB24IpSTTRo + 0.35;
     837             :   // Length of 1stsection
     838             :   Float_t kRB24IpSTCL1  = 0.15;
     839             :   // Length of 2nd section
     840             :   Float_t kRB24IpSTCL2  = 0.15;
     841             :   // Length of 3rd section
     842             :   Float_t kRB24IpSTCL3  = 0.10;
     843             :   // Rel. position of 1st Crochet
     844             : 
     845             : 
     846           0 :   TGeoPcon* shRB24IpSTC = new TGeoPcon(0., 360., 5);
     847             :   z0 = 0;
     848           0 :   shRB24IpSTC->DefineSection(0, z0, kRB24IpSTCRi, kRB24IpSTCRo);
     849             :   z0 += kRB24IpSTCL1;
     850           0 :   shRB24IpSTC->DefineSection(1, z0, kRB24IpSTCRi, kRB24IpSTCRo);
     851           0 :   shRB24IpSTC->DefineSection(2, z0, kRB24IpSTTRo, kRB24IpSTCRo);
     852             :   z0 += kRB24IpSTCL2;
     853           0 :   shRB24IpSTC->DefineSection(3, z0, kRB24IpSTTRo, kRB24IpSTCRo);
     854             :   z0 += kRB24IpSTCL3;
     855           0 :   shRB24IpSTC->DefineSection(4, z0, kRB24IpSTTRo, kRB24IpSTTRo + 0.001);
     856           0 :   TGeoVolume* voRB24IpSTC = new TGeoVolume("RB24IpSTC", shRB24IpSTC, kMedSteel);
     857             : 
     858             :   // Pos  3 Shell                  LHCVC2U_0007
     859             :   // Pos  4 Extruded Shell         LHCVC2U_0006
     860             :   Float_t kRB24IpShellL     =  4.45;    // Length of the Shell
     861             :   Float_t kRB24IpShellD     =  0.10;    // Wall thickness of the shell
     862             :   Float_t kRB24IpShellCTRi  =  6.70/2.; // Inner radius of the connection tube
     863             :   Float_t kRB24IpShellCTL   =  1.56;    // Length of the connection tube
     864             :   Float_t kRB24IpShellCARi  = 17.80/2.; // Inner radius of the cavity
     865             :   Float_t kRB24IpShellCCRo  = 18.20/2.; // Inner radius at the centre
     866             : 
     867           0 :   TGeoPcon* shRB24IpShell = new TGeoPcon(0., 360., 7);
     868             :   z0 = 0;
     869           0 :   shRB24IpShell->DefineSection(0, z0, kRB24IpShellCTRi, kRB24IpShellCTRi + kRB24IpShellD);
     870             :   z0 +=  kRB24IpShellCTL;
     871           0 :   shRB24IpShell->DefineSection(1, z0, kRB24IpShellCTRi, kRB24IpShellCTRi + kRB24IpShellD);
     872           0 :   shRB24IpShell->DefineSection(2, z0, kRB24IpShellCTRi, kRB24IpShellCARi + kRB24IpShellD);
     873             :   z0 += kRB24IpShellD;
     874           0 :   shRB24IpShell->DefineSection(3, z0, kRB24IpShellCARi, kRB24IpShellCARi + kRB24IpShellD);
     875             :   z0 = kRB24IpShellL - kRB24IpShellD;
     876           0 :   shRB24IpShell->DefineSection(4, z0, kRB24IpShellCARi, kRB24IpShellCARi + kRB24IpShellD);
     877           0 :   shRB24IpShell->DefineSection(5, z0, kRB24IpShellCARi, kRB24IpShellCCRo);
     878             :   z0 = kRB24IpShellL;
     879           0 :   shRB24IpShell->DefineSection(6, z0, kRB24IpShellCARi, kRB24IpShellCCRo);
     880           0 :   TGeoVolume* voRB24IpShell = new TGeoVolume("RB24IpShell", shRB24IpShell, kMedSteel);
     881             :     
     882           0 :   TGeoPcon* shRB24IpShellM   = MakeMotherFromTemplate(shRB24IpShell, 0, 6, kRB24IpShellCTRi , 13);
     883             :     
     884             :     
     885           0 :   for (Int_t i = 0; i < 6; i++) {
     886           0 :     z = 2. * kRB24IpShellL  - shRB24IpShellM->GetZ(5-i);
     887           0 :     Float_t rmin = shRB24IpShellM->GetRmin(5-i);
     888           0 :     Float_t rmax = shRB24IpShellM->GetRmax(5-i);
     889           0 :     shRB24IpShellM->DefineSection(7+i, z, rmin, rmax);
     890             :   }
     891             :     
     892           0 :   TGeoVolume* voRB24IpShellM = new TGeoVolume("RB24IpShellM", shRB24IpShellM, kMedVac);
     893           0 :   voRB24IpShellM->SetVisibility(0);
     894           0 :   voRB24IpShellM->AddNode(voRB24IpShell, 1, gGeoIdentity);
     895           0 :   voRB24IpShellM->AddNode(voRB24IpShell, 2, new TGeoCombiTrans(0., 0., 2. * kRB24IpShellL, rot180));
     896             :   //
     897             :   // Pos  8 Pumping Elements
     898             :   //
     899             :   //  Anode array
     900           0 :   TGeoVolume* voRB24IpPE = new TGeoVolume("voRB24IpPE", new TGeoTube(0.9, 1., 2.54/2.), kMedSteel);
     901             :   Float_t kRB24IpPEAR = 5.5;
     902             :     
     903           0 :   for (Int_t i = 0; i < 15; i++) {
     904           0 :     Float_t phi = Float_t(i) * 24.;
     905           0 :     Float_t x   =  kRB24IpPEAR * TMath::Cos(kDegRad * phi);
     906           0 :     Float_t y   =  kRB24IpPEAR * TMath::Sin(kDegRad * phi);
     907           0 :     voRB24IpShellM->AddNode(voRB24IpPE, i+1, new TGeoTranslation(x, y, kRB24IpShellL));
     908             :   }
     909             :     
     910             :     
     911             :   //
     912             :   //  Cathodes
     913             :   //
     914             :   // Here we could add some Ti strips
     915             : 
     916             :   // Postioning of elements
     917           0 :   voRB24AIpM->AddNode(voRB24IpRF,     1, new TGeoTranslation(0., 0., -kRB24AIpML/2.));
     918           0 :   voRB24AIpM->AddNode(voRB24IpRF,     2, new TGeoCombiTrans (0., 0., +kRB24AIpML/2., rot180));
     919           0 :   voRB24AIpM->AddNode(voRB24IpSTT,    1, new TGeoTranslation(0., 0., 0.));
     920           0 :   voRB24AIpM->AddNode(voRB24IpSTV,    1, new TGeoTranslation(0., 0., 0.));
     921           0 :   voRB24AIpM->AddNode(voRB24IpShellM, 1, new TGeoTranslation(0., 0., -kRB24AIpML/2. +  8.13));
     922           0 :   voRB24AIpM->AddNode(voRB24IpSTC,    1, new TGeoTranslation(0., 0., 8.13 - kRB24AIpML/2.));
     923           0 :   voRB24AIpM->AddNode(voRB24IpSTC,    2, new TGeoCombiTrans (0., 0., 8.14 + 8.9 - kRB24AIpML/2., rot180));
     924             :     
     925             :   //
     926             :   // Valve
     927             :   // VAC Series 47 DN 63 with manual actuator
     928             :   //
     929             :   const Float_t kRB24ValveWz = 7.5;
     930             :   const Float_t kRB24ValveDN = 10.0/2.;
     931             :   //
     932             :   //  Body containing the valve plate
     933             :   //
     934             :   const Float_t kRB24ValveBoWx =  15.6;
     935             :   const Float_t kRB24ValveBoWy = (21.5 + 23.1 - 5.);
     936             :   const Float_t kRB24ValveBoWz =  4.6;
     937             :   const Float_t kRB24ValveBoD  =  0.5;
     938             : 
     939             :   TGeoVolume* voRB24ValveBoM =
     940           0 :     new TGeoVolume("RB24ValveBoM", 
     941           0 :                    new TGeoBBox( kRB24ValveBoWx/2.,  kRB24ValveBoWy/2., kRB24ValveBoWz/2.), kMedAir);
     942           0 :   voRB24ValveBoM->SetVisibility(0);
     943             :   TGeoVolume* voRB24ValveBo =
     944           0 :     new TGeoVolume("RB24ValveBo", 
     945           0 :                    new TGeoBBox( kRB24ValveBoWx/2.,  kRB24ValveBoWy/2., kRB24ValveBoWz/2.), kMedSteel);
     946           0 :   voRB24ValveBoM->AddNode(voRB24ValveBo, 1, gGeoIdentity);
     947             :   //
     948             :   // Inner volume
     949             :   //
     950           0 :   TGeoVolume* voRB24ValveBoI = new TGeoVolume("RB24ValveBoI", 
     951           0 :                                               new TGeoBBox( kRB24ValveBoWx/2. -  kRB24ValveBoD,  
     952             :                                                             kRB24ValveBoWy/2. -  kRB24ValveBoD/2., 
     953             :                                                             kRB24ValveBoWz/2. -  kRB24ValveBoD), 
     954             :                                               kMedVac);
     955           0 :   voRB24ValveBo->AddNode(voRB24ValveBoI, 1, new TGeoTranslation(0., kRB24ValveBoD/2., 0.));
     956             :   //
     957             :   // Opening and Flanges
     958             :   const Float_t  kRB24ValveFlRo = 18./2.;
     959             :   const Float_t  kRB24ValveFlD  = 1.45;    
     960           0 :   TGeoVolume* voRB24ValveBoA = new TGeoVolume("RB24ValveBoA", 
     961           0 :                                               new TGeoTube(0., kRB24ValveDN/2., kRB24ValveBoD/2.), kMedVac);
     962           0 :   voRB24ValveBo->AddNode(voRB24ValveBoA, 1, new TGeoTranslation(0., - kRB24ValveBoWy/2. + 21.5, -kRB24ValveBoWz/2. +  kRB24ValveBoD/2.));
     963           0 :   voRB24ValveBo->AddNode(voRB24ValveBoA, 2, new TGeoTranslation(0., - kRB24ValveBoWy/2. + 21.5, +kRB24ValveBoWz/2. -  kRB24ValveBoD/2.));
     964             :  
     965           0 :   TGeoVolume* voRB24ValveFl  = new TGeoVolume("RB24ValveFl",  new TGeoTube(kRB24ValveDN/2.,  kRB24ValveFlRo, kRB24ValveFlD/2.), kMedSteel);
     966           0 :   TGeoVolume* voRB24ValveFlI = new TGeoVolume("RB24ValveFlI", new TGeoTube(0.,               kRB24ValveFlRo, kRB24ValveFlD/2.), kMedVac);
     967           0 :   voRB24ValveFlI->AddNode(voRB24ValveFl, 1, gGeoIdentity);
     968             :     
     969             :   //
     970             :   // Actuator Flange
     971             :   const Float_t kRB24ValveAFlWx =  18.9;
     972             :   const Float_t kRB24ValveAFlWy =   5.0;
     973             :   const Float_t kRB24ValveAFlWz =   7.7;
     974           0 :   TGeoVolume* voRB24ValveAFl = new TGeoVolume("RB24ValveAFl", new TGeoBBox(kRB24ValveAFlWx/2., kRB24ValveAFlWy/2., kRB24ValveAFlWz/2.), kMedSteel);
     975             :   //
     976             :   // Actuator Tube
     977             :   const Float_t kRB24ValveATRo = 9.7/2.;
     978             :   const Float_t kRB24ValveATH  = 16.6;
     979           0 :   TGeoVolume* voRB24ValveAT = new TGeoVolume("RB24ValveAT", new TGeoTube(kRB24ValveATRo -  2. * kRB24ValveBoD,kRB24ValveATRo,  kRB24ValveATH/2.), 
     980             :                                              kMedSteel);
     981             :   //
     982             :   // Manual Actuator (my best guess)
     983           0 :   TGeoVolume* voRB24ValveMA1 = new TGeoVolume("RB24ValveMA1", new TGeoCone(2.5/2., 0., 0.5, 4.5, 5.), kMedSteel);
     984           0 :   TGeoVolume* voRB24ValveMA2 = new TGeoVolume("RB24ValveMA2", new TGeoTorus(5., 0., 1.25), kMedSteel);
     985           0 :   TGeoVolume* voRB24ValveMA3 = new TGeoVolume("RB24ValveMA3", new TGeoTube (0., 1.25, 2.5), kMedSteel);
     986             :     
     987             : 
     988             :   //
     989             :   // Position all volumes
     990             :   Float_t y0;
     991           0 :   TGeoVolumeAssembly*  voRB24ValveMo = new TGeoVolumeAssembly("RB24ValveMo");
     992           0 :   voRB24ValveMo->AddNode(voRB24ValveFl,  1, new TGeoTranslation(0., 0., - 7.5/2. + kRB24ValveFlD/2.));
     993           0 :   voRB24ValveMo->AddNode(voRB24ValveFl,  2, new TGeoTranslation(0., 0., + 7.5/2. - kRB24ValveFlD/2.));
     994             :   y0 = -21.5;
     995           0 :   voRB24ValveMo->AddNode(voRB24ValveBoM, 1, new TGeoTranslation(0., y0 + kRB24ValveBoWy/2.,   0.));
     996             :   y0 +=  kRB24ValveBoWy;
     997           0 :   voRB24ValveMo->AddNode(voRB24ValveAFl, 1, new TGeoTranslation(0., y0 +  kRB24ValveAFlWy/2., 0.));
     998             :   y0 +=  kRB24ValveAFlWy;
     999           0 :   voRB24ValveMo->AddNode(voRB24ValveAT,  1, new TGeoCombiTrans(0.,  y0 + kRB24ValveATH/2.,    0., rotyz));
    1000             :   y0 += kRB24ValveATH;
    1001           0 :   voRB24ValveMo->AddNode(voRB24ValveMA1, 1, new TGeoCombiTrans(0.,  y0 + 2.5/2.,    0., rotyz));
    1002             :   y0 += 2.5;
    1003           0 :   voRB24ValveMo->AddNode(voRB24ValveMA2, 1, new TGeoCombiTrans(0.,  y0 + 2.5/2.,    0., rotyz));
    1004             :   y0 += 2.5;
    1005           0 :   voRB24ValveMo->AddNode(voRB24ValveMA3, 1, new TGeoCombiTrans(5./TMath::Sqrt(2.),  y0 + 5.0/2., 5./TMath::Sqrt(2.), rotyz));
    1006             :   //
    1007             :   // Warm Module Type VMABC
    1008             :   // LHCVMABC_0002
    1009             :   // 
    1010             :   //
    1011             :   //
    1012             :   // Flange                  1.00
    1013             :   // Central Piece          11.50
    1014             :   // Bellow                 14.50
    1015             :   // End Flange              1.00
    1016             :   //===================================
    1017             :   // Total                  28.00 
    1018             :   //                        
    1019             :   // Pos 1 Warm Bellows DN100       LHCVBU__0016
    1020             :   // Pos 2 Trans. Tube Flange       LHCVSR__0062
    1021             :   // Pos 3 RF Contact   D63         LHCVSR__0057
    1022             :   // [Pos 4 Hex. Countersunk Screw   Bossard BN4719]
    1023             :   // [Pos 5 Tension spring           LHCVSR__00239]
    1024             :   //
    1025             : 
    1026             :   // Pos 1 Warm Bellows DN100                   LHCVBU__0016
    1027             :   // Pos 1.1 Right Body 2 Ports with Support    LHCVBU__0014
    1028             :   //
    1029             :   // Tube 1
    1030             :   const Float_t kRB24VMABCRBT1Ri = 10.0/2.;
    1031             :   const Float_t kRB24VMABCRBT1Ro = 10.3/2.;
    1032             :   const Float_t kRB24VMABCRBT1L  = 11.5;   
    1033             :   const Float_t kRB24VMABCRBT1L2 = 8.;
    1034             :   const Float_t kRB24VMABCL      = 28.;
    1035             :     
    1036           0 :   TGeoTube* shRB24VMABCRBT1 = new TGeoTube(kRB24VMABCRBT1Ri, kRB24VMABCRBT1Ro, kRB24VMABCRBT1L/2.);
    1037           0 :   shRB24VMABCRBT1->SetName("RB24VMABCRBT1");
    1038           0 :   TGeoTube* shRB24VMABCRBT1o = new TGeoTube(0., kRB24VMABCRBT1Ro,  kRB24VMABCRBT1L/2.);
    1039           0 :   shRB24VMABCRBT1o->SetName("RB24VMABCRBT1o");
    1040           0 :   TGeoTube* shRB24VMABCRBT1o2 = new TGeoTube(0., kRB24VMABCRBT1Ro + 0.3, kRB24VMABCRBT1L/2.);
    1041           0 :   shRB24VMABCRBT1o2->SetName("RB24VMABCRBT1o2");
    1042             :   // Lower inforcement 
    1043           0 :   TGeoVolume*  voRB24VMABCRBT12  = new TGeoVolume("RB24VMABCRBT12", 
    1044           0 :                                                   new TGeoTubeSeg(kRB24VMABCRBT1Ro, kRB24VMABCRBT1Ro + 0.3, kRB24VMABCRBT1L2/2., 220., 320.)
    1045             :                                                   , kMedSteel);
    1046             :   //
    1047             :   // Tube 2
    1048             :   const Float_t kRB24VMABCRBT2Ri =   6.0/2.;
    1049             :   const Float_t kRB24VMABCRBT2Ro =   6.3/2.;
    1050             :   const Float_t kRB24VMABCRBF2Ro =  11.4/2.;
    1051             :   const Float_t kRB24VMABCRBT2L  =   5.95 + 2.; // 2. cm added for welding    
    1052             :   const Float_t kRB24VMABCRBF2L  =   1.75;
    1053           0 :   TGeoTube* shRB24VMABCRBT2 = new TGeoTube(kRB24VMABCRBT2Ri, kRB24VMABCRBT2Ro,  kRB24VMABCRBT2L/2.);
    1054           0 :   shRB24VMABCRBT2->SetName("RB24VMABCRBT2");
    1055           0 :   TGeoTube* shRB24VMABCRBT2i = new TGeoTube(0., kRB24VMABCRBT2Ri, kRB24VMABCRBT2L/2. + 2.);
    1056           0 :   shRB24VMABCRBT2i->SetName("RB24VMABCRBT2i");
    1057           0 :   TGeoCombiTrans* tRBT2 = new TGeoCombiTrans(-11.5 + kRB24VMABCRBT2L/2., 0., 7.2 - kRB24VMABCRBT1L/2.  , rotxz);
    1058           0 :   tRBT2->SetName("tRBT2");
    1059           0 :   tRBT2->RegisterYourself();
    1060           0 :   TGeoCompositeShape* shRB24VMABCRBT2c =  new TGeoCompositeShape("shRB24VMABCRBT2c","RB24VMABCRBT2:tRBT2-RB24VMABCRBT1o");
    1061           0 :   TGeoVolume* voRB24VMABCRBT2 = new TGeoVolume("shRB24VMABCRBT2", shRB24VMABCRBT2c, kMedSteel);
    1062             :   // Flange
    1063             :   // Pos 1.4 Flange DN63                        LHCVBU__0008
    1064           0 :   TGeoVolume* voRB24VMABCRBF2 = new TGeoVolume("RB24VMABCRBF2", 
    1065           0 :                                                new TGeoTube(kRB24VMABCRBT2Ro, kRB24VMABCRBF2Ro, kRB24VMABCRBF2L/2.), kMedSteel);
    1066             :   // DN63 Blank Flange (my best guess)
    1067           0 :   TGeoVolume* voRB24VMABCRBF2B = new TGeoVolume("RB24VMABCRBF2B", 
    1068           0 :                                                 new TGeoTube(0., kRB24VMABCRBF2Ro, kRB24VMABCRBF2L/2.), kMedSteel);
    1069             :   //
    1070             :   // Tube 3
    1071             :   const Float_t kRB24VMABCRBT3Ri =  3.5/2.;
    1072             :   const Float_t kRB24VMABCRBT3Ro =  3.8/2.;
    1073             :   const Float_t kRB24VMABCRBF3Ro =  7.0/2.;
    1074             :   const Float_t kRB24VMABCRBT3L  =  4.95 + 2.; // 2. cm added for welding    
    1075             :   const Float_t kRB24VMABCRBF3L  =  1.27;
    1076           0 :   TGeoTube* shRB24VMABCRBT3 = new TGeoTube(kRB24VMABCRBT3Ri, kRB24VMABCRBT3Ro,  kRB24VMABCRBT3L/2);
    1077           0 :   shRB24VMABCRBT3->SetName("RB24VMABCRBT3");
    1078           0 :   TGeoTube* shRB24VMABCRBT3i = new TGeoTube(0., kRB24VMABCRBT3Ri, kRB24VMABCRBT3L/2. + 2.);
    1079           0 :   shRB24VMABCRBT3i->SetName("RB24VMABCRBT3i");
    1080           0 :   TGeoCombiTrans* tRBT3 = new TGeoCombiTrans(0., 10.5 - kRB24VMABCRBT3L/2., 7.2 - kRB24VMABCRBT1L/2.  , rotyz);
    1081           0 :   tRBT3->SetName("tRBT3");
    1082           0 :   tRBT3->RegisterYourself();
    1083           0 :   TGeoCompositeShape* shRB24VMABCRBT3c =  new TGeoCompositeShape("shRB24VMABCRBT3c","RB24VMABCRBT3:tRBT3-RB24VMABCRBT1o");
    1084           0 :   TGeoVolume* voRB24VMABCRBT3 = new TGeoVolume("shRB24VMABCRBT3", shRB24VMABCRBT3c, kMedSteel);
    1085             :   // Flange
    1086             :   // Pos 1.4 Flange DN35                        LHCVBU__0007
    1087           0 :   TGeoVolume* voRB24VMABCRBF3 = new TGeoVolume("RB24VMABCRBF3", 
    1088           0 :                                                new TGeoTube(kRB24VMABCRBT3Ro, kRB24VMABCRBF3Ro, kRB24VMABCRBF3L/2.), kMedSteel);
    1089             :   //
    1090             :   // Tube 4
    1091             :   const Float_t kRB24VMABCRBT4Ri =  6.0/2.;
    1092             :   const Float_t kRB24VMABCRBT4Ro =  6.4/2.;
    1093             :   const Float_t kRB24VMABCRBT4L  =  6.6;    
    1094           0 :   TGeoTube* shRB24VMABCRBT4 = new TGeoTube(kRB24VMABCRBT4Ri, kRB24VMABCRBT4Ro,  kRB24VMABCRBT4L/2.);
    1095           0 :   shRB24VMABCRBT4->SetName("RB24VMABCRBT4");
    1096           0 :   TGeoCombiTrans* tRBT4 = new TGeoCombiTrans(0.,-11.+kRB24VMABCRBT4L/2., 7.2 - kRB24VMABCRBT1L/2.  , rotyz);
    1097           0 :   tRBT4->SetName("tRBT4");
    1098           0 :   tRBT4->RegisterYourself();
    1099           0 :   TGeoCompositeShape* shRB24VMABCRBT4c =  new TGeoCompositeShape("shRB24VMABCRBT4c","RB24VMABCRBT4:tRBT4-RB24VMABCRBT1o2");
    1100           0 :   TGeoVolume* voRB24VMABCRBT4 = new TGeoVolume("shRB24VMABCRBT4", shRB24VMABCRBT4c, kMedSteel);
    1101           0 :   TGeoCompositeShape* shRB24VMABCRB = new TGeoCompositeShape("shRB24VMABCRB", "RB24VMABCRBT1-(RB24VMABCRBT2i:tRBT2+RB24VMABCRBT3i:tRBT3)");
    1102           0 :   TGeoVolume* voRB24VMABCRBI = new TGeoVolume("RB24VMABCRBI", shRB24VMABCRB, kMedSteel);
    1103             :   //
    1104             :   // Plate
    1105             :   const Float_t kRB24VMABCRBBx = 16.0;
    1106             :   const Float_t kRB24VMABCRBBy =  1.5;
    1107             :   const Float_t kRB24VMABCRBBz = 15.0;
    1108             :     
    1109             :   // Relative position of tubes
    1110             :   const Float_t  kRB24VMABCTz =   7.2;
    1111             :   // Relative position of plate
    1112             :   const Float_t  kRB24VMABCPz =   3.6;
    1113             :   const Float_t  kRB24VMABCPy = -12.5;
    1114             :     
    1115           0 :   TGeoVolume* voRB24VMABCRBP = new TGeoVolume("RB24VMABCRBP", new TGeoBBox(kRB24VMABCRBBx/2., kRB24VMABCRBBy/2., kRB24VMABCRBBz/2.), kMedSteel);
    1116             :   //
    1117             :   // Pirani Gauge (my best guess)
    1118             :   //
    1119           0 :   TGeoPcon* shRB24VMABCPirani = new TGeoPcon(0., 360., 15);
    1120             :   // DN35/16 Coupling
    1121             :   z = 0;
    1122           0 :   shRB24VMABCPirani->DefineSection( 0, z,  0.8 , kRB24VMABCRBF3Ro);
    1123             :   z += kRB24VMABCRBF3L; // 1.3
    1124           0 :   shRB24VMABCPirani->DefineSection( 1, z,  0.8 , kRB24VMABCRBF3Ro);
    1125           0 :   shRB24VMABCPirani->DefineSection( 2, z,  0.8 , 1.0);
    1126             :   // Pipe
    1127             :   z += 2.8;
    1128           0 :   shRB24VMABCPirani->DefineSection( 3, z,  0.8 , 1.0);
    1129             :   // Flange
    1130           0 :   shRB24VMABCPirani->DefineSection( 4, z,  0.8 , 1.75);
    1131             :   z += 1.6;
    1132           0 :   shRB24VMABCPirani->DefineSection( 5, z,  0.8 , 1.75);
    1133           0 :   shRB24VMABCPirani->DefineSection( 6, z,  0.8 , 1.0);
    1134             :   z += 5.2;
    1135           0 :   shRB24VMABCPirani->DefineSection( 7, z,  0.8 , 1.0);
    1136           0 :   shRB24VMABCPirani->DefineSection( 8, z,  0.8 , 2.5);    
    1137             :   z += 2.0;
    1138           0 :   shRB24VMABCPirani->DefineSection( 9, z,  0.80, 2.50);    
    1139           0 :   shRB24VMABCPirani->DefineSection(10, z,  1.55, 1.75);    
    1140             :   z += 5.7;
    1141           0 :   shRB24VMABCPirani->DefineSection(11, z,  1.55, 1.75);    
    1142           0 :   shRB24VMABCPirani->DefineSection(11, z,  0.00, 1.75);    
    1143             :   z += 0.2;
    1144           0 :   shRB24VMABCPirani->DefineSection(12, z,  0.00, 1.75);    
    1145           0 :   shRB24VMABCPirani->DefineSection(13, z,  0.00, 0.75);    
    1146             :   z += 0.5;
    1147           0 :   shRB24VMABCPirani->DefineSection(14, z,  0.00, 0.75);  
    1148           0 :   TGeoVolume* voRB24VMABCPirani = new TGeoVolume("RB24VMABCPirani", shRB24VMABCPirani, kMedSteel);
    1149             :   //
    1150             :   //
    1151             :   // 
    1152             :     
    1153             :     
    1154             :   //
    1155             :   // Positioning of elements
    1156           0 :   TGeoVolumeAssembly* voRB24VMABCRB = new TGeoVolumeAssembly("RB24VMABCRB");
    1157             :   //
    1158           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBI,   1, gGeoIdentity);
    1159             :   // Plate
    1160           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBP,   1, new TGeoTranslation(0., kRB24VMABCPy +  kRB24VMABCRBBy /2., 
    1161             :                                                                   kRB24VMABCRBBz/2. - kRB24VMABCRBT1L/2. +  kRB24VMABCPz));
    1162             :   // Tube 2
    1163           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBT2,  1, gGeoIdentity);
    1164             :   // Flange Tube 2
    1165           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBF2,  1, new TGeoCombiTrans(kRB24VMABCPy + kRB24VMABCRBF2L/2., 0.,  kRB24VMABCTz - kRB24VMABCRBT1L/2., rotxz));
    1166             :   // Blank Flange Tube 2
    1167           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBF2B, 1, new TGeoCombiTrans(kRB24VMABCPy- kRB24VMABCRBF2L/2., 0.,  kRB24VMABCTz - kRB24VMABCRBT1L/2., rotxz));    
    1168             :   // Tube 3
    1169           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBT3,  1, gGeoIdentity);
    1170             :   // Flange Tube 3
    1171           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBF3,  1, new TGeoCombiTrans(0.,   11.2 - kRB24VMABCRBF3L/2.,  kRB24VMABCTz - kRB24VMABCRBT1L/2., rotyz));
    1172             :   // Pirani Gauge
    1173           0 :   voRB24VMABCRB->AddNode(voRB24VMABCPirani, 1, new  TGeoCombiTrans(0., 11.2,  kRB24VMABCTz - kRB24VMABCRBT1L/2., rotyz));
    1174             :   // Tube 4
    1175           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBT4,  1, gGeoIdentity);
    1176             :   // Inforcement 
    1177           0 :   voRB24VMABCRB->AddNode(voRB24VMABCRBT12, 1, new TGeoTranslation(0., 0., kRB24VMABCRBT1L2/2. - kRB24VMABCRBT1L/2. + 2.8));
    1178             :     
    1179             : 
    1180             :   // Pos 1.3 Bellows with end part              LHCVBU__0002
    1181             :   //
    1182             :   // Connection Tube    
    1183             :   // Connection tube inner r
    1184             :   const Float_t kRB24VMABBEConTubeRin        = 10.0/2.;
    1185             :   // Connection tube outer r
    1186             :   const Float_t kRB24VMABBEConTubeRou        = 10.3/2.;
    1187             :   // Connection tube length
    1188             :   const Float_t kRB24VMABBEConTubeL1         =  0.9;
    1189             :   const Float_t kRB24VMABBEConTubeL2         =  2.6;
    1190             :   //  const Float_t RB24VMABBEBellowL            =  kRB24VMABBEConTubeL1 + kRB24VMABBEConTubeL2 + kRB24B1BellowUndL;
    1191             :     
    1192             :   // Mother volume
    1193           0 :   TGeoPcon* shRB24VMABBEBellowM = new TGeoPcon(0., 360., 6);
    1194             :   // Connection Tube and Flange
    1195             :   z = 0.;
    1196           0 :   shRB24VMABBEBellowM->DefineSection( 0, z, kRB24VMABBEConTubeRin,  kRB24VMABBEConTubeRou);
    1197             :   z += kRB24VMABBEConTubeL1;
    1198           0 :   shRB24VMABBEBellowM->DefineSection( 1, z, kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou);
    1199           0 :   shRB24VMABBEBellowM->DefineSection( 2, z, kRB24B1BellowRi,       kRB24B1BellowRo + kRB24B1ProtTubeThickness);
    1200             :   z += kRB24B1BellowUndL;
    1201           0 :   shRB24VMABBEBellowM->DefineSection( 3, z, kRB24B1BellowRi,       kRB24B1BellowRo + kRB24B1ProtTubeThickness);
    1202           0 :   shRB24VMABBEBellowM->DefineSection( 4, z, kRB24VMABBEConTubeRin,  kRB24VMABBEConTubeRou);
    1203             :   z += kRB24VMABBEConTubeL2;
    1204           0 :   shRB24VMABBEBellowM->DefineSection( 5, z, kRB24VMABBEConTubeRin,  kRB24VMABBEConTubeRou);
    1205           0 :   TGeoVolume* voRB24VMABBEBellowM = new TGeoVolume("RB24VMABBEBellowM", shRB24VMABBEBellowM, kMedVac);
    1206           0 :   voRB24VMABBEBellowM->SetVisibility(0);
    1207             :     
    1208             :   //  Connection tube left
    1209           0 :   TGeoVolume* voRB24VMABBECT1 = new TGeoVolume("RB24VMABBECT1", 
    1210           0 :                                                new TGeoTube(kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou,kRB24VMABBEConTubeL1/2.),
    1211             :                                                kMedSteel);
    1212             :   //  Connection tube right
    1213           0 :   TGeoVolume* voRB24VMABBECT2 = new TGeoVolume("RB24VMABBECT2", 
    1214           0 :                                                new TGeoTube(kRB24VMABBEConTubeRin, kRB24VMABBEConTubeRou,kRB24VMABBEConTubeL2/2.),
    1215             :                                                kMedSteel);
    1216             :   z = kRB24VMABBEConTubeL1/2.;
    1217           0 :   voRB24VMABBEBellowM->AddNode(voRB24VMABBECT1, 1, new TGeoTranslation(0., 0., z));
    1218             :   z += kRB24VMABBEConTubeL1/2.;
    1219             :   z += kRB24B1BellowUndL/2.;
    1220           0 :   voRB24VMABBEBellowM->AddNode(voRB24B1Bellow, 2, new TGeoTranslation(0., 0., z));
    1221             :   z += kRB24B1BellowUndL/2.;
    1222             :   z += kRB24VMABBEConTubeL2/2.;
    1223           0 :   voRB24VMABBEBellowM->AddNode(voRB24VMABBECT2, 1, new TGeoTranslation(0., 0., z));
    1224             :   z += kRB24VMABBEConTubeL2/2.;
    1225             : 
    1226           0 :   voRB24VMABCRB->AddNode(voRB24VMABBEBellowM, 1, new TGeoTranslation(0., 0., kRB24VMABCRBT1L/2.));
    1227             : 
    1228             :   // Pos 1.2 Rotable flange                     LHCVBU__0013[*]
    1229             :   // Front
    1230           0 :   voRB24VMABCRB->AddNode(voRB24B1RFlange,  3, new TGeoCombiTrans(0., 0., - kRB24VMABCRBT1L/2. + 0.86, rot180));
    1231             :   // End
    1232             :   z =  kRB24VMABCRBT1L/2. + kRB24B1BellowUndL +kRB24VMABBEConTubeL1 +  kRB24VMABBEConTubeL2;
    1233           0 :   voRB24VMABCRB->AddNode(voRB24B1RFlange,  4, new TGeoTranslation(0., 0., z - 0.86));
    1234             : 
    1235             : 
    1236             :   // Pos 2    Trans. Tube Flange       LHCVSR__0062
    1237             :   // Pos 2.1  Transition Tube          LHCVSR__0063
    1238             :   // Pos 2.2  Transition Flange        LHCVSR__0060
    1239             :   //
    1240             :   // Transition Tube with Flange
    1241           0 :   TGeoPcon* shRB24VMABCTT = new TGeoPcon(0., 360., 7);
    1242             :   z = 0.;
    1243           0 :   shRB24VMABCTT->DefineSection(0, z, 6.3/2., 11.16/2.);
    1244             :   z += 0.25;
    1245           0 :   shRB24VMABCTT->DefineSection(1, z, 6.3/2., 11.16/2.);
    1246           0 :   shRB24VMABCTT->DefineSection(2, z, 6.3/2.,  9.30/2.);
    1247             :   z += 0.25;
    1248           0 :   shRB24VMABCTT->DefineSection(3, z, 6.3/2.,  9.30/2.);
    1249           0 :   shRB24VMABCTT->DefineSection(4, z, 6.3/2.,  6.70/2.);
    1250             :   z += (20.35 - 0.63);
    1251           0 :   shRB24VMABCTT->DefineSection(5, z, 6.3/2.,  6.7/2.);
    1252             :   z += 0.63;
    1253           0 :   shRB24VMABCTT->DefineSection(6, z, 6.3/2.,  6.7/2.);
    1254           0 :   TGeoVolume* voRB24VMABCTT = new TGeoVolume("RB24VMABCTT", shRB24VMABCTT, kMedSteel);
    1255           0 :   voRB24VMABCRB->AddNode(voRB24VMABCTT, 1, new TGeoTranslation(0., 0., - kRB24VMABCRBT1L/2.-1.));
    1256             : 
    1257             :   // Pos 3   RF Contact   D63         LHCVSR__0057
    1258             :   // Pos 3.1 RF Contact Flange        LHCVSR__0017
    1259             :   //
    1260           0 :   TGeoPcon* shRB24VMABCCTFlange = new TGeoPcon(0., 360., 6);
    1261             :   const Float_t kRB24VMABCCTFlangeRin  = 6.36/2.;  // Inner radius
    1262             :   const Float_t kRB24VMABCCTFlangeL    = 1.30;     // Length
    1263             :     
    1264             :   z = 0.;
    1265           0 :   shRB24VMABCCTFlange->DefineSection(0, z, kRB24VMABCCTFlangeRin,  6.5/2.);
    1266             :   z += 0.15;
    1267           0 :   shRB24VMABCCTFlange->DefineSection(1, z, kRB24VMABCCTFlangeRin,  6.5/2.);
    1268           0 :   shRB24VMABCCTFlange->DefineSection(2, z, kRB24VMABCCTFlangeRin,  6.9/2.);
    1269             :   z += 0.9;
    1270           0 :   shRB24VMABCCTFlange->DefineSection(3, z, kRB24VMABCCTFlangeRin,  6.9/2.);
    1271           0 :   shRB24VMABCCTFlange->DefineSection(4, z, kRB24VMABCCTFlangeRin, 11.16/2.);
    1272             :   z += 0.25;
    1273           0 :   shRB24VMABCCTFlange->DefineSection(5, z, kRB24VMABCCTFlangeRin, 11.16/2.);
    1274           0 :   TGeoVolume* voRB24VMABCCTFlange = new TGeoVolume("RB24VMABCCTFlange", shRB24VMABCCTFlange, kMedCu);
    1275             :   //
    1276             :   // Pos 3.2 RF-Contact        LHCVSR__0056
    1277             :   //
    1278           0 :   TGeoPcon* shRB24VMABCCT = new TGeoPcon(0., 360., 4);
    1279             :   const Float_t kRB24VMABCCTRin  = 6.30/2.;        // Inner radius
    1280             :   const Float_t kRB24VMABCCTCRin = 7.29/2.;        // Max. inner radius conical section
    1281             :   const Float_t kRB24VMABCCTL    = 11.88;          // Length
    1282             :   const Float_t kRB24VMABCCTSL   = 10.48;          // Length of straight section
    1283             :   const Float_t kRB24VMABCCTd    =  0.03;          // Thickness
    1284             :   z = 0;
    1285           0 :   shRB24VMABCCT->DefineSection(0, z,  kRB24VMABCCTCRin,  kRB24VMABCCTCRin + kRB24VMABCCTd);
    1286             :   z =  kRB24VMABCCTL -  kRB24VMABCCTSL;
    1287           0 :   shRB24VMABCCT->DefineSection(1, z,  kRB24VMABCCTRin + 0.35,  kRB24VMABCCTRin + 0.35 + kRB24VMABCCTd);
    1288             :   z = kRB24VMABCCTL  -  kRB24VMABCCTFlangeL;
    1289           0 :   shRB24VMABCCT->DefineSection(2, z,  kRB24VMABCCTRin,  kRB24VMABCCTRin + kRB24VMABCCTd);
    1290             :   z = kRB24VMABCCTL;
    1291           0 :   shRB24VMABCCT->DefineSection(3, z,  kRB24VMABCCTRin,  kRB24VMABCCTRin + kRB24VMABCCTd);
    1292             : 
    1293           0 :   TGeoVolume* voRB24VMABCCT = new TGeoVolume("RB24VMABCCT", shRB24VMABCCT, kMedCu);
    1294             :     
    1295           0 :   TGeoVolumeAssembly* voRB24VMABRFCT = new TGeoVolumeAssembly("RB24VMABRFCT");
    1296           0 :   voRB24VMABRFCT->AddNode(voRB24VMABCCT,        1, gGeoIdentity);
    1297           0 :   voRB24VMABRFCT->AddNode( voRB24VMABCCTFlange, 1, new TGeoTranslation(0., 0.,  kRB24VMABCCTL - kRB24VMABCCTFlangeL));
    1298             : 
    1299             :   z =  kRB24VMABCRBT1L/2. + kRB24B1BellowUndL + kRB24VMABBEConTubeL1 +  kRB24VMABBEConTubeL2 - kRB24VMABCCTL + 1.;    
    1300           0 :   voRB24VMABCRB->AddNode(voRB24VMABRFCT, 1, new TGeoTranslation(0., 0., z));
    1301             : 
    1302             : 
    1303             :   //
    1304             :   // Assembling RB24/1
    1305             :   //    
    1306           0 :   TGeoVolumeAssembly* voRB24 = new TGeoVolumeAssembly("RB24");
    1307             :   // Cu Tube with two simplified flanges
    1308           0 :   voRB24->AddNode(voRB24CuTubeM, 1, gGeoIdentity);
    1309           0 :   voRB24->AddNode(voRB24CuTubeA, 1, gGeoIdentity);
    1310             :   z = - kRB24CuTubeL/2 + kRB24CuTubeFL/2.;
    1311           0 :   voRB24->AddNode(voRB24CuTubeF, 1, new TGeoTranslation(0., 0., z));
    1312             :   z = + kRB24CuTubeL/2 - kRB24CuTubeFL/2.;
    1313           0 :   voRB24->AddNode(voRB24CuTubeF, 2, new TGeoTranslation(0., 0., z));
    1314             :   // VMABC close to compensator magnet
    1315             :   z = - kRB24CuTubeL/2. -  (kRB24VMABCL - kRB24VMABCRBT1L/2) + 1.;
    1316             :     
    1317           0 :   voRB24->AddNode(voRB24VMABCRB, 2, new TGeoTranslation(0., 0., z));
    1318             :   // Bellow
    1319             :   z =  kRB24CuTubeL/2;
    1320           0 :   voRB24->AddNode(voRB24B1BellowM, 1, new TGeoTranslation(0., 0., z));
    1321             :   z +=  (kRB24B1L +  kRB24AIpML/2.);
    1322             :   // Annular ion pump
    1323           0 :   voRB24->AddNode(voRB24AIpM, 1, new TGeoTranslation(0., 0., z));
    1324             :   z +=  (kRB24AIpML/2. +  kRB24ValveWz/2.);
    1325             :   // Valve
    1326           0 :   voRB24->AddNode(voRB24ValveMo, 1, new TGeoTranslation(0., 0., z));
    1327             :   z += (kRB24ValveWz/2.+ kRB24VMABCRBT1L/2. + 1.);
    1328             :   // VMABC close to forward detectors
    1329           0 :   voRB24->AddNode(voRB24VMABCRB, 3, new TGeoTranslation(0., 0., z));
    1330             :   //
    1331             :   //   RB24/2
    1332             :   //     
    1333             :   // Copper Tube RB24/2
    1334             :   const Float_t  kRB242CuTubeL  = 330.0;
    1335             :     
    1336           0 :   TGeoVolume* voRB242CuTubeM = new TGeoVolume("voRB242CuTubeM", 
    1337           0 :                                               new TGeoTube(0., kRB24CuTubeRo, kRB242CuTubeL/2.), kMedVac);
    1338           0 :   voRB24CuTubeM->SetVisibility(0);
    1339           0 :   TGeoVolume* voRB242CuTube = new TGeoVolume("voRB242CuTube", 
    1340           0 :                                              new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB242CuTubeL/2.), kMedCu);
    1341           0 :   voRB242CuTubeM->AddNode(voRB242CuTube, 1, gGeoIdentity);
    1342             :     
    1343             : 
    1344           0 :   TGeoVolumeAssembly* voRB242 = new TGeoVolumeAssembly("RB242");
    1345           0 :   voRB242->AddNode(voRB242CuTube, 1, gGeoIdentity);
    1346             :   z = - kRB242CuTubeL/2 + kRB24CuTubeFL/2.;
    1347           0 :   voRB242->AddNode(voRB24CuTubeF, 3, new TGeoTranslation(0., 0., z));
    1348             :   z = + kRB242CuTubeL/2 - kRB24CuTubeFL/2.;
    1349           0 :   voRB242->AddNode(voRB24CuTubeF, 4, new TGeoTranslation(0., 0., z));
    1350             :   z = - kRB24CuTubeL/2 - kRB24VMABCL - kRB242CuTubeL/2.;
    1351           0 :   voRB24->AddNode(voRB242, 1, new TGeoTranslation(0., 0., z));
    1352             :   //
    1353             :   //   RB24/3
    1354             :   //     
    1355             :   // Copper Tube RB24/3
    1356             :   const Float_t  kRB243CuTubeL  = 303.35;
    1357             :     
    1358           0 :   TGeoVolume* voRB243CuTubeM = new TGeoVolume("voRB243CuTubeM", 
    1359           0 :                                               new TGeoTube(0., kRB24CuTubeRo, kRB243CuTubeL/2.), kMedVac);
    1360           0 :   voRB24CuTubeM->SetVisibility(0);
    1361           0 :   TGeoVolume* voRB243CuTube = new TGeoVolume("voRB243CuTube", 
    1362           0 :                                              new TGeoTube(kRB24CuTubeRi, kRB24CuTubeRo, kRB243CuTubeL/2.), kMedCu);
    1363           0 :   voRB243CuTubeM->AddNode(voRB243CuTube, 1, gGeoIdentity);
    1364             :     
    1365             : 
    1366           0 :   TGeoVolumeAssembly* voRB243  = new TGeoVolumeAssembly("RB243");
    1367           0 :   TGeoVolumeAssembly* voRB243A = new TGeoVolumeAssembly("RB243A");
    1368             :     
    1369           0 :   voRB243A->AddNode(voRB243CuTube, 1, gGeoIdentity);
    1370             :   z = - kRB243CuTubeL/2 + kRB24CuTubeFL/2.;
    1371           0 :   voRB243A->AddNode(voRB24CuTubeF, 5, new TGeoTranslation(0., 0., z));
    1372             :   z = + kRB243CuTubeL/2 - kRB24CuTubeFL/2.;
    1373           0 :   voRB243A->AddNode(voRB24CuTubeF,    6, new TGeoTranslation(0., 0., z));
    1374             :   z = + kRB243CuTubeL/2;
    1375           0 :   voRB243A->AddNode(voRB24B1BellowM,  2, new TGeoTranslation(0., 0., z));    
    1376             : 
    1377             :   z = - kRB243CuTubeL/2.  - kRB24B1L;
    1378           0 :   voRB243->AddNode(voRB243A, 1, new TGeoTranslation(0., 0., z));    
    1379             :   z = - (1.5 * kRB243CuTubeL + 2. * kRB24B1L);
    1380           0 :   voRB243->AddNode(voRB243A, 2, new TGeoTranslation(0., 0., z));    
    1381             : 
    1382             :   z = - 2. * (kRB243CuTubeL + kRB24B1L) - (kRB24VMABCL - kRB24VMABCRBT1L/2) + 1.;
    1383           0 :   voRB243->AddNode(voRB24VMABCRB, 3, new TGeoTranslation(0., 0., z));    
    1384             :     
    1385             :   z = - kRB24CuTubeL/2 - kRB24VMABCL - kRB242CuTubeL;
    1386           0 :   voRB24->AddNode(voRB243, 1, new TGeoTranslation(0., 0., z));
    1387             : 
    1388             : 
    1389             :   //
    1390             :   //
    1391           0 :   top->AddNode(voRB24, 1, new TGeoCombiTrans(0., 0., kRB24CuTubeL/2 + 88.5 + 400., rot180));
    1392             : 
    1393             : 
    1394             :   // 
    1395             :   ////////////////////////////////////////////////////////////////////////////////     
    1396             :   //                                                                            //
    1397             :   //                                  The Absorber Vacuum system                // 
    1398             :   //                                                                            //
    1399             :   ////////////////////////////////////////////////////////////////////////////////
    1400             :   //
    1401             :   //    Rotable Flange starts at:            82.00 cm from IP      
    1402             :   //    Length of rotable flange section:    10.68 cm             
    1403             :   //    Weld                                  0.08 cm                  
    1404             :   //    Length of straight section          207.21 cm
    1405             :   //    =======================================================================
    1406             :   //                                        299.97 cm  [0.03 cm missing ?]
    1407             :   //    Length of opening cone              252.09 cm
    1408             :   //    Weld                                  0.15 cm                
    1409             :   //    Length of compensator                30.54 cm
    1410             :   //    Weld                                  0.15 cm                
    1411             :   //    Length of fixed flange  2.13 - 0.97   1.16 cm
    1412             :   //    ======================================================================= 
    1413             :   //                                        584.06 cm [584.80 installed] [0.74 cm missing]
    1414             :   //    RB26/3
    1415             :   //    Length of split flange  2.13 - 1.2    0.93 cm
    1416             :   //    Weld                                  0.15 cm                
    1417             :   //    Length of fixed point section        16.07 cm               
    1418             :   //    Weld                                  0.15 cm                
    1419             :   //    Length of opening cone              629.20 cm
    1420             :   //    Weld                                  0.30 cm                
    1421             :   //    Kength of the compensator            41.70 cm
    1422             :   //    Weld                                  0.30 cm                
    1423             :   //    Length of fixed flange  2.99 - 1.72   1.27 cm
    1424             :   // =================================================
    1425             :   //    Length of RB26/3                    690.07 cm [689.20 installed] [0.87 cm too much] 
    1426             :   //
    1427             :   //    RB26/4-5
    1428             :   //    Length of split flange  2.13 - 1.2    0.93 cm
    1429             :   //    Weld                                  0.15 cm                
    1430             :   //    Length of fixed point section        16.07 cm               
    1431             :   //    Weld                                  0.15 cm                
    1432             :   //    Length of opening cone              629.20 cm
    1433             :   //    Weld                                  0.30 cm                
    1434             :   //    Length of closing cone
    1435             :   //    Weld
    1436             :   //    Lenth of straight section 
    1437             :   //    Kength of the compensator            41.70 cm
    1438             :   //    Weld                                  0.30 cm                
    1439             :   //    Length of fixed flange  2.99 - 1.72   1.27 cm
    1440             :   // =================================================
    1441             :   //    Length of RB26/3                    690.07 cm [689.20 installed] [0.87 cm too much] 
    1442             :       
    1443             :   ///////////////////////////////////////////
    1444             :   //                                       //
    1445             :   //    RB26/1-2                           //  
    1446             :   //    Drawing LHCV2a_0050 [as installed] //
    1447             :   //    Drawing LHCV2a_0008                //
    1448             :   //    Drawing LHCV2a_0001                //
    1449             :   ///////////////////////////////////////////
    1450             :   //    Pos1 Vacuum Tubes   LHCVC2A__0010
    1451             :   //    Pos2 Compensator    LHCVC2A__0064
    1452             :   //    Pos3 Rotable Flange LHCVFX___0016
    1453             :   //    Pos4 Fixed Flange   LHCVFX___0006
    1454             :   //    Pos5 Bellow Tooling LHCVFX___0003
    1455             :   //
    1456             :   //             
    1457             :   //
    1458             :   ///////////////////////////////////
    1459             :   //    RB26/1-2 Vacuum Tubes      //
    1460             :   //    Drawing  LHCVC2a_0010      //
    1461             :   ///////////////////////////////////
    1462             :   const Float_t kRB26s12TubeL = 459.45; // 0.15 cm added for welding       
    1463             :   //
    1464             :   // Add 1 cm on outer diameter for insulation
    1465             :   //
    1466           0 :   TGeoPcon* shRB26s12Tube = new TGeoPcon(0., 360., 5);
    1467             :   // Section 1: straight section
    1468           0 :   shRB26s12Tube->DefineSection(0,   0.00,         5.84/2.,  6.00/2.);
    1469           0 :   shRB26s12Tube->DefineSection(1, 207.21,         5.84/2.,  6.00/2.);      
    1470             :   // Section 2: 0.72 deg opening cone
    1471           0 :   shRB26s12Tube->DefineSection(2, 207.21,         5.84/2.,  6.14/2.);      
    1472           0 :   shRB26s12Tube->DefineSection(3, 452.30,        12.00/2., 12.30/2.);      
    1473           0 :   shRB26s12Tube->DefineSection(4, kRB26s12TubeL, 12.00/2., 12.30/2.); 
    1474           0 :   TGeoVolume* voRB26s12Tube  = new TGeoVolume("RB26s12Tube", shRB26s12Tube, kMedSteel);
    1475             :   // Add the insulation layer    
    1476           0 :   TGeoVolume* voRB26s12TubeIns = new TGeoVolume("RB26s12TubeIns", MakeInsulationFromTemplate(shRB26s12Tube), kMedInsu); 
    1477           0 :   voRB26s12Tube->AddNode(voRB26s12TubeIns, 1, gGeoIdentity);
    1478             : 
    1479             :  
    1480           0 :   TGeoVolume* voRB26s12TubeM  = new TGeoVolume("RB26s12TubeM", MakeMotherFromTemplate(shRB26s12Tube), kMedVac);
    1481           0 :   voRB26s12TubeM->AddNode(voRB26s12Tube, 1, gGeoIdentity);
    1482             :       
    1483             : 
    1484             :       
    1485             :   ///////////////////////////////////
    1486             :   //    RB26/2   Axial Compensator //
    1487             :   //    Drawing  LHCVC2a_0064      //
    1488             :   ///////////////////////////////////
    1489             :   const Float_t kRB26s2CompL             = 30.65;    // Length of the compensator
    1490             :   const Float_t kRB26s2BellowRo          = 14.38/2.; // Bellow outer radius        [Pos 1]
    1491             :   const Float_t kRB26s2BellowRi          = 12.12/2.; // Bellow inner radius        [Pos 1] 
    1492             :   const Int_t   kRB26s2NumberOfPlies     = 14;       // Number of plies            [Pos 1] 
    1493             :   const Float_t kRB26s2BellowUndL        = 10.00;    // Length of undulated region [Pos 1]  [+10 mm installed including pretension ?] 
    1494             :   const Float_t kRB26s2PlieThickness     =  0.025;   // Plie thickness             [Pos 1]
    1495             :   const Float_t kRB26s2ConnectionPlieR   =  0.21;    // Connection plie radius     [Pos 1] 
    1496             :   //  Plie radius
    1497             :   const Float_t kRB26s2PlieR = 
    1498             :     (kRB26s2BellowUndL - 4. *  kRB26s2ConnectionPlieR + 2. * kRB26s2PlieThickness + 
    1499             :      (2. *  kRB26s2NumberOfPlies - 2.) * kRB26s2PlieThickness) / (4. * kRB26s2NumberOfPlies - 2.);
    1500             :   const Float_t kRB26s2CompTubeInnerR    = 12.00/2.;  // Connection tubes inner radius     [Pos 2 + 3]
    1501             :   const Float_t kRB26s2CompTubeOuterR    = 12.30/2.;  // Connection tubes outer radius     [Pos 2 + 3]
    1502             :   const Float_t kRB26s2WeldingTubeLeftL  =  9.00/2.;  // Left connection tube half length  [Pos 2]
    1503             :   const Float_t kRB26s2WeldingTubeRightL = 11.65/2.;  // Right connection tube half length [Pos 3]  [+ 0.15 cm for welding]
    1504             :   const Float_t kRB26s2RingOuterR        = 18.10/2.;  // Ring inner radius                 [Pos 4]
    1505             :   const Float_t kRB26s2RingL             =  0.40/2.;  // Ring half length                  [Pos 4]
    1506             :   const Float_t kRB26s2RingZ             =  6.50   ;  // Ring z-position                   [Pos 4]
    1507             :   const Float_t kRB26s2ProtOuterR        = 18.20/2.;  // Protection tube outer radius      [Pos 5]
    1508             :   const Float_t kRB26s2ProtL             = 15.00/2.;  // Protection tube half length       [Pos 5]
    1509             :   const Float_t kRB26s2ProtZ             =  6.70   ;  // Protection tube z-position        [Pos 5]
    1510             :    
    1511             :       
    1512             :   // Mother volume
    1513             :   //
    1514           0 :   TGeoPcon* shRB26s2Compensator  = new TGeoPcon(0., 360., 6);
    1515           0 :   shRB26s2Compensator->DefineSection( 0,   0.0, 0., kRB26s2CompTubeOuterR);
    1516           0 :   shRB26s2Compensator->DefineSection( 1,   kRB26s2RingZ, 0., kRB26s2CompTubeOuterR);      
    1517           0 :   shRB26s2Compensator->DefineSection( 2,   kRB26s2RingZ, 0., kRB26s2ProtOuterR);      
    1518           0 :   shRB26s2Compensator->DefineSection( 3,   kRB26s2ProtZ + 2. * kRB26s2ProtL, 0., kRB26s2ProtOuterR);            
    1519           0 :   shRB26s2Compensator->DefineSection( 4,   kRB26s2ProtZ + 2. * kRB26s2ProtL, 0., kRB26s2CompTubeOuterR);
    1520           0 :   shRB26s2Compensator->DefineSection( 5,   kRB26s2CompL                    , 0., kRB26s2CompTubeOuterR);            
    1521           0 :   TGeoVolume* voRB26s2Compensator  = new TGeoVolume("RB26s2Compensator", shRB26s2Compensator, kMedVac);
    1522             :             
    1523             :   //
    1524             :   // [Pos 1] Bellow
    1525             :   //      
    1526             :   //
    1527           0 :   TGeoVolume* voRB26s2Bellow = new TGeoVolume("RB26s2Bellow", new TGeoTube(kRB26s2BellowRi, kRB26s2BellowRo, kRB26s2BellowUndL/2.), kMedVac);
    1528             :   //      
    1529             :   //  Upper part of the undulation
    1530             :   //
    1531           0 :   TGeoTorus* shRB26s2PlieTorusU  =  new TGeoTorus(kRB26s2BellowRo - kRB26s2PlieR, kRB26s2PlieR - kRB26s2PlieThickness, kRB26s2PlieR);
    1532           0 :   shRB26s2PlieTorusU->SetName("RB26s2TorusU");
    1533           0 :   TGeoTube*  shRB26s2PlieTubeU   =  new TGeoTube (kRB26s2BellowRo - kRB26s2PlieR, kRB26s2BellowRo, kRB26s2PlieR);
    1534           0 :   shRB26s2PlieTubeU->SetName("RB26s2TubeU");
    1535           0 :   TGeoCompositeShape*  shRB26s2UpperPlie = new TGeoCompositeShape("RB26s2UpperPlie", "RB26s2TorusU*RB26s2TubeU");
    1536             :  
    1537           0 :   TGeoVolume* voRB26s2WiggleU = new TGeoVolume("RB26s2UpperPlie", shRB26s2UpperPlie, kMedSteel);
    1538             :   //
    1539             :   // Lower part of the undulation
    1540           0 :   TGeoTorus* shRB26s2PlieTorusL =  new TGeoTorus(kRB26s2BellowRi + kRB26s2PlieR, kRB26s2PlieR - kRB26s2PlieThickness, kRB26s2PlieR);
    1541           0 :   shRB26s2PlieTorusL->SetName("RB26s2TorusL");
    1542           0 :   TGeoTube*  shRB26s2PlieTubeL   =  new TGeoTube (kRB26s2BellowRi, kRB26s2BellowRi + kRB26s2PlieR, kRB26s2PlieR);
    1543           0 :   shRB26s2PlieTubeL->SetName("RB26s2TubeL");
    1544           0 :   TGeoCompositeShape*  shRB26s2LowerPlie = new TGeoCompositeShape("RB26s2LowerPlie", "RB26s2TorusL*RB26s2TubeL");
    1545             :       
    1546           0 :   TGeoVolume* voRB26s2WiggleL = new TGeoVolume("RB26s2LowerPlie", shRB26s2LowerPlie, kMedSteel); 
    1547             : 
    1548             :   //
    1549             :   // Connection between upper and lower part of undulation
    1550           0 :   TGeoVolume* voRB26s2WiggleC1 = new TGeoVolume("RB26s2PlieConn1",  
    1551           0 :                                                 new TGeoTube(kRB26s2BellowRi + kRB26s2PlieR, 
    1552             :                                                              kRB26s2BellowRo - kRB26s2PlieR, kRB26s2PlieThickness / 2.), kMedSteel);
    1553             :   //
    1554             :   // One wiggle
    1555           0 :   TGeoVolumeAssembly* voRB26s2Wiggle = new TGeoVolumeAssembly("RB26s2Wiggle");
    1556             :   z0 =  -  kRB26s2PlieThickness / 2.;
    1557           0 :   voRB26s2Wiggle->AddNode(voRB26s2WiggleC1,  1 , new TGeoTranslation(0., 0., z0));
    1558             :   z0 += kRB26s2PlieR -  kRB26s2PlieThickness / 2.;
    1559           0 :   voRB26s2Wiggle->AddNode(voRB26s2WiggleU,   1 , new TGeoTranslation(0., 0., z0));
    1560             :   z0 += kRB26s2PlieR -  kRB26s2PlieThickness / 2.;
    1561           0 :   voRB26s2Wiggle->AddNode(voRB26s2WiggleC1,  2 , new TGeoTranslation(0., 0., z0));
    1562             :   z0 += kRB26s2PlieR -  kRB26s2PlieThickness;
    1563           0 :   voRB26s2Wiggle->AddNode(voRB26s2WiggleL ,  1 , new TGeoTranslation(0., 0., z0));
    1564             :   // Positioning of the volumes
    1565             :   z0   = - kRB26s2BellowUndL/2.+ kRB26s2ConnectionPlieR;
    1566           0 :   voRB26s2Bellow->AddNode(voRB26s2WiggleL, 1, new TGeoTranslation(0., 0., z0));
    1567             :   z0  +=  kRB26s2ConnectionPlieR;
    1568             :   zsh  = 4. *  kRB26s2PlieR -  2. * kRB26s2PlieThickness;
    1569           0 :   for (Int_t iw = 0; iw < kRB26s2NumberOfPlies; iw++) {
    1570           0 :     Float_t zpos =  z0 + iw * zsh;      
    1571           0 :     voRB26s2Bellow->AddNode(voRB26s2Wiggle,  iw + 1, new TGeoTranslation(0., 0., zpos -  kRB26s2PlieThickness));     
    1572             :   }
    1573             : 
    1574           0 :   voRB26s2Compensator->AddNode(voRB26s2Bellow, 1,  new TGeoTranslation(0., 0., 2. * kRB26s2WeldingTubeLeftL + kRB26s2BellowUndL/2.));
    1575             :       
    1576             :   //
    1577             :   // [Pos 2] Left Welding Tube
    1578             :   //      
    1579           0 :   TGeoTube* shRB26s2CompLeftTube = new TGeoTube(kRB26s2CompTubeInnerR, kRB26s2CompTubeOuterR, kRB26s2WeldingTubeLeftL);
    1580           0 :   TGeoVolume* voRB26s2CompLeftTube = new TGeoVolume("RB26s2CompLeftTube", shRB26s2CompLeftTube, kMedSteel);
    1581           0 :   voRB26s2Compensator->AddNode(voRB26s2CompLeftTube, 1,  new TGeoTranslation(0., 0., kRB26s2WeldingTubeLeftL));
    1582             :   //
    1583             :   // [Pos 3] Right Welding Tube
    1584             :   //      
    1585           0 :   TGeoTube* shRB26s2CompRightTube = new TGeoTube(kRB26s2CompTubeInnerR, kRB26s2CompTubeOuterR, kRB26s2WeldingTubeRightL);
    1586           0 :   TGeoVolume* voRB26s2CompRightTube = new TGeoVolume("RB26s2CompRightTube", shRB26s2CompRightTube, kMedSteel);
    1587           0 :   voRB26s2Compensator->AddNode(voRB26s2CompRightTube,  1, new TGeoTranslation(0., 0.,  kRB26s2CompL - kRB26s2WeldingTubeRightL));
    1588             :   //
    1589             :   // [Pos 4] Ring
    1590             :   //      
    1591           0 :   TGeoTube* shRB26s2CompRing = new TGeoTube(kRB26s2CompTubeOuterR, kRB26s2RingOuterR, kRB26s2RingL);
    1592           0 :   TGeoVolume* voRB26s2CompRing = new TGeoVolume("RB26s2CompRing", shRB26s2CompRing, kMedSteel);
    1593           0 :   voRB26s2Compensator->AddNode(voRB26s2CompRing,  1, new TGeoTranslation(0., 0., kRB26s2RingZ + kRB26s2RingL));
    1594             : 
    1595             :   //
    1596             :   // [Pos 5] Outer Protecting Tube
    1597             :   //      
    1598           0 :   TGeoTube* shRB26s2CompProtTube = new TGeoTube(kRB26s2RingOuterR, kRB26s2ProtOuterR, kRB26s2ProtL);
    1599           0 :   TGeoVolume* voRB26s2CompProtTube = new TGeoVolume("RB26s2CompProtTube", shRB26s2CompProtTube, kMedSteel);
    1600           0 :   voRB26s2Compensator->AddNode(voRB26s2CompProtTube, 1,  new TGeoTranslation(0., 0., kRB26s2ProtZ + kRB26s2ProtL));
    1601             :       
    1602             :   ///////////////////////////////////
    1603             :   //    Rotable Flange             //
    1604             :   //    Drawing  LHCVFX_0016       //
    1605             :   /////////////////////////////////// 
    1606             :   const Float_t kRB26s1RFlangeTubeRi    = 5.84/2.;  // Tube inner radius
    1607             :   const Float_t kRB26s1RFlangeTubeRo    = 6.00/2.;  // Tube outer radius
    1608             : 
    1609             :   // Pos 1 Clamp Ring          LHCVFX__0015
    1610             :   const Float_t kRB26s1RFlangeCrL       = 1.40     ; // Lenth of the clamp ring
    1611             :   const Float_t kRB26s1RFlangeCrRi1     = 6.72/2.; // Ring inner radius section 1
    1612             :   const Float_t kRB26s1RFlangeCrRi2     = 6.06/2.; // Ring inner radius section 2
    1613             :   const Float_t kRB26s1RFlangeCrRo      = 8.60/2.;// Ring outer radius 
    1614             :   const Float_t kRB26s1RFlangeCrD       = 0.800    ; // Width section 1
    1615             :       
    1616           0 :   TGeoPcon* shRB26s1RFlangeCr = new TGeoPcon(0., 360., 4);
    1617             :   z0 = 0.;
    1618           0 :   shRB26s1RFlangeCr->DefineSection(0, z0, kRB26s1RFlangeCrRi1, kRB26s1RFlangeCrRo);
    1619             :   z0 += kRB26s1RFlangeCrD;
    1620           0 :   shRB26s1RFlangeCr->DefineSection(1, z0, kRB26s1RFlangeCrRi1, kRB26s1RFlangeCrRo);
    1621           0 :   shRB26s1RFlangeCr->DefineSection(2, z0, kRB26s1RFlangeCrRi2, kRB26s1RFlangeCrRo);      
    1622             :   z0 = kRB26s1RFlangeCrL;
    1623           0 :   shRB26s1RFlangeCr->DefineSection(3, z0, kRB26s1RFlangeCrRi2, kRB26s1RFlangeCrRo);
    1624             :   TGeoVolume* voRB26s1RFlangeCr =  
    1625           0 :     new TGeoVolume("RB26s1RFlangeCr", shRB26s1RFlangeCr, kMedSteel);
    1626             : 
    1627             :   // Pos 2 Insert              LHCVFX__0015
    1628             :   const Float_t kRB26s1RFlangeIsL       = 4.88     ; // Lenth of the insert
    1629             :   const Float_t kRB26s1RFlangeIsR       = 6.70/2.  ; // Ring radius
    1630             :   const Float_t kRB26s1RFlangeIsD       = 0.80     ; // Ring Width
    1631             : 
    1632           0 :   TGeoPcon* shRB26s1RFlangeIs = new TGeoPcon(0., 360., 4);
    1633             :   z0 = 0.;
    1634           0 :   shRB26s1RFlangeIs->DefineSection(0, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeIsR);
    1635             :   z0 += kRB26s1RFlangeIsD;
    1636           0 :   shRB26s1RFlangeIs->DefineSection(1, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeIsR);
    1637           0 :   shRB26s1RFlangeIs->DefineSection(2, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);      
    1638             :   z0 = kRB26s1RFlangeIsL;
    1639           0 :   shRB26s1RFlangeIs->DefineSection(3, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
    1640             :   TGeoVolume* voRB26s1RFlangeIs =  
    1641           0 :     new TGeoVolume("RB26s1RFlangeIs", shRB26s1RFlangeIs, kMedSteel);
    1642             :   // 4.88 + 3.7 = 8.58 (8.7 to avoid overlap)
    1643             :   // Pos 3 Fixed Point Section LHCVC2A_0021
    1644             :   const Float_t kRB26s1RFlangeFpL       = 5.88     ; // Length of the fixed point section (0.08 cm added for welding)
    1645             :   const Float_t kRB26s1RFlangeFpZ       = 3.82     ; // Position of the ring
    1646             :   const Float_t kRB26s1RFlangeFpD       = 0.59     ; // Width of the ring
    1647             :   const Float_t kRB26s1RFlangeFpR       = 7.00/2.  ; // Radius of the ring
    1648             :       
    1649           0 :   TGeoPcon* shRB26s1RFlangeFp = new TGeoPcon(0., 360., 6);
    1650             :   z0 = 0.;
    1651           0 :   shRB26s1RFlangeFp->DefineSection(0, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
    1652             :   z0 += kRB26s1RFlangeFpZ;
    1653           0 :   shRB26s1RFlangeFp->DefineSection(1, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);      
    1654           0 :   shRB26s1RFlangeFp->DefineSection(2, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeFpR);            
    1655             :   z0 += kRB26s1RFlangeFpD;
    1656           0 :   shRB26s1RFlangeFp->DefineSection(3, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeFpR);            
    1657           0 :   shRB26s1RFlangeFp->DefineSection(4, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
    1658             :   z0 = kRB26s1RFlangeFpL;
    1659           0 :   shRB26s1RFlangeFp->DefineSection(5, z0, kRB26s1RFlangeTubeRi, kRB26s1RFlangeTubeRo);
    1660           0 :   TGeoVolume* voRB26s1RFlangeFp = new TGeoVolume("RB26s1RFlangeFp", shRB26s1RFlangeFp, kMedSteel);
    1661             :              
    1662             :   // Put everything in a mother volume
    1663           0 :   TGeoPcon* shRB26s1RFlange = new TGeoPcon(0., 360., 8);
    1664             :   z0 =  0.;
    1665           0 :   shRB26s1RFlange->DefineSection(0, z0, 0., kRB26s1RFlangeCrRo);
    1666             :   z0 += kRB26s1RFlangeCrL;
    1667           0 :   shRB26s1RFlange->DefineSection(1, z0, 0., kRB26s1RFlangeCrRo);
    1668           0 :   shRB26s1RFlange->DefineSection(2, z0, 0., kRB26s1RFlangeTubeRo);
    1669             :   z0 = kRB26s1RFlangeIsL + kRB26s1RFlangeFpZ;
    1670           0 :   shRB26s1RFlange->DefineSection(3, z0, 0., kRB26s1RFlangeTubeRo);      
    1671           0 :   shRB26s1RFlange->DefineSection(4, z0, 0., kRB26s1RFlangeFpR);
    1672             :   z0 += kRB26s1RFlangeFpD;
    1673           0 :   shRB26s1RFlange->DefineSection(5, z0, 0., kRB26s1RFlangeFpR);                
    1674           0 :   shRB26s1RFlange->DefineSection(6, z0, 0., kRB26s1RFlangeTubeRo);
    1675             :   z0 = kRB26s1RFlangeIsL + kRB26s1RFlangeFpL;
    1676           0 :   shRB26s1RFlange->DefineSection(7, z0, 0., kRB26s1RFlangeTubeRo);
    1677           0 :   TGeoVolume* voRB26s1RFlange = new TGeoVolume("RB26s1RFlange", shRB26s1RFlange, kMedVac);
    1678             : 
    1679           0 :   voRB26s1RFlange->AddNode(voRB26s1RFlangeIs, 1, gGeoIdentity);
    1680           0 :   voRB26s1RFlange->AddNode(voRB26s1RFlangeCr, 1, gGeoIdentity);
    1681           0 :   voRB26s1RFlange->AddNode(voRB26s1RFlangeFp, 1, new TGeoTranslation(0., 0., kRB26s1RFlangeIsL));
    1682             :       
    1683             :   ///////////////////////////////////
    1684             :   //    Fixed Flange               //
    1685             :   //    Drawing  LHCVFX_0006       //
    1686             :   /////////////////////////////////// 
    1687             :   const Float_t kRB26s2FFlangeL      =  2.13;    // Length of the flange
    1688             :   const Float_t kRB26s2FFlangeD1     =  0.97;    // Length of section 1
    1689             :   const Float_t kRB26s2FFlangeD2     =  0.29;    // Length of section 2                                              
    1690             :   const Float_t kRB26s2FFlangeD3     =  0.87;    // Length of section 3                                                    
    1691             :   const Float_t kRB26s2FFlangeRo     = 17.15/2.; // Flange outer radius 
    1692             :   const Float_t kRB26s2FFlangeRi1    = 12.30/2.; // Flange inner radius section 1
    1693             :   const Float_t kRB26s2FFlangeRi2    = 12.00/2.; // Flange inner radius section 2
    1694             :   const Float_t kRB26s2FFlangeRi3    = 12.30/2.; // Flange inner radius section 3
    1695             :   z0 = 0;
    1696           0 :   TGeoPcon* shRB26s2FFlange = new TGeoPcon(0., 360., 6);
    1697             :   z0 = 0.;
    1698           0 :   shRB26s2FFlange->DefineSection(0, z0, kRB26s2FFlangeRi1, kRB26s2FFlangeRo);
    1699             :   z0 += kRB26s2FFlangeD1;
    1700           0 :   shRB26s2FFlange->DefineSection(1, z0, kRB26s2FFlangeRi1, kRB26s2FFlangeRo);
    1701           0 :   shRB26s2FFlange->DefineSection(2, z0, kRB26s2FFlangeRi2, kRB26s2FFlangeRo);
    1702             :   z0 += kRB26s2FFlangeD2;
    1703           0 :   shRB26s2FFlange->DefineSection(3, z0, kRB26s2FFlangeRi2, kRB26s2FFlangeRo);
    1704           0 :   shRB26s2FFlange->DefineSection(4, z0, kRB26s2FFlangeRi3, kRB26s2FFlangeRo);
    1705             :   z0 += kRB26s2FFlangeD3;
    1706           0 :   shRB26s2FFlange->DefineSection(5, z0, kRB26s2FFlangeRi3, kRB26s2FFlangeRo);
    1707           0 :   TGeoVolume* voRB26s2FFlange = new TGeoVolume("RB26s2FFlange", shRB26s2FFlange, kMedSteel);
    1708             : 
    1709           0 :   TGeoVolume* voRB26s2FFlangeM = new TGeoVolume("RB26s2FFlangeM", MakeMotherFromTemplate(shRB26s2FFlange, 2, 5), kMedVac);
    1710           0 :   voRB26s2FFlangeM->AddNode(voRB26s2FFlange, 1, gGeoIdentity);
    1711             :       
    1712             :       
    1713             : 
    1714             :   ////////////////////////////////////////
    1715             :   //                                    //
    1716             :   //    RB26/3                          //  
    1717             :   //    Drawing LHCV2a_0048             //
    1718             :   //    Drawing LHCV2a_0002             //
    1719             :   ////////////////////////////////////////    
    1720             :   //
    1721             :   //    Pos 1 Vacuum Tubes      LHCVC2A__0003
    1722             :   //    Pos 2 Fixed Point       LHCVFX___0005
    1723             :   //    Pos 3 Split Flange      LHCVFX___0007
    1724             :   //    Pos 4 Fixed Flange      LHCVFX___0004
    1725             :   //    Pos 5 Axial Compensator LHCVC2A__0065
    1726             :   //
    1727             :   //
    1728             :   //
    1729             :   //
    1730             :   ///////////////////////////////////
    1731             :   //    Vacuum Tube                //
    1732             :   //    Drawing  LHCVC2A_0003      //
    1733             :   /////////////////////////////////// 
    1734             :   const Float_t kRB26s3TubeL  = 629.35 + 0.3; // 0.3 cm added for welding
    1735             :   const Float_t kRB26s3TubeR1 =  12./2.;
    1736           0 :   const Float_t kRB26s3TubeR2 =  kRB26s3TubeR1 + 215.8 * TMath::Tan(0.829 / 180. * TMath::Pi());
    1737             :       
    1738             :       
    1739           0 :   TGeoPcon* shRB26s3Tube = new TGeoPcon(0., 360., 7);
    1740             :   // Section 1: straight section
    1741           0 :   shRB26s3Tube->DefineSection(0,   0.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);
    1742           0 :   shRB26s3Tube->DefineSection(1,   2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.15);      
    1743             :   // Section 2: 0.829 deg opening cone
    1744           0 :   shRB26s3Tube->DefineSection(2,   2.00, kRB26s3TubeR1, kRB26s3TubeR1 + 0.20);
    1745             :       
    1746           0 :   shRB26s3Tube->DefineSection(3, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.20);
    1747           0 :   shRB26s3Tube->DefineSection(4, 217.80, kRB26s3TubeR2, kRB26s3TubeR2 + 0.30);      
    1748             : 
    1749           0 :   shRB26s3Tube->DefineSection(5, 622.20,       30.00/2., 30.60/2.);      
    1750           0 :   shRB26s3Tube->DefineSection(6, kRB26s3TubeL, 30.00/2., 30.60/2.); 
    1751             : 
    1752           0 :   TGeoVolume* voRB26s3Tube = new TGeoVolume("RB26s3Tube", shRB26s3Tube, kMedSteel);
    1753             :   //    Add the insulation layer
    1754           0 :   TGeoVolume* voRB26s3TubeIns = new TGeoVolume("RB26s3TubeIns", MakeInsulationFromTemplate(shRB26s3Tube), kMedInsu); 
    1755           0 :   voRB26s3Tube->AddNode(voRB26s3TubeIns, 1, gGeoIdentity);
    1756             : 
    1757           0 :   TGeoVolume* voRB26s3TubeM  = new TGeoVolume("RB26s3TubeM", MakeMotherFromTemplate(shRB26s3Tube), kMedVac);
    1758           0 :   voRB26s3TubeM->AddNode(voRB26s3Tube, 1, gGeoIdentity);
    1759             : 
    1760             :       
    1761             : 
    1762             :   ///////////////////////////////////
    1763             :   //    Fixed Point                //
    1764             :   //    Drawing  LHCVFX_0005       //
    1765             :   /////////////////////////////////// 
    1766             :   const Float_t kRB26s3FixedPointL       = 16.37     ; // Length of the fixed point section (0.3 cm added for welding)
    1767             :   const Float_t kRB26s3FixedPointZ       =  9.72     ; // Position of the ring (0.15 cm added for welding)
    1768             :   const Float_t kRB26s3FixedPointD       =  0.595    ; // Width of the ring
    1769             :   const Float_t kRB26s3FixedPointR       = 13.30/2.  ; // Radius of the ring
    1770             :   const Float_t kRB26s3FixedPointRi      = 12.00/2.  ; // Inner radius of the tube
    1771             :   const Float_t kRB26s3FixedPointRo1     = 12.30/2.  ; // Outer radius of the tube (in)
    1772             :   const Float_t kRB26s3FixedPointRo2     = 12.40/2.  ; // Outer radius of the tube (out)
    1773             :   const Float_t kRB26s3FixedPointDs      =  1.5      ; // Width of straight section behind ring
    1774             :   const Float_t kRB26s3FixedPointDc      =  3.15     ; // Width of conical  section behind ring (0.15 cm added for welding)      
    1775             :       
    1776           0 :   TGeoPcon* shRB26s3FixedPoint = new TGeoPcon(0., 360., 8);
    1777             :   z0 = 0.;
    1778           0 :   shRB26s3FixedPoint->DefineSection(0, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
    1779             :   z0 += kRB26s3FixedPointZ;
    1780           0 :   shRB26s3FixedPoint->DefineSection(1, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);      
    1781           0 :   shRB26s3FixedPoint->DefineSection(2, z0, kRB26s3FixedPointRi, kRB26s3FixedPointR);           
    1782             :   z0 += kRB26s3FixedPointD;
    1783           0 :   shRB26s3FixedPoint->DefineSection(3, z0, kRB26s3FixedPointRi, kRB26s3FixedPointR);           
    1784           0 :   shRB26s3FixedPoint->DefineSection(4, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
    1785             :   z0 += kRB26s3FixedPointDs;
    1786           0 :   shRB26s3FixedPoint->DefineSection(5, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo1);
    1787             :   z0 += kRB26s3FixedPointDc;
    1788           0 :   shRB26s3FixedPoint->DefineSection(6, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo2);
    1789             :   z0 = kRB26s3FixedPointL;
    1790           0 :   shRB26s3FixedPoint->DefineSection(7, z0, kRB26s3FixedPointRi, kRB26s3FixedPointRo2);
    1791           0 :   TGeoVolume* voRB26s3FixedPoint = new TGeoVolume("RB26s3FixedPoint", shRB26s3FixedPoint, kMedSteel);
    1792             : 
    1793           0 :   TGeoVolume* voRB26s3FixedPointM = new TGeoVolume("RB26s3FixedPointM", MakeMotherFromTemplate(shRB26s3FixedPoint), kMedVac);
    1794           0 :   voRB26s3FixedPointM->AddNode(voRB26s3FixedPoint, 1, gGeoIdentity);
    1795             :       
    1796             :   ///////////////////////////////////
    1797             :   //    Split Flange               //
    1798             :   //    Drawing  LHCVFX_0005       //
    1799             :   /////////////////////////////////// 
    1800             :   const Float_t kRB26s3SFlangeL      =  2.13;        // Length of the flange
    1801             :   const Float_t kRB26s3SFlangeD1     =  0.57;        // Length of section 1
    1802             :   const Float_t kRB26s3SFlangeD2     =  0.36;        // Length of section 2                                                  
    1803             :   const Float_t kRB26s3SFlangeD3     =  0.50 + 0.70; // Length of section 3                                                        
    1804             :   const Float_t kRB26s3SFlangeRo     = 17.15/2.;     // Flange outer radius 
    1805             :   const Float_t kRB26s3SFlangeRi1    = 12.30/2.;     // Flange inner radius section 1
    1806             :   const Float_t kRB26s3SFlangeRi2    = 12.00/2.;     // Flange inner radius section 2
    1807             :   const Float_t kRB26s3SFlangeRi3    = 12.30/2.;     // Flange inner radius section 3
    1808             :   z0 = 0;
    1809           0 :   TGeoPcon* shRB26s3SFlange = new TGeoPcon(0., 360., 6);
    1810             :   z0 = 0.;
    1811           0 :   shRB26s3SFlange->DefineSection(0, z0, kRB26s3SFlangeRi1, kRB26s3SFlangeRo);
    1812             :   z0 += kRB26s3SFlangeD1;
    1813           0 :   shRB26s3SFlange->DefineSection(1, z0, kRB26s3SFlangeRi1, kRB26s3SFlangeRo);
    1814           0 :   shRB26s3SFlange->DefineSection(2, z0, kRB26s3SFlangeRi2, kRB26s3SFlangeRo);
    1815             :   z0 += kRB26s3SFlangeD2;
    1816           0 :   shRB26s3SFlange->DefineSection(3, z0, kRB26s3SFlangeRi2, kRB26s3SFlangeRo);
    1817           0 :   shRB26s3SFlange->DefineSection(4, z0, kRB26s3SFlangeRi3, kRB26s3SFlangeRo);
    1818             :   z0 += kRB26s3SFlangeD3;
    1819           0 :   shRB26s3SFlange->DefineSection(5, z0, kRB26s3SFlangeRi3, kRB26s3SFlangeRo);
    1820           0 :   TGeoVolume* voRB26s3SFlange = new TGeoVolume("RB26s3SFlange", shRB26s3SFlange, kMedSteel);
    1821             : 
    1822           0 :   TGeoVolume* voRB26s3SFlangeM = new TGeoVolume("RB26s3SFlangeM", MakeMotherFromTemplate(shRB26s3SFlange, 0, 3), kMedVac);
    1823           0 :   voRB26s3SFlangeM->AddNode(voRB26s3SFlange, 1, gGeoIdentity);
    1824             :         
    1825             :   ///////////////////////////////////
    1826             :   //    RB26/3   Fixed Flange      //
    1827             :   //    Drawing  LHCVFX___0004     //
    1828             :   /////////////////////////////////// 
    1829             :   const Float_t kRB26s3FFlangeL      =  2.99;    // Length of the flange
    1830             :   const Float_t kRB26s3FFlangeD1     =  1.72;    // Length of section 1
    1831             :   const Float_t kRB26s3FFlangeD2     =  0.30;    // Length of section 2                                              
    1832             :   const Float_t kRB26s3FFlangeD3     =  0.97;    // Length of section 3                                                    
    1833             :   const Float_t kRB26s3FFlangeRo     = 36.20/2.; // Flange outer radius 
    1834             :   const Float_t kRB26s3FFlangeRi1    = 30.60/2.; // Flange inner radius section 1
    1835             :   const Float_t kRB26s3FFlangeRi2    = 30.00/2.; // Flange inner radius section 2
    1836             :   const Float_t kRB26s3FFlangeRi3    = 30.60/2.; // Flange inner radius section 3
    1837             :   z0 = 0;
    1838           0 :   TGeoPcon* shRB26s3FFlange = new TGeoPcon(0., 360., 6);
    1839             :   z0 = 0.;
    1840           0 :   shRB26s3FFlange->DefineSection(0, z0, kRB26s3FFlangeRi1, kRB26s3FFlangeRo);
    1841             :   z0 += kRB26s3FFlangeD1;
    1842           0 :   shRB26s3FFlange->DefineSection(1, z0, kRB26s3FFlangeRi1, kRB26s3FFlangeRo);
    1843           0 :   shRB26s3FFlange->DefineSection(2, z0, kRB26s3FFlangeRi2, kRB26s3FFlangeRo);
    1844             :   z0 += kRB26s3FFlangeD2;
    1845           0 :   shRB26s3FFlange->DefineSection(3, z0, kRB26s3FFlangeRi2, kRB26s3FFlangeRo);
    1846           0 :   shRB26s3FFlange->DefineSection(4, z0, kRB26s3FFlangeRi3, kRB26s3FFlangeRo);
    1847             :   z0 += kRB26s3FFlangeD3;
    1848           0 :   shRB26s3FFlange->DefineSection(5, z0, kRB26s3FFlangeRi3, kRB26s3FFlangeRo);
    1849           0 :   TGeoVolume* voRB26s3FFlange = new TGeoVolume("RB26s3FFlange", shRB26s3FFlange, kMedSteel);
    1850             :       
    1851           0 :   TGeoVolume* voRB26s3FFlangeM = new TGeoVolume("RB26s3FFlangeM", MakeMotherFromTemplate(shRB26s3FFlange, 2, 5), kMedVac);
    1852           0 :   voRB26s3FFlangeM->AddNode(voRB26s3FFlange, 1, gGeoIdentity);
    1853             :             
    1854             : 
    1855             : 
    1856             :   ///////////////////////////////////
    1857             :   //    RB26/3   Axial Compensator //
    1858             :   //    Drawing  LHCVC2a_0065      //
    1859             :   /////////////////////////////////// 
    1860             :   const Float_t kRB26s3CompL              = 42.0;     // Length of the compensator (0.3 cm added for welding)
    1861             :   const Float_t kRB26s3BellowRo           = 34.00/2.; // Bellow outer radius        [Pos 1]
    1862             :   const Float_t kRB26s3BellowRi           = 30.10/2.; // Bellow inner radius        [Pos 1] 
    1863             :   const Int_t   kRB26s3NumberOfPlies      = 13;       // Number of plies            [Pos 1] 
    1864             :   const Float_t kRB26s3BellowUndL         = 17.70;    // Length of undulated region [Pos 1] 
    1865             :   const Float_t kRB26s3PlieThickness      =  0.06;    // Plie thickness             [Pos 1]
    1866             :   const Float_t kRB26s3ConnectionPlieR    =  0.21;    // Connection plie radius     [Pos 1] 
    1867             :   //  Plie radius
    1868             :   const Float_t kRB26s3PlieR = 
    1869             :     (kRB26s3BellowUndL - 4. *  kRB26s3ConnectionPlieR + 2. * kRB26s3PlieThickness + 
    1870             :      (2. *  kRB26s3NumberOfPlies - 2.) * kRB26s3PlieThickness) / (4. * kRB26s3NumberOfPlies - 2.);
    1871             : 
    1872             :   //
    1873             :   // The welding tubes have 3 sections with different radii and 2 transition regions.
    1874             :   // Section 1: connection to the outside
    1875             :   // Section 2: commection to the bellow
    1876             :   // Section 3: between 1 and 2
    1877             :   const Float_t kRB26s3CompTubeInnerR1    = 30.0/2.;  // Outer Connection tubes inner radius     [Pos 4 + 3]
    1878             :   const Float_t kRB26s3CompTubeOuterR1    = 30.6/2.;  // Outer Connection tubes outer radius     [Pos 4 + 3]
    1879             :   const Float_t kRB26s3CompTubeInnerR2    = 29.4/2.;  // Connection tubes inner radius           [Pos 4 + 3]
    1880             :   const Float_t kRB26s3CompTubeOuterR2    = 30.0/2.;  // Connection tubes outer radius           [Pos 4 + 3]
    1881             :   const Float_t kRB26s3CompTubeInnerR3    = 30.6/2.;  // Connection tubes inner radius at bellow [Pos 4 + 3]
    1882             :   const Float_t kRB26s3CompTubeOuterR3    = 32.2/2.;  // Connection tubes outer radius at bellow [Pos 4 + 3]
    1883             :  
    1884             :   const Float_t kRB26s3WeldingTubeLeftL1  =  2.0;     // Left connection tube length             [Pos 4]
    1885             :   const Float_t kRB26s3WeldingTubeLeftL2  =  3.4;     // Left connection tube length             [Pos 4]
    1886             :   const Float_t kRB26s3WeldingTubeLeftL   =  7.0;     // Left connection tube total length       [Pos 4]
    1887             :   const Float_t kRB26s3WeldingTubeRightL1 =  2.3;     // Right connection tube length            [Pos 3] (0.3 cm added for welding)
    1888             :   const Float_t kRB26s3WeldingTubeRightL2 = 13.4;     // Right connection tube length            [Pos 3]
    1889             : 
    1890             :   const Float_t kRB26s3WeldingTubeT1      =  0.6;     // Length of first r-transition            [Pos 4 + 3]
    1891             :   const Float_t kRB26s3WeldingTubeT2      =  1.0;     // Length of 2nd   r-transition            [Pos 4 + 3]       
    1892             : 
    1893             :       
    1894             :       
    1895             :   const Float_t kRB26s3RingOuterR         = 36.1/2.;  // Ring inner radius                       [Pos 4]
    1896             :   const Float_t kRB26s3RingL              =  0.8/2.;  // Ring half length                        [Pos 4]
    1897             :   const Float_t kRB26s3RingZ              =  3.7   ;  // Ring z-position                         [Pos 4]
    1898             :   const Float_t kRB26s3ProtOuterR         = 36.2/2.;  // Protection tube outer radius            [Pos 2]
    1899             :   const Float_t kRB26s3ProtL              = 27.0/2.;  // Protection tube half length             [Pos 2]
    1900             :   const Float_t kRB26s3ProtZ              =  4.0   ;  // Protection tube z-position              [Pos 2]
    1901             :    
    1902             :       
    1903             :   // Mother volume
    1904             :   //
    1905           0 :   TGeoPcon* shRB26s3Compensator  = new TGeoPcon(0., 360., 6);
    1906           0 :   shRB26s3Compensator->DefineSection( 0,   0.0, 0., kRB26s3CompTubeOuterR1);
    1907           0 :   shRB26s3Compensator->DefineSection( 1,   kRB26s3RingZ, 0., kRB26s3CompTubeOuterR1);      
    1908           0 :   shRB26s3Compensator->DefineSection( 2,   kRB26s3RingZ, 0., kRB26s3ProtOuterR);      
    1909           0 :   shRB26s3Compensator->DefineSection( 3,   kRB26s3ProtZ + 2. * kRB26s3ProtL, 0., kRB26s3ProtOuterR);            
    1910           0 :   shRB26s3Compensator->DefineSection( 4,   kRB26s3ProtZ + 2. * kRB26s3ProtL, 0., kRB26s3CompTubeOuterR1);
    1911           0 :   shRB26s3Compensator->DefineSection( 5,   kRB26s3CompL                    , 0., kRB26s3CompTubeOuterR1);            
    1912             :   TGeoVolume* voRB26s3Compensator  =  
    1913           0 :     new TGeoVolume("RB26s3Compensator", shRB26s3Compensator, kMedVac);
    1914             :             
    1915             :   //
    1916             :   // [Pos 1] Bellow
    1917             :   //      
    1918             :   //
    1919           0 :   TGeoVolume* voRB26s3Bellow = new TGeoVolume("RB26s3Bellow", 
    1920           0 :                                               new TGeoTube(kRB26s3BellowRi, kRB26s3BellowRo, kRB26s3BellowUndL/2.), kMedVac);
    1921             :   //      
    1922             :   //  Upper part of the undulation
    1923             :   //
    1924           0 :   TGeoTorus* shRB26s3PlieTorusU  =  new TGeoTorus(kRB26s3BellowRo - kRB26s3PlieR, kRB26s3PlieR - kRB26s3PlieThickness, kRB26s3PlieR);
    1925           0 :   shRB26s3PlieTorusU->SetName("RB26s3TorusU");
    1926           0 :   TGeoTube*  shRB26s3PlieTubeU   =  new TGeoTube (kRB26s3BellowRo - kRB26s3PlieR, kRB26s3BellowRo, kRB26s3PlieR);
    1927           0 :   shRB26s3PlieTubeU->SetName("RB26s3TubeU");
    1928           0 :   TGeoCompositeShape*  shRB26s3UpperPlie = new TGeoCompositeShape("RB26s3UpperPlie", "RB26s3TorusU*RB26s3TubeU");
    1929             :  
    1930           0 :   TGeoVolume* voRB26s3WiggleU = new TGeoVolume("RB26s3UpperPlie", shRB26s3UpperPlie, kMedSteel);
    1931             :   //
    1932             :   // Lower part of the undulation
    1933           0 :   TGeoTorus* shRB26s3PlieTorusL =  new TGeoTorus(kRB26s3BellowRi + kRB26s3PlieR, kRB26s3PlieR - kRB26s3PlieThickness, kRB26s3PlieR);
    1934           0 :   shRB26s3PlieTorusL->SetName("RB26s3TorusL");
    1935           0 :   TGeoTube*  shRB26s3PlieTubeL   =  new TGeoTube (kRB26s3BellowRi, kRB26s3BellowRi + kRB26s3PlieR, kRB26s3PlieR);
    1936           0 :   shRB26s3PlieTubeL->SetName("RB26s3TubeL");
    1937           0 :   TGeoCompositeShape*  shRB26s3LowerPlie = new TGeoCompositeShape("RB26s3LowerPlie", "RB26s3TorusL*RB26s3TubeL");
    1938             :       
    1939           0 :   TGeoVolume* voRB26s3WiggleL = new TGeoVolume("RB26s3LowerPlie", shRB26s3LowerPlie, kMedSteel); 
    1940             : 
    1941             :   //
    1942             :   // Connection between upper and lower part of undulation
    1943           0 :   TGeoVolume* voRB26s3WiggleC1 = new TGeoVolume("RB26s3PlieConn1",  
    1944           0 :                                                 new TGeoTube(kRB26s3BellowRi + kRB26s3PlieR, 
    1945             :                                                              kRB26s3BellowRo - kRB26s3PlieR, kRB26s3PlieThickness / 2.), kMedSteel);
    1946             :   //
    1947             :   // One wiggle
    1948           0 :   TGeoVolumeAssembly* voRB26s3Wiggle = new TGeoVolumeAssembly("RB26s3Wiggle");
    1949             :   z0 =  -  kRB26s3PlieThickness / 2.;
    1950           0 :   voRB26s3Wiggle->AddNode(voRB26s3WiggleC1,  1 , new TGeoTranslation(0., 0., z0));
    1951             :   z0 += kRB26s3PlieR -  kRB26s3PlieThickness / 2.;
    1952           0 :   voRB26s3Wiggle->AddNode(voRB26s3WiggleU,   1 , new TGeoTranslation(0., 0., z0));
    1953             :   z0 += kRB26s3PlieR -  kRB26s3PlieThickness / 2.;
    1954           0 :   voRB26s3Wiggle->AddNode(voRB26s3WiggleC1,  2 , new TGeoTranslation(0., 0., z0));
    1955             :   z0 += kRB26s3PlieR -  kRB26s3PlieThickness;
    1956           0 :   voRB26s3Wiggle->AddNode(voRB26s3WiggleL,  1 , new TGeoTranslation(0., 0., z0));
    1957             :   // Positioning of the volumes
    1958             :   z0   = - kRB26s3BellowUndL/2.+ kRB26s3ConnectionPlieR;
    1959           0 :   voRB26s3Bellow->AddNode(voRB26s3WiggleL, 1, new TGeoTranslation(0., 0., z0));
    1960             :   z0  +=  kRB26s3ConnectionPlieR;
    1961             :   zsh  = 4. *  kRB26s3PlieR -  2. * kRB26s3PlieThickness;
    1962           0 :   for (Int_t iw = 0; iw < kRB26s3NumberOfPlies; iw++) {
    1963           0 :     Float_t zpos =  z0 + iw * zsh;      
    1964           0 :     voRB26s3Bellow->AddNode(voRB26s3Wiggle,  iw + 1, new TGeoTranslation(0., 0., zpos -  kRB26s3PlieThickness));     
    1965             :   }
    1966             : 
    1967           0 :   voRB26s3Compensator->AddNode(voRB26s3Bellow, 1,  new TGeoTranslation(0., 0., kRB26s3WeldingTubeLeftL + kRB26s3BellowUndL/2.));
    1968             : 
    1969             : 
    1970             :   //
    1971             :   // [Pos 2] Outer Protecting Tube
    1972             :   //      
    1973           0 :   TGeoTube* shRB26s3CompProtTube = new TGeoTube(kRB26s3RingOuterR, kRB26s3ProtOuterR, kRB26s3ProtL);
    1974             :   TGeoVolume* voRB26s3CompProtTube =  
    1975           0 :     new TGeoVolume("RB26s3CompProtTube", shRB26s3CompProtTube, kMedSteel);
    1976           0 :   voRB26s3Compensator->AddNode(voRB26s3CompProtTube, 1,  new TGeoTranslation(0., 0., kRB26s3ProtZ + kRB26s3ProtL));
    1977             :       
    1978             : 
    1979             :   //
    1980             :   // [Pos 3] Right Welding Tube
    1981             :   //      
    1982           0 :   TGeoPcon* shRB26s3CompRightTube = new TGeoPcon(0., 360., 5);
    1983             :   z0 = 0.;
    1984           0 :   shRB26s3CompRightTube->DefineSection(0, z0,  kRB26s3CompTubeInnerR3, kRB26s3CompTubeOuterR3);
    1985             :   z0 += kRB26s3WeldingTubeT2;
    1986           0 :   shRB26s3CompRightTube->DefineSection(1, z0,  kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
    1987             :   z0 += kRB26s3WeldingTubeRightL2;
    1988           0 :   shRB26s3CompRightTube->DefineSection(2, z0,  kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
    1989             :   z0 += kRB26s3WeldingTubeT1;
    1990           0 :   shRB26s3CompRightTube->DefineSection(3, z0,  kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
    1991             :   z0 += kRB26s3WeldingTubeRightL1;
    1992           0 :   shRB26s3CompRightTube->DefineSection(4, z0,  kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
    1993             :       
    1994             :   TGeoVolume* voRB26s3CompRightTube =  
    1995           0 :     new TGeoVolume("RB26s3CompRightTube", shRB26s3CompRightTube, kMedSteel);
    1996           0 :   voRB26s3Compensator->AddNode(voRB26s3CompRightTube,  1, new TGeoTranslation(0., 0.,  kRB26s3CompL - z0));
    1997             : 
    1998             :   //
    1999             :   // [Pos 4] Left Welding Tube
    2000             :   //      
    2001           0 :   TGeoPcon* shRB26s3CompLeftTube = new TGeoPcon(0., 360., 5);
    2002             :   z0 = 0.;
    2003           0 :   shRB26s3CompLeftTube->DefineSection(0, z0,  kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
    2004             :   z0 += kRB26s3WeldingTubeLeftL1;
    2005           0 :   shRB26s3CompLeftTube->DefineSection(1, z0,  kRB26s3CompTubeInnerR1, kRB26s3CompTubeOuterR1);
    2006             :   z0 += kRB26s3WeldingTubeT1;
    2007           0 :   shRB26s3CompLeftTube->DefineSection(2, z0,  kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
    2008             :   z0 += kRB26s3WeldingTubeLeftL2;
    2009           0 :   shRB26s3CompLeftTube->DefineSection(3, z0,  kRB26s3CompTubeInnerR2, kRB26s3CompTubeOuterR2);
    2010             :   z0 += kRB26s3WeldingTubeT2;
    2011           0 :   shRB26s3CompLeftTube->DefineSection(4, z0,  kRB26s3CompTubeInnerR3, kRB26s3CompTubeOuterR3);
    2012             : 
    2013             :   TGeoVolume* voRB26s3CompLeftTube =  
    2014           0 :     new TGeoVolume("RB26s3CompLeftTube", shRB26s3CompLeftTube, kMedSteel);
    2015           0 :   voRB26s3Compensator->AddNode(voRB26s3CompLeftTube, 1,  gGeoIdentity);
    2016             :   //
    2017             :   // [Pos 5] Ring
    2018             :   //      
    2019           0 :   TGeoTube* shRB26s3CompRing = new TGeoTube(kRB26s3CompTubeOuterR2, kRB26s3RingOuterR, kRB26s3RingL);
    2020             :   TGeoVolume* voRB26s3CompRing =  
    2021           0 :     new TGeoVolume("RB26s3CompRing", shRB26s3CompRing, kMedSteel);
    2022           0 :   voRB26s3Compensator->AddNode(voRB26s3CompRing,  1, new TGeoTranslation(0., 0., kRB26s3RingZ + kRB26s3RingL));
    2023             : 
    2024             : 
    2025             : 
    2026             :   ///////////////////////////////////////////
    2027             :   //                                       //
    2028             :   //    RB26/4-5                           //  
    2029             :   //    Drawing LHCV2a_0012 [as installed] //
    2030             :   ////////////////////////////////////////////
    2031             :   //    Pos1 Vacuum Tubes        LHCVC2A__0014
    2032             :   //    Pos2 Compensator         LHCVC2A__0066
    2033             :   //    Pos3 Fixed Point Section LHCVC2A__0016
    2034             :   //    Pos4 Split Flange        LHCVFX___0005
    2035             :   //    Pos5 RotableFlange       LHCVFX___0009
    2036             :   ////////////////////////////////////////////
    2037             : 
    2038             :   ///////////////////////////////////
    2039             :   //    RB26/4-5 Vacuum Tubes      //
    2040             :   //    Drawing  LHCVC2a_0014      //
    2041             :   /////////////////////////////////// 
    2042             :   const Float_t kRB26s45TubeL = 593.12 + 0.3; // 0.3 cm added for welding
    2043             :       
    2044           0 :   TGeoPcon* shRB26s45Tube = new TGeoPcon(0., 360., 11);
    2045             :   // Section 1: straight section
    2046           0 :   shRB26s45Tube->DefineSection( 0,   0.00, 30.00/2., 30.60/2.);
    2047           0 :   shRB26s45Tube->DefineSection( 1,   1.20, 30.00/2., 30.60/2.);
    2048           0 :   shRB26s45Tube->DefineSection( 2,   1.20, 30.00/2., 30.80/2.);
    2049           0 :   shRB26s45Tube->DefineSection( 3,  25.10, 30.00/2., 30.80/2.);      
    2050             :   // Section 2: 0.932 deg opening cone
    2051           0 :   shRB26s45Tube->DefineSection( 4, 486.10, 45.00/2., 45.80/2.);      
    2052             :   // Section 3: straight section 4 mm 
    2053           0 :   shRB26s45Tube->DefineSection( 5, 512.10, 45.00/2., 45.80/2.);
    2054             :   // Section 4: straight section 3 mm
    2055           0 :   shRB26s45Tube->DefineSection( 6, 512.10, 45.00/2., 45.60/2.);
    2056           0 :   shRB26s45Tube->DefineSection( 7, 527.70, 45.00/2., 45.60/2.);
    2057             :   // Section 4: closing cone 
    2058           0 :   shRB26s45Tube->DefineSection( 8, 591.30, 10.00/2., 10.60/2.);      
    2059           0 :   shRB26s45Tube->DefineSection( 9, 591.89, 10.00/2., 10.30/2.);      
    2060             : 
    2061           0 :   shRB26s45Tube->DefineSection(10, kRB26s45TubeL, 10.00/2., 10.30/2.);      
    2062             :   TGeoVolume* voRB26s45Tube  =  
    2063           0 :     new TGeoVolume("RB26s45Tube", shRB26s45Tube, kMedSteel);
    2064             : 
    2065           0 :   TGeoVolume* voRB26s45TubeM  = new TGeoVolume("RB26s45TubeM", MakeMotherFromTemplate(shRB26s45Tube), kMedVac);
    2066           0 :   voRB26s45TubeM->AddNode(voRB26s45Tube, 1, gGeoIdentity);
    2067             :             
    2068             :       
    2069             : 
    2070             :   ///////////////////////////////////
    2071             :   //    RB26/5   Axial Compensator //
    2072             :   //    Drawing  LHCVC2a_0066      //
    2073             :   /////////////////////////////////// 
    2074             :   const Float_t kRB26s5CompL             = 27.60;    // Length of the compensator (0.30 cm added for welding)
    2075             :   const Float_t kRB26s5BellowRo          = 12.48/2.; // Bellow outer radius        [Pos 1]
    2076             :   const Float_t kRB26s5BellowRi          = 10.32/2.; // Bellow inner radius        [Pos 1] 
    2077             :   const Int_t   kRB26s5NumberOfPlies     = 15;       // Number of plies            [Pos 1] 
    2078             :   const Float_t kRB26s5BellowUndL        = 10.50;    // Length of undulated region [Pos 1] 
    2079             :   const Float_t kRB26s5PlieThickness     =  0.025;   // Plie thickness             [Pos 1]
    2080             :   const Float_t kRB26s5ConnectionPlieR   =  0.21;    // Connection plie radius     [Pos 1] 
    2081             :   const Float_t kRB26s5ConnectionR       = 11.2/2.;  // Bellow connection radius   [Pos 1] 
    2082             :   //  Plie radius
    2083             :   const Float_t kRB26s5PlieR = 
    2084             :     (kRB26s5BellowUndL - 4. *  kRB26s5ConnectionPlieR + 2. * kRB26s5PlieThickness + 
    2085             :      (2. *  kRB26s5NumberOfPlies - 2.) * kRB26s5PlieThickness) / (4. * kRB26s5NumberOfPlies - 2.);
    2086             :   const Float_t kRB26s5CompTubeInnerR    = 10.00/2.;  // Connection tubes inner radius     [Pos 2 + 3]
    2087             :   const Float_t kRB26s5CompTubeOuterR    = 10.30/2.;  // Connection tubes outer radius     [Pos 2 + 3]
    2088             :   const Float_t kRB26s5WeldingTubeLeftL  =  3.70/2.;  // Left connection tube half length  [Pos 2]
    2089             :   const Float_t kRB26s5WeldingTubeRightL = 13.40/2.;  // Right connection tube half length [Pos 3]   (0.3 cm added for welding)
    2090             :   const Float_t kRB26s5RingInnerR        = 11.2/2.;   // Ring inner radius                 [Pos 4]
    2091             :   const Float_t kRB26s5RingOuterR        = 16.0/2.;   // Ring inner radius                 [Pos 4]
    2092             :   const Float_t kRB26s5RingL             =  0.4/2.;   // Ring half length                  [Pos 4]
    2093             :   const Float_t kRB26s5RingZ             = 14.97;     // Ring z-position                   [Pos 4]
    2094             :   const Float_t kRB26s5ProtOuterR        = 16.2/2.;   // Protection tube outer radius      [Pos 5]
    2095             :   const Float_t kRB26s5ProtL             = 13.0/2.;   // Protection tube half length       [Pos 5]
    2096             :   const Float_t kRB26s5ProtZ             =  2.17;     // Protection tube z-position        [Pos 5]
    2097             :   const Float_t kRB26s5DetailZR          = 11.3/2.;   // Detail Z max radius
    2098             :       
    2099             :       
    2100             :   // Mother volume
    2101             :   //
    2102           0 :   TGeoPcon* shRB26s5Compensator  = new TGeoPcon(0., 360., 8);
    2103           0 :   shRB26s5Compensator->DefineSection( 0,   0.0,                                                  0., kRB26s5CompTubeOuterR);
    2104           0 :   shRB26s5Compensator->DefineSection( 1,   kRB26s5ProtZ,                                         0., kRB26s5CompTubeOuterR);      
    2105           0 :   shRB26s5Compensator->DefineSection( 2,   kRB26s5ProtZ,                                         0., kRB26s5ProtOuterR);
    2106           0 :   shRB26s5Compensator->DefineSection( 3,   kRB26s5ProtZ + 2. * kRB26s5ProtL + 2. * kRB26s5RingL, 0., kRB26s5ProtOuterR);      
    2107           0 :   shRB26s5Compensator->DefineSection( 4,   kRB26s5ProtZ + 2. * kRB26s5ProtL + 2. * kRB26s5RingL, 0., kRB26s5DetailZR);
    2108           0 :   shRB26s5Compensator->DefineSection( 5,   kRB26s5CompL - 8.,                                    0., kRB26s5DetailZR);
    2109           0 :   shRB26s5Compensator->DefineSection( 6,   kRB26s5CompL - 8.,                                    0., kRB26s5CompTubeOuterR);            
    2110           0 :   shRB26s5Compensator->DefineSection( 7,   kRB26s5CompL,                                         0., kRB26s5CompTubeOuterR);            
    2111           0 :   TGeoVolume* voRB26s5Compensator  = new TGeoVolume("RB26s5Compensator", shRB26s5Compensator, kMedVac);
    2112             :             
    2113             :   //
    2114             :   // [Pos 1] Bellow
    2115             :   //      
    2116             :   //
    2117           0 :   TGeoVolume* voRB26s5Bellow = new TGeoVolume("RB26s5Bellow", 
    2118           0 :                                               new TGeoTube(kRB26s5BellowRi, kRB26s5BellowRo, kRB26s5BellowUndL/2.), kMedVac);
    2119             :   //      
    2120             :   //  Upper part of the undulation
    2121             :   //
    2122           0 :   TGeoTorus* shRB26s5PlieTorusU  =  new TGeoTorus(kRB26s5BellowRo - kRB26s5PlieR, kRB26s5PlieR - kRB26s5PlieThickness, kRB26s5PlieR);
    2123           0 :   shRB26s5PlieTorusU->SetName("RB26s5TorusU");
    2124           0 :   TGeoTube*  shRB26s5PlieTubeU   =  new TGeoTube (kRB26s5BellowRo - kRB26s5PlieR, kRB26s5BellowRo, kRB26s5PlieR);
    2125           0 :   shRB26s5PlieTubeU->SetName("RB26s5TubeU");
    2126           0 :   TGeoCompositeShape*  shRB26s5UpperPlie = new TGeoCompositeShape("RB26s5UpperPlie", "RB26s5TorusU*RB26s5TubeU");
    2127             :  
    2128           0 :   TGeoVolume* voRB26s5WiggleU = new TGeoVolume("RB26s5UpperPlie", shRB26s5UpperPlie, kMedSteel);
    2129             :   //
    2130             :   // Lower part of the undulation
    2131           0 :   TGeoTorus* shRB26s5PlieTorusL =  new TGeoTorus(kRB26s5BellowRi + kRB26s5PlieR, kRB26s5PlieR - kRB26s5PlieThickness, kRB26s5PlieR);
    2132           0 :   shRB26s5PlieTorusL->SetName("RB26s5TorusL");
    2133           0 :   TGeoTube*  shRB26s5PlieTubeL   =  new TGeoTube (kRB26s5BellowRi, kRB26s5BellowRi + kRB26s5PlieR, kRB26s5PlieR);
    2134           0 :   shRB26s5PlieTubeL->SetName("RB26s5TubeL");
    2135           0 :   TGeoCompositeShape*  shRB26s5LowerPlie = new TGeoCompositeShape("RB26s5LowerPlie", "RB26s5TorusL*RB26s5TubeL");
    2136             :       
    2137           0 :   TGeoVolume* voRB26s5WiggleL = new TGeoVolume("RB26s5LowerPlie", shRB26s5LowerPlie, kMedSteel); 
    2138             : 
    2139             :   //
    2140             :   // Connection between upper and lower part of undulation
    2141           0 :   TGeoVolume* voRB26s5WiggleC1 = new TGeoVolume("RB26s5PlieConn1",  
    2142           0 :                                                 new TGeoTube(kRB26s5BellowRi + kRB26s5PlieR, 
    2143             :                                                              kRB26s5BellowRo - kRB26s5PlieR, kRB26s5PlieThickness / 2.), kMedSteel);
    2144             :   //
    2145             :   // One wiggle
    2146           0 :   TGeoVolumeAssembly* voRB26s5Wiggle = new TGeoVolumeAssembly("RB26s5Wiggle");
    2147             :   z0 =  -  kRB26s5PlieThickness / 2.;
    2148           0 :   voRB26s5Wiggle->AddNode(voRB26s5WiggleC1,  1 , new TGeoTranslation(0., 0., z0));
    2149             :   z0 += kRB26s5PlieR -  kRB26s5PlieThickness / 2.;
    2150           0 :   voRB26s5Wiggle->AddNode(voRB26s5WiggleU,   1 , new TGeoTranslation(0., 0., z0));
    2151             :   z0 += kRB26s5PlieR -  kRB26s5PlieThickness / 2.;
    2152           0 :   voRB26s5Wiggle->AddNode(voRB26s5WiggleC1,  2 , new TGeoTranslation(0., 0., z0));
    2153             :   z0 += kRB26s5PlieR -  kRB26s5PlieThickness;
    2154           0 :   voRB26s5Wiggle->AddNode(voRB26s5WiggleL ,  1 , new TGeoTranslation(0., 0., z0));
    2155             :   // Positioning of the volumes
    2156             :   z0   = - kRB26s5BellowUndL/2.+ kRB26s5ConnectionPlieR;
    2157           0 :   voRB26s5Bellow->AddNode(voRB26s5WiggleL, 1, new TGeoTranslation(0., 0., z0));
    2158             :   z0  +=  kRB26s5ConnectionPlieR;
    2159             :   zsh  = 4. *  kRB26s5PlieR -  2. * kRB26s5PlieThickness;
    2160           0 :   for (Int_t iw = 0; iw < kRB26s5NumberOfPlies; iw++) {
    2161           0 :     Float_t zpos =  z0 + iw * zsh;      
    2162           0 :     voRB26s5Bellow->AddNode(voRB26s5Wiggle,  iw + 1, new TGeoTranslation(0., 0., zpos -  kRB26s5PlieThickness));     
    2163             :   }
    2164             : 
    2165           0 :   voRB26s5Compensator->AddNode(voRB26s5Bellow, 1,  new TGeoTranslation(0., 0., 2. * kRB26s5WeldingTubeLeftL + kRB26s5BellowUndL/2.));
    2166             :       
    2167             :   //
    2168             :   // [Pos 2] Left Welding Tube
    2169             :   //      
    2170           0 :   TGeoPcon* shRB26s5CompLeftTube = new TGeoPcon(0., 360., 3);
    2171             :   z0 = 0;
    2172           0 :   shRB26s5CompLeftTube->DefineSection(0, z0, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
    2173             :   z0 += 2 * kRB26s5WeldingTubeLeftL - ( kRB26s5ConnectionR - kRB26s5CompTubeOuterR);
    2174           0 :   shRB26s5CompLeftTube->DefineSection(1, z0, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
    2175             :   z0 += ( kRB26s5ConnectionR - kRB26s5CompTubeOuterR);
    2176           0 :   shRB26s5CompLeftTube->DefineSection(2, z0, kRB26s5ConnectionR - 0.15, kRB26s5ConnectionR);
    2177           0 :   TGeoVolume* voRB26s5CompLeftTube = new TGeoVolume("RB26s5CompLeftTube", shRB26s5CompLeftTube, kMedSteel);
    2178           0 :   voRB26s5Compensator->AddNode(voRB26s5CompLeftTube, 1,  gGeoIdentity);
    2179             :   //
    2180             :   // [Pos 3] Right Welding Tube
    2181             :   //      
    2182           0 :   TGeoPcon* shRB26s5CompRightTube = new TGeoPcon(0., 360., 11);
    2183             :   // Detail Z
    2184           0 :   shRB26s5CompRightTube->DefineSection( 0, 0.  , kRB26s5CompTubeInnerR + 0.22, 11.2/2.);
    2185           0 :   shRB26s5CompRightTube->DefineSection( 1, 0.05, kRB26s5CompTubeInnerR + 0.18, 11.2/2.);
    2186           0 :   shRB26s5CompRightTube->DefineSection( 2, 0.22, kRB26s5CompTubeInnerR       , 11.2/2. - 0.22);
    2187           0 :   shRB26s5CompRightTube->DefineSection( 3, 0.44, kRB26s5CompTubeInnerR       , 11.2/2.);
    2188           0 :   shRB26s5CompRightTube->DefineSection( 4, 1.70, kRB26s5CompTubeInnerR       , 11.2/2.);
    2189           0 :   shRB26s5CompRightTube->DefineSection( 5, 2.10, kRB26s5CompTubeInnerR       , kRB26s5CompTubeOuterR);
    2190           0 :   shRB26s5CompRightTube->DefineSection( 6, 2.80, kRB26s5CompTubeInnerR       , kRB26s5CompTubeOuterR);
    2191           0 :   shRB26s5CompRightTube->DefineSection( 7, 2.80, kRB26s5CompTubeInnerR       , 11.3/2.);
    2192           0 :   shRB26s5CompRightTube->DefineSection( 8, 3.40, kRB26s5CompTubeInnerR       , 11.3/2.);
    2193             :   // Normal pipe
    2194           0 :   shRB26s5CompRightTube->DefineSection( 9, 3.50, kRB26s5CompTubeInnerR       , kRB26s5CompTubeOuterR);
    2195           0 :   shRB26s5CompRightTube->DefineSection(10, 2. * kRB26s5WeldingTubeRightL, kRB26s5CompTubeInnerR, kRB26s5CompTubeOuterR);
    2196             :       
    2197             :   TGeoVolume* voRB26s5CompRightTube =  
    2198           0 :     new TGeoVolume("RB26s5CompRightTube", shRB26s5CompRightTube, kMedSteel);
    2199           0 :   voRB26s5Compensator->AddNode(voRB26s5CompRightTube,  1, 
    2200           0 :                                new TGeoTranslation(0., 0.,  kRB26s5CompL - 2. * kRB26s5WeldingTubeRightL));
    2201             :   //
    2202             :   // [Pos 4] Ring
    2203             :   //      
    2204           0 :   TGeoTube* shRB26s5CompRing = new TGeoTube(kRB26s5RingInnerR, kRB26s5RingOuterR, kRB26s5RingL);
    2205             :   TGeoVolume* voRB26s5CompRing =  
    2206           0 :     new TGeoVolume("RB26s5CompRing", shRB26s5CompRing, kMedSteel);
    2207           0 :   voRB26s5Compensator->AddNode(voRB26s5CompRing,  1, new TGeoTranslation(0., 0., kRB26s5RingZ + kRB26s5RingL));
    2208             : 
    2209             :   //
    2210             :   // [Pos 5] Outer Protecting Tube
    2211             :   //      
    2212           0 :   TGeoTube* shRB26s5CompProtTube = new TGeoTube(kRB26s5RingOuterR, kRB26s5ProtOuterR, kRB26s5ProtL);
    2213             :   TGeoVolume* voRB26s5CompProtTube =  
    2214           0 :     new TGeoVolume("RB26s5CompProtTube", shRB26s5CompProtTube, kMedSteel);
    2215           0 :   voRB26s5Compensator->AddNode(voRB26s5CompProtTube, 1,  new TGeoTranslation(0., 0., kRB26s5ProtZ + kRB26s5ProtL));
    2216             : 
    2217             :   ///////////////////////////////////////
    2218             :   //    RB26/4   Fixed Point Section   //
    2219             :   //    Drawing  LHCVC2a_0016          //
    2220             :   /////////////////////////////////////// 
    2221             :   const Float_t kRB26s4TubeRi            =  30.30/2. ; // Tube inner radius  (0.3 cm added for welding)
    2222             :   const Float_t kRB26s4TubeRo            =  30.60/2. ; // Tube outer radius      
    2223             :   const Float_t kRB26s4FixedPointL       =  12.63    ; // Length of the fixed point section
    2224             :   const Float_t kRB26s4FixedPointZ       =  10.53    ; // Position of the ring (0.15 added for welding)
    2225             :   const Float_t kRB26s4FixedPointD       =   0.595   ; // Width of the ring
    2226             :   const Float_t kRB26s4FixedPointR       =  31.60/2. ; // Radius of the ring
    2227             :       
    2228           0 :   TGeoPcon* shRB26s4FixedPoint = new TGeoPcon(0., 360., 6);
    2229             :   z0 = 0.;
    2230           0 :   shRB26s4FixedPoint->DefineSection(0, z0, kRB26s4TubeRi, kRB26s4TubeRo);
    2231             :   z0 += kRB26s4FixedPointZ;
    2232           0 :   shRB26s4FixedPoint->DefineSection(1, z0, kRB26s4TubeRi, kRB26s4TubeRo);      
    2233           0 :   shRB26s4FixedPoint->DefineSection(2, z0, kRB26s4TubeRi, kRB26s4FixedPointR);         
    2234             :   z0 += kRB26s4FixedPointD;
    2235           0 :   shRB26s4FixedPoint->DefineSection(3, z0, kRB26s4TubeRi, kRB26s4FixedPointR);         
    2236           0 :   shRB26s4FixedPoint->DefineSection(4, z0, kRB26s4TubeRi, kRB26s4TubeRo);
    2237             :   z0 = kRB26s4FixedPointL;
    2238           0 :   shRB26s4FixedPoint->DefineSection(5, z0, kRB26s4TubeRi, kRB26s4TubeRo);
    2239           0 :   TGeoVolume* voRB26s4FixedPoint = new TGeoVolume("RB26s4FixedPoint", shRB26s4FixedPoint, kMedSteel);
    2240             :       
    2241           0 :   TGeoVolume* voRB26s4FixedPointM = new TGeoVolume("RB26s4FixedPointM", MakeMotherFromTemplate(shRB26s4FixedPoint), kMedVac);
    2242           0 :   voRB26s4FixedPointM->AddNode(voRB26s4FixedPoint, 1, gGeoIdentity);
    2243             :             
    2244             : 
    2245             :   ///////////////////////////////////////
    2246             :   //    RB26/4   Split Flange          //
    2247             :   //    Drawing  LHCVFX__0005          //
    2248             :   /////////////////////////////////////// 
    2249             :   const Float_t kRB26s4SFlangeL      =  2.99;        // Length of the flange
    2250             :   const Float_t kRB26s4SFlangeD1     =  0.85;        // Length of section 1
    2251             :   const Float_t kRB26s4SFlangeD2     =  0.36;        // Length of section 2                                                  
    2252             :   const Float_t kRB26s4SFlangeD3     =  0.73 + 1.05; // Length of section 3                                                        
    2253             :   const Float_t kRB26s4SFlangeRo     = 36.20/2.;     // Flange outer radius 
    2254             :   const Float_t kRB26s4SFlangeRi1    = 30.60/2.;     // Flange inner radius section 1
    2255             :   const Float_t kRB26s4SFlangeRi2    = 30.00/2.;     // Flange inner radius section 2
    2256             :   const Float_t kRB26s4SFlangeRi3    = 30.60/2.;     // Flange inner radius section 3
    2257             :   z0 = 0;
    2258           0 :   TGeoPcon* shRB26s4SFlange = new TGeoPcon(0., 360., 6);
    2259             :   z0 = 0.;
    2260           0 :   shRB26s4SFlange->DefineSection(0, z0, kRB26s4SFlangeRi1, kRB26s4SFlangeRo);
    2261             :   z0 += kRB26s4SFlangeD1;
    2262           0 :   shRB26s4SFlange->DefineSection(1, z0, kRB26s4SFlangeRi1, kRB26s4SFlangeRo);
    2263           0 :   shRB26s4SFlange->DefineSection(2, z0, kRB26s4SFlangeRi2, kRB26s4SFlangeRo);
    2264             :   z0 += kRB26s4SFlangeD2;
    2265           0 :   shRB26s4SFlange->DefineSection(3, z0, kRB26s4SFlangeRi2, kRB26s4SFlangeRo);
    2266           0 :   shRB26s4SFlange->DefineSection(4, z0, kRB26s4SFlangeRi3, kRB26s4SFlangeRo);
    2267             :   z0 += kRB26s4SFlangeD3;
    2268           0 :   shRB26s4SFlange->DefineSection(5, z0, kRB26s4SFlangeRi3, kRB26s4SFlangeRo);
    2269           0 :   TGeoVolume* voRB26s4SFlange = new TGeoVolume("RB26s4SFlange", shRB26s4SFlange, kMedSteel);
    2270             : 
    2271           0 :   TGeoVolume* voRB26s4SFlangeM = new TGeoVolume("RB26s4SFlangeM", MakeMotherFromTemplate(shRB26s4SFlange, 0, 3), kMedVac);
    2272           0 :   voRB26s4SFlangeM->AddNode(voRB26s4SFlange, 1, gGeoIdentity);
    2273             :       
    2274             :   ///////////////////////////////////////
    2275             :   //    RB26/5   Rotable Flange        //
    2276             :   //    Drawing  LHCVFX__0009          //
    2277             :   /////////////////////////////////////// 
    2278             :   const Float_t kRB26s5RFlangeL      =  1.86;    // Length of the flange
    2279             :   const Float_t kRB26s5RFlangeD1     =  0.61;    // Length of section 1
    2280             :   const Float_t kRB26s5RFlangeD2     =  0.15;    // Length of section 2                                              
    2281             :   const Float_t kRB26s5RFlangeD3     =  0.60;    // Length of section 3                                                    
    2282             :   const Float_t kRB26s5RFlangeD4     =  0.50;    // Length of section 4                                                    
    2283             :   const Float_t kRB26s5RFlangeRo     = 15.20/2.; // Flange outer radius 
    2284             :   const Float_t kRB26s5RFlangeRi1    = 10.30/2.; // Flange inner radius section 1
    2285             :   const Float_t kRB26s5RFlangeRi2    = 10.00/2.; // Flange inner radius section 2
    2286             :   const Float_t kRB26s5RFlangeRi3    = 10.30/2.; // Flange inner radius section 3
    2287             :   const Float_t kRB26s5RFlangeRi4    = 10.50/2.; // Flange inner radius section 4
    2288             : 
    2289             :   z0 = 0;
    2290           0 :   TGeoPcon* shRB26s5RFlange = new TGeoPcon(0., 360., 8);
    2291             :   z0 = 0.;
    2292           0 :   shRB26s5RFlange->DefineSection(0, z0, kRB26s5RFlangeRi4, kRB26s5RFlangeRo);
    2293             :   z0 += kRB26s5RFlangeD4;
    2294           0 :   shRB26s5RFlange->DefineSection(1, z0, kRB26s5RFlangeRi4, kRB26s5RFlangeRo);
    2295           0 :   shRB26s5RFlange->DefineSection(2, z0, kRB26s5RFlangeRi3, kRB26s5RFlangeRo);
    2296             :   z0 += kRB26s5RFlangeD3;
    2297           0 :   shRB26s5RFlange->DefineSection(3, z0, kRB26s5RFlangeRi3, kRB26s5RFlangeRo);
    2298           0 :   shRB26s5RFlange->DefineSection(4, z0, kRB26s5RFlangeRi2, kRB26s5RFlangeRo);
    2299             :   z0 += kRB26s5RFlangeD2;
    2300           0 :   shRB26s5RFlange->DefineSection(5, z0, kRB26s5RFlangeRi2, kRB26s5RFlangeRo);
    2301           0 :   shRB26s5RFlange->DefineSection(6, z0, kRB26s5RFlangeRi1, kRB26s5RFlangeRo);
    2302             :   z0 += kRB26s5RFlangeD1;
    2303           0 :   shRB26s5RFlange->DefineSection(7, z0, kRB26s5RFlangeRi1, kRB26s5RFlangeRo);
    2304           0 :   TGeoVolume* voRB26s5RFlange = new TGeoVolume("RB26s5RFlange", shRB26s5RFlange, kMedSteel);
    2305             : 
    2306           0 :   TGeoVolume* voRB26s5RFlangeM = new TGeoVolume("RB26s5RFlangeM", MakeMotherFromTemplate(shRB26s5RFlange, 4, 7), kMedVac);
    2307           0 :   voRB26s5RFlangeM->AddNode(voRB26s5RFlange, 1, gGeoIdentity);
    2308             : 
    2309             :   //      
    2310             :   // Assemble RB26/1-2
    2311             :   //
    2312           0 :   TGeoVolumeAssembly* asRB26s12 = new TGeoVolumeAssembly("RB26s12"); 
    2313             :   z0 = 0.;
    2314           0 :   asRB26s12->AddNode(voRB26s1RFlange,       1, gGeoIdentity);
    2315             :   z0 += kRB26s1RFlangeIsL + kRB26s1RFlangeFpL;
    2316           0 :   asRB26s12->AddNode(voRB26s12TubeM,         1, new TGeoTranslation(0., 0., z0));
    2317             :   z0 += kRB26s12TubeL;
    2318           0 :   asRB26s12->AddNode(voRB26s2Compensator,   1, new TGeoTranslation(0., 0., z0));
    2319             :   z0 += kRB26s2CompL;
    2320             :   z0 -= kRB26s2FFlangeD1;
    2321           0 :   asRB26s12->AddNode(voRB26s2FFlangeM,       1, new TGeoTranslation(0., 0., z0));
    2322             :   z0 += kRB26s2FFlangeL;
    2323             :   const Float_t kRB26s12L = z0;
    2324             : 
    2325             :   //
    2326             :   // Assemble RB26/3
    2327             :   //
    2328           0 :   TGeoVolumeAssembly* asRB26s3 = new TGeoVolumeAssembly("RB26s3"); 
    2329             :   z0 = 0.;
    2330           0 :   asRB26s3->AddNode(voRB26s3SFlangeM,      1, gGeoIdentity);
    2331             :   z0 +=  kRB26s3SFlangeL;
    2332             :   z0 -=  kRB26s3SFlangeD3;
    2333           0 :   asRB26s3->AddNode(voRB26s3FixedPointM,   1, new TGeoTranslation(0., 0., z0));
    2334             :   z0 += kRB26s3FixedPointL;
    2335           0 :   asRB26s3->AddNode(voRB26s3TubeM,         1, new TGeoTranslation(0., 0., z0));
    2336             :   z0 += kRB26s3TubeL;
    2337           0 :   asRB26s3->AddNode(voRB26s3Compensator,   1, new TGeoTranslation(0., 0., z0));
    2338             :   z0 += kRB26s3CompL;
    2339             :   z0 -= kRB26s3FFlangeD1;
    2340           0 :   asRB26s3->AddNode(voRB26s3FFlangeM,      1, new TGeoTranslation(0., 0., z0));
    2341             :   z0 += kRB26s3FFlangeL;
    2342             :   const Float_t kRB26s3L = z0;
    2343             :       
    2344             : 
    2345             :   //
    2346             :   // Assemble RB26/4-5
    2347             :   //
    2348           0 :   TGeoVolumeAssembly* asRB26s45 = new TGeoVolumeAssembly("RB26s45"); 
    2349             :   z0 = 0.;
    2350           0 :   asRB26s45->AddNode(voRB26s4SFlangeM,       1, gGeoIdentity);
    2351             :   z0 +=  kRB26s4SFlangeL;
    2352             :   z0 -=  kRB26s4SFlangeD3;
    2353           0 :   asRB26s45->AddNode(voRB26s4FixedPointM,    1, new TGeoTranslation(0., 0., z0));
    2354             :   z0 += kRB26s4FixedPointL;
    2355           0 :   asRB26s45->AddNode(voRB26s45TubeM,         1, new TGeoTranslation(0., 0., z0));
    2356             :   z0 += kRB26s45TubeL;
    2357           0 :   asRB26s45->AddNode(voRB26s5Compensator,    1, new TGeoTranslation(0., 0., z0));
    2358             :   z0 += kRB26s5CompL;
    2359             :   z0 -= kRB26s5RFlangeD3;
    2360             :   z0 -= kRB26s5RFlangeD4;
    2361           0 :   asRB26s45->AddNode(voRB26s5RFlangeM,       1, new TGeoTranslation(0., 0., z0));
    2362             :   z0 += kRB26s5RFlangeL;
    2363             :   const Float_t kRB26s45L = z0;
    2364             :       
    2365             :   //
    2366             :   // Assemble RB26
    2367             :   //
    2368           0 :   TGeoVolumeAssembly* asRB26Pipe = new TGeoVolumeAssembly("RB26Pipe"); 
    2369             :   z0 = 0.;
    2370           0 :   asRB26Pipe->AddNode(asRB26s12,       1, new TGeoTranslation(0., 0., z0));
    2371             :   z0 +=  kRB26s12L;
    2372           0 :   asRB26Pipe->AddNode(asRB26s3,        1, new TGeoTranslation(0., 0., z0));
    2373             :   z0 +=  kRB26s3L;
    2374           0 :   asRB26Pipe->AddNode(asRB26s45,       1, new TGeoTranslation(0., 0., z0));
    2375             :   z0 +=  kRB26s45L;
    2376           0 :   top->AddNode(asRB26Pipe, 1, new TGeoCombiTrans(0., 0., -82., rot180));
    2377           0 : }
    2378             : 
    2379             : 
    2380             : 
    2381             : //___________________________________________
    2382             : void AliPIPEv4::CreateMaterials()
    2383             : {
    2384             :   //
    2385             :   // Define materials for beam pipe
    2386             :   //
    2387             : 
    2388           0 :   AliDebugClass(1,"Create PIPEv4 materials");
    2389           0 :   Int_t   isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
    2390           0 :   Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
    2391             :   // Steel (Inox)  
    2392           0 :   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
    2393           0 :   Float_t zsteel[4] = { 26.,24.,28.,14. };
    2394           0 :   Float_t wsteel[4] = { .715,.18,.1,.005 };
    2395             :   // AlBe - alloy 
    2396           0 :   Float_t aAlBe[2] = { 26.98, 9.01};             // al=2.702 be=1.8477      
    2397           0 :   Float_t zAlBe[2] = { 13.00, 4.00};
    2398           0 :   Float_t wAlBe[2] = { 0.4, 0.6};
    2399             :   //
    2400             :   // Polyamid
    2401           0 :   Float_t aPA[4] = {16., 14., 12.,  1.};
    2402           0 :   Float_t zPA[4] = { 8.,  7.,  6.,  1.};
    2403           0 :   Float_t wPA[4] = { 1.,  1.,  6., 11.};
    2404             :   //
    2405             :   // Polyimide film
    2406           0 :   Float_t aPI[4] = {16., 14., 12.,  1.};
    2407           0 :   Float_t zPI[4] = { 8.,  7.,  6.,  1.};
    2408           0 :   Float_t wPI[4] = { 5.,  2.,  22., 10.};
    2409             :   // Rohacell
    2410           0 :   Float_t aRohacell[4] = {16., 14., 12.,  1.};
    2411           0 :   Float_t zRohacell[4] = { 8.,  7.,  6.,  1.};
    2412           0 :   Float_t wRohacell[4] = { 2.,  1.,  9., 13.};
    2413             :   //
    2414             :   // Air 
    2415             :   //
    2416           0 :   Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
    2417           0 :   Float_t zAir[4]={6.,7.,8.,18.};
    2418           0 :   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
    2419             :   Float_t dAir = 1.20479E-3;
    2420             :   Float_t dAir1 = 1.20479E-11;
    2421             :   //
    2422             :   // Insulation powder
    2423             :   //                    Si         O       Ti     Al
    2424           0 :   Float_t ains[4] ={28.0855, 15.9994, 47.867,  26.982};
    2425           0 :   Float_t zins[4] ={14.,      8.    , 22.   ,  13.   };
    2426           0 :   Float_t wins[4] ={ 0.3019,  0.4887,  0.1914,  0.018};
    2427             :   //
    2428             :   //
    2429             :   // Anticorodal
    2430             :   //
    2431             :   // Al Si7 Mg 0.6
    2432             :   //
    2433           0 :   Float_t aaco[3] ={26.982, 28.0855, 24.035};
    2434           0 :   Float_t zaco[3] ={13.,    14.    , 12.   };
    2435           0 :   Float_t waco[3] ={ 0.924,  0.07,  0.006};
    2436             :   // Kapton
    2437             :   //
    2438           0 :   Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994};
    2439           0 :   Float_t zKapton[4]={1.,6.,7.,8.};
    2440           0 :   Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235};
    2441             :   Float_t dKapton = 1.42;
    2442             :   // NEG coating
    2443             :   //                  Ti     V      Zr
    2444           0 :   Float_t aNEG[4] = {47.87, 50.94, 91.24};
    2445           0 :   Float_t zNEG[4] = {22.00, 23.00, 40.00};
    2446           0 :   Float_t wNEG[4] = {1./3., 1./3., 1./3.};  
    2447             :   Float_t dNEG = 5.6; // ?
    2448             : 
    2449             :   //---------------------------------
    2450             :   // Aluminium AA 5083 for MFT: Al Manganese(Mn) Magnesium(Mg) Chrome(Cr)
    2451           0 :   Float_t aALU5083[4]={26.982, 54.938, 24.305, 51.996};  // Mg pas meme a que la ligne Anticorodal!
    2452           0 :   Float_t zALU5083[4] ={13., 25., 12., 24.};
    2453           0 :   Float_t wALU5083[4] ={0.947, 0.007, 0.044, 0.0015};
    2454             :   // Aluminium AA 2219 for MFT: Al Cu Mn Ti V Zr
    2455           0 :   Float_t aALU2219[6]={26.982, 63.546, 54.938, 47.867, 50.941, 91.224};
    2456           0 :   Float_t zALU2219[6] ={13., 29., 25., 22., 23., 40.};
    2457           0 :   Float_t wALU2219[6] ={0.93, 0.063, 0.003, 0.0006, 0.001, 0.0018};
    2458             :   //---------------------------------
    2459             : 
    2460             :   //
    2461             :   // Silicon for ITS UPGRADE
    2462           0 :   AliMaterial(2,  "SILICON$",28.09 , 14.00 , 2.33 , 9.36 , 45.); 
    2463             : 
    2464             :   //
    2465             :   //     Berillium 
    2466           0 :   AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
    2467             :   //
    2468             :   //     Carbon 
    2469           0 :   AliMaterial(6,  "CARBON$   ", 12.01, 6., 2.265, 18.8, 49.9);
    2470             :   //
    2471             :   //     Aluminum 
    2472           0 :   AliMaterial(9,  "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
    2473             :   //
    2474             :   //     Copper 
    2475           0 :   AliMaterial(10, "COPPER", 63.55, 29, 8.96, 1.43, 85.6/8.96);
    2476             :   //
    2477             :   //     Air 
    2478           0 :   AliMixture(15, "AIR$      ", aAir, zAir, dAir, 4, wAir);
    2479           0 :   AliMixture(35, "AIR_HIGH$ ", aAir, zAir, dAir, 4, wAir);
    2480             :   //
    2481             :   //     Vacuum 
    2482           0 :   AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
    2483             :   //
    2484             :   //     stainless Steel 
    2485           0 :   AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
    2486             :   //
    2487             :   //     reduced density steel to approximate pump getter material
    2488           0 :   AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
    2489             :   //     Al-Be alloy
    2490             :   //     
    2491           0 :   AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe); 
    2492             :   //     Polyamid
    2493             :   //   
    2494           0 :   AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA);
    2495             :   //
    2496             :   //     Kapton
    2497           0 :   AliMixture(23, "KAPTON", aKapton, zKapton, dKapton, 4, wKapton);
    2498             :   // Anticorodal 
    2499           0 :   AliMixture(24, "ANTICORODAL", aaco, zaco, 2.66, 3, waco);
    2500             :   
    2501             :   //
    2502             :   //     Insulation powder 
    2503           0 :   AliMixture(14, "INSULATION0$", ains, zins, 0.41, 4, wins);
    2504           0 :   AliMixture(34, "INSULATION1$", ains, zins, 0.41, 4, wins);
    2505           0 :   AliMixture(54, "INSULATION2$", ains, zins, 0.41, 4, wins);
    2506             : 
    2507             :   //    NEG
    2508           0 :   AliMixture(25, "NEG COATING", aNEG, zNEG, dNEG, -3, wNEG);
    2509             :   
    2510             :   //---------------------------------
    2511             :   //  Aluminium AA5083 for MFT
    2512           0 :   AliMixture(63, "ALUMINIUM5083$",aALU5083,zALU5083, 2.66 ,4,wALU5083); // from aubertduval.fr
    2513             :   // Aluminium AA2219 for MFT
    2514           0 :   AliMixture(64, "ALUMINIUM2219$",aALU2219,zALU2219, 2.84 ,6,wALU2219); // from aubertduval.fr
    2515             :   //---------------------------------
    2516             :   //     Polyimide Film
    2517             :   //
    2518           0 :   AliMixture(65, "PI$", aPI, zPI, 1.42, -4, wPI);
    2519             :   //---------------------------------
    2520             :   //     Carbon Fiber M55J
    2521           0 :   AliMaterial(66,"M55J6K$",12.0107,6,1.92,999,999);
    2522             :   // Rohacell  C9 H13 N1 O2  0.03 g/cm^3
    2523           0 :   AliMixture(67,"Rohacell$", aRohacell, zRohacell, 0.03, -4, wRohacell);
    2524             : 
    2525             :   // ****************
    2526             :   //     Defines tracking media parameters. 
    2527             :   //
    2528             :   Float_t epsil  = .001;    // Tracking precision, 
    2529             :   Float_t stemax = -0.01;   // Maximum displacement for multiple scat 
    2530             :   Float_t tmaxfd = -20.;    // Maximum angle due to field deflection 
    2531             :   Float_t deemax = -.3;     // Maximum fractional energy loss, DLS 
    2532             :   Float_t stmin  = -.8;
    2533             :   // *************** 
    2534             :   //
    2535             :   // Silicon for ITS UPGRADE
    2536           0 :   AliMedium(2,  "SILICON",   2, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2537             : 
    2538             : 
    2539             :   //    Beryllium 
    2540             :   
    2541           0 :   AliMedium(5, "BE",       5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2542             : 
    2543             :   //    Carbon 
    2544           0 :   AliMedium(6, "C",        6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2545             :   //
    2546             :   //    Aluminum 
    2547           0 :   AliMedium(9, "ALU",      9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2548             :   //    Copper 
    2549           0 :   AliMedium(10, "CU",      10, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2550             :   //
    2551             :   //    Air 
    2552           0 :   AliMedium(15, "AIR",     15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2553           0 :   AliMedium(35, "AIR_HIGH",35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2554             :   //
    2555             :   //    Vacuum 
    2556           0 :   AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2557             :   //
    2558             :   //    Steel 
    2559           0 :   AliMedium(19, "INOX",   19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2560             :   //
    2561             :   //    Getter 
    2562           0 :   AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2563             :   //
    2564             :   //   AlBe - Aloy 
    2565           0 :   AliMedium(21, "AlBe"  , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2566             :   //
    2567             :   //   Polyamid
    2568           0 :   AliMedium(22, "PA"  ,   22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2569             :   //   Antocorodal
    2570           0 :   AliMedium(24, "ANTICORODAL",   24, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2571             :   //    Insulation Powder 
    2572           0 :   AliMedium(14, "INS_C0          ", 14, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2573           0 :   AliMedium(34, "INS_C1          ", 34, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2574           0 :   AliMedium(54, "INS_C2          ", 54, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2575             :   //
    2576             :   //   KAPTON
    2577           0 :   AliMedium(23, "KAPTON", 23, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2578             : 
    2579             :   //
    2580             :   //   NEG
    2581           0 :   AliMedium(25, "NEG COATING", 25, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2582             : 
    2583             :   //----------------- for the MFT ----------------------
    2584           0 :   AliMedium(63,"AA5083", 63, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2585           0 :   AliMedium(64,"AA2219", 64, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2586             :   //----------------------------------------------------
    2587           0 :   AliMedium(65,"POLYIMIDE", 65, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2588             :   //---------------------------------
    2589             :   //     Carbon Fiber M55J
    2590           0 :   AliMedium(66,  "M55J6K",66,0,isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2591             :   // Rohacell
    2592           0 :   AliMedium(67,"ROHACELL",67,0,isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
    2593             : 
    2594             : 
    2595           0 : }
    2596             : 
    2597             : 
    2598             : TGeoPcon* AliPIPEv4::MakeMotherFromTemplate(TGeoPcon* shape, Int_t imin, Int_t imax, Float_t r0, Int_t nz)
    2599             : {
    2600             :   //
    2601             :   //  Create a mother shape from a template setting some min radii to 0
    2602             :   //
    2603           0 :   Int_t nz0 = shape->GetNz();
    2604             :   // if nz > -1 the number of planes is given by nz
    2605           0 :   if (nz != -1) nz0 = nz;
    2606           0 :   TGeoPcon* mother = new TGeoPcon(0., 360., nz0);
    2607             : 
    2608           0 :   if (imin == -1 || imax == -1) {
    2609             :     imin = 0;
    2610           0 :     imax = shape->GetNz();
    2611           0 :   } else if (imax >= nz0) {
    2612           0 :     imax = nz0 - 1;
    2613           0 :     printf("Warning: imax reset to nz-1 %5d %5d %5d %5d\n", imin, imax, nz, nz0);
    2614           0 :   }
    2615             :     
    2616             : 
    2617             :     
    2618           0 :   for (Int_t i = 0;  i < shape->GetNz(); i++) {
    2619           0 :     Double_t rmin = shape->GetRmin(i);
    2620           0 :     if ((i >= imin) && (i <= imax) ) rmin = r0;
    2621           0 :     Double_t rmax = shape->GetRmax(i);
    2622           0 :     Double_t    z = shape->GetZ(i);
    2623           0 :     mother->DefineSection(i, z, rmin, rmax);
    2624             :   }
    2625           0 :   return mother;
    2626             :     
    2627           0 : }
    2628             : 
    2629             : TGeoPcon* AliPIPEv4::MakeInsulationFromTemplate(TGeoPcon* shape)
    2630             : {
    2631             :   //
    2632             :   //  Create an beam pipe insulation layer shape from a template
    2633             :   //
    2634           0 :   Int_t nz = shape->GetNz();
    2635           0 :   TGeoPcon* insu = new TGeoPcon(0., 360., nz);
    2636             :     
    2637           0 :   for (Int_t i = 0;  i < nz; i++) {
    2638           0 :     Double_t    z = shape->GetZ(i);
    2639           0 :     Double_t rmin = shape->GetRmin(i);
    2640           0 :     Double_t rmax = shape->GetRmax(i);
    2641           0 :     rmax += 0.5;
    2642           0 :     shape->DefineSection(i, z, rmin, rmax);  
    2643           0 :     rmin  = rmax - 0.5;
    2644           0 :     insu->DefineSection(i, z, rmin, rmax);   
    2645             :   }
    2646           0 :   return insu;
    2647             :     
    2648           0 : }
    2649             : 
    2650             : 
    2651             : TGeoVolume* AliPIPEv4::MakeBellow(const char* ext, Int_t nc, Float_t rMin, Float_t rMax, Float_t dU, Float_t rPlie, Float_t dPlie)
    2652             : {
    2653             :   // nc     Number of convolution
    2654             :   // rMin   Inner radius of the bellow
    2655             :   // rMax   Outer radius of the bellow
    2656             :   // dU     Undulation length
    2657             :   // rPlie  Plie radius
    2658             :   // dPlie  Plie thickness
    2659           0 :   const TGeoMedium* kMedVac    =  gGeoManager->GetMedium("PIPE_VACUUM");    
    2660             :   //const TGeoMedium* kMedSteel  =  gGeoManager->GetMedium("PIPE_INOX");   
    2661           0 :   const TGeoMedium* kMedAlu5083 =  gGeoManager->GetMedium("PIPE_AA5083"); //fm       
    2662             : 
    2663           0 :   char name[64], nameA[64], nameB[64], bools[64];
    2664           0 :   snprintf(name, 64, "%sBellowUS", ext);
    2665           0 :   TGeoVolume* voBellow = new TGeoVolume(name, new TGeoTube(rMin, rMax, dU/2.), kMedVac);
    2666             :   //      
    2667             :   //  Upper part of the undulation
    2668             :   //
    2669           0 :   TGeoTorus* shPlieTorusU  =  new TGeoTorus(rMax - rPlie, rPlie - dPlie, rPlie);
    2670           0 :   snprintf(nameA, 64, "%sTorusU", ext);
    2671           0 :   shPlieTorusU->SetName(nameA);
    2672           0 :   TGeoTube*  shPlieTubeU   =  new TGeoTube (rMax - rPlie, rMax, rPlie);
    2673           0 :   snprintf(nameB, 64, "%sTubeU", ext);
    2674           0 :   shPlieTubeU->SetName(nameB);
    2675           0 :   snprintf(name, 64, "%sUpperPlie", ext);
    2676           0 :   snprintf(bools, 64, "%s*%s", nameA, nameB);
    2677           0 :   TGeoCompositeShape*  shUpperPlie = new TGeoCompositeShape(name, bools);
    2678             :     
    2679           0 :   TGeoVolume* voWiggleU = new TGeoVolume(name, shUpperPlie, kMedAlu5083);
    2680           0 :   voWiggleU->SetLineColor(kOrange); // fm
    2681             :   
    2682             :   // Lower part of the undulation
    2683           0 :   TGeoTorus* shPlieTorusL =  new TGeoTorus(rMin + rPlie, rPlie - dPlie, rPlie);
    2684           0 :   snprintf(nameA, 64, "%sTorusL", ext);
    2685           0 :   shPlieTorusL->SetName(nameA);
    2686           0 :   TGeoTube*  shPlieTubeL  =  new TGeoTube (rMin, rMin + rPlie, rPlie);
    2687           0 :   snprintf(nameB, 64, "%sTubeL", ext);
    2688           0 :   shPlieTubeL->SetName(nameB);
    2689           0 :   snprintf(name, 64, "%sLowerPlie", ext);
    2690           0 :   snprintf(bools, 64, "%s*%s", nameA, nameB);
    2691           0 :   TGeoCompositeShape*  shLowerPlie = new TGeoCompositeShape(name, bools);
    2692             :     
    2693           0 :   TGeoVolume* voWiggleL = new TGeoVolume(name, shLowerPlie, kMedAlu5083); 
    2694           0 :   voWiggleL->SetLineColor(kOrange); // fm
    2695             :   
    2696             :   // Connection between upper and lower part of undulation
    2697           0 :   snprintf(name, 64, "%sPlieConn1", ext);
    2698           0 :   TGeoVolume* voWiggleC1 = new TGeoVolume(name, new TGeoTube(rMin + rPlie, rMax - rPlie, dPlie/2.), kMedAlu5083);
    2699           0 :   voWiggleC1->SetLineColor(kOrange); // fm
    2700             :   
    2701             :   // One wiggle
    2702           0 :   Float_t dz = rPlie -  dPlie / 2.;
    2703           0 :   Float_t z0 = -  dPlie / 2.;
    2704           0 :   snprintf(name, 64, "%sWiggle", ext);
    2705           0 :   TGeoVolumeAssembly* asWiggle = new TGeoVolumeAssembly(name);
    2706             : 
    2707           0 :   asWiggle->AddNode(voWiggleC1,  1 , new TGeoTranslation(0., 0., z0));
    2708           0 :   z0 += dz;
    2709           0 :   asWiggle->AddNode(voWiggleU,   1 , new TGeoTranslation(0., 0., z0));
    2710           0 :   z0 += dz;
    2711           0 :   asWiggle->AddNode(voWiggleC1,  2 , new TGeoTranslation(0., 0., z0));
    2712           0 :   z0 += dz;
    2713           0 :   asWiggle->AddNode(voWiggleL ,  1 , new TGeoTranslation(0., 0., z0));
    2714             :   // Positioning of the volumes
    2715           0 :   z0   = - dU / 2.+ rPlie;
    2716             :   ////////////voBellow->AddNode(voWiggleL, 2, new TGeoTranslation(0., 0., z0));   removing the first 1/2 plie, fm
    2717           0 :   z0  +=  rPlie;
    2718           0 :   Float_t zsh  = 4. *  rPlie -  2. * dPlie;
    2719           0 :   for (Int_t iw = 0; iw < nc; iw++) {
    2720           0 :     Float_t zpos =  z0 + iw * zsh;      
    2721           0 :     voBellow->AddNode(asWiggle,  iw + 1, new TGeoTranslation(0., 0., zpos - dPlie));
    2722             : 
    2723             :   }
    2724           0 :   return voBellow;
    2725           0 : }
    2726             : 
    2727             : TGeoVolume* AliPIPEv4::MakeBellowCside(const char* ext, Int_t nc, Float_t rMin, Float_t rMax, Float_t rPlie, Float_t dPlie)
    2728             : {
    2729             :   // nc     Number of convolution
    2730             :   // rMin   Inner radius of the bellow
    2731             :   // rMax   Outer radius of the bellow
    2732             :   // dU     Undulation length
    2733             :   // rPlie  Plie radius
    2734             :   // dPlie  Plie thickness
    2735           0 :   const TGeoMedium* kMedVac    =  gGeoManager->GetMedium("PIPE_VACUUM");
    2736             :   //const TGeoMedium* kMedSteel  =  gGeoManager->GetMedium("PIPE_INOX");
    2737           0 :   const TGeoMedium* kMedAlu5083 =  gGeoManager->GetMedium("PIPE_AA5083"); //fm
    2738             :   
    2739           0 :   Float_t dU = nc * (4.*rPlie - 2. *dPlie);
    2740             :   
    2741           0 :   char name[64], nameA[64], nameB[64], bools[64];
    2742           0 :   snprintf(name, 64, "%sBellowUS", ext);
    2743             : //  TGeoVolume* voBellow = new TGeoVolume(name, new TGeoTube(rMin, rMax, dU/2.), kMedVac);
    2744           0 :   TGeoVolumeAssembly *voBellow = new TGeoVolumeAssembly(name);
    2745             :   //
    2746             :   //  Upper part of the undulation
    2747             :   //
    2748             :   
    2749           0 :   TGeoTorus* shPlieTorusU  =  new TGeoTorus(rMax - rPlie, rPlie - dPlie, rPlie);
    2750           0 :   snprintf(nameA, 64, "%sTorusU", ext);
    2751           0 :   shPlieTorusU->SetName(nameA);
    2752           0 :   TGeoTube*  shPlieTubeU   =  new TGeoTube (rMax - rPlie, rMax, rPlie);
    2753           0 :   snprintf(nameB, 64, "%sTubeU", ext);
    2754           0 :   shPlieTubeU->SetName(nameB);
    2755           0 :   snprintf(name, 64, "%sUpperPlie", ext);
    2756           0 :   snprintf(bools, 64, "%s*%s", nameA, nameB);
    2757           0 :   TGeoCompositeShape*  shUpperPlie = new TGeoCompositeShape(name, bools);
    2758             :   
    2759           0 :   TGeoVolume* voWiggleU = new TGeoVolume(name, shUpperPlie, kMedAlu5083);
    2760           0 :   voWiggleU->SetLineColor(kOrange); // fm
    2761             :   
    2762             :   // First Lower part of the ondulation
    2763           0 :   TGeoTorus* shPlieTorusL =  new TGeoTorus(rMin + rPlie, rPlie - dPlie, rPlie);
    2764           0 :   snprintf(nameA, 64, "%sTorusL", ext);
    2765           0 :   shPlieTorusL->SetName(nameA);
    2766           0 :   TGeoTranslation *t1 = new TGeoTranslation("t1",0,0,-rPlie/2.);
    2767           0 :   t1->RegisterYourself();
    2768             : 
    2769           0 :   TGeoTube*  shPlieTubeL  =  new TGeoTube (rMin, rMin + rPlie, rPlie/2.);
    2770           0 :   snprintf(nameB, 64, "%sTubeL", ext);
    2771           0 :   shPlieTubeL->SetName(nameB);
    2772           0 :   snprintf(name, 64, "%sLowerPlie", ext);
    2773           0 :   snprintf(bools, 64, "%s*%s:t1", nameA, nameB);
    2774           0 :   TGeoCompositeShape*  shLowerPlie1 = new TGeoCompositeShape(name, bools);
    2775             :   
    2776           0 :   TGeoVolume* voWiggleL1 = new TGeoVolume(name, shLowerPlie1, kMedAlu5083);
    2777           0 :   voWiggleL1->SetLineColor(kOrange); // fm
    2778             :   
    2779             :   // Second Lower part of the undulation
    2780           0 :   TGeoTranslation *t2 = new TGeoTranslation("t2",0,0,rPlie/2.);
    2781           0 :   t2->RegisterYourself();
    2782             :   
    2783           0 :   snprintf(bools, 64, "%s*%s:t2", nameA, nameB);
    2784           0 :   TGeoCompositeShape*  shLowerPlie2 = new TGeoCompositeShape(name, bools);
    2785             :   
    2786           0 :   TGeoVolume* voWiggleL2 = new TGeoVolume(name, shLowerPlie2, kMedAlu5083);
    2787           0 :   voWiggleL2->SetLineColor(kOrange); // fm
    2788             :   
    2789             :   // Connection between upper and lower part of undulation
    2790           0 :   snprintf(name, 64, "%sPlieConn1", ext);
    2791           0 :   TGeoVolume* voWiggleC1 = new TGeoVolume(name, new TGeoTube(rMin + rPlie, rMax - rPlie, dPlie/2.), kMedAlu5083);
    2792           0 :   voWiggleC1->SetLineColor(kOrange); // fm
    2793             : 
    2794             :   //
    2795             :   // Vacuum Part
    2796             :   //
    2797             :   
    2798             :   //--Upper part of the ondulation
    2799             :   
    2800           0 :   TGeoTorus* vacPlieTorusU  =  new TGeoTorus(rMax - rPlie, 0., rPlie- dPlie);
    2801           0 :   snprintf(nameA, 64, "%svacTorusU", ext);
    2802           0 :   vacPlieTorusU->SetName(nameA);
    2803           0 :   TGeoTube*  vacPlieTubeU   =  new TGeoTube (0., rMax- rPlie, rPlie-dPlie);
    2804           0 :   snprintf(nameB, 64, "%svacTubeU", ext);
    2805           0 :   vacPlieTubeU->SetName(nameB);
    2806           0 :   snprintf(name, 64, "%svacUpperPlie", ext);
    2807           0 :   snprintf(bools, 64, "%s+%s", nameA, nameB);
    2808           0 :   TGeoCompositeShape*  vacUpperPlie = new TGeoCompositeShape(name, bools);
    2809             :   
    2810           0 :   TGeoVolume* voVacWiggleU = new TGeoVolume(name, vacUpperPlie, kMedVac);
    2811           0 :   voVacWiggleU->SetVisibility(0);
    2812             : 
    2813             :   
    2814             :   // First Lower part of the undulation
    2815           0 :   TGeoTorus* vacPlieTorusL =  new TGeoTorus(rMin + rPlie, 0., rPlie);
    2816           0 :   snprintf(nameA, 64, "%svacTorusL", ext);
    2817           0 :   vacPlieTorusL->SetName(nameA);
    2818             :   
    2819           0 :   TGeoTube*  vacPlieTubeL  =  new TGeoTube (0., rMin + rPlie, rPlie/2.);
    2820           0 :   snprintf(nameB, 64, "%svacTubeL", ext);
    2821           0 :   vacPlieTubeL->SetName(nameB);
    2822           0 :   snprintf(name, 64, "%svacLowerPlie", ext);
    2823           0 :   snprintf(bools, 64, "%s:t1-%s", nameB, nameA);
    2824           0 :   TGeoCompositeShape*  vacLowerPlie1 = new TGeoCompositeShape(name, bools);
    2825             :   
    2826           0 :   TGeoVolume* voVacWiggleL1 = new TGeoVolume(name, vacLowerPlie1, kMedVac);
    2827           0 :   voVacWiggleL1->SetVisibility(0);
    2828             :   
    2829             :   
    2830             :   // Second Lower part of the undulation
    2831             :   
    2832           0 :   snprintf(bools, 64, "%s:t2-%s", nameB, nameA);
    2833           0 :   TGeoCompositeShape*  vacLowerPlie2 = new TGeoCompositeShape(name, bools);
    2834             :   
    2835           0 :   TGeoVolume* voVacWiggleL2 = new TGeoVolume(name, vacLowerPlie2, kMedVac);
    2836           0 :   voVacWiggleL2->SetVisibility(0);
    2837             : 
    2838             :   
    2839             :   // One wiggle
    2840           0 :   Float_t dz = rPlie -  dPlie / 2.;
    2841           0 :   Float_t z0 = 2.*rPlie;
    2842           0 :   snprintf(name, 64, "%sWiggle", ext);
    2843           0 :   TGeoVolumeAssembly* asWiggle = new TGeoVolumeAssembly(name);
    2844             :   
    2845           0 :   asWiggle->AddNode(voWiggleL1 ,  1 , new TGeoTranslation(0., 0., z0));
    2846           0 :   asWiggle->AddNode(voVacWiggleL1 ,  1 , new TGeoTranslation(0., 0., z0));
    2847           0 :   z0 -= dz;
    2848           0 :   asWiggle->AddNode(voWiggleC1,  1 , new TGeoTranslation(0., 0., z0));
    2849           0 :   z0 -= dz;
    2850           0 :   asWiggle->AddNode(voWiggleU,   1 , new TGeoTranslation(0., 0., z0));
    2851           0 :   asWiggle->AddNode(voVacWiggleU,   1 , new TGeoTranslation(0., 0., z0));
    2852           0 :   z0 -= dz;
    2853           0 :   asWiggle->AddNode(voWiggleC1,  2 , new TGeoTranslation(0., 0., z0));
    2854           0 :   z0 -= dz;
    2855           0 :   asWiggle->AddNode(voWiggleL2 ,  1 , new TGeoTranslation(0., 0., z0));
    2856           0 :   asWiggle->AddNode(voVacWiggleL2 ,  1 , new TGeoTranslation(0., 0., z0));
    2857             : 
    2858             : 
    2859             :   
    2860             :   
    2861             :   // Positioning of the volumes
    2862           0 :   z0   = + dU / 2.;
    2863           0 :   Float_t zsh  = 4. *  dz;
    2864             :   //for (Int_t iw = 0; iw < 1; iw++) {
    2865           0 :      for (Int_t iw = 0; iw < nc; iw++) {
    2866           0 :     Float_t zpos =  z0 - iw * zsh;
    2867           0 :     voBellow->AddNode(asWiggle,  iw + 1, new TGeoTranslation(0., 0., zpos));
    2868             :     
    2869             :   }
    2870           0 :   return voBellow;
    2871           0 : }
    2872             : //TGeoVolume* AliPIPEv4::MakeBellowCside(const char* ext, Int_t nc, Float_t rMin, Float_t rMax, Float_t dU, Float_t rPlie, Float_t dPlie)
    2873             : //{
    2874             : //  // nc     Number of convolution
    2875             : //  // rMin   Inner radius of the bellow
    2876             : //  // rMax   Outer radius of the bellow
    2877             : //  // dU     Undulation length
    2878             : //  // rPlie  Plie radius
    2879             : //  // dPlie  Plie thickness
    2880             : //  const TGeoMedium* kMedVac    =  gGeoManager->GetMedium("PIPE_VACUUM");
    2881             : //  //const TGeoMedium* kMedSteel  =  gGeoManager->GetMedium("PIPE_INOX");
    2882             : //  const TGeoMedium* kMedAlu5083 =  gGeoManager->GetMedium("PIPE_AA5083"); //fm
    2883             : //  
    2884             : //  char name[64], nameA[64], nameB[64], bools[64];
    2885             : //  snprintf(name, 64, "%sBellowUS", ext);
    2886             : //  TGeoVolume* voBellow = new TGeoVolume(name, new TGeoTube(rMin, rMax, dU/2.), kMedVac);
    2887             : //  //
    2888             : //  //  Upper part of the undulation
    2889             : //  //
    2890             : //  
    2891             : //  TGeoTorus* shPlieTorusU  =  new TGeoTorus(rMax - rPlie, rPlie - dPlie, rPlie);
    2892             : //  snprintf(nameA, 64, "%sTorusU", ext);
    2893             : //  shPlieTorusU->SetName(nameA);
    2894             : //  TGeoTube*  shPlieTubeU   =  new TGeoTube (rMax - rPlie, rMax, rPlie);
    2895             : //  snprintf(nameB, 64, "%sTubeU", ext);
    2896             : //  shPlieTubeU->SetName(nameB);
    2897             : //  snprintf(name, 64, "%sUpperPlie", ext);
    2898             : //  snprintf(bools, 64, "%s*%s", nameA, nameB);
    2899             : //  TGeoCompositeShape*  shUpperPlie = new TGeoCompositeShape(name, bools);
    2900             : //  
    2901             : //  TGeoVolume* voWiggleU = new TGeoVolume(name, shUpperPlie, kMedAlu5083);
    2902             : //  voWiggleU->SetLineColor(kOrange); // fm
    2903             : //  
    2904             : //  // First Lower part of the undulation
    2905             : //  TGeoTorus* shPlieTorusL =  new TGeoTorus(rMin + rPlie, rPlie - dPlie, rPlie);
    2906             : //  snprintf(nameA, 64, "%sTorusL", ext);
    2907             : //  shPlieTorusL->SetName(nameA);
    2908             : //  TGeoTranslation *t1 = new TGeoTranslation("t1",0,0,-rPlie/2.);
    2909             : //  t1->RegisterYourself();
    2910             : //  
    2911             : //  TGeoTube*  shPlieTubeL  =  new TGeoTube (rMin, rMin + rPlie, rPlie/2.);
    2912             : //  snprintf(nameB, 64, "%sTubeL", ext);
    2913             : //  shPlieTubeL->SetName(nameB);
    2914             : //  snprintf(name, 64, "%sLowerPlie", ext);
    2915             : //  snprintf(bools, 64, "%s*%s:t1", nameA, nameB);
    2916             : //  TGeoCompositeShape*  shLowerPlie1 = new TGeoCompositeShape(name, bools);
    2917             : //  
    2918             : //  TGeoVolume* voWiggleL1 = new TGeoVolume(name, shLowerPlie1, kMedAlu5083);
    2919             : //  voWiggleL1->SetLineColor(kOrange); // fm
    2920             : //  
    2921             : //  // Second Lower part of the undulation
    2922             : //  TGeoTranslation *t2 = new TGeoTranslation("t2",0,0,rPlie/2.);
    2923             : //  t2->RegisterYourself();
    2924             : //  
    2925             : //  snprintf(bools, 64, "%s*%s:t2", nameA, nameB);
    2926             : //  TGeoCompositeShape*  shLowerPlie2 = new TGeoCompositeShape(name, bools);
    2927             : //  
    2928             : //  TGeoVolume* voWiggleL2 = new TGeoVolume(name, shLowerPlie2, kMedAlu5083);
    2929             : //  voWiggleL2->SetLineColor(kOrange); // fm
    2930             : //  
    2931             : //  // Connection between upper and lower part of undulation
    2932             : //  snprintf(name, 64, "%sPlieConn1", ext);
    2933             : //  TGeoVolume* voWiggleC1 = new TGeoVolume(name, new TGeoTube(rMin + rPlie, rMax - rPlie, dPlie/2.), kMedAlu5083);
    2934             : //  voWiggleC1->SetLineColor(kOrange); // fm
    2935             : //  
    2936             : //  // One wiggle
    2937             : //  Float_t dz = rPlie -  dPlie / 2.;
    2938             : //  Float_t z0 = 2.*rPlie;
    2939             : //  snprintf(name, 64, "%sWiggle", ext);
    2940             : //  TGeoVolumeAssembly* asWiggle = new TGeoVolumeAssembly(name);
    2941             : //  
    2942             : //  asWiggle->AddNode(voWiggleL1 ,  1 , new TGeoTranslation(0., 0., z0));
    2943             : //  //  z0 -= dz;
    2944             : //  //  asWiggle->AddNode(voWiggleC1,  1 , new TGeoTranslation(0., 0., z0));
    2945             : //  //  z0 -= dz;
    2946             : //  //  asWiggle->AddNode(voWiggleU,   1 , new TGeoTranslation(0., 0., z0));
    2947             : //  //  z0 -= dz;
    2948             : //  //  asWiggle->AddNode(voWiggleC1,  2 , new TGeoTranslation(0., 0., z0));
    2949             : //  //  z0 -= dz;
    2950             : //  //  asWiggle->AddNode(voWiggleL2 ,  1 , new TGeoTranslation(0., 0., z0));
    2951             : //  // Positioning of the volumes
    2952             : //  z0   = + dU / 2.;
    2953             : //  Float_t zsh  = 4. *  dz;
    2954             : //  for (Int_t iw = 0; iw < 1; iw++) {
    2955             : //    // for (Int_t iw = 0; iw < nc; iw++) {
    2956             : //    Float_t zpos =  z0 - iw * zsh;
    2957             : //    voBellow->AddNode(asWiggle,  iw + 1, new TGeoTranslation(0., 0., zpos));
    2958             : //    
    2959             : //  }
    2960             : //  return voBellow;
    2961             : //}
    2962             : 
    2963             : 

Generated by: LCOV version 1.11