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