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