]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STRUCT/AliPIPEvGEO.cxx
Adding a missing slash
[u/mrichter/AliRoot.git] / STRUCT / AliPIPEvGEO.cxx
CommitLineData
61475935 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#include <Riostream.h>
25
26#include <TSystem.h>
27#include <TVirtualMC.h>
28#include <TGeoManager.h>
29#include <TGeoVolume.h>
30#include <TGeoTorus.h>
31#include <TGeoTube.h>
32#include <TGeoPcon.h>
33#include <TGeoCompositeShape.h>
34
35#include "AliConst.h"
36#include "AliMagF.h"
37#include "AliPIPEvGEO.h"
38#include "AliRun.h"
4951e003 39#include "AliLog.h"
61475935 40
41ClassImp(AliPIPEvGEO)
42
43//_____________________________________________________________________________
44AliPIPEvGEO::AliPIPEvGEO()
45{
46// Constructor
47}
48
49//_____________________________________________________________________________
50AliPIPEvGEO::AliPIPEvGEO(const char *name, const char *title)
51 : AliPIPE(name,title)
52{
53// Constructor
54}
55
56
57//___________________________________________
58void AliPIPEvGEO::CreateGeometry()
59{
60//Begin_Html
61/*
62<img src="picts/pipe.gif">
63*/
64//End_Html
65
66
67//Begin_Html
68/*
69<img src="picts/tree_pipe.gif">
70*/
71//End_Html
72//
73//
74// The ALICE central beam-pipe according to drawing LHCVC2C_0001
75// Drawings of sub-elements:
76//
77// Pos 7 - Minimised Flange: LHCVFX_P0025
78// Pos 6 - Standard Flange: STDVFUHV0009
79// Pos 8 - Bellow: LHCVBX__0001
80//
81// Absolute z-coordinates -82.0 - 400.0 cm
82// Total length: 482.0 cm
83// It consists of 3 main parts:
84// CP/1 The central Be pipe: 405.0 cm
85// CP/2 The flange on the non-absorber side: 36.5 cm
86// CP/3 The double-bellow and flange on the absorber side: 40.5 cm
87//
88//
4951e003 89 AliDebug(1,"Create PIPEv0 geometry");
61475935 90 Int_t *idtmed = fIdtmed->GetArray();
91 Float_t dz;
92 Float_t cpcon[39];
93 Float_t cpTube[3];
94 Int_t idrotm[2099];
95//
96// Rotation Matrices
97//
98// Rotation by 180 deg
99 AliMatrix(idrotm[2012],90.,180., 90., 90.,180., 0.);
100
101//
102 const Float_t kCPz0 = -400.0;
103 const Float_t kCP1Length = 405.0;
104 const Float_t kCP2Length = 36.6;
105 const Float_t kCP3Length = 40.5;
106
107 const Float_t kCP2pos = kCPz0 + kCP2Length / 2.;
108 const Float_t kCP1pos = kCPz0 + kCP2Length + kCP1Length / 2.;
109 const Float_t kCP3pos = kCPz0 + kCP2Length + kCP1Length + kCP3Length/2.;
110///////////////////
111// CP/1 //
112///////////////////
113// Inner and outer radii of the Be-section [Pos 1]
114 const Float_t kCP1BeRi = 2.90;
115 const Float_t kCP1BeRo = 2.98;
116//
117// Be-Stainless Steel adaptor tube [Pos 2] at both ends of the Be-section. Length 5 cm
118 const Float_t kCP1BeStAdaptorLength = 5.00;
119//
120// Bulge of the Be-Stainless Steel adaptor Tube [Pos 2]
121 const Float_t kCP1BeStRo = 3.05;
122//
123// Length of bulge [Pos 2]
124 const Float_t kCP1BulgeLength = 0.50;
125//
126// Distance between bulges [Pos 2]
127 const Float_t kCP1BulgeBulgeDistance = 1.00;
128//
129// Length of Be-pipe
130 const Float_t kCP1BeLength = kCP1Length - 2. * kCP1BeStAdaptorLength;
131//
132// CP/1 Mother volume
133 cpTube[0] = 0.;
134 cpTube[1] = kCP1BeStRo;
135 cpTube[2] = kCP1Length / 2.;
136 gMC->Gsvolu("Q1MO","TUBE", idtmed[kAir], cpTube, 3);
137 gMC->Gspos("Q1MO", 1, "ALIC", 0., 0., kCP1pos, 0, "ONLY");
138
139//
140// CP/1 Be-Section
141//
142 cpTube[0] = 0.;
143 cpTube[1] = kCP1BeRo;
144 cpTube[2] = kCP1BeLength / 2.;
145 gMC->Gsvolu("Q1BE","TUBE", idtmed[kBe], cpTube, 3);
146 cpTube[0] = 0.;
147 cpTube[1] = kCP1BeRi;
148 gMC->Gsvolu("Q1BV","TUBE", idtmed[kVac], cpTube, 3);
149 gMC->Gspos("Q1BV", 1, "Q1BE", 0., 0., 0., 0, "ONLY");
150 gMC->Gspos("Q1BE", 1, "Q1MO", 0., 0., 0., 0, "ONLY");
151//
152// CP/1 Be-Stainless Steel adaptor tube
153//
154 cpcon[0 ] = 0;
155 cpcon[1 ] = 360;
156 cpcon[2 ] = 8;
157// 1 First Bulge
158 cpcon[3 ] = - kCP1BeStAdaptorLength / 2.;
159 cpcon[4 ] = 0.;
160 cpcon[5 ] = kCP1BeStRo;
161// 2
162 cpcon[6 ] = cpcon[3] + kCP1BulgeLength;
163 cpcon[7 ] = 0.;
164 cpcon[8 ] = kCP1BeStRo;
165// 3
166 cpcon[9 ] = cpcon[6];
167 cpcon[10] = 0.;
168 cpcon[11] = kCP1BeRo;
169// 4 Between the bulges
170 cpcon[12] = cpcon[9] + kCP1BulgeBulgeDistance;
171 cpcon[13] = 0.;
172 cpcon[14] = kCP1BeRo;
173// 5
174 cpcon[15] = cpcon[12];
175 cpcon[16] = 0.;
176 cpcon[17] = kCP1BeStRo;
177// 6 Second bulge
178 cpcon[18] = cpcon[15] + kCP1BulgeLength;
179 cpcon[19] = 0.;
180 cpcon[20] = kCP1BeStRo;
181// 7
182 cpcon[21] = cpcon[18] + kCP1BulgeLength;
183 cpcon[22] = 0.;
184 cpcon[23] = kCP1BeRo;
185// 8 Straight piece
186 cpcon[24] = kCP1BeStAdaptorLength / 2.;
187 cpcon[25] = 0.;
188 cpcon[26] = kCP1BeRo;
189//
190 gMC->Gsvolu("Q1AT","PCON", idtmed[kInox], cpcon, 27);
191//
192// Vacuum
193 cpTube[0] = 0.;
194 cpTube[1] = kCP1BeRi;
195 cpTube[2] = -1.;
196 gMC->Gsvolu("Q1AV","TUBE", idtmed[kVac], cpTube, 3);
197 gMC->Gspos("Q1AV", 1, "Q1AT", 0., 0., 0., 0, "ONLY");
198// Position adaptor tube at both ends
199 dz = kCP1Length / 2. - kCP1BeStAdaptorLength / 2.;
200 gMC->Gspos("Q1AT", 1, "Q1MO", 0., 0., -dz, 0, "ONLY");
201 gMC->Gspos("Q1AT", 2, "Q1MO", 0., 0., dz, idrotm[2012], "ONLY");
202//
203///////////////////
204// CP/2 //
205///////////////////
206//
207// Fixed Point tube [Pos 5]
208//
209// Inner and outer radii of the Stainless Steel pipe
210 const Float_t kCP2StRi = 2.90;
211 const Float_t kCP2StRo = 2.98;
212//
213// Transition to central Be-pipe (Bulge)
214// Length
215 const Float_t kCP2BulgeLength = 0.80;
216//
217// Bulge outer radius
218 const Float_t kCP2BulgeRo = 3.05;
219//
220// Fixed Point at z = 391.7 (IP)
221//
222// Position of fixed point
223 const Float_t kCP2FixedPointZ = 8.30;
224//
225// Outer radius of fixed point
226 const Float_t kCP2FixedPointRo = 3.50;
227//
228// Length of fixed point
229 const Float_t kCP2FixedPointLength = 0.60;
230//
231// Fixed Flange [Pos 6]
232//
233// Fixed flange outer radius
234 const Float_t kCP2FixedFlangeRo = 7.60;
235//
236// Fixed flange inner radius
237 const Float_t kCP2FixedFlangeRi = 3.00;
238// Fixed flange inner radius bulge
239 const Float_t kCP2FixedFlangeBulgeRi = 2.90;
240// Fixed flange lengths of sections at inner radius
241 const Float_t kCP2FixedFlangeRecessLengths[3] ={1., 0.08, 0.9};
242// Fixed flange length
243 const Float_t kCP2FixedFlangeLength = 1.98;
244//
245// Fixed flange bulge
246// Outer radius
247 const Float_t kCP2FixedFlangeBulgeRo = 3.00;
248//
249// Length
250 const Float_t kCP2FixedFlangeBulgeLength = 2.00;
251//
252// CP/2 Mother Volume
253//
254 cpcon[0 ] = 0;
255 cpcon[1 ] = 360;
256 cpcon[2 ] = 8;
257// 1 Flange
258 cpcon[3 ] = - kCP2Length / 2.;
259 cpcon[4 ] = 0.;
260 cpcon[5 ] = kCP2FixedFlangeRo;
261// 2
262 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeLength;
263 cpcon[7 ] = 0.;
264 cpcon[8 ] = kCP2FixedFlangeRo;
265// 3 Straight section between Flange and Fixed Point
266 cpcon[9 ] = cpcon[6];
267 cpcon[10] = 0.;
268 cpcon[11] = kCP2FixedFlangeBulgeRo;
269// 4
270 cpcon[12] = cpcon[3] + kCP2FixedPointZ - kCP2FixedPointLength / 2.;
271 cpcon[13] = 0.;
272 cpcon[14] = kCP2FixedFlangeBulgeRo;
273// 5 Fixed Point
274 cpcon[15] = cpcon[12];
275 cpcon[16] = 0.;
276 cpcon[17] = kCP2FixedPointRo;
277// 6
278 cpcon[18] = cpcon[15] + kCP2FixedPointLength;
279 cpcon[19] = 0.;
280 cpcon[20] = kCP2FixedPointRo;
281// 7 Straight section between Fixed Point and transition bulge
282 cpcon[21] = cpcon[18];
283 cpcon[22] = 0.;
284 cpcon[23] = kCP2BulgeRo;
285// 8
286 cpcon[24] = kCP2Length / 2.;
287 cpcon[25] = 0.;
288 cpcon[26] = kCP2BulgeRo;
289 gMC->Gsvolu("Q2MO","PCON", idtmed[kAir], cpcon, 27);
290 dz = kCP2pos;
291 gMC->Gspos("Q2MO", 1, "ALIC", 0., 0., dz, 0, "ONLY");
292//
293// CP/2 Fixed Flange [Pos 6]
294//
295 cpcon[0 ] = 0;
296 cpcon[1 ] = 360;
297 cpcon[2 ] = 4;
298// 1
299 cpcon[3 ] = - kCP2FixedFlangeLength / 2.;
300 cpcon[4 ] = 0.;
301 cpcon[5 ] = kCP2FixedFlangeRo;
302// 2
303 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1];
304 cpcon[7 ] = 0.;
305 cpcon[8 ] = kCP2FixedFlangeRo;
306// 3
307 cpcon[9 ] = cpcon[6];
308 cpcon[10] = kCP2FixedFlangeRi;
309 cpcon[11] = kCP2FixedFlangeRo;
310// 4
311 cpcon[12] = - cpcon[3];
312 cpcon[13] = kCP2FixedFlangeRi;
313 cpcon[14] = kCP2FixedFlangeRo;
314 gMC->Gsvolu("Q2FL","PCON", idtmed[kInox], cpcon, 15);
315//
316// Vacuum to be placed into Fixed Flange
317 cpcon[0 ] = 0;
318 cpcon[1 ] = 360;
319 cpcon[2 ] = 4;
320// 1
321 cpcon[3 ] = - (kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]) / 2.;
322 cpcon[4 ] = 0.;
323 cpcon[5 ] = kCP2FixedFlangeRi;
324// 2
325 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0];
326 cpcon[7 ] = 0.;
327 cpcon[8 ] = kCP2FixedFlangeRi;
328// 3 Bulge
329 cpcon[9 ] = cpcon[6];
330 cpcon[10] = 0.;
331 cpcon[11] = kCP2FixedFlangeBulgeRi;
332// 4
333 cpcon[12] = -cpcon[3];
334 cpcon[13] = 0.;
335 cpcon[14] = kCP2FixedFlangeBulgeRi;
336 gMC->Gsvolu("Q2V1","PCON", idtmed[kVac], cpcon, 15);
337 dz = - kCP2FixedFlangeLength / 2. - cpcon[3];
338 gMC->Gspos("Q2V1", 1, "Q2FL", 0., 0., dz, 0, "ONLY");
339//
340 dz = - kCP2Length / 2. + kCP2FixedFlangeLength / 2.;
341 gMC->Gspos("Q2FL", 1, "Q2MO", 0., 0., dz, 0, "ONLY");
342//
343// CP/2 Beam pipe with fixed point and transition bulges
344//
345 cpcon[0 ] = 0;
346 cpcon[1 ] = 360;
347 cpcon[2 ] = 10;
348// 1 Bulge at transition to flange
349 cpcon[3 ] = - (kCP2Length - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) / 2.;
350 cpcon[4 ] = 0.;
351 cpcon[5 ] = kCP2FixedFlangeBulgeRo;
352// 2
353 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeBulgeLength;
354 cpcon[7 ] = 0.;
355 cpcon[8 ] = kCP2FixedFlangeBulgeRo;
356// 3 Straight section between Bulge and Fixed Point
357 cpcon[9 ] = cpcon[6];
358 cpcon[10] = 0.;
359 cpcon[11] = kCP2StRo;
360// 4
361 cpcon[12] = cpcon[3] + (kCP2FixedPointZ - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) - kCP2FixedPointLength / 2.;
362 cpcon[13] = 0.;
363 cpcon[14] = kCP2StRo;
364// 5 Fixed Point
365 cpcon[15] = cpcon[12];
366 cpcon[16] = 0.;
367 cpcon[17] = kCP2FixedPointRo;
368// 6
369 cpcon[18] = cpcon[15] + kCP2FixedPointLength;
370 cpcon[19] = 0.;
371 cpcon[20] = kCP2FixedPointRo;
372// 7 Straight section between Fixed Point and transition bulge
373 cpcon[21] = cpcon[18];
374 cpcon[22] = 0.;
375 cpcon[23] = kCP2StRo;
376// 8
377 cpcon[24] = - cpcon[3] - kCP2BulgeLength;
378 cpcon[25] = 0.;
379 cpcon[26] = kCP2StRo;
380// 9 Bulge at transition to Be pipe
381 cpcon[27] = cpcon[24];
382 cpcon[28] = 0.;
383 cpcon[29] = kCP2BulgeRo;
384// 10
385 cpcon[30] = - cpcon[3];
386 cpcon[31] = 0.;
387 cpcon[32] = kCP2BulgeRo;
388 gMC->Gsvolu("Q2PI","PCON", idtmed[kInox], cpcon, 33);
389//
390// Vacuum to be place into CP/2 beam pipe
391 cpTube[0] = 0.;
392 cpTube[1] = kCP2StRi;
393 cpTube[2] = -1.;
394 gMC->Gsvolu("Q2V2","TUBE", idtmed[kVac], cpTube, 3);
395
396 gMC->Gspos("Q2V2", 1, "Q2PI", 0., 0., 0., 0, "ONLY");
397 dz = (kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]) / 2.;
398 gMC->Gspos("Q2PI", 1, "Q2MO", 0., 0., dz, 0, "ONLY");
399//
400///////////////////
401// CP/3 //
402///////////////////
403//
404// Adaptor tube [Pos 4]
405//
406// Adaptor tube length
407 const Float_t kCP3AdaptorTubeLength = 5.50;
408//
409// Inner and outer radii
410 const Float_t kCP3AdaptorTubeRi = 2.92;
411 const Float_t kCP3AdaptorTubeRo = 3.00;
412//
413// Bulge at transition point
414// Inner and outer radii
415 const Float_t kCP3AdaptorTubeBulgeRi = 2.90;
416 const Float_t kCP3AdaptorTubeBulgeRo = 3.05;
417//
418// Length of bulge
419 const Float_t kCP3AdaptorTubeBulgeLength = 0.80;
420//
421// Bellow [Pos 8]
422//
423// Total length
424 const Float_t kCP3BellowLength = 13.00;
425// Outer Radius
426 const Float_t kCP3BellowRo = 3.6;
427// Inner Radius
428 const Float_t kCP3BellowRi = 2.8;
429// Number of plies
430 const Int_t kCP3NumberOfPlies = 18;
431// Length of undulated region
432 const Float_t kCP3BellowUndulatedLength = 8.30;
433// Plie thickness
434 const Float_t kCP3PlieThickness = 0.02;
435// Connection Plie radies (at transition been undulated region and beam pipe)
436 const Float_t kCP3ConnectionPlieR = 0.21;
437// Plie radius
438// const Float_t kCP3PlieR = 0.118286;
439 const Float_t kCP3PlieR =
440 (kCP3BellowUndulatedLength - 4. * kCP3ConnectionPlieR + 2. * kCP3PlieThickness + (2. * kCP3NumberOfPlies - 2.) * kCP3PlieThickness)
441 / (4. * kCP3NumberOfPlies - 2.);
442// Length of connection pipe
443 const Float_t kCP3BellowConnectionLength = 2.35;
444//
445// Tube between bellows [Pos 3]
446//
447// Length of tube
448 const Float_t kCP3TubeLength = 4.00;
449//
450// Minimised fixed flange [Pos 7]
451//
452// Length of flange connection tube
453 const Float_t kCP3FlangeConnectorLength = 5.0 - 1.4;
454// Length of Flange
455 const Float_t kCP3FlangeLength = 1.40;
456// Outer radius
457 const Float_t kCP3FlangeRo = 4.30;
458
459//
460// CP/3 Mother volume
461//
462 cpcon[0 ] = 0;
463 cpcon[1 ] = 360;
464 cpcon[2 ] = 12;
465// 1 From transition to first bellow
466 cpcon[3 ] = - kCP3Length / 2.;
467 cpcon[4 ] = 0.;
468 cpcon[5 ] = kCP3AdaptorTubeBulgeRo;
469// 2
470 cpcon[6 ] = cpcon[3] + kCP3BellowConnectionLength + kCP3AdaptorTubeLength;
471 cpcon[7 ] = 0.;
472 cpcon[8 ] = kCP3AdaptorTubeBulgeRo;
473// 3 First Bellow
474 cpcon[9 ] = cpcon[6];
475 cpcon[10] = 0.;
476 cpcon[11] = kCP3BellowRo;
477// 4
478 cpcon[12] = cpcon[9] + kCP3BellowUndulatedLength;
479 cpcon[13] = 0.;
480 cpcon[14] = kCP3BellowRo;
481// 5 Connection between the two bellows
482 cpcon[15] = cpcon[12];
483 cpcon[16] = 0.;
484 cpcon[17] = kCP3AdaptorTubeBulgeRo;
485// 6
486 cpcon[18] = cpcon[15] + 2. * kCP3BellowConnectionLength + kCP3TubeLength;
487 cpcon[19] = 0.;
488 cpcon[20] = kCP3AdaptorTubeBulgeRo;
489// 7 Second bellow
490 cpcon[21] = cpcon[18];
491 cpcon[22] = 0.;
492 cpcon[23] = kCP3BellowRo;
493// 8
494 cpcon[24] = cpcon[21] + kCP3BellowUndulatedLength;
495 cpcon[25] = 0.;
496 cpcon[26] = kCP3BellowRo;
497// 9 Pipe between second Bellow and Flange
498 cpcon[27] = cpcon[24];
499 cpcon[28] = 0.;
500 cpcon[29] = kCP3AdaptorTubeBulgeRo;
501// 10
502 cpcon[30] = cpcon[27] + kCP3BellowConnectionLength + kCP3FlangeConnectorLength;
503 cpcon[31] = 0.;
504 cpcon[32] = kCP3AdaptorTubeBulgeRo;
505// 11 Flange
506 cpcon[33] = cpcon[30];
507 cpcon[34] = 0.;
508 cpcon[35] = kCP3FlangeRo;
509// 12
510 cpcon[36] = - cpcon[3];
511 cpcon[37] = 0.;
512 cpcon[38] = kCP3FlangeRo;
513//
514 gMC->Gsvolu("Q3MO","PCON", idtmed[kAir], cpcon, 39);
515 dz = kCP3pos;
516 gMC->Gspos("Q3MO", 1, "ALIC", 0., 0., dz, 0, "ONLY");
517//
518// CP/3 Adaptor tube
519//
520 cpcon[0 ] = 0;
521 cpcon[1 ] = 360;
522 cpcon[2 ] = 4;
523// 1 Bulge at transition
524 cpcon[3 ] = - kCP3AdaptorTubeLength / 2.;
525 cpcon[4 ] = 0.;
526 cpcon[5 ] = kCP3AdaptorTubeBulgeRo;
527// 2
528 cpcon[6 ] = cpcon[3] + kCP3AdaptorTubeBulgeLength;
529 cpcon[7 ] = 0.;
530 cpcon[8 ] = kCP3AdaptorTubeBulgeRo;
531// 3 Tube
532 cpcon[9 ] = cpcon[6];
533 cpcon[10] = 0.;
534 cpcon[11] = kCP3AdaptorTubeRo;
535// 4
536 cpcon[12] = - cpcon[3];
537 cpcon[13] = 0.;
538 cpcon[14] = kCP3AdaptorTubeRo;
539 gMC->Gsvolu("Q3ATO","PCON", idtmed[kVac], cpcon, 15);
540
541// 1 Bulge at transition
542 cpcon[4 ] = kCP3AdaptorTubeBulgeRi;
543// 2
544 cpcon[7 ] = kCP3AdaptorTubeBulgeRi;;
545// 3 Tube
546 cpcon[10] = kCP3AdaptorTubeRi;
547// 4
548 cpcon[13] = kCP3AdaptorTubeRi;
549
550 gMC->Gsvolu("Q3ATI","PCON", idtmed[kInox], cpcon, 15);
551 gMC->Gspos("Q3ATI", 1, "Q3ATO", 0., 0., 0., 0, "ONLY");
552 dz = - kCP3Length / 2. + kCP3AdaptorTubeLength / 2.;
553 gMC->Gspos("Q3ATO", 1, "Q3MO", 0., 0., dz, 0, "ONLY");
554//
555// CP/3 Bellow section
556//
557// TGeoMedium* mAir = gGeoManager->GetMedium("AIR");
558 TGeoMedium* mVacuum = gGeoManager->GetMedium("VACUUM");
559 TGeoMedium* mSteel = gGeoManager->GetMedium("INOX");
560//
561// Upper part of the undulation
562 TGeoTorus* plieTorusUO = new TGeoTorus(kCP3BellowRo - kCP3PlieR, 0. , kCP3PlieR);
563 plieTorusUO->SetName("TorusUO");
564 TGeoTorus* plieTorusUI = new TGeoTorus(kCP3BellowRo - kCP3PlieR, kCP3PlieR - kCP3PlieThickness, kCP3PlieR);
565 plieTorusUI->SetName("TorusUI");
566 TGeoTube* plieTubeU = new TGeoTube (kCP3BellowRo - kCP3PlieR, kCP3BellowRo, kCP3PlieR / 2.);
567 plieTubeU->SetName("TubeU");
568
569 TGeoCompositeShape* upperPlieO = new TGeoCompositeShape("upperPlieO", "TorusUO*TubeU");
570 TGeoCompositeShape* upperPlieI = new TGeoCompositeShape("upperPlieI", "TorusUI*TubeU");
571
572 TGeoVolume* wiggleUO = new TGeoVolume("Q3WUO", upperPlieO, mVacuum);
573 TGeoVolume* wiggleUI = new TGeoVolume("Q3WUI", upperPlieI, mSteel);
574 wiggleUO->AddNode(wiggleUI, 1, new TGeoTranslation(0., 0., 0.));
575//
576// Lower part of the undulation
577 TGeoTorus* plieTorusLO = new TGeoTorus(kCP3BellowRi + kCP3PlieR, 0. , kCP3PlieR);
578 plieTorusLO->SetName("TorusLO");
579 TGeoTorus* plieTorusLI = new TGeoTorus(kCP3BellowRi + kCP3PlieR, kCP3PlieR - kCP3PlieThickness, kCP3PlieR);
580 plieTorusLI->SetName("TorusLI");
581 TGeoTube* plieTubeL = new TGeoTube (kCP3BellowRi, kCP3BellowRi + kCP3PlieR, kCP3PlieR);
582 plieTubeL->SetName("TubeL");
583
584 TGeoCompositeShape* lowerPlieO = new TGeoCompositeShape("lowerPlieO", "TorusLO*TubeL");
585 TGeoCompositeShape* lowerPlieI = new TGeoCompositeShape("lowerPlieI", "TorusLI*TubeL");
586
587 TGeoVolume* wiggleLO = new TGeoVolume("Q3WLO", lowerPlieO, mVacuum);
588 TGeoVolume* wiggleLI = new TGeoVolume("Q3WLI", lowerPlieI, mSteel);
589 wiggleLO->AddNode(wiggleLI, 1, new TGeoTranslation(0., 0., 0.));
590
591//
592// Connection between upper and lower part of undulation
593 TGeoVolume* wiggleC1 = new TGeoVolume("Q3WCO1",
594 new TGeoTube(kCP3BellowRi + kCP3PlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.),
595 mSteel);
596 TGeoVolume* wiggleC2 = new TGeoVolume("Q3WCO2",
597 new TGeoTube(kCP3BellowRi + kCP3ConnectionPlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.),
598 mSteel);
599//
600// Conncetion between undulated section and beam pipe
601 TGeoTorus* plieTorusCO = new TGeoTorus(kCP3BellowRi + kCP3ConnectionPlieR, 0. , kCP3ConnectionPlieR);
602 plieTorusCO->SetName("TorusCO");
603 TGeoTorus* plieTorusCI = new TGeoTorus(kCP3BellowRi + kCP3ConnectionPlieR, kCP3ConnectionPlieR - kCP3PlieThickness, kCP3ConnectionPlieR);
604 plieTorusCI->SetName("TorusCI");
605 TGeoTube* plieTubeC = new TGeoTube (kCP3BellowRi, kCP3BellowRi + kCP3ConnectionPlieR, kCP3ConnectionPlieR);
606 plieTubeC->SetName("TubeC");
607
608 TGeoCompositeShape* connectionPlieO = new TGeoCompositeShape("connectionPlieO", "TorusCO*TubeC");
609 TGeoCompositeShape* connectionPlieI = new TGeoCompositeShape("connectionPlieI", "TorusCI*TubeC");
610
611 TGeoVolume* connectionPO = new TGeoVolume("Q3CPO", connectionPlieO, mVacuum);
612 TGeoVolume* connectionPI = new TGeoVolume("Q3CPI", connectionPlieI, mSteel);
613 connectionPO->AddNode(connectionPI, 1, new TGeoTranslation(0., 0., 0.));
614//
615// Connecting pipes
616 TGeoVolume* connectionPipeO = new TGeoVolume("Q3BECO",
617 new TGeoTube(0., kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.),
618 mVacuum);
619 TGeoVolume* connectionPipeI = new TGeoVolume("Q3BECI",
620 new TGeoTube(kCP3AdaptorTubeRi, kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.),
621 mSteel);
622
623 connectionPipeO->AddNode(connectionPipeI, 1, new TGeoTranslation(0., 0., 0.));
624
625//
626// Bellow mother
627 TGeoPcon* bellowMotherPC = new TGeoPcon(0., 360., 6);
628 dz = - kCP3BellowLength / 2;
629 bellowMotherPC->DefineSection(0, dz, 0., kCP3AdaptorTubeRo);
630 dz += kCP3BellowConnectionLength;
631 bellowMotherPC->DefineSection(1, dz, 0., kCP3AdaptorTubeRo);
632 bellowMotherPC->DefineSection(2, dz, 0., kCP3BellowRo);
633 dz = kCP3BellowLength /2. - kCP3BellowConnectionLength;;
634 bellowMotherPC->DefineSection(3, dz, 0., kCP3BellowRo);
635 bellowMotherPC->DefineSection(4, dz, 0., kCP3AdaptorTubeRo);
636 dz += kCP3BellowConnectionLength;
637 bellowMotherPC->DefineSection(5, dz, 0., kCP3AdaptorTubeRo);
638
639 TGeoVolume* bellowMother = new TGeoVolume("Q3BeMO", bellowMotherPC, mVacuum);
640//
641// Add undulations
642 Float_t z0 = - kCP3BellowLength / 2. + kCP3BellowConnectionLength + 2. * kCP3ConnectionPlieR - kCP3PlieThickness;
643 Float_t zsh = 4. * kCP3PlieR - 2. * kCP3PlieThickness;
644 for (Int_t iw = 0; iw < 18; iw++) {
645 Float_t zpos = z0 + iw * zsh;
646 if (iw > 0)
647 bellowMother->AddNode(wiggleC1, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.));
648 else
649 bellowMother->AddNode(wiggleC2, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.));
650
651 zpos += kCP3PlieR;
652 bellowMother->AddNode(wiggleUO, iw + 1, new TGeoTranslation(0., 0., zpos));
653
654 zpos += kCP3PlieR;
655 if (iw < 17)
656 bellowMother->AddNode(wiggleC1, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.));
657 else
658 bellowMother->AddNode(wiggleC2, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.));
659
660 if (iw < 17) {
661 zpos += kCP3PlieR;
662 bellowMother->AddNode(wiggleLO, iw + 1, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness));
663 }
664 }
665//
666// Add connecting undulation between bellow and connecting pipe
667 dz = - kCP3BellowUndulatedLength / 2. + kCP3ConnectionPlieR;
668 bellowMother->AddNode(connectionPO, 1, new TGeoTranslation(0., 0., dz));
669 bellowMother->AddNode(connectionPO, 2, new TGeoTranslation(0., 0., -dz));
670//
671// Add connecting pipe
672 dz = - kCP3BellowLength / 2. + kCP3BellowConnectionLength / 2.;
673 bellowMother->AddNode(connectionPipeO, 1, new TGeoTranslation(0., 0., dz));
674 bellowMother->AddNode(connectionPipeO, 2, new TGeoTranslation(0., 0., -dz));
675//
676// Add bellow to CP/3 mother
677 TGeoVolume* mother = gGeoManager->GetVolume("Q3MO");
678 dz = - kCP3Length / 2. + kCP3AdaptorTubeLength + kCP3BellowLength / 2.;
679 mother->AddNode(bellowMother, 1, new TGeoTranslation(0., 0., dz));
680 dz += (kCP3BellowLength + kCP3TubeLength);
681 mother->AddNode(bellowMother, 2, new TGeoTranslation(0., 0., dz));
682//
683// Beam pipe section between bellows
684//
685 cpTube[0] = 0.;
686 cpTube[1] = kCP3AdaptorTubeRo;
687 cpTube[2] = kCP3TubeLength / 2.;
688 gMC->Gsvolu("Q3BCO","TUBE", idtmed[kVac], cpTube, 3);
689
690 cpTube[0] = kCP3AdaptorTubeRi;
691 cpTube[1] = kCP3AdaptorTubeRo;
692 cpTube[2] = kCP3TubeLength / 2.;
693 gMC->Gsvolu("Q3BCI","TUBE", idtmed[kInox], cpTube, 3);
694
695 gMC->Gspos("Q3BCI", 1, "Q3BCO", 0., 0., 0., 0, "ONLY");
696 dz = - kCP3Length / 2. + kCP3AdaptorTubeLength + kCP3BellowLength + kCP3TubeLength / 2.;
697 gMC->Gspos("Q3BCO", 1, "Q3MO", 0., 0., dz, 0, "ONLY");
698
699
700// CP3 Minimised Flange
701//
702 cpcon[0 ] = 0;
703 cpcon[1 ] = 360;
704 cpcon[2 ] = 4;
705// 1 Connection Tube
706 cpcon[3 ] = - (kCP3FlangeConnectorLength + kCP3FlangeLength) / 2.;
707 cpcon[4 ] = 0.;
708 cpcon[5 ] = kCP3AdaptorTubeRo;
709// 2
710 cpcon[6 ] = cpcon[3] + kCP3FlangeConnectorLength;
711 cpcon[7 ] = 0.;
712 cpcon[8 ] = kCP3AdaptorTubeRo;
713// 3 Flange
714 cpcon[9 ] = cpcon[6];
715 cpcon[10] = 0.;
716 cpcon[11] = kCP3FlangeRo;
717// 4
718 cpcon[12] = - cpcon[3];
719 cpcon[13] = 0.;
720 cpcon[14] = kCP3FlangeRo;
721 gMC->Gsvolu("Q3MFO","PCON", idtmed[kVac], cpcon, 15);
722
723 cpcon[4 ] = cpcon[7 ] = cpcon [10] = cpcon[13] = kCP3AdaptorTubeRi;
724 gMC->Gsvolu("Q3MFI","PCON", idtmed[kInox], cpcon, 15);
725
726 gMC->Gspos("Q3MFI", 1, "Q3MFO", 0., 0., 0., 0, "ONLY");
727 dz = kCP3Length / 2. - (kCP3FlangeConnectorLength + kCP3FlangeLength) / 2.;
728 gMC->Gspos("Q3MFO", 1, "Q3MO", 0., 0., dz, 0, "ONLY");
729}
730
731
732
733//___________________________________________
734void AliPIPEvGEO::CreateMaterials()
735{
736 //
737 // Define materials for beam pipe
738 //
739
4951e003 740 AliDebugClass(1,"Create PIPEvGEO materials");
61475935 741 Int_t isxfld = gAlice->Field()->Integ();
742 Float_t sxmgmx = gAlice->Field()->Max();
743 // Steel (Inox)
744 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
745 Float_t zsteel[4] = { 26.,24.,28.,14. };
746 Float_t wsteel[4] = { .715,.18,.1,.005 };
747 // AlBe - alloy
748 Float_t aAlBe[2] = { 26.98, 9.01};
749 Float_t zAlBe[2] = { 13.00, 4.00};
750 Float_t wAlBe[2] = { 0.4, 0.6};
751 //
752 // Polyamid
753 Float_t aPA[4] = {16., 14., 12., 1.};
754 Float_t zPA[4] = { 8., 7., 6., 1.};
755 Float_t wPA[4] = { 1., 1., 6., 11.};
756 //
757 // Air
758 //
759 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
760 Float_t zAir[4]={6.,7.,8.,18.};
761 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
762 Float_t dAir = 1.20479E-3;
763 Float_t dAir1 = 1.20479E-10;
764
765 //
766 // Berillium
767 AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
768 //
769 // Carbon
770 AliMaterial(6, "CARBON$ ", 12.01, 6., 2.265, 18.8, 49.9);
771 //
772 // Aluminum
773 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
774 //
775 // Air
776 AliMixture(15, "AIR$ ", aAir, zAir, dAir, 4, wAir);
777 //
778 // Vacuum
779 AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
780 //
781 // stainless Steel
782 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
783 //
784 // reduced density steel to approximate pump getter material
785 AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
786 // Al-Be alloy
787 //
788 AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
789 // Polyamid
790 //
791 AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA);
792 //
793
794 // ****************
795 // Defines tracking media parameters.
796 //
797 Float_t epsil = .001; // Tracking precision,
798 Float_t stemax = -0.01; // Maximum displacement for multiple scat
799 Float_t tmaxfd = -20.; // Maximum angle due to field deflection
800 Float_t deemax = -.3; // Maximum fractional energy loss, DLS
801 Float_t stmin = -.8;
802 // ***************
803 //
804 // Beryllium
805
806 AliMedium(5, "BE", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
807
808 // Carbon
809 AliMedium(6, "C", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
810 //
811 // Aluminum
812 AliMedium(9, "ALU", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
813 //
814 // Air
815 AliMedium(15, "AIR", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
816 //
817 // Vacuum
818 AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
819 //
820 // Steel
821 AliMedium(19, "INOX", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
822 //
823 // Getter
824 AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
825 //
826 // AlBe - Aloy
827 AliMedium(21, "AlBe" , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
828 //
829 // Polyamid
830 AliMedium(22, "PA" , 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
831
832}
833
834
835
836
837
838
839
840
841
842