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