1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //-------------------------------------------------------------------------
20 // This version uses TGeo
22 //-------------------------------------------------------------------------
24 #include <Riostream.h>
27 #include <TVirtualMC.h>
28 #include <TGeoManager.h>
29 #include <TGeoVolume.h>
30 #include <TGeoTorus.h>
33 #include <TGeoCompositeShape.h>
37 #include "AliPIPEvGEO.h"
43 //_____________________________________________________________________________
44 AliPIPEvGEO::AliPIPEvGEO()
49 //_____________________________________________________________________________
50 AliPIPEvGEO::AliPIPEvGEO(const char *name, const char *title)
57 //___________________________________________
58 void AliPIPEvGEO::CreateGeometry()
62 <img src="picts/pipe.gif">
69 <img src="picts/tree_pipe.gif">
74 // The ALICE central beam-pipe according to drawing LHCVC2C_0001
75 // Drawings of sub-elements:
77 // Pos 7 - Minimised Flange: LHCVFX_P0025
78 // Pos 6 - Standard Flange: STDVFUHV0009
79 // Pos 8 - Bellow: LHCVBX__0001
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
89 AliDebug(1,"Create PIPEv0 geometry");
90 Int_t *idtmed = fIdtmed->GetArray();
98 // Rotation by 180 deg
99 AliMatrix(idrotm[2012],90.,180., 90., 90.,180., 0.);
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;
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.;
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;
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;
120 // Bulge of the Be-Stainless Steel adaptor Tube [Pos 2]
121 const Float_t kCP1BeStRo = 3.05;
123 // Length of bulge [Pos 2]
124 const Float_t kCP1BulgeLength = 0.50;
126 // Distance between bulges [Pos 2]
127 const Float_t kCP1BulgeBulgeDistance = 1.00;
130 const Float_t kCP1BeLength = kCP1Length - 2. * kCP1BeStAdaptorLength;
132 // CP/1 Mother volume
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");
143 cpTube[1] = kCP1BeRo;
144 cpTube[2] = kCP1BeLength / 2.;
145 gMC->Gsvolu("Q1BE","TUBE", idtmed[kBe], cpTube, 3);
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");
152 // CP/1 Be-Stainless Steel adaptor tube
158 cpcon[3 ] = - kCP1BeStAdaptorLength / 2.;
160 cpcon[5 ] = kCP1BeStRo;
162 cpcon[6 ] = cpcon[3] + kCP1BulgeLength;
164 cpcon[8 ] = kCP1BeStRo;
166 cpcon[9 ] = cpcon[6];
168 cpcon[11] = kCP1BeRo;
169 // 4 Between the bulges
170 cpcon[12] = cpcon[9] + kCP1BulgeBulgeDistance;
172 cpcon[14] = kCP1BeRo;
174 cpcon[15] = cpcon[12];
176 cpcon[17] = kCP1BeStRo;
178 cpcon[18] = cpcon[15] + kCP1BulgeLength;
180 cpcon[20] = kCP1BeStRo;
182 cpcon[21] = cpcon[18] + kCP1BulgeLength;
184 cpcon[23] = kCP1BeRo;
186 cpcon[24] = kCP1BeStAdaptorLength / 2.;
188 cpcon[26] = kCP1BeRo;
190 gMC->Gsvolu("Q1AT","PCON", idtmed[kInox], cpcon, 27);
194 cpTube[1] = kCP1BeRi;
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");
207 // Fixed Point tube [Pos 5]
209 // Inner and outer radii of the Stainless Steel pipe
210 const Float_t kCP2StRi = 2.90;
211 const Float_t kCP2StRo = 2.98;
213 // Transition to central Be-pipe (Bulge)
215 const Float_t kCP2BulgeLength = 0.80;
217 // Bulge outer radius
218 const Float_t kCP2BulgeRo = 3.05;
220 // Fixed Point at z = 391.7 (IP)
222 // Position of fixed point
223 const Float_t kCP2FixedPointZ = 8.30;
225 // Outer radius of fixed point
226 const Float_t kCP2FixedPointRo = 3.50;
228 // Length of fixed point
229 const Float_t kCP2FixedPointLength = 0.60;
231 // Fixed Flange [Pos 6]
233 // Fixed flange outer radius
234 const Float_t kCP2FixedFlangeRo = 7.60;
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;
245 // Fixed flange bulge
247 const Float_t kCP2FixedFlangeBulgeRo = 3.00;
250 const Float_t kCP2FixedFlangeBulgeLength = 2.00;
252 // CP/2 Mother Volume
258 cpcon[3 ] = - kCP2Length / 2.;
260 cpcon[5 ] = kCP2FixedFlangeRo;
262 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeLength;
264 cpcon[8 ] = kCP2FixedFlangeRo;
265 // 3 Straight section between Flange and Fixed Point
266 cpcon[9 ] = cpcon[6];
268 cpcon[11] = kCP2FixedFlangeBulgeRo;
270 cpcon[12] = cpcon[3] + kCP2FixedPointZ - kCP2FixedPointLength / 2.;
272 cpcon[14] = kCP2FixedFlangeBulgeRo;
274 cpcon[15] = cpcon[12];
276 cpcon[17] = kCP2FixedPointRo;
278 cpcon[18] = cpcon[15] + kCP2FixedPointLength;
280 cpcon[20] = kCP2FixedPointRo;
281 // 7 Straight section between Fixed Point and transition bulge
282 cpcon[21] = cpcon[18];
284 cpcon[23] = kCP2BulgeRo;
286 cpcon[24] = kCP2Length / 2.;
288 cpcon[26] = kCP2BulgeRo;
289 gMC->Gsvolu("Q2MO","PCON", idtmed[kAir], cpcon, 27);
291 gMC->Gspos("Q2MO", 1, "ALIC", 0., 0., dz, 0, "ONLY");
293 // CP/2 Fixed Flange [Pos 6]
299 cpcon[3 ] = - kCP2FixedFlangeLength / 2.;
301 cpcon[5 ] = kCP2FixedFlangeRo;
303 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1];
305 cpcon[8 ] = kCP2FixedFlangeRo;
307 cpcon[9 ] = cpcon[6];
308 cpcon[10] = kCP2FixedFlangeRi;
309 cpcon[11] = kCP2FixedFlangeRo;
311 cpcon[12] = - cpcon[3];
312 cpcon[13] = kCP2FixedFlangeRi;
313 cpcon[14] = kCP2FixedFlangeRo;
314 gMC->Gsvolu("Q2FL","PCON", idtmed[kInox], cpcon, 15);
316 // Vacuum to be placed into Fixed Flange
321 cpcon[3 ] = - (kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]) / 2.;
323 cpcon[5 ] = kCP2FixedFlangeRi;
325 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0];
327 cpcon[8 ] = kCP2FixedFlangeRi;
329 cpcon[9 ] = cpcon[6];
331 cpcon[11] = kCP2FixedFlangeBulgeRi;
333 cpcon[12] = -cpcon[3];
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");
340 dz = - kCP2Length / 2. + kCP2FixedFlangeLength / 2.;
341 gMC->Gspos("Q2FL", 1, "Q2MO", 0., 0., dz, 0, "ONLY");
343 // CP/2 Beam pipe with fixed point and transition bulges
348 // 1 Bulge at transition to flange
349 cpcon[3 ] = - (kCP2Length - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) / 2.;
351 cpcon[5 ] = kCP2FixedFlangeBulgeRo;
353 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeBulgeLength;
355 cpcon[8 ] = kCP2FixedFlangeBulgeRo;
356 // 3 Straight section between Bulge and Fixed Point
357 cpcon[9 ] = cpcon[6];
359 cpcon[11] = kCP2StRo;
361 cpcon[12] = cpcon[3] + (kCP2FixedPointZ - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) - kCP2FixedPointLength / 2.;
363 cpcon[14] = kCP2StRo;
365 cpcon[15] = cpcon[12];
367 cpcon[17] = kCP2FixedPointRo;
369 cpcon[18] = cpcon[15] + kCP2FixedPointLength;
371 cpcon[20] = kCP2FixedPointRo;
372 // 7 Straight section between Fixed Point and transition bulge
373 cpcon[21] = cpcon[18];
375 cpcon[23] = kCP2StRo;
377 cpcon[24] = - cpcon[3] - kCP2BulgeLength;
379 cpcon[26] = kCP2StRo;
380 // 9 Bulge at transition to Be pipe
381 cpcon[27] = cpcon[24];
383 cpcon[29] = kCP2BulgeRo;
385 cpcon[30] = - cpcon[3];
387 cpcon[32] = kCP2BulgeRo;
388 gMC->Gsvolu("Q2PI","PCON", idtmed[kInox], cpcon, 33);
390 // Vacuum to be place into CP/2 beam pipe
392 cpTube[1] = kCP2StRi;
394 gMC->Gsvolu("Q2V2","TUBE", idtmed[kVac], cpTube, 3);
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");
404 // Adaptor tube [Pos 4]
406 // Adaptor tube length
407 const Float_t kCP3AdaptorTubeLength = 5.50;
409 // Inner and outer radii
410 const Float_t kCP3AdaptorTubeRi = 2.92;
411 const Float_t kCP3AdaptorTubeRo = 3.00;
413 // Bulge at transition point
414 // Inner and outer radii
415 const Float_t kCP3AdaptorTubeBulgeRi = 2.90;
416 const Float_t kCP3AdaptorTubeBulgeRo = 3.05;
419 const Float_t kCP3AdaptorTubeBulgeLength = 0.80;
424 const Float_t kCP3BellowLength = 13.00;
426 const Float_t kCP3BellowRo = 3.6;
428 const Float_t kCP3BellowRi = 2.8;
430 const Int_t kCP3NumberOfPlies = 18;
431 // Length of undulated region
432 const Float_t kCP3BellowUndulatedLength = 8.30;
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;
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;
445 // Tube between bellows [Pos 3]
448 const Float_t kCP3TubeLength = 4.00;
450 // Minimised fixed flange [Pos 7]
452 // Length of flange connection tube
453 const Float_t kCP3FlangeConnectorLength = 5.0 - 1.4;
455 const Float_t kCP3FlangeLength = 1.40;
457 const Float_t kCP3FlangeRo = 4.30;
460 // CP/3 Mother volume
465 // 1 From transition to first bellow
466 cpcon[3 ] = - kCP3Length / 2.;
468 cpcon[5 ] = kCP3AdaptorTubeBulgeRo;
470 cpcon[6 ] = cpcon[3] + kCP3BellowConnectionLength + kCP3AdaptorTubeLength;
472 cpcon[8 ] = kCP3AdaptorTubeBulgeRo;
474 cpcon[9 ] = cpcon[6];
476 cpcon[11] = kCP3BellowRo;
478 cpcon[12] = cpcon[9] + kCP3BellowUndulatedLength;
480 cpcon[14] = kCP3BellowRo;
481 // 5 Connection between the two bellows
482 cpcon[15] = cpcon[12];
484 cpcon[17] = kCP3AdaptorTubeBulgeRo;
486 cpcon[18] = cpcon[15] + 2. * kCP3BellowConnectionLength + kCP3TubeLength;
488 cpcon[20] = kCP3AdaptorTubeBulgeRo;
490 cpcon[21] = cpcon[18];
492 cpcon[23] = kCP3BellowRo;
494 cpcon[24] = cpcon[21] + kCP3BellowUndulatedLength;
496 cpcon[26] = kCP3BellowRo;
497 // 9 Pipe between second Bellow and Flange
498 cpcon[27] = cpcon[24];
500 cpcon[29] = kCP3AdaptorTubeBulgeRo;
502 cpcon[30] = cpcon[27] + kCP3BellowConnectionLength + kCP3FlangeConnectorLength;
504 cpcon[32] = kCP3AdaptorTubeBulgeRo;
506 cpcon[33] = cpcon[30];
508 cpcon[35] = kCP3FlangeRo;
510 cpcon[36] = - cpcon[3];
512 cpcon[38] = kCP3FlangeRo;
514 gMC->Gsvolu("Q3MO","PCON", idtmed[kAir], cpcon, 39);
516 gMC->Gspos("Q3MO", 1, "ALIC", 0., 0., dz, 0, "ONLY");
523 // 1 Bulge at transition
524 cpcon[3 ] = - kCP3AdaptorTubeLength / 2.;
526 cpcon[5 ] = kCP3AdaptorTubeBulgeRo;
528 cpcon[6 ] = cpcon[3] + kCP3AdaptorTubeBulgeLength;
530 cpcon[8 ] = kCP3AdaptorTubeBulgeRo;
532 cpcon[9 ] = cpcon[6];
534 cpcon[11] = kCP3AdaptorTubeRo;
536 cpcon[12] = - cpcon[3];
538 cpcon[14] = kCP3AdaptorTubeRo;
539 gMC->Gsvolu("Q3ATO","PCON", idtmed[kVac], cpcon, 15);
541 // 1 Bulge at transition
542 cpcon[4 ] = kCP3AdaptorTubeBulgeRi;
544 cpcon[7 ] = kCP3AdaptorTubeBulgeRi;;
546 cpcon[10] = kCP3AdaptorTubeRi;
548 cpcon[13] = kCP3AdaptorTubeRi;
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");
555 // CP/3 Bellow section
557 // TGeoMedium* mAir = gGeoManager->GetMedium("AIR");
558 TGeoMedium* mVacuum = gGeoManager->GetMedium("VACUUM");
559 TGeoMedium* mSteel = gGeoManager->GetMedium("INOX");
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");
569 TGeoCompositeShape* upperPlieO = new TGeoCompositeShape("upperPlieO", "TorusUO*TubeU");
570 TGeoCompositeShape* upperPlieI = new TGeoCompositeShape("upperPlieI", "TorusUI*TubeU");
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.));
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");
584 TGeoCompositeShape* lowerPlieO = new TGeoCompositeShape("lowerPlieO", "TorusLO*TubeL");
585 TGeoCompositeShape* lowerPlieI = new TGeoCompositeShape("lowerPlieI", "TorusLI*TubeL");
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.));
592 // Connection between upper and lower part of undulation
593 TGeoVolume* wiggleC1 = new TGeoVolume("Q3WCO1",
594 new TGeoTube(kCP3BellowRi + kCP3PlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.),
596 TGeoVolume* wiggleC2 = new TGeoVolume("Q3WCO2",
597 new TGeoTube(kCP3BellowRi + kCP3ConnectionPlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.),
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");
608 TGeoCompositeShape* connectionPlieO = new TGeoCompositeShape("connectionPlieO", "TorusCO*TubeC");
609 TGeoCompositeShape* connectionPlieI = new TGeoCompositeShape("connectionPlieI", "TorusCI*TubeC");
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.));
616 TGeoVolume* connectionPipeO = new TGeoVolume("Q3BECO",
617 new TGeoTube(0., kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.),
619 TGeoVolume* connectionPipeI = new TGeoVolume("Q3BECI",
620 new TGeoTube(kCP3AdaptorTubeRi, kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.),
623 connectionPipeO->AddNode(connectionPipeI, 1, new TGeoTranslation(0., 0., 0.));
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);
639 TGeoVolume* bellowMother = new TGeoVolume("Q3BeMO", bellowMotherPC, mVacuum);
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;
647 bellowMother->AddNode(wiggleC1, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.));
649 bellowMother->AddNode(wiggleC2, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.));
652 bellowMother->AddNode(wiggleUO, iw + 1, new TGeoTranslation(0., 0., zpos));
656 bellowMother->AddNode(wiggleC1, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.));
658 bellowMother->AddNode(wiggleC2, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.));
662 bellowMother->AddNode(wiggleLO, iw + 1, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness));
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));
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));
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));
683 // Beam pipe section between bellows
686 cpTube[1] = kCP3AdaptorTubeRo;
687 cpTube[2] = kCP3TubeLength / 2.;
688 gMC->Gsvolu("Q3BCO","TUBE", idtmed[kVac], cpTube, 3);
690 cpTube[0] = kCP3AdaptorTubeRi;
691 cpTube[1] = kCP3AdaptorTubeRo;
692 cpTube[2] = kCP3TubeLength / 2.;
693 gMC->Gsvolu("Q3BCI","TUBE", idtmed[kInox], cpTube, 3);
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");
700 // CP3 Minimised Flange
706 cpcon[3 ] = - (kCP3FlangeConnectorLength + kCP3FlangeLength) / 2.;
708 cpcon[5 ] = kCP3AdaptorTubeRo;
710 cpcon[6 ] = cpcon[3] + kCP3FlangeConnectorLength;
712 cpcon[8 ] = kCP3AdaptorTubeRo;
714 cpcon[9 ] = cpcon[6];
716 cpcon[11] = kCP3FlangeRo;
718 cpcon[12] = - cpcon[3];
720 cpcon[14] = kCP3FlangeRo;
721 gMC->Gsvolu("Q3MFO","PCON", idtmed[kVac], cpcon, 15);
723 cpcon[4 ] = cpcon[7 ] = cpcon [10] = cpcon[13] = kCP3AdaptorTubeRi;
724 gMC->Gsvolu("Q3MFI","PCON", idtmed[kInox], cpcon, 15);
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");
733 //___________________________________________
734 void AliPIPEvGEO::CreateMaterials()
737 // Define materials for beam pipe
740 AliDebugClass(1,"Create PIPEvGEO materials");
741 Int_t isxfld = gAlice->Field()->Integ();
742 Float_t sxmgmx = gAlice->Field()->Max();
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 };
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};
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.};
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;
767 AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
770 AliMaterial(6, "CARBON$ ", 12.01, 6., 2.265, 18.8, 49.9);
773 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
776 AliMixture(15, "AIR$ ", aAir, zAir, dAir, 4, wAir);
779 AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
782 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
784 // reduced density steel to approximate pump getter material
785 AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
788 AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
791 AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA);
795 // Defines tracking media parameters.
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
806 AliMedium(5, "BE", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
809 AliMedium(6, "C", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
812 AliMedium(9, "ALU", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
815 AliMedium(15, "AIR", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
818 AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
821 AliMedium(19, "INOX", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
824 AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
827 AliMedium(21, "AlBe" , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
830 AliMedium(22, "PA" , 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);