d586c448737f3b566c159e648e2e58029887c29c
[u/mrichter/AliRoot.git] / STRUCT / AliSHILvF.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.3  2001/01/30 12:28:27  morsch
19 Recess station 1 changed do make space for chambers.
20
21 Revision 1.2  2000/12/04 16:30:02  morsch
22 Update to geometry defined for the Muon Spectrometer Addendum to the TDR.
23
24 */
25
26
27 #include "AliSHILvF.h"
28 #include "AliRun.h"
29 #include "AliMC.h"
30 #include "AliConst.h"
31 #include "AliALIFE.h"
32
33 ClassImp(AliSHILvF)
34  
35 //_____________________________________________________________________________
36 AliSHILvF::AliSHILvF()
37 {
38   //
39   // Default constructor for muon shield
40   //
41 }
42  
43 //_____________________________________________________________________________
44 AliSHILvF::AliSHILvF(const char *name, const char *title)
45   : AliSHIL(name,title)
46 {
47   //
48   // Standard constructor for muon shield
49   //
50   SetMarkerColor(7);
51   SetMarkerStyle(2);
52   SetMarkerSize(0.4);
53   // Pb  cone not yet compatible with muon chamber inner radii
54   // Switched off by default
55   fPbCone=kFALSE;
56 }
57  
58 //_____________________________________________________________________________
59 void AliSHILvF::CreateGeometry()
60 {
61   //
62   // Build muon shield geometry
63   //
64   //
65   //Begin_Html
66   /*
67     <img src="picts/AliSHILvF.gif">
68   */
69   //End_Html
70   //Begin_Html
71   /*
72     <img src="picts/AliSHILvFTree.gif">
73   */
74   //End_Html
75
76     Float_t cpar[5], cpar0[5], tpar[3], par1[39], par2[27], par3[27], 
77         par4[21], par0[45];
78     Float_t dz, dZ;
79   
80     Int_t *idtmed = fIdtmed->GetArray()-1699;
81
82 #include "ABSOSHILConst.h"
83 #include "SHILConst.h"
84
85 enum {kC=1705, kAl=1708, kFe=1709, kCu=1710, kW=1711, kPb=1712,
86                 kNiCuW=1720, kVacuum=1714, kAir=1714, kConcrete=1716,
87                 kPolyCH2=1717, kSteel=1709, kInsulation=1713};  
88 //
89 // Material of the rear part of the shield
90   Int_t iHeavy=kNiCuW;
91   if (fPbCone) iHeavy=kPb;
92 //
93 //
94 // begin Fluka
95   AliALIFE* flukaGeom = new AliALIFE("beamshield.alife", "beamshield_vol.inp");
96   Int_t i=0,ifl=0;
97   Float_t posfluka[3]={0., 0., 0.};
98   Float_t zfluka[12], rfluka1[12], rfluka2[12], rfluka3[12] ;  
99 //
100 // end Fluka  
101   
102   
103 //
104 // Mother volume
105 //
106   Float_t dRear1=dRear;
107   
108   Float_t zstart=zRear-dRear1;
109   
110   par0[0]  = 0.;
111   par0[1]  = 360.;
112   par0[2]  = 13.;
113
114   Float_t dl=(zvac12-zstart)/2.;
115   dz=zstart+dl;
116 //
117   par0[3]  = -dl;
118   par0[4]  = 0.;
119   par0[5]  = zstart * TMath::Tan(accMin);
120
121   par0[6]  = -dl+dRear1;
122   par0[7]  = 0.;
123   par0[8]  = zRear * TMath::Tan(accMin);
124
125   par0[9]  = -dl+dRear1;
126   par0[10]  = 0.;
127   par0[11]  = R11;
128
129   par0[12]  = -dz+zvac4;
130   par0[13]  = 0.;
131   par0[14]  = R11;
132
133   par0[15]  = -dz+zvac4;
134   par0[16] = 0.;
135   par0[17] = R21;
136
137   par0[18] = -dz+zvac6;
138   par0[19] = 0.;
139   par0[20] = R21;
140
141   par0[21] = -dz+zvac6;
142   par0[22] = 0.;
143   par0[23] = zvac6 * TMath::Tan(accMin);
144
145   par0[24] = -dz+zConeE;
146   par0[25] = 0.;
147   par0[26] = 30.;
148
149   par0[27] = -dz+zvac10;
150   par0[28] = 0.;
151   par0[29] = 30.;
152
153   par0[30] = -dz+zvac10;
154   par0[31] = 0.;
155   par0[32] = R42;
156
157   par0[33] = -dz+zvac11;
158   par0[34] = 0.;
159   par0[35] = R42;
160
161   par0[36] = -dz+zvac11;
162   par0[37] = 0.;
163   par0[38] = R43;
164
165   par0[39] = -dz+zvac12;
166   par0[40] = 0.;
167   par0[41] = R43;
168
169   gMC->Gsvolu("YMOT", "PCON", idtmed[kVacuum], par0, 42);
170   dz=zstart+dl;
171   gMC->Gspos("YMOT", 1, "ALIC", 0., 0., dz, 0, "ONLY");  
172 //
173
174   dZ=-dl;
175
176 //
177 // First section: bellows below and behind front absorber 
178 // 
179 //
180   par1[0]  = 0.;
181   par1[1]  = 360.;
182   par1[2]  = 12.;
183   dl=(zvac4-zstart)/2.;
184   
185   par1[3]  = -dl;
186   par1[4]  = rAbs+(zstart-zOpen) * TMath::Tan(thetaOpen1);
187   par1[5]  = zstart * TMath::Tan(accMin);
188
189   par1[6]  = -dl+zvac1-zstart;
190   par1[7]  = rAbs+ (zvac1-zOpen) * TMath::Tan(thetaOpen1);
191   par1[8]  = zvac1 * TMath::Tan(accMin);
192
193   par1[9]  = par1[6]+dr11;
194   par1[10] = par1[7]+dr11;
195   par1[11] = (zvac1+dr11) * TMath::Tan(accMin);
196
197   par1[12] = -dl+dRear1;
198   par1[13] = par1[10];
199   par1[14] = zRear * TMath::Tan(accMin);
200
201   par1[15] = -dl+dRear1;
202   par1[16] = par1[10];
203   par1[17] = R11;
204
205   par1[18] = -dl+(zvac1+dr11+dB1-zstart);
206   par1[19] = par1[16];
207   par1[20] = R11;
208
209   par1[21] = par1[18]+dr12;
210   par1[22] = par1[19]+dr12;
211   par1[23] = R11;
212
213   par1[24] = par1[21]+dF1;
214   par1[25] = par1[22];
215   par1[26] = R11;
216
217   par1[27] = par1[24]+dr12;
218   par1[28] = par1[25]-dr12;
219   par1[29] = R11;
220
221   par1[30] = par1[27]+dB1;
222   par1[31] = par1[28];
223   par1[32] = R11;
224
225   par1[33] = par1[30]+dr13;
226   par1[34] = par1[31];
227   par1[35] = R11;
228
229   par1[36] = -dl+zvac4-zstart;
230   par1[37] = par1[34];
231   par1[38] = R11;
232
233   Float_t r2  = par1[34];
234   Float_t rBox= par1[31]-0.1;
235   Float_t rc1 = par1[7];
236
237   gMC->Gsvolu("YGO1", "PCON", idtmed[kNiCuW], par1, 39);
238
239 //
240 // begin Fluka
241   for (ifl=0; ifl<12; ifl++) {
242       zfluka[ifl]=par1[3+3*ifl]+dl+zRear-dRear;
243       rfluka1[ifl] = par1[4+3*ifl];
244       rfluka2[ifl] = par1[5+3*ifl]; 
245       if (ifl > 3)  rfluka2[ifl]=rfluka2[ifl]-dRSteel1;
246   }
247
248   
249   Float_t rfluka0[8]={rBox,rBox,rBox,rBox,rBox,rBox,rBox,rBox};
250   
251   flukaGeom->Comment("1st part: Shield");
252 // Use default for first three cones
253   flukaGeom->SetDefaultVolume("*ACR02");
254   rfluka2[0]=rfluka2[1]=rfluka2[2]=-1;
255 //
256   flukaGeom->Comment("Shield");         
257   flukaGeom->PolyCone(rfluka1,    rfluka2,   zfluka,   12, posfluka, "NIW", "MF", "$SHS");
258   flukaGeom->Comment("Vacuum");
259   flukaGeom->PolyCone(rfluka0,  rfluka1+2, zfluka+2,   8, posfluka, "VACUUM", "MF", "$SHS");
260 //
261 // end Fluka
262
263
264   for (i=4; i<38; i+=3) par1[i]  = 0;
265
266   gMC->Gsvolu("YMO1", "PCON", idtmed[kVacuum+40], par1, 39);
267   gMC->Gspos("YGO1", 1, "YMO1", 0., 0., 0., 0, "ONLY");  
268   dZ+=dl;
269   gMC->Gspos("YMO1", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
270   dZ+=dl;
271
272 //
273 // Steel envelope
274   tpar[0]=R11-dRSteel1;
275   tpar[1]=R11;
276   tpar[2]=dl-dRear1/2;
277   gMC->Gsvolu("YSE1", "TUBE", idtmed[kNiCuW], tpar, 3);
278   dz=dl-tpar[2];
279   gMC->Gspos("YSE1", 1, "YGO1", 0., 0., dz, 0, "ONLY");
280
281 // begin Fluka
282   flukaGeom->Comment("1st part: Steel Envelope");
283   flukaGeom->Cylinder(tpar[0], tpar[1], zRear, zvac4, posfluka, "NIW", "MF", "$SHS");
284 //
285 // end Fluka
286
287 //
288 // 1st section: vacuum system
289 //
290 //
291 // Bellow 1
292 //
293   tpar[0]=rB1;
294   tpar[1]=rB1+hB1;
295   tpar[2]=eB1/2.;
296   gMC->Gsvolu("YB11", "TUBE", idtmed[kSteel+40], tpar, 3);
297   Float_t dl1=tpar[2];
298   
299   tpar[0]=rB1+hB1-eB1;
300   tpar[1]=rB1+hB1;
301   tpar[2]=(lB1/2.-2.*eB1)/2.;
302   gMC->Gsvolu("YB12", "TUBE", idtmed[kSteel+40], tpar, 3);
303   Float_t dl2=tpar[2];
304
305   tpar[0]=rB1-eB1;
306   tpar[1]=rB1;
307   tpar[2]=lB1/8.;
308   gMC->Gsvolu("YB13", "TUBE", idtmed[kSteel+40], tpar, 3);
309   Float_t dl3=tpar[2];
310
311
312   tpar[0]=0;
313   tpar[1]=rB1+hB1;
314   tpar[2]=lB1/2.;
315   gMC->Gsvolu("YBU1", "TUBE", idtmed[kVacuum+40], tpar, 3);
316
317   dz=-tpar[2]+dl3;
318   gMC->Gspos("YB13", 1, "YBU1", 0., 0., dz, 0, "ONLY"); 
319   dz+=dl3;
320   dz+=dl1;  
321   gMC->Gspos("YB11", 1, "YBU1", 0., 0., dz, 0, "ONLY"); 
322   dz+=dl1;  
323   dz+=dl2;  
324   gMC->Gspos("YB12", 1, "YBU1", 0., 0., dz, 0, "ONLY"); 
325   dz+=dl2;  
326   dz+=dl1;
327   gMC->Gspos("YB11", 2, "YBU1", 0., 0., dz, 0, "ONLY"); 
328   dz+=dl1;
329   dz+=dl3;
330   gMC->Gspos("YB13", 2, "YBU1", 0., 0., dz, 0, "ONLY"); 
331   
332
333   tpar[0]=0;
334   tpar[1]=rB1+hB1;
335   tpar[2]=10.*lB1/2.;
336   gMC->Gsvolu("YBM1", "TUBE", idtmed[kVacuum+40], tpar, 3);
337   dz=-tpar[2]+lB1/2.;
338
339   for (i=0; i<10; i++) {
340     gMC->Gspos("YBU1", i+1 , "YBM1", 0., 0., dz, 0, "ONLY"); 
341     dz+=lB1;
342   }
343
344   dz=-dl+(zvac1-zstart)+dr11+tpar[2];
345   gMC->Gspos("YBM1", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
346
347   dz=dl-dr13-(zvac4-zvac3)-tpar[2];
348   gMC->Gspos("YBM1", 2, "YMO1", 0., 0., dz, 0, "ONLY"); 
349
350 //
351 // Flange
352
353   tpar[0]=0;
354   tpar[1]=rF1;
355   tpar[2]=dF1/2.;
356   gMC->Gsvolu("YFM1", "TUBE", idtmed[kVacuum+40], tpar, 3);
357
358   tpar[0]=rF1-2.;
359   tpar[1]=rF1;
360   tpar[2]=dF1/2.;
361   gMC->Gsvolu("YF11", "TUBE", idtmed[kSteel+40], tpar, 3);
362   gMC->Gspos("YF11", 1, "YFM1", 0., 0., 0., 0, "ONLY"); 
363
364   tpar[0]=rB1;
365   tpar[1]=rF1-2.;
366   tpar[2]=dFlange/2.;
367   gMC->Gsvolu("YF12", "TUBE", idtmed[kSteel+40], tpar, 3);
368   dz=-dF1/2.+tpar[2];
369   gMC->Gspos("YF12", 1, "YFM1", 0., 0., dz, 0, "ONLY"); 
370   dz= dF1/2.-tpar[2];
371   gMC->Gspos("YF12", 2, "YFM1", 0., 0., dz, 0, "ONLY"); 
372
373   dz=-dl+(zvac2-zstart);
374   gMC->Gspos("YFM1", 2, "YMO1", 0., 0., dz, 0, "ONLY"); 
375
376 //
377 // pipe between flange and bellows
378   tpar[0]=rB1-dTubeS;
379   tpar[1]=rB1;
380   tpar[2]=2.*(dB1+dr12-10.*lB1)/4.;
381   gMC->Gsvolu("YPF1", "TUBE", idtmed[kSteel+40], tpar, 3);
382  
383   dz=-dl+(zvac2-zstart)-dF1/2.-tpar[2];
384   gMC->Gspos("YPF1", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
385   dz=-dl+(zvac2-zstart)+dF1/2.+tpar[2];
386   gMC->Gspos("YPF1", 2, "YMO1", 0., 0., dz, 0, "ONLY"); 
387
388 //
389 // begin Fluka
390   flukaGeom->Comment("First Bellow");
391   Float_t z1=zvac1+dr11;
392   Float_t z2;
393   
394   for (i=0; i<10; i++) {
395       z2=z1+eB1;
396       flukaGeom->Cylinder(0., rB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
397       flukaGeom->Cylinder(rB1, rB1+hB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
398       
399       z1=z2;
400       z2+=lB1/2.-eB1;
401       flukaGeom->Cylinder(0., rB1+hB1-eB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
402       flukaGeom->Cylinder(rB1+hB1-eB1, rB1+hB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
403       z1=z2;
404       z2=z1+eB1;
405       flukaGeom->Cylinder(0., rB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
406       flukaGeom->Cylinder(rB1, rB1+hB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
407       z1=z2;
408       z2+=lB1/2.-eB1;
409       flukaGeom->Cylinder(0., rB1, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
410       flukaGeom->Cylinder(rB1, rB1+eB1, z1, z2, posfluka, "STEEL", "MF", "$SHH");
411       flukaGeom->Cylinder(rB1+eB1, rB1+hB1, z1, z2, posfluka, "AIR", "MF", "$SHH");
412       z1=z2;
413    }
414   flukaGeom->Cylinder(rB1+hB1, rB1+hB1+0.5, zvac1+dr11, z1, posfluka, "AIR", "MF", "$SHH");
415   flukaGeom->Cylinder(rB1+hB1+0.5, rBox, zvac1+dr11, z1, posfluka, "AIR", "MF", "$SHH");
416   Float_t zcy1=z1;
417   
418
419   flukaGeom->Comment("Second Bellow");
420   z1=zvac3-dr13;
421   for (i=0; i<10; i++) {
422       z2=z1-eB1;
423       flukaGeom->Cylinder(0., rB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
424       flukaGeom->Cylinder(rB1, rB1+hB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
425       z1=z2;
426       z2-=lB1/2.-eB1;
427       flukaGeom->Cylinder(0., rB1+hB1-eB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
428       flukaGeom->Cylinder(rB1+hB1-eB1, rB1+hB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
429       z1=z2;
430       z2=z1-eB1;
431       flukaGeom->Cylinder(0., rB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
432       flukaGeom->Cylinder(rB1, rB1+hB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
433       z1=z2;
434       z2-=lB1/2.-eB1;
435       flukaGeom->Cylinder(0., rB1, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
436       flukaGeom->Cylinder(rB1, rB1+eB1, z2, z1, posfluka, "STEEL", "MF", "$SHH");
437       flukaGeom->Cylinder(rB1+eB1, rB1+hB1, z2, z1, posfluka, "AIR", "MF", "$SHH");
438       z1=z2;
439    }
440   flukaGeom->Cylinder(rB1+hB1, rB1+hB1+0.5, z1, zvac3-dr13, posfluka, "AIR", "MF", "$SHH");
441   flukaGeom->Cylinder(rB1+hB1+0.5, rBox,    z1, zvac3-dr13, posfluka, "AIR", "MF", "$SHH");
442
443   Float_t zcy2=z1;
444   flukaGeom->Comment("Flange");
445   Float_t zfl=(zcy1+zcy2)/2.;
446
447   z1=zfl-dF1/2.;
448   z2=zfl+dF1/2.;  
449   flukaGeom->Cylinder(0.,rF1-2.        , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
450   flukaGeom->Cylinder(rF1-2., rF1      , z1, z2, posfluka, "STEEL", "MF", "$SHH");
451   flukaGeom->Cylinder(rF1, rF1+0.05     , z1, z2, posfluka, "AIR", "MF", "$SHH");
452   flukaGeom->Cylinder(rF1+0.05, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
453   z2=z1;
454   z1=z2-dFlange;
455   flukaGeom->Cylinder(0.,rB1           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
456   flukaGeom->Cylinder(rB1, rF1         , z1, z2, posfluka, "STEEL", "MF", "$SHH");
457   flukaGeom->Cylinder(rF1, rF1+0.5     , z1, z2, posfluka, "AIR", "MF", "$SHH");
458   flukaGeom->Cylinder(rF1+0.5, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
459   z2=z1;
460   z1=zcy1;
461   flukaGeom->Cylinder(0.,rB1           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
462   flukaGeom->Cylinder(rB1, rB1+0.1     , z1, z2, posfluka, "STEEL", "MF", "$SHH");
463   flukaGeom->Cylinder(rB1+0.1, rB1+0.6 , z1, z2, posfluka, "AIR", "MF", "$SHH");
464   flukaGeom->Cylinder(rB1+0.6, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
465
466   z1=zfl+dF1/2.;
467   z2=z1+dFlange;
468   flukaGeom->Cylinder(0.,rB1           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
469   flukaGeom->Cylinder(rB1, rF1         , z1, z2, posfluka, "STEEL", "MF", "$SHH");
470   flukaGeom->Cylinder(rF1, rF1+0.5     , z1, z2, posfluka, "AIR", "MF", "$SHH");
471   flukaGeom->Cylinder(rF1+0.5, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
472   z1=z2;
473   z2=zcy2;
474   flukaGeom->Cylinder(0.,rB1           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
475   flukaGeom->Cylinder(rB1, rB1+0.1     , z1, z2, posfluka, "STEEL", "MF", "$SHH");
476   flukaGeom->Cylinder(rB1+0.1, rB1+0.6 , z1, z2, posfluka, "AIR", "MF", "$SHH");
477   flukaGeom->Cylinder(rB1+0.6, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
478 // end Fluka
479 //
480
481 // pipe and heating jackets outside bellows
482 //
483 // left side
484   cpar0[0]=(zvac1-zstart)/2;
485   cpar0[1]=rVacu+(zstart-zOpen)*TMath::Tan(thetaOpen1)-0.05;
486   cpar0[2]=rAbs +(zstart-zOpen)*TMath::Tan(thetaOpen1);
487   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpen1);
488   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpen1);
489   gMC->Gsvolu("YV11", "CONE", idtmed[kSteel+40], cpar0, 5);
490 //
491 // insulation
492   dTubeS=0.15;
493   cpar[0]=cpar0[0];
494   cpar[1]=cpar0[1]+0.15;
495   cpar[2]=cpar0[1]+0.65;
496   cpar[3]=cpar0[3]+0.15;
497   cpar[4]=cpar0[3]+0.65;
498   gMC->Gsvolu("YI11", "CONE", idtmed[kInsulation+40], cpar, 5);
499   gMC->Gspos("YI11", 1, "YV11", 0., 0., 0., 0, "ONLY"); 
500 //
501 // clearance
502   cpar[1]=cpar0[1]+0.75;
503   cpar[2]=cpar0[1]+1.25;
504   cpar[3]=cpar0[3]+0.75;
505   cpar[4]=cpar0[3]+1.25;
506   gMC->Gsvolu("YP11", "CONE", idtmed[kVacuum+40], cpar, 5);
507   gMC->Gspos("YP11", 1, "YV11", 0., 0., 0., 0, "ONLY"); 
508   
509   dz=-dl+cpar0[0];
510   gMC->Gspos("YV11", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
511
512 // begin Fluka
513 //
514   Float_t rf1[10], rf2[10];
515   rf1[0]=0.; rf2[0]=0.;
516   rf1[1] = cpar0[1];
517   rf2[1] = cpar0[3];
518
519
520   rf1[2]=rf1[1]+0.15; rf1[3]=rf1[2]+0.5; rf1[4]=rf1[3]+0.1;
521   rf1[5]=rf1[4]+0.5; 
522   rf2[2]=rf2[1]+0.15; rf2[3]=rf2[2]+0.5; rf2[4]=rf2[3]+0.1; 
523   rf2[5]=rf2[4]+0.5;
524   
525   char* materialsA[7] 
526       = {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR", "AIR"};
527   char* fieldsA[7] 
528       = {"MF", "MF", "MF", "MF", "MF", "MF"};
529   char* cutsA[7] 
530       = {"$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH"};
531
532   flukaGeom->Comment("1st part: Beam pipe lateral struture (left)");
533   flukaGeom->OnionCone(rf1, rf2,  6 , zstart, zvac1, posfluka, materialsA, fieldsA, cutsA);
534   for (i=0; i<7; i++) rf1[i]=rf2[i];
535   for (i=1; i<7; i++) rf2[i]=rf1[i]+dr11*TMath::Tan(thetaOpen1);
536   flukaGeom->OnionCone(rf1, rf2,  6 , zvac1, zvac1+dr11, posfluka, materialsA, fieldsA, cutsA);
537   flukaGeom->Cone(rc1, rf2[5], rc1, rc1+dr11, zvac1 , zvac1+dr11, posfluka,"AIR", "MF", "$SHH");
538 //
539 // end Fluka
540
541
542 // right side
543   dTubeS=0.35;
544   dVacuS+=0.25;
545   
546   cpar0[0]=(zvac4-zvac3)/2;
547   cpar0[1]=rB1;
548   cpar0[2]=cpar0[1]+dVacuS;
549
550   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
551   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
552   gMC->Gsvolu("YV12", "CONE", idtmed[kSteel], cpar0, 5);
553   Float_t r2V=cpar0[3];
554 //
555 // insulation
556   cpar[0]=cpar0[0];
557   cpar[1]=cpar0[1]+dTubeS;
558   cpar[2]=cpar0[1]+dTubeS+dInsuS;
559   cpar[3]=cpar0[3]+dTubeS;
560   cpar[4]=cpar0[3]+dTubeS+dInsuS;
561   gMC->Gsvolu("YI12", "CONE", idtmed[kInsulation], cpar, 5);
562   gMC->Gspos("YI12", 1, "YV12", 0., 0., 0., 0, "ONLY"); 
563
564 //
565 // clearance
566   cpar[1]=cpar0[1]+dTubeS+dInsuS+dEnveS;
567   cpar[2]=cpar0[1]+dTubeS+dInsuS+dEnveS+dFreeS;
568   cpar[3]=cpar0[3]+dTubeS+dInsuS+dEnveS;
569   cpar[4]=cpar0[3]+dTubeS+dInsuS+dEnveS+dFreeS;
570   gMC->Gsvolu("YP12", "CONE", idtmed[kAir], cpar, 5);
571   gMC->Gspos("YP12", 1, "YV12", 0., 0., 0., 0, "ONLY"); 
572   
573   dz=dl-cpar0[0];
574   gMC->Gspos("YV12", 1, "YMO1", 0., 0., dz, 0, "ONLY"); 
575
576 //
577 // begin Fluka
578   char* materialsB[8] 
579       = {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR", "STEEL", "AIR"};
580
581   char* fieldsB[8] 
582       = {"MF", "MF", "MF", "MF", "MF", "MF", "MF"};
583  
584  char* cutsB[8] 
585       = {"$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH", "$SHH"};
586
587   rf1[0]=rf2[0]=0.;
588   rf1[1]=cpar0[1]; 
589   rf2[1]=cpar0[3];
590
591   rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+dInsuS; rf1[4]=rf1[3]+dEnveS;
592   rf1[5]=rf1[4]+dFreeS; rf1[6]=rf1[5]+dProtS; rf1[7]=r2;
593   
594   rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+dInsuS; rf2[4]=rf2[3]+dEnveS; 
595   rf2[5]=rf2[4]+dFreeS; rf2[6]=rf2[5]+dProtS; 
596   rf2[7]=r2;
597   flukaGeom->Comment("1st part: Beam pipe lateral structure (right)");
598   flukaGeom->OnionCone(rf1, rf2,  8 , zvac3, zvac4, posfluka, materialsB, fieldsB, cutsB);
599   for (i=0; i<8; i++) rf2[i]=rf1[i];
600   for (i=1; i<7; i++) rf1[i]=rf2[i];
601   rf1[7]=rf2[7];
602   flukaGeom->OnionCone(rf1, rf2,  8 , zvac3-dr13, zvac3, posfluka, materialsB, fieldsB, cutsB);
603 //
604 // end Fluka
605
606 //
607 // Second Section
608 // Between first and second bellow section
609 //
610
611   par2[0]  = 0.;
612   par2[1]  = 360.;
613   par2[2]  = 7.;
614   dl=(zvac7-zvac4)/2.;
615 // recess station 2
616   par2[3]  = -dl;
617   par2[4]  = r2;
618   par2[5]  = R21;
619
620   par2[6]  = -dl+10.;
621   par2[7]  = r2;
622   par2[8]  = R21;
623
624   par2[9]   = -dl+(zvac6-zvac4);
625   par2[10]  = r2+(zvac6-zvac4-10.) * TMath::Tan(thetaOpen2);
626   par2[11]  = R21;
627
628   par2[12] = -dl+(zvac6-zvac4);
629   par2[13] = par2[10];
630   par2[14] = zvac6*TMath::Tan(accMin);
631
632 // Start of Pb section
633   par2[15] = -dl+(zPb-zvac4);
634   par2[16] = r2+(zPb-zvac4-10.) * TMath::Tan(thetaOpen2);
635   par2[17] = zPb*TMath::Tan(accMin);
636
637 //
638 // end of cone following 2 deg line
639   par2[18] = -dl+(zConeE-zvac4);
640   par2[19] = r2+(zConeE-zvac4-10.) * TMath::Tan(thetaOpen2);
641   par2[20] = 30.;
642
643   par2[21] = -dl+(zvac7-zvac4);
644   par2[22] = r2+(zvac7-zvac4-10.) * TMath::Tan(thetaOpen2);
645   par2[23] = 30.;
646
647
648   gMC->Gsvolu("YGO2", "PCON", idtmed[kNiCuW+40], par2, 24);
649
650 //
651 // begin Fluka
652   Float_t rfvacu0[8], rfvacu1[8], rfvacu2[8], rfvacu3[8], rfvacu4[8], rfvacu5[8];
653
654   for (ifl=0; ifl<7; ifl++) {
655       rfluka1[ifl] = par2[4+3*ifl];
656       rfluka2[ifl] = par2[5+3*ifl]-dRSteel2; 
657       rfluka3[ifl] = par2[5+3*ifl]; 
658       rfvacu5[ifl] = r2V;
659       rfvacu4[ifl]=rfvacu5[0]+dTubeS;      
660       rfvacu3[ifl]=rfvacu4[0]+dInsuS;      
661       rfvacu2[ifl]=rfvacu3[0]+dEnveS;
662       rfvacu1[ifl]=rfvacu2[0]+dFreeS;
663       rfvacu0[ifl]=rfvacu1[0]+dProtS;      
664   }
665
666   char* materials1[11] 
667       = {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR", "STEEL", "AIR", "NIW",
668          "NIW", "STEEL"};
669   char* fields1[11] 
670       = {"MF", "MF", "MF", "MF", "MF", "MF", "MF", "MF", "MF",  "MF", "MF"};
671   char* cuts1[11] 
672       = {"$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH", "$SHH","$SHH","$SHS", "$SHS"};
673
674
675   rf1[0]=0.; rf1[1]=rfvacu5[0]; rf1[2]=rfvacu4[0]; rf1[3]=rfvacu3[0];   
676   rf1[4]=rfvacu2[0]; rf1[5]=rfvacu1[0]; rf1[6]=rfvacu0[0];
677   rf1[7]=rfluka1[0]; rf1[9]=R11-dRSteel1;
678   rf1[10]=R21;
679   for (i=1; i<7; i++) rf2[i]=rf1[i]+4.*TMath::Tan(thetaOpenB);
680   rf2[7]=rf1[7];
681   rf2[9]=rf1[9]; rf2[10]=rf1[10];
682   rf1[8]=13.;
683   rf2[8]=rf1[8]+4.*TMath::Tan(thetaOpenPb);
684
685   flukaGeom->Comment("2nd part: Beam pipe lateral struture (0)");
686   flukaGeom->OnionCone(rf1, rf2,  11 , zvac4, zvac4+4, posfluka, materials1, fields1, cuts1);
687
688  
689   for (i=0; i<11; i++) rf1[i]=rf2[i];
690   for (i=1; i<7; i++) 
691       rf2[i]=rf1[i]+20.*TMath::Tan(thetaOpenB);
692   rf2[7]=rf1[7];
693   rf2[8]=rf1[8]+20.*TMath::Tan(thetaOpenPb);
694   rf1[9]=R21-dRSteel2;
695   rf1[10]=R21;  
696   rf2[9]=R21-dRSteel2;
697   rf2[10]=R21;  
698   flukaGeom->Comment("2nd part: Beam pipe lateral struture (1)");
699   flukaGeom->OnionCone(rf1, rf2,  11 , zvac4+4, zvac4+24, posfluka, materials1, fields1, cuts1);
700
701   for (i=0; i<11; i++) rf1[i]=rf2[i];
702   for (i=1; i<7; i++) 
703       rf2[i]=rf1[i]+(zvac6-zvac4-24.)*TMath::Tan(thetaOpenB);
704   rf2[7]=rf1[7]+(zvac6-zvac4-24.)*TMath::Tan(thetaOpen2);
705   rf2[8]=rf1[8]+(zvac6-zvac4-24.)*TMath::Tan(thetaOpenPb);
706   rf1[9]=R21-dRSteel2;
707   rf1[10]=R21;  
708   rf2[9]=R21-dRSteel2;
709   rf2[10]=R21;  
710   flukaGeom->Comment("2nd part: Beam pipe lateral struture (2)");
711   flukaGeom->OnionCone(rf1, rf2,  11 , zvac4+24, zvac6, posfluka, materials1, fields1, cuts1);
712
713   for (i=0; i<11; i++) rf1[i]=rf2[i];
714   for (i=1; i<7; i++) 
715       rf2[i]=rf1[i]+4.*TMath::Tan(thetaOpenB);
716   rf2[7]=rf1[7]+4.*TMath::Tan(thetaOpen2);
717
718   rf2[8]=rf1[8]+4.*TMath::Tan(thetaOpenPb);
719   rf1[9]=R21-dRSteel2;
720   rf2[9]=R21-dRSteel2;
721   rf1[10]=1;  
722   rf2[10]=-1;  
723   flukaGeom->Comment("2nd part: Beam pipe lateral struture (3)");
724   flukaGeom->OnionCone(rf1, rf2,  11 , zvac6, zvac6+4, posfluka, materials1, fields1, cuts1);
725
726
727   for (i=0; i<11; i++) rf1[i]=rf2[i];
728   for (i=1; i<7; i++) 
729       rf2[i]=rf1[i]+(zPb-(zvac6-4.))*TMath::Tan(thetaOpenB);
730   rf2[7]=rf1[7]+(zPb-(zvac6-4.))*TMath::Tan(thetaOpen2);
731
732   rf2[8]=rf1[8]+(zPb-(zvac6-4.))*TMath::Tan(thetaOpenPb);
733   rf1[9]=(zvac6+4)*TMath::Tan(accMin)-dRSteel2;
734   rf2[9]=zPb*TMath::Tan(accMin)-dRSteel2;
735   rf1[10]=1.;  
736   rf2[10]=-1.;  
737   flukaGeom->Comment("2nd part: Beam pipe lateral struture (4)");
738   flukaGeom->OnionCone(rf1, rf2,  11 , zvac6+4, zPb, posfluka, materials1, fields1, cuts1);
739
740   
741   for (i=0; i<11; i++) rf1[i]=rf2[i];
742   for (i=1; i<7; i++) 
743       rf2[i]=rf1[i]+(zConeE-zPb)*TMath::Tan(thetaOpenB);
744   rf2[7]=rf1[7]+(zConeE-zPb)*TMath::Tan(thetaOpen2);
745   rf1[8]=rf2[8]+2.;
746   rf2[8]=rf1[8]+(zConeE-zPb)*TMath::Tan(thetaOpenPb);
747   rf1[9]=zPb*TMath::Tan(accMin)-dRSteel2;
748   rf2[9]=30.-dRSteel2;
749   rf1[10]=1.;  
750   rf2[10]=-1.;  
751   flukaGeom->Comment("2nd part: Beam pipe lateral struture (5)");
752   if (fPbCone) materials1[7] = "LEAD";
753   materials1[8]="LEAD";
754   flukaGeom->OnionCone(rf1, rf2,  11 , zPb, zConeE, posfluka, materials1, fields1, cuts1);
755
756   for (i=0; i<11; i++) rf1[i]=rf2[i];
757   for (i=1; i<7; i++) 
758       rf2[i]=rf1[i]+(zvac7-zConeE)*TMath::Tan(thetaOpenB);
759   rf2[7]=rf1[7]+(zvac7-zConeE)*TMath::Tan(thetaOpen2);
760
761   rf1[8]=rf2[8];
762   rf2[8]=rf1[8]+(zvac7-zConeE)*TMath::Tan(thetaOpenPb);
763   rf1[9]=30.-dRSteel2;
764   rf2[9]=30.-dRSteel2;
765   rf1[10]=30.;  
766   rf2[10]=30.;  
767   flukaGeom->Comment("2nd part: Beam pipe lateral struture (6)");
768   flukaGeom->OnionCone(rf1, rf2,  10 , zConeE, zvac7, posfluka, materials1, fields1, cuts1);
769 // Steel envelope and recesses for station 3
770   flukaGeom->Comment("Steel envelope and recesses for station 3");
771   flukaGeom->Cylinder(rf1[9],rf1[10], zConeE, zch31, posfluka, materials1[9], fields1[9], cuts1[9]);
772   flukaGeom->Cylinder(rf1[9], rf1[10]-1, zch31, zch32, posfluka, materials1[9], fields1[9], cuts1[9]);
773   flukaGeom->Cylinder(rf1[10]-1, rf1[10], zch31, zch32, posfluka, "AIR", fields1[9], cuts1[9]);
774   flukaGeom->Cylinder(rf1[9], rf1[10], zch32,  zvac7, posfluka, materials1[9], fields1[9], cuts1[9]);
775
776   Float_t r3V = rf2[1];
777   
778 // end Fluka
779
780 //
781 // Lead cone option replacing Tungsten 
782 //
783   Float_t parPb[12];
784   parPb[0]  = 0.;
785   parPb[1]  = 360.;
786   parPb[2]  = 3.;
787   Float_t dlPb=(zvac7-zPb)/2.;
788   
789   parPb[3]  = -dlPb;
790   parPb[4]  = 17.657;
791   parPb[5]  = zPb*TMath::Tan(accMin);
792   
793   parPb[6]  = -dlPb+(zConeE-zPb);
794   parPb[7]  = parPb[4]+(zConeE-zPb)*TMath::Tan(thetaOpenPb);
795   parPb[8]  = 30.;
796   
797   parPb[9]   = dlPb;
798   parPb[10]  = parPb[7]+(zvac7-zConeE)*TMath::Tan(thetaOpenPb);
799   parPb[11]  = 30.;
800
801   Float_t rPbLast=parPb[10];
802
803
804   gMC->Gsvolu("YXO2", "PCON", idtmed[kPb], parPb, 12);    
805   gMC->Gspos("YXO2", 1, "YGO2", 0., 0., (zPb-zvac4)/2., 0, "ONLY");  
806   
807
808   parPb[4]  = r2+(zPb-zvac3) * TMath::Tan(thetaOpen2);
809   parPb[5]  = 17.657;
810   
811   parPb[7]  = r2+(zConeE-zvac3) * TMath::Tan(thetaOpen2);
812   parPb[8]  = parPb[5]+(zConeE-zPb)*TMath::Tan(thetaOpenPb);
813   
814   parPb[10]  = r2+(zvac7-zvac3) * TMath::Tan(thetaOpen2);
815   parPb[11]  = parPb[8]+(zvac7-zConeE)*TMath::Tan(thetaOpenPb);
816
817   gMC->Gsvolu("YYO2", "PCON", idtmed[iHeavy+40], parPb, 12);      
818   gMC->Gspos("YYO2", 1, "YGO2", 0., 0., (zPb-zvac4)/2., 0, "ONLY");  
819
820   for (i=4; i<23; i+=3) par2[i]  = 0;
821           
822   gMC->Gsvolu("YMO2", "PCON", idtmed[kVacuum+40], par2, 24);
823   gMC->Gspos("YGO2", 1, "YMO2", 0., 0., 0., 0, "ONLY");  
824   dZ+=dl;
825   gMC->Gspos("YMO2", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
826   dZ+=dl;
827 //
828 // Steel envelope
829 //
830 // (1)
831   tpar[0]=R11-dRSteel1;
832   tpar[1]=R21;
833   tpar[2]=2;
834   gMC->Gsvolu("YS21", "TUBE", idtmed[kSteel], tpar, 3);
835   dz=-dl+tpar[2];
836   gMC->Gspos("YS21", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
837   dz+=tpar[2];
838 // (2)
839   tpar[0]=R21-dRSteel2;
840   tpar[1]=R21;
841   tpar[2]=(zvac6-zvac5)/2.;
842   gMC->Gsvolu("YS22", "TUBE", idtmed[kSteel], tpar, 3);
843   dz+=tpar[2];
844   gMC->Gspos("YS22", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
845   dz+=tpar[2];
846 // (3)  
847   cpar[0]=2.;
848   cpar[1]=R21-dRSteel2;
849   cpar[2]=zvac6 * TMath::Tan(accMin);
850   cpar[3]=cpar[1];
851   cpar[4]=cpar[2]+4.*TMath::Tan(accMin);
852   gMC->Gsvolu("YS23", "CONE", idtmed[kSteel], cpar, 5);
853   dz+=cpar[0];
854   gMC->Gspos("YS23", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
855   dz+=cpar[0];
856 //  (4)
857   cpar[0]=(zPb-zvac6-4.)/2;
858   cpar[2]=cpar[4];
859   cpar[4]=cpar[2]+2.*cpar[0]*TMath::Tan(accMin);
860   cpar[1]=cpar[2]-dRSteel2;
861   cpar[3]=cpar[4]-dRSteel2;
862
863   gMC->Gsvolu("YS24", "CONE", idtmed[kSteel], cpar, 5);
864   dz+=cpar[0];
865   gMC->Gspos("YS24", 1, "YGO2", 0., 0., dz, 0, "ONLY");  
866   dz+=cpar[0];
867
868 //  (5)
869   cpar[0]=(zConeE-zPb)/2;
870   cpar[2]=cpar[4];
871   cpar[4]=cpar[2]+2.*cpar[0]*TMath::Tan(accMin);
872   cpar[1]=cpar[2]-dRSteel2;
873   cpar[3]=cpar[4]-dRSteel2;
874
875   gMC->Gsvolu("YS25", "CONE", idtmed[kSteel], cpar, 5);
876   dz=-dlPb+cpar[0];
877   gMC->Gspos("YS25", 1, "YXO2", 0., 0., dz, 0, "ONLY");  
878   dz+=cpar[0];
879 // (6)
880   tpar[0]=26.;
881   tpar[1]=30.;
882   tpar[2]=(zvac7-zConeE)/2.;
883
884   gMC->Gsvolu("YS26", "TUBE", idtmed[kSteel], tpar, 3);
885   dz+=tpar[2];
886   gMC->Gspos("YS26", 1, "YXO2", 0., 0., dz, 0, "ONLY");  
887   dz = -tpar[2];
888
889 // Recess in steel for station 3
890 //
891   tpar[0]=29.;
892   tpar[1]=30.;
893   tpar[2]=(zch32-zch31)/2.;
894   gMC->Gsvolu("YS27", "TUBE", idtmed[kAir], tpar, 3);
895   dz+=(tpar[2]+zch31-zConeE);
896   
897   gMC->Gspos("YS27", 1, "YS26", 0., 0., dz, 0, "ONLY");  
898
899 //
900 //
901 // 2nd section: vacuum system 
902 //
903   cpar0[0]=(zvac7-zvac4)/2;
904   cpar0[1]=r2V;
905   cpar0[2]=r2V+dVacuS;
906   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
907   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpenB);
908   gMC->Gsvolu("YV21", "CONE", idtmed[kSteel+40], cpar0, 5);
909 //
910 // insulation
911   cpar[0]=cpar0[0];
912   cpar[1]=cpar0[1]+dTubeS;
913   cpar[2]=cpar0[1]+dTubeS+dInsuS;
914   cpar[3]=cpar0[3]+dTubeS;
915   cpar[4]=cpar0[3]+dTubeS+dInsuS;
916   gMC->Gsvolu("YI21", "CONE", idtmed[kInsulation+40], cpar, 5);
917   gMC->Gspos("YI21", 1, "YV21", 0., 0., 0., 0, "ONLY"); 
918 //
919 // clearance
920   cpar[1]=cpar0[1]+dTubeS+dInsuS+dEnveS;
921   cpar[2]=cpar0[1]+dTubeS+dInsuS+dEnveS+dFreeS;
922   cpar[3]=cpar0[3]+dTubeS+dInsuS+dEnveS;
923   cpar[4]=cpar0[3]+dTubeS+dInsuS+dEnveS+dFreeS;
924   gMC->Gsvolu("YP21", "CONE", idtmed[kAir+40], cpar, 5);
925   gMC->Gspos("YP21", 1, "YV21", 0., 0., 0., 0, "ONLY"); 
926   
927   dz=0.;
928   gMC->Gspos("YV21", 1, "YMO2", 0., 0., dz, 0, "ONLY"); 
929
930
931 //
932 // Third Section: Bellows and Flange 
933 //
934   par3[0]  = 0.;
935   par3[1]  = 360.;
936   par3[2]  = 8.;
937   dl=(zvac9-zvac7)/2.;
938   
939   par3[3]  = -dl;
940   par3[4]  = r2+(zvac7-zvac3) * TMath::Tan(thetaOpen2);
941   par3[5]  = 30.;
942
943   par3[6]  = -dl+dr21;
944   par3[7]  = par3[4]+dr21;
945   par3[8]  = 30.;
946
947   par3[9]  = par3[6]+dB2;
948   par3[10] = par3[7];
949   par3[11] = 30.;
950
951   par3[12] = par3[9]+dr22;
952   par3[13] = par3[10]+dr22;
953   par3[14] = 30.;
954
955   par3[15] = par3[12]+dF2;
956   par3[16] = par3[13];
957   par3[17] = 30.;
958
959   par3[18] = par3[15]+dr22;
960   par3[19] = par3[16]-dr22;
961   par3[20] = 30.;
962
963   par3[21] = par3[18]+dB2;
964   par3[22] = par3[19];
965   par3[23] = 30.;
966
967   par3[24] = par3[21]+dr23;
968   par3[25] = par3[22];
969   par3[26] = 30.;
970 //
971   rBox=par3[22]-0.1;
972   Float_t r3=par3[25];
973   
974   gMC->Gsvolu("YGO3", "PCON", idtmed[iHeavy+40], par3, 27);
975
976 // begin Fluka
977   Float_t rflukaPb[8];
978   for (ifl=0; ifl<8; ifl++) {
979       zfluka[ifl]=par3[3+3*ifl]+dl+zvac7;
980       rflukaPb[ifl]= 15.+(zfluka[ifl]-zvac4)*TMath::Tan(thetaOpenPb);
981       rfluka1[ifl] = par3[4+3*ifl];
982       rfluka2[ifl] = par3[5+3*ifl]-4.; 
983       rfluka3[ifl] = par3[5+3*ifl]; 
984       rfvacu0[ifl] = 0.;
985   }
986   for (i=0; i<8; i++) rfluka0[i]=rBox;
987   rfluka0[0]=0.; rfluka0[7]=0.;
988
989   flukaGeom->Comment("3rd part: Shield");
990   flukaGeom->PolyCone(rflukaPb, rfluka2,  zfluka, 8, posfluka, "LEAD", "MF", "$SHS");
991
992   if (fPbCone) {
993       flukaGeom->PolyCone(rfluka1,  rflukaPb, zfluka, 8, posfluka, "LEAD", "MF", "$SHS");
994   } else {
995       flukaGeom->PolyCone(rfluka1,  rflukaPb, zfluka, 8, posfluka, "NIW", "MF", "$SHS");
996   }
997   
998   flukaGeom->Comment("3rd part: Steel envelope");
999   flukaGeom->PolyCone(rfluka2, rfluka3, zfluka, 8, posfluka, "STEEL", "MF", "$SHS");
1000   flukaGeom->Comment("3rd part: Vacuum");
1001   flukaGeom->PolyCone(rfluka0+1, rfluka1+1, zfluka+1, 6, posfluka, "AIR", "MF", "$SHH");
1002   flukaGeom->Comment("3rd part: Beam Pipe (left)");
1003   
1004   rf1[0]=0.; rf2[0]=0.;
1005   rf1[1] = r3V;
1006   rf2[1] = rf1[1]+dr21*TMath::Tan(thetaOpenB);
1007   rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+dInsuS; rf1[4]=rf1[3]+dEnveS;
1008   rf1[5]=rf1[4]+dFreeS; rf1[6]= rf1[5]+dProtS; rf1[7]=par3[4];
1009   rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+dInsuS; rf2[4]=rf2[3]+dEnveS; 
1010   rf2[5]=rf2[4]+dFreeS; rf2[6]=rf2[5]+dProtS;  rf2[7]=rf1[7]+dr21;
1011   flukaGeom->OnionCone(rf1, rf2,  8 , zvac7, zvac7+dr21, posfluka, materialsB, fieldsB, cutsB);
1012   
1013   
1014   flukaGeom->Comment("3rd part: Beam Pipe (right)");
1015   
1016   rf1[0]=0.;
1017   rf1[1] = par3[25]-dr23; 
1018   rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+dInsuS; rf1[4]=rf1[3]+dEnveS;
1019   rf1[5]=rf1[4]+dFreeS; rf1[6]=par3[25]; 
1020   flukaGeom->OnionCylinder(rf1,  7 , zvac9-dr23, zvac9, posfluka, materialsA, fieldsA, cutsA);
1021
1022 //
1023   flukaGeom->Comment("First Bellow");
1024   z1=zvac7+dr21;
1025   
1026   for (i=0; i<7; i++) {
1027       z2=z1+eB2;
1028       flukaGeom->Cylinder(0., rB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1029       flukaGeom->Cylinder(rB2, rB2+hB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
1030       
1031       z1=z2;
1032       z2+=lB2/2.-eB2;
1033       flukaGeom->Cylinder(0., rB2+hB2-eB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1034       flukaGeom->Cylinder(rB2+hB2-eB2, rB2+hB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
1035       z1=z2;
1036       z2=z1+eB2;
1037       flukaGeom->Cylinder(0., rB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1038       flukaGeom->Cylinder(rB2, rB2+hB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
1039       z1=z2;
1040       z2+=lB2/2.-eB2;
1041       flukaGeom->Cylinder(0., rB2, z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1042       flukaGeom->Cylinder(rB2, rB2+eB2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
1043       flukaGeom->Cylinder(rB2+eB2, rB2+hB2, z1, z2, posfluka, "AIR", "MF", "$SHH");
1044       z1=z2;
1045    }
1046   flukaGeom->Cylinder(rB2+hB2, rB2+hB2+0.2, zvac7+dr21, z1, posfluka, "AIR", "MF", "$SHH");
1047   flukaGeom->Cylinder(rB2+hB2+0.2, rBox, zvac7+dr21, z1, posfluka, "AIR", "MF", "$SHH");
1048   zcy1=z1;
1049   
1050
1051   flukaGeom->Comment("Second Bellow");
1052   z1=zvac9-dr23;
1053   for (i=0; i<7; i++) {
1054       z2=z1-eB2;
1055       flukaGeom->Cylinder(0., rB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
1056       flukaGeom->Cylinder(rB2, rB2+hB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
1057       z1=z2;
1058       z2-=lB2/2.-eB2;
1059       flukaGeom->Cylinder(0., rB2+hB2-eB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
1060       flukaGeom->Cylinder(rB2+hB2-eB2, rB2+hB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
1061       z1=z2;
1062       z2=z1-eB2;
1063       flukaGeom->Cylinder(0., rB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
1064       flukaGeom->Cylinder(rB2, rB2+hB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
1065       z1=z2;
1066       z2-=lB2/2.-eB2;
1067       flukaGeom->Cylinder(0., rB2, z2, z1, posfluka, "VACUUM", "MF", "$SHH");
1068       flukaGeom->Cylinder(rB2, rB2+eB2, z2, z1, posfluka, "STEEL", "MF", "$SHH");
1069       flukaGeom->Cylinder(rB2+eB2, rB2+hB2, z2, z1, posfluka, "AIR", "MF", "$SHH");
1070       z1=z2;
1071    }
1072   flukaGeom->Cylinder(rB2+hB2, rB2+hB2+0.2, z1, zvac9-dr23, posfluka, "AIR", "MF", "$SHH");
1073   flukaGeom->Cylinder(rB2+hB2+0.2, rBox,    z1, zvac9-dr23, posfluka, "AIR", "MF", "$SHH");
1074
1075   zcy2=z1;
1076   flukaGeom->Comment("Flange");
1077   zfl=(zcy1+zcy2)/2.;
1078
1079   z1=zfl-dF2/2.;
1080   z2=zfl+dF2/2.;  
1081   flukaGeom->Cylinder(0.,rF2-2.,   z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1082   flukaGeom->Cylinder(rF2-2., rF2, z1, z2, posfluka, "STEEL", "MF", "$SHH");
1083   flukaGeom->Cylinder(rF2, rF2+0.02     , z1, z2, posfluka, "AIR", "MF", "$SHH");
1084   flukaGeom->Cylinder(rF2+0.02, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
1085   z2=z1;
1086   z1=z2-dFlange;
1087   flukaGeom->Cylinder(0.,rB2           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1088   flukaGeom->Cylinder(rB2, rF2         , z1, z2, posfluka, "STEEL", "MF", "$SHH");
1089   flukaGeom->Cylinder(rF2, rF2+0.2     , z1, z2, posfluka, "AIR", "MF", "$SHH");
1090   flukaGeom->Cylinder(rF2+0.2, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
1091   z2=z1;
1092   z1=zcy1;
1093   flukaGeom->Cylinder(0.,rB2           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1094   flukaGeom->Cylinder(rB2, rB2+0.1     , z1, z2, posfluka, "STEEL", "MF", "$SHH");
1095   flukaGeom->Cylinder(rB2+0.1, rB2+0.2 , z1, z2, posfluka, "AIR", "MF", "$SHH");
1096   flukaGeom->Cylinder(rB2+0.2, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
1097
1098   z1=zfl+dF2/2.;
1099   z2=z1+dFlange;
1100   flukaGeom->Cylinder(0.,rB2           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1101   flukaGeom->Cylinder(rB2, rF2         , z1, z2, posfluka, "STEEL", "MF", "$SHH");
1102   flukaGeom->Cylinder(rF2, rF2+0.2     , z1, z2, posfluka, "AIR", "MF", "$SHH");
1103   flukaGeom->Cylinder(rF2+0.2, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
1104   z1=z2;
1105   z2=zcy2;
1106   flukaGeom->Cylinder(0.,rB2           , z1, z2, posfluka, "VACUUM", "MF", "$SHH");
1107   flukaGeom->Cylinder(rB2, rB2+0.1     , z1, z2, posfluka, "STEEL", "MF", "$SHH");
1108   flukaGeom->Cylinder(rB2+0.1, rB2+0.2 , z1, z2, posfluka, "AIR", "MF", "$SHH");
1109   flukaGeom->Cylinder(rB2+0.2, rBox    , z1, z2, posfluka, "AIR", "MF", "$SHH");
1110 //
1111 // end Fluka
1112
1113   parPb[0]  = dl;
1114   parPb[1]  = rPbLast;
1115   parPb[2]  = 30;
1116   parPb[3]  = parPb[1]+2.*dl*TMath::Tan(thetaOpenPb);
1117   parPb[4]  = 30;
1118   gMC->Gsvolu("YXO3", "CONE", idtmed[kPb], parPb, 5);
1119   gMC->Gspos("YXO3", 1, "YGO3", 0., 0., 0., 0, "ONLY");  
1120
1121   for (i=4; i<26; i+=3) par3[i]  = 0;
1122
1123   gMC->Gsvolu("YMO3", "PCON", idtmed[kVacuum+40], par3, 27);
1124   gMC->Gspos("YGO3", 1, "YMO3", 0., 0., 0., 0, "ONLY");  
1125
1126 //
1127 // Steel envelope
1128   tpar[0]=26;
1129   tpar[1]=30;
1130   tpar[2]=dl;
1131   gMC->Gsvolu("YS31", "TUBE", idtmed[kSteel], tpar, 3);
1132   gMC->Gspos("YS31", 1, "YXO3", 0., 0., 0., 0, "ONLY");  
1133   dZ+=dl;
1134   gMC->Gspos("YMO3", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
1135   dZ+=dl;
1136
1137 //
1138 // 3rd section: vacuum system
1139 //
1140 //
1141 // Bellow2
1142 //
1143   tpar[0]=rB2;
1144   tpar[1]=rB2+hB2;
1145   tpar[2]=eB2/2.;
1146   gMC->Gsvolu("YB21", "TUBE", idtmed[kSteel+40], tpar, 3);
1147   dl1=tpar[2];
1148   
1149   tpar[0]=rB2+hB2-eB2;
1150   tpar[1]=rB2+hB2;
1151   tpar[2]=(lB2/2.-2.*eB2)/2.;
1152   gMC->Gsvolu("YB22", "TUBE", idtmed[kSteel+40], tpar, 3);
1153   dl2=tpar[2];
1154
1155   tpar[0]=rB2-eB2;
1156   tpar[1]=rB2;
1157   tpar[2]=lB2/8.;
1158   gMC->Gsvolu("YB23", "TUBE", idtmed[kSteel+40], tpar, 3);
1159   dl3=tpar[2];
1160
1161
1162   tpar[0]=0;
1163   tpar[1]=rB2+hB2;
1164   tpar[2]=lB2/2.;
1165   gMC->Gsvolu("YBU2", "TUBE", idtmed[kVacuum+40], tpar, 3);
1166
1167   dz=-tpar[2]+dl3;
1168   gMC->Gspos("YB23", 1, "YBU2", 0., 0., dz, 0, "ONLY"); 
1169   dz+=dl3;
1170   dz+=dl1;  
1171   gMC->Gspos("YB21", 1, "YBU2", 0., 0., dz, 0, "ONLY"); 
1172   dz+=dl1;  
1173   dz+=dl2;  
1174   gMC->Gspos("YB22", 1, "YBU2", 0., 0., dz, 0, "ONLY"); 
1175   dz+=dl2;  
1176   dz+=dl1;
1177   gMC->Gspos("YB21", 2, "YBU2", 0., 0., dz, 0, "ONLY"); 
1178   dz+=dl1;
1179   dz+=dl3;
1180   gMC->Gspos("YB23", 2, "YBU2", 0., 0., dz, 0, "ONLY"); 
1181   
1182
1183   tpar[0]=0;
1184   tpar[1]=rB2+hB2;
1185   tpar[2]=7.*lB2/2.;
1186   gMC->Gsvolu("YBM2", "TUBE", idtmed[kVacuum+40], tpar, 3);
1187   dz=-tpar[2]+lB2/2.;
1188
1189   for (i=0; i<7; i++) {
1190     gMC->Gspos("YBU2", i+1 , "YBM2", 0., 0.,dz , 0, "ONLY"); 
1191     dz+=lB2;
1192   }
1193
1194   dz=-dl+dr21+tpar[2];
1195   gMC->Gspos("YBM2", 1, "YMO3", 0., 0., dz, 0, "ONLY"); 
1196
1197   dz=dl-dr23-tpar[2];
1198   gMC->Gspos("YBM2", 2, "YMO3", 0., 0., dz, 0, "ONLY"); 
1199
1200 //
1201 // Flange
1202
1203   tpar[0]=0;
1204   tpar[1]=rF2;
1205   tpar[2]=dF2/2.;
1206   gMC->Gsvolu("YFM2", "TUBE", idtmed[kVacuum+40], tpar, 3);
1207
1208   tpar[0]=rF2-2.;
1209   tpar[1]=rF2;
1210   tpar[2]=dF2/2.;
1211   gMC->Gsvolu("YF21", "TUBE", idtmed[kSteel+40], tpar, 3);
1212   gMC->Gspos("YF21", 1, "YFM2", 0., 0., 0., 0, "ONLY"); 
1213
1214   tpar[0]=rB2;
1215   tpar[1]=rF2-2.;
1216   tpar[2]=dFlange/2.;
1217   gMC->Gsvolu("YF22", "TUBE", idtmed[kSteel+40], tpar, 3);
1218   dz=-dF2/2.+tpar[2];
1219   gMC->Gspos("YF22", 1, "YFM2", 0., 0., dz, 0, "ONLY"); 
1220   dz= dF2/2.-tpar[2];
1221   gMC->Gspos("YF22", 2, "YFM2", 0., 0., dz, 0, "ONLY"); 
1222
1223   dz=dr21/2.-dr23/2.;
1224   gMC->Gspos("YFM2", 2, "YMO3", 0., 0., dz, 0, "ONLY"); 
1225
1226
1227 //
1228 // pipe between flange and bellows
1229   tpar[0]=rB2-dTubeS;
1230   tpar[1]=rB2;
1231   tpar[2]=2.*(dB2+dr22-7.*lB2)/4.;
1232   gMC->Gsvolu("YPF2", "TUBE", idtmed[kSteel+40], tpar, 3);
1233   dz=dr21/2.-dr23/2.-dF2/2.-tpar[2];
1234   gMC->Gspos("YPF2", 1, "YMO3", 0., 0., dz, 0, "ONLY"); 
1235   dz=dr21/2.-dr23/2.+dF2/2.+tpar[2];
1236   gMC->Gspos("YPF2", 2, "YMO3", 0., 0., dz, 0, "ONLY"); 
1237
1238   Float_t dHorZ=55.;
1239   
1240 //
1241 // 4th section: rear shield and closing cone
1242 //
1243   par4[0]  = 0.;
1244   par4[1]  = 360.;
1245   par4[2]  = 7.;
1246   dl=(zvac12-zvac9)/2.;
1247   
1248   par4[3]  = -dl;
1249   par4[4]  = r3;
1250   par4[5]  = 30.;
1251
1252   par4[6]  = -dl+dHorZ;
1253   par4[7]  = r3;
1254   par4[8]  = 30.;
1255
1256   par4[9]  = -dl+(zvac10-zvac9);
1257   par4[10]  = r3+(zvac10-zvac9-dHorZ) * TMath::Tan(thetaOpen3);
1258   par4[11]  = 30.;
1259
1260   par4[12]  = par4[9];
1261   par4[13] = par4[10];
1262   par4[14] = R42;
1263
1264   par4[15] = -dl+(zvac11-zvac9);
1265   par4[16] = r3+(zvac11-zvac9-dHorZ) * TMath::Tan(thetaOpen3);
1266   par4[17] = R42;
1267
1268   par4[18] = par4[15];
1269   par4[19] = par4[16];
1270   par4[20] = R43;
1271
1272   par4[21] = -dl+(zvac12-zvac9);
1273   par4[22] = rAbs;
1274   par4[23] = R43;
1275
1276   gMC->Gsvolu("YGO4", "PCON", idtmed[iHeavy+40], par4, 24);
1277
1278   parPb[0]  = (zvac10-zvac9)/2.;
1279   parPb[1]  = parPb[3];
1280   parPb[2]  = 30;
1281   parPb[3]  = parPb[1]+2.*parPb[0]*TMath::Tan(thetaOpenPb);
1282   parPb[4]  = 30;
1283   gMC->Gsvolu("YXO4", "CONE", idtmed[kPb], parPb, 5);
1284   gMC->Gspos("YXO4", 1, "YGO4", 0., 0., -dl+parPb[0], 0, "ONLY");  
1285
1286   parPb[0]  = (zvac12-zvac10)/2.;
1287   parPb[1]  = parPb[3];
1288   parPb[2]  = 31.;
1289   parPb[3]  = parPb[1]+2.*parPb[0]*TMath::Tan(thetaOpenPb);
1290   parPb[4]  = 31.;
1291   gMC->Gsvolu("YXO5", "CONE", idtmed[kPb], parPb, 5);
1292   gMC->Gspos("YXO5", 1, "YGO4", 0., 0., -dl+(zvac10-zvac9)+parPb[0], 0, "ONLY");  
1293
1294   for (i=4; i<23; i+=3) par4[i]  = 0;
1295
1296   gMC->Gsvolu("YMO4", "PCON", idtmed[kVacuum+40], par4, 24);
1297   gMC->Gspos("YGO4", 1, "YMO4", 0., 0., 0., 0, "ONLY");  
1298
1299
1300
1301   dZ+=dl;
1302   gMC->Gspos("YMO4", 1, "YMOT", 0., 0., dZ, 0, "ONLY");  
1303   dZ+=dl;
1304 //
1305 // Closing concrete cone 
1306 //
1307   cpar[0]=(zvac12-zvac11)/2.;
1308   cpar[1] = r3+(zvac11-zvac9-dHorZ) * TMath::Tan(thetaOpen3);
1309   cpar[2] = cpar[1]+0.001;
1310   cpar[3] = rAbs;
1311   cpar[4] = cpar[2];
1312   gMC->Gsvolu("YCC4", "CONE", idtmed[kConcrete+40], cpar, 5);
1313   dz=dl-cpar[0];
1314   gMC->Gspos("YCC4", 1, "YGO4", 0., 0., dz, 0, "ONLY");  
1315
1316 //
1317 // begin Fluka
1318   Float_t r10=r3+(zvac10-zvac9-dHorZ) * TMath::Tan(thetaOpen3);
1319   Float_t r11=cpar[1];
1320
1321   Float_t rPb0=15.+(zvac9-zvac4)* TMath::Tan(thetaOpenPb);
1322   Float_t rPb1=15.+(zvac9+dHorZ-zvac4)* TMath::Tan(thetaOpenPb);
1323   Float_t rPb2=15.+(zvac10-zvac4)* TMath::Tan(thetaOpenPb);
1324   flukaGeom->Comment("4th part: Shield");
1325   
1326   flukaGeom->Cone(rPb0, rPb1, 26.0, 26.0, zvac9,  zvac9+dHorZ, 
1327               posfluka, "LEAD", "NF", "$SHH");
1328   if (fPbCone) {
1329       flukaGeom->Cone(r3, r3, rPb0, rPb1, zvac9,  zvac9+dHorZ, 
1330                   posfluka, "LEAD", "NF", "$SHS");
1331   } else {
1332       flukaGeom->Cone(r3, r3, rPb0, rPb1, zvac9,  zvac9+dHorZ, 
1333                   posfluka, "NIW", "NF", "$SHS");
1334   }
1335
1336   flukaGeom->Cone(rPb1, rPb2, 26.0, 26.0, zvac9+dHorZ,  zvac10, 
1337               posfluka, "LEAD", "NF", "$SHH");
1338   if (fPbCone) {
1339       flukaGeom->Cone(r3, r10, rPb1, rPb2, zvac9+dHorZ,  zvac10, 
1340                   posfluka, "LEAD", "NF", "$SHS");
1341   } else {
1342       flukaGeom->Cone(r3, r10, rPb1, rPb2, zvac9+dHorZ,  zvac10, 
1343                   posfluka, "NIW", "NF", "$SHS");
1344   }
1345   
1346   
1347   rPb1=rPb2;
1348   rPb2=15.+(zvac11-zvac4)* TMath::Tan(thetaOpenPb);
1349   flukaGeom->Cone(rPb1, rPb2, 30.0, 30.0, zvac10,  zvac11, 
1350               posfluka, "LEAD", "NF", "$SHH");
1351  if (fPbCone) {
1352      flukaGeom->Cone(r10, r11, rPb1, rPb2, zvac10,  zvac11, 
1353                  posfluka, "LEAD", "NF", "$SHH");
1354  } else {
1355      flukaGeom->Cone(r10, r11, rPb1, rPb2, zvac10,  zvac11, 
1356                  posfluka, "NIW", "NF", "$SHH");
1357  }
1358  
1359   flukaGeom->Cylinder( rPb2, 30.0, zvac11, zvac12, 
1360               posfluka, "LEAD", "NF", "$SHH");
1361  if (fPbCone) {
1362      flukaGeom->Cylinder( cpar[1], rPb2, zvac11, zvac12, 
1363                       posfluka, "LEAD", "NF", "$SHH");
1364  } else {
1365      flukaGeom->Cylinder( cpar[1], rPb2, zvac11, zvac12, 
1366                       posfluka, "NIW", "NF", "$SHH");
1367  }
1368  
1369   flukaGeom->Comment("4th part: Steel Envelope");
1370   flukaGeom->Cylinder(26.0, 30., zvac9, zvac10, posfluka, "STEEL", "NF", "$SHH");
1371   flukaGeom->Comment("4th part: Closing Cone");
1372   flukaGeom->Cone(cpar[1]-0.1, cpar[3], cpar[1], cpar[1], zvac11, zvac12, 
1373               posfluka, "PORTLAND", "NF", "$SHH");
1374   flukaGeom->Comment("4th part: VACUUM");
1375   flukaGeom->Cone(0., 0., cpar[1]-0.1, cpar[3], zvac11, zvac12, 
1376               posfluka, "VACUUM", "NF", "$SHH");
1377 //
1378 // end Fluka
1379
1380 //
1381 // Steel envelope
1382 //
1383   dz=-dl;
1384   tpar[0]=26.;
1385   tpar[1]=30.;
1386   tpar[2]=(zvac10-zvac9)/2.;
1387   gMC->Gsvolu("YS41", "TUBE", idtmed[kSteel], tpar, 3);
1388   dz+=tpar[2];
1389   gMC->Gspos("YS41", 1, "YXO4", 0., 0., 0., 0, "ONLY");  
1390   dz+=tpar[2];
1391 /*
1392   tpar[0]=30.;
1393   tpar[1]=R41;
1394   tpar[2]=2.;
1395   gMC->Gsvolu("YS42", "TUBE", idtmed[kSteel], tpar, 3);
1396   dz+=tpar[2];
1397   gMC->Gspos("YS42", 1, "YGO4", 0., 0., dz, 0, "ONLY");  
1398   dz+=tpar[2];
1399 */
1400   tpar[0]=R41-dRSteel2;
1401   tpar[1]=R41;
1402   tpar[2]=(zvac11-zvac10)/2.;
1403   gMC->Gsvolu("YS43", "TUBE", idtmed[kSteel], tpar, 3);
1404   dz+=tpar[2];
1405   gMC->Gspos("YS43", 1, "YGO4", 0., 0., dz, 0, "ONLY");  
1406 //
1407 // rear lead shield
1408 //
1409   tpar[0]=R41;
1410   tpar[1]=R42;
1411   tpar[2]=(zvac11-zvac10)/2.;
1412   gMC->Gsvolu("YPBI", "TUBE", idtmed[kPb+40], tpar, 3);
1413   dz-=0;
1414   gMC->Gspos("YPBI", 1, "YGO4", 0., 0., dz, 0, "ONLY"); 
1415
1416   tpar[0]=R42-5;
1417   tpar[1]=R42;
1418   tpar[2]=(zvac11-zvac10)/2.;
1419   gMC->Gsvolu("YPBO", "TUBE", idtmed[kPb], tpar, 3);
1420   gMC->Gspos("YPBO", 1, "YPBI", 0., 0., 0., 0, "ONLY"); 
1421   
1422 //
1423 // rear Fe shield
1424 //
1425
1426   tpar[0]=31.;
1427   tpar[1]=R43;
1428   tpar[2]=(zvac12-zvac11)/2.;
1429   gMC->Gsvolu("YFEI", "TUBE", idtmed[kFe+40], tpar, 3);
1430   dz=dl-tpar[2];
1431   gMC->Gspos("YFEI", 1, "YGO4", 0., 0., dz, 0, "ONLY"); 
1432
1433   tpar[0]=31.;
1434   tpar[1]=R43;
1435   tpar[2]=2.5;
1436   gMC->Gsvolu("YFEO", "TUBE", idtmed[kFe], tpar, 3);
1437   dz=-(zvac12-zvac11)/2.+tpar[2];
1438   gMC->Gspos("YFEO", 1, "YFEI", 0., 0., dz, 0, "ONLY"); 
1439 //
1440 // Magnet element 
1441 //
1442   tpar[0]=0.;
1443   tpar[1]=R43;
1444   tpar[2]=50.;
1445   gMC->Gsvolu("YAEM", "TUBE", idtmed[kAir], tpar, 3);
1446   tpar[0]=rAbs;
1447   tpar[1]=R43;
1448   tpar[2]=50.;
1449   gMC->Gsvolu("YFEM", "TUBE", idtmed[kFe], tpar, 3);
1450   gMC->Gspos("YFEM", 1, "YAEM", 0., 0., 0., 0, "ONLY"); 
1451
1452 //
1453
1454   dz=zvac12+50.;
1455   gMC->Gspos("YAEM", 1, "ALIC", 0., 0., dz, 0, "ONLY"); 
1456
1457
1458 // 
1459 //
1460 // 4th section: vacuum system 
1461 //
1462 // up to closing cone
1463   r3V=r3-dr23+dVacuS;
1464
1465   cpar0[0]=(zvac11-zvac9)/2;
1466   cpar0[1]=r3V-dVacuS;
1467   cpar0[2]=r3V;
1468   cpar0[3]=cpar0[1]+2.*cpar0[0]*TMath::Tan(thetaOpen3);
1469   cpar0[4]=cpar0[2]+2.*cpar0[0]*TMath::Tan(thetaOpen3);
1470   gMC->Gsvolu("YV31", "CONE", idtmed[kSteel+40], cpar0, 5);
1471 //
1472 // insulation
1473   cpar[0]=cpar0[0];
1474   cpar[1]=cpar0[1]+dTubeS;
1475   cpar[2]=cpar0[1]+dTubeS+dInsuS;
1476   cpar[3]=cpar0[3]+dTubeS;
1477   cpar[4]=cpar0[3]+dTubeS+dInsuS;
1478   gMC->Gsvolu("YI31", "CONE", idtmed[kInsulation+40], cpar, 5);
1479   gMC->Gspos("YI31", 1, "YV31", 0., 0., 0., 0, "ONLY"); 
1480 //
1481 // clearance
1482   cpar[1]=cpar0[2]-dProtS-dFreeS;
1483   cpar[2]=cpar0[2]-dProtS;
1484   cpar[3]=cpar0[4]-dProtS-dFreeS;
1485   cpar[4]=cpar0[4]-dProtS;
1486   gMC->Gsvolu("YP31", "CONE", idtmed[kVacuum+40], cpar, 5);
1487   gMC->Gspos("YP31", 1, "YV31", 0., 0., 0., 0, "ONLY"); 
1488   
1489   dz=-dl+cpar[0];
1490   gMC->Gspos("YV31", 1, "YMO4", 0., 0., dz, 0, "ONLY"); 
1491
1492 //
1493 // begin Fluka
1494   flukaGeom->Comment("4th part: Beam pipe lateral structure");
1495   for (i=0; i<7; i++)  fieldsA[i] = "NF";
1496
1497   rf1[0]=0.;       rf2[0]=0.;
1498
1499   rf1[1]=cpar0[1]; rf2[1]=rf1[1]+dHorZ*TMath::Tan(thetaOpen3);
1500   
1501   rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+dInsuS; rf1[4]=rf1[3]+dEnveS;
1502   rf1[5]=rf1[4]+dFreeS; rf1[6]=r3; 
1503
1504   rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+dInsuS; rf2[4]=rf2[3]+dEnveS; 
1505   rf2[5]=rf2[4]+dFreeS; rf2[6]=r3;
1506
1507   flukaGeom->OnionCone(rf1, rf2,  7 , zvac9 , zvac9+dHorZ, posfluka, materialsA, fieldsA, cutsA);
1508
1509   rf1[0]=0.;       rf2[0]=0.;
1510
1511   rf1[1]=rf2[1]; rf2[1]=rf1[1]+(zvac10-zvac9-dHorZ)*TMath::Tan(thetaOpen3);
1512   
1513   rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+dInsuS; rf1[4]=rf1[3]+dEnveS;
1514   rf1[5]=rf1[4]+dFreeS; rf1[6]=r3; 
1515
1516   rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+dInsuS; rf2[4]=rf2[3]+dEnveS; 
1517   rf2[5]=rf2[4]+dFreeS; rf2[6]=r10;
1518
1519
1520   flukaGeom->OnionCone(rf1, rf2,  7 , zvac9+dHorZ, zvac10, posfluka, materialsA, fieldsA, cutsA);
1521
1522   rf1[0]=0.;       rf2[0]=0.;
1523   rf1[1]=rf2[1];   rf2[1]=rf1[1]+(zvac11-zvac10)*TMath::Tan(thetaOpen3);
1524
1525   rf1[2]=rf1[1]+dTubeS; rf1[3]=rf1[2]+dInsuS; rf1[4]=rf1[3]+dEnveS;
1526   rf1[5]=rf1[4]+dFreeS; rf1[6]=r10; 
1527   rf2[2]=rf2[1]+dTubeS; rf2[3]=rf2[2]+dInsuS; rf2[4]=rf2[3]+dEnveS; 
1528   rf2[5]=rf2[4]+dFreeS; rf2[6]=r11;
1529
1530   flukaGeom->OnionCone(rf1, rf2,  7 , zvac10, zvac11, posfluka, materialsA, fieldsA, cutsA);
1531 //  
1532 // end Fluka
1533
1534 //
1535 // closing cone
1536   cpar0[0]=(zvac12-zvac11)/2;
1537   cpar0[1]=r3V-dVacuS+(zvac11-zvac9)*TMath::Tan(thetaOpen3);
1538   cpar0[2]=r3V       +(zvac11-zvac9)*TMath::Tan(thetaOpen3);
1539   cpar0[3]=rVacu;
1540   cpar0[4]=rAbs;
1541   gMC->Gsvolu("YV32", "CONE", idtmed[kSteel+40], cpar0, 5);
1542 //
1543 // insulation
1544   cpar[0]=cpar0[0];
1545   cpar[1]=cpar0[1]+dTubeS;
1546   cpar[2]=cpar0[1]+dTubeS+dInsuS;
1547   cpar[3]=cpar0[3]+dTubeS;
1548   cpar[4]=cpar0[3]+dTubeS+dInsuS;
1549   gMC->Gsvolu("YI32", "CONE", idtmed[kInsulation+40], cpar, 5);
1550   gMC->Gspos("YI32", 1, "YV32", 0., 0., 0., 0, "ONLY"); 
1551 //
1552 // clearance
1553   cpar[1]=cpar0[2]-dProtS-dFreeS;
1554   cpar[2]=cpar0[2]-dProtS;
1555   cpar[3]=cpar0[4]-dProtS-dFreeS;
1556   cpar[4]=cpar0[4]-dProtS;
1557   gMC->Gsvolu("YP32", "CONE", idtmed[kVacuum+40], cpar, 5);
1558   gMC->Gspos("YP32", 1, "YV32", 0., 0., 0., 0, "ONLY"); 
1559   
1560   dz=dl-cpar[0];
1561   gMC->Gspos("YV32", 1, "YMO4", 0., 0., dz, 0, "ONLY"); 
1562 //
1563 //
1564 // MUON trigger wall
1565 //  
1566   tpar[0] = 50.;
1567   tpar[1] = 310.;
1568   tpar[2] = (zFilterOut - zFilterIn) / 2.;
1569   gMC->Gsvolu("YFIM", "TUBE", idtmed[kFe+40], tpar, 3);
1570   dz = (zFilterIn + zFilterOut) / 2.;
1571   tpar[2] -= 10.;
1572   gMC->Gsvolu("YFII","TUBE", idtmed[kFe], tpar, 3);
1573   gMC->Gspos("YFII", 1, "YFIM", 0., 0., 0., 0, "ONLY");
1574   gMC->Gspos("YFIM", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1575 //
1576 // Shielding close to chamber
1577 //
1578 //
1579   cpar[0]=(zch11-zRear)/2.;
1580   cpar[1]=R11;
1581   cpar[2]=zRear*TMath::Tan(accMin);
1582   cpar[3]=R11;
1583   cpar[4]=(zRear+2.*cpar[0])*TMath::Tan(accMin);
1584   gMC->Gsvolu("YCS1", "CONE", idtmed[kNiCuW], cpar, 5);
1585   dz=zRear+cpar[0];
1586   gMC->Gspos("YCS1", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1587
1588   cpar[0]=(zvac4-zch12)/2.;
1589   cpar[1]=R11;
1590   cpar[2]=zch12*TMath::Tan(accMin);
1591   cpar[3]=R11;
1592   cpar[4]=(zch12+2.*cpar[0])*TMath::Tan(accMin);
1593   gMC->Gsvolu("YCS3", "CONE", idtmed[kNiCuW], cpar, 5);
1594   dz=zvac4-cpar[0];
1595   gMC->Gspos("YCS3", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1596
1597
1598 // Recess station 1
1599
1600   cpar[0]=(zch12-zch11)/2.;
1601   cpar[1]=R11;
1602   cpar[2]=18.;
1603   cpar[3]=R11;
1604   cpar[4]=17.9;
1605   gMC->Gsvolu("YCS2", "CONE", idtmed[kAir], cpar, 5);
1606   dz=zch11+cpar[0];
1607   gMC->Gspos("YCS2", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1608
1609   Float_t ptubs[5];
1610   ptubs[0] = R11;
1611   ptubs[1] = 17.9;
1612   ptubs[2] =   0.;
1613 // phi_min, phi_max
1614   ptubs[3] =   0.;
1615   ptubs[4] =  90.;  
1616   gMC->Gsvolu("YCR0", "TUBS", idtmed[kNiCuW], ptubs, 0);
1617   Int_t idrotm[1799];
1618   
1619   AliMatrix(idrotm[1701],90.,   0., 90.,  90., 0., 0.);
1620   AliMatrix(idrotm[1702],90.,  90., 90., 180., 0., 0.);
1621   AliMatrix(idrotm[1703],90., 180., 90., 270., 0., 0.); 
1622   AliMatrix(idrotm[1704],90., 270., 90.,   0., 0., 0.); 
1623   Int_t ipos;
1624   
1625   dz=-cpar[0];
1626 // 1.
1627   ptubs[2]=6.5/2.;
1628   dz+=ptubs[2];
1629   gMC->Gsposp("YCR0", 1, "YCS2", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
1630   gMC->Gsposp("YCR0", 2, "YCS2", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
1631   dz+=ptubs[2];
1632   dz+=1.5;
1633 // 2.
1634   ptubs[2]=5.0/2.;
1635   dz+=ptubs[2];
1636   gMC->Gsposp("YCR0", 3, "YCS2", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
1637   gMC->Gsposp("YCR0", 4, "YCS2", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
1638   dz+=ptubs[2];
1639   dz+=1.5;
1640 // 3. 
1641   ptubs[2]=5.0/2.;
1642   dz+=ptubs[2];
1643   gMC->Gsposp("YCR0", 5, "YCS2", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
1644   gMC->Gsposp("YCR0", 6, "YCS2", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
1645   dz+=ptubs[2];
1646   dz+=1.5;
1647 // 4. 
1648   ptubs[2]=6.5/2.;
1649   dz+=ptubs[2];
1650   gMC->Gsposp("YCR0", 7, "YCS2", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
1651   gMC->Gsposp("YCR0", 8, "YCS2", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
1652   dz+=ptubs[2];
1653   dz+=1.5;
1654
1655
1656   
1657   cpar[0]=(zch21-zvac4)/2.;
1658   cpar[1]=R21;
1659   cpar[2]=zvac4*TMath::Tan(accMin);
1660   cpar[3]=R21;
1661   cpar[4]=(zvac4+2.*cpar[0])*TMath::Tan(accMin);
1662   gMC->Gsvolu("YCS4", "CONE", idtmed[kNiCuW], cpar, 5);
1663   dz=zvac4+cpar[0];
1664   gMC->Gspos("YCS4", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1665
1666   cpar[0]=(zvac6-zch22)/2.;
1667   cpar[1]=R21;
1668   cpar[2]=zch22*TMath::Tan(accMin);
1669   cpar[3]=R21;
1670   cpar[4]=(zch22+2.*cpar[0])*TMath::Tan(accMin);
1671   gMC->Gsvolu("YCS6", "CONE", idtmed[kNiCuW], cpar, 5);
1672   dz=zvac6-cpar[0];
1673   gMC->Gspos("YCS6", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1674   
1675 // Recess station 2
1676  
1677   cpar[0]=(zch22-zch21)/2.;
1678   cpar[1]=R21;
1679   cpar[2]=23.;
1680   cpar[3]=R21;
1681   cpar[4]=23.;
1682   gMC->Gsvolu("YCS5", "CONE", idtmed[kAir], cpar, 5);
1683   dz=zch21+cpar[0];
1684   gMC->Gspos("YCS5", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1685
1686   ptubs[0] = R21;
1687   ptubs[1] = 23;
1688   ptubs[2] =   0.;
1689   ptubs[3] =   0.;
1690   ptubs[4] =  90.;  
1691   gMC->Gsvolu("YCR1", "TUBS", idtmed[kNiCuW], ptubs, 0);
1692
1693   dz=-cpar[0];
1694 // 1.
1695   ptubs[2]=7.5/2.;
1696   dz+=ptubs[2];
1697   gMC->Gsposp("YCR1", 1, "YCS5", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
1698   gMC->Gsposp("YCR1", 2, "YCS5", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
1699   dz+=ptubs[2];
1700   dz+=1.5;
1701 // 2.
1702   ptubs[2]=6.0/2.;
1703   dz+=ptubs[2];
1704   gMC->Gsposp("YCR1", 3, "YCS5", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
1705   gMC->Gsposp("YCR1", 4, "YCS5", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
1706   dz+=ptubs[2];
1707   dz+=1.5;
1708 // 3. 
1709   ptubs[2]=6.0/2.;
1710   dz+=ptubs[2];
1711   gMC->Gsposp("YCR1", 5, "YCS5", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
1712   gMC->Gsposp("YCR1", 6, "YCS5", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
1713   dz+=ptubs[2];
1714   dz+=1.5;
1715 // 4. 
1716   ptubs[2]=7.5/2.;
1717   dz+=ptubs[2];
1718   gMC->Gsposp("YCR1", 7, "YCS5", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
1719   gMC->Gsposp("YCR1", 8, "YCS5", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
1720   dz+=ptubs[2];
1721   dz+=1.5;
1722
1723
1724 //
1725 // begin Fluka
1726   flukaGeom->Cone(R11, R11, -1.,  -1., 
1727                   zRear, zch11, posfluka,"NIW", "MF", "$SHS");
1728
1729   flukaGeom->Cone(R11, R11, -1.,  -1., 
1730                   zch11, zch12, posfluka,"AIR", "MF", "$SHS");
1731
1732   flukaGeom->Cone(R11, R11, -1.,  -1., 
1733                   zch12, zvac4, posfluka,"NIW", "MF", "$SHS");
1734
1735   flukaGeom->Cone(R21, R21, -1.,  -1., 
1736                   zvac4, zch21, posfluka,"NIW", "MF", "$SHS");
1737   flukaGeom->Cone(R21, R21, -1.,  -1., 
1738                   zch21, zch22, posfluka,"AIR", "MF", "$SHS");
1739   flukaGeom->Cone(R21, R21, -1.,  -1., 
1740                   zch22, zvac6, posfluka,"NIW", "MF", "$SHS");
1741
1742
1743   flukaGeom->Finish();
1744
1745 // 
1746 // end Fluka
1747 //
1748 // Outer Pb Cone
1749
1750   if (fPbCone) {
1751
1752       par0[0]  = 0.;
1753       par0[1]  = 360.;
1754       par0[2]  = 10.;
1755 /*
1756 //    start of cone
1757       par0[3]  = zConeE;
1758       par0[4]  = 30.;
1759       par0[5]  = 30.01;
1760 //    3rd station
1761       par0[6]  = zch31;
1762       par0[7]  = 30.;
1763       par0[8]  = 30.+(zch31-zConeE)*TMath::Tan(thetaOpenPbO);
1764
1765       par0[9]   = zch31;
1766       par0[10]  = 30.0;
1767       par0[11]  = par0[8]-1.;
1768       
1769
1770       par0[12]  = zch32;
1771       par0[13]  = 30.0;
1772       par0[14]  = par0[11];
1773 */
1774       par0[ 3]  = zch32;
1775       par0[ 4]  = 30.;
1776       par0[ 5]  = 30.+(zch32-zConeE)*TMath::Tan(thetaOpenPbO);
1777
1778 //    4th station
1779       par0[ 6]  = zch41;
1780       par0[ 7]  = 30.;
1781       par0[ 8]  = 30.+(zch41-zConeE)*TMath::Tan(thetaOpenPbO);
1782
1783       par0[ 9]   = zch41;
1784       par0[10]  = 30.;
1785       par0[11]  = 37.5;  
1786                                           // recess erice2000
1787       par0[12]  = zch42;
1788       par0[13]  = 30.;
1789       par0[14]  = par0[11];
1790
1791       par0[15]  = zch42;
1792       par0[16]  = 30.;
1793       par0[17]  = 30.+(zch42-zConeE)*TMath::Tan(thetaOpenPbO);
1794
1795 //    5th station
1796       par0[18]  = zch51;
1797       par0[19]  = 30.;
1798       par0[20]  = 30.+(zch51-zConeE)*TMath::Tan(thetaOpenPbO);
1799
1800       par0[21]  = zch51;
1801       par0[22]  = 30.;
1802       par0[23]  = 37.5;                                            // recess erice2000
1803
1804       par0[24]  = zch52;
1805       par0[25]  = 30.;
1806       par0[26]  = par0[23];
1807
1808       par0[27]  = zch52;
1809       par0[28]  = 30.;
1810       par0[29]  = 30.+(zch52-zConeE)*TMath::Tan(thetaOpenPbO);
1811 // end of cone
1812       par0[30]  = zFilterIn;
1813       par0[31]  = 30.;
1814       par0[32]  = par0[29];
1815 //
1816       gMC->Gsvolu("YOPB", "PCON", idtmed[kPb], par0, 33);
1817       dz=0.;
1818       gMC->Gspos("YOPB", 1, "ALIC", 0., 0., dz, 0, "ONLY");
1819   }
1820 }
1821
1822 void AliSHILvF::Init()
1823 {
1824   //
1825   // Initialise the muon shield after it has been built
1826   //
1827   Int_t i;
1828   //
1829   printf("\n");
1830   for(i=0;i<35;i++) printf("*");
1831   printf(" SHILvF_INIT ");
1832   for(i=0;i<35;i++) printf("*");
1833   printf("\n");
1834   //
1835   // Here the SHIL initialisation code (if any!)
1836   for(i=0;i<80;i++) printf("*");
1837   printf("\n");
1838 }