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