1 ///////////////////////////////////////////////////////////////////////////////
3 // Muon Shield Class //
4 // This class contains a description of the muon shield //
8 <img src="picts/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="picts/AliSHIL.gif">
56 <img src="picts/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 Int_t *idtmed = fIdtmed->GetArray()-1699;
70 //abs_d = 90.; // DEFINES DRIFT LENGTH
73 //theta1 = 24.; // 1. angle defining the front absorber
74 //theta2 = 5.; // 2. angle defining the front absorbe
75 //acc_max = 9.; // ANGLE POLAIRE MAXIMUM
76 acc_min = 2.; // ANGLE POLAIRE MINIMUM DE DETECTION
78 //d_steel = 1.; // THICKNESS OF STEEL SUPPORT
81 //abs_cc = 315.; // DEFINES LENGTH OF CARBON
83 //abs_s = 150.; // DEFINES W-SHIELD LENGTH
84 //abs_n = 80.; // START OF NOSE
115 // the mother of all shields
122 parm[5] = abs_l * TMath::Tan(acc_min * kDegrad);
129 gMC->Gsvolu("YMOT", "PCON", idtmed[1715], parm, 12);
131 // beam shield ouside absorber inside l3
133 shl1 = (z_l3 - abs_l) / 2.;
136 cpar[2] = abs_l * TMath::Tan(acc_min * kDegrad);
138 cpar[4] = z_l3 * TMath::Tan(acc_min * kDegrad);
139 gMC->Gsvolu("YMS1", "CONE", idtmed[1759], cpar, 5);
141 // OUTSIDE STEEL TUBE
143 cpar[1] = cpar[2] - 4.;
144 cpar[3] = cpar[4] - 4.;
145 gMC->Gsvolu("YSH1", "CONE", idtmed[1718], cpar, 5);
146 gMC->Gspos("YSH1", 1, "YMS1", 0., 0., 0., 0, "ONLY");
148 // COCHES FOR CHAMBERS
149 dzcoch1 = cz1 + 4. - (abs_l + shl1);
150 dzcoch2 = cz2 + 4. - (abs_l + shl1);
154 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
155 cpar[2] = (cz1 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad);
156 cpar[1] = cpar[2] - 3.;
157 cpar[3] = cpar[1] + dr;
158 cpar[4] = cpar[2] + dr;
159 gMC->Gsvolu("YAC1", "CONE", idtmed[1714], cpar, 5);
160 gMC->Gspos("YAC1", 1, "YMS1", 0., 0., dzcoch1, 0, "ONLY");
161 cpar[2] = (cz2 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad);
162 cpar[1] = cpar[2] - 3.;
163 cpar[3] = cpar[1] + dr;
164 cpar[4] = cpar[2] + dr;
165 gMC->Gsvolu("YAC2", "CONE", idtmed[1714], cpar, 5);
166 gMC->Gspos("YAC2", 1, "YMS1", 0., 0., dzcoch2, 0, "ONLY");
169 cpar[0] = (cz1 + 4. + 20. - abs_l) / 2.;
170 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
171 // CPAR(3)=ABS_L*TAN(kDegrad*ACC_MIN)-3.
172 cpar[2] = abs_l * TMath::Tan(acc_min * kDegrad) - 4.;
173 cpar[1] = cpar[2] - 3.;
174 cpar[3] = cpar[1] + dr;
175 cpar[4] = cpar[2] + dr;
176 dzcoch1 = abs_l + cpar[0] - (abs_l + shl1);
177 gMC->Gsvolu("YSC1", "CONE", idtmed[1718], cpar, 5);
178 gMC->Gspos("YSC1", 1, "YMS1", 0., 0., dzcoch1, 0, "ONLY");
181 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
182 // CPAR(3)=(CZ2+4.-CPAR(1))*TAN(kDegrad*ACC_MIN)-3.
183 cpar[2] = (cz2 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad) - 4.;
184 cpar[1] = cpar[2] - 3.;
185 cpar[3] = cpar[1] + dr;
186 cpar[4] = cpar[2] + dr;
187 gMC->Gsvolu("YSC2", "CONE", idtmed[1718], cpar, 5);
188 gMC->Gspos("YSC2", 1, "YMS1", -4., 0., dzcoch2, 0, "ONLY");
193 cpar[2] = r_abs + (abs_l - abs_c) * TMath::Tan(theta_open * kDegrad);
195 cpar[4] = cpar[2] + shl1 * 2. * TMath::Tan(theta_open * kDegrad);
196 gMC->Gsvolu("YMB1", "CONE", idtmed[1755], cpar, 5);
200 cpar[1] = cpar[2] - .2;
202 cpar[3] = cpar[4] - .2;
203 gMC->Gsvolu("YBS1", "CONE", idtmed[1749], cpar, 5);
204 gMC->Gspos("YBS1", 1, "YMB1", 0., 0., 0., 0, "ONLY");
207 gMC->Gspos("YMB1", 1, "YMS1", 0., 0., 0., 0, "ONLY");
209 gMC->Gspos("YMS1", 1, "YMOT", 0., 0., dz, 0, "ONLY");
211 // BEAM SHIELD OUTSIDE L3
214 cpar[0] = (zmag_in - z_l3) / 2.;
216 cpar[2] = z_l3 * TMath::Tan(acc_min * kDegrad);
218 cpar[4] = zmag_in * TMath::Tan(acc_min * kDegrad);
219 gMC->Gsvolu("YMS2", "CONE", idtmed[1759], cpar, 5);
221 // OUTSIDE STEEL TUBE
224 cpar[1] = cpar[2] - 4.;
225 cpar[3] = cpar[4] - 4.;
226 gMC->Gsvolu("YSH2", "CONE", idtmed[1718], cpar, 5);
227 gMC->Gspos("YSH2", 1, "YMS2", 0., 0., 0., 0, "ONLY");
233 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
235 cpar[4] = cpar[2] + cpar[0] * 2. * TMath::Tan(theta_open * kDegrad);
236 gMC->Gsvolu("YMB2", "CONE", idtmed[1755], cpar, 5);
239 cpar[1] = cpar[2] - .2;
241 cpar[3] = cpar[4] - .2;
242 gMC->Gsvolu("YBS2", "CONE", idtmed[1749], cpar, 5);
243 gMC->Gspos("YBS2", 1, "YMB2", 0., 0., 0., 0, "ONLY");
246 gMC->Gspos("YMB2", 1, "YMS2", 0., 0., 0., 0, "ONLY");
248 gMC->Gspos("YMS2", 1, "YMOT", 0., 0., dz, 0, "ONLY");
254 pcpar[5] = zmag_in * TMath::Tan(acc_min * kDegrad);
255 pcpar[6] = zcone_e - zmag_in;
258 pcpar[9] = zmag_out - zmag_in;
261 gMC->Gsvolu("YMS3", "PCON", idtmed[1759], pcpar, 12);
263 // OUTSIDE STEEL TUBE
266 pcpar[4] = pcpar[5] - 4.;
267 pcpar[7] = pcpar[8] - 4.;
268 pcpar[10] = pcpar[11] - 4.;
269 gMC->Gsvolu("YSH3", "PCON", idtmed[1718], pcpar, 12);
270 gMC->Gspos("YSH3", 1, "YMS3", 0., 0., 0., 0, "MANY");
272 // ... beam pipe up to closing cone
274 zs = zmag_in - abs_c;
277 cpar[0] = (z_close - zmag_in) / 2.;
279 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
281 cpar[4] = cpar[2] + cpar[0] * 2. * TMath::Tan(theta_open * kDegrad);
282 gMC->Gsvolu("YMB3", "CONE", idtmed[1755], cpar, 5);
285 cpar[1] = cpar[2] - .2;
287 cpar[3] = cpar[4] - .2;
288 gMC->Gsvolu("YBS3", "CONE", idtmed[1749], cpar, 5);
289 gMC->Gspos("YBS3", 1, "YMB3", 0., 0., 0., 0, "ONLY");
290 gMC->Gspos("YMB3", 1, "YMS3", 0., 0., cpar[0], 0, "ONLY");
295 zs = z_close - abs_c;
299 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
302 gMC->Gsvolu("YMB5", "CONE", idtmed[1755], cpar, 5);
305 cpar[1] = cpar[2] - .2;
307 cpar[3] = cpar[4] - .2;
308 gMC->Gsvolu("YBS5", "CONE", idtmed[1749], cpar, 5);
309 gMC->Gspos("YBS5", 1, "YMB5", 0., 0., 0., 0, "ONLY");
312 gMC->Gspos("YMB5", 1, "YMS3", 0., 0., dzs, 0, "ONLY");
317 tpar[0] = 30. - r_pb - 4.;
318 tpar[1] = 30. - r_pb;
319 tpar[2] = (zmag_out - z_close - 50.) / 2.;
321 gMC->Gsvolu("YNW1", "TUBE", idtmed[1752], tpar, 3);
322 gMC->Gspos("YNW1", 1, "YMS3", 0., 0., dzs, 0, "MANY");
324 // constant beam pipe up to end of magnet
328 tpar[2] = (zmag_out - z_close - 50.) / 2.;
329 gMC->Gsvolu("YMB6", "TUBE", idtmed[1755], tpar, 3);
331 tpar[1] = r_abs - .8;
332 tpar[0] = tpar[1] - .2;
333 gMC->Gsvolu("YBS6", "TUBE", idtmed[1749], tpar, 3);
334 gMC->Gspos("YBS6", 1, "YMB6", 0., 0., 0., 0, "ONLY");
335 gMC->Gspos("YMB6", 1, "YMS3", 0., 0., dzs, 0, "ONLY");
338 gMC->Gspos("YMS3", 1, "YMOT", 0., 0., dz, 0, "ONLY");
344 tpar[2] = (1900. - zmag_out) / 2.;
346 gMC->Gsvolu("YMS4", "TUBE", idtmed[1759], tpar, 3);
347 // CALL GSVOLU('YMS4','TUBE',IDTMED(1752),TPAR,3,IL3) ! W
349 // OUTSIDE STEEL TUBE
352 tpar[0] = tpar[1] - 4.;
353 gMC->Gsvolu("YSH4", "TUBE", idtmed[1718], tpar, 3);
354 gMC->Gspos("YSH4", 1, "YMS4", 0., 0., 0., 0, "MANY");
358 tpar[0] = 30. - r_pb - 4.;
359 tpar[1] = 30. - r_pb;
360 gMC->Gsvolu("YNW2", "TUBE", idtmed[1752], tpar, 3);
361 gMC->Gspos("YNW2", 1, "YMS4", 0., 0., 0., 0, "MANY");
368 gMC->Gsvolu("YMB4", "TUBE", idtmed[1755], tpar, 3);
371 tpar[1] = r_abs - .8;
372 tpar[0] = tpar[1] - .2;
373 gMC->Gsvolu("YBS4", "TUBE", idtmed[1749], tpar, 3);
374 gMC->Gspos("YBS4", 1, "YMB4", 0., 0., 0., 0, "ONLY");
377 dz = zmag_out + shl4;
378 gMC->Gspos("YMB4", 1, "YMS4", 0., 0., 0., 0, "ONLY");
379 gMC->Gspos("YMS4", 1, "YMOT", 0., 0., dz, 0, "ONLY");
380 gMC->Gspos("YMOT", 1, "ALIC", 0., 0., 0., 0, "ONLY");
383 //_____________________________________________________________________________
384 void AliSHIL::CreateMaterials()
387 // Defines materials for the muon shield
389 // Origin N. Van Eijndhoven
392 Int_t ISXFLD = gAlice->Field()->Integ();
393 Float_t SXMGMX = gAlice->Field()->Max();
395 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
396 Float_t zsteel[4] = { 26.,24.,28.,14. };
397 Float_t wsteel[4] = { .715,.18,.1,.005 };
398 Float_t apbw[2] = { 207.2,183.85 };
399 Float_t zpbw[2] = { 82.,74. };
400 Float_t wpbw[2] = { .5,.5 };
402 Float_t epsil, stmin, tmaxfd, deemax, stemax;
407 // LEAD/TUNGSTEN MIXTURE
410 // --- Define the various materials for GEANT ---
412 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
413 AliMaterial(29, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
414 AliMaterial(49, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
417 AliMaterial(10, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
418 AliMaterial(30, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
419 AliMaterial(50, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
422 AliMaterial(12, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
423 AliMaterial(32, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
424 AliMaterial(52, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
427 AliMaterial(13, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
428 AliMaterial(33, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
429 AliMaterial(53, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
432 AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
433 AliMaterial(35, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
434 AliMaterial(55, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
437 AliMaterial(16, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
438 AliMaterial(36, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
439 AliMaterial(56, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
442 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
443 AliMixture(39, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
444 AliMixture(59, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
447 AliMixture(20, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
448 AliMixture(40, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
449 AliMixture(60, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
452 // Defines tracking media parameters.
453 // Les valeurs sont commentees pour laisser le defaut
454 // a GEANT (version 3-21, page CONS200), f.m.
455 epsil = .001; // Tracking precision,
456 stemax = -1.; // Maximum displacement for multiple scat
457 tmaxfd = -20.; // Maximum angle due to field deflection
458 deemax = -.3; // Maximum fractional energy loss, DLS
463 AliMedium(9, "ALU_C0 ", 9, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
464 AliMedium(29, "ALU_C1 ", 29, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
465 AliMedium(49, "ALU_C2 ", 49, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
468 AliMedium(10, "FE_C0 ", 10, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
469 AliMedium(30, "FE_C1 ", 30, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
470 AliMedium(50, "FE_C2 ", 50, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
473 AliMedium(12, "W_C0 ", 12, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
474 AliMedium(32, "W_C1 ", 32, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
475 AliMedium(52, "W_C2 ", 52, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
478 AliMedium(13, "PB_C0 ", 13, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
479 AliMedium(33, "PB_C1 ", 33, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
480 AliMedium(53, "PB_C2 ", 53, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
483 AliMedium(15, "AIR_C0 ", 15, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
484 AliMedium(35, "AIR_C1 ", 35, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
485 AliMedium(55, "AIR_C2 ", 55, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
488 AliMedium(16, "VA_C0 ", 16, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
489 AliMedium(36, "VA_C1 ", 36, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
490 AliMedium(56, "VA_C2 ", 56, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
493 AliMedium(19, "ST_C0 ", 19, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
494 AliMedium(39, "ST_C1 ", 39, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
495 AliMedium(59, "ST_C3 ", 59, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
498 AliMedium(20, "PB/W0 ", 20, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
499 AliMedium(40, "PB/W1 ", 40, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
500 AliMedium(60, "PB/W3 ", 60, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
503 //_____________________________________________________________________________
504 void AliSHIL::DrawModule ()
507 // Draw a shaded view of the muon shield
510 // Set everything unseen
511 gMC->Gsatt("*", "seen", -1);
513 // Set ALIC mother transparent
514 gMC->Gsatt("ALIC","SEEN",0);
516 // Set the volumes visible
517 gMC->Gsatt("YMOT","seen",1);
518 gMC->Gsatt("YMS1","seen",1);
519 gMC->Gsatt("YSH1","seen",1);
520 gMC->Gsatt("YAC1","seen",1);
521 gMC->Gsatt("YAC2","seen",1);
522 gMC->Gsatt("YSC1","seen",1);
523 gMC->Gsatt("YSC2","seen",1);
524 gMC->Gsatt("YMB1","seen",1);
525 gMC->Gsatt("YBS1","seen",1);
526 gMC->Gsatt("YMS2","seen",1);
527 gMC->Gsatt("YSH2","seen",1);
528 gMC->Gsatt("YMB2","seen",1);
529 gMC->Gsatt("YBS2","seen",1);
530 gMC->Gsatt("YMS3","seen",1);
531 gMC->Gsatt("YSH3","seen",1);
532 gMC->Gsatt("YMB3","seen",1);
533 gMC->Gsatt("YBS3","seen",1);
534 gMC->Gsatt("YMB5","seen",1);
535 gMC->Gsatt("YBS5","seen",1);
536 gMC->Gsatt("YNW1","seen",1);
537 gMC->Gsatt("YMB6","seen",1);
538 gMC->Gsatt("YBS6","seen",1);
539 gMC->Gsatt("YMS4","seen",1);
540 gMC->Gsatt("YSH4","seen",1);
541 gMC->Gsatt("YNW2","seen",1);
542 gMC->Gsatt("YMB4","seen",1);
543 gMC->Gsatt("YBS4","seen",1);
545 gMC->Gdopt("hide", "on");
546 gMC->Gdopt("shad", "on");
547 gMC->Gsatt("*", "fill", 7);
548 gMC->SetClipBox(".");
549 gMC->SetClipBox("*", 0, 3000, -3000, 3000, -6000, 6000);
551 gMC->Gdraw("alic", 30, 30, 0, 26.5, 18, .03, .03);
552 gMC->Gdhead(1111, "Muon Shield");
553 gMC->Gdman(16, 6, "MAN");
556 //_____________________________________________________________________________
560 // Initialise the muon shield after it has been built
565 for(i=0;i<35;i++) printf("*");
566 printf(" SHIL_INIT ");
567 for(i=0;i<35;i++) printf("*");
570 // Here the ABSO initialisation code (if any!)
571 for(i=0;i<80;i++) printf("*");