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