]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STRUCT/AliSHILv3.cxx
Removing inheritances from TAttLine, TAttMarker and AliRndm in AliModule. The copy...
[u/mrichter/AliRoot.git] / STRUCT / AliSHILv3.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 /* $Id $ */
17
18 //-------------------------------------------------------------------------
19 // The small angle absorber SAA (beam shield)
20 // Author: A.Morsch
21 // andreas.morsch@cern.ch
22 //-------------------------------------------------------------------------
23
24 #include <TVirtualMC.h>
25 #include <TArrayI.h>
26 #include <TGeoVolume.h>
27 #include <TGeoTube.h>
28 #include <TGeoManager.h>
29 #include <TGeoMatrix.h>
30 #include <TGeoCompositeShape.h>
31 #include <TGeoBBox.h>
32 #include <TGeoPgon.h>
33 #include <TGeoCone.h>
34
35 #include "AliSHILv3.h"
36 #include "AliConst.h"
37 #include "AliLog.h"
38
39 ClassImp(AliSHILv3)
40  
41 //_____________________________________________________________________________
42 AliSHILv3::AliSHILv3()
43 {
44   //
45   // Default constructor for muon shield
46   //
47 }
48  
49 //_____________________________________________________________________________
50 AliSHILv3::AliSHILv3(const char *name, const char *title)
51   : AliSHIL(name,title)
52 {
53   //
54   // Standard constructor for muon shield
55   //
56 }
57  
58 //_____________________________________________________________________________
59 void AliSHILv3::CreateGeometry()
60 {
61 //
62 // The geometry of the small angle absorber "Beam Shield"
63 //
64     Float_t dz, dr, z, rmax;
65 //
66 // The top volume
67 //
68     TGeoVolume* top = gGeoManager->GetVolume("ALIC");
69     
70 //
71 // Translations
72 //
73     TGeoTranslation* vec0 = new TGeoTranslation(0., 0., 0.);
74 //  Rotations
75     TGeoRotation* rot000 = new TGeoRotation("rot000",  90.,   0., 90.,  90., 0., 0.);
76     TGeoRotation* rot090 = new TGeoRotation("rot090",  90.,  90., 90., 180., 0., 0.);
77     TGeoRotation* rot180 = new TGeoRotation("rot180",  90., 180., 90., 270., 0., 0.);
78     TGeoRotation* rot270 = new TGeoRotation("rot270",  90., 270., 90.,   0., 0., 0.);
79 //
80 // Media
81 //
82     TGeoMedium* kMedNiW     = gGeoManager->GetMedium("SHIL_Ni/W0");
83     TGeoMedium* kMedNiWsh   = gGeoManager->GetMedium("SHIL_Ni/W3");
84     TGeoMedium* kMedSteel   = gGeoManager->GetMedium("SHIL_ST_C0");
85     TGeoMedium* kMedSteelSh = gGeoManager->GetMedium("SHIL_ST_C3");
86     TGeoMedium* kMedAir     = gGeoManager->GetMedium("SHIL_AIR_C0");
87     TGeoMedium* kMedAirMu   = gGeoManager->GetMedium("SHIL_AIR_MUON");
88     TGeoMedium* kMedPb      = gGeoManager->GetMedium("SHIL_PB_C0");
89     TGeoMedium* kMedPbSh    = gGeoManager->GetMedium("SHIL_PB_C2");
90     TGeoMedium* kMedConc    = gGeoManager->GetMedium("SHIL_CC_C0");
91 //
92     const Float_t kDegRad = TMath::Pi() / 180.;
93     const Float_t kAngle02   = TMath::Tan( 2.00   * kDegRad);   
94     const Float_t kAngle0071 = TMath::Tan( 0.71   * kDegRad);   
95
96
97 ///////////////////////////////////
98 //    FA Tungsten Tail           //
99 //    Drawing ALIP2A__0049       //
100 //    Drawing ALIP2A__0111       //
101 ///////////////////////////////////
102 //
103 //    The tail as built is shorter than in drawing ALIP2A__0049. 
104 //    The CDD data base has to be updated !
105 //
106 //    Inner radius at the entrance of the flange
107       Float_t rInFaWTail1  = 13.98/2.;
108 //    Outer radius at the entrance of the flange
109       Float_t rOuFaWTail1  = 52.00/2.;
110 //    Outer radius at the end of the section inside the FA
111       Float_t rOuFaWTail2  = 35.27/2.;
112 //    Length of the Flange section inside the FA
113       Float_t dzFaWTail1   =  6.00;
114 //    Length of the Flange section ouside the FA
115       Float_t dzFaWTail2   = 12.70;
116 //    Inner radius at the end of the section inside the FA 
117       Float_t rInFaWTail2  = rInFaWTail1 +  dzFaWTail1 * kAngle0071;
118 //    Inner radius at the end of the flange
119       Float_t rInFaWTail3  = rInFaWTail2 +  dzFaWTail2 * kAngle0071;
120 //    Outer radius at the end of the flange
121       Float_t rOuFaWTail3  = rOuFaWTail2 +  dzFaWTail2 * kAngle02;
122 //    Outer radius of the recess for station 1
123       Float_t rOuFaWTailR  = 30.8/2.;
124 //    Length of the recess
125       Float_t dzFaWTailR   = 36.00;
126 //    Inner radiues at the end of the recess      
127       Float_t rInFaWTail4  =  rInFaWTail3 +  dzFaWTailR * kAngle0071;
128 //    Outer radius at the end of the recess      
129       Float_t rOuFaWTail4  =  rOuFaWTail3 +  dzFaWTailR * kAngle02;
130 //    Inner radius of the straight section
131       Float_t rInFaWTailS  = 22.30/2.;
132 //    Length of the bulge
133       Float_t dzFaWTailB   = 13.0;
134 //    Outer radius at the end of the bulge
135       Float_t rOuFaWTailB  =  rOuFaWTail4 +  dzFaWTailB * kAngle02;
136 //    Outer radius at the end of the tail 
137       Float_t rOuFaWTailE  = 31.6/2.;
138 //    Total length of the tail
139       Float_t dzFaWTail    = 70.7;
140
141       TGeoPcon* shFaWTail = new TGeoPcon(0., 360., 10);
142       z    = 0.;
143 //    Flange section inside FA
144       shFaWTail->DefineSection(0,  z, rInFaWTail1, rOuFaWTail1);
145       z += dzFaWTail1;
146       shFaWTail->DefineSection(1,  z, rInFaWTail2, rOuFaWTail1);      
147       shFaWTail->DefineSection(2,  z, rInFaWTail2, rOuFaWTail2);      
148 //    Flange section outside FA
149       z +=  dzFaWTail2;
150       shFaWTail->DefineSection(3,  z, rInFaWTail3, rOuFaWTail3);      
151       shFaWTail->DefineSection(4,  z, rInFaWTail3, rOuFaWTailR);
152 //    Recess Station 1
153       z +=  dzFaWTailR;
154       shFaWTail->DefineSection(5,  z, rInFaWTail4, rOuFaWTailR); 
155       shFaWTail->DefineSection(6,  z, rInFaWTailS, rOuFaWTail4);
156 //    Bulge
157       z += dzFaWTailB;
158       shFaWTail->DefineSection(7,  z, rInFaWTailS, rOuFaWTailB);
159       shFaWTail->DefineSection(8,  z, rInFaWTailS, rOuFaWTailE);
160 //    End
161       z =  dzFaWTail;
162       shFaWTail->DefineSection(9,  z, rInFaWTailS, rOuFaWTailE);
163       
164       TGeoVolume* voFaWTail = new TGeoVolume("YFaWTail", shFaWTail, kMedNiW);
165 //
166 //    Define an inner region with higher transport cuts
167       TGeoPcon* shFaWTailI = new TGeoPcon(0., 360., 4);
168       z  = 0.;
169       dr = 3.5;
170       shFaWTailI->DefineSection(0, z, rInFaWTail1,  rInFaWTail1 + dr);
171       z += (dzFaWTail1 + dzFaWTail2 +  dzFaWTailR);
172       shFaWTailI->DefineSection(1, z, rInFaWTail4,  rInFaWTail4 + dr);
173       shFaWTailI->DefineSection(2, z, rInFaWTailS,  rInFaWTailS + dr);
174       z = dzFaWTail;
175       shFaWTailI->DefineSection(3, z, rInFaWTailS,  rInFaWTailS + dr);
176       TGeoVolume* voFaWTailI = new TGeoVolume("YFaWTailI", shFaWTailI, kMedNiWsh);
177       voFaWTail->AddNode(voFaWTailI, 1, vec0);
178       
179 ///////////////////////////////////
180 //                               //
181 // Recess Station 1              //
182 // Drawing ALIP2A__0260          //
183 ///////////////////////////////////
184
185 ///////////////////////////////////
186 //    FA W-Ring 2                //
187 //    Drawing ALIP2A__0220       //
188 ///////////////////////////////////
189       const Float_t kFaWring2Rinner  = 15.40;
190       const Float_t kFaWring2Router  = 18.40;
191       const Float_t kFaWring2HWidth  =  3.75;
192       const Float_t kFaWring2Cutoffx =  3.35;
193       const Float_t kFaWring2Cutoffy =  3.35;
194       TGeoTubeSeg* shFaWring2a  = new TGeoTubeSeg(kFaWring2Rinner, kFaWring2Router, kFaWring2HWidth, 0., 90.);
195       shFaWring2a->SetName("shFaWring2a");
196       TGeoBBox* shFaWring2b  = new TGeoBBox(kFaWring2Router / 2., kFaWring2Router / 2., kFaWring2HWidth);
197       shFaWring2b->SetName("shFaWring2b");
198       TGeoTranslation* trFaWring2b 
199           = new TGeoTranslation("trFaWring2b", kFaWring2Router / 2. + kFaWring2Cutoffx, kFaWring2Router / 2. + kFaWring2Cutoffy, 0.);
200       trFaWring2b->RegisterYourself();
201       TGeoCompositeShape*  shFaWring2 = new TGeoCompositeShape("shFaWring2", "(shFaWring2a)*(shFaWring2b:trFaWring2b)");
202       TGeoVolume* voFaWring2    = new TGeoVolume("YFA_WRING2", shFaWring2, kMedNiW);
203
204 ///////////////////////////////////
205 //    FA W-Ring 3                //
206 //    Drawing ALIP2A__0219       //
207 ///////////////////////////////////
208       const Float_t kFaWring3Rinner  = 15.40;
209       const Float_t kFaWring3Router  = 18.40;
210       const Float_t kFaWring3HWidth  =  3.75;
211       const Float_t kFaWring3Cutoffx =  3.35;
212       const Float_t kFaWring3Cutoffy =  3.35;
213       TGeoTubeSeg* shFaWring3a  = new TGeoTubeSeg(kFaWring3Rinner, kFaWring3Router, kFaWring3HWidth, 0., 90.);
214       shFaWring3a->SetName("shFaWring3a");
215       TGeoBBox* shFaWring3b  = new TGeoBBox(kFaWring3Router / 2., kFaWring3Router / 2., kFaWring3HWidth);
216       shFaWring3b->SetName("shFaWring3b");
217       TGeoTranslation* trFaWring3b 
218           = new TGeoTranslation("trFaWring3b", kFaWring3Router / 2. + kFaWring3Cutoffx, kFaWring3Router / 2. + kFaWring3Cutoffy, 0.);
219       trFaWring3b->RegisterYourself();
220       TGeoCompositeShape*  shFaWring3 = new TGeoCompositeShape("shFaWring3", "(shFaWring3a)*(shFaWring3b:trFaWring3b)");
221       TGeoVolume* voFaWring3    = new TGeoVolume("YFA_WRING3", shFaWring3, kMedNiW);
222
223 ///////////////////////////////////
224 //    FA W-Ring 5                //
225 //    Drawing ALIP2A__0221       //
226 ///////////////////////////////////
227       const Float_t kFaWring5Rinner = 15.40;
228       const Float_t kFaWring5Router = 18.67;
229       const Float_t kFaWring5HWidth =  1.08;
230       TGeoVolume* voFaWring5    = new TGeoVolume("YFA_WRING5", new TGeoTube(kFaWring5Rinner, kFaWring5Router, kFaWring5HWidth), kMedNiW);
231
232 //
233 // Position the rings in the assembly 
234 //      
235       TGeoVolumeAssembly* asFaExtraShield = new TGeoVolumeAssembly("YCRE");
236 // Distance between rings
237       const Float_t kFaDWrings = 1.92;
238 //
239       dz = 0.;
240       
241       dz +=  kFaWring2HWidth;
242       asFaExtraShield->AddNode(voFaWring2,    1, new TGeoCombiTrans(0., 0., dz, rot090));
243       asFaExtraShield->AddNode(voFaWring2,    2, new TGeoCombiTrans(0., 0., dz, rot270));
244       dz +=   kFaWring2HWidth;
245       dz +=   kFaDWrings;
246       dz +=   kFaWring3HWidth;
247       asFaExtraShield->AddNode(voFaWring3,    1, new TGeoCombiTrans(0., 0., dz, rot000));
248       asFaExtraShield->AddNode(voFaWring3,    2, new TGeoCombiTrans(0., 0., dz, rot180));
249       dz +=   kFaWring3HWidth;   
250       dz +=   kFaWring5HWidth;   
251       asFaExtraShield->AddNode(voFaWring5,    1, new TGeoTranslation(0., 0., dz));
252       dz +=   kFaWring5HWidth;   
253       dz +=   kFaWring3HWidth;   
254       asFaExtraShield->AddNode(voFaWring3,    3, new TGeoCombiTrans(0., 0., dz, rot090));
255       asFaExtraShield->AddNode(voFaWring3,    4, new TGeoCombiTrans(0., 0., dz, rot270));
256       dz +=   kFaWring3HWidth;   
257       dz +=   kFaDWrings;
258       dz +=   kFaWring2HWidth;
259       asFaExtraShield->AddNode(voFaWring2,    3, new TGeoCombiTrans(0., 0., dz, rot000));
260       asFaExtraShield->AddNode(voFaWring2,    4, new TGeoCombiTrans(0., 0., dz, rot180));
261       dz +=   kFaWring2HWidth;
262
263       
264 ///////////////////////////////////////
265 //                SAA1               //
266 ///////////////////////////////////////
267
268
269 ///////////////////////////////////////
270 //          FA/SAA1  W Joint         //
271 //          Drawing ALIP2A__0060     //
272 ///////////////////////////////////////
273
274 // Length of flange FA side      
275       Float_t dzFaSaa1F1  =  2.8;
276 // Inner radius of flange FA side
277       Float_t rInFaSaa1F1 = 32.0/2.;
278 // Outer radius of flange FA side
279       Float_t rOuFaSaa1F1 = 39.5/2.;
280 // Length of first straight section
281       Float_t dzFaSaa1S1  = 18.5 - dzFaSaa1F1;
282 // Inner radius of first straight section
283       Float_t rInFaSaa1S1 = 22.3/2.;
284 // Length of 45 deg transition region
285       Float_t  dzFaSaa1T1 =  2.2;
286 // Inner radius of second straight section
287       Float_t rInFaSaa1S2 = 17.9/2.;
288 // Length of second straight section
289       Float_t dzFaSaa1S2  = 10.1;
290 // Length of flange SAA1 side      
291 //    Float_t dzFaSaa1F2  =  4.0;
292 // Inner radius of flange FA side
293       Float_t rInFaSaa1F2 = 25.2/2.;
294 // Length of joint
295       Float_t dzFaSaa1    = 34.8;
296 // Outer Radius at the end of the joint
297       Float_t rOuFaSaa1E  = 41.93/2.;
298       
299       
300       TGeoPcon* shFaSaa1 = new TGeoPcon(0., 360., 8);
301       z = 0;
302 // Flange FA side      
303       shFaSaa1->DefineSection( 0, z, rInFaSaa1F1, rOuFaSaa1F1);
304       z += dzFaSaa1F1;
305       shFaSaa1->DefineSection( 1, z, rInFaSaa1F1, 40.0);
306       shFaSaa1->DefineSection( 2, z, rInFaSaa1S1, 40.0);
307 // First straight section
308       z += dzFaSaa1S1;
309       shFaSaa1->DefineSection( 3, z, rInFaSaa1S1, 40.0);
310 // 45 deg transition region
311       z += dzFaSaa1T1;
312       shFaSaa1->DefineSection( 4, z, rInFaSaa1S2, 40.0);
313 // Second straight section
314       z += dzFaSaa1S2;
315       shFaSaa1->DefineSection( 5, z, rInFaSaa1S2, 40.0);
316       shFaSaa1->DefineSection( 6, z, rInFaSaa1F2, 40.0);
317 // Flange SAA1 side
318       z = dzFaSaa1;
319       shFaSaa1->DefineSection( 7, z, rInFaSaa1F2, rOuFaSaa1E);
320
321 // Outer 2 deg line
322       for (Int_t i  = 1; i < 7; i++) {
323           Double_t z    = shFaSaa1->GetZ(i);
324           Double_t r1   = shFaSaa1->GetRmin(i);  
325           Double_t r2 = 39.5/2. + z * TMath::Tan(2. * kDegRad) - 0.01;
326           shFaSaa1->DefineSection(i, z, r1, r2);
327       }
328       TGeoVolume* voFaSaa1 = new TGeoVolume("YFASAA1", shFaSaa1, kMedNiWsh);
329 //
330 // Outer region with lower transport cuts
331       TGeoCone* shFaSaa1O   = new TGeoCone(dzFaSaa1/2., rOuFaSaa1F1 - 3.5, rOuFaSaa1F1, rOuFaSaa1E - 3.5, rOuFaSaa1E);
332       TGeoVolume* voFaSaa1O = new TGeoVolume("YFASAA1O", shFaSaa1O, kMedNiW);
333       voFaSaa1->AddNode(voFaSaa1O, 1, new TGeoTranslation(0., 0., dzFaSaa1/2.));
334       
335
336 ///////////////////////////////////
337 //    SAA1 Steel Envelope        //
338 //    Drawing ALIP2A__0039       //
339 ///////////////////////////////////
340       
341       Float_t rOut;      // Outer radius
342 // Thickness of the steel envelope
343       Float_t dSt = 4.;
344 // 4 Section
345 // z-positions
346       Float_t zSaa1StEnv[5] = {111.2, 113.7, 229.3, 195.0};
347 // Radii
348 // 1
349       Float_t rOuSaa1StEnv1 = 40.4/2.;
350       Float_t rInSaa1StEnv1 = rOuSaa1StEnv1 - dSt;
351 // 2  
352       Float_t rInSaa1StEnv2 = 41.7/2.;
353       Float_t rOuSaa1StEnv2 = rInSaa1StEnv2 + dSt / TMath::Cos(2.0 * kDegRad);
354 // 3         
355       Float_t rOuSaa1StEnv3 = 57.6/2.;
356       Float_t rInSaa1StEnv3 = rOuSaa1StEnv3 - dSt;
357 // 4
358       Float_t rInSaa1StEnv4 = 63.4/2.;
359       Float_t rOuSaa1StEnv4 = rInSaa1StEnv4 + dSt / TMath::Cos(1.6 * kDegRad);
360 // end         
361       Float_t rInSaa1StEnv5 = 74.28/2.;
362       Float_t rOuSaa1StEnv5 = rInSaa1StEnv5 + dSt / TMath::Cos(1.6 * kDegRad);
363 // Relative starting position
364       Float_t zSaa1StEnvS = 3.;
365       
366       TGeoPcon* shSaa1StEnv  = new TGeoPcon(0., 360., 11);
367 // 1st Section
368       z = zSaa1StEnvS;
369       shSaa1StEnv->DefineSection( 0, z, rInSaa1StEnv1, rOuSaa1StEnv1);
370       z += (zSaa1StEnv[0] - dSt);
371       shSaa1StEnv->DefineSection( 1, z, rInSaa1StEnv1, rOuSaa1StEnv1);
372 // 1 - 2
373       shSaa1StEnv->DefineSection( 2, z, rInSaa1StEnv1, rOuSaa1StEnv2);
374       z +=  dSt;
375       shSaa1StEnv->DefineSection( 3, z, rInSaa1StEnv1, rOuSaa1StEnv2);      
376 // 2nd Section
377       shSaa1StEnv->DefineSection( 4, z, rInSaa1StEnv2, rOuSaa1StEnv2);      
378       z += zSaa1StEnv[1];
379       shSaa1StEnv->DefineSection( 5, z, rInSaa1StEnv3, rOuSaa1StEnv3);      
380 // 3rd Section  
381       z += (zSaa1StEnv[2] - dSt);
382       shSaa1StEnv->DefineSection( 6, z, rInSaa1StEnv3, rOuSaa1StEnv3);      
383 // 3 - 4
384       shSaa1StEnv->DefineSection( 7, z, rInSaa1StEnv3, rOuSaa1StEnv4);
385       z += dSt;
386       shSaa1StEnv->DefineSection( 8, z, rInSaa1StEnv3, rOuSaa1StEnv4);
387 // 4th Section
388       shSaa1StEnv->DefineSection( 9, z, rInSaa1StEnv4, rOuSaa1StEnv4);
389       z += zSaa1StEnv[3];
390       shSaa1StEnv->DefineSection(10, z, rInSaa1StEnv5, rOuSaa1StEnv5);      
391       TGeoVolume* voSaa1StEnv  =  new TGeoVolume("YSAA1_SteelEnvelope", shSaa1StEnv, kMedSteel);
392
393
394       
395  
396
397 ///////////////////////////////////
398 //    SAA1 W-Pipe                //
399 //    Drawing ALIP2A__0059       //
400 ///////////////////////////////////
401 //
402 //    Flange FA side
403 //    Length of first section      
404       Float_t dzSaa1WPipeF1  = 0.9;
405 //    Outer radius 
406       Float_t rOuSaa1WPipeF1 = 24.5/2.;
407 //    Inner Radius
408       Float_t rInSaa1WPipeF1 = 22.0/2.;
409 //    Length of second section
410       Float_t dzSaa1WPipeF11 =  2.1;
411 //    Inner Radius
412       Float_t rInSaa1WPipeF11 = 18.5/2.;
413 //
414 //    Central tube 
415 //    Length 
416       Float_t dzSaa1WPipeC = 111.2;
417 //    Inner Radius at the end
418       Float_t rInSaa1WPipeC = 22.0/2.;
419 //    Outer Radius
420       Float_t rOuSaa1WPipeC = 31.9/2.;
421 //
422 //    Flange SAA2 Side
423 //    Length
424       Float_t dzSaa1WPipeF2  = 6.0;
425 //    Outer radius 
426       Float_t rOuSaa1WPipeF2 = 41.56/2.;
427
428 //
429       TGeoPcon* shSaa1WPipe  = new TGeoPcon(0., 360., 8);
430       z = 0.;
431 // Flange FA side first section
432       shSaa1WPipe->DefineSection( 0, z, rInSaa1WPipeF1 , rOuSaa1WPipeF1);
433       z += dzSaa1WPipeF1;
434       shSaa1WPipe->DefineSection( 1, z, rInSaa1WPipeF1 , rOuSaa1WPipeF1);
435 // Flange FA side second section
436       shSaa1WPipe->DefineSection( 2, z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
437       z += dzSaa1WPipeF11;
438       shSaa1WPipe->DefineSection( 3, z, rInSaa1WPipeF11, rOuSaa1WPipeF1);
439 // Central Section
440       shSaa1WPipe->DefineSection( 4, z, rInSaa1WPipeF11, rOuSaa1WPipeC);
441       z += dzSaa1WPipeC;
442       shSaa1WPipe->DefineSection( 5, z, rInSaa1WPipeC,   rOuSaa1WPipeC);
443 // Flange SAA2 side
444       shSaa1WPipe->DefineSection( 6, z, rInSaa1WPipeC,   rOuSaa1WPipeF2);
445       z +=  dzSaa1WPipeF2;
446       shSaa1WPipe->DefineSection( 7, z, rInSaa1WPipeC,   rOuSaa1WPipeF2);
447
448       TGeoVolume* voSaa1WPipe  =  new TGeoVolume("YSAA1_WPipe", shSaa1WPipe, kMedNiW);
449 //
450 // Inner region with higher transport cuts
451       TGeoTube*   shSaa1WPipeI = new TGeoTube(rInSaa1WPipeC, rOuSaa1WPipeC, dzSaa1WPipeC/2.);
452       TGeoVolume* voSaa1WPipeI =  new TGeoVolume("YSAA1_WPipeI", shSaa1WPipeI, kMedNiWsh);
453       voSaa1WPipe->AddNode(voSaa1WPipeI, 1, new TGeoTranslation(0., 0., dzSaa1WPipeF1 + dzSaa1WPipeF11 + dzSaa1WPipeC/2));
454       
455
456 ///////////////////////////////////
457 //    SAA1 Pb Components         //
458 //    Drawing ALIP2A__0078       //
459 ///////////////////////////////////
460 //
461 //    Inner angle
462       Float_t tanAlpha = TMath::Tan(1.69    / 2. * kDegRad);
463       Float_t tanBeta  = TMath::Tan(3.20    / 2. * kDegRad);    
464 // 
465 //    1st Section 2deg opening cone
466 //    Length 
467       Float_t dzSaa1PbComp1 = 100.23;
468 //    Inner radius at entrance
469       Float_t rInSaa1PbComp1 = 22.0/2.; // It's 21 cm diameter in the drawing. Is this a typo ??!!
470 //    Outer radius at entrance
471       Float_t rOuSaa1PbComp1 = 42.0/2.;
472 //
473 //    2nd Section: Straight Section
474 //    Length 
475       Float_t dzSaa1PbComp2  = 236.77;
476 //    Inner radius
477       Float_t rInSaa1PbComp2 = rInSaa1PbComp1 + dzSaa1PbComp1 * tanAlpha;
478 //    Outer radius
479       Float_t rOuSaa1PbComp2 = 49.0/2.;
480 //
481 //    3rd Section: 1.6deg opening cone until bellow
482 //    Length 
483       Float_t dzSaa1PbComp3 = 175.6;
484 //    Inner radius        
485       Float_t  rInSaa1PbComp3 = rInSaa1PbComp2 + dzSaa1PbComp2 * tanAlpha;
486 //    Outer radius
487       Float_t rOuSaa1PbComp3 = 62.8/2.;
488 //   
489 //   4th Section: Bellow region
490       Float_t dzSaa1PbComp4  = 26.4;
491 //    Inner radius        
492       Float_t  rInSaa1PbComp4 = 37.1/2.;
493       Float_t  rInSaa1PbCompB = 43.0/2.;
494 //    Outer radius
495       Float_t rOuSaa1PbComp4  = rOuSaa1PbComp3 +  dzSaa1PbComp3 * tanBeta;
496 //
497 //   5th Section: Flange SAA2 side
498 //   1st detail 
499       Float_t dzSaa1PbCompF1  = 4.;
500       Float_t rOuSaa1PbCompF1 = 74.1/2.;
501 //   2nd detail       
502       Float_t dzSaa1PbCompF2  = 3.;
503       Float_t rOuSaa1PbCompF2 = 66.0/2.;
504       Float_t rOuSaa1PbCompF3 = 58.0/2.;
505       
506
507       TGeoPcon* shSaa1PbComp  = new TGeoPcon(0., 360., 11);
508       z = 120.2;
509 // 2 deg opening cone
510       shSaa1PbComp->DefineSection( 0, z, rInSaa1PbComp1, rOuSaa1PbComp1);
511       z += dzSaa1PbComp1;
512       shSaa1PbComp->DefineSection( 1, z, rInSaa1PbComp2, rOuSaa1PbComp2);
513 // Straight section
514       z += dzSaa1PbComp2;
515       shSaa1PbComp->DefineSection( 2, z, rInSaa1PbComp3, rOuSaa1PbComp2);
516 // 1.6 deg opening cone
517       shSaa1PbComp->DefineSection( 3, z, rInSaa1PbComp3, rOuSaa1PbComp3);
518       z += dzSaa1PbComp3;
519       shSaa1PbComp->DefineSection( 4, z, rInSaa1PbComp4, rOuSaa1PbComp4);
520 // Bellow region until outer flange
521       shSaa1PbComp->DefineSection( 5, z, rInSaa1PbCompB, rOuSaa1PbComp4);
522       z += (dzSaa1PbComp4 - dzSaa1PbCompF1 -  dzSaa1PbCompF2);
523       shSaa1PbComp->DefineSection( 6, z, rInSaa1PbCompB, rOuSaa1PbCompF1);
524       shSaa1PbComp->DefineSection( 7, z, rInSaa1PbCompB, rOuSaa1PbCompF2);
525 // Flange first step
526       z +=  dzSaa1PbCompF1;
527       shSaa1PbComp->DefineSection( 8, z, rInSaa1PbCompB, rOuSaa1PbCompF2);
528       shSaa1PbComp->DefineSection( 9, z, rInSaa1PbCompB, rOuSaa1PbCompF3);
529 // Flange second step
530       z +=  dzSaa1PbCompF2;
531       shSaa1PbComp->DefineSection( 10, z, rInSaa1PbCompB, rOuSaa1PbCompF3);
532
533       TGeoVolume* voSaa1PbComp  =  new TGeoVolume("YSAA1_PbComp", shSaa1PbComp, kMedPb);
534 //
535 // Inner region with higher transport cuts
536       TGeoPcon*   shSaa1PbCompI = MakeShapeFromTemplate(shSaa1PbComp, 0., -3.);
537       TGeoVolume* voSaa1PbCompI =  new TGeoVolume("YSAA1_PbCompI", shSaa1PbCompI, kMedPbSh);
538       voSaa1PbComp->AddNode(voSaa1PbCompI, 1, vec0);
539       
540 ///////////////////////////////////
541 //    SAA1 W-Cone                //
542 //    Drawing ALIP2A__0058       //
543 ///////////////////////////////////
544       // Length of the Cone
545       Float_t dzSaa1WCone = 52.9;
546       // Inner and outer radii
547       Float_t rInSaa1WCone1 = 20.4;
548       Float_t rOuSaa1WCone1 = rInSaa1WCone1 + 0.97;
549       Float_t rOuSaa1WCone2 = rInSaa1WCone1 + 2.80;
550       // relative z-position 
551       Float_t zSaa1WCone    = 9.3;
552       
553       
554       TGeoPcon* shSaa1WCone  = new TGeoPcon(0., 360., 2);
555       z = zSaa1WCone;
556       shSaa1WCone->DefineSection( 0, z, rInSaa1WCone1, rOuSaa1WCone1);
557       z += dzSaa1WCone;
558       shSaa1WCone->DefineSection( 1, z, rInSaa1WCone1, rOuSaa1WCone2);
559       TGeoVolume* voSaa1WCone  =  new TGeoVolume("YSAA1_WCone", shSaa1WCone, kMedNiW);
560
561 ///////////////////////////////////
562 //    SAA1 Steel-Ring            //
563 //    Drawing ALIP2A__0040       //
564 ///////////////////////////////////
565 //
566 //    Length of the ring
567       Float_t dzSaa1StRing = 4.;
568 //    Inner and outer radius
569       Float_t rInSaa1String = 33.0;
570       Float_t rOuSaa1String = 41.1;      
571 //    Relative z-position
572       Float_t zSaa1StRing   = 652.2;
573       TGeoPcon* shSaa1StRing  = new TGeoPcon(0., 360., 2);
574       z = zSaa1StRing;
575       shSaa1StRing->DefineSection( 0, z, rInSaa1String, rOuSaa1String);
576       z += dzSaa1StRing;
577       shSaa1StRing->DefineSection( 1, z, rInSaa1String, rOuSaa1String);
578       TGeoVolume* voSaa1StRing  =  new TGeoVolume("YSAA1_StRing", shSaa1StRing, kMedSteel);
579
580 ///////////////////////////////////
581 //    SAA1 Inner Tube            //
582 //    Drawing ALIP2A__0082       //
583 ///////////////////////////////////
584 //
585 // Length of saa2:               659.2 cm
586 // Length of inner tube:         631.9 cm
587 // Lenth of bellow cavern:        27.3 cm    
588 // Radius at entrance 18.5/2,  d = 0.3
589 // Radius at exit     37.1/2,  d = 0.3 
590 //
591       Float_t dzSaa1InnerTube     = 631.9/2.;  // Half length of the tube  
592       Float_t rInSaa1InnerTube    =  18.2/2.;  // Radius at entrance
593       Float_t rOuSaa1InnerTube    =  36.8/2.;  // Radius at exit
594       Float_t dSaa1InnerTube      =   0.2   ;  // Thickness      
595       TGeoVolume* voSaa1InnerTube = new TGeoVolume("YSAA1_InnerTube", 
596                                                    new TGeoCone(dzSaa1InnerTube, 
597                                                                 rInSaa1InnerTube - dSaa1InnerTube, rInSaa1InnerTube,
598                                                                 rOuSaa1InnerTube - dSaa1InnerTube, rOuSaa1InnerTube),
599                                                    kMedSteelSh);
600
601 ///////////////////////////////////
602 //    SAA1 Outer Shape           //
603 //    Drawing ALIP2A__0107       //
604 ///////////////////////////////////
605       // Total length 
606       Float_t dzSaa1 = 659.2;
607       //
608       TGeoPcon* shSaa1M  = new TGeoPcon(0., 360., 20);
609       Float_t kSec = 0.01; // security distance to avoid trivial extrusions
610       Float_t rmin = rInSaa1InnerTube - dSaa1InnerTube - kSec;
611       rmax = rOuSaa1InnerTube - dSaa1InnerTube - kSec;
612       z = 0.;
613       shSaa1M->DefineSection( 0, z, rmin, rOuSaa1WPipeF1);
614       z += dzSaa1WPipeF1;
615       shSaa1M->DefineSection( 1, z, rmin, rOuSaa1WPipeF1);
616       shSaa1M->DefineSection( 2, z, 0.,   rOuSaa1WPipeF1);
617       z += dzSaa1WPipeF11;
618       shSaa1M->DefineSection( 3, z, 0.,   rOuSaa1WPipeF1);
619       shSaa1M->DefineSection( 4, z, 0.,   rOuSaa1StEnv1);
620       z = zSaa1WCone;
621       shSaa1M->DefineSection( 5, z, 0.,   rOuSaa1StEnv1);
622       shSaa1M->DefineSection( 6, z, 0.,   rOuSaa1WCone1);
623       z += dzSaa1WCone;
624       shSaa1M->DefineSection( 7, z, 0.,   rOuSaa1WCone2);
625       shSaa1M->DefineSection( 8, z, 0.,   rOuSaa1StEnv1);
626       z =  zSaa1StEnv[0] - dSt + zSaa1StEnvS;
627       shSaa1M->DefineSection( 9, z, 0.,   rOuSaa1StEnv1);
628       shSaa1M->DefineSection(10, z, 0.,   rOuSaa1StEnv2);
629       z +=  (zSaa1StEnv[1] + dSt);
630       shSaa1M->DefineSection(11, z, 0.,   rOuSaa1StEnv3);
631       z +=  (zSaa1StEnv[2] - dSt);
632       shSaa1M->DefineSection(12, z, 0.,   rOuSaa1StEnv3);
633       shSaa1M->DefineSection(13, z, 0.,   rOuSaa1StEnv4);
634
635       z += (zSaa1StEnv[3] - dSt +  dzSaa1PbCompF1 + dzSaa1PbCompF2 - dzSaa1PbComp4);
636       Float_t rmaxSaa1 = shSaa1M->GetRmax(13) + (z - shSaa1M->GetZ(13)) * TMath::Tan(1.6 * kDegRad);
637
638       shSaa1M->DefineSection(14, z, 0.,    rmaxSaa1);
639       shSaa1M->DefineSection(15, z, rmax,  rmaxSaa1);
640       z = zSaa1StRing;     
641       shSaa1M->DefineSection(16, z, rmax, rOuSaa1String);
642       z += dzSaa1PbCompF1;
643       shSaa1M->DefineSection(17, z, rmax, rOuSaa1String);
644       shSaa1M->DefineSection(18, z, rmax, rOuSaa1PbCompF3);
645       z += dzSaa1PbCompF2;
646       shSaa1M->DefineSection(19, z, rmax, rOuSaa1PbCompF3);
647
648 //
649 //    Inner 1.69deg line
650       for (Int_t i  = 2; i < 15; i++) {
651           Double_t z    = shSaa1M->GetZ(i);
652           Double_t r2 = shSaa1M->GetRmax(i);     
653           Double_t r1 = rmin + (z - 0.9) * TMath::Tan(1.69 / 2. * kDegRad) - kSec;
654           shSaa1M->DefineSection(i, z, r1, r2);
655       }
656
657       TGeoVolume* voSaa1M  =  new TGeoVolume("YSAA1M", shSaa1M, kMedAir);
658
659
660 ///////////////////////////////////
661 //                               //
662 // Recess Station 2              //
663 // Drawing ALIP2A__0260          //
664 ///////////////////////////////////
665 ///////////////////////////////////
666 //    SAA1 W-Ring 1              //
667 //    Drawing ALIP2A__0217       //
668 ///////////////////////////////////
669       Float_t saa1Wring1Width  =  5.85;
670       TGeoPcon* shSaa1Wring1    = new TGeoPcon(0., 360., 2);
671       shSaa1Wring1->DefineSection(0, 0.00           , 20.30, 23.175);
672       shSaa1Wring1->DefineSection(1, saa1Wring1Width, 20.30, 23.400);
673       TGeoVolume* voSaa1Wring1  =  new TGeoVolume("YSAA1_WRING1", shSaa1Wring1, kMedNiW);
674
675 ///////////////////////////////////
676 //    SAA1 W-Ring 2              //
677 //    Drawing ALIP2A__0055       //
678 ///////////////////////////////////
679       Float_t saa1Wring2Rinner  = 20.30;
680       Float_t saa1Wring2Router  = 23.40;
681       Float_t saa1Wring2HWidth  =  3.75;
682       Float_t saa1Wring2Cutoffx =  4.45;
683       Float_t saa1Wring2Cutoffy =  4.45;
684       TGeoTubeSeg* shSaa1Wring2a  = new TGeoTubeSeg(saa1Wring2Rinner, saa1Wring2Router, saa1Wring2HWidth, 0., 90.);
685       shSaa1Wring2a->SetName("shSaa1Wring2a");
686       TGeoBBox* shSaa1Wring2b  = new TGeoBBox(saa1Wring2Router / 2., saa1Wring2Router / 2., saa1Wring2HWidth);
687       shSaa1Wring2b->SetName("shSaa1Wring2b");
688       TGeoTranslation* trSaa1Wring2b 
689           = new TGeoTranslation("trSaa1Wring2b", saa1Wring2Router / 2. + saa1Wring2Cutoffx, saa1Wring2Router / 2. + saa1Wring2Cutoffy, 0.);
690       trSaa1Wring2b->RegisterYourself();
691       TGeoCompositeShape*  shSaa1Wring2 = new TGeoCompositeShape("shSaa1Wring2", "(shSaa1Wring2a)*(shSaa1Wring2b:trSaa1Wring2b)");
692       TGeoVolume* voSaa1Wring2 = new TGeoVolume("YSAA1_WRING2", shSaa1Wring2, kMedNiW);
693
694 ///////////////////////////////////
695 //    SAA1 W-Ring 3              //
696 //    Drawing ALIP2A__0216       //
697 ///////////////////////////////////
698
699       Float_t saa1Wring3Rinner  = 20.30;
700       Float_t saa1Wring3Router  = 23.40;
701       Float_t saa1Wring3HWidth  =  3.75;
702       Float_t saa1Wring3Cutoffx =  4.50;
703       Float_t saa1Wring3Cutoffy =  4.40;
704       TGeoTubeSeg* shSaa1Wring3a  = new TGeoTubeSeg(saa1Wring3Rinner, saa1Wring3Router, saa1Wring3HWidth, 0., 90.);
705       shSaa1Wring3a->SetName("shSaa1Wring3a");
706       TGeoBBox* shSaa1Wring3b  = new TGeoBBox(saa1Wring3Router / 2., saa1Wring3Router / 2., saa1Wring3HWidth);
707       shSaa1Wring3b->SetName("shSaa1Wring3b");
708       TGeoTranslation* trSaa1Wring3b 
709           = new TGeoTranslation("trSaa1Wring3b", saa1Wring3Router / 2. + saa1Wring3Cutoffx, saa1Wring3Router / 2. + saa1Wring3Cutoffy, 0.);
710       trSaa1Wring3b->RegisterYourself();
711       TGeoCompositeShape*  shSaa1Wring3 = new TGeoCompositeShape("shSaa1Wring3", "(shSaa1Wring3a)*(shSaa1Wring3b:trSaa1Wring3b)");
712       TGeoVolume* voSaa1Wring3 = new TGeoVolume("YSAA1_WRING3", shSaa1Wring3, kMedNiW);
713
714 ///////////////////////////////////
715 //    SAA1 W-Ring 4              //
716 //    Drawing ALIP2A__0215       //
717 ///////////////////////////////////
718       Float_t saa1Wring4Width  =  5.85;
719       TGeoPcon* shSaa1Wring4  = new TGeoPcon(0., 360., 5);
720       shSaa1Wring4->DefineSection(0, 0.00, 20.30, 23.40);
721       shSaa1Wring4->DefineSection(1, 1.00, 20.30, 23.40);
722       shSaa1Wring4->DefineSection(2, 1.00, 20.30, 24.50);      
723       shSaa1Wring4->DefineSection(3, 4.85, 20.30, 24.80);
724       shSaa1Wring4->DefineSection(4, 5.85, 24.10, 24.80);
725       TGeoVolume* voSaa1Wring4  =  new TGeoVolume("YSAA1_WRING4", shSaa1Wring4, kMedNiW);
726
727 ///////////////////////////////////
728 //    SAA1 W-Ring 5              //
729 //    Drawing ALIP2A__0218       //
730 ///////////////////////////////////
731       Float_t saa1Wring5Rinner = 20.30;
732       Float_t saa1Wring5Router = 23.40;
733       Float_t saa1Wring5HWidth =  0.85;
734       TGeoVolume* voSaa1Wring5    = new TGeoVolume("YSAA1_WRING5", 
735                                                    new TGeoTube(saa1Wring5Rinner, saa1Wring5Router, saa1Wring5HWidth), kMedNiW);
736 //
737 // Position the rings in the assembly 
738 //      
739       TGeoVolumeAssembly* asSaa1ExtraShield = new TGeoVolumeAssembly("YSAA1ExtraShield");
740 // Distance between rings
741       Float_t saa1DWrings = 2.3;
742 //
743       dz = - (saa1Wring1Width + 6. * saa1Wring2HWidth + 2. * saa1Wring3HWidth + saa1Wring4Width + 2. * saa1Wring5HWidth + 2. * saa1DWrings) / 2.;
744       asSaa1ExtraShield->AddNode(voSaa1Wring1,    1, new TGeoTranslation(0., 0., dz));
745       dz +=   saa1Wring1Width;
746       dz +=   saa1Wring2HWidth;   
747       asSaa1ExtraShield->AddNode(voSaa1Wring2,    1, new TGeoCombiTrans(0., 0., dz, rot000));
748       asSaa1ExtraShield->AddNode(voSaa1Wring2,    2, new TGeoCombiTrans(0., 0., dz, rot180));
749       dz +=   saa1Wring2HWidth;   
750       dz +=   saa1DWrings;
751       dz +=   saa1Wring2HWidth;   
752       asSaa1ExtraShield->AddNode(voSaa1Wring2,    3, new TGeoCombiTrans(0., 0., dz, rot090));
753       asSaa1ExtraShield->AddNode(voSaa1Wring2,    4, new TGeoCombiTrans(0., 0., dz, rot270));
754       dz +=   saa1Wring2HWidth;   
755       dz +=   saa1Wring5HWidth;   
756       asSaa1ExtraShield->AddNode(voSaa1Wring5,    1, new TGeoTranslation(0., 0., dz));
757       dz +=   saa1Wring5HWidth;   
758       dz +=   saa1Wring2HWidth;   
759       asSaa1ExtraShield->AddNode(voSaa1Wring2,    5, new TGeoCombiTrans(0., 0., dz, rot000));
760       asSaa1ExtraShield->AddNode(voSaa1Wring2,    6, new TGeoCombiTrans(0., 0., dz, rot180));
761       dz +=   saa1Wring2HWidth;   
762       dz +=   saa1DWrings;
763       dz +=   saa1Wring3HWidth;   
764       asSaa1ExtraShield->AddNode(voSaa1Wring3,    1, new TGeoCombiTrans(0., 0., dz, rot090));
765       asSaa1ExtraShield->AddNode(voSaa1Wring3,    2, new TGeoCombiTrans(0., 0., dz, rot270));
766       dz +=   saa1Wring3HWidth;   
767       asSaa1ExtraShield->AddNode(voSaa1Wring4,    1, new TGeoTranslation(0., 0., dz));
768       dz +=   saa1Wring4Width;   
769       const Float_t saa1ExtraShieldL = 48;
770 //
771 // Assemble SAA1
772       voSaa1M->AddNode(voSaa1StEnv,     1, vec0);
773       voSaa1M->AddNode(voSaa1WPipe,     1, vec0);
774       voSaa1M->AddNode(voSaa1PbComp,    1, vec0);
775       voSaa1M->AddNode(voSaa1WCone,     1, vec0);
776       voSaa1M->AddNode(voSaa1StRing,    1, vec0);
777       voSaa1M->AddNode(voSaa1InnerTube, 1, new TGeoTranslation(0., 0., dzSaa1InnerTube + 0.9));               
778       TGeoVolumeAssembly* voSaa1 = new TGeoVolumeAssembly("YSAA1");
779       voSaa1->AddNode(voSaa1M, 1, vec0);
780       
781 ///////////////////////////////////////
782 //          SAA1/SAA2  Pb Joint      //
783 //          Drawing ALIP2A__0081     //
784 ///////////////////////////////////////
785 //
786 // Outer radius
787       Float_t rOuSaa1Saa2      = 70.0/2.;
788 // Flange SAA1 side
789       Float_t dzSaa1Saa2F1     =  3.;
790       Float_t rInSaa1Saa2F1    = 58.5/2.;
791 // 1st Central Section
792       Float_t dzSaa1Saa2C1     = 19.3;
793       Float_t rInSaa1Saa2C1    = 42.8/2.;
794 // Transition Region
795       Float_t dzSaa1Saa2T      =  3.3;
796 // 1st Central Section
797       Float_t dzSaa1Saa2C2     =  6.2;
798       Float_t rInSaa1Saa2C2    = 36.2/2.;
799 // Flange SAA2 side
800       Float_t dzSaa1Saa2F2     =  3.1;
801       Float_t rInSaa1Saa2F2    = 54.1/2.;
802 // Total length
803       Float_t dzSaa1Saa2       = 34.9;
804       
805       
806       TGeoPcon* shSaa1Saa2Pb = new TGeoPcon(0., 360., 8);
807       z = 0.;
808 // Flange SAA1 side
809       shSaa1Saa2Pb->DefineSection( 0,  z, rInSaa1Saa2F1, rOuSaa1Saa2);
810       z += dzSaa1Saa2F1;
811       shSaa1Saa2Pb->DefineSection( 1,  z, rInSaa1Saa2F1, rOuSaa1Saa2);
812       shSaa1Saa2Pb->DefineSection( 2,  z, rInSaa1Saa2C1, rOuSaa1Saa2);
813 // Central region 1
814       z +=  dzSaa1Saa2C1;
815       shSaa1Saa2Pb->DefineSection( 3,  z, rInSaa1Saa2C1, rOuSaa1Saa2);
816 // 45 deg transition
817       z += dzSaa1Saa2T;
818       shSaa1Saa2Pb->DefineSection( 4, z, rInSaa1Saa2C2, rOuSaa1Saa2);
819       z += dzSaa1Saa2C2;
820       shSaa1Saa2Pb->DefineSection( 5, z, rInSaa1Saa2C2, rOuSaa1Saa2);
821       shSaa1Saa2Pb->DefineSection( 6, z, rInSaa1Saa2F2, rOuSaa1Saa2);
822       z += dzSaa1Saa2F2;
823       shSaa1Saa2Pb->DefineSection( 7, z, rInSaa1Saa2F2, rOuSaa1Saa2);
824       TGeoVolume* voSaa1Saa2Pb = new TGeoVolume("YSAA1SAA2Pb", shSaa1Saa2Pb, kMedPb);
825 //
826 //    Mother volume and outer steel envelope
827       Float_t rOuSaa1Saa2Steel = 36.9;
828       
829       TGeoPcon* shSaa1Saa2 = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., rOuSaa1Saa2Steel-rOuSaa1Saa2);
830       TGeoVolume* voSaa1Saa2 = new TGeoVolume("YSAA1SAA2", shSaa1Saa2, kMedSteel);
831       voSaa1Saa2->AddNode(voSaa1Saa2Pb, 1, vec0);
832 //
833 //    Inner region with higher transport cuts
834 //
835       TGeoPcon*   shSaa1Saa2I = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., -3.);
836       TGeoVolume* voSaa1Saa2I = new TGeoVolume("YSAA1_SAA2I", shSaa1Saa2I, kMedPbSh);
837       voSaa1Saa2Pb->AddNode(voSaa1Saa2I, 1, vec0);
838       
839
840
841 ///////////////////////////////////////
842 //                SAA2               //
843 ///////////////////////////////////////
844
845       
846 ///////////////////////////////////
847 //    SAA2 Steel Envelope        //
848 //    Drawing ALIP2A__0041       //
849 ///////////////////////////////////
850       dSt = 4.;  // Thickness of steel envelope
851       // Length of the first section
852       Float_t dzSaa2StEnv1  = 163.15;
853       Float_t rInSaa2StEnv1 = 65.8/2.;
854       // Length of the second section
855       Float_t dzSaa2StEnv2  = 340.35;
856       Float_t rInSaa2StEnv2 = 87.2/2.;
857       // Rel. starting position 
858       Float_t zSaa2StEnv = 3.;
859       
860       TGeoPcon* shSaa2StEnv  = new TGeoPcon(0., 360., 6);
861       // First Section
862       z = zSaa2StEnv;
863       shSaa2StEnv->DefineSection( 0, z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
864       z += dzSaa2StEnv1;
865       shSaa2StEnv->DefineSection( 1, z, rInSaa2StEnv1, rInSaa2StEnv1 + dSt);
866       // Transition region
867       shSaa2StEnv->DefineSection( 2, z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);           
868       z += dSt;
869       shSaa2StEnv->DefineSection( 3, z, rInSaa2StEnv1, rInSaa2StEnv2 + dSt);          
870       // Second section
871       shSaa2StEnv->DefineSection( 4, z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);           
872       z += dzSaa2StEnv2;
873       shSaa2StEnv->DefineSection( 5, z, rInSaa2StEnv2, rInSaa2StEnv2 + dSt);           
874
875       TGeoVolume* voSaa2StEnv  =  new TGeoVolume("YSAA2_SteelEnvelope", shSaa2StEnv, kMedSteel);
876
877
878 ///////////////////////////////////
879 //    SAA2 Pb Ring               //
880 //    Drawing ALIP2A__0080       //
881 //    Drawing ALIP2A__0111       //
882 ///////////////////////////////////
883 //
884 // Rel. position in z
885       Float_t zSaa2PbRing    = 35.25;  
886 // Length
887       Float_t dzSaa2PbRing   = 65.90;  
888 // Inner radius
889       Float_t rInSaa2PbRing  = 37.00;
890 // Outer radius at front
891       Float_t rOuSaa2PbRingF = 42.74;
892 // Outer Rradius at rear
893       Float_t rOuSaa2PbRingR = 44.58;      
894       
895       TGeoPcon* shSaa2PbRing  = new TGeoPcon(0., 360., 2);
896       z = zSaa2PbRing;
897       shSaa2PbRing->DefineSection(0, z, rInSaa2PbRing, rOuSaa2PbRingF);
898       z += dzSaa2PbRing;
899       shSaa2PbRing->DefineSection(1, z, rInSaa2PbRing, rOuSaa2PbRingR);
900
901       TGeoVolume* voSaa2PbRing  =  new TGeoVolume("YSAA2_PbRing", shSaa2PbRing, kMedPb);
902
903
904 ///////////////////////////////////
905 //    SAA2 Pb Components         //
906 //    Drawing ALIP2A__0079       //
907 ///////////////////////////////////
908       tanAlpha = TMath::Tan(1.89 / 2. * kDegRad);
909       TGeoPcon* shSaa2PbComp  = new TGeoPcon(0., 360., 16);
910       // Total length 
911       Float_t dzSaa2PbComp    = 512.;
912       // Length of 1st bellow recess
913       Float_t dzSaa2PbCompB1  =  24.;
914       // Length of 2nd bellow recess
915       Float_t dzSaa2PbCompB2   = 27.;
916       // Flange on the SAA1 side Detail A
917       // 1st Step
918       Float_t dzSaa2PbCompA1  =   1.5;
919       Float_t rInSaa2PbCompA1 =  43.0/2.;
920       Float_t rOuSaa2PbCompA1 =  53.0/2.;
921       // 2nd Step
922       Float_t dzSaa2PbCompA2  =   1.5;
923       Float_t rInSaa2PbCompA2 =  36.8/2.;
924       Float_t rOuSaa2PbCompA2 =  rOuSaa2PbCompA1;
925       // Straight section
926       Float_t dzSaa2PbCompA3  =  21.0;
927       Float_t rInSaa2PbCompA3 =  rInSaa2PbCompA2;
928       Float_t rOuSaa2PbCompA3 =  65.2/2.;
929       //
930       // 1st Section (outer straight, inner 1.89/2. deg opening cone)
931       // Length
932       Float_t dzSaa2PbComp1   = 146.15;
933       // Inner radius at the end 
934       Float_t rInSaa2PbComp1  = rInSaa2PbCompA3 + dzSaa2PbComp1 * tanAlpha;
935       // Outer radius
936       Float_t rOuSaa2PbComp1  = rOuSaa2PbCompA3;
937       //
938       // 2nd Section (outer straight, inner 1.89/2. deg opening cone)
939       // Length 
940       Float_t dzSaa2PbComp2   = (dzSaa2PbComp - dzSaa2PbComp1 - dzSaa2PbCompB1 - dzSaa2PbCompB2);
941       // Inner radius at the end 
942       Float_t rInSaa2PbComp2  = rInSaa2PbComp1 + dzSaa2PbComp2 * tanAlpha;
943       // Outer radius
944       Float_t rOuSaa2PbComp2  = 86.6/2.;
945       //
946       // Flange on the SAA3 side (Detail E)
947       //
948       // Straight Section
949       // Length  dzSaa2PbCompB2 - 8.8 = 27 - 8.8 = 18.2
950       Float_t dzSaa2PbCompE1  =  18.2;
951       Float_t rInSaa2PbCompE1 =  52.0/2.;
952       Float_t rOuSaa2PbCompE1 =  86.6/2.;
953       // 45 deg transition
954       Float_t dzSaa2PbCompE2  =   2.7;
955       // 1st Step
956       Float_t dzSaa2PbCompE3  =   0.6;
957       Float_t rInSaa2PbCompE3 =  52.0/2.+ dzSaa2PbCompE2;
958       Float_t rOuSaa2PbCompE3 =  83.0/2.;
959       // 2nd Step
960       Float_t dzSaa2PbCompE4  =   4.0;
961       Float_t rOuSaa2PbCompE4 =  61.6/2.;
962       // end
963       Float_t dzSaa2PbCompE5  =   1.5;
964
965
966       //
967       // Flange on SAA1 side (Detail A)
968       z = 0.;
969       // 1st Step
970       shSaa2PbComp->DefineSection(  0,  z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
971       z += dzSaa2PbCompA1;
972       shSaa2PbComp->DefineSection(  1,  z, rInSaa2PbCompA1, rOuSaa2PbCompA1);
973       shSaa2PbComp->DefineSection(  2,  z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
974       // 2nd Step
975       z += dzSaa2PbCompA2;
976       shSaa2PbComp->DefineSection(  3,  z, rInSaa2PbCompA2, rOuSaa2PbCompA2);
977       shSaa2PbComp->DefineSection(  4,  z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
978       // straight section
979       z += dzSaa2PbCompA3;
980       shSaa2PbComp->DefineSection(  5,  z, rInSaa2PbCompA3, rOuSaa2PbCompA3);
981       //
982       // Section 1
983       z += dzSaa2PbComp1;
984       shSaa2PbComp->DefineSection(  6,  z, rInSaa2PbComp1, rOuSaa2PbComp1);
985       //
986       // Section 2
987       shSaa2PbComp->DefineSection(  7,  z, rInSaa2PbComp2, rOuSaa2PbComp2);
988       z += dzSaa2PbComp2;
989       shSaa2PbComp->DefineSection(  8,  z, rInSaa2PbComp2, rOuSaa2PbComp2);
990       //
991       // Flange SAA3 side (Detail E)
992       z += dzSaa2PbCompE1;
993       shSaa2PbComp->DefineSection(  9,  z, rInSaa2PbCompE1, rOuSaa2PbCompE1);
994       // 45 deg transition
995       z += dzSaa2PbCompE2;
996       shSaa2PbComp->DefineSection( 10,  z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
997       // 1st step
998       z += dzSaa2PbCompE3;
999       shSaa2PbComp->DefineSection( 11,  z, rInSaa2PbCompE3, rOuSaa2PbCompE1);
1000       shSaa2PbComp->DefineSection( 12,  z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1001       // 2nd step
1002       z += dzSaa2PbCompE4;
1003       shSaa2PbComp->DefineSection( 13,  z, rInSaa2PbCompE3, rOuSaa2PbCompE3);
1004       shSaa2PbComp->DefineSection( 14,  z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1005       // end
1006       z += dzSaa2PbCompE5;
1007       shSaa2PbComp->DefineSection( 15,  z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1008
1009       TGeoVolume* voSaa2PbComp  =  new TGeoVolume("YSAA2_PbComp", shSaa2PbComp, kMedPb);
1010
1011
1012 ///////////////////////////////////
1013 //    SAA2 Inner Tube            //
1014 //    Drawing ALIP2A__0083       //
1015 ///////////////////////////////////
1016 //
1017 //
1018 //
1019 // Length of saa2:               512.0 cm
1020 // Length of inner tube:         501.7 cm 
1021 // Lenth of bellow recess:        10.3 cm   ( 1.5 + 8.8) 
1022 // Radius at entrance 36.8/2,  d = 0.1
1023 // Radius at exit     52.0/2,  d = 0.1 
1024 //
1025       const Float_t kSaa2InnerTubeL     =  501.7;    // Length of the tube  
1026       const Float_t kSaa2InnerTubeRmin  =  36.6/2.;  // Radius at entrance
1027       const Float_t kSaa2InnerTubeRmax  =  51.8/2.;  // Radius at exit
1028       const Float_t kSaa2InnerTubeD     =   0.2   ;  // Thickness     
1029       TGeoPcon*   shSaa2InnerTube = new TGeoPcon(0., 360., 4);
1030       z = 0.;
1031       shSaa2InnerTube->DefineSection( 0, z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1032       z += dzSaa2PbCompA2 + dzSaa2PbCompA3;
1033       shSaa2InnerTube->DefineSection( 1, z, kSaa2InnerTubeRmin - kSaa2InnerTubeD, kSaa2InnerTubeRmin);
1034       z =  kSaa2InnerTubeL - dzSaa2PbCompE1;
1035       shSaa2InnerTube->DefineSection( 2, z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
1036       z =  kSaa2InnerTubeL;
1037       shSaa2InnerTube->DefineSection( 3, z, kSaa2InnerTubeRmax - kSaa2InnerTubeD, kSaa2InnerTubeRmax);
1038       TGeoVolume* voSaa2InnerTube = new TGeoVolume("YSAA2_InnerTube", shSaa2InnerTube, kMedSteel);
1039       
1040 ///////////////////////////////////
1041 //    SAA2 Steel Ring            //
1042 //    Drawing ALIP2A__0042       //
1043 ///////////////////////////////////
1044       //  HalfWidth
1045       Float_t dzSaa2SteelRing = 2.;
1046       TGeoTube*   shSaa2SteelRing  = new TGeoTube(41.6, 47.6, dzSaa2SteelRing);
1047       TGeoVolume* voSaa2SteelRing  = new TGeoVolume("YSAA2_SteelRing", shSaa2SteelRing, kMedSteel);
1048
1049 ///////////////////////////////////
1050 //    SAA2 Outer Shape           //
1051 //    Drawing ALIP2A__0108       //
1052 ///////////////////////////////////
1053
1054       TGeoPcon* shSaa2  = new TGeoPcon(0., 360., 16);
1055       kSec = 0.02; // security distance to avoid trivial extrusions
1056       rmin = kSaa2InnerTubeRmin - kSaa2InnerTubeD - kSec;
1057       rmax = kSaa2InnerTubeRmax - kSaa2InnerTubeD - kSec;
1058       // Flange SAA1 side
1059       z = 0.;
1060       shSaa2->DefineSection( 0, z, rmin           , rOuSaa2PbCompA1);
1061       z += dzSaa2PbCompA1 + dzSaa2PbCompA2;
1062       shSaa2->DefineSection( 1, z, rmin           , rOuSaa2PbCompA1);
1063       shSaa2->DefineSection( 2, z, rmin           , rInSaa2StEnv1 + dSt);
1064       z += dzSaa2PbCompA3;
1065       shSaa2->DefineSection( 3, z, rmin           , rInSaa2StEnv1 + dSt);
1066       z = zSaa2PbRing;
1067       shSaa2->DefineSection( 4, z, 0.             , rInSaa2StEnv1 + dSt);
1068       shSaa2->DefineSection( 5, z, 0.             , rOuSaa2PbRingF);
1069       z += dzSaa2PbRing;
1070       shSaa2->DefineSection( 6, z, 0.             , rOuSaa2PbRingR);
1071       shSaa2->DefineSection( 7, z, 0.             , rInSaa2StEnv1 + dSt);
1072       z = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2StEnv1;
1073       shSaa2->DefineSection( 8, z, 0.             , rInSaa2StEnv1 + dSt);
1074       shSaa2->DefineSection( 9, z, 0.             , rInSaa2StEnv2 + dSt);
1075       z = dzSaa2PbComp - dzSaa2PbCompB2;
1076       shSaa2->DefineSection(10, z, rmax           , rInSaa2StEnv2 + dSt);
1077       z += dzSaa2PbCompE1;
1078       shSaa2->DefineSection(11, z, rmax           , rInSaa2StEnv2 + dSt);
1079       z += dzSaa2PbCompE2;
1080       shSaa2->DefineSection(12, z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1081       z += (dzSaa2PbCompE3 + dzSaa2PbCompE4);
1082       shSaa2->DefineSection(13, z, rInSaa2PbCompE3, rInSaa2StEnv2 + dSt);
1083       shSaa2->DefineSection(14, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1084       z += dzSaa2PbCompE5;
1085       shSaa2->DefineSection(15, z, rInSaa2PbCompE3, rOuSaa2PbCompE4);
1086
1087       TGeoVolume* voSaa2  =  new TGeoVolume("YSAA2", shSaa2, kMedAir);
1088 // Inner 1.89/2 deg line
1089       Double_t zref   = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2PbCompA3;
1090       for (Int_t i  = 4; i < 10; i++) {
1091           Double_t z    = shSaa2->GetZ(i);
1092           Double_t r2 = shSaa2->GetRmax(i);      
1093           Double_t r1 = rmin + (z -  zref) * TMath::Tan(1.89 / 2. * kDegRad) - kSec;
1094           shSaa2->DefineSection(i, z, r1, r2);
1095       }
1096
1097 //
1098 //    Assemble SAA2
1099       voSaa2->AddNode(voSaa2StEnv,     1, vec0);
1100       voSaa2->AddNode(voSaa2PbRing,    1, vec0);
1101       voSaa2->AddNode(voSaa2PbComp,    1, vec0);
1102       voSaa2->AddNode(voSaa2InnerTube, 1, new TGeoTranslation(0., 0., dzSaa2PbCompA1));
1103       z = (dzSaa2PbComp - dzSaa2PbCompE4 - dzSaa2PbCompE5) + dzSaa2SteelRing;
1104       voSaa2->AddNode(voSaa2SteelRing, 1, new TGeoTranslation(0., 0., z));
1105
1106
1107 ///////////////////////////////////////
1108 //                SAA3               //
1109 ///////////////////////////////////////
1110 //
1111 //
1112 //  This is a study performed by S. Maridor
1113 //  The SAA3 has not yet been designed !!!!!!!!
1114 //
1115 ///////////////////////////////////
1116 //    SAA3 Outer Shape           //
1117 //    Drawing ALIP2A__0xxx       //
1118 ///////////////////////////////////
1119       
1120       TGeoVolumeAssembly* voSaa3  = new TGeoVolumeAssembly("YSAA3");
1121       
1122 ///////////////////////////////////
1123 //    SAA3 Steel Components      //
1124 //    Drawing ALIP2A__0xxx       //
1125 ///////////////////////////////////
1126 //    Block
1127       TGeoBBox* shSaa3SteelBlockO   = new TGeoBBox(220./2., 80./2., 100./2.);
1128       shSaa3SteelBlockO->SetName("Saa3SteelBlockO");
1129
1130       TGeoPcon* shSaa3InnerRegion  = new TGeoPcon(0., 360., 6);
1131       shSaa3InnerRegion->DefineSection( 0, -52.0, 0., 56.6/2.);
1132       shSaa3InnerRegion->DefineSection( 1, -45.0, 0., 56.6/2.);
1133       shSaa3InnerRegion->DefineSection( 2, -42.0, 0., 50.6/2.);
1134       shSaa3InnerRegion->DefineSection( 3, -30.0, 0., 50.6/2.);
1135       shSaa3InnerRegion->DefineSection( 4,  30.5, 0., 16.8/2.);
1136       shSaa3InnerRegion->DefineSection( 5,  52.0, 0., 16.8/2.);
1137       shSaa3InnerRegion->SetName("Saa3InnerRegion");
1138
1139       TGeoCompositeShape* shSaa3SteelBlock = new TGeoCompositeShape("Saa3SteelBlock", "Saa3SteelBlockO-Saa3InnerRegion");
1140       TGeoVolume* voSaa3SteelBlock         = new TGeoVolume("YSAA3SteelBlock", shSaa3SteelBlock, kMedSteel);     
1141
1142
1143       voSaa3->AddNode(voSaa3SteelBlock, 1, vec0);
1144 //    Plate 1: 220 cm x 100 cm x 10 cm (x 1)
1145       TGeoBBox* shSaa3SteelPlate1   = new TGeoBBox(220./2., 10./2., 100./2.);
1146       TGeoVolume* voSaa3SteelPlate1  =  new TGeoVolume("YSAA3SteelPlate1", shSaa3SteelPlate1, kMedSteel);
1147       voSaa3->AddNode(voSaa3SteelPlate1, 1, new TGeoTranslation(0., -80./2. - 10./2., 0.));
1148 //    Plate 2: 200 cm x 100 cm x 10 cm (x 6)
1149       TGeoBBox* shSaa3SteelPlate2   = new TGeoBBox(200./2., 60./2., 100./2.);
1150       TGeoVolume* voSaa3SteelPlate2  =  new TGeoVolume("YSAA3SteelPlate2", shSaa3SteelPlate2, kMedSteel);
1151       voSaa3->AddNode(voSaa3SteelPlate2, 1, new TGeoTranslation(0., -80./2. - 10. - 60./2., 0.));
1152 //    Plate 3: 200 cm x 100 cm x 10 cm (x 4)
1153       TGeoBBox* shSaa3SteelPlate3   = new TGeoBBox(200./2., 40./2., 100./2.);
1154       TGeoVolume* voSaa3SteelPlate3  =  new TGeoVolume("YSAA3SteelPlate3", shSaa3SteelPlate3, kMedSteel);
1155       voSaa3->AddNode(voSaa3SteelPlate3, 1, new TGeoTranslation(0., +80./2. + 40/2., 0.));
1156 //    Plate 4: 180 cm x 100 cm x 10 cm (x 1)
1157       TGeoBBox* shSaa3SteelPlate4   = new TGeoBBox(180./2., 10./2., 100./2.);
1158       TGeoVolume* voSaa3SteelPlate4  =  new TGeoVolume("YSAA3SteelPlate4", shSaa3SteelPlate4, kMedSteel);
1159       voSaa3->AddNode(voSaa3SteelPlate4, 1, new TGeoTranslation(0., +80./2. + 40. + 10/2., 0.));
1160 //    Plate 5: 150 cm x 100 cm x 10 cm (x 1)
1161       TGeoBBox* shSaa3SteelPlate5   = new TGeoBBox(150./2., 10./2., 100./2.);
1162       TGeoVolume* voSaa3SteelPlate5  =  new TGeoVolume("YSAA3SteelPlate5", shSaa3SteelPlate5, kMedSteel);
1163       voSaa3->AddNode(voSaa3SteelPlate5, 1, new TGeoTranslation(0., +80./2. + 50. + 10/2., 0.));
1164 //    Plate 6: 100 cm x 100 cm x 10 cm (x 1)
1165       TGeoBBox* shSaa3SteelPlate6   = new TGeoBBox(100./2., 10./2., 100./2.);
1166       TGeoVolume* voSaa3SteelPlate6  =  new TGeoVolume("YSAA3SteelPlate6", shSaa3SteelPlate6, kMedSteel);
1167       voSaa3->AddNode(voSaa3SteelPlate6, 1, new TGeoTranslation(0., +80./2. + 60. + 10/2., 0.));
1168
1169 ///////////////////////////////////
1170 //    SAA3 Concrete Piece        //
1171 //    Drawing ALIP2A__0xxx       //
1172 ///////////////////////////////////
1173       TGeoPcon* shSaa3ConcPiece  = new TGeoPcon(0., 360., 6);
1174       shSaa3ConcPiece->DefineSection( 0,   0.0, 57.4/2., 62./2.);
1175       shSaa3ConcPiece->DefineSection( 1,   5.0, 57.4/2., 62./2.);
1176       shSaa3ConcPiece->DefineSection( 2,   8.0, 51.4/2., 62./2.);
1177       shSaa3ConcPiece->DefineSection( 3,  20.0, 51.4/2., 62./2.);
1178       shSaa3ConcPiece->DefineSection( 4,  80.5, 17.6/2., 62./2.);
1179       shSaa3ConcPiece->DefineSection( 5, 100.0, 17.6/2., 62./2.);
1180       TGeoVolume* voSaa3ConcPiece  =  new TGeoVolume("YSAA2_ConcPiece", shSaa3ConcPiece, kMedConc);
1181       voSaa3SteelBlock->AddNode(voSaa3ConcPiece, 1, new TGeoTranslation(0., 0., -50.));
1182
1183 ///////////////////////////////////
1184 //    SAA3 InnerTube             //
1185 //    Drawing ALIP2A__0xxx       //
1186 ///////////////////////////////////
1187       TGeoPcon* shSaa3InnerTube  = new TGeoPcon(0., 360., 6);
1188       shSaa3InnerTube->DefineSection( 0,   0.0, 56.6/2., 57.0/2.);
1189       shSaa3InnerTube->DefineSection( 1,   5.0, 56.6/2., 57.0/2.);
1190       shSaa3InnerTube->DefineSection( 2,   8.0, 50.6/2., 51.0/2.);
1191       shSaa3InnerTube->DefineSection( 3,  20.0, 50.6/2., 51.0/2.);
1192       shSaa3InnerTube->DefineSection( 4,  80.5, 16.8/2., 17.2/2.);
1193       shSaa3InnerTube->DefineSection( 5, 100.0, 16.8/2., 17.2/2.);
1194       TGeoVolume* voSaa3InnerTube  =  new TGeoVolume("YSAA2_InnerTube", shSaa3InnerTube, kMedSteel);
1195       voSaa3SteelBlock->AddNode(voSaa3InnerTube, 1, new TGeoTranslation(0., 0., -50.));
1196
1197 ///////////////////////////////////
1198 //    Muon Filter                //
1199 //    Drawing ALIP2A__0105       //
1200 ///////////////////////////////////
1201       // Half Length 
1202       Float_t dzMuonFilter = 60.;
1203       
1204       TGeoBBox*   shMuonFilterO  = new TGeoBBox(550./2., 620./2., dzMuonFilter);
1205       shMuonFilterO->SetName("FilterO");
1206       TGeoTube*   shMuonFilterI  = new TGeoTube(0., 50., dzMuonFilter);
1207       shMuonFilterI->SetName("FilterI");
1208       TGeoCompositeShape* shMuonFilter = new TGeoCompositeShape("MuonFilter", "FilterO-FilterI");
1209       //
1210       // !!!!! Needs to be inclined
1211       TGeoVolume* voMuonFilter = new TGeoVolume("YMuonFilter", shMuonFilter, kMedSteel);
1212
1213 //  
1214       TGeoVolumeAssembly* voSaa  = new TGeoVolumeAssembly("YSAA");
1215 //
1216 //    
1217 //    
1218 //
1219 //
1220 //    Starting position of the FA Flange/Tail 
1221       Float_t ziFaWTail   = 499.0;
1222 //    End of the FA Flange/Tail
1223       Float_t zoFaWTail   = ziFaWTail + dzFaWTail;
1224 //    Starting position of the FA/SAA1 Joint (2.8 cm overlap with tail)
1225       Float_t ozFaSaa1    = 2.8;
1226       Float_t ziFaSaa1    = zoFaWTail - ozFaSaa1;
1227 //    End of the FA/SAA1 Joint
1228       Float_t zoFaSaa1    = ziFaSaa1 +  dzFaSaa1;
1229 //    Starting position of SAA1 (2.0 cm overlap with joint)     
1230       Float_t ozSaa1      = 2.;
1231       Float_t ziSaa1      = zoFaSaa1 - ozSaa1;
1232 //    End of SAA1
1233       Float_t zoSaa1      = ziSaa1 + dzSaa1;
1234 //    Starting position of SAA1/SAA2 Joint (1.95 cm overlap with SAA1)
1235       Float_t ziSaa1Saa2  = zoSaa1 - 1.95;
1236 //    End of SAA1/SAA2 Joint
1237       Float_t zoSaa1Saa2  = ziSaa1Saa2 + dzSaa1Saa2;
1238 //    Starting position of SAA2 (3.1 cm overlap with the joint)
1239       Float_t ziSaa2      = zoSaa1Saa2 - 3.1;
1240 //    End of SAA2
1241       Float_t zoSaa2      = ziSaa2 + dzSaa2PbComp;
1242 //    Position of SAA3
1243       Float_t zcSaa3      = zoSaa2 + 50.;
1244 //    Position of the Muon Filter
1245       Float_t zcFilter    = 1465.9 + dzMuonFilter;
1246
1247       printf("FaSaa1    %f %f \n", ziFaSaa1, zoFaSaa1);
1248       printf("Saa1      %f %f \n", ziSaa1, zoSaa1);
1249       printf("Saa1/Saa2 %f %f \n", ziSaa1Saa2, zoSaa1Saa2);
1250       printf("Saa2      %f %f \n", ziSaa2, zoSaa2);
1251       
1252       voSaa->AddNode(voFaWTail,    1, new TGeoTranslation(0., 0., ziFaWTail));
1253       voSaa->AddNode(voFaSaa1,     1, new TGeoTranslation(0., 0., ziFaSaa1));
1254       voSaa->AddNode(voSaa1 ,      1, new TGeoTranslation(0., 0., ziSaa1));
1255       voSaa->AddNode(voSaa1Saa2,   1, new TGeoTranslation(0., 0., ziSaa1Saa2));
1256       voSaa->AddNode(voSaa2 ,      1, new TGeoTranslation(0., 0., ziSaa2));
1257       voSaa->AddNode(voSaa3,       1, new TGeoTranslation(0., 0., zcSaa3));
1258       voSaa->AddNode(voMuonFilter, 1, new TGeoTranslation(0., 0., zcFilter));      
1259
1260       TGeoRotation* rotxz  = new TGeoRotation("rotxz",   90.,   0., 90.,  90., 180., 0.);
1261       top->AddNode(voSaa, 1, new TGeoCombiTrans(0., 0., 0., rotxz));
1262 //
1263 //  Mother volume for muon stations 1+2 and shielding material placed between the quadrants
1264 //
1265       // Position of the dipole
1266       Float_t ziDipole = 724.45;
1267       
1268       TGeoPcon* shYOUT1 = new TGeoPcon(0., 360., 25);
1269       Float_t eps = 1.e-2;
1270       // FA Tail Section
1271       for (Int_t iz =  0; iz < 9; iz++) {
1272           z = shFaWTail->GetZ(iz+1);
1273           if (iz == 8) z -= ozFaSaa1;
1274           shYOUT1->DefineSection(iz, z + ziFaWTail, shFaWTail->GetRmax(iz+1) + eps, 150.);
1275       }
1276       // FA-SAA1 Joint
1277       z = shYOUT1->GetZ(8);
1278       
1279       for (Int_t iz =  9; iz < 17; iz++) 
1280           shYOUT1->DefineSection(iz, z + shFaSaa1->GetZ(iz-9), shFaSaa1->GetRmax(iz-9) + eps, 150.);
1281
1282       z = shYOUT1->GetZ(16) - ozSaa1;
1283       // SAA1  - Dipole
1284       for (Int_t iz = 17; iz < 24; iz++) 
1285           shYOUT1->DefineSection(iz, z + shSaa1M->GetZ(iz-13), shSaa1M->GetRmax(iz-13) + eps, 150.); 
1286       // Distance between dipole and start of SAA1 2deg opening cone
1287       dz   = zSaa1StEnv[0] - dSt + zSaa1StEnvS + ziSaa1 - ziDipole;
1288       rOut = rOuSaa1StEnv2 + dz * TMath::Tan(2. * kDegRad);
1289       
1290       shYOUT1->DefineSection(24, ziDipole, rOut + eps, 150.);
1291
1292       InvertPcon(shYOUT1);
1293       TGeoVolume* voYOUT1 = new TGeoVolume("YOUT1", shYOUT1, kMedAirMu);
1294
1295       voYOUT1->AddNode(asSaa1ExtraShield, 1, new TGeoCombiTrans(0., 0., - (100.7 + 62.2 + saa1ExtraShieldL / 2. + ziFaWTail), rotxz));
1296       voYOUT1->AddNode(asFaExtraShield,   1, new TGeoCombiTrans(0., 0., - (16.41 + kFaWring2HWidth + ziFaWTail), rotxz));
1297       top->AddNode(voYOUT1, 1, vec0);
1298 //
1299 //  Mother volume for muon stations 4+5 and trigger stations.
1300 //
1301       Float_t zoDipole = 1235.55;
1302       
1303       TGeoPcon* shYOUT2 = new TGeoPcon(0., 360., 14);
1304       z =  zoDipole;
1305       shYOUT2->DefineSection(0, z,             rOuSaa1String,       252.);
1306 //    Start of SAA1-SAA2
1307       z = ziSaa1Saa2;
1308       shYOUT2->DefineSection(1, z,             rOuSaa1String,       252.);
1309       shYOUT2->DefineSection(2, z,             rOuSaa1Saa2Steel,    252.);
1310 //    End of SAA1-SAA2
1311       z = ziSaa2;
1312       shYOUT2->DefineSection(3, z,             rOuSaa1Saa2Steel,    252.);
1313 //    SAA2
1314       shYOUT2->DefineSection( 4, z,            rInSaa2StEnv1 + dSt, 252.);
1315       z = ziSaa2 + zSaa2PbRing;
1316       shYOUT2->DefineSection( 5, z,            rInSaa2StEnv1 + dSt, 252.);
1317 //    Pb Cone
1318       shYOUT2->DefineSection( 6, z,            rOuSaa2PbRingF,      252.);
1319       rmin = rOuSaa2PbRingF + (1380. - z) * TMath::Tan(1.6 * kDegRad);
1320       shYOUT2->DefineSection( 7, 1380., rmin, 252.);
1321       shYOUT2->DefineSection( 8, 1380., rmin, 304.);
1322       z = ziSaa2 + zSaa2PbRing + dzSaa2PbRing;
1323       shYOUT2->DefineSection( 9, z,            rOuSaa2PbRingR,      304.);
1324 //    Straight Sections
1325       shYOUT2->DefineSection(10, z,            rInSaa2StEnv1 + dSt, 460.);
1326       z = ziSaa2 + dzSaa2StEnv1;
1327       shYOUT2->DefineSection(11, z,            rInSaa2StEnv1 + dSt, 460.);
1328       shYOUT2->DefineSection(12, z,            rInSaa2StEnv2 + dSt, 460.);
1329       z += dzSaa2StEnv2;
1330       shYOUT2->DefineSection(13, z,            rInSaa2StEnv2 + dSt, 460.);
1331       
1332       InvertPcon(shYOUT2);
1333       TGeoVolume* voYOUT2 = new TGeoVolume("YOUT2", shYOUT2, kMedAirMu);
1334       top->AddNode(voYOUT2, 1, vec0);
1335 }
1336
1337 void AliSHILv3::Init()
1338 {
1339   //
1340   // Initialise the muon shield after it has been built
1341   //
1342   Int_t i;
1343   //
1344   if(AliLog::GetGlobalDebugLevel()>0) {
1345     printf("\n%s: ",ClassName());
1346     for(i=0;i<35;i++) printf("*");
1347     printf(" SHILvTGeo_INIT ");
1348     for(i=0;i<35;i++) printf("*");
1349     printf("\n%s: ",ClassName());
1350     //
1351     // Here the SHIL initialisation code (if any!)
1352     for(i=0;i<80;i++) printf("*");
1353     printf("\n");
1354   }
1355 }
1356
1357 void AliSHILv3::InvertPcon(TGeoPcon* pcon)
1358 {
1359 //
1360 //  z -> -z
1361 // 
1362     Int_t nz = pcon->GetNz();
1363     Double_t* z    = new Double_t[nz];
1364     Double_t* rmin = new Double_t[nz];
1365     Double_t* rmax = new Double_t[nz];
1366
1367     Double_t*  z0    = pcon->GetZ();
1368     Double_t*  rmin0 = pcon->GetRmin();
1369     Double_t*  rmax0 = pcon->GetRmax();
1370     
1371     for (Int_t i = 0; i < nz; i++) {
1372         z[i] = z0[i];
1373         rmin[i] = rmin0[i];
1374         rmax[i] = rmax0[i];     
1375     }
1376     
1377     for (Int_t i = 0; i < nz; i++) {
1378         Int_t j = nz - i - 1;
1379         pcon->DefineSection(i, - z[j], rmin[j], rmax[j]);
1380     }
1381     
1382     delete[] z;
1383     delete[] rmin;
1384     delete[] rmax;
1385 }
1386
1387 TGeoPcon* AliSHILv3::MakeShapeFromTemplate(TGeoPcon* pcon, Float_t drMin, Float_t drMax)
1388 {
1389     // 
1390     // Returns new shape based on a template changing
1391     // the inner radii by drMin and the outer radii by drMax.
1392     //
1393     Int_t nz = pcon->GetNz();
1394     TGeoPcon* cpcon = new TGeoPcon(0., 360., nz);
1395     for (Int_t i = 0; i < nz; i++) 
1396         cpcon->DefineSection(i, pcon->GetZ(i), pcon->GetRmin(i) + drMin, pcon->GetRmax(i) + drMax);
1397     return cpcon;
1398 }
1399
1400