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