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