]>
Commit | Line | Data |
---|---|---|
61475935 | 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 | // This version uses TGeo | |
21 | // Author: A.Morsch | |
22 | //------------------------------------------------------------------------- | |
23 | ||
24 | #include <Riostream.h> | |
25 | ||
26 | #include <TSystem.h> | |
27 | #include <TVirtualMC.h> | |
28 | #include <TGeoManager.h> | |
29 | #include <TGeoVolume.h> | |
30 | #include <TGeoTorus.h> | |
31 | #include <TGeoTube.h> | |
32 | #include <TGeoPcon.h> | |
33 | #include <TGeoCompositeShape.h> | |
34 | ||
35 | #include "AliConst.h" | |
36 | #include "AliMagF.h" | |
37 | #include "AliPIPEvGEO.h" | |
38 | #include "AliRun.h" | |
4951e003 | 39 | #include "AliLog.h" |
61475935 | 40 | |
41 | ClassImp(AliPIPEvGEO) | |
42 | ||
43 | //_____________________________________________________________________________ | |
44 | AliPIPEvGEO::AliPIPEvGEO() | |
45 | { | |
46 | // Constructor | |
47 | } | |
48 | ||
49 | //_____________________________________________________________________________ | |
50 | AliPIPEvGEO::AliPIPEvGEO(const char *name, const char *title) | |
51 | : AliPIPE(name,title) | |
52 | { | |
53 | // Constructor | |
54 | } | |
55 | ||
56 | ||
57 | //___________________________________________ | |
58 | void AliPIPEvGEO::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 | // | |
74 | // The ALICE central beam-pipe according to drawing LHCVC2C_0001 | |
75 | // Drawings of sub-elements: | |
76 | // | |
77 | // Pos 7 - Minimised Flange: LHCVFX_P0025 | |
78 | // Pos 6 - Standard Flange: STDVFUHV0009 | |
79 | // Pos 8 - Bellow: LHCVBX__0001 | |
80 | // | |
81 | // Absolute z-coordinates -82.0 - 400.0 cm | |
82 | // Total length: 482.0 cm | |
83 | // It consists of 3 main parts: | |
84 | // CP/1 The central Be pipe: 405.0 cm | |
85 | // CP/2 The flange on the non-absorber side: 36.5 cm | |
86 | // CP/3 The double-bellow and flange on the absorber side: 40.5 cm | |
87 | // | |
88 | // | |
4951e003 | 89 | AliDebug(1,"Create PIPEv0 geometry"); |
61475935 | 90 | Int_t *idtmed = fIdtmed->GetArray(); |
91 | Float_t dz; | |
92 | Float_t cpcon[39]; | |
93 | Float_t cpTube[3]; | |
94 | Int_t idrotm[2099]; | |
95 | // | |
96 | // Rotation Matrices | |
97 | // | |
98 | // Rotation by 180 deg | |
99 | AliMatrix(idrotm[2012],90.,180., 90., 90.,180., 0.); | |
100 | ||
101 | // | |
102 | const Float_t kCPz0 = -400.0; | |
103 | const Float_t kCP1Length = 405.0; | |
104 | const Float_t kCP2Length = 36.6; | |
105 | const Float_t kCP3Length = 40.5; | |
106 | ||
107 | const Float_t kCP2pos = kCPz0 + kCP2Length / 2.; | |
108 | const Float_t kCP1pos = kCPz0 + kCP2Length + kCP1Length / 2.; | |
109 | const Float_t kCP3pos = kCPz0 + kCP2Length + kCP1Length + kCP3Length/2.; | |
110 | /////////////////// | |
111 | // CP/1 // | |
112 | /////////////////// | |
113 | // Inner and outer radii of the Be-section [Pos 1] | |
114 | const Float_t kCP1BeRi = 2.90; | |
115 | const Float_t kCP1BeRo = 2.98; | |
116 | // | |
117 | // Be-Stainless Steel adaptor tube [Pos 2] at both ends of the Be-section. Length 5 cm | |
118 | const Float_t kCP1BeStAdaptorLength = 5.00; | |
119 | // | |
120 | // Bulge of the Be-Stainless Steel adaptor Tube [Pos 2] | |
121 | const Float_t kCP1BeStRo = 3.05; | |
122 | // | |
123 | // Length of bulge [Pos 2] | |
124 | const Float_t kCP1BulgeLength = 0.50; | |
125 | // | |
126 | // Distance between bulges [Pos 2] | |
127 | const Float_t kCP1BulgeBulgeDistance = 1.00; | |
128 | // | |
129 | // Length of Be-pipe | |
130 | const Float_t kCP1BeLength = kCP1Length - 2. * kCP1BeStAdaptorLength; | |
131 | // | |
132 | // CP/1 Mother volume | |
133 | cpTube[0] = 0.; | |
134 | cpTube[1] = kCP1BeStRo; | |
135 | cpTube[2] = kCP1Length / 2.; | |
136 | gMC->Gsvolu("Q1MO","TUBE", idtmed[kAir], cpTube, 3); | |
137 | gMC->Gspos("Q1MO", 1, "ALIC", 0., 0., kCP1pos, 0, "ONLY"); | |
138 | ||
139 | // | |
140 | // CP/1 Be-Section | |
141 | // | |
142 | cpTube[0] = 0.; | |
143 | cpTube[1] = kCP1BeRo; | |
144 | cpTube[2] = kCP1BeLength / 2.; | |
145 | gMC->Gsvolu("Q1BE","TUBE", idtmed[kBe], cpTube, 3); | |
146 | cpTube[0] = 0.; | |
147 | cpTube[1] = kCP1BeRi; | |
148 | gMC->Gsvolu("Q1BV","TUBE", idtmed[kVac], cpTube, 3); | |
149 | gMC->Gspos("Q1BV", 1, "Q1BE", 0., 0., 0., 0, "ONLY"); | |
150 | gMC->Gspos("Q1BE", 1, "Q1MO", 0., 0., 0., 0, "ONLY"); | |
151 | // | |
152 | // CP/1 Be-Stainless Steel adaptor tube | |
153 | // | |
154 | cpcon[0 ] = 0; | |
155 | cpcon[1 ] = 360; | |
156 | cpcon[2 ] = 8; | |
157 | // 1 First Bulge | |
158 | cpcon[3 ] = - kCP1BeStAdaptorLength / 2.; | |
159 | cpcon[4 ] = 0.; | |
160 | cpcon[5 ] = kCP1BeStRo; | |
161 | // 2 | |
162 | cpcon[6 ] = cpcon[3] + kCP1BulgeLength; | |
163 | cpcon[7 ] = 0.; | |
164 | cpcon[8 ] = kCP1BeStRo; | |
165 | // 3 | |
166 | cpcon[9 ] = cpcon[6]; | |
167 | cpcon[10] = 0.; | |
168 | cpcon[11] = kCP1BeRo; | |
169 | // 4 Between the bulges | |
170 | cpcon[12] = cpcon[9] + kCP1BulgeBulgeDistance; | |
171 | cpcon[13] = 0.; | |
172 | cpcon[14] = kCP1BeRo; | |
173 | // 5 | |
174 | cpcon[15] = cpcon[12]; | |
175 | cpcon[16] = 0.; | |
176 | cpcon[17] = kCP1BeStRo; | |
177 | // 6 Second bulge | |
178 | cpcon[18] = cpcon[15] + kCP1BulgeLength; | |
179 | cpcon[19] = 0.; | |
180 | cpcon[20] = kCP1BeStRo; | |
181 | // 7 | |
182 | cpcon[21] = cpcon[18] + kCP1BulgeLength; | |
183 | cpcon[22] = 0.; | |
184 | cpcon[23] = kCP1BeRo; | |
185 | // 8 Straight piece | |
186 | cpcon[24] = kCP1BeStAdaptorLength / 2.; | |
187 | cpcon[25] = 0.; | |
188 | cpcon[26] = kCP1BeRo; | |
189 | // | |
190 | gMC->Gsvolu("Q1AT","PCON", idtmed[kInox], cpcon, 27); | |
191 | // | |
192 | // Vacuum | |
193 | cpTube[0] = 0.; | |
194 | cpTube[1] = kCP1BeRi; | |
195 | cpTube[2] = -1.; | |
196 | gMC->Gsvolu("Q1AV","TUBE", idtmed[kVac], cpTube, 3); | |
197 | gMC->Gspos("Q1AV", 1, "Q1AT", 0., 0., 0., 0, "ONLY"); | |
198 | // Position adaptor tube at both ends | |
199 | dz = kCP1Length / 2. - kCP1BeStAdaptorLength / 2.; | |
200 | gMC->Gspos("Q1AT", 1, "Q1MO", 0., 0., -dz, 0, "ONLY"); | |
201 | gMC->Gspos("Q1AT", 2, "Q1MO", 0., 0., dz, idrotm[2012], "ONLY"); | |
202 | // | |
203 | /////////////////// | |
204 | // CP/2 // | |
205 | /////////////////// | |
206 | // | |
207 | // Fixed Point tube [Pos 5] | |
208 | // | |
209 | // Inner and outer radii of the Stainless Steel pipe | |
210 | const Float_t kCP2StRi = 2.90; | |
211 | const Float_t kCP2StRo = 2.98; | |
212 | // | |
213 | // Transition to central Be-pipe (Bulge) | |
214 | // Length | |
215 | const Float_t kCP2BulgeLength = 0.80; | |
216 | // | |
217 | // Bulge outer radius | |
218 | const Float_t kCP2BulgeRo = 3.05; | |
219 | // | |
220 | // Fixed Point at z = 391.7 (IP) | |
221 | // | |
222 | // Position of fixed point | |
223 | const Float_t kCP2FixedPointZ = 8.30; | |
224 | // | |
225 | // Outer radius of fixed point | |
226 | const Float_t kCP2FixedPointRo = 3.50; | |
227 | // | |
228 | // Length of fixed point | |
229 | const Float_t kCP2FixedPointLength = 0.60; | |
230 | // | |
231 | // Fixed Flange [Pos 6] | |
232 | // | |
233 | // Fixed flange outer radius | |
234 | const Float_t kCP2FixedFlangeRo = 7.60; | |
235 | // | |
236 | // Fixed flange inner radius | |
237 | const Float_t kCP2FixedFlangeRi = 3.00; | |
238 | // Fixed flange inner radius bulge | |
239 | const Float_t kCP2FixedFlangeBulgeRi = 2.90; | |
240 | // Fixed flange lengths of sections at inner radius | |
241 | const Float_t kCP2FixedFlangeRecessLengths[3] ={1., 0.08, 0.9}; | |
242 | // Fixed flange length | |
243 | const Float_t kCP2FixedFlangeLength = 1.98; | |
244 | // | |
245 | // Fixed flange bulge | |
246 | // Outer radius | |
247 | const Float_t kCP2FixedFlangeBulgeRo = 3.00; | |
248 | // | |
249 | // Length | |
250 | const Float_t kCP2FixedFlangeBulgeLength = 2.00; | |
251 | // | |
252 | // CP/2 Mother Volume | |
253 | // | |
254 | cpcon[0 ] = 0; | |
255 | cpcon[1 ] = 360; | |
256 | cpcon[2 ] = 8; | |
257 | // 1 Flange | |
258 | cpcon[3 ] = - kCP2Length / 2.; | |
259 | cpcon[4 ] = 0.; | |
260 | cpcon[5 ] = kCP2FixedFlangeRo; | |
261 | // 2 | |
262 | cpcon[6 ] = cpcon[3] + kCP2FixedFlangeLength; | |
263 | cpcon[7 ] = 0.; | |
264 | cpcon[8 ] = kCP2FixedFlangeRo; | |
265 | // 3 Straight section between Flange and Fixed Point | |
266 | cpcon[9 ] = cpcon[6]; | |
267 | cpcon[10] = 0.; | |
268 | cpcon[11] = kCP2FixedFlangeBulgeRo; | |
269 | // 4 | |
270 | cpcon[12] = cpcon[3] + kCP2FixedPointZ - kCP2FixedPointLength / 2.; | |
271 | cpcon[13] = 0.; | |
272 | cpcon[14] = kCP2FixedFlangeBulgeRo; | |
273 | // 5 Fixed Point | |
274 | cpcon[15] = cpcon[12]; | |
275 | cpcon[16] = 0.; | |
276 | cpcon[17] = kCP2FixedPointRo; | |
277 | // 6 | |
278 | cpcon[18] = cpcon[15] + kCP2FixedPointLength; | |
279 | cpcon[19] = 0.; | |
280 | cpcon[20] = kCP2FixedPointRo; | |
281 | // 7 Straight section between Fixed Point and transition bulge | |
282 | cpcon[21] = cpcon[18]; | |
283 | cpcon[22] = 0.; | |
284 | cpcon[23] = kCP2BulgeRo; | |
285 | // 8 | |
286 | cpcon[24] = kCP2Length / 2.; | |
287 | cpcon[25] = 0.; | |
288 | cpcon[26] = kCP2BulgeRo; | |
289 | gMC->Gsvolu("Q2MO","PCON", idtmed[kAir], cpcon, 27); | |
290 | dz = kCP2pos; | |
291 | gMC->Gspos("Q2MO", 1, "ALIC", 0., 0., dz, 0, "ONLY"); | |
292 | // | |
293 | // CP/2 Fixed Flange [Pos 6] | |
294 | // | |
295 | cpcon[0 ] = 0; | |
296 | cpcon[1 ] = 360; | |
297 | cpcon[2 ] = 4; | |
298 | // 1 | |
299 | cpcon[3 ] = - kCP2FixedFlangeLength / 2.; | |
300 | cpcon[4 ] = 0.; | |
301 | cpcon[5 ] = kCP2FixedFlangeRo; | |
302 | // 2 | |
303 | cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]; | |
304 | cpcon[7 ] = 0.; | |
305 | cpcon[8 ] = kCP2FixedFlangeRo; | |
306 | // 3 | |
307 | cpcon[9 ] = cpcon[6]; | |
308 | cpcon[10] = kCP2FixedFlangeRi; | |
309 | cpcon[11] = kCP2FixedFlangeRo; | |
310 | // 4 | |
311 | cpcon[12] = - cpcon[3]; | |
312 | cpcon[13] = kCP2FixedFlangeRi; | |
313 | cpcon[14] = kCP2FixedFlangeRo; | |
314 | gMC->Gsvolu("Q2FL","PCON", idtmed[kInox], cpcon, 15); | |
315 | // | |
316 | // Vacuum to be placed into Fixed Flange | |
317 | cpcon[0 ] = 0; | |
318 | cpcon[1 ] = 360; | |
319 | cpcon[2 ] = 4; | |
320 | // 1 | |
321 | cpcon[3 ] = - (kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]) / 2.; | |
322 | cpcon[4 ] = 0.; | |
323 | cpcon[5 ] = kCP2FixedFlangeRi; | |
324 | // 2 | |
325 | cpcon[6 ] = cpcon[3] + kCP2FixedFlangeRecessLengths[0]; | |
326 | cpcon[7 ] = 0.; | |
327 | cpcon[8 ] = kCP2FixedFlangeRi; | |
328 | // 3 Bulge | |
329 | cpcon[9 ] = cpcon[6]; | |
330 | cpcon[10] = 0.; | |
331 | cpcon[11] = kCP2FixedFlangeBulgeRi; | |
332 | // 4 | |
333 | cpcon[12] = -cpcon[3]; | |
334 | cpcon[13] = 0.; | |
335 | cpcon[14] = kCP2FixedFlangeBulgeRi; | |
336 | gMC->Gsvolu("Q2V1","PCON", idtmed[kVac], cpcon, 15); | |
337 | dz = - kCP2FixedFlangeLength / 2. - cpcon[3]; | |
338 | gMC->Gspos("Q2V1", 1, "Q2FL", 0., 0., dz, 0, "ONLY"); | |
339 | // | |
340 | dz = - kCP2Length / 2. + kCP2FixedFlangeLength / 2.; | |
341 | gMC->Gspos("Q2FL", 1, "Q2MO", 0., 0., dz, 0, "ONLY"); | |
342 | // | |
343 | // CP/2 Beam pipe with fixed point and transition bulges | |
344 | // | |
345 | cpcon[0 ] = 0; | |
346 | cpcon[1 ] = 360; | |
347 | cpcon[2 ] = 10; | |
348 | // 1 Bulge at transition to flange | |
349 | cpcon[3 ] = - (kCP2Length - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) / 2.; | |
350 | cpcon[4 ] = 0.; | |
351 | cpcon[5 ] = kCP2FixedFlangeBulgeRo; | |
352 | // 2 | |
353 | cpcon[6 ] = cpcon[3] + kCP2FixedFlangeBulgeLength; | |
354 | cpcon[7 ] = 0.; | |
355 | cpcon[8 ] = kCP2FixedFlangeBulgeRo; | |
356 | // 3 Straight section between Bulge and Fixed Point | |
357 | cpcon[9 ] = cpcon[6]; | |
358 | cpcon[10] = 0.; | |
359 | cpcon[11] = kCP2StRo; | |
360 | // 4 | |
361 | cpcon[12] = cpcon[3] + (kCP2FixedPointZ - kCP2FixedFlangeRecessLengths[0] - kCP2FixedFlangeRecessLengths[1]) - kCP2FixedPointLength / 2.; | |
362 | cpcon[13] = 0.; | |
363 | cpcon[14] = kCP2StRo; | |
364 | // 5 Fixed Point | |
365 | cpcon[15] = cpcon[12]; | |
366 | cpcon[16] = 0.; | |
367 | cpcon[17] = kCP2FixedPointRo; | |
368 | // 6 | |
369 | cpcon[18] = cpcon[15] + kCP2FixedPointLength; | |
370 | cpcon[19] = 0.; | |
371 | cpcon[20] = kCP2FixedPointRo; | |
372 | // 7 Straight section between Fixed Point and transition bulge | |
373 | cpcon[21] = cpcon[18]; | |
374 | cpcon[22] = 0.; | |
375 | cpcon[23] = kCP2StRo; | |
376 | // 8 | |
377 | cpcon[24] = - cpcon[3] - kCP2BulgeLength; | |
378 | cpcon[25] = 0.; | |
379 | cpcon[26] = kCP2StRo; | |
380 | // 9 Bulge at transition to Be pipe | |
381 | cpcon[27] = cpcon[24]; | |
382 | cpcon[28] = 0.; | |
383 | cpcon[29] = kCP2BulgeRo; | |
384 | // 10 | |
385 | cpcon[30] = - cpcon[3]; | |
386 | cpcon[31] = 0.; | |
387 | cpcon[32] = kCP2BulgeRo; | |
388 | gMC->Gsvolu("Q2PI","PCON", idtmed[kInox], cpcon, 33); | |
389 | // | |
390 | // Vacuum to be place into CP/2 beam pipe | |
391 | cpTube[0] = 0.; | |
392 | cpTube[1] = kCP2StRi; | |
393 | cpTube[2] = -1.; | |
394 | gMC->Gsvolu("Q2V2","TUBE", idtmed[kVac], cpTube, 3); | |
395 | ||
396 | gMC->Gspos("Q2V2", 1, "Q2PI", 0., 0., 0., 0, "ONLY"); | |
397 | dz = (kCP2FixedFlangeRecessLengths[0] + kCP2FixedFlangeRecessLengths[1]) / 2.; | |
398 | gMC->Gspos("Q2PI", 1, "Q2MO", 0., 0., dz, 0, "ONLY"); | |
399 | // | |
400 | /////////////////// | |
401 | // CP/3 // | |
402 | /////////////////// | |
403 | // | |
404 | // Adaptor tube [Pos 4] | |
405 | // | |
406 | // Adaptor tube length | |
407 | const Float_t kCP3AdaptorTubeLength = 5.50; | |
408 | // | |
409 | // Inner and outer radii | |
410 | const Float_t kCP3AdaptorTubeRi = 2.92; | |
411 | const Float_t kCP3AdaptorTubeRo = 3.00; | |
412 | // | |
413 | // Bulge at transition point | |
414 | // Inner and outer radii | |
415 | const Float_t kCP3AdaptorTubeBulgeRi = 2.90; | |
416 | const Float_t kCP3AdaptorTubeBulgeRo = 3.05; | |
417 | // | |
418 | // Length of bulge | |
419 | const Float_t kCP3AdaptorTubeBulgeLength = 0.80; | |
420 | // | |
421 | // Bellow [Pos 8] | |
422 | // | |
423 | // Total length | |
424 | const Float_t kCP3BellowLength = 13.00; | |
425 | // Outer Radius | |
426 | const Float_t kCP3BellowRo = 3.6; | |
427 | // Inner Radius | |
428 | const Float_t kCP3BellowRi = 2.8; | |
429 | // Number of plies | |
430 | const Int_t kCP3NumberOfPlies = 18; | |
431 | // Length of undulated region | |
432 | const Float_t kCP3BellowUndulatedLength = 8.30; | |
433 | // Plie thickness | |
434 | const Float_t kCP3PlieThickness = 0.02; | |
435 | // Connection Plie radies (at transition been undulated region and beam pipe) | |
436 | const Float_t kCP3ConnectionPlieR = 0.21; | |
437 | // Plie radius | |
438 | // const Float_t kCP3PlieR = 0.118286; | |
439 | const Float_t kCP3PlieR = | |
440 | (kCP3BellowUndulatedLength - 4. * kCP3ConnectionPlieR + 2. * kCP3PlieThickness + (2. * kCP3NumberOfPlies - 2.) * kCP3PlieThickness) | |
441 | / (4. * kCP3NumberOfPlies - 2.); | |
442 | // Length of connection pipe | |
443 | const Float_t kCP3BellowConnectionLength = 2.35; | |
444 | // | |
445 | // Tube between bellows [Pos 3] | |
446 | // | |
447 | // Length of tube | |
448 | const Float_t kCP3TubeLength = 4.00; | |
449 | // | |
450 | // Minimised fixed flange [Pos 7] | |
451 | // | |
452 | // Length of flange connection tube | |
453 | const Float_t kCP3FlangeConnectorLength = 5.0 - 1.4; | |
454 | // Length of Flange | |
455 | const Float_t kCP3FlangeLength = 1.40; | |
456 | // Outer radius | |
457 | const Float_t kCP3FlangeRo = 4.30; | |
458 | ||
459 | // | |
460 | // CP/3 Mother volume | |
461 | // | |
462 | cpcon[0 ] = 0; | |
463 | cpcon[1 ] = 360; | |
464 | cpcon[2 ] = 12; | |
465 | // 1 From transition to first bellow | |
466 | cpcon[3 ] = - kCP3Length / 2.; | |
467 | cpcon[4 ] = 0.; | |
468 | cpcon[5 ] = kCP3AdaptorTubeBulgeRo; | |
469 | // 2 | |
470 | cpcon[6 ] = cpcon[3] + kCP3BellowConnectionLength + kCP3AdaptorTubeLength; | |
471 | cpcon[7 ] = 0.; | |
472 | cpcon[8 ] = kCP3AdaptorTubeBulgeRo; | |
473 | // 3 First Bellow | |
474 | cpcon[9 ] = cpcon[6]; | |
475 | cpcon[10] = 0.; | |
476 | cpcon[11] = kCP3BellowRo; | |
477 | // 4 | |
478 | cpcon[12] = cpcon[9] + kCP3BellowUndulatedLength; | |
479 | cpcon[13] = 0.; | |
480 | cpcon[14] = kCP3BellowRo; | |
481 | // 5 Connection between the two bellows | |
482 | cpcon[15] = cpcon[12]; | |
483 | cpcon[16] = 0.; | |
484 | cpcon[17] = kCP3AdaptorTubeBulgeRo; | |
485 | // 6 | |
486 | cpcon[18] = cpcon[15] + 2. * kCP3BellowConnectionLength + kCP3TubeLength; | |
487 | cpcon[19] = 0.; | |
488 | cpcon[20] = kCP3AdaptorTubeBulgeRo; | |
489 | // 7 Second bellow | |
490 | cpcon[21] = cpcon[18]; | |
491 | cpcon[22] = 0.; | |
492 | cpcon[23] = kCP3BellowRo; | |
493 | // 8 | |
494 | cpcon[24] = cpcon[21] + kCP3BellowUndulatedLength; | |
495 | cpcon[25] = 0.; | |
496 | cpcon[26] = kCP3BellowRo; | |
497 | // 9 Pipe between second Bellow and Flange | |
498 | cpcon[27] = cpcon[24]; | |
499 | cpcon[28] = 0.; | |
500 | cpcon[29] = kCP3AdaptorTubeBulgeRo; | |
501 | // 10 | |
502 | cpcon[30] = cpcon[27] + kCP3BellowConnectionLength + kCP3FlangeConnectorLength; | |
503 | cpcon[31] = 0.; | |
504 | cpcon[32] = kCP3AdaptorTubeBulgeRo; | |
505 | // 11 Flange | |
506 | cpcon[33] = cpcon[30]; | |
507 | cpcon[34] = 0.; | |
508 | cpcon[35] = kCP3FlangeRo; | |
509 | // 12 | |
510 | cpcon[36] = - cpcon[3]; | |
511 | cpcon[37] = 0.; | |
512 | cpcon[38] = kCP3FlangeRo; | |
513 | // | |
514 | gMC->Gsvolu("Q3MO","PCON", idtmed[kAir], cpcon, 39); | |
515 | dz = kCP3pos; | |
516 | gMC->Gspos("Q3MO", 1, "ALIC", 0., 0., dz, 0, "ONLY"); | |
517 | // | |
518 | // CP/3 Adaptor tube | |
519 | // | |
520 | cpcon[0 ] = 0; | |
521 | cpcon[1 ] = 360; | |
522 | cpcon[2 ] = 4; | |
523 | // 1 Bulge at transition | |
524 | cpcon[3 ] = - kCP3AdaptorTubeLength / 2.; | |
525 | cpcon[4 ] = 0.; | |
526 | cpcon[5 ] = kCP3AdaptorTubeBulgeRo; | |
527 | // 2 | |
528 | cpcon[6 ] = cpcon[3] + kCP3AdaptorTubeBulgeLength; | |
529 | cpcon[7 ] = 0.; | |
530 | cpcon[8 ] = kCP3AdaptorTubeBulgeRo; | |
531 | // 3 Tube | |
532 | cpcon[9 ] = cpcon[6]; | |
533 | cpcon[10] = 0.; | |
534 | cpcon[11] = kCP3AdaptorTubeRo; | |
535 | // 4 | |
536 | cpcon[12] = - cpcon[3]; | |
537 | cpcon[13] = 0.; | |
538 | cpcon[14] = kCP3AdaptorTubeRo; | |
539 | gMC->Gsvolu("Q3ATO","PCON", idtmed[kVac], cpcon, 15); | |
540 | ||
541 | // 1 Bulge at transition | |
542 | cpcon[4 ] = kCP3AdaptorTubeBulgeRi; | |
543 | // 2 | |
544 | cpcon[7 ] = kCP3AdaptorTubeBulgeRi;; | |
545 | // 3 Tube | |
546 | cpcon[10] = kCP3AdaptorTubeRi; | |
547 | // 4 | |
548 | cpcon[13] = kCP3AdaptorTubeRi; | |
549 | ||
550 | gMC->Gsvolu("Q3ATI","PCON", idtmed[kInox], cpcon, 15); | |
551 | gMC->Gspos("Q3ATI", 1, "Q3ATO", 0., 0., 0., 0, "ONLY"); | |
552 | dz = - kCP3Length / 2. + kCP3AdaptorTubeLength / 2.; | |
553 | gMC->Gspos("Q3ATO", 1, "Q3MO", 0., 0., dz, 0, "ONLY"); | |
554 | // | |
555 | // CP/3 Bellow section | |
556 | // | |
557 | // TGeoMedium* mAir = gGeoManager->GetMedium("AIR"); | |
558 | TGeoMedium* mVacuum = gGeoManager->GetMedium("VACUUM"); | |
559 | TGeoMedium* mSteel = gGeoManager->GetMedium("INOX"); | |
560 | // | |
561 | // Upper part of the undulation | |
562 | TGeoTorus* plieTorusUO = new TGeoTorus(kCP3BellowRo - kCP3PlieR, 0. , kCP3PlieR); | |
563 | plieTorusUO->SetName("TorusUO"); | |
564 | TGeoTorus* plieTorusUI = new TGeoTorus(kCP3BellowRo - kCP3PlieR, kCP3PlieR - kCP3PlieThickness, kCP3PlieR); | |
565 | plieTorusUI->SetName("TorusUI"); | |
566 | TGeoTube* plieTubeU = new TGeoTube (kCP3BellowRo - kCP3PlieR, kCP3BellowRo, kCP3PlieR / 2.); | |
567 | plieTubeU->SetName("TubeU"); | |
568 | ||
569 | TGeoCompositeShape* upperPlieO = new TGeoCompositeShape("upperPlieO", "TorusUO*TubeU"); | |
570 | TGeoCompositeShape* upperPlieI = new TGeoCompositeShape("upperPlieI", "TorusUI*TubeU"); | |
571 | ||
572 | TGeoVolume* wiggleUO = new TGeoVolume("Q3WUO", upperPlieO, mVacuum); | |
573 | TGeoVolume* wiggleUI = new TGeoVolume("Q3WUI", upperPlieI, mSteel); | |
574 | wiggleUO->AddNode(wiggleUI, 1, new TGeoTranslation(0., 0., 0.)); | |
575 | // | |
576 | // Lower part of the undulation | |
577 | TGeoTorus* plieTorusLO = new TGeoTorus(kCP3BellowRi + kCP3PlieR, 0. , kCP3PlieR); | |
578 | plieTorusLO->SetName("TorusLO"); | |
579 | TGeoTorus* plieTorusLI = new TGeoTorus(kCP3BellowRi + kCP3PlieR, kCP3PlieR - kCP3PlieThickness, kCP3PlieR); | |
580 | plieTorusLI->SetName("TorusLI"); | |
581 | TGeoTube* plieTubeL = new TGeoTube (kCP3BellowRi, kCP3BellowRi + kCP3PlieR, kCP3PlieR); | |
582 | plieTubeL->SetName("TubeL"); | |
583 | ||
584 | TGeoCompositeShape* lowerPlieO = new TGeoCompositeShape("lowerPlieO", "TorusLO*TubeL"); | |
585 | TGeoCompositeShape* lowerPlieI = new TGeoCompositeShape("lowerPlieI", "TorusLI*TubeL"); | |
586 | ||
587 | TGeoVolume* wiggleLO = new TGeoVolume("Q3WLO", lowerPlieO, mVacuum); | |
588 | TGeoVolume* wiggleLI = new TGeoVolume("Q3WLI", lowerPlieI, mSteel); | |
589 | wiggleLO->AddNode(wiggleLI, 1, new TGeoTranslation(0., 0., 0.)); | |
590 | ||
591 | // | |
592 | // Connection between upper and lower part of undulation | |
593 | TGeoVolume* wiggleC1 = new TGeoVolume("Q3WCO1", | |
594 | new TGeoTube(kCP3BellowRi + kCP3PlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.), | |
595 | mSteel); | |
596 | TGeoVolume* wiggleC2 = new TGeoVolume("Q3WCO2", | |
597 | new TGeoTube(kCP3BellowRi + kCP3ConnectionPlieR, kCP3BellowRo - kCP3PlieR, kCP3PlieThickness / 2.), | |
598 | mSteel); | |
599 | // | |
600 | // Conncetion between undulated section and beam pipe | |
601 | TGeoTorus* plieTorusCO = new TGeoTorus(kCP3BellowRi + kCP3ConnectionPlieR, 0. , kCP3ConnectionPlieR); | |
602 | plieTorusCO->SetName("TorusCO"); | |
603 | TGeoTorus* plieTorusCI = new TGeoTorus(kCP3BellowRi + kCP3ConnectionPlieR, kCP3ConnectionPlieR - kCP3PlieThickness, kCP3ConnectionPlieR); | |
604 | plieTorusCI->SetName("TorusCI"); | |
605 | TGeoTube* plieTubeC = new TGeoTube (kCP3BellowRi, kCP3BellowRi + kCP3ConnectionPlieR, kCP3ConnectionPlieR); | |
606 | plieTubeC->SetName("TubeC"); | |
607 | ||
608 | TGeoCompositeShape* connectionPlieO = new TGeoCompositeShape("connectionPlieO", "TorusCO*TubeC"); | |
609 | TGeoCompositeShape* connectionPlieI = new TGeoCompositeShape("connectionPlieI", "TorusCI*TubeC"); | |
610 | ||
611 | TGeoVolume* connectionPO = new TGeoVolume("Q3CPO", connectionPlieO, mVacuum); | |
612 | TGeoVolume* connectionPI = new TGeoVolume("Q3CPI", connectionPlieI, mSteel); | |
613 | connectionPO->AddNode(connectionPI, 1, new TGeoTranslation(0., 0., 0.)); | |
614 | // | |
615 | // Connecting pipes | |
616 | TGeoVolume* connectionPipeO = new TGeoVolume("Q3BECO", | |
617 | new TGeoTube(0., kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.), | |
618 | mVacuum); | |
619 | TGeoVolume* connectionPipeI = new TGeoVolume("Q3BECI", | |
620 | new TGeoTube(kCP3AdaptorTubeRi, kCP3AdaptorTubeRo, kCP3BellowConnectionLength / 2.), | |
621 | mSteel); | |
622 | ||
623 | connectionPipeO->AddNode(connectionPipeI, 1, new TGeoTranslation(0., 0., 0.)); | |
624 | ||
625 | // | |
626 | // Bellow mother | |
627 | TGeoPcon* bellowMotherPC = new TGeoPcon(0., 360., 6); | |
628 | dz = - kCP3BellowLength / 2; | |
629 | bellowMotherPC->DefineSection(0, dz, 0., kCP3AdaptorTubeRo); | |
630 | dz += kCP3BellowConnectionLength; | |
631 | bellowMotherPC->DefineSection(1, dz, 0., kCP3AdaptorTubeRo); | |
632 | bellowMotherPC->DefineSection(2, dz, 0., kCP3BellowRo); | |
633 | dz = kCP3BellowLength /2. - kCP3BellowConnectionLength;; | |
634 | bellowMotherPC->DefineSection(3, dz, 0., kCP3BellowRo); | |
635 | bellowMotherPC->DefineSection(4, dz, 0., kCP3AdaptorTubeRo); | |
636 | dz += kCP3BellowConnectionLength; | |
637 | bellowMotherPC->DefineSection(5, dz, 0., kCP3AdaptorTubeRo); | |
638 | ||
639 | TGeoVolume* bellowMother = new TGeoVolume("Q3BeMO", bellowMotherPC, mVacuum); | |
640 | // | |
641 | // Add undulations | |
642 | Float_t z0 = - kCP3BellowLength / 2. + kCP3BellowConnectionLength + 2. * kCP3ConnectionPlieR - kCP3PlieThickness; | |
643 | Float_t zsh = 4. * kCP3PlieR - 2. * kCP3PlieThickness; | |
644 | for (Int_t iw = 0; iw < 18; iw++) { | |
645 | Float_t zpos = z0 + iw * zsh; | |
646 | if (iw > 0) | |
647 | bellowMother->AddNode(wiggleC1, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.)); | |
648 | else | |
649 | bellowMother->AddNode(wiggleC2, iw + 1 , new TGeoTranslation(0., 0., zpos + kCP3PlieThickness / 2.)); | |
650 | ||
651 | zpos += kCP3PlieR; | |
652 | bellowMother->AddNode(wiggleUO, iw + 1, new TGeoTranslation(0., 0., zpos)); | |
653 | ||
654 | zpos += kCP3PlieR; | |
655 | if (iw < 17) | |
656 | bellowMother->AddNode(wiggleC1, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.)); | |
657 | else | |
658 | bellowMother->AddNode(wiggleC2, iw + 19, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness / 2.)); | |
659 | ||
660 | if (iw < 17) { | |
661 | zpos += kCP3PlieR; | |
662 | bellowMother->AddNode(wiggleLO, iw + 1, new TGeoTranslation(0., 0., zpos - kCP3PlieThickness)); | |
663 | } | |
664 | } | |
665 | // | |
666 | // Add connecting undulation between bellow and connecting pipe | |
667 | dz = - kCP3BellowUndulatedLength / 2. + kCP3ConnectionPlieR; | |
668 | bellowMother->AddNode(connectionPO, 1, new TGeoTranslation(0., 0., dz)); | |
669 | bellowMother->AddNode(connectionPO, 2, new TGeoTranslation(0., 0., -dz)); | |
670 | // | |
671 | // Add connecting pipe | |
672 | dz = - kCP3BellowLength / 2. + kCP3BellowConnectionLength / 2.; | |
673 | bellowMother->AddNode(connectionPipeO, 1, new TGeoTranslation(0., 0., dz)); | |
674 | bellowMother->AddNode(connectionPipeO, 2, new TGeoTranslation(0., 0., -dz)); | |
675 | // | |
676 | // Add bellow to CP/3 mother | |
677 | TGeoVolume* mother = gGeoManager->GetVolume("Q3MO"); | |
678 | dz = - kCP3Length / 2. + kCP3AdaptorTubeLength + kCP3BellowLength / 2.; | |
679 | mother->AddNode(bellowMother, 1, new TGeoTranslation(0., 0., dz)); | |
680 | dz += (kCP3BellowLength + kCP3TubeLength); | |
681 | mother->AddNode(bellowMother, 2, new TGeoTranslation(0., 0., dz)); | |
682 | // | |
683 | // Beam pipe section between bellows | |
684 | // | |
685 | cpTube[0] = 0.; | |
686 | cpTube[1] = kCP3AdaptorTubeRo; | |
687 | cpTube[2] = kCP3TubeLength / 2.; | |
688 | gMC->Gsvolu("Q3BCO","TUBE", idtmed[kVac], cpTube, 3); | |
689 | ||
690 | cpTube[0] = kCP3AdaptorTubeRi; | |
691 | cpTube[1] = kCP3AdaptorTubeRo; | |
692 | cpTube[2] = kCP3TubeLength / 2.; | |
693 | gMC->Gsvolu("Q3BCI","TUBE", idtmed[kInox], cpTube, 3); | |
694 | ||
695 | gMC->Gspos("Q3BCI", 1, "Q3BCO", 0., 0., 0., 0, "ONLY"); | |
696 | dz = - kCP3Length / 2. + kCP3AdaptorTubeLength + kCP3BellowLength + kCP3TubeLength / 2.; | |
697 | gMC->Gspos("Q3BCO", 1, "Q3MO", 0., 0., dz, 0, "ONLY"); | |
698 | ||
699 | ||
700 | // CP3 Minimised Flange | |
701 | // | |
702 | cpcon[0 ] = 0; | |
703 | cpcon[1 ] = 360; | |
704 | cpcon[2 ] = 4; | |
705 | // 1 Connection Tube | |
706 | cpcon[3 ] = - (kCP3FlangeConnectorLength + kCP3FlangeLength) / 2.; | |
707 | cpcon[4 ] = 0.; | |
708 | cpcon[5 ] = kCP3AdaptorTubeRo; | |
709 | // 2 | |
710 | cpcon[6 ] = cpcon[3] + kCP3FlangeConnectorLength; | |
711 | cpcon[7 ] = 0.; | |
712 | cpcon[8 ] = kCP3AdaptorTubeRo; | |
713 | // 3 Flange | |
714 | cpcon[9 ] = cpcon[6]; | |
715 | cpcon[10] = 0.; | |
716 | cpcon[11] = kCP3FlangeRo; | |
717 | // 4 | |
718 | cpcon[12] = - cpcon[3]; | |
719 | cpcon[13] = 0.; | |
720 | cpcon[14] = kCP3FlangeRo; | |
721 | gMC->Gsvolu("Q3MFO","PCON", idtmed[kVac], cpcon, 15); | |
722 | ||
723 | cpcon[4 ] = cpcon[7 ] = cpcon [10] = cpcon[13] = kCP3AdaptorTubeRi; | |
724 | gMC->Gsvolu("Q3MFI","PCON", idtmed[kInox], cpcon, 15); | |
725 | ||
726 | gMC->Gspos("Q3MFI", 1, "Q3MFO", 0., 0., 0., 0, "ONLY"); | |
727 | dz = kCP3Length / 2. - (kCP3FlangeConnectorLength + kCP3FlangeLength) / 2.; | |
728 | gMC->Gspos("Q3MFO", 1, "Q3MO", 0., 0., dz, 0, "ONLY"); | |
729 | } | |
730 | ||
731 | ||
732 | ||
733 | //___________________________________________ | |
734 | void AliPIPEvGEO::CreateMaterials() | |
735 | { | |
736 | // | |
737 | // Define materials for beam pipe | |
738 | // | |
739 | ||
4951e003 | 740 | AliDebugClass(1,"Create PIPEvGEO materials"); |
61475935 | 741 | Int_t isxfld = gAlice->Field()->Integ(); |
742 | Float_t sxmgmx = gAlice->Field()->Max(); | |
743 | // Steel (Inox) | |
744 | Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 }; | |
745 | Float_t zsteel[4] = { 26.,24.,28.,14. }; | |
746 | Float_t wsteel[4] = { .715,.18,.1,.005 }; | |
747 | // AlBe - alloy | |
748 | Float_t aAlBe[2] = { 26.98, 9.01}; | |
749 | Float_t zAlBe[2] = { 13.00, 4.00}; | |
750 | Float_t wAlBe[2] = { 0.4, 0.6}; | |
751 | // | |
752 | // Polyamid | |
753 | Float_t aPA[4] = {16., 14., 12., 1.}; | |
754 | Float_t zPA[4] = { 8., 7., 6., 1.}; | |
755 | Float_t wPA[4] = { 1., 1., 6., 11.}; | |
756 | // | |
757 | // Air | |
758 | // | |
759 | Float_t aAir[4]={12.0107,14.0067,15.9994,39.948}; | |
760 | Float_t zAir[4]={6.,7.,8.,18.}; | |
761 | Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827}; | |
762 | Float_t dAir = 1.20479E-3; | |
763 | Float_t dAir1 = 1.20479E-10; | |
764 | ||
765 | // | |
766 | // Berillium | |
767 | AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7); | |
768 | // | |
769 | // Carbon | |
770 | AliMaterial(6, "CARBON$ ", 12.01, 6., 2.265, 18.8, 49.9); | |
771 | // | |
772 | // Aluminum | |
773 | AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2); | |
774 | // | |
775 | // Air | |
776 | AliMixture(15, "AIR$ ", aAir, zAir, dAir, 4, wAir); | |
777 | // | |
778 | // Vacuum | |
779 | AliMixture(16, "VACUUM$ ", aAir, zAir, dAir1, 4, wAir); | |
780 | // | |
781 | // stainless Steel | |
782 | AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel); | |
783 | // | |
784 | // reduced density steel to approximate pump getter material | |
785 | AliMixture(20, "GETTER$", asteel, zsteel, 1.00, 4, wsteel); | |
786 | // Al-Be alloy | |
787 | // | |
788 | AliMixture(21, "AlBe$", aAlBe, zAlBe, 2.07, 2, wAlBe); | |
789 | // Polyamid | |
790 | // | |
791 | AliMixture(22, "PA$", aPA, zPA, 1.14, -4, wPA); | |
792 | // | |
793 | ||
794 | // **************** | |
795 | // Defines tracking media parameters. | |
796 | // | |
797 | Float_t epsil = .001; // Tracking precision, | |
798 | Float_t stemax = -0.01; // Maximum displacement for multiple scat | |
799 | Float_t tmaxfd = -20.; // Maximum angle due to field deflection | |
800 | Float_t deemax = -.3; // Maximum fractional energy loss, DLS | |
801 | Float_t stmin = -.8; | |
802 | // *************** | |
803 | // | |
804 | // Beryllium | |
805 | ||
806 | AliMedium(5, "BE", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
807 | ||
808 | // Carbon | |
809 | AliMedium(6, "C", 6, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
810 | // | |
811 | // Aluminum | |
812 | AliMedium(9, "ALU", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
813 | // | |
814 | // Air | |
815 | AliMedium(15, "AIR", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
816 | // | |
817 | // Vacuum | |
818 | AliMedium(16, "VACUUM", 16, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
819 | // | |
820 | // Steel | |
821 | AliMedium(19, "INOX", 19, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
822 | // | |
823 | // Getter | |
824 | AliMedium(20, "GETTER", 20, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
825 | // | |
826 | // AlBe - Aloy | |
827 | AliMedium(21, "AlBe" , 21, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
828 | // | |
829 | // Polyamid | |
830 | AliMedium(22, "PA" , 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin); | |
831 | ||
832 | } | |
833 | ||
834 | ||
835 | ||
836 | ||
837 | ||
838 | ||
839 | ||
840 | ||
841 | ||
842 |