Clean-up of include files
[u/mrichter/AliRoot.git] / STRUCT / AliPIPEv0.cxx
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 //  Default version
21 //  Author: A.Morsch
22 //-------------------------------------------------------------------------
23
24 #include <Riostream.h>
25
26 #include <TGeoManager.h>
27 #include <TGeoGlobalMagField.h>
28 #include <TSystem.h>
29 #include <TVirtualMC.h>
30 #include <TArrayI.h>
31
32 #include "AliConst.h"
33 #include "AliMagF.h"
34 #include "AliPIPEv0.h"
35 #include "AliRun.h"
36 #include "AliLog.h"
37  
38 ClassImp(AliPIPEv0)
39
40  
41 //_____________________________________________________________________________
42 AliPIPEv0::AliPIPEv0():
43     fPipeMaterial(kBe)   
44 {
45 // Constructor
46 }
47
48 //_____________________________________________________________________________
49 AliPIPEv0::AliPIPEv0(const char *name, const char *title)
50     : AliPIPE(name,title),
51       fPipeMaterial(kBe)   
52 {
53 // Constructor
54 }
55
56  
57 //___________________________________________
58 void AliPIPEv0::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     AliDebugClass(1,"Create PIPEv0 geometry");
74   
75
76     Int_t *idtmed = fIdtmed->GetArray();
77     Float_t ppcon[90], ptube[3], pbox[3];
78     Int_t i=0;
79     
80     
81     Int_t   idrotm[2099];  
82     AliMatrix(idrotm[2001],90.,240.,  0.,  0., 90.,150.);
83     AliMatrix(idrotm[2002],90.,  0.,  0.,  0., 90.,270.);
84     AliMatrix(idrotm[2003],90.,120.,  0.,  0., 90., 30.);
85     AliMatrix(idrotm[2004],90.,315., 90., 45.,  0.,  0.);
86     AliMatrix(idrotm[2005],90.,270., 90.,  0.,  0.,  0.);
87     AliMatrix(idrotm[2006],90.,225., 90.,315.,  0.,  0.);
88     AliMatrix(idrotm[2007],90.,180., 90.,270.,  0.,  0.);
89     AliMatrix(idrotm[2008],90.,135., 90.,225.,  0.,  0.);
90     AliMatrix(idrotm[2009],90., 90., 90.,180.,  0.,  0.);
91     AliMatrix(idrotm[2010],90., 45., 90.,135.,  0.,  0.);
92     idrotm[2011] = 0;
93     AliMatrix(idrotm[2012],90.,180., 90., 90.,180.,  0.);
94     AliMatrix(idrotm[2013],90.,  0., 90., 90.,180.,  0.);
95 //
96 //  Bellow
97 //
98 //  distance between bellows
99 //  total size of bellow section
100     const Float_t kdzb  = 14.6;
101 //  size of undulated region 
102 //  
103 //  Absorber side
104 //   
105 //  distance between bellows
106     const Float_t kdzbbA =  4.6;
107 //  total size of bellow section
108     const Float_t kdzbA  = 14.6;
109 //  size of undulated region 
110     const Float_t kdzubA =  3.75;
111
112 // half-lengths of various beam pipe sections
113 // central Be-Pipe
114     Float_t hlenQbbe1 = 40.;
115     Float_t hlenQbbe2 = 36.5;
116     Float_t hlenQbbe  = (hlenQbbe1+hlenQbbe2)/2.;
117 //
118 //
119 //    Float_t hlenQbt1 = 5.5/2.;
120 //
121 //  Pipe outside central region (non-absorber side)
122     Float_t hlenQbab = 157.5 + 23./2.;
123 //
124 //  Flange non-absorber side
125     Float_t hlenQb29 = 11.5/2.+1.75 + 5.0;
126 //
127 //  Bellow element 
128     Float_t hlenQbe0 = kdzbA;
129 //
130 //  Inox pipe between Be and Bellow (absorber side)
131     Float_t hlenQb24[3] = {11.3/2., 1.8, 3.3};
132 //
133 //
134     Float_t hlenQb28 = (800.-hlenQbbe1-2.*hlenQbab-4.*hlenQb29-2.*hlenQbe0)/2.;
135 //
136 //  Position of the pump
137     Float_t zPump = hlenQbbe1+2.*hlenQbab+2.*hlenQb29+kdzb;
138 //
139 //  Inner beam pipe radius
140 //  Be
141     const Float_t kRinBe = 2.9;
142 //  Steel
143     const Float_t kRinSt = 2.9;
144 //  Bellow
145     const Float_t kRinSB = 2.92;
146 //
147 //  Outer beam pipe radius
148 //  Be
149     const Float_t kRoutBe = 2.98;
150 //  Steel
151     const Float_t kRoutSt = 2.98;
152 //  Bellow
153     const Float_t kRoutSB = 3.00;
154
155 //
156     Float_t dz;
157     
158 //
159 // The peam pipe up to the Front Absorber
160 //
161 // Mother Volume QBPM
162     ppcon[0]  =   0;
163     ppcon[1]  = 360;
164     ppcon[2]  =  20;
165 //  1 
166     ppcon[3]  = -90.;
167     ppcon[4]  =   0.;
168     ppcon[5]  =   3.1;
169 //  2
170     ppcon[6]  = -84.;
171     ppcon[7]  =   0.;
172     ppcon[8]  =   3.1;
173 //  3
174     ppcon[9]  = -84.;
175     ppcon[10] =   0.;
176     ppcon[11] =   4.4;
177 //  4
178     ppcon[12] = -90+2.*hlenQb24[2]+2.8+2.*hlenQb24[1];
179     ppcon[13] =   0.;
180     ppcon[14] =   4.4;
181 //  5
182     ppcon[15]  = ppcon[12];
183     ppcon[16] =   0.;
184     ppcon[17] =   4.1;
185 //  6 
186     ppcon[18] = ppcon[15] + 2.5 + 2.*kdzubA+0.2; 
187     ppcon[19] =   0.;
188     ppcon[20] =   4.1;
189 //  7 
190     ppcon[21] = ppcon[18];
191     ppcon[22] =   0.;
192     ppcon[23] =   3.2;
193 //  8 
194     ppcon[24] = ppcon[21] + 2.* kdzbbA-0.4; 
195     ppcon[25] =   0.;
196     ppcon[26] =   3.2;
197 //  9
198     ppcon[27] = ppcon[24]; 
199     ppcon[28] =   0.;
200     ppcon[29] =   4.1;
201 //  10
202     ppcon[30] = -44.;
203     ppcon[31] =   0.;
204     ppcon[32] =   4.1;
205 //  11
206     ppcon[33] = -44.;
207     ppcon[34] =    0;
208     ppcon[35] =    3.06;
209 //  12
210     ppcon[36] =  38.;
211     ppcon[37] =    0;
212     ppcon[38] =    3.06;
213 //  13
214     ppcon[39] =  38.;
215     ppcon[40] =    0;
216     ppcon[41] =    4.1;
217 //  14
218     ppcon[42] = hlenQbbe1+2.*hlenQbab-0.1;
219     ppcon[43] =    0.;
220     ppcon[44] =    4.1;
221 //  15
222     ppcon[45] = ppcon[42];
223     ppcon[46] =    0.;
224     ppcon[47] =    4.1;
225 //  16
226     ppcon[48] = ppcon[45]+2.*hlenQb29-5.;
227     ppcon[49] =    0.;
228     ppcon[50] =    4.1;
229 //  17
230     ppcon[51] = ppcon[48];
231     ppcon[52] =    0.;
232     ppcon[53] =   56.;
233 //  18
234     ppcon[54] = ppcon[51]+2.*kdzb+10.;
235     ppcon[55] =    0.;
236     ppcon[56] =   56.;
237 //  19
238     ppcon[57] =   ppcon[54];
239     ppcon[58] =    0.;
240     ppcon[59] =    4.1;
241 //  20
242     ppcon[60] =  800.;
243     ppcon[61] =    0.;
244     ppcon[62] =    4.1;
245     
246     gMC->Gsvolu("QBPM", "PCON", idtmed[kAir], ppcon,63);
247
248
249 //
250 // volume definitions of various sections
251 //
252
253 //
254 // The Vacuum 
255     gMC->Gsvolu("QBVA","TUBE", idtmed[kVac], ptube, 0);
256     ptube[0] =   0.0;
257     ptube[1] =   kRinSt;
258     ptube[2] =   (90.-hlenQbbe2)/2.;
259     dz = -90. + ptube[2];
260     gMC->Gsposp ("QBVA", 1, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
261     dz = dz + ptube[2];
262
263     ptube[1] =   kRinBe;
264     ptube[2] =   hlenQbbe+hlenQbab;
265     dz = dz + ptube[2];
266     gMC->Gsposp ("QBVA", 2, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
267     dz = dz + ptube[2];
268
269     ptube[1] =   kRinSt;
270     ptube[2] =   (800.-hlenQbbe1-2.*hlenQbab)/2.;
271     dz = dz + ptube[2];
272     gMC->Gsposp ("QBVA", 3, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
273
274 //
275 // Be Pipe in central Alice 
276     ptube[0] = kRinBe;
277     ptube[1] = kRoutBe;
278     ptube[2] = hlenQbbe;
279     
280     gMC->Gsvolu("QBBE","TUBE", idtmed[kBe], ptube, 3);
281     
282 //
283 //  Support Ring
284 //
285     //  Mother
286     ptube[0] = kRoutSB;
287     ptube[1] = 4.0;
288     ptube[2] = 0.6;
289     gMC->Gsvolu("QBSR", "TUBE", idtmed[kAlu], ptube,3);
290     // Inner support
291     ptube[0] = kRoutSB;
292     ptube[1] = 3.5;
293     gMC->Gsvolu("QBSS", "TUBE", idtmed[kPA], ptube,3);
294     gMC->Gspos("QBSS", 1, "QBSR", 0.0, 0.0,  0.0, 0, "ONLY");
295
296     gMC->Gspos("QBSR", 1, "QBPM", 0.0, 0.0,  40., 0, "ONLY");
297     gMC->Gspos("QBSR", 2, "QBPM", 0.0, 0.0, 150., 0, "ONLY");
298     gMC->Gspos("QBSR", 3, "QBPM", 0.0, 0.0, 260., 0, "ONLY");
299     gMC->Gspos("QBSR", 4, "QBPM", 0.0, 0.0,- 46., 0, "ONLY");
300 //
301 // Flange and Fixed Point: non absorber side
302 //
303 // ---------->
304 //
305 //  Mother
306     ppcon[0]  =   0;
307     ppcon[1]  = 360;
308     ppcon[2]  =   4;
309 //  1: 
310     ppcon[3]  = -hlenQb29;
311     ppcon[4]  = kRinSt;
312     ppcon[5]  = 5.8;
313 //  2
314     ppcon[6]  = ppcon[3]+3.6;
315     ppcon[7]  = kRinSt;
316     ppcon[8]  = 5.8;
317 //  3
318     ppcon[9]  = ppcon[6];
319     ppcon[10] = kRinSt;
320     ppcon[11] = 3.6;
321 //  4 
322     ppcon[12] = hlenQb29;
323     ppcon[13] = kRinSt;
324     ppcon[14] = 3.6;
325     
326     gMC->Gsvolu("QB29", "PCON", idtmed[kAir], ppcon,15);
327     
328
329 //    Flange
330     ptube[0] = kRinSt;
331     ptube[1] = 5.7;
332     ptube[2] = 1.75;
333     gMC->Gsvolu("QF29","TUBE", idtmed[kInox], ptube, 3);
334     gMC->Gspos("QF29", 1, "QB29", 0.0, 0.0, -hlenQb29+1.75, 0, "ONLY");
335 //    Pipe
336     ptube[0] = kRinSt;
337     ptube[1] = 3.06;
338     ptube[2] = hlenQb29;
339     gMC->Gsvolu("QS29","TUBE", idtmed[kInox], ptube, 3);
340     gMC->Gspos("QS29", 1, "QB29", 0.0, 0.0, 0., 0, "ONLY");
341 //    Fixed point
342     ptube[0] = kRinSt;
343     ptube[1] = 3.5;
344     ptube[2] = 0.3;
345     gMC->Gsvolu("QP29","TUBE", idtmed[kInox], ptube, 3);
346     gMC->Gspos("QP29", 1, "QB29", 0.0, 0.0, -hlenQb29+9.75+3., 0, "ONLY");
347     
348 //
349 //
350 // Inox beam pipe: final section on non-absorber side
351
352     ptube[0] =   kRinSt;
353     ptube[1] =   kRoutSt;
354     ptube[2] =   hlenQb28;    
355
356     gMC->Gsvolu("QB28","TUBE", idtmed[kInox], ptube, 3);
357 //
358 //
359 // Air with high transport cuts outside QB28
360     ptube[0] =   25.;
361     ptube[1] =   100.;
362     ptube[2] =   hlenQb28;    
363
364     gMC->Gsvolu("QA28","TUBE", idtmed[kAirHigh], ptube, 3);
365     gGeoManager->SetVolumeAttribute("QA28", "SEEN", 0);
366 //  Al-Be (40-60 wgt%, rho=2.7 g/cm**3) beam pipe
367 //
368 //  This section is under study (A.M. 1/2/2002)
369 //
370
371     ptube[0] = kRinBe;
372     if (fPipeMaterial == kAlu) {
373         ptube[1] = 3.06;
374     } else if (fPipeMaterial == kBe) {
375         ptube[1] = kRoutBe;
376     } else if (fPipeMaterial == kInox){
377         ptube[1] = kRoutSt;
378     }
379     ptube[2] =   hlenQbab;    
380
381     gMC->Gsvolu("QBAB","TUBE", idtmed[fPipeMaterial], ptube, 3);
382
383 // 2.5 mm thick SS tube for hanging pump
384 /*
385     ptube[0] = Rin;
386     ptube[1] = 3.15;
387     ptube[2] = hlenQb26;
388     
389     gMC->Gsvolu("QB26","TUBE", idtmed[kInox], ptube, 3);
390 */
391 //
392 // Bellows
393 //
394 //
395 // Mother Volume
396     Float_t pconQBE0[33];
397     pconQBE0[ 0]= 0;
398     pconQBE0[ 1]= 360;
399     pconQBE0[ 2]=  10;
400 //  1
401     pconQBE0[ 3] = -kdzbA;
402     pconQBE0[ 4] = kRinSB;
403     pconQBE0[ 5] = kRoutSB;
404 //
405     pconQBE0[ 6] = -kdzbA+2.5;
406     pconQBE0[ 7] = kRinSB;
407     pconQBE0[ 8] = kRoutSB;
408 //  2
409     pconQBE0[ 9] = -kdzbA+2.5;
410     pconQBE0[10] = kRinSB;
411     pconQBE0[11] = 3.60;
412 //  3
413     pconQBE0[12] = -kdzbA+2.5+2.*kdzubA;
414     pconQBE0[13] = kRinSB;
415     pconQBE0[14] = 3.60;
416 //  4
417     pconQBE0[15] = -kdzbA+2.5+2.*kdzubA;
418     pconQBE0[16] = kRinSB;
419     pconQBE0[17] = kRoutSB;
420 //  5    
421     pconQBE0[18] = -kdzbA+2.5+2.*kdzubA+2.*kdzbbA;
422     pconQBE0[19] = kRinSB;
423     pconQBE0[20] = kRoutSB;
424 //  6    
425     pconQBE0[21] = -kdzbA+2.5+2.*kdzubA+2.*kdzbbA;
426     pconQBE0[22] = kRinSB;
427     pconQBE0[23] = 3.60;
428 //  7
429     pconQBE0[24] = -kdzbA+2.5+4.*kdzubA+2.*kdzbbA;
430     pconQBE0[25] = kRinSB;
431     pconQBE0[26] = 3.60;
432 //  8
433     pconQBE0[27] = -kdzbA+2.5+4.*kdzubA+2.*kdzbbA;
434     pconQBE0[28] = kRinSB;
435     pconQBE0[29] = kRoutSB;
436 // 9
437     pconQBE0[30] = -kdzbA+5.0+4.*kdzubA+2.*kdzbbA;
438     pconQBE0[31] = kRinSB;
439     pconQBE0[32] = kRoutSB;
440
441     gMC->Gsvolu("QBE0", "PCON", idtmed[kAir], pconQBE0, 33);
442 //
443 //  Undulated piece mother
444     ptube[0] =  kRinSB;
445     ptube[1] =  3.60;
446     ptube[2] =  kdzubA;
447     gMC->Gsvolu("QBEM","TUBE", idtmed[kAir], ptube, 3);
448     dz = -kdzbA+kdzubA+2.5;
449     gMC->Gspos("QBEM", 2 ,"QBE0", 0.0, 0.0,   dz, 0 , "ONLY");
450     gMC->Gspos("QBEM", 1 ,"QBE0", 0.0, 0.0,  -dz, idrotm[2012], "ONLY");
451 //  
452     Float_t pund[30];
453     Float_t uw = 0.02;
454     Float_t ur = 2.*kdzubA-36.*uw;
455     Float_t uz = ur/37.;
456     Float_t ut = uz+uw;
457     
458     pund[ 0] = 0;
459     pund[ 1] = 360;
460     pund[ 2] =  8;
461
462     pund[ 3] = -ut;
463     pund[ 4] = kRinSB;
464     pund[ 5] = kRinSB+uw;
465     
466     pund[ 6] = -ut+uz;
467     pund[ 7] = pund[4];
468     pund[ 8] = pund[5];
469     
470     pund[ 9] = pund[6];
471     pund[10] = pund[4];
472     pund[11] = 3.6;
473     
474     pund[12] = pund[9]+uw;
475     pund[13] = pund[10];
476     pund[14] = pund[11];
477     
478     pund[15] = pund[12];
479     pund[16] = 3.6-uw;
480     pund[17] = pund[14];
481     
482     pund[18] = pund[12]+uz;
483     pund[19] = pund[16];
484     pund[20] = pund[17];
485     
486     pund[21] = pund[18];
487     pund[22] = kRinSB;
488     pund[23] = pund[20];
489     
490     pund[24] = pund[21]+uw;
491     pund[25] = pund[22];
492     pund[26] = pund[23];
493
494     gMC->Gsvolu("QBEU", "PCON", idtmed[kInox], pund, 27);
495
496     for (i = 0; i < 18; i++)
497     {
498         dz = -kdzubA+(1+2*i)*ut;
499         gMC->Gspos("QBEU", i+1 ,"QBEM", 0.0, 0.0,   dz, 0 , "ONLY");
500     }
501     ptube[0] =  kRinSB;
502     ptube[1] =  kRinSB+uw;
503     ptube[2] =  uz;
504     gMC->Gsvolu("QBEW","TUBE", idtmed[kInox], ptube, 3);
505     gMC->Gspos("QBEW", 1 ,"QBEM", 0.0, 0.0,   kdzubA-uz, 0 , "ONLY");
506
507 //
508 //  BeamPipe
509     gMC->Gsvolu("QBEP","TUBE", idtmed[kInox], ptube, 0);
510     ptube[0] =  kRinSB;
511     ptube[1] =  kRoutSB;
512     ptube[2] =  1.25;
513     gMC->Gsposp("QBEP", 1 ,"QBE0", 0.0, 0.0, -kdzbA+1.25, 0 , "ONLY", ptube, 3);
514     gMC->Gsposp("QBEP", 2 ,"QBE0", 0.0, 0.0,  kdzbA-1.25, 0 , "ONLY", ptube, 3);    
515     ptube[2] = kdzbbA;
516     gMC->Gsposp("QBEP", 3 ,"QBE0", 0.0, 0.0,  0., 0 , "ONLY", ptube, 3);    
517 //  
518 //
519 //  ----> End Bellow
520 //
521 // **** Placement of various sections on non-absorber side ****
522 //
523     //
524     // first the beryllium section
525     Float_t zpos = -(hlenQbbe2-hlenQbbe1)/2;
526     gMC->Gspos("QBBE", 1, "QBPM", 0., 0., zpos, 0, "ONLY");
527
528     // next meta-metal transition QBT1 on on-absorber side
529 //    zpos = zpos + hlenQbbe + hlenQbt1;
530 //    gMC->Gspos("QBT1", 1, "QBPM", 0., 0.,  zpos, 0, "ONLY");
531     
532     // Aluminium OR Al-be alloy section
533     zpos = hlenQbbe1+hlenQbab;
534     gMC->Gspos("QBAB", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
535     //
536     // inox flange at the start of bellow
537     zpos = zpos + hlenQbab + hlenQb29;
538     gMC->Gspos("QB29", 1, "QBPM", 0.0, 0.0, zpos, idrotm[2012], "ONLY");
539     //
540     // bellow section
541     zpos = zpos + hlenQb29 + hlenQbe0;
542     gMC->Gspos("QBE0", 2 ,"QBPM", 0.0, 0.0, zpos, 0, "ONLY");
543     // 
544     // inox flange at the end of bellow and start of thick inox for pump
545     zpos = zpos + hlenQbe0 + hlenQb29;
546     gMC->Gspos("QB29", 2, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
547     //   
548     //last inox section till 800 cm
549     zpos = zpos + hlenQb29 + hlenQb28;
550     gMC->Gspos("QB28", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY"); 
551     gMC->Gspos("QA28", 1, "ALIC", 0.0, 0.0, zpos, 0, "ONLY"); 
552     
553 //******** end of placement on non-absorber side *********
554     //
555     // **** Absorber side *****   
556     //
557     //
558 //
559 // Beam pipes between elements
560 //    
561     gMC->Gsvolu("QB24","TUBE", idtmed[kInox], ptube, 0);
562     ptube[0] = kRinSt;
563     ptube[1] = kRoutSt;
564     ptube[2] = hlenQb24[0];
565     Float_t bpbe[33];
566     bpbe[ 0] =   0.;
567     bpbe[ 1] = 360.;
568     bpbe[ 2] =  10.;
569     // 1
570     bpbe[ 3] = -hlenQb24[0];
571     bpbe[ 4] = kRinSB;
572     bpbe[ 5] = kRoutSB;
573     // 2
574     bpbe[ 6] = hlenQb24[0] - 5.8;
575     bpbe[ 7] = kRinSB;
576     bpbe[ 8] = kRoutSB;
577     // 3
578     bpbe[ 9] = hlenQb24[0] - 5.8;
579     bpbe[10] = kRinSt;
580     bpbe[11] = 3.05;
581     // 4
582     bpbe[12] = hlenQb24[0] - 4.5;
583     bpbe[13] = kRinSt;
584     bpbe[14] = 3.05;
585     // 5
586     bpbe[15] = hlenQb24[0] - 4.5;
587     bpbe[16] = kRinSt;
588     bpbe[17] = kRoutSt ;
589     // 6
590     bpbe[18] = hlenQb24[0] - 3.5;
591     bpbe[19] = kRinSt;
592     bpbe[20] = kRoutSt ;
593     // 7
594     bpbe[21] = hlenQb24[0] - 3.5;
595     bpbe[22] = kRinSt;
596     bpbe[23] = 3.05;
597     // 8
598     bpbe[24] = hlenQb24[0] - 3.0;
599     bpbe[25] = kRinSt;
600     bpbe[26] = 3.05;
601     // 9
602     bpbe[27] = hlenQb24[0] - 3.0;
603     bpbe[28] = kRinSt;
604     bpbe[29] = kRoutSt;
605     // 10
606     bpbe[30] = hlenQb24[0];
607     bpbe[31] = kRinSt;
608     bpbe[32] = kRoutSt;
609
610     gMC->Gsvolu("QA24","PCON", idtmed[kInox], bpbe, 33);
611
612     dz = hlenQbbe2 + hlenQb24[0];
613     
614     gMC->Gspos("QA24", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
615 //
616 // Bellow on absorber side
617
618     dz = dz+hlenQb24[0] + kdzbA;
619     gMC->Gspos("QBE0", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
620 //
621     ptube[2] = hlenQb24[1];
622     dz = dz + kdzb + ptube[2];
623     gMC->Gsposp("QB24", 2 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY", ptube, 3);
624     dz = dz + ptube[2];
625     
626 //
627 // Flange
628 // 
629 //  Mother Volume
630     ptube[0] = kRinSB;
631     ptube[1] = 4.300;
632     ptube[2] = 1.4;
633     
634     gMC->Gsvolu("QFA0","TUBE", idtmed[kInox], ptube, 3);
635     dz = dz + ptube[2];
636     gMC->Gspos("QFA0", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
637     dz = dz + ptube[2];
638 //
639 //
640     ptube[0] = kRinSB;
641     ptube[1] = kRoutSB;
642     ptube[2] = hlenQb24[2];
643     dz = dz + ptube[2];
644     gMC->Gsposp("QB24", 3 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY", ptube, 3);
645
646 // --- Place the PIPE ghost volume (QBPM) in its mother volume (ALIC)
647 //    by rotating it to 180 deg. and make it invisible
648 // 
649     gMC->Gspos("QBPM",1,"ALIC", 0, 0, 0, 0, "ONLY");
650     gMC->Gsbool("QBPM", "L3DX");
651     gMC->Gsbool("QBPM", "L3O3");
652     gMC->Gsbool("QBPM", "L3O4");
653
654
655 //
656 // ******** Ion Pump volume description starts here ******
657 // 
658     //
659     // Getters ->
660     pbox[0] =  6.50;
661     pbox[1] =  6.75;
662     pbox[2] = 15.60;
663     gMC->Gsvolu("QI32","BOX", idtmed[kInox], pbox, 3);
664     
665     pbox[0] =  5.90;
666     pbox[1] =  6.15;
667     pbox[2] = 15.00;
668     gMC->Gsvolu("QI42","BOX", idtmed[kGetter], pbox, 3);
669     gMC->Gspos("QI42", 1, "QI32", 0.0, 0.0, 0.0, 0, "ONLY");
670 // <-
671
672     ptube[0] =  0.0;
673     ptube[1] = 19.0;
674     ptube[2] =  2.5;
675     gMC->Gsvolu("QI33","TUBE", idtmed[kInox], ptube, 3);
676
677
678     ptube[0] =  0.0;
679     ptube[1] = 15.0;
680     ptube[2] =  2.5;
681     gMC->Gsvolu("QI43","TUBE", idtmed[kAir], ptube, 3);
682     gMC->Gspos("QI43", 1, "QI33", 0.0, 0.0, 0.0, 0, "ONLY");
683 // 
684 // Connecting tube ->
685     ptube[0] =  0.0;
686     ptube[1] =  4.5;
687     ptube[2] = 14.6;
688     gMC->Gsvolu("QI34","TUBE", idtmed[kInox], ptube, 3);
689     
690     ptube[0] =  0.0;
691     ptube[1] =  3.9;
692     ptube[2] = 14.6;
693     gMC->Gsvolu("QI44","TUBE", idtmed[kAir], ptube, 3);
694     gMC->Gspos("QI44", 1, "QI34", 0.0, 0.0, 0.0, 0, "ONLY");
695 // <-
696
697   //
698   // Flange ->
699     ptube[0] =  4.6;
700     ptube[1] =  7.30;
701     ptube[2] =  2.15;
702     gMC->Gsvolu("QI35","TUBE", idtmed[kInox], ptube, 3);
703 // <-
704     gMC->Gspos("QI32", 1, "QBPM", 0.0, -44.25, zPump, 0, "ONLY");
705     gMC->Gspos("QI33", 1, "QBPM", 0.0, -35.00, zPump,idrotm[2002], "ONLY");
706     gMC->Gspos("QI34", 1, "QBPM", 0.0, -17.90, zPump,idrotm[2002], "ONLY");
707     gMC->Gspos("QI35", 1, "QBPM", 0.0, -24.35, zPump,idrotm[2002], "ONLY");
708
709     gGeoManager->SetVolumeAttribute("QBPM", "SEEN", 1);
710     gGeoManager->SetVolumeAttribute("QBEM", "SEEN", 1);
711 }
712
713
714
715 //___________________________________________
716 void AliPIPEv0::CreateMaterials()
717 {
718   //
719   // Define materials for beam pipe
720   //
721
722   AliDebugClass(1,"Create PIPEv0 materials");
723   Int_t   isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
724   Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
725   // Steel (Inox)  
726   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
727   Float_t zsteel[4] = { 26.,24.,28.,14. };
728   Float_t wsteel[4] = { .715,.18,.1,.005 };
729   // AlBe - alloy 
730   Float_t aAlBe[2] = { 26.98, 9.01};
731   Float_t zAlBe[2] = { 13.00, 4.00};
732   Float_t wAlBe[2] = { 0.4, 0.6};
733   //
734   // Polyamid
735   Float_t aPA[4] = {16., 14., 12.,  1.};
736   Float_t zPA[4] = { 8.,  7.,  6.,  1.};
737   Float_t wPA[4] = { 1.,  1.,  6., 11.};
738   //
739   // Air 
740   //
741   Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
742   Float_t zAir[4]={6.,7.,8.,18.};
743   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
744   Float_t dAir = 1.20479E-3;
745   Float_t dAir1 = 1.20479E-10;
746   //
747   // Kapton
748   //
749   Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994};
750   Float_t zKapton[4]={1.,6.,7.,8.};
751   Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235};
752   Float_t dKapton = 1.42;
753   //
754   //     Berillium 
755   AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
756   //
757   //     Carbon 
758   AliMaterial(6,  "CARBON$   ", 12.01, 6., 2.265, 18.8, 49.9);
759   //
760   //     Aluminum 
761   AliMaterial(9,  "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
762   //
763   //     Air 
764   AliMixture(15, "AIR$",      aAir, zAir, dAir, 4, wAir);
765   AliMixture(35, "AIR_HIGH$", aAir, zAir, dAir, 4, wAir);
766   //
767   //     Vacuum 
768   AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
769   //
770   //     stainless Steel 
771   AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
772   //
773   //     reduced density steel to approximate pump getter material
774   AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
775   //     Al-Be alloy
776   //     
777   AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
778   //     Polyamid
779   //   
780   AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA);
781   //
782   //     Kapton
783   AliMixture(23, "KAPTON", aKapton, zKapton, dKapton, 4, wKapton);
784   //
785   // **************** 
786   //     Defines tracking media parameters. 
787   //
788   Float_t epsil  = .001;    // Tracking precision, 
789   Float_t stemax = -0.01;   // Maximum displacement for multiple scat 
790   Float_t tmaxfd = -20.;    // Maximum angle due to field deflection 
791   Float_t deemax = -.3;     // Maximum fractional energy loss, DLS 
792   Float_t stmin  = -.8;
793   // *************** 
794   //
795   //    Beryllium 
796   
797   AliMedium(5, "BE",       5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
798
799   //    Carbon 
800   AliMedium(6, "C",        6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
801   //
802   //    Aluminum 
803   AliMedium(9, "ALU",      9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
804   //
805   //    Air 
806   AliMedium(15, "AIR",     15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
807   AliMedium(35, "AIR_HIFG",35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
808   //
809   //    Vacuum 
810   AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
811   //
812   //    Steel 
813   AliMedium(19, "INOX",   19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
814   //
815   //    Getter 
816   AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
817   //
818   //   AlBe - Aloy 
819   AliMedium(21, "AlBe"  , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
820   //
821   //   Polyamid
822   AliMedium(22, "PA"  ,   22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
823   //
824   //   KAPTON
825   AliMedium(23, "KAPTON", 23, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
826
827 }
828
829
830
831
832
833
834
835
836
837