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

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

Generated by: LCOV version 1.11