Material of beam pipe between inner Be piece and forward detectors
[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 /*
17 $Log$
18 Revision 1.17  2001/09/24 13:11:50  morsch
19 Ion pump and bellows moved out by 15 cm to make space for forward
20 detectors.
21
22 Revision 1.16  2001/05/16 14:57:22  alibrary
23 New files for folders and Stack
24
25 Revision 1.15  2001/05/02 11:50:18  morsch
26 New layout of the non-absorber side provided by Y. Viyogi. Not the final design
27 but the prsent most realistic.
28
29 Revision 1.14  2001/01/20 16:56:33  morsch
30 Put air in connecting tubes and flanges of vacuum pump.
31
32 Revision 1.13  2001/01/20 16:35:27  morsch
33 Increase mother volume for bellows.
34
35 Revision 1.12  2000/12/21 16:41:06  morsch
36 Coding convention clean-up (RS3)
37
38 Revision 1.11  2000/11/28 16:06:57  morsch
39 Undulated beam-pipe replaced by Al-Be (40,60) pipe 1.5 mm thick.
40
41 Revision 1.10  2000/11/24 13:00:37  morsch
42 - Geometry and materials imported from euclid output
43 - include comments
44 - better struturing of volume tree
45 - improved version of flange close to front absorber
46 - more realistic pump materials
47 - undulated beam pipe imported from v3.
48
49 Revision 1.9  2000/10/02 21:28:15  fca
50 Removal of useless dependecies via forward declarations
51
52 Revision 1.8  2000/06/11 12:37:01  morsch
53 Coding rule violations corrected
54
55 Revision 1.7  2000/02/23 16:25:24  fca
56 AliVMC and AliGeant3 classes introduced
57 ReadEuclid moved from AliRun to AliModule
58
59 Revision 1.6  1999/09/29 09:24:30  fca
60 Introduction of the Copyright and cvs Log
61
62 */
63
64 ////////////////////////////////////////////////
65 //  Beam pipe class                            /
66 ////////////////////////////////////////////////
67
68 #include "AliPIPEv0.h"
69 #include "AliRun.h"
70 #include "AliConst.h"
71 #include "AliMagF.h"
72 #include "AliMC.h"
73 #include "TSystem.h"
74
75 #include <iostream.h>
76  
77 ClassImp(AliPIPEv0)
78  
79 //_____________________________________________________________________________
80 AliPIPEv0::AliPIPEv0()
81 {
82 // Constructor
83     SetPipeMaterial();
84 }
85
86 //_____________________________________________________________________________
87 AliPIPEv0::AliPIPEv0(const char *name, const char *title)
88   : AliPIPE(name,title)
89 {
90 // Constructor
91     SetPipeMaterial();
92 }
93
94  
95 //___________________________________________
96 void AliPIPEv0::CreateGeometry()
97 {
98 //Begin_Html
99 /*
100 <img src="picts/pipe.gif">
101 */
102 //End_Html
103
104
105 //Begin_Html
106 /*
107 <img src="picts/tree_pipe.gif">
108 */
109 //End_Html
110
111     if(fDebug) printf("%s: Create PIPEv0 geometry \n",ClassName());
112   
113
114     Int_t *idtmed = fIdtmed->GetArray();
115     Float_t ppcon[84], ptube[3], pbox[3];
116     Int_t i=0;
117     
118     
119     Int_t   idrotm[2099];  
120     AliMatrix(idrotm[2001],90.,240.,  0.,  0., 90.,150.);
121     AliMatrix(idrotm[2002],90.,  0.,  0.,  0., 90.,270.);
122     AliMatrix(idrotm[2003],90.,120.,  0.,  0., 90., 30.);
123     AliMatrix(idrotm[2004],90.,315., 90., 45.,  0.,  0.);
124     AliMatrix(idrotm[2005],90.,270., 90.,  0.,  0.,  0.);
125     AliMatrix(idrotm[2006],90.,225., 90.,315.,  0.,  0.);
126     AliMatrix(idrotm[2007],90.,180., 90.,270.,  0.,  0.);
127     AliMatrix(idrotm[2008],90.,135., 90.,225.,  0.,  0.);
128     AliMatrix(idrotm[2009],90., 90., 90.,180.,  0.,  0.);
129     AliMatrix(idrotm[2010],90., 45., 90.,135.,  0.,  0.);
130     idrotm[2011] = 0;
131     AliMatrix(idrotm[2012],90.,180., 90., 90.,180.,  0.);
132     AliMatrix(idrotm[2013],90.,  0., 90., 90.,180.,  0.);
133
134 //  distance between bellows
135     const Float_t dzbb =  8.0;
136 //  size of bellow
137     const Float_t dzb  = 11.4;
138
139     
140 //
141 // The peam pipe up to the Front Absorber
142 //
143 // Mother Volume QBPM
144     const Float_t dbe1 = 15.;
145     const Float_t dbe2 = 15.;
146     ppcon[0]  =    0;
147     ppcon[1]  =  360;
148     ppcon[2]  =   25;
149 //  1: 
150     ppcon[3]  = - 90;
151     ppcon[4]  =    0;
152     ppcon[5]  =    5.8;
153 //  2
154     ppcon[6]  = - 81.6;
155     ppcon[7]  =    0.;
156     ppcon[8]  =    5.8;
157 //  3
158     ppcon[9]  = - 81.6;
159     ppcon[10]  =    0.;
160     ppcon[11] =    4.22;
161 //  4 
162     ppcon[12] = - 81.6 + dzb; 
163     ppcon[13] =    0;
164     ppcon[14] =    4.22;
165 //  5 
166     ppcon[15] = - 81.6 + dzb; 
167     ppcon[16] =    0;
168     ppcon[17] =    3.2;
169 //  6 
170     ppcon[18] = - 81.6 + dzb + dzbb; 
171     ppcon[19] =    0;
172     ppcon[20] =    3.2;
173 //  7
174     ppcon[21] = - 81.6 + dzb + dzbb; 
175     ppcon[22] =    0;
176     ppcon[23] =    4.22;
177 //  8
178     ppcon[24] = - 28.00-dbe2;
179     ppcon[25] =    0;
180     ppcon[26] =    4.22;
181 //  9
182     ppcon[27] = - 28.00-dbe2;
183     ppcon[28] =    0;
184     ppcon[29] =    3.2;
185 //  10
186     ppcon[30] =    0;
187     ppcon[31] =    0;
188     ppcon[32] =    3.2;
189 //  11
190     ppcon[33] =    28.+dbe1;
191     ppcon[34] =    0;
192     ppcon[35] =    3.2;
193 //  12
194     ppcon[36] =   28.+dbe1;
195     ppcon[37] =    0;
196     ppcon[38] =    4.22;
197 //  13 
198     ppcon[39] =   28.+dbe1+6.0;
199     ppcon[40] =    0;
200     ppcon[41] =    4.22;
201 //  14
202     ppcon[42] =   28.+dbe1+6.0;
203     ppcon[43] =    0;
204     ppcon[44] =    3.2;
205 //  15 
206     ppcon[45] =   250.;
207     ppcon[46] =    0;
208     ppcon[47] =    3.2;
209 //  16
210     ppcon[48] =  250.;
211     ppcon[49] =    0;
212     ppcon[50] =    5;
213 //  17
214     ppcon[51] =   250.+4.4*2;
215     ppcon[52] =    0.;
216     ppcon[53] =    5.;
217 //  18
218     ppcon[54] =   250.+4.4*2;
219     ppcon[55] =    0.;
220     ppcon[56] =    3.2;
221 //  19
222     ppcon[57] =   365.4;
223     ppcon[58] =    0;
224     ppcon[59] =    3.2;
225 //  20
226     ppcon[60] =   365.4;
227     ppcon[61] =    0;
228     ppcon[62] =    5.;
229 //  21
230     ppcon[63] =   390.;
231     ppcon[64] =    0;
232     ppcon[65] =    5.;
233 //  22
234     ppcon[66] =  390.;
235     ppcon[67] =    0.;
236     ppcon[68] =   56.;
237 //  23
238     ppcon[69] =  435.;
239     ppcon[70] =    0.;
240     ppcon[71] =   56.;
241 //  24
242     ppcon[72] =  435.;
243     ppcon[73] =    0.;
244     ppcon[74] =   5.;
245 //  25
246     ppcon[75] =  800.;
247     ppcon[76] =    0.;
248     ppcon[77] =    5.;
249     
250     gMC->Gsvolu("QBPM", "PCON", idtmed[kAir], ppcon, 78);
251
252 //
253 // The Vacuum 
254     ptube[0] =   0.0;
255     ptube[1] =   2.9;
256     ptube[2] = 445.0;
257     
258     gMC->Gsvolu("QBVA","TUBE", idtmed[kVac], ptube, 3);
259     gMC->Gspos ("QBVA", 1, "QBPM", 0., 0., 355., 0, "ONLY");
260 //
261 // volume definitions of various sections
262 //
263
264     //half-lengths of various beam pipe sections
265     Float_t hlenQbbe = 43.3;
266     Float_t hlenQbt1 = 5.5/2.;
267     Float_t hlenQbab = (286.6+30.)/2.;
268     Float_t hlenQb29 = 4.4/2.;
269     Float_t hlenQbe0 = (2.* dzb + dzbb)/2.;
270     Float_t hlenQb26 = 20./2.;
271     Float_t hlenQb28 = (400.6-30.)/2.;
272
273 // Be Pipe in central Alice : length 43.3 * 2
274     ptube[0] =  2.90;
275     ptube[1] =  3.00;
276     ptube[2] = hlenQbbe;
277     
278     gMC->Gsvolu("QBBE","TUBE", idtmed[kBe], ptube, 3);
279     
280 //
281 // Metal-Metal Transitions : non-absorber side
282 //
283 //  Be-Al (or Be to Be-Al alloy)
284 //  Mother Volume
285     ptube[0] = 2.900;
286     ptube[1] = 4.200;
287     ptube[2] = hlenQbt1;
288     gMC->Gsvolu("QBT1","TUBE", idtmed[kAir], ptube, 3);
289
290     ptube[0] = 2.900;
291     ptube[1] = 3.150;
292     ptube[2] = 0.375;
293     //
294     //  Be-part
295     gMC->Gsvolu("QB01","TUBE", idtmed[kAlu], ptube, 3);
296
297     ptube[1] = 3.000;
298     gMC->Gsvolu("QBA1","TUBE", idtmed[kBe], ptube, 3);
299
300     gMC->Gspos("QBA1", 1, "QB01", 0., 0., 0, 0, "ONLY");
301     gMC->Gspos("QB01", 1, "QBT1", 0., 0.,-2.75+ptube[2], 0, "ONLY");
302
303     //  Al-part
304     //
305     ptube[0] = 2.900;
306     ptube[1] = 3.150;
307     ptube[2] = 2.375;
308
309     gMC->Gsvolu("QB03","TUBE", idtmed[kAlu], ptube, 3);
310     gMC->Gspos("QB03", 1, "QBT1", 0., 0.,-2.+ptube[2], 0, "ONLY");
311     
312     
313     ptube[0] = 3.15;
314     ptube[1] = 3.50;
315     ptube[2] = 0.10;
316
317     gMC->Gsvolu("QB05","TUBE", idtmed[kAlu], ptube, 3);
318     gMC->Gspos("QB05", 1, "QBT1", 0., 0., 2.55+ptube[2], 0, "ONLY");
319     
320     
321     // Fixations
322     ptube[0] = 0.0;
323     ptube[1] = 0.1;
324     ptube[2] = 0.5;
325     
326     gMC->Gsvolu("QB08","TUBE", idtmed[kInox], ptube, 3);
327     gMC->Gspos("QB08", 1 ,"QBT1",  0.000,  3.650, -1.25, idrotm[2002], "ONLY");
328     gMC->Gspos("QB08", 2 ,"QBT1",  3.161, -1.825, -1.25, idrotm[2001], "ONLY");
329     gMC->Gspos("QB08", 3 ,"QBT1", -3.161, -1.825, -1.25, idrotm[2003], "ONLY");
330     
331     // Carbon ring
332     ptube[0] = 3.15;
333     ptube[1] = 4.10;
334     ptube[2] = 0.55;
335     
336     gMC->Gsvolu("QB07","TUBE", idtmed[kC], ptube, 3);
337
338     ptube[0] = 3.15;
339     ptube[1] = 3.50;
340     ptube[2] = 0.10;
341     gMC->Gsvolu("QBA7","TUBE", idtmed[kInox], ptube, 3);
342     gMC->Gspos("QBA7", 1, "QB07", 0.0, 0.0, 0.55-0.2, 0, "ONLY");
343     gMC->Gspos("QB07", 1, "QBT1", 0.0, 0.0, 2., 0, "ONLY");
344
345
346 //
347 // Support rollers: non absorber side
348 //
349 //  Mother volume
350     
351     ptube[0] = 3.2;
352     ptube[1] = 4.8;
353     ptube[2] = 3.0;
354     gMC->Gsvolu("QBRM","TUBE", idtmed[kAir], ptube, 3);
355
356     ptube[0] = 0.0;
357     ptube[1] = 0.7;
358     ptube[2] = 3.0;
359     
360     gMC->Gsvolu("QB30","TUBE", idtmed[kInox], ptube, 3);
361     
362     for (i=0; i<8; i++) {
363         Float_t phi = 45.+i*45.*kDegrad;
364         Float_t xpos = 4.*TMath::Sin(phi);
365         Float_t ypos = 4.*TMath::Cos(phi);
366         gMC->Gspos("QB30", i+1, "QBRM", xpos, ypos, 0, idrotm[2004+i], "ONLY");
367     }
368
369 //
370 // Flanges: non absorber side
371     ptube[0] = 3.0;
372     ptube[1] = 4.9;
373     ptube[2] = hlenQb29;
374     
375     gMC->Gsvolu("QB29","TUBE", idtmed[kInox], ptube, 3);
376     
377 //
378 // Inox beam pipe: final section on non-absorber side
379
380     ptube[0] =   2.90;
381     ptube[1] =   2.98;
382     ptube[2] =   hlenQb28;    
383
384     gMC->Gsvolu("QB28","TUBE", idtmed[kInox], ptube, 3);
385
386 //
387 //  Undulated beam pipe
388 // 
389 /*
390     Float_t pitch=0.25;
391     Float_t thick=0.015;
392     Float_t zundul=171;
393     Float_t rundul=3.0;
394     char cn48[][5]={"QN21","QN22","QN23","QN24","QN25","QN26","QN27","QN28"};
395
396     Undulation("QUND",pitch,thick,zundul,rundul,cn48);
397     gMC->Gspos("QUND", 1, "QBPM", 0., 0., 335.+zundul, 0, "ONLY");
398 */
399
400 //  Al-Be (40-60 wgt%, rho=2.7 g/cm**3) beam pipe
401 //
402 // This section is under study (A.M. 1/2/2002)
403 //
404
405     ptube[0] = 2.9;
406     if (fPipeMaterial == kAlu) {
407         ptube[1] = 3.0;
408     } else if (fPipeMaterial == kBe) {
409         ptube[1] = 3.02;
410     } else if (fPipeMaterial == kInox){
411         ptube[1] = 2.98;
412     }
413     ptube[2] =   hlenQbab;    
414
415     gMC->Gsvolu("QBAB","TUBE", idtmed[fPipeMaterial], ptube, 3);
416
417     
418 //
419 //  last piece : inox pipe from pump till end 
420 //
421     //ptube[0] =   2.90;
422     //ptube[1] =   2.98;
423     //ptube[2] =  61.55;    
424
425     //gMC->Gsvolu("QB48","TUBE", idtmed[kInox], ptube, 3);
426
427 /*
428     ptube[0] = 2.90;
429     ptube[1] = 2.98;
430     ptube[2] = 1.0;
431     
432     gMC->Gsvolu("QB27","TUBE", idtmed[kInox], ptube, 3);
433     gMC->Gspos("QB27", 1, "QBPM", 0.0, 0.0, 208.1, 0, "ONLY");
434 */
435 //
436 // Aluminium collar for support rollers
437     
438     gMC->Gsvolu("QB25","TUBE", idtmed[kAlu], ptube, 0);
439
440
441 // 2.5 mm thick SS tube for hanging pump
442     ptube[0] = 2.90;
443     ptube[1] = 3.15;
444     ptube[2] = hlenQb26;
445     
446     gMC->Gsvolu("QB26","TUBE", idtmed[kInox], ptube, 3);
447
448 //
449 // Bellows
450 //
451 //
452 // Mother Volume
453
454     Float_t pconQBE0[21];
455     pconQBE0[0]= 0;
456     pconQBE0[1]= 360;
457     pconQBE0[2]= 6;
458
459     pconQBE0[3]= -(2.*dzb+dzbb)/2.;
460     pconQBE0[4]= 0;
461     pconQBE0[5]= 4.22;
462     
463     pconQBE0[6]= -(2.*dzb+dzbb)/2.+dzb;
464     pconQBE0[7]= 0;
465     pconQBE0[8]= 4.22;
466     
467     pconQBE0[9]= -(2.*dzb+dzbb)/2.+dzb;
468     pconQBE0[10]= 0;
469     pconQBE0[11]= 3.2;
470     
471     pconQBE0[12]= -(2.*dzb+dzbb)/2.+dzb+dzbb;
472     pconQBE0[13]= 0;
473     pconQBE0[14]= 3.2;
474     
475     pconQBE0[15]= -(2.*dzb+dzbb)/2.+dzb+dzbb;
476     pconQBE0[16]= 0;
477     pconQBE0[17]= 4.22;
478     
479     pconQBE0[18]= -(2.*dzb+dzbb)/2.+dzb+dzbb+dzb;
480     pconQBE0[19]= 0;
481     pconQBE0[20]= 4.22;
482
483     gMC->Gsvolu("QBE0", "PCON", idtmed[kAir], pconQBE0, 21);
484
485     ptube[0] =  2.90;
486     ptube[1] =  3.75;
487     ptube[2] = dzb/2.;
488
489     gMC->Gsvolu("QBEM","TUBE", idtmed[kAir], ptube, 3);
490     Float_t dz = (dzb+dzbb)/2.;
491     gMC->Gspos("QBEM", 2 ,"QBE0", 0.0, 0.0, -dz, 0 , "ONLY");
492     gMC->Gspos("QBEM", 1 ,"QBE0", 0.0, 0.0,  dz, idrotm[2012], "ONLY");
493     
494     ptube[0] = 2.90;
495     ptube[1] = 3.25;
496     ptube[2] = 3.70;
497     
498     gMC->Gsvolu("QB19","TUBE", idtmed[kVac], ptube, 3);
499     gMC->Gspos("QB19", 1 ,"QBEM", 0.0, 0.0, 0.5, 0 , "ONLY");
500     
501     ptube[0] = 3.25;
502     ptube[1] = 3.74;
503     ptube[2] = 0.095;
504     
505     gMC->Gsvolu("QB18","TUBE", idtmed[kVac], ptube, 3);
506     for (i=0; i<15; i++) {
507         gMC->Gspos("QB18", i+1, "QBEM", 0.0, 0.0, 3.3-i*0.4, 0, "ONLY");
508     }
509     
510     ptube[0] = 2.90;
511     ptube[1] = 3.00;
512     ptube[2] = 1.20;
513     
514     gMC->Gsvolu("QB21","TUBE", idtmed[kVac], ptube, 3);
515     gMC->Gspos("QB21", 1 ,"QBEM", 0.0, 0.0, -4.5, 0 , "ONLY");
516     
517     ptube[0] = 3.250;
518     ptube[1] = 3.750;
519     ptube[2] = 0.005;
520     
521     gMC->Gsvolu("QB15","TUBE", idtmed[kInox], ptube, 3);
522     for (i=0; i<30; i++) {
523         gMC->Gspos("QB15", i+1, "QBEM", 0.0, 0.0, 3.4-i*0.2, 0, "ONLY");
524     }
525     
526     ptube[0] = 3.740;
527     ptube[1] = 3.750;
528     ptube[2] = 0.095;
529     
530     gMC->Gsvolu("QB16","TUBE", idtmed[kInox], ptube, 3);
531     for (i=0; i<15; i++) {
532         gMC->Gspos("QB16", i+1, "QBEM", 0.0, 0.0, 3.3-i*0.4, 0, "ONLY");
533     }
534     
535     ptube[0] = 3.250;
536     ptube[1] = 3.260;
537     ptube[2] = 0.095;
538     
539     gMC->Gsvolu("QB17","TUBE", idtmed[kInox], ptube, 3);
540     for (i=0; i<14; i++) {
541         gMC->Gspos("QB17", i+1, "QBEM", 0.0, 0.0, 3.1-i*0.4, 0, "ONLY");
542     }
543     
544     ptube[0] = 3.250;
545     ptube[1] = 3.260;
546     ptube[2] = 0.3975;
547
548     gMC->Gsvolu("QB14","TUBE", idtmed[kInox], ptube, 3);
549     gMC->Gspos("QB14", 2 ,"QBEM", 0.0, 0.0, -2.8025, 0 , "ONLY");
550     gMC->Gspos("QB14", 1 ,"QBEM", 0.0, 0.0,  3.8025, 0 , "ONLY");
551     
552     ptube[0] = 2.900;
553     ptube[1] = 3.260;
554     ptube[2] = 0.050;
555     
556     gMC->Gsvolu("QB13","TUBE", idtmed[kInox], ptube, 3);
557     gMC->Gspos("QB13", 2 ,"QBEM", 0.0, 0.0, -3.25, 0 , "ONLY");
558     gMC->Gspos("QB13", 1 ,"QBEM", 0.0, 0.0,  4.25, 0 , "ONLY");
559     
560     ptube[0] = 2.900;
561     ptube[1] = 3.000;
562     ptube[2] = 0.700;
563     
564     gMC->Gsvolu("QB12","TUBE", idtmed[kInox], ptube, 3);
565     gMC->Gspos("QB12", 1 ,"QBEM", 0.0, 0.0, 5.0, 0, "ONLY");
566
567
568 //
569 //  pipe between Bellows
570     ptube[0] = 2.9;
571     ptube[1] = 3.0;
572     ptube[2] = dzbb/2.;
573     gMC->Gsvolu("QB23","TUBE", idtmed[kInox], ptube, 3);
574     gMC->Gspos("QB23", 1 ,"QBE0", 0.0, 0.0, 0.0, 0, "ONLY");
575     
576 //
577 // End Bellow
578
579 // **** placement of various sections on non-absorber side ****
580     //
581     // first the beryllium section : 43.3 cm long on both sides of IP
582     // zstart=0, zend=43.3, length=43.3 on one side
583     Float_t zpos=0;
584     gMC->Gspos("QBBE", 1, "QBPM", 0., 0., zpos, 0, "ONLY");
585
586     // next meta-metal transition QBT1 on on-absorber side
587     // zstart=43.3, zend=48.8, length=5.5
588     zpos = zpos + hlenQbbe + hlenQbt1;
589     gMC->Gspos("QBT1", 1, "QBPM", 0., 0.,  zpos, 0, "ONLY");
590     
591     // Aluminium OR Al-be alloy section
592     //zpos=zpos + hlenQbt1 + hlenQb10;
593     //gMC->Gspos("QB10", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
594     // zstart= 48.8, zend=335.4, length=286.6
595     zpos = zpos + hlenQbt1 + hlenQbab;
596     gMC->Gspos("QBAB", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
597
598     // inox flange at the start of bellow
599     // zstart=335.4, zend=339.8, length=4.4
600     cout<<" zpos 1 "<<zpos<<" hlenQbab "<<hlenQbab<<
601       " hlenQb29 "<< hlenQb29<<endl;
602     zpos = zpos + hlenQbab + hlenQb29;
603      cout<<" zstart 1 "<<zpos-hlenQb29<<" zend 2 "<<zpos+hlenQb29<<endl;
604     gMC->Gspos("QB29", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
605
606     // bellow section
607     // zstart=339.8, zend=370.6, length=30.9
608     //    zpos = zpos + hlenQb29 + hlenQbe0;
609     zpos = zpos + hlenQb29 + hlenQbe0;
610      cout<<" zstart "<<zpos-hlenQbe0<<" zend "<<zpos-hlenQbe0<<endl;
611    gMC->Gspos("QBE0", 2 ,"QBPM", 0.0, 0.0, zpos, 0, "ONLY");
612
613     // inox flange at the end of bellow and start of thick inox for pump
614     // zstart=370.6, zend=375.0, length=4.4
615     zpos = zpos + hlenQbe0 + hlenQb29;
616      cout<<" zstart 1 "<<zpos-hlenQb29<<" zend 2 "<<zpos+hlenQb29<<endl;
617      gMC->Gspos("QB29", 2, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
618
619     // 2.5mm thick inox section to hang the pump
620     // zstart=375.0, zend=395.0, length=20.0
621     zpos = zpos + hlenQb29 + hlenQb26;
622      cout<<" zstart 1 "<<zpos-hlenQb29<<" zend 2 "<<zpos+hlenQb29<<endl;
623      gMC->Gspos("QB26", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
624
625     //inox flange at the end of pump section to join to next pipe
626     // zstart=395.0, zend=399.4, length=4.4
627     zpos = zpos + hlenQb26 + hlenQb29;
628     gMC->Gspos("QB29", 3, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
629
630     //last inox section till 800 cm
631     // zstart=399.4, zend=800., length=400.6
632     zpos = zpos + hlenQb29 + hlenQb28;
633     gMC->Gspos("QB28", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY"); 
634
635
636     // aluminium collars and support rollers at two places
637
638     ptube[0] = 3.0;
639     ptube[1] = 3.15;
640     ptube[2] = 2.75;
641
642     gMC->Gsposp("QB25", 1, "QBPM", 0., 0., 654.8, 0, "ONLY", ptube, 3);
643     gMC->Gspos("QBRM", 1, "QBPM", 0., 0., 654.8, 0, "ONLY");
644
645     ptube[0] = 3.05;
646     ptube[1] = 3.20;
647     gMC->Gsposp("QB25", 2, "QBPM", 0., 0., 254.8, 0, "ONLY", ptube, 3);
648     gMC->Gspos("QBRM", 2, "QBPM", 0., 0., 254.8, 0, "ONLY");
649
650
651
652 //******** end of placement on no-absorber side *********
653
654     //
655     // **** Absorber side *****   
656     //
657     //
658     //  metal-metal transition :  Be-Alu on absorber side
659     //  Mother Volume
660     ptube[0] = 2.900;
661     ptube[1] = 4.200;
662     ptube[2] = 2.750;
663     gMC->Gsvolu("QBT2","TUBE", idtmed[kAir], ptube, 3);
664     // z  = 43.3 - 48.8
665     gMC->Gspos("QBT2", 1, "QBPM", 0., 0., -hlenQbbe-ptube[2], idrotm[2012], "ONLY");
666
667     ptube[0] = 2.900;
668     ptube[1] = 3.150;
669     ptube[2] = 0.375;
670     //
671     //  Be-part
672     gMC->Gsvolu("QB02","TUBE", idtmed[kAlu], ptube, 3);
673
674     ptube[1] = 3.000;
675     gMC->Gsvolu("QBA2","TUBE", idtmed[kBe], ptube, 3);
676
677     gMC->Gspos("QBA2", 1, "QB02", 0., 0., 0, 0, "ONLY");
678 //  z = -2.75 -> -2.00
679     gMC->Gspos("QB02", 1, "QBT2", 0., 0.,-2.75+ptube[2], 0, "ONLY");
680
681     // Alu part    
682     ptube[0] = 2.900;
683     ptube[1] = 3.150;
684     ptube[2] = 2.375;
685 // z = -2.00 -> 2.75
686     gMC->Gsvolu("QB04","TUBE", idtmed[kAlu], ptube, 3);
687     gMC->Gspos("QB04", 1, "QBT2", 0., 0.,-2.+ptube[2], 0, "ONLY");
688     
689     
690     ptube[0] = 3.15;
691     ptube[1] = 3.50;
692     ptube[2] = 0.10;
693 // z = 2.55 -> 2.75
694     gMC->Gsvolu("QB06","TUBE", idtmed[kAlu], ptube, 3);
695     gMC->Gspos("QB06", 1, "QBT2", 0., 0., 2.55+ptube[2], 0, "ONLY");
696     
697     
698     // Fixation
699     ptube[0] = 0.0;
700     ptube[1] = 0.1;
701     ptube[2] = 0.5;
702     
703     gMC->Gsvolu("QBA8","TUBE", idtmed[kInox], ptube, 3);
704     gMC->Gspos("QBA8", 1 ,"QBT2",  0.000,  3.650, -1.25, idrotm[2002], "ONLY");
705     gMC->Gspos("QBA8", 2 ,"QBT2",  3.161, -1.825, -1.25, idrotm[2001], "ONLY");
706     gMC->Gspos("QBA8", 3 ,"QBT2", -3.161, -1.825, -1.25, idrotm[2003], "ONLY");
707     
708     // Carbon ring
709     ptube[0] = 3.15;
710     ptube[1] = 4.10;
711     ptube[2] = 0.55;
712     
713     gMC->Gsvolu("QB77","TUBE", idtmed[kC], ptube, 3);
714
715     ptube[0] = 3.15;
716     ptube[1] = 3.50;
717     ptube[2] = 0.10;
718     gMC->Gsvolu("QBB7","TUBE", idtmed[kInox], ptube, 3);
719     gMC->Gspos("QBB7", 1, "QB77", 0.0, 0.0, 0.55-0.2, 0, "ONLY");
720     gMC->Gspos("QB77", 1, "QBT2", 0.0, 0.0, 2., 0, "ONLY");
721
722
723 // beam pipe between metal-metal transition and bellows
724     ptube[0] = 2.9;
725     ptube[1] = 3.0;
726     ptube[2] = (81.7-(2.*dzb+dzbb)-(hlenQbbe+5.5))/2.;
727     
728
729     gMC->Gsvolu("QB24","TUBE", idtmed[kInox], ptube, 3);
730 //  z = 48.8 - 50.9    
731     dz = (hlenQbbe+5.5)+ptube[2];
732     gMC->Gspos("QB24", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
733 //
734 // beam pipe between flange and bellows    
735     ptube[0] = 2.90;
736     ptube[1] = 3.00;
737     ptube[2] = 0.45;
738
739     gMC->Gsvolu("QB22","TUBE", idtmed[kInox], ptube, 3);
740     gMC->Gspos("QB22", 1 ,"QBPM", 0.0, 0.0, -82.15, 0, "ONLY");
741
742 // 
743 // Flange
744 // 
745 //  Mother Volume
746     ptube[0] = 2.900;
747     ptube[1] = 4.300;
748     ptube[2] = 1.400;
749     
750     gMC->Gsvolu("QFA0","TUBE", idtmed[kAlu], ptube, 3);
751     gMC->Gspos("QFA0", 1 ,"QBPM", 0.0, 0.0, -84.0, 0, "ONLY");
752 //
753 //  inner Inox piece
754     ptube[0] = 2.900;
755     ptube[1] = 3.500;
756     ptube[2] = 0.450;
757     gMC->Gsvolu("QFA1","TUBE", idtmed[kInox], ptube, 3);
758     gMC->Gspos("QFA1", 1 ,"QFA0", 0.0, 0.0, 0.225, 0, "ONLY");
759 //
760 //  8 x M5 Inox
761     ptube[0] = 0.000;
762     ptube[1] = 0.250;
763     ptube[2] = 1.400;
764     gMC->Gsvolu("QFA2","TUBE", idtmed[kInox], ptube, 3);
765     for (i=0; i<8; i++) {
766         Float_t phi = i*45.*kDegrad;
767         Float_t xpos = 3.9*TMath::Sin(phi);
768         Float_t ypos = 3.9*TMath::Cos(phi);
769         gMC->Gspos("QFA2", i+1, "QFA0", xpos, ypos, 0., 0, "ONLY");
770     }
771
772
773     ptube[0] = 2.900;
774     ptube[1] = 3.000;
775     ptube[2] = 2.300;
776     
777     gMC->Gsvolu("QB32","TUBE", idtmed[kInox], ptube, 3);
778     gMC->Gspos("QB32", 1 ,"QBPM", 0.0, 0.0, -90.+2.3, 0, "ONLY");
779
780     //bellow on absorber side
781     ptube[2] = (2.*dzb+dzbb)/2.;
782     dz = (81.7-ptube[2]);
783     gMC->Gspos("QBE0", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
784
785
786 // --- Place the PIPE ghost volume (QBPM) in its mother volume (ALIC)
787 //    by rotating it to 180 deg. and make it invisible
788 // 
789
790   
791     gMC->Gspos("QBPM",1,"ALIC",0,0,0,idrotm[2013], "ONLY");
792
793
794 //
795 // ******** Ion Pump volume description starts here ******
796 // 
797     //
798     // Getters ->
799     pbox[0] =  6.50;
800     pbox[1] =  6.75;
801     pbox[2] = 15.60;
802     gMC->Gsvolu("QI32","BOX", idtmed[kInox], pbox, 3);
803     
804     pbox[0] =  5.90;
805     pbox[1] =  6.15;
806     pbox[2] = 15.00;
807     gMC->Gsvolu("QI42","BOX", idtmed[kGetter], pbox, 3);
808     gMC->Gspos("QI42", 1, "QI32", 0.0, 0.0, 0.0, 0, "ONLY");
809 // <-
810
811     ptube[0] =  0.0;
812     ptube[1] = 19.0;
813     ptube[2] =  2.5;
814     gMC->Gsvolu("QI33","TUBE", idtmed[kInox], ptube, 3);
815
816
817     ptube[0] =  0.0;
818     ptube[1] = 15.0;
819     ptube[2] =  2.5;
820     gMC->Gsvolu("QI43","TUBE", idtmed[kAir], ptube, 3);
821     gMC->Gspos("QI43", 1, "QI33", 0.0, 0.0, 0.0, 0, "ONLY");
822 // 
823 // Connecting tube ->
824     ptube[0] =  0.0;
825     ptube[1] =  5.4;
826     ptube[2] = 14.6;
827     gMC->Gsvolu("QI34","TUBE", idtmed[kInox], ptube, 3);
828     
829     ptube[0] =  0.0;
830     ptube[1] =  4.8;
831     ptube[2] = 14.6;
832     gMC->Gsvolu("QI44","TUBE", idtmed[kAir], ptube, 3);
833     gMC->Gspos("QI44", 1, "QI34", 0.0, 0.0, 0.0, 0, "ONLY");
834 // <-
835
836   //
837   // Flange ->
838     ptube[0] =  5.41;
839     ptube[1] =  7.30;
840     ptube[2] =  2.15;
841     gMC->Gsvolu("QI35","TUBE", idtmed[kInox], ptube, 3);
842 // <-
843     Float_t zPump = 415.;
844     gMC->Gspos("QI32", 1, "QBPM", 0.0, -44.25, zPump, 0, "ONLY");
845     gMC->Gspos("QI33", 1, "QBPM", 0.0, -35.00, zPump,idrotm[2002], "ONLY");
846     gMC->Gspos("QI34", 1, "QBPM", 0.0, -17.90, zPump,idrotm[2002], "ONLY");
847     gMC->Gspos("QI35", 1, "QBPM", 0.0, -24.35, zPump,idrotm[2002], "ONLY");
848
849     gMC->Gsatt("QBPM", "SEEN", 1);
850     gMC->Gsatt("QBEM", "SEEN", 1);
851 }
852
853
854
855 //___________________________________________
856 void AliPIPEv0::CreateMaterials()
857 {
858   //
859   // Define materials for beam pipe
860   //
861
862   if(fDebug) printf("%s: Create PIPEv0 materials \n",ClassName());
863   Int_t   isxfld = gAlice->Field()->Integ();
864   Float_t sxmgmx = gAlice->Field()->Max();
865   // Steel (Inox)  
866   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
867   Float_t zsteel[4] = { 26.,24.,28.,14. };
868   Float_t wsteel[4] = { .715,.18,.1,.005 };
869   // AlBe - alloy 
870   Float_t aAlBe[2] = { 26.98, 9.01};
871   Float_t zAlBe[2] = { 13.00, 4.00};
872   Float_t wAlBe[2] = { 0.4, 0.6};
873
874   //
875   //     Berillium 
876   AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
877   //
878   //     Carbon 
879   AliMaterial(6,  "CARBON$   ", 12.01, 6., 2.265, 18.8, 49.9);
880   //
881   //     Aluminum 
882   AliMaterial(9,  "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
883   //
884   //     Air 
885   AliMaterial(15, "AIR$      ", 14.61, 7.3, .001205, 30423.24, 67500.);
886   //
887   //     Vacuum 
888   AliMaterial(16, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
889   //
890   //     stainless Steel 
891   AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
892   //
893   //     reduced density steel to approximate pump getter material
894   AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
895   //     Al-Be alloy
896   //     
897   AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
898   //
899   // **************** 
900   //     Defines tracking media parameters. 
901   //
902   Float_t epsil  = .001;    // Tracking precision, 
903   Float_t stemax = -0.01;   // Maximum displacement for multiple scat 
904   Float_t tmaxfd = -20.;    // Maximum angle due to field deflection 
905   Float_t deemax = -.3;     // Maximum fractional energy loss, DLS 
906   Float_t stmin  = -.8;
907   // *************** 
908   //
909   //    Beryllium 
910   
911   AliMedium(5, "BE",       5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
912
913   //    Carbon 
914   AliMedium(6, "C",        6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
915   //
916   //    Aluminum 
917   AliMedium(9, "ALU",      9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
918   //
919   //    Air 
920   AliMedium(15, "AIR",    15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
921   //
922   //    Vacuum 
923   AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
924   //
925   //    Steel 
926   AliMedium(19, "INOX",   19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
927   //
928   //    Getter 
929   AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
930   //
931   //   AlBe - Aloy 
932   AliMedium(21, "AlBe"  , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
933
934 }
935
936
937
938
939
940
941
942
943
944