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"
42 //_____________________________________________________________________________
43 AliPIPEvGEO::AliPIPEvGEO()
48 //_____________________________________________________________________________
49 AliPIPEvGEO::AliPIPEvGEO(const char *name, const char *title)
56 //___________________________________________
57 void AliPIPEvGEO::CreateGeometry()
61 <img src="picts/pipe.gif">
68 <img src="picts/tree_pipe.gif">
73 // The ALICE central beam-pipe according to drawing LHCVC2C_0001
74 // Drawings of sub-elements:
76 // Pos 7 - Minimised Flange: LHCVFX_P0025
77 // Pos 6 - Standard Flange: STDVFUHV0009
78 // Pos 8 - Bellow: LHCVBX__0001
80 // Absolute z-coordinates -82.0 - 400.0 cm
81 // Total length: 482.0 cm
82 // It consists of 3 main parts:
83 // CP/1 The central Be pipe: 405.0 cm
84 // CP/2 The flange on the non-absorber side: 36.5 cm
85 // CP/3 The double-bellow and flange on the absorber side: 40.5 cm
88 if(fDebug) printf("%s: Create PIPEv0 geometry \n",ClassName());
89 Int_t *idtmed = fIdtmed->GetArray();
97 // Rotation by 180 deg
98 AliMatrix(idrotm[2012],90.,180., 90., 90.,180., 0.);
101 const Float_t kCPz0 = -400.0;
102 const Float_t kCP1Length = 405.0;
103 const Float_t kCP2Length = 36.6;
104 const Float_t kCP3Length = 40.5;
106 const Float_t kCP2pos = kCPz0 + kCP2Length / 2.;
107 const Float_t kCP1pos = kCPz0 + kCP2Length + kCP1Length / 2.;
108 const Float_t kCP3pos = kCPz0 + kCP2Length + kCP1Length + kCP3Length/2.;
112 // Inner and outer radii of the Be-section [Pos 1]
113 const Float_t kCP1BeRi = 2.90;
114 const Float_t kCP1BeRo = 2.98;
116 // Be-Stainless Steel adaptor tube [Pos 2] at both ends of the Be-section. Length 5 cm
117 const Float_t kCP1BeStAdaptorLength = 5.00;
119 // Bulge of the Be-Stainless Steel adaptor Tube [Pos 2]
120 const Float_t kCP1BeStRo = 3.05;
122 // Length of bulge [Pos 2]
123 const Float_t kCP1BulgeLength = 0.50;
125 // Distance between bulges [Pos 2]
126 const Float_t kCP1BulgeBulgeDistance = 1.00;
129 const Float_t kCP1BeLength = kCP1Length - 2. * kCP1BeStAdaptorLength;
131 // CP/1 Mother volume
133 cpTube[1] = kCP1BeStRo;
134 cpTube[2] = kCP1Length / 2.;
135 gMC->Gsvolu("Q1MO","TUBE", idtmed[kAir], cpTube, 3);
136 gMC->Gspos("Q1MO", 1, "ALIC", 0., 0., kCP1pos, 0, "ONLY");
142 cpTube[1] = kCP1BeRo;
143 cpTube[2] = kCP1BeLength / 2.;
144 gMC->Gsvolu("Q1BE","TUBE", idtmed[kBe], cpTube, 3);
146 cpTube[1] = kCP1BeRi;
147 gMC->Gsvolu("Q1BV","TUBE", idtmed[kVac], cpTube, 3);
148 gMC->Gspos("Q1BV", 1, "Q1BE", 0., 0., 0., 0, "ONLY");
149 gMC->Gspos("Q1BE", 1, "Q1MO", 0., 0., 0., 0, "ONLY");
151 // CP/1 Be-Stainless Steel adaptor tube
157 cpcon[3 ] = - kCP1BeStAdaptorLength / 2.;
159 cpcon[5 ] = kCP1BeStRo;
161 cpcon[6 ] = cpcon[3] + kCP1BulgeLength;
163 cpcon[8 ] = kCP1BeStRo;
165 cpcon[9 ] = cpcon[6];
167 cpcon[11] = kCP1BeRo;
168 // 4 Between the bulges
169 cpcon[12] = cpcon[9] + kCP1BulgeBulgeDistance;
171 cpcon[14] = kCP1BeRo;
173 cpcon[15] = cpcon[12];
175 cpcon[17] = kCP1BeStRo;
177 cpcon[18] = cpcon[15] + kCP1BulgeLength;
179 cpcon[20] = kCP1BeStRo;
181 cpcon[21] = cpcon[18] + kCP1BulgeLength;
183 cpcon[23] = kCP1BeRo;
185 cpcon[24] = kCP1BeStAdaptorLength / 2.;
187 cpcon[26] = kCP1BeRo;
189 gMC->Gsvolu("Q1AT","PCON", idtmed[kInox], cpcon, 27);
193 cpTube[1] = kCP1BeRi;
195 gMC->Gsvolu("Q1AV","TUBE", idtmed[kVac], cpTube, 3);
196 gMC->Gspos("Q1AV", 1, "Q1AT", 0., 0., 0., 0, "ONLY");
197 // Position adaptor tube at both ends
198 dz = kCP1Length / 2. - kCP1BeStAdaptorLength / 2.;
199 gMC->Gspos("Q1AT", 1, "Q1MO", 0., 0., -dz, 0, "ONLY");
200 gMC->Gspos("Q1AT", 2, "Q1MO", 0., 0., dz, idrotm[2012], "ONLY");
206 // Fixed Point tube [Pos 5]
208 // Inner and outer radii of the Stainless Steel pipe
209 const Float_t kCP2StRi = 2.90;
210 const Float_t kCP2StRo = 2.98;
212 // Transition to central Be-pipe (Bulge)
214 const Float_t kCP2BulgeLength = 0.80;
216 // Bulge outer radius
217 const Float_t kCP2BulgeRo = 3.05;
219 // Fixed Point at z = 391.7 (IP)
221 // Position of fixed point
222 const Float_t kCP2FixedPointZ = 8.30;
224 // Outer radius of fixed point
225 const Float_t kCP2FixedPointRo = 3.50;
227 // Length of fixed point
228 const Float_t kCP2FixedPointLength = 0.60;
230 // Fixed Flange [Pos 6]
232 // Fixed flange outer radius
233 const Float_t kCP2FixedFlangeRo = 7.60;
235 // Fixed flange inner radius
236 const Float_t kCP2FixedFlangeRi = 3.00;
237 // Fixed flange inner radius bulge
238 const Float_t kCP2FixedFlangeBulgeRi = 2.90;
239 // Fixed flange lengths of sections at inner radius
240 const Float_t kCP2FixedFlangeRecessLengths[3] ={1., 0.08, 0.9};
241 // Fixed flange length
242 const Float_t kCP2FixedFlangeLength = 1.98;
244 // Fixed flange bulge
246 const Float_t kCP2FixedFlangeBulgeRo = 3.00;
249 const Float_t kCP2FixedFlangeBulgeLength = 2.00;
251 // CP/2 Mother Volume
257 cpcon[3 ] = - kCP2Length / 2.;
259 cpcon[5 ] = kCP2FixedFlangeRo;
261 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeLength;
263 cpcon[8 ] = kCP2FixedFlangeRo;
264 // 3 Straight section between Flange and Fixed Point
265 cpcon[9 ] = cpcon[6];
267 cpcon[11] = kCP2FixedFlangeBulgeRo;
269 cpcon[12] = cpcon[3] + kCP2FixedPointZ - kCP2FixedPointLength / 2.;
271 cpcon[14] = kCP2FixedFlangeBulgeRo;
273 cpcon[15] = cpcon[12];
275 cpcon[17] = kCP2FixedPointRo;
277 cpcon[18] = cpcon[15] + kCP2FixedPointLength;
279 cpcon[20] = kCP2FixedPointRo;
280 // 7 Straight section between Fixed Point and transition bulge
281 cpcon[21] = cpcon[18];
283 cpcon[23] = kCP2BulgeRo;
285 cpcon[24] = kCP2Length / 2.;
287 cpcon[26] = kCP2BulgeRo;
288 gMC->Gsvolu("Q2MO","PCON", idtmed[kAir], cpcon, 27);
290 gMC->Gspos("Q2MO", 1, "ALIC", 0., 0., dz, 0, "ONLY");
292 // CP/2 Fixed Flange [Pos 6]
298 cpcon[3 ] = - kCP2FixedFlangeLength / 2.;
300 cpcon[5 ] = kCP2FixedFlangeRo;
302 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1];
304 cpcon[8 ] = kCP2FixedFlangeRo;
306 cpcon[9 ] = cpcon[6];
307 cpcon[10] = kCP2FixedFlangeRi;
308 cpcon[11] = kCP2FixedFlangeRo;
310 cpcon[12] = - cpcon[3];
311 cpcon[13] = kCP2FixedFlangeRi;
312 cpcon[14] = kCP2FixedFlangeRo;
313 gMC->Gsvolu("Q2FL","PCON", idtmed[kInox], cpcon, 15);
315 // Vacuum to be placed into Fixed Flange
320 cpcon[3 ] = - (kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]) / 2.;
322 cpcon[5 ] = kCP2FixedFlangeRi;
324 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0];
326 cpcon[8 ] = kCP2FixedFlangeRi;
328 cpcon[9 ] = cpcon[6];
330 cpcon[11] = kCP2FixedFlangeBulgeRi;
332 cpcon[12] = -cpcon[3];
334 cpcon[14] = kCP2FixedFlangeBulgeRi;
335 gMC->Gsvolu("Q2V1","PCON", idtmed[kVac], cpcon, 15);
336 dz = - kCP2FixedFlangeLength / 2. - cpcon[3];
337 gMC->Gspos("Q2V1", 1, "Q2FL", 0., 0., dz, 0, "ONLY");
339 dz = - kCP2Length / 2. + kCP2FixedFlangeLength / 2.;
340 gMC->Gspos("Q2FL", 1, "Q2MO", 0., 0., dz, 0, "ONLY");
342 // CP/2 Beam pipe with fixed point and transition bulges
347 // 1 Bulge at transition to flange
348 cpcon[3 ] = - (kCP2Length - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) / 2.;
350 cpcon[5 ] = kCP2FixedFlangeBulgeRo;
352 cpcon[6 ] = cpcon[3] + kCP2FixedFlangeBulgeLength;
354 cpcon[8 ] = kCP2FixedFlangeBulgeRo;
355 // 3 Straight section between Bulge and Fixed Point
356 cpcon[9 ] = cpcon[6];
358 cpcon[11] = kCP2StRo;
360 cpcon[12] = cpcon[3] + (kCP2FixedPointZ - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) - kCP2FixedPointLength / 2.;
362 cpcon[14] = kCP2StRo;
364 cpcon[15] = cpcon[12];
366 cpcon[17] = kCP2FixedPointRo;
368 cpcon[18] = cpcon[15] + kCP2FixedPointLength;
370 cpcon[20] = kCP2FixedPointRo;
371 // 7 Straight section between Fixed Point and transition bulge
372 cpcon[21] = cpcon[18];
374 cpcon[23] = kCP2StRo;
376 cpcon[24] = - cpcon[3] - kCP2BulgeLength;
378 cpcon[26] = kCP2StRo;
379 // 9 Bulge at transition to Be pipe
380 cpcon[27] = cpcon[24];
382 cpcon[29] = kCP2BulgeRo;
384 cpcon[30] = - cpcon[3];
386 cpcon[32] = kCP2BulgeRo;
387 gMC->Gsvolu("Q2PI","PCON", idtmed[kInox], cpcon, 33);
389 // Vacuum to be place into CP/2 beam pipe
391 cpTube[1] = kCP2StRi;
393 gMC->Gsvolu("Q2V2","TUBE", idtmed[kVac], cpTube, 3);
395 gMC->Gspos("Q2V2", 1, "Q2PI", 0., 0., 0., 0, "ONLY");
396 dz = (kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]) / 2.;
397 gMC->Gspos("Q2PI", 1, "Q2MO", 0., 0., dz, 0, "ONLY");
403 // Adaptor tube [Pos 4]
405 // Adaptor tube length
406 const Float_t kCP3AdaptorTubeLength = 5.50;
408 // Inner and outer radii
409 const Float_t kCP3AdaptorTubeRi = 2.92;
410 const Float_t kCP3AdaptorTubeRo = 3.00;
412 // Bulge at transition point
413 // Inner and outer radii
414 const Float_t kCP3AdaptorTubeBulgeRi = 2.90;
415 const Float_t kCP3AdaptorTubeBulgeRo = 3.05;
418 const Float_t kCP3AdaptorTubeBulgeLength = 0.80;
423 const Float_t kCP3BellowLength = 13.00;
425 const Float_t kCP3BellowRo = 3.6;
427 const Float_t kCP3BellowRi = 2.8;
429 const Int_t kCP3NumberOfPlies = 18;
430 // Length of undulated region
431 const Float_t kCP3BellowUndulatedLength = 8.30;
433 const Float_t kCP3PlieThickness = 0.02;
434 // Connection Plie radies (at transition been undulated region and beam pipe)
435 const Float_t kCP3ConnectionPlieR = 0.21;
437 // const Float_t kCP3PlieR = 0.118286;
438 const Float_t kCP3PlieR =
439 (kCP3BellowUndulatedLength - 4. * kCP3ConnectionPlieR + 2. * kCP3PlieThickness + (2. * kCP3NumberOfPlies - 2.) * kCP3PlieThickness)
440 / (4. * kCP3NumberOfPlies - 2.);
441 // Length of connection pipe
442 const Float_t kCP3BellowConnectionLength = 2.35;
444 // Tube between bellows [Pos 3]
447 const Float_t kCP3TubeLength = 4.00;
449 // Minimised fixed flange [Pos 7]
451 // Length of flange connection tube
452 const Float_t kCP3FlangeConnectorLength = 5.0 - 1.4;
454 const Float_t kCP3FlangeLength = 1.40;
456 const Float_t kCP3FlangeRo = 4.30;
459 // CP/3 Mother volume
464 // 1 From transition to first bellow
465 cpcon[3 ] = - kCP3Length / 2.;
467 cpcon[5 ] = kCP3AdaptorTubeBulgeRo;
469 cpcon[6 ] = cpcon[3] + kCP3BellowConnectionLength + kCP3AdaptorTubeLength;
471 cpcon[8 ] = kCP3AdaptorTubeBulgeRo;
473 cpcon[9 ] = cpcon[6];
475 cpcon[11] = kCP3BellowRo;
477 cpcon[12] = cpcon[9] + kCP3BellowUndulatedLength;
479 cpcon[14] = kCP3BellowRo;
480 // 5 Connection between the two bellows
481 cpcon[15] = cpcon[12];
483 cpcon[17] = kCP3AdaptorTubeBulgeRo;
485 cpcon[18] = cpcon[15] + 2. * kCP3BellowConnectionLength + kCP3TubeLength;
487 cpcon[20] = kCP3AdaptorTubeBulgeRo;
489 cpcon[21] = cpcon[18];
491 cpcon[23] = kCP3BellowRo;
493 cpcon[24] = cpcon[21] + kCP3BellowUndulatedLength;
495 cpcon[26] = kCP3BellowRo;
496 // 9 Pipe between second Bellow and Flange
497 cpcon[27] = cpcon[24];
499 cpcon[29] = kCP3AdaptorTubeBulgeRo;
501 cpcon[30] = cpcon[27] + kCP3BellowConnectionLength + kCP3FlangeConnectorLength;
503 cpcon[32] = kCP3AdaptorTubeBulgeRo;
505 cpcon[33] = cpcon[30];
507 cpcon[35] = kCP3FlangeRo;
509 cpcon[36] = - cpcon[3];
511 cpcon[38] = kCP3FlangeRo;
513 gMC->Gsvolu("Q3MO","PCON", idtmed[kAir], cpcon, 39);
515 gMC->Gspos("Q3MO", 1, "ALIC", 0., 0., dz, 0, "ONLY");
522 // 1 Bulge at transition
523 cpcon[3 ] = - kCP3AdaptorTubeLength / 2.;
525 cpcon[5 ] = kCP3AdaptorTubeBulgeRo;
527 cpcon[6 ] = cpcon[3] + kCP3AdaptorTubeBulgeLength;
529 cpcon[8 ] = kCP3AdaptorTubeBulgeRo;
531 cpcon[9 ] = cpcon[6];
533 cpcon[11] = kCP3AdaptorTubeRo;
535 cpcon[12] = - cpcon[3];
537 cpcon[14] = kCP3AdaptorTubeRo;
538 gMC->Gsvolu("Q3ATO","PCON", idtmed[kVac], cpcon, 15);
540 // 1 Bulge at transition
541 cpcon[4 ] = kCP3AdaptorTubeBulgeRi;
543 cpcon[7 ] = kCP3AdaptorTubeBulgeRi;;
545 cpcon[10] = kCP3AdaptorTubeRi;
547 cpcon[13] = kCP3AdaptorTubeRi;
549 gMC->Gsvolu("Q3ATI","PCON", idtmed[kInox], cpcon, 15);
550 gMC->Gspos("Q3ATI", 1, "Q3ATO", 0., 0., 0., 0, "ONLY");
551 dz = - kCP3Length / 2. + kCP3AdaptorTubeLength / 2.;
552 gMC->Gspos("Q3ATO", 1, "Q3MO", 0., 0., dz, 0, "ONLY");
554 // CP/3 Bellow section
556 // TGeoMedium* mAir = gGeoManager->GetMedium("AIR");
557 TGeoMedium* mVacuum = gGeoManager->GetMedium("VACUUM");
558 TGeoMedium* mSteel = gGeoManager->GetMedium("INOX");
560 // Upper part of the undulation
561 TGeoTorus* plieTorusUO = new TGeoTorus(kCP3BellowRo - kCP3PlieR, 0. , kCP3PlieR);
562 plieTorusUO->SetName("TorusUO");
563 TGeoTorus* plieTorusUI = new TGeoTorus(kCP3BellowRo - kCP3PlieR, kCP3PlieR - kCP3PlieThickness, kCP3PlieR);
564 plieTorusUI->SetName("TorusUI");
565 TGeoTube* plieTubeU = new TGeoTube (kCP3BellowRo - kCP3PlieR, kCP3BellowRo, kCP3PlieR / 2.);
566 plieTubeU->SetName("TubeU");
568 TGeoCompositeShape* upperPlieO = new TGeoCompositeShape("upperPlieO", "TorusUO*TubeU");
569 TGeoCompositeShape* upperPlieI = new TGeoCompositeShape("upperPlieI", "TorusUI*TubeU");
571 TGeoVolume* wiggleUO = new TGeoVolume("Q3WUO", upperPlieO, mVacuum);
572 TGeoVolume* wiggleUI = new TGeoVolume("Q3WUI", upperPlieI, mSteel);
573 wiggleUO->AddNode(wiggleUI, 1, new TGeoTranslation(0., 0., 0.));
575 // Lower part of the undulation
576 TGeoTorus* plieTorusLO = new TGeoTorus(kCP3BellowRi + kCP3PlieR, 0. , kCP3PlieR);
577 plieTorusLO->SetName("TorusLO");
578 TGeoTorus* plieTorusLI = new TGeoTorus(kCP3BellowRi + kCP3PlieR, kCP3PlieR - kCP3PlieThickness, kCP3PlieR);
579 plieTorusLI->SetName("TorusLI");
580 TGeoTube* plieTubeL = new TGeoTube (kCP3BellowRi, kCP3BellowRi + kCP3PlieR, kCP3PlieR);
581 plieTubeL->SetName("TubeL");
583 TGeoCompositeShape* lowerPlieO = new TGeoCompositeShape("lowerPlieO", "TorusLO*TubeL");
584 TGeoCompositeShape* lowerPlieI = new TGeoCompositeShape("lowerPlieI", "TorusLI*TubeL");
586 TGeoVolume* wiggleLO = new TGeoVolume("Q3WLO", lowerPlieO, mVacuum);
587 TGeoVolume* wiggleLI = new TGeoVolume("Q3WLI", lowerPlieI, mSteel);
588 wiggleLO->AddNode(wiggleLI, 1, new TGeoTranslation(0., 0., 0.));
591 // Connection between upper and lower part of undulation
592 TGeoVolume* wiggleC1 = new TGeoVolume("Q3WCO1",
593 new TGeoTube(kCP3BellowRi + kCP3PlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.),
595 TGeoVolume* wiggleC2 = new TGeoVolume("Q3WCO2",
596 new TGeoTube(kCP3BellowRi + kCP3ConnectionPlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.),
599 // Conncetion between undulated section and beam pipe
600 TGeoTorus* plieTorusCO = new TGeoTorus(kCP3BellowRi + kCP3ConnectionPlieR, 0. , kCP3ConnectionPlieR);
601 plieTorusCO->SetName("TorusCO");
602 TGeoTorus* plieTorusCI = new TGeoTorus(kCP3BellowRi + kCP3ConnectionPlieR, kCP3ConnectionPlieR - kCP3PlieThickness, kCP3ConnectionPlieR);
603 plieTorusCI->SetName("TorusCI");
604 TGeoTube* plieTubeC = new TGeoTube (kCP3BellowRi, kCP3BellowRi + kCP3ConnectionPlieR, kCP3ConnectionPlieR);
605 plieTubeC->SetName("TubeC");
607 TGeoCompositeShape* connectionPlieO = new TGeoCompositeShape("connectionPlieO", "TorusCO*TubeC");
608 TGeoCompositeShape* connectionPlieI = new TGeoCompositeShape("connectionPlieI", "TorusCI*TubeC");
610 TGeoVolume* connectionPO = new TGeoVolume("Q3CPO", connectionPlieO, mVacuum);
611 TGeoVolume* connectionPI = new TGeoVolume("Q3CPI", connectionPlieI, mSteel);
612 connectionPO->AddNode(connectionPI, 1, new TGeoTranslation(0., 0., 0.));
615 TGeoVolume* connectionPipeO = new TGeoVolume("Q3BECO",
616 new TGeoTube(0., kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.),
618 TGeoVolume* connectionPipeI = new TGeoVolume("Q3BECI",
619 new TGeoTube(kCP3AdaptorTubeRi, kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.),
622 connectionPipeO->AddNode(connectionPipeI, 1, new TGeoTranslation(0., 0., 0.));
626 TGeoPcon* bellowMotherPC = new TGeoPcon(0., 360., 6);
627 dz = - kCP3BellowLength / 2;
628 bellowMotherPC->DefineSection(0, dz, 0., kCP3AdaptorTubeRo);
629 dz += kCP3BellowConnectionLength;
630 bellowMotherPC->DefineSection(1, dz, 0., kCP3AdaptorTubeRo);
631 bellowMotherPC->DefineSection(2, dz, 0., kCP3BellowRo);
632 dz = kCP3BellowLength /2. - kCP3BellowConnectionLength;;
633 bellowMotherPC->DefineSection(3, dz, 0., kCP3BellowRo);
634 bellowMotherPC->DefineSection(4, dz, 0., kCP3AdaptorTubeRo);
635 dz += kCP3BellowConnectionLength;
636 bellowMotherPC->DefineSection(5, dz, 0., kCP3AdaptorTubeRo);
638 TGeoVolume* bellowMother = new TGeoVolume("Q3BeMO", bellowMotherPC, mVacuum);
641 Float_t z0 = - kCP3BellowLength / 2. + kCP3BellowConnectionLength + 2. * kCP3ConnectionPlieR - kCP3PlieThickness;
642 Float_t zsh = 4. * kCP3PlieR - 2. * kCP3PlieThickness;
643 for (Int_t iw = 0; iw < 18; iw++) {
644 Float_t zpos = z0 + iw * zsh;
646 bellowMother->AddNode(wiggleC1, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.));
648 bellowMother->AddNode(wiggleC2, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.));
651 bellowMother->AddNode(wiggleUO, iw + 1, new TGeoTranslation(0., 0., zpos));
655 bellowMother->AddNode(wiggleC1, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.));
657 bellowMother->AddNode(wiggleC2, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.));
661 bellowMother->AddNode(wiggleLO, iw + 1, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness));
665 // Add connecting undulation between bellow and connecting pipe
666 dz = - kCP3BellowUndulatedLength / 2. + kCP3ConnectionPlieR;
667 bellowMother->AddNode(connectionPO, 1, new TGeoTranslation(0., 0., dz));
668 bellowMother->AddNode(connectionPO, 2, new TGeoTranslation(0., 0., -dz));
670 // Add connecting pipe
671 dz = - kCP3BellowLength / 2. + kCP3BellowConnectionLength / 2.;
672 bellowMother->AddNode(connectionPipeO, 1, new TGeoTranslation(0., 0., dz));
673 bellowMother->AddNode(connectionPipeO, 2, new TGeoTranslation(0., 0., -dz));
675 // Add bellow to CP/3 mother
676 TGeoVolume* mother = gGeoManager->GetVolume("Q3MO");
677 dz = - kCP3Length / 2. + kCP3AdaptorTubeLength + kCP3BellowLength / 2.;
678 mother->AddNode(bellowMother, 1, new TGeoTranslation(0., 0., dz));
679 dz += (kCP3BellowLength + kCP3TubeLength);
680 mother->AddNode(bellowMother, 2, new TGeoTranslation(0., 0., dz));
682 // Beam pipe section between bellows
685 cpTube[1] = kCP3AdaptorTubeRo;
686 cpTube[2] = kCP3TubeLength / 2.;
687 gMC->Gsvolu("Q3BCO","TUBE", idtmed[kVac], cpTube, 3);
689 cpTube[0] = kCP3AdaptorTubeRi;
690 cpTube[1] = kCP3AdaptorTubeRo;
691 cpTube[2] = kCP3TubeLength / 2.;
692 gMC->Gsvolu("Q3BCI","TUBE", idtmed[kInox], cpTube, 3);
694 gMC->Gspos("Q3BCI", 1, "Q3BCO", 0., 0., 0., 0, "ONLY");
695 dz = - kCP3Length / 2. + kCP3AdaptorTubeLength + kCP3BellowLength + kCP3TubeLength / 2.;
696 gMC->Gspos("Q3BCO", 1, "Q3MO", 0., 0., dz, 0, "ONLY");
699 // CP3 Minimised Flange
705 cpcon[3 ] = - (kCP3FlangeConnectorLength + kCP3FlangeLength) / 2.;
707 cpcon[5 ] = kCP3AdaptorTubeRo;
709 cpcon[6 ] = cpcon[3] + kCP3FlangeConnectorLength;
711 cpcon[8 ] = kCP3AdaptorTubeRo;
713 cpcon[9 ] = cpcon[6];
715 cpcon[11] = kCP3FlangeRo;
717 cpcon[12] = - cpcon[3];
719 cpcon[14] = kCP3FlangeRo;
720 gMC->Gsvolu("Q3MFO","PCON", idtmed[kVac], cpcon, 15);
722 cpcon[4 ] = cpcon[7 ] = cpcon [10] = cpcon[13] = kCP3AdaptorTubeRi;
723 gMC->Gsvolu("Q3MFI","PCON", idtmed[kInox], cpcon, 15);
725 gMC->Gspos("Q3MFI", 1, "Q3MFO", 0., 0., 0., 0, "ONLY");
726 dz = kCP3Length / 2. - (kCP3FlangeConnectorLength + kCP3FlangeLength) / 2.;
727 gMC->Gspos("Q3MFO", 1, "Q3MO", 0., 0., dz, 0, "ONLY");
732 //___________________________________________
733 void AliPIPEvGEO::CreateMaterials()
736 // Define materials for beam pipe
739 if(fDebug) printf("%s: Create PIPEvGEO materials \n",ClassName());
740 Int_t isxfld = gAlice->Field()->Integ();
741 Float_t sxmgmx = gAlice->Field()->Max();
743 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
744 Float_t zsteel[4] = { 26.,24.,28.,14. };
745 Float_t wsteel[4] = { .715,.18,.1,.005 };
747 Float_t aAlBe[2] = { 26.98, 9.01};
748 Float_t zAlBe[2] = { 13.00, 4.00};
749 Float_t wAlBe[2] = { 0.4, 0.6};
752 Float_t aPA[4] = {16., 14., 12., 1.};
753 Float_t zPA[4] = { 8., 7., 6., 1.};
754 Float_t wPA[4] = { 1., 1., 6., 11.};
758 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
759 Float_t zAir[4]={6.,7.,8.,18.};
760 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
761 Float_t dAir = 1.20479E-3;
762 Float_t dAir1 = 1.20479E-10;
766 AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
769 AliMaterial(6, "CARBON$ ", 12.01, 6., 2.265, 18.8, 49.9);
772 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
775 AliMixture(15, "AIR$ ", aAir, zAir, dAir, 4, wAir);
778 AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
781 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
783 // reduced density steel to approximate pump getter material
784 AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
787 AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
790 AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA);
794 // Defines tracking media parameters.
796 Float_t epsil = .001; // Tracking precision,
797 Float_t stemax = -0.01; // Maximum displacement for multiple scat
798 Float_t tmaxfd = -20.; // Maximum angle due to field deflection
799 Float_t deemax = -.3; // Maximum fractional energy loss, DLS
805 AliMedium(5, "BE", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
808 AliMedium(6, "C", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
811 AliMedium(9, "ALU", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
814 AliMedium(15, "AIR", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
817 AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
820 AliMedium(19, "INOX", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
823 AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
826 AliMedium(21, "AlBe" , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
829 AliMedium(22, "PA" , 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);