Make kind of heavy shielding material (Pb, NiCuW) dependent on presence of outer...
[u/mrichter/AliRoot.git] / STRUCT / AliSHILv0.cxx
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 /*
17 $Log$
18 Revision 1.5  2000/06/12 19:40:00  morsch
19 New structure of beam pipe and heating jacket.
20 Optional outer Pb cone added. Not yet compatible with chamber inner radii.
21
22 Revision 1.4  2000/04/03 08:13:40  fca
23 Introduce extra scope for non ANSI compliant C++ compilers
24
25 Revision 1.3  2000/01/17 10:29:30  morsch
26 Overlap between Shield and Absorber due to limited numerical precision removed
27 by displacing the Shield by epsilon = 0.01 cm.
28
29 Revision 1.2  2000/01/13 11:27:51  morsch
30 Overlaps corrected: YCS3, YCS4; Inner radius YS21 corrected
31
32 Revision 1.1  2000/01/12 15:44:03  morsch
33 Standard version of SHIL
34
35 */
36
37 ///////////////////////////////////////////////////////////////////////////////
38 //                                                                           //
39 //  Muon Shield Class                                                        //
40 //  This class contains a description of the muon shield                     //
41 //                                                                           //
42 //Begin_Html
43 /*
44 <img src="picts/AliSHILClass.gif">
45 */
46 //End_Html
47 //                                                                           //
48 //                                                                           //
49 ///////////////////////////////////////////////////////////////////////////////
50
51 #include "AliSHILv0.h"
52 #include "AliRun.h"
53 #include "AliConst.h"
54
55 ClassImp(AliSHILv0)
56  
57 //_____________________________________________________________________________
58 AliSHILv0::AliSHILv0()
59 {
60   //
61   // Default constructor for muon shield
62   //
63 }
64  
65 //_____________________________________________________________________________
66 AliSHILv0::AliSHILv0(const char *name, const char *title)
67   : AliSHIL(name,title)
68 {
69   //
70   // Standard constructor for muon shield
71   //
72   SetMarkerColor(7);
73   SetMarkerStyle(2);
74   SetMarkerSize(0.4);
75   // Pb  cone not yet compatible with muon chamber inner radii
76   // Switched off by default
77   fPbCone=kFALSE;
78 }
79  
80 //_____________________________________________________________________________
81 void AliSHILv0::CreateGeometry()
82 {
83   //
84   // Build muon shield geometry
85   //
86   //
87   //Begin_Html
88   /*
89     <img src="picts/AliSHILv0.gif">
90   */
91   //End_Html
92   //Begin_Html
93   /*
94     <img src="picts/AliSHILv0Tree.gif">
95   */
96   //End_Html
97
98     Float_t cpar[5], cpar0[5], tpar[3], par1[39], par2[27], par3[27], 
99         par4[21], par0[42];
100     Float_t dz, dZ;
101   
102     Int_t *idtmed = fIdtmed->GetArray()-1699;
103
104 #include "ABSOSHILConst.h"
105 #include "SHILConst.h"
106
107   typedef enum {kC=1705, kAl=1708, kFe=1709, kCu=1710, kW=1711, kPb=1712,
108                 kNiCuW=1720, kVacuum=1714, kAir=1714, kConcrete=1716,
109                 kPolyCH2=1717, kSteel=1709, kInsulation=1713};  
110 //
111 // Material of the rear part of the shield
112   Int_t iHeavy=kNiCuW;
113   if (fPbCone) iHeavy=kPb;
114   
115   
116 //
117 // Mother volume
118 //
119   Float_t dRear1=dRear;
120   
121   Float_t zstart=zRear-dRear1;
122   
123   par0[0]  = 0.;
124   par0[1]  = 360.;
125   par0[2]  = 13.;
126
127   Float_t dl=(zvac12-zstart)/2.;
128   dz=zstart+dl;
129 //
130   par0[3]  = -dl;
131   par0[4]  = 0.;
132   par0[5]  = zstart * TMath::Tan(accMin);
133
134   par0[6]  = -dl+dRear1;
135   par0[7]  = 0.;
136   par0[8]  = zRear * TMath::Tan(accMin);
137
138   par0[9]  = -dl+dRear1;
139   par0[10]  = 0.;
140   par0[11]  = R11;
141
142   par0[12]  = -dz+zvac4;
143   par0[13]  = 0.;
144   par0[14]  = R11;
145
146   par0[15]  = -dz+zvac4;
147   par0[16] = 0.;
148   par0[17] = R21;
149
150   par0[18] = -dz+zvac6;
151   par0[19] = 0.;
152   par0[20] = R21;
153
154   par0[21] = -dz+zvac6;
155   par0[22] = 0.;
156   par0[23] = zvac6 * TMath::Tan(accMin);
157
158   par0[24] = -dz+zConeE;
159   par0[25] = 0.;
160   par0[26] = 30.;
161
162   par0[27] = -dz+zvac10;
163   par0[28] = 0.;
164   par0[29] = 30.;
165
166   par0[30] = -dz+zvac10;
167   par0[31] = 0.;
168   par0[32] = R42;
169
170   par0[33] = -dz+zvac11;
171   par0[34] = 0.;
172   par0[35] = R42;
173
174   par0[36] = -dz+zvac11;
175   par0[37] = 0.;
176   par0[38] = R43;
177
178   par0[39] = -dz+zvac12;
179   par0[40] = 0.;
180   par0[41] = R43;
181
182   gMC->Gsvolu("YMOT", "PCON", idtmed[kVacuum], par0, 42);
183   dz=zstart+dl;
184   gMC->Gspos("YMOT", 1, "ALIC", 0., 0., dz, 0, "ONLY");  
185 //
186
187   dZ=-dl;
188
189 //
190 // First section: bellows below and behind front absorber 
191 // 
192 //
193   par1[0]  = 0.;
194   par1[1]  = 360.;
195   par1[2]  = 12.;
196   dl=(zvac4-zstart)/2.;
197   
198   par1[3]  = -dl;
199   par1[4]  = rAbs+(zstart-zOpen) * TMath::Tan(thetaOpen1);
200   par1[5]  = zstart * TMath::Tan(accMin);
201
202   par1[6]  = -dl+zvac1-zstart;
203   par1[7]  = rAbs+ (zvac1-zOpen) * TMath::Tan(thetaOpen1);
204   par1[8]  = zvac1 * TMath::Tan(accMin);
205
206   par1[9]  = par1[6]+dr11;
207   par1[10] = par1[7]+dr11;
208   par1[11] = (zvac1+dr11) * TMath::Tan(accMin);
209
210   par1[12] = -dl+dRear1;
211   par1[13] = par1[10];
212   par1[14] = zRear * TMath::Tan(accMin);
213
214   par1[15] = -dl+dRear1;
215   par1[16] = par1[10];
216   par1[17] = R11;
217
218   par1[18] = -dl+(zvac1+dr11+dB1-zstart);
219   par1[19] = par1[16];
220   par1[20] = R11;
221
222   par1[21] = par1[18]+dr12;
223   par1[22] = par1[19]+dr12;
224   par1[23] = R11;
225
226   par1[24] = par1[21]+dF1;
227   par1[25] = par1[22];
228   par1[26] = R11;
229
230   par1[27] = par1[24]+dr12;
231   par1[28] = par1[25]-dr12;
232   par1[29] = R11;
233
234   par1[30] = par1[27]+dB1;
235   par1[31] = par1[28];
236   par1[32] = R11;
237
238   par1[33] = par1[30]+dr13;
239   par1[34] = par1[31]-dr13;
240   par1[35] = R11;
241
242   par1[36] = -dl+zvac4-zstart;
243   par1[37] = par1[34]+(zvac4-zvac3)*TMath::Tan(thetaOpen2);
244   par1[38] = R11;
245
246   Float_t r2=par1[34];
247   Float_t rBox=par1[31]-0.1;
248
249   gMC->Gsvolu("YGO1", "PCON", idtmed[kNiCuW], par1, 39);
250   { // Begin local scope for i
251       for (Int_t i=4; i<38; i+=3) par1[i]  = 0;
252   } // End local scope for i
253   gMC->Gsvolu("YMO1", "PCON", idtmed[kVacuum+40], par1, 39);
254   gMC->Gspos("YGO1", 1, "YMO1", 0., 0., 0., 0, "ONLY");  
255   dZ+=dl;
256   gMC->Gspos("YMO1", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
257   dZ+=dl;
258
259 //
260 // Steel envelope
261   tpar[0]=R11-dRSteel1;
262   tpar[1]=R11;
263   tpar[2]=dl-dRear1/2;
264   gMC->Gsvolu("YSE1", "TUBE", idtmed[kNiCuW], tpar, 3);
265   dz=dl-tpar[2];
266   gMC->Gspos("YSE1", 1, "YGO1", 0., 0., dz, 0, "ONLY");
267 //
268 // 1st section: vacuum system
269 //
270 //
271 // Bellow 1
272 //
273   tpar[0]=rB1;
274   tpar[1]=rB1+hB1;
275   tpar[2]=eB1/2.;
276   gMC->Gsvolu("YB11", "TUBE", idtmed[kSteel+40], tpar, 3);
277   Float_t dl1=tpar[2];
278   
279   tpar[0]=rB1+hB1-eB1;
280   tpar[1]=rB1+hB1;
281   tpar[2]=(lB1/2.-2.*eB1)/2.;
282   gMC->Gsvolu("YB12", "TUBE", idtmed[kSteel+40], tpar, 3);
283   Float_t dl2=tpar[2];
284
285   tpar[0]=rB1-eB1;
286   tpar[1]=rB1;
287   tpar[2]=lB1/8.;
288   gMC->Gsvolu("YB13", "TUBE", idtmed[kSteel+40], tpar, 3);
289   Float_t dl3=tpar[2];
290
291
292   tpar[0]=0;
293   tpar[1]=rB1+hB1;
294   tpar[2]=lB1/2.;
295   gMC->Gsvolu("YBU1", "TUBE", idtmed[kVacuum+40], tpar, 3);
296
297   dz=-tpar[2]+dl3;
298   gMC->Gspos("YB13", 1, "YBU1", 0., 0., dz, 0, "ONLY"); 
299   dz+=dl3;
300   dz+=dl1;  
301   gMC->Gspos("YB11", 1, "YBU1", 0., 0., dz, 0, "ONLY"); 
302   dz+=dl1;  
303   dz+=dl2;  
304   gMC->Gspos("YB12", 1, "YBU1", 0., 0., dz, 0, "ONLY"); 
305   dz+=dl2;  
306   dz+=dl1;
307   gMC->Gspos("YB11", 2, "YBU1", 0., 0., dz, 0, "ONLY"); 
308   dz+=dl1;
309   dz+=dl3;
310   gMC->Gspos("YB13", 2, "YBU1", 0., 0., dz, 0, "ONLY"); 
311   
312
313   tpar[0]=0;
314   tpar[1]=rB1+hB1;
315   tpar[2]=10.*lB1/2.;
316   gMC->Gsvolu("YBM1", "TUBE", idtmed[kVacuum+40], tpar, 3);
317   dz=-tpar[2]+lB1/2.;
318   { // Begin local scope for i
319       for (Int_t i=0; i<10; i++) {
320           gMC->Gspos("YBU1", i+1 , "YBM1", 0., 0., dz, 0, "ONLY"); 
321           dz+=lB1;
322       }
323   } // End local scope for i
324   dz=-dl+(zvac1-zstart)+dr11+tpar[2];
325   gMC->Gspos("YBM1", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
326
327   dz=dl-dr13-(zvac4-zvac3)-tpar[2];
328   gMC->Gspos("YBM1", 2, "YMO1", 0., 0., dz, 0, "ONLY"); 
329
330 //
331 // Flange
332
333   tpar[0]=0;
334   tpar[1]=rF1;
335   tpar[2]=dF1/2.;
336   gMC->Gsvolu("YFM1", "TUBE", idtmed[kVacuum+40], tpar, 3);
337
338   tpar[0]=rF1-2.;
339   tpar[1]=rF1;
340   tpar[2]=dF1/2.;
341   gMC->Gsvolu("YF11", "TUBE", idtmed[kSteel+40], tpar, 3);
342   gMC->Gspos("YF11", 1, "YFM1", 0., 0., 0., 0, "ONLY"); 
343
344   tpar[0]=rB1;
345   tpar[1]=rF1-2.;
346   tpar[2]=dFlange/2.;
347   gMC->Gsvolu("YF12", "TUBE", idtmed[kSteel+40], tpar, 3);
348   dz=-dF1/2.+tpar[2];
349   gMC->Gspos("YF12", 1, "YFM1", 0., 0., dz, 0, "ONLY"); 
350   dz= dF1/2.-tpar[2];
351   gMC->Gspos("YF12", 2, "YFM1", 0., 0., dz, 0, "ONLY"); 
352
353   dz=-dl+(zvac2-zstart);
354   gMC->Gspos("YFM1", 2, "YMO1", 0., 0., dz, 0, "ONLY"); 
355
356 //
357 // pipe between flange and bellows
358   tpar[0]=rB1-dTubeS;
359   tpar[1]=rB1;
360   tpar[2]=2.*(dB1+dr12-10.*lB1)/4.;
361   gMC->Gsvolu("YPF1", "TUBE", idtmed[kSteel+40], tpar, 3);
362  
363   dz=-dl+(zvac2-zstart)-dF1/2.-tpar[2];
364   gMC->Gspos("YPF1", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
365   dz=-dl+(zvac2-zstart)+dF1/2.+tpar[2];
366   gMC->Gspos("YPF1", 2, "YMO1", 0., 0., dz, 0, "ONLY"); 
367
368 // pipe and heating jackets outside bellows
369 //
370 // left side
371   cpar0[0]=(zvac1-zstart)/2;
372   cpar0[1]=rVacu+(zstart-zOpen)*TMath::Tan(thetaOpen1)-0.05;
373   cpar0[2]=rAbs +(zstart-zOpen)*TMath::Tan(thetaOpen1);
374   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpen1);
375   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpen1);
376   gMC->Gsvolu("YV11", "CONE", idtmed[kSteel+40], cpar0, 5);
377 //
378 // insulation
379   dTubeS=0.15;
380   cpar[0]=cpar0[0];
381   cpar[1]=cpar0[1]+0.15;
382   cpar[2]=cpar0[1]+0.65;
383   cpar[3]=cpar0[3]+0.15;
384   cpar[4]=cpar0[3]+0.65;
385   gMC->Gsvolu("YI11", "CONE", idtmed[kInsulation+40], cpar, 5);
386   gMC->Gspos("YI11", 1, "YV11", 0., 0., 0., 0, "ONLY"); 
387 //
388 // clearance
389   cpar[1]=cpar0[1]+0.75;
390   cpar[2]=cpar0[1]+1.25;
391   cpar[3]=cpar0[3]+0.75;
392   cpar[4]=cpar0[3]+1.25;
393   gMC->Gsvolu("YP11", "CONE", idtmed[kVacuum+40], cpar, 5);
394   gMC->Gspos("YP11", 1, "YV11", 0., 0., 0., 0, "ONLY"); 
395   
396   dz=-dl+cpar0[0];
397   gMC->Gspos("YV11", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
398 // right side
399   dTubeS=0.35;
400   dVacuS+=0.25;
401   
402   cpar0[0]=(zvac4-zvac3)/2;
403   cpar0[1]=rB1;
404   cpar0[2]=cpar0[1]+dVacuS;
405
406   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
407   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
408   gMC->Gsvolu("YV12", "CONE", idtmed[kSteel], cpar0, 5);
409   Float_t r2V=cpar0[3];
410 //
411 // insulation
412   cpar[0]=cpar0[0];
413   cpar[1]=cpar0[1]+dTubeS;
414   cpar[2]=cpar0[1]+dTubeS+dInsuS;
415   cpar[3]=cpar0[3]+dTubeS;
416   cpar[4]=cpar0[3]+dTubeS+dInsuS;
417   gMC->Gsvolu("YI12", "CONE", idtmed[kInsulation], cpar, 5);
418   gMC->Gspos("YI12", 1, "YV12", 0., 0., 0., 0, "ONLY"); 
419
420 //
421 // clearance
422   cpar[1]=cpar0[1]+dTubeS+dInsuS+dEnveS;
423   cpar[2]=cpar0[1]+dTubeS+dInsuS+dEnveS+dFreeS;
424   cpar[3]=cpar0[3]+dTubeS+dInsuS+dEnveS;
425   cpar[4]=cpar0[3]+dTubeS+dInsuS+dEnveS+dFreeS;
426   gMC->Gsvolu("YP12", "CONE", idtmed[kAir], cpar, 5);
427   gMC->Gspos("YP12", 1, "YV12", 0., 0., 0., 0, "ONLY"); 
428   
429   dz=dl-cpar0[0];
430   gMC->Gspos("YV12", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
431 //
432 // Second Section
433 // Between first and second bellow section
434 //
435
436   par2[0]  = 0.;
437   par2[1]  = 360.;
438   par2[2]  = 7.;
439   dl=(zvac7-zvac4)/2.;
440 // recess station 1   
441   par2[3]  = -dl;
442   par2[4]  = r2+(zvac4-zvac3) * TMath::Tan(thetaOpen2);
443   par2[5]  = R11;
444 // recess station 2   
445   par2[6]  = -dl;
446   par2[7]  = par2[4];
447   par2[8]  = R21;
448
449   par2[9]  = -dl+(zvac6-zvac4);
450   par2[10]  = r2+(zvac6-zvac3) * TMath::Tan(thetaOpen2);
451   par2[11]  = R21;
452
453   par2[12] = -dl+(zvac6-zvac4);
454   par2[13] = par2[10];
455   par2[14] = zvac6*TMath::Tan(accMin);
456
457 // Start of Pb section
458   par2[15] = -dl+(zPb-zvac4);
459   par2[16] = r2+(zPb-zvac3) * TMath::Tan(thetaOpen2);
460   par2[17] = zPb*TMath::Tan(accMin);
461
462 //
463 // end of cone following 2 deg line
464   par2[18] = -dl+(zConeE-zvac4);
465   par2[19] = r2+(zConeE-zvac3) * TMath::Tan(thetaOpen2);
466   par2[20] = 30.;
467
468   par2[21] = -dl+(zvac7-zvac4);
469   par2[22] = r2+(zvac7-zvac3) * TMath::Tan(thetaOpen2);
470   par2[23] = 30.;
471
472
473   gMC->Gsvolu("YGO2", "PCON", idtmed[iHeavy+40], par2, 24);
474 //
475 // Lead cone option replacing Tungsten 
476 //
477   Float_t parPb[12];
478   parPb[0]  = 0.;
479   parPb[1]  = 360.;
480   parPb[2]  = 3.;
481   Float_t dlPb=(zvac7-zPb)/2.;
482   
483   parPb[3]  = -dlPb;
484   parPb[4]  = 17.657;
485   parPb[5]  = zPb*TMath::Tan(accMin);
486   
487   parPb[6]  = -dlPb+(zConeE-zPb);
488   parPb[7]  = parPb[4]+(zConeE-zPb)*TMath::Tan(thetaOpenPb);
489   parPb[8]  = 30.;
490   
491   parPb[9]   = dlPb;
492   parPb[10]  = parPb[7]+(zvac7-zConeE)*TMath::Tan(thetaOpenPb);
493   parPb[11]  = 30.;
494   gMC->Gsvolu("YXO2", "PCON", idtmed[kPb], parPb, 12);    
495   gMC->Gspos("YXO2", 1, "YGO2", 0., 0., (zPb-zvac4)/2., 0, "ONLY");  
496   
497   { // Begin local scope for i
498       for (Int_t i=4; i<23; i+=3) par2[i]  = 0;
499   } // End local scope for i
500           
501   gMC->Gsvolu("YMO2", "PCON", idtmed[kVacuum+40], par2, 24);
502   gMC->Gspos("YGO2", 1, "YMO2", 0., 0., 0., 0, "ONLY");  
503   dZ+=dl;
504   gMC->Gspos("YMO2", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
505   dZ+=dl;
506 //
507 // Steel envelope
508 //
509   tpar[0]=R11-dRSteel1;
510   tpar[1]=R21;
511   tpar[2]=2;
512   gMC->Gsvolu("YS21", "TUBE", idtmed[kSteel], tpar, 3);
513   dz=-dl+tpar[2];
514   gMC->Gspos("YS21", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
515   dz+=tpar[2];
516   tpar[0]=R21-dRSteel2;
517   tpar[1]=R21;
518   tpar[2]=(zvac6-zvac5)/2.;
519   gMC->Gsvolu("YS22", "TUBE", idtmed[kSteel], tpar, 3);
520   dz+=tpar[2];
521   gMC->Gspos("YS22", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
522   dz+=tpar[2];
523   
524   cpar[0]=2.;
525   cpar[1]=R21-dRSteel2;
526   cpar[2]=zvac6 * TMath::Tan(accMin);
527   cpar[3]=cpar[1];
528   cpar[4]=cpar[2]+4.*TMath::Tan(accMin);
529
530   gMC->Gsvolu("YS23", "CONE", idtmed[kSteel], cpar, 5);
531   dz+=cpar[0];
532   gMC->Gspos("YS23", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
533   dz+=cpar[0];
534
535   cpar[0]=(zPb-zvac6-4.)/2;
536   cpar[2]=cpar[4];
537   cpar[4]=cpar[2]+2.*cpar[0]*TMath::Tan(accMin);
538   cpar[1]=cpar[2]-dRSteel2;
539   cpar[3]=cpar[4]-dRSteel2;
540
541   gMC->Gsvolu("YS24", "CONE", idtmed[kSteel], cpar, 5);
542   dz+=cpar[0];
543   gMC->Gspos("YS24", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
544   dz+=cpar[0];
545
546   cpar[0]=(zConeE-zPb)/2;
547   cpar[2]=cpar[4];
548   cpar[4]=cpar[2]+2.*cpar[0]*TMath::Tan(accMin);
549   cpar[1]=cpar[2]-dRSteel2;
550   cpar[3]=cpar[4]-dRSteel2;
551
552   gMC->Gsvolu("YS25", "CONE", idtmed[kSteel], cpar, 5);
553   dz=-dlPb+cpar[0];
554   gMC->Gspos("YS25", 1, "YXO2", 0., 0., dz, 0, "ONLY");  
555   dz+=cpar[0];
556
557   tpar[0]=26.;
558   tpar[1]=30.;
559   tpar[2]=(zvac7-zConeE)/2.;
560
561   gMC->Gsvolu("YS26", "TUBE", idtmed[kSteel], tpar, 3);
562   dz+=tpar[2];
563   gMC->Gspos("YS26", 1, "YXO2", 0., 0., dz, 0, "ONLY");  
564   dz+=tpar[2];
565   
566 //
567 // 2nd section: vacuum system 
568 //
569   cpar0[0]=(zvac7-zvac4)/2;
570   cpar0[1]=r2V;
571   cpar0[2]=r2V+dVacuS;
572   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
573   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
574   gMC->Gsvolu("YV21", "CONE", idtmed[kSteel+40], cpar0, 5);
575 //
576 // insulation
577   cpar[0]=cpar0[0];
578   cpar[1]=cpar0[1]+dTubeS;
579   cpar[2]=cpar0[1]+dTubeS+dInsuS;
580   cpar[3]=cpar0[3]+dTubeS;
581   cpar[4]=cpar0[3]+dTubeS+dInsuS;
582   gMC->Gsvolu("YI21", "CONE", idtmed[kInsulation+40], cpar, 5);
583   gMC->Gspos("YI21", 1, "YV21", 0., 0., 0., 0, "ONLY"); 
584 //
585 // clearance
586   cpar[1]=cpar0[1]+dTubeS+dInsuS+dEnveS;
587   cpar[2]=cpar0[1]+dTubeS+dInsuS+dEnveS+dFreeS;
588   cpar[3]=cpar0[3]+dTubeS+dInsuS+dEnveS;
589   cpar[4]=cpar0[3]+dTubeS+dInsuS+dEnveS+dFreeS;
590   gMC->Gsvolu("YP21", "CONE", idtmed[kAir+40], cpar, 5);
591   gMC->Gspos("YP21", 1, "YV21", 0., 0., 0., 0, "ONLY"); 
592   
593   dz=0.;
594   gMC->Gspos("YV21", 1, "YMO2", 0., 0., dz, 0, "ONLY"); 
595
596
597 //
598 // Third Section: Bellows and Flange 
599 //
600   par3[0]  = 0.;
601   par3[1]  = 360.;
602   par3[2]  = 8.;
603   dl=(zvac9-zvac7)/2.;
604   
605   par3[3]  = -dl;
606   par3[4]  = r2+(zvac7-zvac3) * TMath::Tan(thetaOpen2);
607   par3[5]  = 30.;
608
609   par3[6]  = -dl+dr21;
610   par3[7]  = par3[4]+dr21;
611   par3[8]  = 30.;
612
613   par3[9]  = par3[6]+dB2;
614   par3[10] = par3[7];
615   par3[11] = 30.;
616
617   par3[12] = par3[9]+dr22;
618   par3[13] = par3[10]+dr22;
619   par3[14] = 30.;
620
621   par3[15] = par3[12]+dF2;
622   par3[16] = par3[13];
623   par3[17] = 30.;
624
625   par3[18] = par3[15]+dr22;
626   par3[19] = par3[16]-dr22;
627   par3[20] = 30.;
628
629   par3[21] = par3[18]+dB2;
630   par3[22] = par3[19];
631   par3[23] = 30.;
632
633   par3[24] = par3[21]+dr23;
634   par3[25] = par3[22]-dr23;
635   par3[26] = 30.;
636 //
637   rBox=par3[22]-0.1;
638   Float_t r3=par3[25];
639   
640   gMC->Gsvolu("YGO3", "PCON", idtmed[iHeavy+40], par3, 27);
641
642   parPb[0]  = dl;
643   parPb[1]  = parPb[10];
644   parPb[2]  = 30;
645   parPb[3]  = parPb[1]+2.*dl*TMath::Tan(thetaOpenPb);
646   parPb[4]  = 30;
647   gMC->Gsvolu("YXO3", "CONE", idtmed[kPb], parPb, 5);
648   gMC->Gspos("YXO3", 1, "YGO3", 0., 0., 0., 0, "ONLY");  
649   { // Begin local scope for i
650       for (Int_t i=4; i<26; i+=3) par3[i]  = 0;
651   } // End local scope for i
652   gMC->Gsvolu("YMO3", "PCON", idtmed[kVacuum+40], par3, 27);
653   gMC->Gspos("YGO3", 1, "YMO3", 0., 0., 0., 0, "ONLY");  
654
655 //
656 // Steel envelope
657   tpar[0]=26;
658   tpar[1]=30;
659   tpar[2]=dl;
660   gMC->Gsvolu("YS31", "TUBE", idtmed[kSteel], tpar, 3);
661   gMC->Gspos("YS31", 1, "YXO3", 0., 0., 0., 0, "ONLY");  
662   dZ+=dl;
663   gMC->Gspos("YMO3", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
664   dZ+=dl;
665
666 //
667 // 3rd section: vacuum system
668 //
669 //
670 // Bellow2
671 //
672   tpar[0]=rB2;
673   tpar[1]=rB2+hB2;
674   tpar[2]=eB2/2.;
675   gMC->Gsvolu("YB21", "TUBE", idtmed[kSteel+40], tpar, 3);
676   dl1=tpar[2];
677   
678   tpar[0]=rB2+hB2-eB2;
679   tpar[1]=rB2+hB2;
680   tpar[2]=(lB2/2.-2.*eB2)/2.;
681   gMC->Gsvolu("YB22", "TUBE", idtmed[kSteel+40], tpar, 3);
682   dl2=tpar[2];
683
684   tpar[0]=rB2-eB2;
685   tpar[1]=rB2;
686   tpar[2]=lB2/8.;
687   gMC->Gsvolu("YB23", "TUBE", idtmed[kSteel+40], tpar, 3);
688   dl3=tpar[2];
689
690
691   tpar[0]=0;
692   tpar[1]=rB2+hB2;
693   tpar[2]=lB2/2.;
694   gMC->Gsvolu("YBU2", "TUBE", idtmed[kVacuum+40], tpar, 3);
695
696   dz=-tpar[2]+dl3;
697   gMC->Gspos("YB23", 1, "YBU2", 0., 0., dz, 0, "ONLY"); 
698   dz+=dl3;
699   dz+=dl1;  
700   gMC->Gspos("YB21", 1, "YBU2", 0., 0., dz, 0, "ONLY"); 
701   dz+=dl1;  
702   dz+=dl2;  
703   gMC->Gspos("YB22", 1, "YBU2", 0., 0., dz, 0, "ONLY"); 
704   dz+=dl2;  
705   dz+=dl1;
706   gMC->Gspos("YB21", 2, "YBU2", 0., 0., dz, 0, "ONLY"); 
707   dz+=dl1;
708   dz+=dl3;
709   gMC->Gspos("YB23", 2, "YBU2", 0., 0., dz, 0, "ONLY"); 
710   
711
712   tpar[0]=0;
713   tpar[1]=rB2+hB2;
714   tpar[2]=7.*lB2/2.;
715   gMC->Gsvolu("YBM2", "TUBE", idtmed[kVacuum+40], tpar, 3);
716   dz=-tpar[2]+lB2/2.;
717   { // Begin local scope for i
718       for (Int_t i=0; i<7; i++) {
719           gMC->Gspos("YBU2", i+1 , "YBM2", 0., 0.,dz , 0, "ONLY"); 
720           dz+=lB2;
721       }
722   } // End local scope for i
723   dz=-dl+dr21+tpar[2];
724   gMC->Gspos("YBM2", 1, "YMO3", 0., 0., dz, 0, "ONLY"); 
725
726   dz=dl-dr23-tpar[2];
727   gMC->Gspos("YBM2", 2, "YMO3", 0., 0., dz, 0, "ONLY"); 
728
729 //
730 // Flange
731
732   tpar[0]=0;
733   tpar[1]=rF2;
734   tpar[2]=dF2/2.;
735   gMC->Gsvolu("YFM2", "TUBE", idtmed[kVacuum+40], tpar, 3);
736
737   tpar[0]=rF2-dFlange;
738   tpar[1]=rF2;
739   tpar[2]=dF2/2.;
740   gMC->Gsvolu("YF21", "TUBE", idtmed[kSteel+40], tpar, 3);
741   gMC->Gspos("YF21", 1, "YFM2", 0., 0., 0., 0, "ONLY"); 
742
743   tpar[0]=rB2;
744   tpar[1]=rF2-dFlange;
745   tpar[2]=dFlange/2.;
746   gMC->Gsvolu("YF22", "TUBE", idtmed[kSteel+40], tpar, 3);
747   dz=-dF2/2.+tpar[2];
748   gMC->Gspos("YF22", 1, "YFM2", 0., 0., dz, 0, "ONLY"); 
749   dz= dF2/2.-tpar[2];
750   gMC->Gspos("YF22", 2, "YFM2", 0., 0., dz, 0, "ONLY"); 
751
752   dz=dr21/2.-dr23/2.;
753   gMC->Gspos("YFM2", 2, "YMO3", 0., 0., dz, 0, "ONLY"); 
754
755
756 //
757 // pipe between flange and bellows
758   tpar[0]=rB2-dTubeS;
759   tpar[1]=rB2;
760   tpar[2]=2.*(dB2+dr22-7.*lB2)/4.;
761   gMC->Gsvolu("YPF2", "TUBE", idtmed[kSteel+40], tpar, 3);
762   dz=dr21/2.-dr23/2.-dF2/2.-tpar[2];
763   gMC->Gspos("YPF2", 1, "YMO3", 0., 0., dz, 0, "ONLY"); 
764   dz=dr21/2.-dr23/2.+dF2/2.+tpar[2];
765   gMC->Gspos("YPF2", 2, "YMO3", 0., 0., dz, 0, "ONLY"); 
766
767 //
768 // 4th section: rear shield and closing cone
769 //
770   par4[0]  = 0.;
771   par4[1]  = 360.;
772   par4[2]  = 6.;
773   dl=(zvac12-zvac9)/2.;
774   
775   par4[3]  = -dl;
776   par4[4]  = r3;
777   par4[5]  = 30.;
778
779   par4[6]  = -dl+(zvac10-zvac9);
780   par4[7]  = r3+(zvac10-zvac9) * TMath::Tan(thetaOpen3);
781   par4[8]  = 30.;
782
783   par4[9]  = par4[6];
784   par4[10] = par4[7];
785   par4[11] = R42;
786
787   par4[12] = -dl+(zvac11-zvac9);
788   par4[13] = r3+(zvac11-zvac9) * TMath::Tan(thetaOpen3);
789   par4[14] = R42;
790
791   par4[15] = par4[12];
792   par4[16] = par4[13];
793   par4[17] = R43;
794
795   par4[18] = -dl+(zvac12-zvac9);
796   par4[19] = rAbs;
797   par4[20] = R43;
798
799   gMC->Gsvolu("YGO4", "PCON", idtmed[iHeavy+40], par4, 21);
800
801   parPb[0]  = (zvac10-zvac9)/2.;
802   parPb[1]  = parPb[3];
803   parPb[2]  = 30;
804   parPb[3]  = parPb[1]+2.*parPb[0]*TMath::Tan(thetaOpenPb);
805   parPb[4]  = 30;
806   gMC->Gsvolu("YXO4", "CONE", idtmed[kPb], parPb, 5);
807   gMC->Gspos("YXO4", 1, "YGO4", 0., 0., -dl+parPb[0], 0, "ONLY");  
808
809   parPb[0]  = (zvac12-zvac10)/2.;
810   parPb[1]  = parPb[3];
811   parPb[2]  = 31.;
812   parPb[3]  = parPb[1]+2.*parPb[0]*TMath::Tan(thetaOpenPb);
813   parPb[4]  = 31.;
814   gMC->Gsvolu("YXO5", "CONE", idtmed[kPb], parPb, 5);
815   gMC->Gspos("YXO5", 1, "YGO4", 0., 0., -dl+(zvac10-zvac9)+parPb[0], 0, "ONLY");  
816   { // Begin local scope for i
817       for (Int_t i=4; i<20; i+=3) par4[i]  = 0;
818   } // End local scope for i
819
820   gMC->Gsvolu("YMO4", "PCON", idtmed[kVacuum+40], par4, 21);
821   gMC->Gspos("YGO4", 1, "YMO4", 0., 0., 0., 0, "ONLY");  
822
823
824
825   dZ+=dl;
826   gMC->Gspos("YMO4", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
827   dZ+=dl;
828 //
829 // Closing concrete cone 
830 //
831   cpar[0]=(zvac12-zvac11)/2.;
832   cpar[1] = r3+(zvac11-zvac9) * TMath::Tan(thetaOpen3);
833   cpar[2] = cpar[1]+0.001;
834   cpar[3] = rAbs;
835   cpar[4] = cpar[2];
836   gMC->Gsvolu("YCC4", "CONE", idtmed[kConcrete+40], cpar, 5);
837   dz=dl-cpar[0];
838   gMC->Gspos("YCC4", 1, "YGO4", 0., 0., dz, 0, "ONLY");  
839 //
840 // Steel envelope
841 //
842   dz=-dl;
843   tpar[0]=26.;
844   tpar[1]=30.;
845   tpar[2]=(zvac10-zvac9)/2.;
846   gMC->Gsvolu("YS41", "TUBE", idtmed[kSteel], tpar, 3);
847   dz+=tpar[2];
848   gMC->Gspos("YS41", 1, "YXO4", 0., 0., 0., 0, "ONLY");  
849   dz+=tpar[2];
850 /*
851   tpar[0]=30.;
852   tpar[1]=R41;
853   tpar[2]=2.;
854   gMC->Gsvolu("YS42", "TUBE", idtmed[kSteel], tpar, 3);
855   dz+=tpar[2];
856   gMC->Gspos("YS42", 1, "YGO4", 0., 0., dz, 0, "ONLY");  
857   dz+=tpar[2];
858 */
859   tpar[0]=R41-dRSteel2;
860   tpar[1]=R41;
861   tpar[2]=(zvac11-zvac10)/2.;
862   gMC->Gsvolu("YS43", "TUBE", idtmed[kSteel], tpar, 3);
863   dz+=tpar[2];
864   gMC->Gspos("YS43", 1, "YGO4", 0., 0., dz, 0, "ONLY");  
865 //
866 // rear lead shield
867 //
868   tpar[0]=R41;
869   tpar[1]=R42;
870   tpar[2]=(zvac11-zvac10)/2.;
871   gMC->Gsvolu("YPBI", "TUBE", idtmed[kPb+40], tpar, 3);
872   dz-=0;
873   gMC->Gspos("YPBI", 1, "YGO4", 0., 0., dz, 0, "ONLY"); 
874
875   tpar[0]=R42-5;
876   tpar[1]=R42;
877   tpar[2]=(zvac11-zvac10)/2.;
878   gMC->Gsvolu("YPBO", "TUBE", idtmed[kPb], tpar, 3);
879   gMC->Gspos("YPBO", 1, "YPBI", 0., 0., 0., 0, "ONLY"); 
880   
881 //
882 // rear Fe shield
883 //
884
885   tpar[0]=31.;
886   tpar[1]=R43;
887   tpar[2]=(zvac12-zvac11)/2.;
888   gMC->Gsvolu("YFEI", "TUBE", idtmed[kFe+40], tpar, 3);
889   dz=dl-tpar[2];
890   gMC->Gspos("YFEI", 1, "YGO4", 0., 0., dz, 0, "ONLY"); 
891
892   tpar[0]=31.;
893   tpar[1]=R43;
894   tpar[2]=2.5;
895   gMC->Gsvolu("YFEO", "TUBE", idtmed[kFe], tpar, 3);
896   dz=-(zvac12-zvac11)/2.+tpar[2];
897   gMC->Gspos("YFEO", 1, "YFEI", 0., 0., dz, 0, "ONLY"); 
898 //
899 // Magnet element 
900 //
901   tpar[0]=0.;
902   tpar[1]=R43;
903   tpar[2]=50.;
904   gMC->Gsvolu("YAEM", "TUBE", idtmed[kAir], tpar, 3);
905   tpar[0]=rAbs;
906   tpar[1]=R43;
907   tpar[2]=50.;
908   gMC->Gsvolu("YFEM", "TUBE", idtmed[kFe], tpar, 3);
909   gMC->Gspos("YFEM", 1, "YAEM", 0., 0., 0., 0, "ONLY"); 
910
911 //
912
913   dz=zvac12+50.;
914   gMC->Gspos("YAEM", 1, "ALIC", 0., 0., dz, 0, "ONLY"); 
915
916
917 // 
918 //
919 // 4th section: vacuum system 
920 //
921 // up to closing cone
922   cpar0[0]=(zvac11-zvac9)/2;
923   cpar0[1]=r3-dVacuS;
924   cpar0[2]=r3;
925   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpen3);
926   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpen3);
927   gMC->Gsvolu("YV31", "CONE", idtmed[kSteel+40], cpar0, 5);
928 //
929 // insulation
930   cpar[0]=cpar0[0];
931   cpar[1]=cpar0[1]+dTubeS;
932   cpar[2]=cpar0[1]+dTubeS+dInsuS;
933   cpar[3]=cpar0[3]+dTubeS;
934   cpar[4]=cpar0[3]+dTubeS+dInsuS;
935   gMC->Gsvolu("YI31", "CONE", idtmed[kInsulation+40], cpar, 5);
936   gMC->Gspos("YI31", 1, "YV31", 0., 0., 0., 0, "ONLY"); 
937 //
938 // clearance
939   cpar[1]=cpar0[2]-dProtS-dFreeS;
940   cpar[2]=cpar0[2]-dProtS;
941   cpar[3]=cpar0[4]-dProtS-dFreeS;
942   cpar[4]=cpar0[4]-dProtS;
943   gMC->Gsvolu("YP31", "CONE", idtmed[kVacuum+40], cpar, 5);
944   gMC->Gspos("YP31", 1, "YV31", 0., 0., 0., 0, "ONLY"); 
945   
946   dz=-dl+cpar[0];
947   gMC->Gspos("YV31", 1, "YMO4", 0., 0., dz, 0, "ONLY"); 
948 //
949 // closing cone
950   cpar0[0]=(zvac12-zvac11)/2;
951   cpar0[1]=r3-dVacuS+(zvac11-zvac9)*TMath::Tan(thetaOpen3);
952   cpar0[2]=r3       +(zvac11-zvac9)*TMath::Tan(thetaOpen3);
953   cpar0[3]=rVacu;
954   cpar0[4]=rAbs;
955   gMC->Gsvolu("YV32", "CONE", idtmed[kSteel+40], cpar0, 5);
956 //
957 // insulation
958   cpar[0]=cpar0[0];
959   cpar[1]=cpar0[1]+dTubeS;
960   cpar[2]=cpar0[1]+dTubeS+dInsuS;
961   cpar[3]=cpar0[3]+dTubeS;
962   cpar[4]=cpar0[3]+dTubeS+dInsuS;
963   gMC->Gsvolu("YI32", "CONE", idtmed[kInsulation+40], cpar, 5);
964   gMC->Gspos("YI32", 1, "YV32", 0., 0., 0., 0, "ONLY"); 
965 //
966 // clearance
967   cpar[1]=cpar0[2]-dProtS-dFreeS;
968   cpar[2]=cpar0[2]-dProtS;
969   cpar[3]=cpar0[4]-dProtS-dFreeS;
970   cpar[4]=cpar0[4]-dProtS;
971   gMC->Gsvolu("YP32", "CONE", idtmed[kVacuum+40], cpar, 5);
972   gMC->Gspos("YP32", 1, "YV32", 0., 0., 0., 0, "ONLY"); 
973   
974   dz=dl-cpar[0];
975   gMC->Gspos("YV32", 1, "YMO4", 0., 0., dz, 0, "ONLY"); 
976 //
977 //
978 // MUON trigger wall
979 //  
980   tpar[0] = 50.;
981   tpar[1] = 310.;
982   tpar[2] = (zFilterOut - zFilterIn) / 2.;
983   gMC->Gsvolu("YFIM", "TUBE", idtmed[kFe+40], tpar, 3);
984   dz = (zFilterIn + zFilterOut) / 2.;
985   tpar[2] -= 10.;
986   gMC->Gsvolu("YFII","TUBE", idtmed[kFe], tpar, 3);
987   gMC->Gspos("YFII", 1, "YFIM", 0., 0., 0., 0, "ONLY");
988   gMC->Gspos("YFIM", 1, "ALIC", 0., 0., dz, 0, "ONLY");
989 //
990 // Shielding close to chamber
991 //
992   cpar[0]=(zch1-dzch-1.-zRear)/2.;
993   cpar[1]=R11;
994   cpar[2]=zRear*TMath::Tan(accMin);
995   cpar[3]=R11;
996   cpar[4]=(zRear+2.*cpar[0])*TMath::Tan(accMin);
997   gMC->Gsvolu("YCS1", "CONE", idtmed[kNiCuW], cpar, 5);
998   dz=zRear+cpar[0];
999   gMC->Gspos("YCS1", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1000
1001   cpar[0]=(zvac4-(zch1+dzch+1.))/2.;
1002   cpar[1]=R11;
1003   cpar[2]=(zvac4-2.*cpar[0])*TMath::Tan(accMin);
1004   cpar[3]=R11;
1005   cpar[4]=R21;
1006   gMC->Gsvolu("YCS2", "CONE", idtmed[kNiCuW], cpar, 5);
1007   dz=zvac4-cpar[0];
1008   gMC->Gspos("YCS2", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1009
1010   cpar[0]=(dzch-1.);
1011   cpar[1]=R11;
1012   cpar[2]=(zch1-dzch+1.)*TMath::Tan(accMin);
1013   cpar[3]=R11;
1014   cpar[4]=cpar[2]+2.*cpar[0]*TMath::Tan(accMin);
1015   gMC->Gsvolu("YCS3", "CONE", idtmed[kNiCuW], cpar, 5);
1016   dz=zch1;
1017   gMC->Gspos("YCS3", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1018
1019
1020   cpar[0]=(zch2-dzch-1.-zvac4)/2.;
1021   cpar[1]=R21;
1022   cpar[2]=zvac4*TMath::Tan(accMin);
1023   cpar[3]=R21;
1024   cpar[4]=(zvac4+2.*cpar[0])*TMath::Tan(accMin);
1025   gMC->Gsvolu("YCS4", "CONE", idtmed[kNiCuW], cpar, 5);
1026   dz=zvac4+cpar[0];
1027   gMC->Gspos("YCS4", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1028   
1029
1030   cpar[0]=(zvac6-(zch2+dzch+1.))/2.;
1031   cpar[1]=R21;
1032   cpar[2]=(zvac6-2.*cpar[0])*TMath::Tan(accMin);
1033   cpar[3]=R21;
1034   cpar[4]=zvac6*TMath::Tan(accMin);
1035   gMC->Gsvolu("YCS5", "CONE", idtmed[kNiCuW], cpar, 5);
1036   dz=zvac6-cpar[0];
1037   gMC->Gspos("YCS5", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1038
1039   cpar[0]=(dzch-1.);
1040   cpar[1]=R21;
1041   cpar[2]=(zch2-dzch+1.)*TMath::Tan(accMin);
1042   cpar[3]=R21;
1043   cpar[4]=cpar[2]+2.*cpar[0]*TMath::Tan(accMin);
1044   gMC->Gsvolu("YCS6", "CONE", idtmed[kNiCuW], cpar, 5);
1045   dz=zch2;
1046   gMC->Gspos("YCS6", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1047 //
1048 // Outer Pb Cone
1049   if (fPbCone) {
1050       cpar[0]=(zFilterIn-zConeE)/2.;
1051       cpar[1]=30.;
1052       cpar[2]=30.001;
1053       cpar[3]=30.;
1054       cpar[4]=30.+2.*cpar[0]*TMath::Tan(thetaOpenPbO);
1055       
1056       gMC->Gsvolu("YOPB", "CONE", idtmed[kPb], cpar, 5);
1057       dz=zConeE+cpar[0];
1058       gMC->Gspos("YOPB", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1059   }
1060 }
1061
1062 void AliSHILv0::Init()
1063 {
1064   //
1065   // Initialise the muon shield after it has been built
1066   //
1067   Int_t i;
1068   //
1069   printf("\n");
1070   for(i=0;i<35;i++) printf("*");
1071   printf(" SHILv0_INIT ");
1072   for(i=0;i<35;i++) printf("*");
1073   printf("\n");
1074   //
1075   // Here the SHIL initialisation code (if any!)
1076   for(i=0;i<80;i++) printf("*");
1077   printf("\n");
1078 }
1079
1080
1081
1082