1 ///////////////////////////////////////////////////////////////////////////////
3 // Muon Shield Class //
4 // This class contains a description of the muon shield //
8 <img src="gif/AliSHILClass.gif">
13 ///////////////////////////////////////////////////////////////////////////////
21 //_____________________________________________________________________________
25 // Default constructor for muon shield
29 //_____________________________________________________________________________
30 AliSHIL::AliSHIL(const char *name, const char *title)
31 : AliModule(name,title)
34 // Standard constructor for muon shield
41 //_____________________________________________________________________________
42 void AliSHIL::CreateGeometry()
45 // Build muon shield geometry
47 // Origin N.Van Eijndhoven
51 <img src="gif/AliSHIL.gif">
56 <img src="gif/AliSHILTree.gif">
60 Float_t r_pb, cpar[5], parm[12], tpar[3], zmag_out,
61 abs_c, abs_l, r_abs, pcpar[12];
65 Float_t dzcoch1, dzcoch2, acc_min, dzs, zcone_e, zmag_in,
66 z_close, z_l3, shl1, shl4;
68 AliMC* pMC = AliMC::GetMC();
70 Int_t *idtmed = gAlice->Idtmed();
72 //abs_d = 90.; // DEFINES DRIFT LENGTH
75 //theta1 = 24.; // 1. angle defining the front absorber
76 //theta2 = 5.; // 2. angle defining the front absorbe
77 //acc_max = 9.; // ANGLE POLAIRE MAXIMUM
78 acc_min = 2.; // ANGLE POLAIRE MINIMUM DE DETECTION
80 //d_steel = 1.; // THICKNESS OF STEEL SUPPORT
83 //abs_cc = 315.; // DEFINES LENGTH OF CARBON
85 //abs_s = 150.; // DEFINES W-SHIELD LENGTH
86 //abs_n = 80.; // START OF NOSE
117 // the mother of all shields
124 parm[5] = abs_l * TMath::Tan(acc_min * kDegrad);
131 pMC->Gsvolu("YMOT", "PCON", idtmed[1715], parm, 12);
133 // beam shield ouside absorber inside l3
135 shl1 = (z_l3 - abs_l) / 2.;
138 cpar[2] = abs_l * TMath::Tan(acc_min * kDegrad);
140 cpar[4] = z_l3 * TMath::Tan(acc_min * kDegrad);
141 pMC->Gsvolu("YMS1", "CONE", idtmed[1759], cpar, 5);
143 // OUTSIDE STEEL TUBE
145 cpar[1] = cpar[2] - 4.;
146 cpar[3] = cpar[4] - 4.;
147 pMC->Gsvolu("YSH1", "CONE", idtmed[1718], cpar, 5);
148 pMC->Gspos("YSH1", 1, "YMS1", 0., 0., 0., 0, "ONLY");
150 // COCHES FOR CHAMBERS
151 dzcoch1 = cz1 + 4. - (abs_l + shl1);
152 dzcoch2 = cz2 + 4. - (abs_l + shl1);
156 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
157 cpar[2] = (cz1 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad);
158 cpar[1] = cpar[2] - 3.;
159 cpar[3] = cpar[1] + dr;
160 cpar[4] = cpar[2] + dr;
161 pMC->Gsvolu("YAC1", "CONE", idtmed[1714], cpar, 5);
162 pMC->Gspos("YAC1", 1, "YMS1", 0., 0., dzcoch1, 0, "ONLY");
163 cpar[2] = (cz2 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad);
164 cpar[1] = cpar[2] - 3.;
165 cpar[3] = cpar[1] + dr;
166 cpar[4] = cpar[2] + dr;
167 pMC->Gsvolu("YAC2", "CONE", idtmed[1714], cpar, 5);
168 pMC->Gspos("YAC2", 1, "YMS1", 0., 0., dzcoch2, 0, "ONLY");
171 cpar[0] = (cz1 + 4. + 20. - abs_l) / 2.;
172 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
173 // CPAR(3)=ABS_L*TAN(kDegrad*ACC_MIN)-3.
174 cpar[2] = abs_l * TMath::Tan(acc_min * kDegrad) - 4.;
175 cpar[1] = cpar[2] - 3.;
176 cpar[3] = cpar[1] + dr;
177 cpar[4] = cpar[2] + dr;
178 dzcoch1 = abs_l + cpar[0] - (abs_l + shl1);
179 pMC->Gsvolu("YSC1", "CONE", idtmed[1718], cpar, 5);
180 pMC->Gspos("YSC1", 1, "YMS1", 0., 0., dzcoch1, 0, "ONLY");
183 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
184 // CPAR(3)=(CZ2+4.-CPAR(1))*TAN(kDegrad*ACC_MIN)-3.
185 cpar[2] = (cz2 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad) - 4.;
186 cpar[1] = cpar[2] - 3.;
187 cpar[3] = cpar[1] + dr;
188 cpar[4] = cpar[2] + dr;
189 pMC->Gsvolu("YSC2", "CONE", idtmed[1718], cpar, 5);
190 pMC->Gspos("YSC2", 1, "YMS1", -4., 0., dzcoch2, 0, "ONLY");
195 cpar[2] = r_abs + (abs_l - abs_c) * TMath::Tan(theta_open * kDegrad);
197 cpar[4] = cpar[2] + shl1 * 2. * TMath::Tan(theta_open * kDegrad);
198 pMC->Gsvolu("YMB1", "CONE", idtmed[1755], cpar, 5);
202 cpar[1] = cpar[2] - .2;
204 cpar[3] = cpar[4] - .2;
205 pMC->Gsvolu("YBS1", "CONE", idtmed[1749], cpar, 5);
206 pMC->Gspos("YBS1", 1, "YMB1", 0., 0., 0., 0, "ONLY");
209 pMC->Gspos("YMB1", 1, "YMS1", 0., 0., 0., 0, "ONLY");
211 pMC->Gspos("YMS1", 1, "YMOT", 0., 0., dz, 0, "ONLY");
213 // BEAM SHIELD OUTSIDE L3
216 cpar[0] = (zmag_in - z_l3) / 2.;
218 cpar[2] = z_l3 * TMath::Tan(acc_min * kDegrad);
220 cpar[4] = zmag_in * TMath::Tan(acc_min * kDegrad);
221 pMC->Gsvolu("YMS2", "CONE", idtmed[1759], cpar, 5);
223 // OUTSIDE STEEL TUBE
226 cpar[1] = cpar[2] - 4.;
227 cpar[3] = cpar[4] - 4.;
228 pMC->Gsvolu("YSH2", "CONE", idtmed[1718], cpar, 5);
229 pMC->Gspos("YSH2", 1, "YMS2", 0., 0., 0., 0, "ONLY");
235 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
237 cpar[4] = cpar[2] + cpar[0] * 2. * TMath::Tan(theta_open * kDegrad);
238 pMC->Gsvolu("YMB2", "CONE", idtmed[1755], cpar, 5);
241 cpar[1] = cpar[2] - .2;
243 cpar[3] = cpar[4] - .2;
244 pMC->Gsvolu("YBS2", "CONE", idtmed[1749], cpar, 5);
245 pMC->Gspos("YBS2", 1, "YMB2", 0., 0., 0., 0, "ONLY");
248 pMC->Gspos("YMB2", 1, "YMS2", 0., 0., 0., 0, "ONLY");
250 pMC->Gspos("YMS2", 1, "YMOT", 0., 0., dz, 0, "ONLY");
256 pcpar[5] = zmag_in * TMath::Tan(acc_min * kDegrad);
257 pcpar[6] = zcone_e - zmag_in;
260 pcpar[9] = zmag_out - zmag_in;
263 pMC->Gsvolu("YMS3", "PCON", idtmed[1759], pcpar, 12);
265 // OUTSIDE STEEL TUBE
268 pcpar[4] = pcpar[5] - 4.;
269 pcpar[7] = pcpar[8] - 4.;
270 pcpar[10] = pcpar[11] - 4.;
271 pMC->Gsvolu("YSH3", "PCON", idtmed[1718], pcpar, 12);
272 pMC->Gspos("YSH3", 1, "YMS3", 0., 0., 0., 0, "MANY");
274 // ... beam pipe up to closing cone
276 zs = zmag_in - abs_c;
279 cpar[0] = (z_close - zmag_in) / 2.;
281 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
283 cpar[4] = cpar[2] + cpar[0] * 2. * TMath::Tan(theta_open * kDegrad);
284 pMC->Gsvolu("YMB3", "CONE", idtmed[1755], cpar, 5);
287 cpar[1] = cpar[2] - .2;
289 cpar[3] = cpar[4] - .2;
290 pMC->Gsvolu("YBS3", "CONE", idtmed[1749], cpar, 5);
291 pMC->Gspos("YBS3", 1, "YMB3", 0., 0., 0., 0, "ONLY");
292 pMC->Gspos("YMB3", 1, "YMS3", 0., 0., cpar[0], 0, "ONLY");
297 zs = z_close - abs_c;
301 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
304 pMC->Gsvolu("YMB5", "CONE", idtmed[1755], cpar, 5);
307 cpar[1] = cpar[2] - .2;
309 cpar[3] = cpar[4] - .2;
310 pMC->Gsvolu("YBS5", "CONE", idtmed[1749], cpar, 5);
311 pMC->Gspos("YBS5", 1, "YMB5", 0., 0., 0., 0, "ONLY");
314 pMC->Gspos("YMB5", 1, "YMS3", 0., 0., dzs, 0, "ONLY");
319 tpar[0] = 30. - r_pb - 4.;
320 tpar[1] = 30. - r_pb;
321 tpar[2] = (zmag_out - z_close - 50.) / 2.;
323 pMC->Gsvolu("YNW1", "TUBE", idtmed[1752], tpar, 3);
324 pMC->Gspos("YNW1", 1, "YMS3", 0., 0., dzs, 0, "MANY");
326 // constant beam pipe up to end of magnet
330 tpar[2] = (zmag_out - z_close - 50.) / 2.;
331 pMC->Gsvolu("YMB6", "TUBE", idtmed[1755], tpar, 3);
333 tpar[1] = r_abs - .8;
334 tpar[0] = tpar[1] - .2;
335 pMC->Gsvolu("YBS6", "TUBE", idtmed[1749], tpar, 3);
336 pMC->Gspos("YBS6", 1, "YMB6", 0., 0., 0., 0, "ONLY");
337 pMC->Gspos("YMB6", 1, "YMS3", 0., 0., dzs, 0, "ONLY");
340 pMC->Gspos("YMS3", 1, "YMOT", 0., 0., dz, 0, "ONLY");
346 tpar[2] = (1900. - zmag_out) / 2.;
348 pMC->Gsvolu("YMS4", "TUBE", idtmed[1759], tpar, 3);
349 // CALL GSVOLU('YMS4','TUBE',IDTMED(1752),TPAR,3,IL3) ! W
351 // OUTSIDE STEEL TUBE
354 tpar[0] = tpar[1] - 4.;
355 pMC->Gsvolu("YSH4", "TUBE", idtmed[1718], tpar, 3);
356 pMC->Gspos("YSH4", 1, "YMS4", 0., 0., 0., 0, "MANY");
360 tpar[0] = 30. - r_pb - 4.;
361 tpar[1] = 30. - r_pb;
362 pMC->Gsvolu("YNW2", "TUBE", idtmed[1752], tpar, 3);
363 pMC->Gspos("YNW2", 1, "YMS4", 0., 0., 0., 0, "MANY");
370 pMC->Gsvolu("YMB4", "TUBE", idtmed[1755], tpar, 3);
373 tpar[1] = r_abs - .8;
374 tpar[0] = tpar[1] - .2;
375 pMC->Gsvolu("YBS4", "TUBE", idtmed[1749], tpar, 3);
376 pMC->Gspos("YBS4", 1, "YMB4", 0., 0., 0., 0, "ONLY");
379 dz = zmag_out + shl4;
380 pMC->Gspos("YMB4", 1, "YMS4", 0., 0., 0., 0, "ONLY");
381 pMC->Gspos("YMS4", 1, "YMOT", 0., 0., dz, 0, "ONLY");
382 pMC->Gspos("YMOT", 1, "ALIC", 0., 0., 0., 0, "ONLY");
385 //_____________________________________________________________________________
386 void AliSHIL::CreateMaterials()
389 // Defines materials for the muon shield
391 // Origin N. Van Eijndhoven
394 Int_t ISXFLD = gAlice->Field()->Integ();
395 Float_t SXMGMX = gAlice->Field()->Max();
397 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
398 Float_t zsteel[4] = { 26.,24.,28.,14. };
399 Float_t wsteel[4] = { .715,.18,.1,.005 };
400 Float_t apbw[2] = { 207.2,183.85 };
401 Float_t zpbw[2] = { 82.,74. };
402 Float_t wpbw[2] = { .5,.5 };
404 Float_t epsil, stmin, tmaxfd, deemax, stemax;
409 // LEAD/TUNGSTEN MIXTURE
412 // --- Define the various materials for GEANT ---
414 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
415 AliMaterial(29, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
416 AliMaterial(49, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
419 AliMaterial(10, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
420 AliMaterial(30, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
421 AliMaterial(50, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
424 AliMaterial(12, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
425 AliMaterial(32, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
426 AliMaterial(52, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
429 AliMaterial(13, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
430 AliMaterial(33, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
431 AliMaterial(53, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
434 AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
435 AliMaterial(35, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
436 AliMaterial(55, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
439 AliMaterial(16, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
440 AliMaterial(36, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
441 AliMaterial(56, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
444 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
445 AliMixture(39, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
446 AliMixture(59, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
449 AliMixture(20, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
450 AliMixture(40, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
451 AliMixture(60, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
454 // Defines tracking media parameters.
455 // Les valeurs sont commentees pour laisser le defaut
456 // a GEANT (version 3-21, page CONS200), f.m.
457 epsil = .001; // Tracking precision,
458 stemax = -1.; // Maximum displacement for multiple scat
459 tmaxfd = -20.; // Maximum angle due to field deflection
460 deemax = -.3; // Maximum fractional energy loss, DLS
465 AliMedium(1709, "ALU_C0 ", 9, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
466 AliMedium(1729, "ALU_C1 ", 29, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
467 AliMedium(1749, "ALU_C2 ", 49, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
470 AliMedium(1710, "FE_C0 ", 10, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
471 AliMedium(1730, "FE_C1 ", 30, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
472 AliMedium(1750, "FE_C2 ", 50, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
475 AliMedium(1712, "W_C0 ", 12, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
476 AliMedium(1732, "W_C1 ", 32, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
477 AliMedium(1752, "W_C2 ", 52, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
480 AliMedium(1713, "PB_C0 ", 13, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
481 AliMedium(1733, "PB_C1 ", 33, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
482 AliMedium(1753, "PB_C2 ", 53, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
485 AliMedium(1715, "AIR_C0 ", 15, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
486 AliMedium(1735, "AIR_C1 ", 35, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
487 AliMedium(1755, "AIR_C2 ", 55, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
490 AliMedium(1716, "VA_C0 ", 16, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
491 AliMedium(1736, "VA_C1 ", 36, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
492 AliMedium(1756, "VA_C2 ", 56, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
495 AliMedium(1719, "ST_C0 ", 19, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
496 AliMedium(1739, "ST_C1 ", 39, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
497 AliMedium(1759, "ST_C3 ", 59, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
500 AliMedium(1720, "PB/W0 ", 20, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
501 AliMedium(1740, "PB/W1 ", 40, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
502 AliMedium(1760, "PB/W3 ", 60, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
505 //_____________________________________________________________________________
506 void AliSHIL::DrawModule ()
509 // Draw a shaded view of the muon shield
512 AliMC* pMC = AliMC::GetMC();
514 // Set everything unseen
515 pMC->Gsatt("*", "seen", -1);
517 // Set ALIC mother transparent
518 pMC->Gsatt("ALIC","SEEN",0);
520 // Set the volumes visible
521 pMC->Gsatt("YMOT","seen",1);
522 pMC->Gsatt("YMS1","seen",1);
523 pMC->Gsatt("YSH1","seen",1);
524 pMC->Gsatt("YAC1","seen",1);
525 pMC->Gsatt("YAC2","seen",1);
526 pMC->Gsatt("YSC1","seen",1);
527 pMC->Gsatt("YSC2","seen",1);
528 pMC->Gsatt("YMB1","seen",1);
529 pMC->Gsatt("YBS1","seen",1);
530 pMC->Gsatt("YMS2","seen",1);
531 pMC->Gsatt("YSH2","seen",1);
532 pMC->Gsatt("YMB2","seen",1);
533 pMC->Gsatt("YBS2","seen",1);
534 pMC->Gsatt("YMS3","seen",1);
535 pMC->Gsatt("YSH3","seen",1);
536 pMC->Gsatt("YMB3","seen",1);
537 pMC->Gsatt("YBS3","seen",1);
538 pMC->Gsatt("YMB5","seen",1);
539 pMC->Gsatt("YBS5","seen",1);
540 pMC->Gsatt("YNW1","seen",1);
541 pMC->Gsatt("YMB6","seen",1);
542 pMC->Gsatt("YBS6","seen",1);
543 pMC->Gsatt("YMS4","seen",1);
544 pMC->Gsatt("YSH4","seen",1);
545 pMC->Gsatt("YNW2","seen",1);
546 pMC->Gsatt("YMB4","seen",1);
547 pMC->Gsatt("YBS4","seen",1);
549 pMC->Gdopt("hide", "on");
550 pMC->Gdopt("shad", "on");
551 pMC->Gsatt("*", "fill", 7);
552 pMC->SetClipBox(".");
553 pMC->SetClipBox("*", 0, 3000, -3000, 3000, -6000, 6000);
555 pMC->Gdraw("alic", 30, 30, 0, 26.5, 18, .03, .03);
556 pMC->Gdhead(1111, "Muon Shield");
557 pMC->Gdman(16, 6, "MAN");
560 //_____________________________________________________________________________
564 // Initialise the muon shield after it has been built
569 for(i=0;i<35;i++) printf("*");
570 printf(" SHIL_INIT ");
571 for(i=0;i<35;i++) printf("*");
574 // Here the ABSO initialisation code (if any!)
575 for(i=0;i<80;i++) printf("*");