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