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