1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
20 ///////////////////////////////////////////////////////////////////////////////
22 // Muon Shield Class //
23 // This class contains a description of the muon shield //
27 <img src="picts/AliSHILClass.gif">
32 ///////////////////////////////////////////////////////////////////////////////
40 //_____________________________________________________________________________
44 // Default constructor for muon shield
48 //_____________________________________________________________________________
49 AliSHIL::AliSHIL(const char *name, const char *title)
50 : AliModule(name,title)
53 // Standard constructor for muon shield
60 //_____________________________________________________________________________
61 void AliSHIL::CreateGeometry()
64 // Build muon shield geometry
66 // Origin N.Van Eijndhoven
70 <img src="picts/AliSHIL.gif">
75 <img src="picts/AliSHILTree.gif">
79 Float_t r_pb, cpar[5], parm[12], tpar[3], zmag_out,
80 abs_c, abs_l, r_abs, pcpar[12];
84 Float_t dzcoch1, dzcoch2, acc_min, dzs, zcone_e, zmag_in,
85 z_close, z_l3, shl1, shl4;
87 Int_t *idtmed = fIdtmed->GetArray()-1699;
89 //abs_d = 90.; // DEFINES DRIFT LENGTH
92 //theta1 = 24.; // 1. angle defining the front absorber
93 //theta2 = 5.; // 2. angle defining the front absorbe
94 //acc_max = 9.; // ANGLE POLAIRE MAXIMUM
95 acc_min = 2.; // ANGLE POLAIRE MINIMUM DE DETECTION
97 //d_steel = 1.; // THICKNESS OF STEEL SUPPORT
100 //abs_cc = 315.; // DEFINES LENGTH OF CARBON
102 //abs_s = 150.; // DEFINES W-SHIELD LENGTH
103 //abs_n = 80.; // START OF NOSE
134 // the mother of all shields
141 parm[5] = abs_l * TMath::Tan(acc_min * kDegrad);
148 gMC->Gsvolu("YMOT", "PCON", idtmed[1715], parm, 12);
150 // beam shield ouside absorber inside l3
152 shl1 = (z_l3 - abs_l) / 2.;
155 cpar[2] = abs_l * TMath::Tan(acc_min * kDegrad);
157 cpar[4] = z_l3 * TMath::Tan(acc_min * kDegrad);
158 gMC->Gsvolu("YMS1", "CONE", idtmed[1759], cpar, 5);
160 // OUTSIDE STEEL TUBE
162 cpar[1] = cpar[2] - 4.;
163 cpar[3] = cpar[4] - 4.;
164 gMC->Gsvolu("YSH1", "CONE", idtmed[1718], cpar, 5);
165 gMC->Gspos("YSH1", 1, "YMS1", 0., 0., 0., 0, "ONLY");
167 // COCHES FOR CHAMBERS
168 dzcoch1 = cz1 + 4. - (abs_l + shl1);
169 dzcoch2 = cz2 + 4. - (abs_l + shl1);
173 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
174 cpar[2] = (cz1 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad);
175 cpar[1] = cpar[2] - 3.;
176 cpar[3] = cpar[1] + dr;
177 cpar[4] = cpar[2] + dr;
178 gMC->Gsvolu("YAC1", "CONE", idtmed[1714], cpar, 5);
179 gMC->Gspos("YAC1", 1, "YMS1", 0., 0., dzcoch1, 0, "ONLY");
180 cpar[2] = (cz2 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad);
181 cpar[1] = cpar[2] - 3.;
182 cpar[3] = cpar[1] + dr;
183 cpar[4] = cpar[2] + dr;
184 gMC->Gsvolu("YAC2", "CONE", idtmed[1714], cpar, 5);
185 gMC->Gspos("YAC2", 1, "YMS1", 0., 0., dzcoch2, 0, "ONLY");
188 cpar[0] = (cz1 + 4. + 20. - abs_l) / 2.;
189 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
190 // CPAR(3)=ABS_L*TAN(kDegrad*ACC_MIN)-3.
191 cpar[2] = abs_l * TMath::Tan(acc_min * kDegrad) - 4.;
192 cpar[1] = cpar[2] - 3.;
193 cpar[3] = cpar[1] + dr;
194 cpar[4] = cpar[2] + dr;
195 dzcoch1 = abs_l + cpar[0] - (abs_l + shl1);
196 gMC->Gsvolu("YSC1", "CONE", idtmed[1718], cpar, 5);
197 gMC->Gspos("YSC1", 1, "YMS1", 0., 0., dzcoch1, 0, "ONLY");
200 dr = cpar[0] * 2. * TMath::Tan(acc_min * kDegrad);
201 // CPAR(3)=(CZ2+4.-CPAR(1))*TAN(kDegrad*ACC_MIN)-3.
202 cpar[2] = (cz2 + 4. - cpar[0]) * TMath::Tan(acc_min * kDegrad) - 4.;
203 cpar[1] = cpar[2] - 3.;
204 cpar[3] = cpar[1] + dr;
205 cpar[4] = cpar[2] + dr;
206 gMC->Gsvolu("YSC2", "CONE", idtmed[1718], cpar, 5);
207 gMC->Gspos("YSC2", 1, "YMS1", -4., 0., dzcoch2, 0, "ONLY");
212 cpar[2] = r_abs + (abs_l - abs_c) * TMath::Tan(theta_open * kDegrad);
214 cpar[4] = cpar[2] + shl1 * 2. * TMath::Tan(theta_open * kDegrad);
215 gMC->Gsvolu("YMB1", "CONE", idtmed[1755], cpar, 5);
219 cpar[1] = cpar[2] - .2;
221 cpar[3] = cpar[4] - .2;
222 gMC->Gsvolu("YBS1", "CONE", idtmed[1749], cpar, 5);
223 gMC->Gspos("YBS1", 1, "YMB1", 0., 0., 0., 0, "ONLY");
226 gMC->Gspos("YMB1", 1, "YMS1", 0., 0., 0., 0, "ONLY");
228 gMC->Gspos("YMS1", 1, "YMOT", 0., 0., dz, 0, "ONLY");
230 // BEAM SHIELD OUTSIDE L3
233 cpar[0] = (zmag_in - z_l3) / 2.;
235 cpar[2] = z_l3 * TMath::Tan(acc_min * kDegrad);
237 cpar[4] = zmag_in * TMath::Tan(acc_min * kDegrad);
238 gMC->Gsvolu("YMS2", "CONE", idtmed[1759], cpar, 5);
240 // OUTSIDE STEEL TUBE
243 cpar[1] = cpar[2] - 4.;
244 cpar[3] = cpar[4] - 4.;
245 gMC->Gsvolu("YSH2", "CONE", idtmed[1718], cpar, 5);
246 gMC->Gspos("YSH2", 1, "YMS2", 0., 0., 0., 0, "ONLY");
252 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
254 cpar[4] = cpar[2] + cpar[0] * 2. * TMath::Tan(theta_open * kDegrad);
255 gMC->Gsvolu("YMB2", "CONE", idtmed[1755], cpar, 5);
258 cpar[1] = cpar[2] - .2;
260 cpar[3] = cpar[4] - .2;
261 gMC->Gsvolu("YBS2", "CONE", idtmed[1749], cpar, 5);
262 gMC->Gspos("YBS2", 1, "YMB2", 0., 0., 0., 0, "ONLY");
265 gMC->Gspos("YMB2", 1, "YMS2", 0., 0., 0., 0, "ONLY");
267 gMC->Gspos("YMS2", 1, "YMOT", 0., 0., dz, 0, "ONLY");
273 pcpar[5] = zmag_in * TMath::Tan(acc_min * kDegrad);
274 pcpar[6] = zcone_e - zmag_in;
277 pcpar[9] = zmag_out - zmag_in;
280 gMC->Gsvolu("YMS3", "PCON", idtmed[1759], pcpar, 12);
282 // OUTSIDE STEEL TUBE
285 pcpar[4] = pcpar[5] - 4.;
286 pcpar[7] = pcpar[8] - 4.;
287 pcpar[10] = pcpar[11] - 4.;
288 gMC->Gsvolu("YSH3", "PCON", idtmed[1718], pcpar, 12);
289 gMC->Gspos("YSH3", 1, "YMS3", 0., 0., 0., 0, "MANY");
291 // ... beam pipe up to closing cone
293 zs = zmag_in - abs_c;
296 cpar[0] = (z_close - zmag_in) / 2.;
298 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
300 cpar[4] = cpar[2] + cpar[0] * 2. * TMath::Tan(theta_open * kDegrad);
301 gMC->Gsvolu("YMB3", "CONE", idtmed[1755], cpar, 5);
304 cpar[1] = cpar[2] - .2;
306 cpar[3] = cpar[4] - .2;
307 gMC->Gsvolu("YBS3", "CONE", idtmed[1749], cpar, 5);
308 gMC->Gspos("YBS3", 1, "YMB3", 0., 0., 0., 0, "ONLY");
309 gMC->Gspos("YMB3", 1, "YMS3", 0., 0., cpar[0], 0, "ONLY");
314 zs = z_close - abs_c;
318 cpar[2] = r_abs + zs * TMath::Tan(theta_open * kDegrad);
321 gMC->Gsvolu("YMB5", "CONE", idtmed[1755], cpar, 5);
324 cpar[1] = cpar[2] - .2;
326 cpar[3] = cpar[4] - .2;
327 gMC->Gsvolu("YBS5", "CONE", idtmed[1749], cpar, 5);
328 gMC->Gspos("YBS5", 1, "YMB5", 0., 0., 0., 0, "ONLY");
331 gMC->Gspos("YMB5", 1, "YMS3", 0., 0., dzs, 0, "ONLY");
336 tpar[0] = 30. - r_pb - 4.;
337 tpar[1] = 30. - r_pb;
338 tpar[2] = (zmag_out - z_close - 50.) / 2.;
340 gMC->Gsvolu("YNW1", "TUBE", idtmed[1752], tpar, 3);
341 gMC->Gspos("YNW1", 1, "YMS3", 0., 0., dzs, 0, "MANY");
343 // constant beam pipe up to end of magnet
347 tpar[2] = (zmag_out - z_close - 50.) / 2.;
348 gMC->Gsvolu("YMB6", "TUBE", idtmed[1755], tpar, 3);
350 tpar[1] = r_abs - .8;
351 tpar[0] = tpar[1] - .2;
352 gMC->Gsvolu("YBS6", "TUBE", idtmed[1749], tpar, 3);
353 gMC->Gspos("YBS6", 1, "YMB6", 0., 0., 0., 0, "ONLY");
354 gMC->Gspos("YMB6", 1, "YMS3", 0., 0., dzs, 0, "ONLY");
357 gMC->Gspos("YMS3", 1, "YMOT", 0., 0., dz, 0, "ONLY");
363 tpar[2] = (1900. - zmag_out) / 2.;
365 gMC->Gsvolu("YMS4", "TUBE", idtmed[1759], tpar, 3);
366 // CALL GSVOLU('YMS4','TUBE',IDTMED(1752),TPAR,3,IL3) ! W
368 // OUTSIDE STEEL TUBE
371 tpar[0] = tpar[1] - 4.;
372 gMC->Gsvolu("YSH4", "TUBE", idtmed[1718], tpar, 3);
373 gMC->Gspos("YSH4", 1, "YMS4", 0., 0., 0., 0, "MANY");
377 tpar[0] = 30. - r_pb - 4.;
378 tpar[1] = 30. - r_pb;
379 gMC->Gsvolu("YNW2", "TUBE", idtmed[1752], tpar, 3);
380 gMC->Gspos("YNW2", 1, "YMS4", 0., 0., 0., 0, "MANY");
387 gMC->Gsvolu("YMB4", "TUBE", idtmed[1755], tpar, 3);
390 tpar[1] = r_abs - .8;
391 tpar[0] = tpar[1] - .2;
392 gMC->Gsvolu("YBS4", "TUBE", idtmed[1749], tpar, 3);
393 gMC->Gspos("YBS4", 1, "YMB4", 0., 0., 0., 0, "ONLY");
396 dz = zmag_out + shl4;
397 gMC->Gspos("YMB4", 1, "YMS4", 0., 0., 0., 0, "ONLY");
398 gMC->Gspos("YMS4", 1, "YMOT", 0., 0., dz, 0, "ONLY");
399 gMC->Gspos("YMOT", 1, "ALIC", 0., 0., 0., 0, "ONLY");
402 //_____________________________________________________________________________
403 void AliSHIL::CreateMaterials()
406 // Defines materials for the muon shield
408 // Origin N. Van Eijndhoven
411 Int_t ISXFLD = gAlice->Field()->Integ();
412 Float_t SXMGMX = gAlice->Field()->Max();
414 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
415 Float_t zsteel[4] = { 26.,24.,28.,14. };
416 Float_t wsteel[4] = { .715,.18,.1,.005 };
417 Float_t apbw[2] = { 207.2,183.85 };
418 Float_t zpbw[2] = { 82.,74. };
419 Float_t wpbw[2] = { .5,.5 };
421 Float_t epsil, stmin, tmaxfd, deemax, stemax;
426 // LEAD/TUNGSTEN MIXTURE
429 // --- Define the various materials for GEANT ---
431 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
432 AliMaterial(29, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
433 AliMaterial(49, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
436 AliMaterial(10, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
437 AliMaterial(30, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
438 AliMaterial(50, "IRON$ ", 55.85, 26., 7.87, 1.76, 17.1);
441 AliMaterial(12, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
442 AliMaterial(32, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
443 AliMaterial(52, "TUNGSTEN$ ", 183.85, 74., 19.3, .35, 10.3);
446 AliMaterial(13, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
447 AliMaterial(33, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
448 AliMaterial(53, "LEAD$ ", 207.19, 82., 11.35, .56, 18.5);
451 AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
452 AliMaterial(35, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
453 AliMaterial(55, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
456 AliMaterial(16, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
457 AliMaterial(36, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
458 AliMaterial(56, "VACUUM$ ", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
461 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
462 AliMixture(39, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
463 AliMixture(59, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
466 AliMixture(20, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
467 AliMixture(40, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
468 AliMixture(60, "LEAD/TUNGSTEN$", apbw, zpbw, 15.325, 2, wpbw);
471 // Defines tracking media parameters.
472 // Les valeurs sont commentees pour laisser le defaut
473 // a GEANT (version 3-21, page CONS200), f.m.
474 epsil = .001; // Tracking precision,
475 stemax = -1.; // Maximum displacement for multiple scat
476 tmaxfd = -20.; // Maximum angle due to field deflection
477 deemax = -.3; // Maximum fractional energy loss, DLS
482 AliMedium(9, "ALU_C0 ", 9, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
483 AliMedium(29, "ALU_C1 ", 29, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
484 AliMedium(49, "ALU_C2 ", 49, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
487 AliMedium(10, "FE_C0 ", 10, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
488 AliMedium(30, "FE_C1 ", 30, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
489 AliMedium(50, "FE_C2 ", 50, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
492 AliMedium(12, "W_C0 ", 12, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
493 AliMedium(32, "W_C1 ", 32, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
494 AliMedium(52, "W_C2 ", 52, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
497 AliMedium(13, "PB_C0 ", 13, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
498 AliMedium(33, "PB_C1 ", 33, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
499 AliMedium(53, "PB_C2 ", 53, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
502 AliMedium(15, "AIR_C0 ", 15, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
503 AliMedium(35, "AIR_C1 ", 35, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
504 AliMedium(55, "AIR_C2 ", 55, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
507 AliMedium(16, "VA_C0 ", 16, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
508 AliMedium(36, "VA_C1 ", 36, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
509 AliMedium(56, "VA_C2 ", 56, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
512 AliMedium(19, "ST_C0 ", 19, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
513 AliMedium(39, "ST_C1 ", 39, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
514 AliMedium(59, "ST_C3 ", 59, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
517 AliMedium(20, "PB/W0 ", 20, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
518 AliMedium(40, "PB/W1 ", 40, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
519 AliMedium(60, "PB/W3 ", 60, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
522 //_____________________________________________________________________________
523 void AliSHIL::DrawModule ()
526 // Draw a shaded view of the muon shield
529 // Set everything unseen
530 gMC->Gsatt("*", "seen", -1);
532 // Set ALIC mother transparent
533 gMC->Gsatt("ALIC","SEEN",0);
535 // Set the volumes visible
536 gMC->Gsatt("YMOT","seen",1);
537 gMC->Gsatt("YMS1","seen",1);
538 gMC->Gsatt("YSH1","seen",1);
539 gMC->Gsatt("YAC1","seen",1);
540 gMC->Gsatt("YAC2","seen",1);
541 gMC->Gsatt("YSC1","seen",1);
542 gMC->Gsatt("YSC2","seen",1);
543 gMC->Gsatt("YMB1","seen",1);
544 gMC->Gsatt("YBS1","seen",1);
545 gMC->Gsatt("YMS2","seen",1);
546 gMC->Gsatt("YSH2","seen",1);
547 gMC->Gsatt("YMB2","seen",1);
548 gMC->Gsatt("YBS2","seen",1);
549 gMC->Gsatt("YMS3","seen",1);
550 gMC->Gsatt("YSH3","seen",1);
551 gMC->Gsatt("YMB3","seen",1);
552 gMC->Gsatt("YBS3","seen",1);
553 gMC->Gsatt("YMB5","seen",1);
554 gMC->Gsatt("YBS5","seen",1);
555 gMC->Gsatt("YNW1","seen",1);
556 gMC->Gsatt("YMB6","seen",1);
557 gMC->Gsatt("YBS6","seen",1);
558 gMC->Gsatt("YMS4","seen",1);
559 gMC->Gsatt("YSH4","seen",1);
560 gMC->Gsatt("YNW2","seen",1);
561 gMC->Gsatt("YMB4","seen",1);
562 gMC->Gsatt("YBS4","seen",1);
564 gMC->Gdopt("hide", "on");
565 gMC->Gdopt("shad", "on");
566 gMC->Gsatt("*", "fill", 7);
567 gMC->SetClipBox(".");
568 gMC->SetClipBox("*", 0, 3000, -3000, 3000, -6000, 6000);
570 gMC->Gdraw("alic", 30, 30, 0, 26.5, 18, .03, .03);
571 gMC->Gdhead(1111, "Muon Shield");
572 gMC->Gdman(16, 6, "MAN");
575 //_____________________________________________________________________________
579 // Initialise the muon shield after it has been built
584 for(i=0;i<35;i++) printf("*");
585 printf(" SHIL_INIT ");
586 for(i=0;i<35;i++) printf("*");
589 // Here the ABSO initialisation code (if any!)
590 for(i=0;i<80;i++) printf("*");