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