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