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