]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STRUCT/AliPIPEv3.cxx
Added protection. In case IROT=0 the address Q(LQ(JROTM-IROT)) should not
[u/mrichter/AliRoot.git] / STRUCT / AliPIPEv3.cxx
CommitLineData
77289c85 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Beam pipe class //
4// //
5//Begin_Html
6/*
7<img src="gif/AliPIPEClass.gif">
8*/
9//End_Html
10// //
11///////////////////////////////////////////////////////////////////////////////
12
13#include "AliPIPEv3.h"
14#include "AliRun.h"
15#include "AliMC.h"
16
17ClassImp(AliPIPEv3)
18
19//_____________________________________________________________________________
20AliPIPEv3::AliPIPEv3()
21{
22 //
23 // Default constructor for beam pipe
24 //
25}
26
27//_____________________________________________________________________________
28AliPIPEv3::AliPIPEv3(const char *name, const char *title)
29 : AliPIPE(name,title)
30{
31 //
32 // Standard constructor for beam pipe
33 //
34}
35
36//_____________________________________________________________________________
37void AliPIPEv3::CreateGeometry()
38{
39 //
40 // Create Beam Pipe geometry
41 //
42 //Begin_Html
43 /*
44 <img src="gif/AliPIPE.gif">
45 */
46 //End_Html
47 //Begin_Html
48 /*
49 <img src="gif/AliPIPETree.gif">
50 */
51 //End_Html
52
53 AliMC* pMC = AliMC::GetMC();
54
55 Float_t tpar[3], dzmo, zpos;
56 Float_t bepar[3], alpar[3],sspar[3],flange[3],vacpar[3];
57 Float_t bellow[3];
58// Float_t undul[3];
59// const Double_t z_flange = 150;
60//for undulated structure
61 char cn18[][5]={"CN01","CN02","CN03","CN04","CN05","CN06","CN07","CN08"};
62 char cn48[][5]={"CN21","CN22","CN23","CN24","CN25","CN26","CN27","CN28"};
63// char undul[][5]={'BELO','UNDL'};
64 Float_t zundul;
65 Float_t rundul;
66 Float_t pitch;
67 Float_t thick;
68
69
70 Int_t *idtmed = gAlice->Idtmed();
71// the mother of all beam pipes
72
73 tpar[0] = 0.;
74 tpar[1] = 10.;
75 tpar[2] = 1400. / 2;
76 dzmo = tpar[2];
77 pMC->Gsvolu("QQMO", "TUBE", idtmed[2015], tpar, 3);
78
79// All beam pipe details as per the provisonal drawings given by Lars
80// Leistam on 31.5.99
81
82// Beryllium beam pipe, length 56.6 cm, centered at vertex
83
84 bepar[0]=0.0;
85 bepar[1]=3.0;
86 bepar[2]=28.3;
87 zpos=0.0;
88 vacpar[0]=0.0;
89 vacpar[1]=2.9;
90 vacpar[2]=bepar[2];
91 //
92 pMC->Gsvolu("QQBE", "TUBE", idtmed[2004], bepar, 3);
93 pMC->Gsvolu("VAC1", "TUBE", idtmed[2015], vacpar, 3);
94 pMC->Gspos("VAC1", 1, "QQBE", 0., 0., 0., 0, "ONLY");
95 pMC->Gspos("QQBE", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
96
97 // now beam pipes only in negative z-part for use in PMD.
98
99 // SS Flange 4 cm thick, 5.8 cm ID, 6.3 cm OD
100 flange[0]=0.0;
101 flange[1]=3.15;
102 flange[2]=2.0;
103 zpos = zpos -bepar[2] - flange[2];
104 vacpar[0]=0.0;
105 vacpar[1]=2.9;
106 vacpar[2]=flange[2];
107 //
108 pMC->Gsvolu("QFL1", "TUBE", idtmed[2018], flange, 3);
109 pMC->Gsvolu("VAC2", "TUBE", idtmed[2015], vacpar, 3);
110 pMC->Gspos("VAC2", 1, "QFL1", 0., 0., 0., 0, "ONLY");
111 pMC->Gspos("QFL1", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
112
113 // Aluminium alloy beam pipe, 1mm thick, 230 cm long
114 alpar[0]=0.0;
115 alpar[1]=3.0;
116 alpar[2]=115.;
117 zpos = zpos - flange[2] - alpar[2];
118
119 vacpar[0]=0.0;
120 vacpar[1]=2.9;
121 vacpar[2]=alpar[2];
122 pMC->Gsvolu("QQAL", "TUBE", idtmed[2003], alpar, 3);
123 pMC->Gsvolu("VAC3", "TUBE", idtmed[2015], vacpar, 3);
124 pMC->Gspos("VAC3", 1, "QQAL", 0., 0., 0., 0, "ONLY");
125 pMC->Gspos("QQAL", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
126
127
128 // SS tube 2.0 cm long, 0.8 mm thick, 5.96 cm OD
129
130 sspar[0]=0.0;
131 sspar[1]=2.98;
132 sspar[2]=1.0;
133 zpos = zpos - alpar[2] - sspar[2];
134
135 vacpar[0]=0.0;
136 vacpar[1]=2.9;
137 vacpar[2]=sspar[2];
138 pMC->Gsvolu("QSS1", "TUBE", idtmed[2018], sspar, 3);
139 pMC->Gsvolu("VAC4", "TUBE", idtmed[2015], vacpar, 3);
140 pMC->Gspos("VAC4", 1, "QSS1", 0., 0., 0., 0, "ONLY");
141 pMC->Gspos("QSS1", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
142
143
144 // SS Flange 3 cm thick 7.4 cm OD, 5.8 cm ID
145
146 flange[0]=0.0;
147 flange[1]=3.7;
148 flange[2]=1.5;
149 zpos = zpos - sspar[2] - flange[2];
150
151 vacpar[0]=0.0;
152 vacpar[1]=2.9;
153 vacpar[2]=flange[2];
154 pMC->Gsvolu("QFL2", "TUBE", idtmed[2018], flange, 3);
155 pMC->Gsvolu("VAC5", "TUBE", idtmed[2015], vacpar, 3);
156 pMC->Gspos("VAC5", 1, "QFL2", 0., 0., 0., 0, "ONLY");
157 pMC->Gspos("QFL2", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
158
159
160 // SS tube 4.0 cm long, 0.8 mm thick, 5.96 cm OD
161
162 sspar[0]=0.0;
163 sspar[1]=2.98;
164 sspar[2]=2.0;
165 zpos = zpos - flange[2] - sspar[2];
166
167 vacpar[0]=0.0;
168 vacpar[1]=2.9;
169 vacpar[2]=sspar[2];
170 pMC->Gsvolu("QSS2", "TUBE", idtmed[2018], sspar, 3);
171 pMC->Gsvolu("VAC6", "TUBE", idtmed[2015], vacpar, 3);
172 pMC->Gspos("VAC6", 1, "QSS2", 0., 0., 0., 0, "ONLY");
173 pMC->Gspos("QSS2", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
174
175
176 // *************
177 // SS Bellow 8.4 cm long, 6.5 cm ID, 7.5 cm OD
178 // 0.8 mm thick material, 0.3 cm pitch.
179 // zundul=4.2, rundul=6.5, thick=0.08
180 // **************
181 pitch=0.3;
182 thick=0.08;
183 zundul=4.2;
184 rundul=6.5;
185 Undulation("BELO",pitch,thick,zundul,rundul,cn18);
186//
187 bellow[2]=zundul;
188 zpos = zpos - sspar[2] - bellow[2];
189 pMC->Gspos("BELO", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
190
191 // SS tube 20.0 cm long, 0.8 mm thick, 5.96 cm OD
192
193 sspar[0]=0.0;
194 sspar[1]=2.98;
195 sspar[2]=10.0;
196 zpos = zpos - bellow[2] - sspar[2];
197
198 vacpar[0]=0.0;
199 vacpar[1]=2.9;
200 vacpar[2]=sspar[2];
201 pMC->Gsvolu("QSS3", "TUBE", idtmed[2018], sspar, 3);
202 pMC->Gsvolu("VAC7", "TUBE", idtmed[2015], vacpar, 3);
203 pMC->Gspos("VAC7", 1, "QSS3", 0., 0., 0., 0, "ONLY");
204 pMC->Gspos("QSS3", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
205
206 // *************
207 // SS Bellow 8.4 cm long, 6.5 cm ID, 7.5 cm OD
208 // 0.8 mm thick material, 0.3 cm pitch.
209 // **************
210//
211 zpos = zpos - sspar[2] - bellow[2];
212 pMC->Gspos("BELO", 2, "QQMO", 0., 0., zpos, 0, "ONLY");
213
214 // SS tube 4.7 cm long, 0.8 mm thick,
215
216 sspar[0]=0.0;
217 sspar[1]=2.98;
218 sspar[2]=4.7/2.;
219 zpos = zpos - bellow[2] - sspar[2];
220
221 vacpar[0]=0.0;
222 vacpar[1]=2.9;
223 vacpar[2]=sspar[2];
224 pMC->Gsvolu("QSS4", "TUBE", idtmed[2018], sspar, 3);
225 pMC->Gsvolu("VAC8", "TUBE", idtmed[2015], vacpar, 3);
226 pMC->Gspos("VAC8", 1, "QSS4", 0., 0., 0., 0, "ONLY");
227 pMC->Gspos("QSS4", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
228
229 // SS Flange 2.2 cm thick, ID=5.8 cm, OD=9.8 cm
230
231 flange[0]=0.0;
232 flange[1]=4.9;
233 flange[2]=1.1;
234 zpos = zpos - sspar[2] - flange[2];
235
236 vacpar[0]=0.0;
237 vacpar[1]=2.9;
238 vacpar[2]=flange[2];
239 pMC->Gsvolu("QFL3", "TUBE", idtmed[2018], flange, 3);
240 pMC->Gsvolu("VAC9", "TUBE", idtmed[2015], vacpar, 3);
241 pMC->Gspos("VAC9", 1, "QFL3", 0., 0., 0., 0, "ONLY");
242 pMC->Gspos("QFL3", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
243
244//Total of 3150 mm from vertex on the negative side upto this point.
245
246// SS tube 20.0 cm long, 0.15 cm thick, 5.8 cm ID, to support vac. pump
247
248 sspar[0]=0.0;
249 sspar[1]=3.05;
250 sspar[2]=10.0;
251 zpos = zpos - flange[2] - sspar[2];
252
253 vacpar[0]=0.0;
254 vacpar[1]=2.9;
255 vacpar[2]=sspar[2];
256 pMC->Gsvolu("QSS5", "TUBE", idtmed[2018], sspar, 3);
257 pMC->Gsvolu("VA10", "TUBE", idtmed[2015], vacpar, 3);
258 pMC->Gspos("VA10", 1, "QSS5", 0., 0., 0., 0, "ONLY");
259 pMC->Gspos("QSS5", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
260
261//
262 // last item, undulated SS beam pipe, pitch=0.25, length= 342.0 cm
263 // material thickness 0.015 cm, ID=6.0 cm,
264 // zundul=171.0, thick=0.015, rundul=3.0
265 pitch=0.25;
266 thick=0.015;
267 zundul=171;
268 rundul=3.0;
269 Undulation("UNDL",pitch,thick,zundul,rundul,cn48);
270 //
271 zpos = zpos - sspar[2] - zundul;
272 pMC->Gspos("UNDL", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
273//
274 pMC->Gspos("QQMO", 1, "ALIC", 0., 0., 0.1, 0, "ONLY");
275
276// total of 6770 mm length upto this point, end of undulated beam
277// pipe section.
278
279// SS flange 22*2 mm thick
280
281
282 flange[0]=0.0;
283 flange[1]=6.3;
284 flange[2]=2.2;
285 zpos = zpos - zundul - flange[2];
286
287 vacpar[0]=0.0;
288 vacpar[1]=2.9;
289 vacpar[2]=flange[2];
290 pMC->Gsvolu("QFL4", "TUBE", idtmed[2018], flange, 3);
291 pMC->Gsvolu("VC11", "TUBE", idtmed[2015], vacpar, 3);
292 pMC->Gspos("VC11", 1, "QFL4", 0., 0., 0., 0, "ONLY");
293 pMC->Gspos("QFL4", 1, "QQMO", 0., 0., zpos, 0, "ONLY");
294
295}
296
297//_____________________________________________________________________________
298void AliPIPEv3::DrawModule()
299{
300 //
301 // Draw a shaded view of the Beam Pipe
302 //
303
304 AliMC* pMC = AliMC::GetMC();
305
306 // Set everything unseen
307 pMC->Gsatt("*", "seen", -1);
308 //
309 // Set ALIC mother transparent
310 pMC->Gsatt("ALIC","SEEN",0);
311 //
312 // Set the volumes visible
313 pMC->Gsatt("QQMO","seen",1);
314 pMC->Gsatt("QQBE","seen",1);
315 pMC->Gsatt("QFL1","seen",1);
316 pMC->Gsatt("QQAL","seen",1);
317 pMC->Gsatt("QSS1","seen",1);
318 pMC->Gsatt("QFL2","seen",1);
319 pMC->Gsatt("QSS2","seen",1);
320 pMC->Gsatt("QSS3","seen",1);
321 pMC->Gsatt("QSS4","seen",1);
322 pMC->Gsatt("QFL3","seen",1);
323 pMC->Gsatt("QSS5","seen",1);
324 pMC->Gsatt("BELO","seen",1);
325 pMC->Gsatt("UNDL","seen",1);
326 //
327 pMC->Gdopt("hide", "on");
328 pMC->Gdopt("shad", "on");
329 pMC->Gsatt("*", "fill", 7);
330 pMC->SetClipBox(".");
331 pMC->SetClipBox("*", 0, 3000, -3000, 3000, -6000, 6000);
332 pMC->DefaultRange();
333 pMC->Gdraw("alic", 40, 30, 0, 3, 5, .04, .04);
334 pMC->Gdhead(1111, "Beam Pipe");
335 pMC->Gdman(16, 6, "MAN");
336 pMC->Gdopt("hide","off");
337}
338
339//_____________________________________________________________________________
340void AliPIPEv3::CreateMaterials()
341{
342 //
343 // Create materials for beam pipe
344 //
345
346 Int_t ISXFLD = gAlice->Field()->Integ();
347 Float_t SXMGMX = gAlice->Field()->Max();
348
349 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
350 Float_t zsteel[4] = { 26.,24.,28.,14. };
351 Float_t wsteel[4] = { .715,.18,.1,.005 };
352
353 Float_t epsil, stmin, tmaxfd, deemax, stemax;
354
355 // STEEL
356
357
358 // --- Define the various materials for GEANT ---
359 AliMaterial(5, "BERILLIUM$", 9.01, 4., 1.848, 35.3, 36.7);
360 AliMaterial(4, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 18.5);
361 AliMaterial(16, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
362 AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
363 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
364
365 // ****************
366 // Defines tracking media parameters.
367 // Les valeurs sont commentees pour laisser le defaut
368 // a GEANT (version 3-21, page CONS200), f.m.
369 epsil = .001; // Tracking precision,
370 stemax = -1.; // Maximum displacement for multiple scat
371 tmaxfd = -20.; // Maximum angle due to field deflection
372 deemax = -.3; // Maximum fractional energy loss, DLS
373 stmin = -.8;
374
375 // Air
376
377 AliMedium(2015, "AIR_L3_US", 15, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
378
379 // Beryllium
380
381 AliMedium(2005, "BE_L3_US", 5, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
382
383
384 // Aluminium
385
386 AliMedium(2004, "AL_L3_US", 4, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
387
388 // Vacuum
389
390 AliMedium(2016, "VA_L3_US", 16, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
391
392 // Steel
393
394 AliMedium(2019, "ST_L3_US", 19, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
395}
396//
397void AliPIPEv3::Undulation(char *undul, Float_t pitch, Float_t thick,
398 Float_t zundul, Float_t rundul, char (*cone)[5])
399{
400 //
401 // RUNDUL : Internal radius of the undulated chamber
402 // THICK : material thickness
403 // PITCH : one-QUARTER wave of undulation (cm)
404 // ZUNDUL : half length (cm)
405 //
406 // The undulated structure is desgned as a superposition of eight CONES
407 // of suitable sizes, where the inner/outer radius of the cone increases,
408 // then decreases, each half of the wave is assumed to be a semicircle,
409 // which allows to calculate the thickness and the radii of the cone, by
410 // dividing the semicircle into 4 parts of equal arc length.
411 // Thus apear the constants 0.293 and 0.707.
412 //
413
414 const Float_t const1 = .293;
415 const Float_t const2 = .707;
416
417 AliMC* pMC = AliMC::GetMC();
418
419 // Local variables
420 Int_t j, nwave;
421 Float_t dcone1[5], dcone2[5], dcone3[5], dcone4[5], dcone5[5],
422 dcone6[5], dcone7[5], dcone8[5];
423 Float_t xc, yc, zc, dundul[3];
424 Int_t *idtmed = gAlice->Idtmed();
425
426 // Function Body
427
428 dcone1[0] = const1 * pitch / 2;
429 dcone1[1] = rundul;
430 dcone1[2] = dcone1[1] + thick;
431 dcone1[3] = dcone1[1] + const2 * pitch;
432 dcone1[4] = dcone1[3] + thick;
433
434 dcone2[0] = const2 * pitch / 2;
435 dcone2[1] = dcone1[3];
436 dcone2[2] = dcone1[4];
437 dcone2[3] = dcone2[1] + const1 * pitch;
438 dcone2[4] = dcone2[3] + thick;
439
440 dcone3[0] = dcone2[0];
441 dcone3[1] = dcone2[3];
442 dcone3[2] = dcone2[4];
443 dcone3[3] = dcone2[1];
444 dcone3[4] = dcone2[2];
445
446 dcone4[0] = dcone1[0];
447 dcone4[1] = dcone1[3];
448 dcone4[2] = dcone1[4];
449 dcone4[3] = dcone1[1];
450 dcone4[4] = dcone1[2];
451
452 dcone5[0] = dcone1[0];
453 dcone5[1] = dcone1[1] - thick;
454 dcone5[2] = dcone1[1];
455 dcone5[3] = dcone5[1] - const2 * pitch;
456 dcone5[4] = dcone5[3] + thick;
457
458 dcone6[0] = dcone2[0];
459 dcone6[1] = dcone5[3];
460 dcone6[2] = dcone5[4];
461 dcone6[3] = dcone6[1] - const1 * pitch;
462 dcone6[4] = dcone6[3] + thick;
463 dcone7[0] = dcone6[0];
464 dcone7[1] = dcone6[3];
465 dcone7[2] = dcone6[4];
466 dcone7[3] = dcone5[3];
467 dcone7[4] = dcone5[4];
468
469 dcone8[0] = dcone5[0];
470 dcone8[1] = dcone7[3];
471 dcone8[2] = dcone7[4];
472 dcone8[3] = dcone5[1];
473 dcone8[4] = dcone5[2];
474
475 pMC->Gsvolu(cone[0], "CONE", idtmed[2015], dcone1, 5);
476 pMC->Gsvolu(cone[1], "CONE", idtmed[2015], dcone2, 5);
477 pMC->Gsvolu(cone[2], "CONE", idtmed[2015], dcone3, 5);
478 pMC->Gsvolu(cone[3], "CONE", idtmed[2015], dcone4, 5);
479 pMC->Gsvolu(cone[4], "CONE", idtmed[2015], dcone5, 5);
480 pMC->Gsvolu(cone[5], "CONE", idtmed[2015], dcone6, 5);
481 pMC->Gsvolu(cone[6], "CONE", idtmed[2015], dcone7, 5);
482 pMC->Gsvolu(cone[7], "CONE", idtmed[2015], dcone8, 5);
483 pMC->Gsatt(cone[0], "SEEN", 0);
484 pMC->Gsatt(cone[1], "SEEN", 0);
485 pMC->Gsatt(cone[2], "SEEN", 0);
486 pMC->Gsatt(cone[3], "SEEN", 0);
487 pMC->Gsatt(cone[4], "SEEN", 0);
488 pMC->Gsatt(cone[5], "SEEN", 0);
489 pMC->Gsatt(cone[6], "SEEN", 0);
490 pMC->Gsatt(cone[7], "SEEN", 0);
491
492 // DEFINE AN IMAGINARY TUBE VOLUME FOR UNDULATED CHAMBER, FILL WITH VACUUM
493
494 nwave = Int_t (zundul / (pitch * 2) + .1);
495 dundul[2] = pitch * 2 * nwave;
496 dundul[1] = rundul + pitch + thick * 2;
497 //
498 dundul[0] = 1e-4;
499 pMC->Gsvolu(undul, "TUBE", idtmed[2015], dundul, 3);
500
501 xc = 0;
502 yc = 0;
503 zc = -dundul[2] + dcone1[0];
504 for (j = 1; j <= nwave; ++j) {
505 pMC->Gspos(cone[0], j, undul, xc, yc, zc, 0, "ONLY");
506 zc = zc + dcone1[0] + dcone2[0];
507 pMC->Gspos(cone[1], j, undul, xc, yc, zc, 0, "ONLY");
508 zc = zc + dcone2[0] + dcone3[0];
509 pMC->Gspos(cone[2], j, undul, xc, yc, zc, 0, "ONLY");
510 zc = zc + dcone3[0] + dcone4[0];
511 pMC->Gspos(cone[3], j, undul, xc, yc, zc, 0, "ONLY");
512 zc = zc + dcone4[0] + dcone5[0];
513 pMC->Gspos(cone[4], j, undul, xc, yc, zc, 0, "ONLY");
514 zc = zc + dcone5[0] + dcone6[0];
515 pMC->Gspos(cone[5], j, undul, xc, yc, zc, 0, "ONLY");
516 zc = zc + dcone6[0] + dcone7[0];
517 pMC->Gspos(cone[6], j, undul, xc, yc, zc, 0, "ONLY");
518 zc = zc + dcone7[0] + dcone8[0];
519 pMC->Gspos(cone[7], j, undul, xc, yc, zc, 0, "ONLY");
520 zc = zc + dcone8[0] + dcone1[0];
521 }
522}