Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 : * *
4 : * Author: The ALICE Off-line Project. *
5 : * Contributors are mentioned in the code where appropriate. *
6 : * *
7 : * Permission to use, copy, modify and distribute this software and its *
8 : * documentation strictly for non-commercial purposes is hereby granted *
9 : * without fee, provided that the above copyright notice appears in all *
10 : * copies and that both the copyright notice and this permission notice *
11 : * appear in the supporting documentation. The authors make no claims *
12 : * about the suitability of this software for any purpose. It is *
13 : * provided "as is" without express or implied warranty. *
14 : **************************************************************************/
15 :
16 : /* $Id$ */
17 :
18 : //-------------------------------------------------------------------------
19 : // Beam pipe class
20 : // Default version
21 : // Author: A.Morsch
22 : //-------------------------------------------------------------------------
23 :
24 : #include <Riostream.h>
25 :
26 : #include <TGeoManager.h>
27 : #include <TGeoGlobalMagField.h>
28 : #include <TSystem.h>
29 : #include <TVirtualMC.h>
30 : #include <TArrayI.h>
31 :
32 : #include "AliConst.h"
33 : #include "AliMagF.h"
34 : #include "AliPIPEv0.h"
35 : #include "AliRun.h"
36 : #include "AliLog.h"
37 :
38 12 : ClassImp(AliPIPEv0)
39 :
40 :
41 : //_____________________________________________________________________________
42 0 : AliPIPEv0::AliPIPEv0():
43 0 : fPipeMaterial(kBe)
44 0 : {
45 : // Constructor
46 0 : }
47 :
48 : //_____________________________________________________________________________
49 : AliPIPEv0::AliPIPEv0(const char *name, const char *title)
50 0 : : AliPIPE(name,title),
51 0 : fPipeMaterial(kBe)
52 0 : {
53 : // Constructor
54 0 : }
55 :
56 :
57 : //___________________________________________
58 : void AliPIPEv0::CreateGeometry()
59 : {
60 : //Begin_Html
61 : /*
62 : <img src="picts/pipe.gif">
63 : */
64 : //End_Html
65 :
66 :
67 : //Begin_Html
68 : /*
69 : <img src="picts/tree_pipe.gif">
70 : */
71 : //End_Html
72 :
73 0 : AliDebugClass(1,"Create PIPEv0 geometry");
74 :
75 :
76 0 : Int_t *idtmed = fIdtmed->GetArray();
77 0 : Float_t ppcon[90], ptube[3], pbox[3];
78 : Int_t i=0;
79 :
80 :
81 0 : Int_t idrotm[2099];
82 0 : AliMatrix(idrotm[2001],90.,240., 0., 0., 90.,150.);
83 0 : AliMatrix(idrotm[2002],90., 0., 0., 0., 90.,270.);
84 0 : AliMatrix(idrotm[2003],90.,120., 0., 0., 90., 30.);
85 0 : AliMatrix(idrotm[2004],90.,315., 90., 45., 0., 0.);
86 0 : AliMatrix(idrotm[2005],90.,270., 90., 0., 0., 0.);
87 0 : AliMatrix(idrotm[2006],90.,225., 90.,315., 0., 0.);
88 0 : AliMatrix(idrotm[2007],90.,180., 90.,270., 0., 0.);
89 0 : AliMatrix(idrotm[2008],90.,135., 90.,225., 0., 0.);
90 0 : AliMatrix(idrotm[2009],90., 90., 90.,180., 0., 0.);
91 0 : AliMatrix(idrotm[2010],90., 45., 90.,135., 0., 0.);
92 0 : idrotm[2011] = 0;
93 0 : AliMatrix(idrotm[2012],90.,180., 90., 90.,180., 0.);
94 0 : AliMatrix(idrotm[2013],90., 0., 90., 90.,180., 0.);
95 : //
96 : // Bellow
97 : //
98 : // distance between bellows
99 : // total size of bellow section
100 : const Float_t kdzb = 14.6;
101 : // size of undulated region
102 : //
103 : // Absorber side
104 : //
105 : // distance between bellows
106 : const Float_t kdzbbA = 4.6;
107 : // total size of bellow section
108 : const Float_t kdzbA = 14.6;
109 : // size of undulated region
110 : const Float_t kdzubA = 3.75;
111 :
112 : // half-lengths of various beam pipe sections
113 : // central Be-Pipe
114 : Float_t hlenQbbe1 = 40.;
115 : Float_t hlenQbbe2 = 36.5;
116 0 : Float_t hlenQbbe = (hlenQbbe1+hlenQbbe2)/2.;
117 : //
118 : //
119 : // Float_t hlenQbt1 = 5.5/2.;
120 : //
121 : // Pipe outside central region (non-absorber side)
122 : Float_t hlenQbab = 157.5 + 23./2.;
123 : //
124 : // Flange non-absorber side
125 : Float_t hlenQb29 = 11.5/2.+1.75 + 5.0;
126 : //
127 : // Bellow element
128 : Float_t hlenQbe0 = kdzbA;
129 : //
130 : // Inox pipe between Be and Bellow (absorber side)
131 : Float_t hlenQb24[3] = {11.3/2., 1.8, 3.3};
132 : //
133 : //
134 0 : Float_t hlenQb28 = (800.-hlenQbbe1-2.*hlenQbab-4.*hlenQb29-2.*hlenQbe0)/2.;
135 : //
136 : // Position of the pump
137 : Float_t zPump = hlenQbbe1+2.*hlenQbab+2.*hlenQb29+kdzb;
138 : //
139 : // Inner beam pipe radius
140 : // Be
141 : const Float_t kRinBe = 2.9;
142 : // Steel
143 : const Float_t kRinSt = 2.9;
144 : // Bellow
145 : const Float_t kRinSB = 2.92;
146 : //
147 : // Outer beam pipe radius
148 : // Be
149 : const Float_t kRoutBe = 2.98;
150 : // Steel
151 : const Float_t kRoutSt = 2.98;
152 : // Bellow
153 : const Float_t kRoutSB = 3.00;
154 :
155 : //
156 : Float_t dz;
157 :
158 : //
159 : // The peam pipe up to the Front Absorber
160 : //
161 : // Mother Volume QBPM
162 0 : ppcon[0] = 0;
163 0 : ppcon[1] = 360;
164 0 : ppcon[2] = 20;
165 : // 1
166 0 : ppcon[3] = -90.;
167 0 : ppcon[4] = 0.;
168 0 : ppcon[5] = 3.1;
169 : // 2
170 0 : ppcon[6] = -84.;
171 0 : ppcon[7] = 0.;
172 0 : ppcon[8] = 3.1;
173 : // 3
174 0 : ppcon[9] = -84.;
175 0 : ppcon[10] = 0.;
176 0 : ppcon[11] = 4.4;
177 : // 4
178 0 : ppcon[12] = -90+2.*hlenQb24[2]+2.8+2.*hlenQb24[1];
179 0 : ppcon[13] = 0.;
180 0 : ppcon[14] = 4.4;
181 : // 5
182 0 : ppcon[15] = ppcon[12];
183 0 : ppcon[16] = 0.;
184 0 : ppcon[17] = 4.1;
185 : // 6
186 0 : ppcon[18] = ppcon[15] + 2.5 + 2.*kdzubA+0.2;
187 0 : ppcon[19] = 0.;
188 0 : ppcon[20] = 4.1;
189 : // 7
190 0 : ppcon[21] = ppcon[18];
191 0 : ppcon[22] = 0.;
192 0 : ppcon[23] = 3.2;
193 : // 8
194 0 : ppcon[24] = ppcon[21] + 2.* kdzbbA-0.4;
195 0 : ppcon[25] = 0.;
196 0 : ppcon[26] = 3.2;
197 : // 9
198 0 : ppcon[27] = ppcon[24];
199 0 : ppcon[28] = 0.;
200 0 : ppcon[29] = 4.1;
201 : // 10
202 0 : ppcon[30] = -44.;
203 0 : ppcon[31] = 0.;
204 0 : ppcon[32] = 4.1;
205 : // 11
206 0 : ppcon[33] = -44.;
207 0 : ppcon[34] = 0;
208 0 : ppcon[35] = 3.06;
209 : // 12
210 0 : ppcon[36] = 38.;
211 0 : ppcon[37] = 0;
212 0 : ppcon[38] = 3.06;
213 : // 13
214 0 : ppcon[39] = 38.;
215 0 : ppcon[40] = 0;
216 0 : ppcon[41] = 4.1;
217 : // 14
218 0 : ppcon[42] = hlenQbbe1+2.*hlenQbab-0.1;
219 0 : ppcon[43] = 0.;
220 0 : ppcon[44] = 4.1;
221 : // 15
222 0 : ppcon[45] = ppcon[42];
223 0 : ppcon[46] = 0.;
224 0 : ppcon[47] = 4.1;
225 : // 16
226 0 : ppcon[48] = ppcon[45]+2.*hlenQb29-5.;
227 0 : ppcon[49] = 0.;
228 0 : ppcon[50] = 4.1;
229 : // 17
230 0 : ppcon[51] = ppcon[48];
231 0 : ppcon[52] = 0.;
232 0 : ppcon[53] = 56.;
233 : // 18
234 0 : ppcon[54] = ppcon[51]+2.*kdzb+10.;
235 0 : ppcon[55] = 0.;
236 0 : ppcon[56] = 56.;
237 : // 19
238 0 : ppcon[57] = ppcon[54];
239 0 : ppcon[58] = 0.;
240 0 : ppcon[59] = 4.1;
241 : // 20
242 0 : ppcon[60] = 800.;
243 0 : ppcon[61] = 0.;
244 0 : ppcon[62] = 4.1;
245 :
246 0 : TVirtualMC::GetMC()->Gsvolu("QBPM", "PCON", idtmed[kAir], ppcon,63);
247 :
248 :
249 : //
250 : // volume definitions of various sections
251 : //
252 :
253 : //
254 : // The Vacuum
255 0 : TVirtualMC::GetMC()->Gsvolu("QBVA","TUBE", idtmed[kVac], ptube, 0);
256 0 : ptube[0] = 0.0;
257 0 : ptube[1] = kRinSt;
258 0 : ptube[2] = (90.-hlenQbbe2)/2.;
259 0 : dz = -90. + ptube[2];
260 0 : TVirtualMC::GetMC()->Gsposp ("QBVA", 1, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
261 0 : dz = dz + ptube[2];
262 :
263 0 : ptube[1] = kRinBe;
264 0 : ptube[2] = hlenQbbe+hlenQbab;
265 0 : dz = dz + ptube[2];
266 0 : TVirtualMC::GetMC()->Gsposp ("QBVA", 2, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
267 0 : dz = dz + ptube[2];
268 :
269 0 : ptube[1] = kRinSt;
270 0 : ptube[2] = (800.-hlenQbbe1-2.*hlenQbab)/2.;
271 0 : dz = dz + ptube[2];
272 0 : TVirtualMC::GetMC()->Gsposp ("QBVA", 3, "QBPM", 0., 0., dz , 0, "ONLY", ptube, 3);
273 :
274 : //
275 : // Be Pipe in central Alice
276 0 : ptube[0] = kRinBe;
277 0 : ptube[1] = kRoutBe;
278 0 : ptube[2] = hlenQbbe;
279 :
280 0 : TVirtualMC::GetMC()->Gsvolu("QBBE","TUBE", idtmed[kBe], ptube, 3);
281 :
282 : //
283 : // Support Ring
284 : //
285 : // Mother
286 0 : ptube[0] = kRoutSB;
287 0 : ptube[1] = 4.0;
288 0 : ptube[2] = 0.6;
289 0 : TVirtualMC::GetMC()->Gsvolu("QBSR", "TUBE", idtmed[kAlu], ptube,3);
290 : // Inner support
291 0 : ptube[0] = kRoutSB;
292 0 : ptube[1] = 3.5;
293 0 : TVirtualMC::GetMC()->Gsvolu("QBSS", "TUBE", idtmed[kPA], ptube,3);
294 0 : TVirtualMC::GetMC()->Gspos("QBSS", 1, "QBSR", 0.0, 0.0, 0.0, 0, "ONLY");
295 :
296 0 : TVirtualMC::GetMC()->Gspos("QBSR", 1, "QBPM", 0.0, 0.0, 40., 0, "ONLY");
297 0 : TVirtualMC::GetMC()->Gspos("QBSR", 2, "QBPM", 0.0, 0.0, 150., 0, "ONLY");
298 0 : TVirtualMC::GetMC()->Gspos("QBSR", 3, "QBPM", 0.0, 0.0, 260., 0, "ONLY");
299 0 : TVirtualMC::GetMC()->Gspos("QBSR", 4, "QBPM", 0.0, 0.0,- 46., 0, "ONLY");
300 : //
301 : // Flange and Fixed Point: non absorber side
302 : //
303 : // ---------->
304 : //
305 : // Mother
306 0 : ppcon[0] = 0;
307 0 : ppcon[1] = 360;
308 0 : ppcon[2] = 4;
309 : // 1:
310 0 : ppcon[3] = -hlenQb29;
311 0 : ppcon[4] = kRinSt;
312 0 : ppcon[5] = 5.8;
313 : // 2
314 0 : ppcon[6] = ppcon[3]+3.6;
315 0 : ppcon[7] = kRinSt;
316 0 : ppcon[8] = 5.8;
317 : // 3
318 0 : ppcon[9] = ppcon[6];
319 0 : ppcon[10] = kRinSt;
320 0 : ppcon[11] = 3.6;
321 : // 4
322 0 : ppcon[12] = hlenQb29;
323 0 : ppcon[13] = kRinSt;
324 0 : ppcon[14] = 3.6;
325 :
326 0 : TVirtualMC::GetMC()->Gsvolu("QB29", "PCON", idtmed[kAir], ppcon,15);
327 :
328 :
329 : // Flange
330 0 : ptube[0] = kRinSt;
331 0 : ptube[1] = 5.7;
332 0 : ptube[2] = 1.75;
333 0 : TVirtualMC::GetMC()->Gsvolu("QF29","TUBE", idtmed[kInox], ptube, 3);
334 0 : TVirtualMC::GetMC()->Gspos("QF29", 1, "QB29", 0.0, 0.0, -hlenQb29+1.75, 0, "ONLY");
335 : // Pipe
336 0 : ptube[0] = kRinSt;
337 0 : ptube[1] = 3.06;
338 0 : ptube[2] = hlenQb29;
339 0 : TVirtualMC::GetMC()->Gsvolu("QS29","TUBE", idtmed[kInox], ptube, 3);
340 0 : TVirtualMC::GetMC()->Gspos("QS29", 1, "QB29", 0.0, 0.0, 0., 0, "ONLY");
341 : // Fixed point
342 0 : ptube[0] = kRinSt;
343 0 : ptube[1] = 3.5;
344 0 : ptube[2] = 0.3;
345 0 : TVirtualMC::GetMC()->Gsvolu("QP29","TUBE", idtmed[kInox], ptube, 3);
346 0 : TVirtualMC::GetMC()->Gspos("QP29", 1, "QB29", 0.0, 0.0, -hlenQb29+9.75+3., 0, "ONLY");
347 :
348 : //
349 : //
350 : // Inox beam pipe: final section on non-absorber side
351 :
352 0 : ptube[0] = kRinSt;
353 0 : ptube[1] = kRoutSt;
354 0 : ptube[2] = hlenQb28;
355 :
356 0 : TVirtualMC::GetMC()->Gsvolu("QB28","TUBE", idtmed[kInox], ptube, 3);
357 : //
358 : //
359 : // Air with high transport cuts outside QB28
360 0 : ptube[0] = 25.;
361 0 : ptube[1] = 100.;
362 0 : ptube[2] = hlenQb28;
363 :
364 0 : TVirtualMC::GetMC()->Gsvolu("QA28","TUBE", idtmed[kAirHigh], ptube, 3);
365 0 : gGeoManager->SetVolumeAttribute("QA28", "SEEN", 0);
366 : // Al-Be (40-60 wgt%, rho=2.7 g/cm**3) beam pipe
367 : //
368 : // This section is under study (A.M. 1/2/2002)
369 : //
370 :
371 0 : ptube[0] = kRinBe;
372 0 : if (fPipeMaterial == kAlu) {
373 0 : ptube[1] = 3.06;
374 0 : } else if (fPipeMaterial == kBe) {
375 0 : ptube[1] = kRoutBe;
376 0 : } else if (fPipeMaterial == kInox){
377 0 : ptube[1] = kRoutSt;
378 0 : }
379 0 : ptube[2] = hlenQbab;
380 :
381 0 : TVirtualMC::GetMC()->Gsvolu("QBAB","TUBE", idtmed[fPipeMaterial], ptube, 3);
382 :
383 : // 2.5 mm thick SS tube for hanging pump
384 : /*
385 : ptube[0] = Rin;
386 : ptube[1] = 3.15;
387 : ptube[2] = hlenQb26;
388 :
389 : TVirtualMC::GetMC()->Gsvolu("QB26","TUBE", idtmed[kInox], ptube, 3);
390 : */
391 : //
392 : // Bellows
393 : //
394 : //
395 : // Mother Volume
396 0 : Float_t pconQBE0[33];
397 0 : pconQBE0[ 0]= 0;
398 0 : pconQBE0[ 1]= 360;
399 0 : pconQBE0[ 2]= 10;
400 : // 1
401 0 : pconQBE0[ 3] = -kdzbA;
402 0 : pconQBE0[ 4] = kRinSB;
403 0 : pconQBE0[ 5] = kRoutSB;
404 : //
405 0 : pconQBE0[ 6] = -kdzbA+2.5;
406 0 : pconQBE0[ 7] = kRinSB;
407 0 : pconQBE0[ 8] = kRoutSB;
408 : // 2
409 0 : pconQBE0[ 9] = -kdzbA+2.5;
410 0 : pconQBE0[10] = kRinSB;
411 0 : pconQBE0[11] = 3.60;
412 : // 3
413 0 : pconQBE0[12] = -kdzbA+2.5+2.*kdzubA;
414 0 : pconQBE0[13] = kRinSB;
415 0 : pconQBE0[14] = 3.60;
416 : // 4
417 0 : pconQBE0[15] = -kdzbA+2.5+2.*kdzubA;
418 0 : pconQBE0[16] = kRinSB;
419 0 : pconQBE0[17] = kRoutSB;
420 : // 5
421 0 : pconQBE0[18] = -kdzbA+2.5+2.*kdzubA+2.*kdzbbA;
422 0 : pconQBE0[19] = kRinSB;
423 0 : pconQBE0[20] = kRoutSB;
424 : // 6
425 0 : pconQBE0[21] = -kdzbA+2.5+2.*kdzubA+2.*kdzbbA;
426 0 : pconQBE0[22] = kRinSB;
427 0 : pconQBE0[23] = 3.60;
428 : // 7
429 0 : pconQBE0[24] = -kdzbA+2.5+4.*kdzubA+2.*kdzbbA;
430 0 : pconQBE0[25] = kRinSB;
431 0 : pconQBE0[26] = 3.60;
432 : // 8
433 0 : pconQBE0[27] = -kdzbA+2.5+4.*kdzubA+2.*kdzbbA;
434 0 : pconQBE0[28] = kRinSB;
435 0 : pconQBE0[29] = kRoutSB;
436 : // 9
437 0 : pconQBE0[30] = -kdzbA+5.0+4.*kdzubA+2.*kdzbbA;
438 0 : pconQBE0[31] = kRinSB;
439 0 : pconQBE0[32] = kRoutSB;
440 :
441 0 : TVirtualMC::GetMC()->Gsvolu("QBE0", "PCON", idtmed[kAir], pconQBE0, 33);
442 : //
443 : // Undulated piece mother
444 0 : ptube[0] = kRinSB;
445 0 : ptube[1] = 3.60;
446 0 : ptube[2] = kdzubA;
447 0 : TVirtualMC::GetMC()->Gsvolu("QBEM","TUBE", idtmed[kAir], ptube, 3);
448 : dz = -kdzbA+kdzubA+2.5;
449 0 : TVirtualMC::GetMC()->Gspos("QBEM", 2 ,"QBE0", 0.0, 0.0, dz, 0 , "ONLY");
450 0 : TVirtualMC::GetMC()->Gspos("QBEM", 1 ,"QBE0", 0.0, 0.0, -dz, idrotm[2012], "ONLY");
451 : //
452 0 : Float_t pund[30];
453 : Float_t uw = 0.02;
454 : Float_t ur = 2.*kdzubA-36.*uw;
455 0 : Float_t uz = ur/37.;
456 0 : Float_t ut = uz+uw;
457 :
458 0 : pund[ 0] = 0;
459 0 : pund[ 1] = 360;
460 0 : pund[ 2] = 8;
461 :
462 0 : pund[ 3] = -ut;
463 0 : pund[ 4] = kRinSB;
464 0 : pund[ 5] = kRinSB+uw;
465 :
466 0 : pund[ 6] = -ut+uz;
467 0 : pund[ 7] = pund[4];
468 0 : pund[ 8] = pund[5];
469 :
470 0 : pund[ 9] = pund[6];
471 0 : pund[10] = pund[4];
472 0 : pund[11] = 3.6;
473 :
474 0 : pund[12] = pund[9]+uw;
475 0 : pund[13] = pund[10];
476 0 : pund[14] = pund[11];
477 :
478 0 : pund[15] = pund[12];
479 0 : pund[16] = 3.6-uw;
480 0 : pund[17] = pund[14];
481 :
482 0 : pund[18] = pund[12]+uz;
483 0 : pund[19] = pund[16];
484 0 : pund[20] = pund[17];
485 :
486 0 : pund[21] = pund[18];
487 0 : pund[22] = kRinSB;
488 0 : pund[23] = pund[20];
489 :
490 0 : pund[24] = pund[21]+uw;
491 0 : pund[25] = pund[22];
492 0 : pund[26] = pund[23];
493 :
494 0 : TVirtualMC::GetMC()->Gsvolu("QBEU", "PCON", idtmed[kInox], pund, 27);
495 :
496 0 : for (i = 0; i < 18; i++)
497 : {
498 0 : dz = -kdzubA+(1+2*i)*ut;
499 0 : TVirtualMC::GetMC()->Gspos("QBEU", i+1 ,"QBEM", 0.0, 0.0, dz, 0 , "ONLY");
500 : }
501 0 : ptube[0] = kRinSB;
502 0 : ptube[1] = kRinSB+uw;
503 0 : ptube[2] = uz;
504 0 : TVirtualMC::GetMC()->Gsvolu("QBEW","TUBE", idtmed[kInox], ptube, 3);
505 0 : TVirtualMC::GetMC()->Gspos("QBEW", 1 ,"QBEM", 0.0, 0.0, kdzubA-uz, 0 , "ONLY");
506 :
507 : //
508 : // BeamPipe
509 0 : TVirtualMC::GetMC()->Gsvolu("QBEP","TUBE", idtmed[kInox], ptube, 0);
510 0 : ptube[0] = kRinSB;
511 0 : ptube[1] = kRoutSB;
512 0 : ptube[2] = 1.25;
513 0 : TVirtualMC::GetMC()->Gsposp("QBEP", 1 ,"QBE0", 0.0, 0.0, -kdzbA+1.25, 0 , "ONLY", ptube, 3);
514 0 : TVirtualMC::GetMC()->Gsposp("QBEP", 2 ,"QBE0", 0.0, 0.0, kdzbA-1.25, 0 , "ONLY", ptube, 3);
515 0 : ptube[2] = kdzbbA;
516 0 : TVirtualMC::GetMC()->Gsposp("QBEP", 3 ,"QBE0", 0.0, 0.0, 0., 0 , "ONLY", ptube, 3);
517 : //
518 : //
519 : // ----> End Bellow
520 : //
521 : // **** Placement of various sections on non-absorber side ****
522 : //
523 : //
524 : // first the beryllium section
525 0 : Float_t zpos = -(hlenQbbe2-hlenQbbe1)/2;
526 0 : TVirtualMC::GetMC()->Gspos("QBBE", 1, "QBPM", 0., 0., zpos, 0, "ONLY");
527 :
528 : // next meta-metal transition QBT1 on on-absorber side
529 : // zpos = zpos + hlenQbbe + hlenQbt1;
530 : // TVirtualMC::GetMC()->Gspos("QBT1", 1, "QBPM", 0., 0., zpos, 0, "ONLY");
531 :
532 : // Aluminium OR Al-be alloy section
533 : zpos = hlenQbbe1+hlenQbab;
534 0 : TVirtualMC::GetMC()->Gspos("QBAB", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
535 : //
536 : // inox flange at the start of bellow
537 : zpos = zpos + hlenQbab + hlenQb29;
538 0 : TVirtualMC::GetMC()->Gspos("QB29", 1, "QBPM", 0.0, 0.0, zpos, idrotm[2012], "ONLY");
539 : //
540 : // bellow section
541 : zpos = zpos + hlenQb29 + hlenQbe0;
542 0 : TVirtualMC::GetMC()->Gspos("QBE0", 2 ,"QBPM", 0.0, 0.0, zpos, 0, "ONLY");
543 : //
544 : // inox flange at the end of bellow and start of thick inox for pump
545 : zpos = zpos + hlenQbe0 + hlenQb29;
546 0 : TVirtualMC::GetMC()->Gspos("QB29", 2, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
547 : //
548 : //last inox section till 800 cm
549 0 : zpos = zpos + hlenQb29 + hlenQb28;
550 0 : TVirtualMC::GetMC()->Gspos("QB28", 1, "QBPM", 0.0, 0.0, zpos, 0, "ONLY");
551 0 : TVirtualMC::GetMC()->Gspos("QA28", 1, "ALIC", 0.0, 0.0, zpos, 0, "ONLY");
552 :
553 : //******** end of placement on non-absorber side *********
554 : //
555 : // **** Absorber side *****
556 : //
557 : //
558 : //
559 : // Beam pipes between elements
560 : //
561 0 : TVirtualMC::GetMC()->Gsvolu("QB24","TUBE", idtmed[kInox], ptube, 0);
562 0 : ptube[0] = kRinSt;
563 0 : ptube[1] = kRoutSt;
564 0 : ptube[2] = hlenQb24[0];
565 0 : Float_t bpbe[33];
566 0 : bpbe[ 0] = 0.;
567 0 : bpbe[ 1] = 360.;
568 0 : bpbe[ 2] = 10.;
569 : // 1
570 0 : bpbe[ 3] = -hlenQb24[0];
571 0 : bpbe[ 4] = kRinSB;
572 0 : bpbe[ 5] = kRoutSB;
573 : // 2
574 0 : bpbe[ 6] = hlenQb24[0] - 5.8;
575 0 : bpbe[ 7] = kRinSB;
576 0 : bpbe[ 8] = kRoutSB;
577 : // 3
578 0 : bpbe[ 9] = hlenQb24[0] - 5.8;
579 0 : bpbe[10] = kRinSt;
580 0 : bpbe[11] = 3.05;
581 : // 4
582 0 : bpbe[12] = hlenQb24[0] - 4.5;
583 0 : bpbe[13] = kRinSt;
584 0 : bpbe[14] = 3.05;
585 : // 5
586 0 : bpbe[15] = hlenQb24[0] - 4.5;
587 0 : bpbe[16] = kRinSt;
588 0 : bpbe[17] = kRoutSt ;
589 : // 6
590 0 : bpbe[18] = hlenQb24[0] - 3.5;
591 0 : bpbe[19] = kRinSt;
592 0 : bpbe[20] = kRoutSt ;
593 : // 7
594 0 : bpbe[21] = hlenQb24[0] - 3.5;
595 0 : bpbe[22] = kRinSt;
596 0 : bpbe[23] = 3.05;
597 : // 8
598 0 : bpbe[24] = hlenQb24[0] - 3.0;
599 0 : bpbe[25] = kRinSt;
600 0 : bpbe[26] = 3.05;
601 : // 9
602 0 : bpbe[27] = hlenQb24[0] - 3.0;
603 0 : bpbe[28] = kRinSt;
604 0 : bpbe[29] = kRoutSt;
605 : // 10
606 0 : bpbe[30] = hlenQb24[0];
607 0 : bpbe[31] = kRinSt;
608 0 : bpbe[32] = kRoutSt;
609 :
610 0 : TVirtualMC::GetMC()->Gsvolu("QA24","PCON", idtmed[kInox], bpbe, 33);
611 :
612 : dz = hlenQbbe2 + hlenQb24[0];
613 :
614 0 : TVirtualMC::GetMC()->Gspos("QA24", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
615 : //
616 : // Bellow on absorber side
617 :
618 : dz = dz+hlenQb24[0] + kdzbA;
619 0 : TVirtualMC::GetMC()->Gspos("QBE0", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
620 : //
621 0 : ptube[2] = hlenQb24[1];
622 : dz = dz + kdzb + ptube[2];
623 0 : TVirtualMC::GetMC()->Gsposp("QB24", 2 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY", ptube, 3);
624 0 : dz = dz + ptube[2];
625 :
626 : //
627 : // Flange
628 : //
629 : // Mother Volume
630 0 : ptube[0] = kRinSB;
631 0 : ptube[1] = 4.300;
632 0 : ptube[2] = 1.4;
633 :
634 0 : TVirtualMC::GetMC()->Gsvolu("QFA0","TUBE", idtmed[kInox], ptube, 3);
635 0 : dz = dz + ptube[2];
636 0 : TVirtualMC::GetMC()->Gspos("QFA0", 1 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY");
637 0 : dz = dz + ptube[2];
638 : //
639 : //
640 0 : ptube[0] = kRinSB;
641 0 : ptube[1] = kRoutSB;
642 0 : ptube[2] = hlenQb24[2];
643 0 : dz = dz + ptube[2];
644 0 : TVirtualMC::GetMC()->Gsposp("QB24", 3 ,"QBPM", 0.0, 0.0, -dz, 0, "ONLY", ptube, 3);
645 :
646 : // --- Place the PIPE ghost volume (QBPM) in its mother volume (ALIC)
647 : // by rotating it to 180 deg. and make it invisible
648 : //
649 0 : TVirtualMC::GetMC()->Gspos("QBPM",1,"ALIC", 0, 0, 0, 0, "ONLY");
650 0 : TVirtualMC::GetMC()->Gsbool("QBPM", "L3DX");
651 0 : TVirtualMC::GetMC()->Gsbool("QBPM", "L3O3");
652 0 : TVirtualMC::GetMC()->Gsbool("QBPM", "L3O4");
653 :
654 :
655 : //
656 : // ******** Ion Pump volume description starts here ******
657 : //
658 : //
659 : // Getters ->
660 0 : pbox[0] = 6.50;
661 0 : pbox[1] = 6.75;
662 0 : pbox[2] = 15.60;
663 0 : TVirtualMC::GetMC()->Gsvolu("QI32","BOX", idtmed[kInox], pbox, 3);
664 :
665 0 : pbox[0] = 5.90;
666 0 : pbox[1] = 6.15;
667 0 : pbox[2] = 15.00;
668 0 : TVirtualMC::GetMC()->Gsvolu("QI42","BOX", idtmed[kGetter], pbox, 3);
669 0 : TVirtualMC::GetMC()->Gspos("QI42", 1, "QI32", 0.0, 0.0, 0.0, 0, "ONLY");
670 : // <-
671 :
672 0 : ptube[0] = 0.0;
673 0 : ptube[1] = 19.0;
674 0 : ptube[2] = 2.5;
675 0 : TVirtualMC::GetMC()->Gsvolu("QI33","TUBE", idtmed[kInox], ptube, 3);
676 :
677 :
678 0 : ptube[0] = 0.0;
679 0 : ptube[1] = 15.0;
680 0 : ptube[2] = 2.5;
681 0 : TVirtualMC::GetMC()->Gsvolu("QI43","TUBE", idtmed[kAir], ptube, 3);
682 0 : TVirtualMC::GetMC()->Gspos("QI43", 1, "QI33", 0.0, 0.0, 0.0, 0, "ONLY");
683 : //
684 : // Connecting tube ->
685 0 : ptube[0] = 0.0;
686 0 : ptube[1] = 4.5;
687 0 : ptube[2] = 14.6;
688 0 : TVirtualMC::GetMC()->Gsvolu("QI34","TUBE", idtmed[kInox], ptube, 3);
689 :
690 0 : ptube[0] = 0.0;
691 0 : ptube[1] = 3.9;
692 0 : ptube[2] = 14.6;
693 0 : TVirtualMC::GetMC()->Gsvolu("QI44","TUBE", idtmed[kAir], ptube, 3);
694 0 : TVirtualMC::GetMC()->Gspos("QI44", 1, "QI34", 0.0, 0.0, 0.0, 0, "ONLY");
695 : // <-
696 :
697 : //
698 : // Flange ->
699 0 : ptube[0] = 4.6;
700 0 : ptube[1] = 7.30;
701 0 : ptube[2] = 2.15;
702 0 : TVirtualMC::GetMC()->Gsvolu("QI35","TUBE", idtmed[kInox], ptube, 3);
703 : // <-
704 0 : TVirtualMC::GetMC()->Gspos("QI32", 1, "QBPM", 0.0, -44.25, zPump, 0, "ONLY");
705 0 : TVirtualMC::GetMC()->Gspos("QI33", 1, "QBPM", 0.0, -35.00, zPump,idrotm[2002], "ONLY");
706 0 : TVirtualMC::GetMC()->Gspos("QI34", 1, "QBPM", 0.0, -17.90, zPump,idrotm[2002], "ONLY");
707 0 : TVirtualMC::GetMC()->Gspos("QI35", 1, "QBPM", 0.0, -24.35, zPump,idrotm[2002], "ONLY");
708 :
709 0 : gGeoManager->SetVolumeAttribute("QBPM", "SEEN", 1);
710 0 : gGeoManager->SetVolumeAttribute("QBEM", "SEEN", 1);
711 0 : }
712 :
713 :
714 :
715 : //___________________________________________
716 : void AliPIPEv0::CreateMaterials()
717 : {
718 : //
719 : // Define materials for beam pipe
720 : //
721 :
722 0 : AliDebugClass(1,"Create PIPEv0 materials");
723 0 : Int_t isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
724 0 : Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
725 : // Steel (Inox)
726 0 : Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
727 0 : Float_t zsteel[4] = { 26.,24.,28.,14. };
728 0 : Float_t wsteel[4] = { .715,.18,.1,.005 };
729 : // AlBe - alloy
730 0 : Float_t aAlBe[2] = { 26.98, 9.01};
731 0 : Float_t zAlBe[2] = { 13.00, 4.00};
732 0 : Float_t wAlBe[2] = { 0.4, 0.6};
733 : //
734 : // Polyamid
735 0 : Float_t aPA[4] = {16., 14., 12., 1.};
736 0 : Float_t zPA[4] = { 8., 7., 6., 1.};
737 0 : Float_t wPA[4] = { 1., 1., 6., 11.};
738 : //
739 : // Air
740 : //
741 0 : Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
742 0 : Float_t zAir[4]={6.,7.,8.,18.};
743 0 : Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
744 : Float_t dAir = 1.20479E-3;
745 : Float_t dAir1 = 1.20479E-10;
746 : //
747 : // Kapton
748 : //
749 0 : Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994};
750 0 : Float_t zKapton[4]={1.,6.,7.,8.};
751 0 : Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235};
752 : Float_t dKapton = 1.42;
753 : //
754 : // Berillium
755 0 : AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
756 : //
757 : // Carbon
758 0 : AliMaterial(6, "CARBON$ ", 12.01, 6., 2.265, 18.8, 49.9);
759 : //
760 : // Aluminum
761 0 : AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
762 : //
763 : // Air
764 0 : AliMixture(15, "AIR$", aAir, zAir, dAir, 4, wAir);
765 0 : AliMixture(35, "AIR_HIGH$", aAir, zAir, dAir, 4, wAir);
766 : //
767 : // Vacuum
768 0 : AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir);
769 : //
770 : // stainless Steel
771 0 : AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
772 : //
773 : // reduced density steel to approximate pump getter material
774 0 : AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel);
775 : // Al-Be alloy
776 : //
777 0 : AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe);
778 : // Polyamid
779 : //
780 0 : AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA);
781 : //
782 : // Kapton
783 0 : AliMixture(23, "KAPTON", aKapton, zKapton, dKapton, 4, wKapton);
784 : //
785 : // ****************
786 : // Defines tracking media parameters.
787 : //
788 : Float_t epsil = .001; // Tracking precision,
789 : Float_t stemax = -0.01; // Maximum displacement for multiple scat
790 : Float_t tmaxfd = -20.; // Maximum angle due to field deflection
791 : Float_t deemax = -.3; // Maximum fractional energy loss, DLS
792 : Float_t stmin = -.8;
793 : // ***************
794 : //
795 : // Beryllium
796 :
797 0 : AliMedium(5, "BE", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
798 :
799 : // Carbon
800 0 : AliMedium(6, "C", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
801 : //
802 : // Aluminum
803 0 : AliMedium(9, "ALU", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
804 : //
805 : // Air
806 0 : AliMedium(15, "AIR", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
807 0 : AliMedium(35, "AIR_HIFG",35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
808 : //
809 : // Vacuum
810 0 : AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
811 : //
812 : // Steel
813 0 : AliMedium(19, "INOX", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
814 : //
815 : // Getter
816 0 : AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
817 : //
818 : // AlBe - Aloy
819 0 : AliMedium(21, "AlBe" , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
820 : //
821 : // Polyamid
822 0 : AliMedium(22, "PA" , 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
823 : //
824 : // KAPTON
825 0 : AliMedium(23, "KAPTON", 23, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
826 :
827 0 : }
828 :
829 :
830 :
831 :
832 :
833 :
834 :
835 :
836 :
837 :
|