]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STRUCT/AliSHILv3.cxx
doxy: correctly consider macro blocks in methods
[u/mrichter/AliRoot.git] / STRUCT / AliSHILv3.cxx
index 7efbf09e35da0ac8184a0a2587572dced35dbbc7..aa6f539b988fa6e1f2ab0c8a7d3b4309a13ad9da 100644 (file)
@@ -13,7 +13,7 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id $ */
+/* $Id$ */
 
 //-------------------------------------------------------------------------
 // The small angle absorber SAA (beam shield)
@@ -66,16 +66,15 @@ void AliSHILv3::CreateGeometry()
 // The top volume
 //
     TGeoVolume* top = gGeoManager->GetVolume("ALIC");
-    
-//
-// Translations
-//
-    TGeoTranslation* vec0 = new TGeoTranslation(0., 0., 0.);
 //  Rotations
     TGeoRotation* rot000 = new TGeoRotation("rot000",  90.,   0., 90.,  90., 0., 0.);
     TGeoRotation* rot090 = new TGeoRotation("rot090",  90.,  90., 90., 180., 0., 0.);
     TGeoRotation* rot180 = new TGeoRotation("rot180",  90., 180., 90., 270., 0., 0.);
     TGeoRotation* rot270 = new TGeoRotation("rot270",  90., 270., 90.,   0., 0., 0.);
+    Float_t alhc = 0.794;
+    TGeoRotation* rotxzlhc   = new TGeoRotation("rotxzlhc", 0.,  -alhc, 0.);
+    TGeoRotation* rotlhc     = new TGeoRotation("rotlhc",   0.,   alhc, 0.);
+
 //
 // Media
 //
@@ -91,7 +90,10 @@ void AliSHILv3::CreateGeometry()
     TGeoMedium* kMedPb      = gGeoManager->GetMedium("SHIL_PB_C0");
     TGeoMedium* kMedPbSh    = gGeoManager->GetMedium("SHIL_PB_C2");
 //
-    TGeoMedium* kMedConc    = gGeoManager->GetMedium("SHIL_CC_C0");
+    TGeoMedium* kMedConcSh  = gGeoManager->GetMedium("SHIL_CC_C2");
+//
+    TGeoMedium* kMedCastiron   = gGeoManager->GetMedium("SHIL_CAST_IRON0");
+    TGeoMedium* kMedCastironSh = gGeoManager->GetMedium("SHIL_CAST_IRON2");
 //
     const Float_t kDegRad = TMath::Pi() / 180.;
     const Float_t kAngle02   = TMath::Tan( 2.00   * kDegRad);   
@@ -140,7 +142,7 @@ void AliSHILv3::CreateGeometry()
 //    Outer radius at the end of the tail 
       Float_t rOuFaWTailE  = 31.6/2.;
 //    Total length of the tail
-      Float_t dzFaWTail    = 70.7;
+      const Float_t dzFaWTail    = 70.7;
 
       TGeoPcon* shFaWTail = new TGeoPcon(0., 360., 10);
       z    = 0.;
@@ -178,7 +180,7 @@ void AliSHILv3::CreateGeometry()
       z = dzFaWTail;
       shFaWTailI->DefineSection(3, z, rInFaWTailS,  rInFaWTailS + dr);
       TGeoVolume* voFaWTailI = new TGeoVolume("YFaWTailI", shFaWTailI, kMedNiWsh);
-      voFaWTail->AddNode(voFaWTailI, 1, vec0);
+      voFaWTail->AddNode(voFaWTailI, 1, gGeoIdentity);
       
 ///////////////////////////////////
 //                               //
@@ -190,7 +192,7 @@ void AliSHILv3::CreateGeometry()
 //    FA W-Ring 2                //
 //    Drawing ALIP2A__0220       //
 ///////////////////////////////////
-      const Float_t kFaWring2Rinner  = 15.40;
+      const Float_t kFaWring2Rinner  = 15.41;
       const Float_t kFaWring2Router  = 18.40;
       const Float_t kFaWring2HWidth  =  3.75;
       const Float_t kFaWring2Cutoffx =  3.35;
@@ -209,7 +211,7 @@ void AliSHILv3::CreateGeometry()
 //    FA W-Ring 3                //
 //    Drawing ALIP2A__0219       //
 ///////////////////////////////////
-      const Float_t kFaWring3Rinner  = 15.40;
+      const Float_t kFaWring3Rinner  = 15.41;
       const Float_t kFaWring3Router  = 18.40;
       const Float_t kFaWring3HWidth  =  3.75;
       const Float_t kFaWring3Cutoffx =  3.35;
@@ -228,7 +230,7 @@ void AliSHILv3::CreateGeometry()
 //    FA W-Ring 5                //
 //    Drawing ALIP2A__0221       //
 ///////////////////////////////////
-      const Float_t kFaWring5Rinner = 15.40;
+      const Float_t kFaWring5Rinner = 15.41;
       const Float_t kFaWring5Router = 18.67;
       const Float_t kFaWring5HWidth =  1.08;
       TGeoVolume* voFaWring5    = new TGeoVolume("YFA_WRING5", new TGeoTube(kFaWring5Rinner, kFaWring5Router, kFaWring5HWidth), kMedNiW);
@@ -243,25 +245,25 @@ void AliSHILv3::CreateGeometry()
       dz = 0.;
       
       dz +=  kFaWring2HWidth;
-      asFaExtraShield->AddNode(voFaWring2,    1, new TGeoCombiTrans(0., 0., dz, rot090));
-      asFaExtraShield->AddNode(voFaWring2,    2, new TGeoCombiTrans(0., 0., dz, rot270));
+      asFaExtraShield->AddNode(voFaWring2,    1, new TGeoCombiTrans(0., 0., dz, rot180));
+      asFaExtraShield->AddNode(voFaWring2,    2, new TGeoCombiTrans(0., 0., dz, rot000));
       dz +=   kFaWring2HWidth;
       dz +=   kFaDWrings;
       dz +=   kFaWring3HWidth;
-      asFaExtraShield->AddNode(voFaWring3,    1, new TGeoCombiTrans(0., 0., dz, rot000));
-      asFaExtraShield->AddNode(voFaWring3,    2, new TGeoCombiTrans(0., 0., dz, rot180));
+      asFaExtraShield->AddNode(voFaWring3,    1, new TGeoCombiTrans(0., 0., dz, rot090));
+      asFaExtraShield->AddNode(voFaWring3,    2, new TGeoCombiTrans(0., 0., dz, rot270));
       dz +=   kFaWring3HWidth;   
       dz +=   kFaWring5HWidth;   
       asFaExtraShield->AddNode(voFaWring5,    1, new TGeoTranslation(0., 0., dz));
       dz +=   kFaWring5HWidth;   
       dz +=   kFaWring3HWidth;   
-      asFaExtraShield->AddNode(voFaWring3,    3, new TGeoCombiTrans(0., 0., dz, rot090));
-      asFaExtraShield->AddNode(voFaWring3,    4, new TGeoCombiTrans(0., 0., dz, rot270));
+      asFaExtraShield->AddNode(voFaWring3,    3, new TGeoCombiTrans(0., 0., dz, rot180));
+      asFaExtraShield->AddNode(voFaWring3,    4, new TGeoCombiTrans(0., 0., dz, rot000));
       dz +=   kFaWring3HWidth;   
       dz +=   kFaDWrings;
       dz +=   kFaWring2HWidth;
-      asFaExtraShield->AddNode(voFaWring2,    3, new TGeoCombiTrans(0., 0., dz, rot000));
-      asFaExtraShield->AddNode(voFaWring2,    4, new TGeoCombiTrans(0., 0., dz, rot180));
+      asFaExtraShield->AddNode(voFaWring2,    3, new TGeoCombiTrans(0., 0., dz, rot090));
+      asFaExtraShield->AddNode(voFaWring2,    4, new TGeoCombiTrans(0., 0., dz, rot270));
       dz +=   kFaWring2HWidth;
 
       
@@ -296,7 +298,7 @@ void AliSHILv3::CreateGeometry()
 // Inner radius of flange FA side
       Float_t rInFaSaa1F2 = 25.2/2.;
 // Length of joint
-      Float_t dzFaSaa1    = 34.8;
+      const Float_t dzFaSaa1    = 34.8;
 // Outer Radius at the end of the joint
       Float_t rOuFaSaa1E  = 41.93/2.;
       
@@ -304,7 +306,7 @@ void AliSHILv3::CreateGeometry()
       TGeoPcon* shFaSaa1 = new TGeoPcon(0., 360., 8);
       z = 0;
 // Flange FA side      
-      shFaSaa1->DefineSection( 0, z, rInFaSaa1F1, rOuFaSaa1F1);
+      shFaSaa1->DefineSection( 0, z, rInFaSaa1F1, rOuFaSaa1F1 - 0.01);
       z += dzFaSaa1F1;
       shFaSaa1->DefineSection( 1, z, rInFaSaa1F1, 40.0);
       shFaSaa1->DefineSection( 2, z, rInFaSaa1S1, 40.0);
@@ -320,19 +322,19 @@ void AliSHILv3::CreateGeometry()
       shFaSaa1->DefineSection( 6, z, rInFaSaa1F2, 40.0);
 // Flange SAA1 side
       z = dzFaSaa1;
-      shFaSaa1->DefineSection( 7, z, rInFaSaa1F2, rOuFaSaa1E);
+      shFaSaa1->DefineSection( 7, z, rInFaSaa1F2, rOuFaSaa1E - 0.01);
 
 // Outer 2 deg line
       for (Int_t i  = 1; i < 7; i++) {
-         Double_t z    = shFaSaa1->GetZ(i);
+         Double_t zp   = shFaSaa1->GetZ(i);
          Double_t r1   = shFaSaa1->GetRmin(i);  
-         Double_t r2 = 39.5/2. + z * TMath::Tan(2. * kDegRad) - 0.01;
-         shFaSaa1->DefineSection(i, z, r1, r2);
+         Double_t r2 = 39.5/2. + zp * TMath::Tan(2. * kDegRad) - 0.01;
+         shFaSaa1->DefineSection(i, zp, r1, r2);
       }
       TGeoVolume* voFaSaa1 = new TGeoVolume("YFASAA1", shFaSaa1, kMedNiWsh);
 //
 // Outer region with lower transport cuts
-      TGeoCone* shFaSaa1O   = new TGeoCone(dzFaSaa1/2., rOuFaSaa1F1 - 3.5, rOuFaSaa1F1, rOuFaSaa1E - 3.5, rOuFaSaa1E);
+      TGeoCone* shFaSaa1O   = new TGeoCone(dzFaSaa1/2., rOuFaSaa1F1 - 3.5, rOuFaSaa1F1 - 0.01, rOuFaSaa1E - 3.5, rOuFaSaa1E - 0.01);
       TGeoVolume* voFaSaa1O = new TGeoVolume("YFASAA1O", shFaSaa1O, kMedNiW);
       voFaSaa1->AddNode(voFaSaa1O, 1, new TGeoTranslation(0., 0., dzFaSaa1/2.));
       
@@ -351,19 +353,19 @@ void AliSHILv3::CreateGeometry()
 // Radii
 // 1
       Float_t rOuSaa1StEnv1 = 40.4/2.;
-      Float_t rInSaa1StEnv1 = rOuSaa1StEnv1 - dSt;
+      Float_t rInSaa1StEnv1 = rOuSaa1StEnv1 - dSt - 0.05;
 // 2  
       Float_t rInSaa1StEnv2 = 41.7/2.;
-      Float_t rOuSaa1StEnv2 = rInSaa1StEnv2 + dSt / TMath::Cos(2.0 * kDegRad);
+      Float_t rOuSaa1StEnv2 = rInSaa1StEnv2 + dSt / TMath::Cos(2.0 * kDegRad) - 0.05;
 // 3         
-      Float_t rOuSaa1StEnv3 = 57.6/2.;
-      Float_t rInSaa1StEnv3 = rOuSaa1StEnv3 - dSt;
+      Float_t rOuSaa1StEnv3 = 57.6/2.; 
+      Float_t rInSaa1StEnv3 = rOuSaa1StEnv3 - dSt + 0.05;
 // 4
       Float_t rInSaa1StEnv4 = 63.4/2.;
-      Float_t rOuSaa1StEnv4 = rInSaa1StEnv4 + dSt / TMath::Cos(1.6 * kDegRad);
+      Float_t rOuSaa1StEnv4 = rInSaa1StEnv4 + dSt / TMath::Cos(1.6 * kDegRad) - 0.05;
 // end         
       Float_t rInSaa1StEnv5 = 74.28/2.;
-      Float_t rOuSaa1StEnv5 = rInSaa1StEnv5 + dSt / TMath::Cos(1.6 * kDegRad);
+      Float_t rOuSaa1StEnv5 = rInSaa1StEnv5 + dSt / TMath::Cos(1.6 * kDegRad) - 0.05;
 // Relative starting position
       Float_t zSaa1StEnvS = 3.;
       
@@ -539,7 +541,7 @@ void AliSHILv3::CreateGeometry()
 // Inner region with higher transport cuts
       TGeoPcon*   shSaa1PbCompI = MakeShapeFromTemplate(shSaa1PbComp, 0., -3.);
       TGeoVolume* voSaa1PbCompI =  new TGeoVolume("YSAA1_PbCompI", shSaa1PbCompI, kMedPbSh);
-      voSaa1PbComp->AddNode(voSaa1PbCompI, 1, vec0);
+      voSaa1PbComp->AddNode(voSaa1PbCompI, 1, gGeoIdentity);
       
 ///////////////////////////////////
 //    SAA1 W-Cone                //
@@ -607,10 +609,10 @@ void AliSHILv3::CreateGeometry()
 //    Drawing ALIP2A__0107       //
 ///////////////////////////////////
       // Total length 
-      Float_t dzSaa1 = 659.2;
+      const Float_t dzSaa1 = 659.2;
       //
       TGeoPcon* shSaa1M  = new TGeoPcon(0., 360., 20);
-      Float_t kSec = 0.01; // security distance to avoid trivial extrusions
+      Float_t kSec = 0.2; // security distance to avoid trivial extrusions
       Float_t rmin = rInSaa1InnerTube - dSaa1InnerTube - kSec;
       rmax = rOuSaa1InnerTube - dSaa1InnerTube - kSec;
       z = 0.;
@@ -642,20 +644,20 @@ void AliSHILv3::CreateGeometry()
       shSaa1M->DefineSection(14, z, 0.,    rmaxSaa1);
       shSaa1M->DefineSection(15, z, rmax,  rmaxSaa1);
       z = zSaa1StRing;     
-      shSaa1M->DefineSection(16, z, rmax, rOuSaa1String);
+      shSaa1M->DefineSection(16, z, rmax + 0.4, rOuSaa1String);
       z += dzSaa1PbCompF1;
-      shSaa1M->DefineSection(17, z, rmax, rOuSaa1String);
-      shSaa1M->DefineSection(18, z, rmax, rOuSaa1PbCompF3);
+      shSaa1M->DefineSection(17, z, rmax + 0.4, rOuSaa1String);
+      shSaa1M->DefineSection(18, z, rmax + 0.4, rOuSaa1PbCompF3);
       z += dzSaa1PbCompF2;
-      shSaa1M->DefineSection(19, z, rmax, rOuSaa1PbCompF3);
+      shSaa1M->DefineSection(19, z, rmax + 0.4, rOuSaa1PbCompF3);
 
 //
 //    Inner 1.69deg line
       for (Int_t i  = 2; i < 15; i++) {
-         Double_t z    = shSaa1M->GetZ(i);
+         Double_t zp = shSaa1M->GetZ(i);
          Double_t r2 = shSaa1M->GetRmax(i);     
-         Double_t r1 = rmin + (z - 0.9) * TMath::Tan(1.69 / 2. * kDegRad) - kSec;
-         shSaa1M->DefineSection(i, z, r1, r2);
+         Double_t r1 = rmin + (zp - 0.9) * TMath::Tan(1.686 / 2. * kDegRad) - kSec;
+         shSaa1M->DefineSection(i, zp, r1, r2);
       }
 
       TGeoVolume* voSaa1M  =  new TGeoVolume("YSAA1M", shSaa1M, kMedAir);
@@ -673,19 +675,19 @@ void AliSHILv3::CreateGeometry()
 ///////////////////////////////////
       Float_t saa1Wring1Width  =  5.85;
       TGeoPcon* shSaa1Wring1    = new TGeoPcon(0., 360., 2);
-      shSaa1Wring1->DefineSection(0, 0.00           , 20.30, 23.175);
-      shSaa1Wring1->DefineSection(1, saa1Wring1Width, 20.30, 23.400);
+      shSaa1Wring1->DefineSection(0, 0.00           , 20.31, 23.175);
+      shSaa1Wring1->DefineSection(1, saa1Wring1Width, 20.31, 23.400);
       TGeoVolume* voSaa1Wring1  =  new TGeoVolume("YSAA1_WRING1", shSaa1Wring1, kMedNiW);
 
 ///////////////////////////////////
 //    SAA1 W-Ring 2              //
 //    Drawing ALIP2A__0055       //
 ///////////////////////////////////
-      Float_t saa1Wring2Rinner  = 20.30;
+      Float_t saa1Wring2Rinner  = 20.31;
       Float_t saa1Wring2Router  = 23.40;
       Float_t saa1Wring2HWidth  =  3.75;
-      Float_t saa1Wring2Cutoffx =  4.45;
-      Float_t saa1Wring2Cutoffy =  4.45;
+      Float_t saa1Wring2Cutoffx =  4.9;
+      Float_t saa1Wring2Cutoffy =  4.9;
       TGeoTubeSeg* shSaa1Wring2a  = new TGeoTubeSeg(saa1Wring2Rinner, saa1Wring2Router, saa1Wring2HWidth, 0., 90.);
       shSaa1Wring2a->SetName("shSaa1Wring2a");
       TGeoBBox* shSaa1Wring2b  = new TGeoBBox(saa1Wring2Router / 2., saa1Wring2Router / 2., saa1Wring2HWidth);
@@ -701,11 +703,11 @@ void AliSHILv3::CreateGeometry()
 //    Drawing ALIP2A__0216       //
 ///////////////////////////////////
 
-      Float_t saa1Wring3Rinner  = 20.30;
+      Float_t saa1Wring3Rinner  = 20.31;
       Float_t saa1Wring3Router  = 23.40;
       Float_t saa1Wring3HWidth  =  3.75;
       Float_t saa1Wring3Cutoffx =  4.50;
-      Float_t saa1Wring3Cutoffy =  4.40;
+      Float_t saa1Wring3Cutoffy =  4.50;
       TGeoTubeSeg* shSaa1Wring3a  = new TGeoTubeSeg(saa1Wring3Rinner, saa1Wring3Router, saa1Wring3HWidth, 0., 90.);
       shSaa1Wring3a->SetName("shSaa1Wring3a");
       TGeoBBox* shSaa1Wring3b  = new TGeoBBox(saa1Wring3Router / 2., saa1Wring3Router / 2., saa1Wring3HWidth);
@@ -722,10 +724,10 @@ void AliSHILv3::CreateGeometry()
 ///////////////////////////////////
       Float_t saa1Wring4Width  =  5.85;
       TGeoPcon* shSaa1Wring4  = new TGeoPcon(0., 360., 5);
-      shSaa1Wring4->DefineSection(0, 0.00, 20.30, 23.40);
-      shSaa1Wring4->DefineSection(1, 1.00, 20.30, 23.40);
-      shSaa1Wring4->DefineSection(2, 1.00, 20.30, 24.50);      
-      shSaa1Wring4->DefineSection(3, 4.85, 20.30, 24.80);
+      shSaa1Wring4->DefineSection(0, 0.00, 20.31, 23.40);
+      shSaa1Wring4->DefineSection(1, 1.00, 20.31, 23.40);
+      shSaa1Wring4->DefineSection(2, 1.00, 20.31, 24.50);      
+      shSaa1Wring4->DefineSection(3, 4.85, 20.31, 24.80);
       shSaa1Wring4->DefineSection(4, 5.85, 24.10, 24.80);
       TGeoVolume* voSaa1Wring4  =  new TGeoVolume("YSAA1_WRING4", shSaa1Wring4, kMedNiW);
 
@@ -733,7 +735,7 @@ void AliSHILv3::CreateGeometry()
 //    SAA1 W-Ring 5              //
 //    Drawing ALIP2A__0218       //
 ///////////////////////////////////
-      Float_t saa1Wring5Rinner = 20.30;
+      Float_t saa1Wring5Rinner = 20.31;
       Float_t saa1Wring5Router = 23.40;
       Float_t saa1Wring5HWidth =  0.85;
       TGeoVolume* voSaa1Wring5    = new TGeoVolume("YSAA1_WRING5", 
@@ -774,14 +776,14 @@ void AliSHILv3::CreateGeometry()
       const Float_t saa1ExtraShieldL = 48;
 //
 // Assemble SAA1
-      voSaa1M->AddNode(voSaa1StEnv,     1, vec0);
-      voSaa1M->AddNode(voSaa1WPipe,     1, vec0);
-      voSaa1M->AddNode(voSaa1PbComp,    1, vec0);
-      voSaa1M->AddNode(voSaa1WCone,     1, vec0);
-      voSaa1M->AddNode(voSaa1StRing,    1, vec0);
+      voSaa1M->AddNode(voSaa1StEnv,     1, gGeoIdentity);
+      voSaa1M->AddNode(voSaa1WPipe,     1, gGeoIdentity);
+      voSaa1M->AddNode(voSaa1PbComp,    1, gGeoIdentity);
+      voSaa1M->AddNode(voSaa1WCone,     1, gGeoIdentity);
+      voSaa1M->AddNode(voSaa1StRing,    1, gGeoIdentity);
       voSaa1M->AddNode(voSaa1InnerTube, 1, new TGeoTranslation(0., 0., dzSaa1InnerTube + 0.9));                      
       TGeoVolumeAssembly* voSaa1 = new TGeoVolumeAssembly("YSAA1");
-      voSaa1->AddNode(voSaa1M, 1, vec0);
+      voSaa1->AddNode(voSaa1M, 1, gGeoIdentity);
       
 ///////////////////////////////////////
 //          SAA1/SAA2  Pb Joint      //
@@ -805,7 +807,7 @@ void AliSHILv3::CreateGeometry()
       Float_t dzSaa1Saa2F2     =  3.1;
       Float_t rInSaa1Saa2F2    = 54.1/2.;
 // Total length
-      Float_t dzSaa1Saa2       = 34.9;
+      const Float_t dzSaa1Saa2       = 34.9;
       
       
       TGeoPcon* shSaa1Saa2Pb = new TGeoPcon(0., 360., 8);
@@ -833,13 +835,13 @@ void AliSHILv3::CreateGeometry()
       
       TGeoPcon* shSaa1Saa2 = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., rOuSaa1Saa2Steel-rOuSaa1Saa2);
       TGeoVolume* voSaa1Saa2 = new TGeoVolume("YSAA1SAA2", shSaa1Saa2, kMedSteel);
-      voSaa1Saa2->AddNode(voSaa1Saa2Pb, 1, vec0);
+      voSaa1Saa2->AddNode(voSaa1Saa2Pb, 1, gGeoIdentity);
 //
 //    Inner region with higher transport cuts
 //
       TGeoPcon*   shSaa1Saa2I = MakeShapeFromTemplate(shSaa1Saa2Pb, 0., -3.);
       TGeoVolume* voSaa1Saa2I = new TGeoVolume("YSAA1_SAA2I", shSaa1Saa2I, kMedPbSh);
-      voSaa1Saa2Pb->AddNode(voSaa1Saa2I, 1, vec0);
+      voSaa1Saa2Pb->AddNode(voSaa1Saa2I, 1, gGeoIdentity);
       
 
 
@@ -857,7 +859,7 @@ void AliSHILv3::CreateGeometry()
       Float_t dzSaa2StEnv1  = 163.15;
       Float_t rInSaa2StEnv1 = 65.8/2.;
       // Length of the second section
-      Float_t dzSaa2StEnv2  = 340.35;
+      Float_t dzSaa2StEnv2  = 340.35 - 4.;
       Float_t rInSaa2StEnv2 = 87.2/2.;
       // Rel. starting position 
       Float_t zSaa2StEnv = 3.;
@@ -913,7 +915,7 @@ void AliSHILv3::CreateGeometry()
       tanAlpha = TMath::Tan(1.89 / 2. * kDegRad);
       TGeoPcon* shSaa2PbComp  = new TGeoPcon(0., 360., 16);
       // Total length 
-      Float_t dzSaa2PbComp    = 512.;
+      const Float_t dzSaa2PbComp    = 512.;
       // Length of 1st bellow recess
       Float_t dzSaa2PbCompB1  =  24.;
       // Length of 2nd bellow recess
@@ -987,9 +989,9 @@ void AliSHILv3::CreateGeometry()
       // Section 1
       z += dzSaa2PbComp1;
       shSaa2PbComp->DefineSection(  6,  z, rInSaa2PbComp1, rOuSaa2PbComp1);
+      shSaa2PbComp->DefineSection(  7,  z, rInSaa2PbComp1, rOuSaa2PbComp2);
       //
       // Section 2
-      shSaa2PbComp->DefineSection(  7,  z, rInSaa2PbComp2, rOuSaa2PbComp2);
       z += dzSaa2PbComp2;
       shSaa2PbComp->DefineSection(  8,  z, rInSaa2PbComp2, rOuSaa2PbComp2);
       //
@@ -1094,17 +1096,17 @@ void AliSHILv3::CreateGeometry()
 // Inner 1.89/2 deg line
       Double_t zref   = dzSaa2PbCompA1 + dzSaa2PbCompA2 + dzSaa2PbCompA3;
       for (Int_t i  = 4; i < 10; i++) {
-         Double_t z    = shSaa2->GetZ(i);
+         Double_t zp = shSaa2->GetZ(i);
          Double_t r2 = shSaa2->GetRmax(i);      
-         Double_t r1 = rmin + (z -  zref) * TMath::Tan(1.89 / 2. * kDegRad) - kSec;
-         shSaa2->DefineSection(i, z, r1, r2);
+         Double_t r1 = rmin + (zp -  zref) * TMath::Tan(1.89 / 2. * kDegRad) - kSec;
+         shSaa2->DefineSection(i, zp, r1, r2);
       }
 
 //
 //    Assemble SAA2
-      voSaa2->AddNode(voSaa2StEnv,     1, vec0);
-      voSaa2->AddNode(voSaa2PbRing,    1, vec0);
-      voSaa2->AddNode(voSaa2PbComp,    1, vec0);
+      voSaa2->AddNode(voSaa2StEnv,     1, gGeoIdentity);
+      voSaa2->AddNode(voSaa2PbRing,    1, gGeoIdentity);
+      voSaa2->AddNode(voSaa2PbComp,    1, gGeoIdentity);
       voSaa2->AddNode(voSaa2InnerTube, 1, new TGeoTranslation(0., 0., dzSaa2PbCompA1));
       z = (dzSaa2PbComp - dzSaa2PbCompE4 - dzSaa2PbCompE5) + dzSaa2SteelRing;
       voSaa2->AddNode(voSaa2SteelRing, 1, new TGeoTranslation(0., 0., z));
@@ -1120,101 +1122,76 @@ void AliSHILv3::CreateGeometry()
 //
 ///////////////////////////////////
 //    SAA3 Outer Shape           //
-//    Drawing ALIP2A__0xxx       //
+//    Drawing ALIP2A__0288       //
 ///////////////////////////////////
-      
       TGeoVolumeAssembly* voSaa3  = new TGeoVolumeAssembly("YSAA3");
-      
 ///////////////////////////////////
-//    SAA3 Steel Components      //
-//    Drawing ALIP2A__0xxx       //
+//    SAA3 Concrete cone         //
+//    Drawing ALIP2A__0284       //
 ///////////////////////////////////
 //    Block
-      TGeoBBox* shSaa3SteelBlockO   = new TGeoBBox(220./2., 80./2., 100./2.);
-      shSaa3SteelBlockO->SetName("Saa3SteelBlockO");
-
-      TGeoPcon* shSaa3InnerRegion  = new TGeoPcon(0., 360., 6);
-      shSaa3InnerRegion->DefineSection( 0, -52.0, 0., 56.6/2.);
-      shSaa3InnerRegion->DefineSection( 1, -45.0, 0., 56.6/2.);
-      shSaa3InnerRegion->DefineSection( 2, -42.0, 0., 50.6/2.);
-      shSaa3InnerRegion->DefineSection( 3, -30.0, 0., 50.6/2.);
-      shSaa3InnerRegion->DefineSection( 4,  30.5, 0., 16.8/2.);
-      shSaa3InnerRegion->DefineSection( 5,  52.0, 0., 16.8/2.);
+      TGeoBBox* shSaa3CCBlockO   = new TGeoBBox(80./2., 80./2., 80./2.);  // modified by ernesto.calvo@pucp.edu.pe
+      shSaa3CCBlockO->SetName("Saa3CCBlockO");
+
+      TGeoPcon* shSaa3InnerRegion  = new TGeoPcon(0., 360., 4);
+      // + 10.0 cm // ecv
+      shSaa3InnerRegion->DefineSection( 0, -50.0, 0., 27.1);
+      shSaa3InnerRegion->DefineSection( 1, -13.0, 0., 27.1);
+      shSaa3InnerRegion->DefineSection( 2,  39.1, 0., 12.3);
+      shSaa3InnerRegion->DefineSection( 3,  80.0, 0., 12.3);
       shSaa3InnerRegion->SetName("Saa3InnerRegion");
 
-      TGeoCompositeShape* shSaa3SteelBlock = new TGeoCompositeShape("Saa3SteelBlock", "Saa3SteelBlockO-Saa3InnerRegion");
-      TGeoVolume* voSaa3SteelBlock         = new TGeoVolume("YSAA3SteelBlock", shSaa3SteelBlock, kMedSteel);     
-
-
-      voSaa3->AddNode(voSaa3SteelBlock, 1, vec0);
-//    Plate 1: 220 cm x 100 cm x 10 cm (x 1)
-      TGeoBBox* shSaa3SteelPlate1   = new TGeoBBox(220./2., 10./2., 100./2.);
-      TGeoVolume* voSaa3SteelPlate1  =  new TGeoVolume("YSAA3SteelPlate1", shSaa3SteelPlate1, kMedSteel);
-      voSaa3->AddNode(voSaa3SteelPlate1, 1, new TGeoTranslation(0., -80./2. - 10./2., 0.));
-//    Plate 2: 200 cm x 100 cm x 10 cm (x 6)
-      TGeoBBox* shSaa3SteelPlate2   = new TGeoBBox(200./2., 60./2., 100./2.);
-      TGeoVolume* voSaa3SteelPlate2  =  new TGeoVolume("YSAA3SteelPlate2", shSaa3SteelPlate2, kMedSteel);
-      voSaa3->AddNode(voSaa3SteelPlate2, 1, new TGeoTranslation(0., -80./2. - 10. - 60./2., 0.));
-//    Plate 3: 200 cm x 100 cm x 10 cm (x 4)
-      TGeoBBox* shSaa3SteelPlate3   = new TGeoBBox(200./2., 40./2., 100./2.);
-      TGeoVolume* voSaa3SteelPlate3  =  new TGeoVolume("YSAA3SteelPlate3", shSaa3SteelPlate3, kMedSteel);
-      voSaa3->AddNode(voSaa3SteelPlate3, 1, new TGeoTranslation(0., +80./2. + 40/2., 0.));
-//    Plate 4: 180 cm x 100 cm x 10 cm (x 1)
-      TGeoBBox* shSaa3SteelPlate4   = new TGeoBBox(180./2., 10./2., 100./2.);
-      TGeoVolume* voSaa3SteelPlate4  =  new TGeoVolume("YSAA3SteelPlate4", shSaa3SteelPlate4, kMedSteel);
-      voSaa3->AddNode(voSaa3SteelPlate4, 1, new TGeoTranslation(0., +80./2. + 40. + 10/2., 0.));
-//    Plate 5: 150 cm x 100 cm x 10 cm (x 1)
-      TGeoBBox* shSaa3SteelPlate5   = new TGeoBBox(150./2., 10./2., 100./2.);
-      TGeoVolume* voSaa3SteelPlate5  =  new TGeoVolume("YSAA3SteelPlate5", shSaa3SteelPlate5, kMedSteel);
-      voSaa3->AddNode(voSaa3SteelPlate5, 1, new TGeoTranslation(0., +80./2. + 50. + 10/2., 0.));
-//    Plate 6: 100 cm x 100 cm x 10 cm (x 1)
-      TGeoBBox* shSaa3SteelPlate6   = new TGeoBBox(100./2., 10./2., 100./2.);
-      TGeoVolume* voSaa3SteelPlate6  =  new TGeoVolume("YSAA3SteelPlate6", shSaa3SteelPlate6, kMedSteel);
-      voSaa3->AddNode(voSaa3SteelPlate6, 1, new TGeoTranslation(0., +80./2. + 60. + 10/2., 0.));
+      TGeoCompositeShape* shSaa3CCBlock = new TGeoCompositeShape("Saa3CCBlock", "Saa3CCBlockO-Saa3InnerRegion");
+      TGeoVolume* voSaa3CCBlock         = new TGeoVolume("YSAA3CCBlock", shSaa3CCBlock, kMedConcSh);     
+
+      
+      voSaa3->AddNode(voSaa3CCBlock, 1, gGeoIdentity);
+      
+//    Plate 1: 240 cm x 80 cm x  80 cm (x 2)
+      TGeoVolume* voSaa3SteelPlate1  =  new TGeoVolume("YSAA3SteelPlate1", 
+                                                      new TGeoBBox(240./2., 80./2.,  80./2.),
+                                                      kMedSteelSh);
+      TGeoVolume* voSaa3SteelPlate11 =  new TGeoVolume("YSAA3SteelPlate11", 
+                                                      new TGeoBBox(240./2., 80./2., 10./2.),
+                                                      kMedSteel);
+      voSaa3SteelPlate11->SetVisContainers(kTRUE);
+      voSaa3SteelPlate1 ->SetVisibility(kTRUE);
+      voSaa3SteelPlate1->AddNode(voSaa3SteelPlate11, 1, new TGeoTranslation(0., 0., -35.));
+      voSaa3->AddNode(voSaa3SteelPlate1, 1, new TGeoTranslation(0., +80., 0.));
+      voSaa3->AddNode(voSaa3SteelPlate1, 2, new TGeoTranslation(0., -80., 0.));
+
+
+//    Plate 2:  80 cm x 80 cm x  80 cm (x 2)
+      TGeoVolume* voSaa3SteelPlate2  =  new TGeoVolume("YSAA3SteelPlate2", 
+                                                      new TGeoBBox( 80./2., 80./2.,  80./2.),
+                                                      kMedSteelSh);
+      TGeoVolume* voSaa3SteelPlate21 =  new TGeoVolume("YSAA3SteelPlate21", 
+                                                      new TGeoBBox( 80./2., 80./2., 10./2.),
+                                                      kMedSteel);
+      voSaa3SteelPlate2->AddNode(voSaa3SteelPlate21, 1, new TGeoTranslation(0., 0., -35.));
+      voSaa3->AddNode(voSaa3SteelPlate2, 1, new TGeoTranslation(+80, 0., 0.));
+      voSaa3->AddNode(voSaa3SteelPlate2, 2, new TGeoTranslation(-80, 0., 0.));
+
 
-///////////////////////////////////
-//    SAA3 Concrete Piece        //
-//    Drawing ALIP2A__0xxx       //
-///////////////////////////////////
-      TGeoPcon* shSaa3ConcPiece  = new TGeoPcon(0., 360., 6);
-      shSaa3ConcPiece->DefineSection( 0,   0.0, 57.4/2., 62./2.);
-      shSaa3ConcPiece->DefineSection( 1,   5.0, 57.4/2., 62./2.);
-      shSaa3ConcPiece->DefineSection( 2,   8.0, 51.4/2., 62./2.);
-      shSaa3ConcPiece->DefineSection( 3,  20.0, 51.4/2., 62./2.);
-      shSaa3ConcPiece->DefineSection( 4,  80.5, 17.6/2., 62./2.);
-      shSaa3ConcPiece->DefineSection( 5, 100.0, 17.6/2., 62./2.);
-      TGeoVolume* voSaa3ConcPiece  =  new TGeoVolume("YSAA2_ConcPiece", shSaa3ConcPiece, kMedConc);
-      voSaa3SteelBlock->AddNode(voSaa3ConcPiece, 1, new TGeoTranslation(0., 0., -50.));
 
-///////////////////////////////////
-//    SAA3 InnerTube             //
-//    Drawing ALIP2A__0xxx       //
-///////////////////////////////////
-      TGeoPcon* shSaa3InnerTube  = new TGeoPcon(0., 360., 6);
-      shSaa3InnerTube->DefineSection( 0,   0.0, 56.6/2., 57.0/2.);
-      shSaa3InnerTube->DefineSection( 1,   5.0, 56.6/2., 57.0/2.);
-      shSaa3InnerTube->DefineSection( 2,   8.0, 50.6/2., 51.0/2.);
-      shSaa3InnerTube->DefineSection( 3,  20.0, 50.6/2., 51.0/2.);
-      shSaa3InnerTube->DefineSection( 4,  80.5, 16.8/2., 17.2/2.);
-      shSaa3InnerTube->DefineSection( 5, 100.0, 16.8/2., 17.2/2.);
-      TGeoVolume* voSaa3InnerTube  =  new TGeoVolume("YSAA2_InnerTube", shSaa3InnerTube, kMedSteelSh);
-      voSaa3SteelBlock->AddNode(voSaa3InnerTube, 1, new TGeoTranslation(0., 0., -50.));
 
 ///////////////////////////////////
 //    Muon Filter                //
 //    Drawing ALIP2A__0105       //
 ///////////////////////////////////
       // Half Length 
-      Float_t dzMuonFilter = 60.;
+      const Float_t dzMuonFilter = 60.;
       
       TGeoBBox*   shMuonFilterO  = new TGeoBBox(550./2., 620./2., dzMuonFilter);
       shMuonFilterO->SetName("FilterO");
-      TGeoTube*   shMuonFilterI  = new TGeoTube(0., 50., dzMuonFilter + 5.);
+      TGeoCombiTrans* trFilter = new TGeoCombiTrans("trFilter", 0., -dzMuonFilter * TMath::Tan(alhc * kDegrad), 0., rotlhc);
+      trFilter->RegisterYourself();
+      TGeoTube*   shMuonFilterI  = new TGeoTube(0., 48.8, dzMuonFilter + 20.);
       shMuonFilterI->SetName("FilterI");
-      TGeoCompositeShape* shMuonFilter = new TGeoCompositeShape("MuonFilter", "FilterO-FilterI");
+      TGeoCompositeShape* shMuonFilter = new TGeoCompositeShape("MuonFilter", "FilterO-FilterI:trFilter");
       //
       // !!!!! Needs to be inclined
-      TGeoVolume* voMuonFilter = new TGeoVolume("YMuonFilter", shMuonFilter, kMedSteel);
+      TGeoVolume* voMuonFilter = new TGeoVolume("YMuonFilter", shMuonFilter, kMedCastiron);
 
       // Inner part with higher transport cuts
       Float_t dzMuonFilterH = 50.;
@@ -1222,135 +1199,145 @@ void AliSHILv3::CreateGeometry()
       shMuonFilterOH->SetName("FilterOH");
       TGeoTube*   shMuonFilterIH  = new TGeoTube(0., 50., dzMuonFilterH + 5.);
       shMuonFilterIH->SetName("FilterIH");
-      TGeoCompositeShape* shMuonFilterH = new TGeoCompositeShape("MuonFilterH", "FilterOH-FilterIH");
-      TGeoVolume* voMuonFilterH = new TGeoVolume("YMuonFilterH", shMuonFilterH, kMedSteelSh);
+      TGeoCompositeShape* shMuonFilterH = new TGeoCompositeShape("MuonFilterH", "FilterOH-FilterIH:trFilter");
+      TGeoVolume* voMuonFilterH = new TGeoVolume("YMuonFilterH", shMuonFilterH, kMedCastironSh);
       voMuonFilter->AddNode(voMuonFilterH, 1, gGeoIdentity);
       
 //  
       TGeoVolumeAssembly* voSaa  = new TGeoVolumeAssembly("YSAA");
 //
-//    
-//    
-//
-//
 //    Starting position of the FA Flange/Tail 
-      Float_t ziFaWTail   = 499.0;
+      const Float_t ziFaWTail   = 499.0;
 //    End of the FA Flange/Tail
-      Float_t zoFaWTail   = ziFaWTail + dzFaWTail;
+      const Float_t zoFaWTail   = ziFaWTail + dzFaWTail;
 //    Starting position of the FA/SAA1 Joint (2.8 cm overlap with tail)
-      Float_t ozFaSaa1    = 2.8;
-      Float_t ziFaSaa1    = zoFaWTail - ozFaSaa1;
+      const Float_t ozFaSaa1    = 2.8;
+      const Float_t ziFaSaa1    = zoFaWTail - ozFaSaa1;
 //    End of the FA/SAA1 Joint
-      Float_t zoFaSaa1    = ziFaSaa1 +  dzFaSaa1;
+      const Float_t zoFaSaa1    = ziFaSaa1 +  dzFaSaa1;
 //    Starting position of SAA1 (2.0 cm overlap with joint)     
-      Float_t ozSaa1      = 2.;
-      Float_t ziSaa1      = zoFaSaa1 - ozSaa1;
+      const Float_t ozSaa1      = 2.;
+      const Float_t ziSaa1      = zoFaSaa1 - ozSaa1;
 //    End of SAA1
-      Float_t zoSaa1      = ziSaa1 + dzSaa1;
+      const Float_t zoSaa1      = ziSaa1 + dzSaa1;
 //    Starting position of SAA1/SAA2 Joint (1.95 cm overlap with SAA1)
-      Float_t ziSaa1Saa2  = zoSaa1 - 1.95;
+      const Float_t ziSaa1Saa2  = zoSaa1 - 1.95;
 //    End of SAA1/SAA2 Joint
-      Float_t zoSaa1Saa2  = ziSaa1Saa2 + dzSaa1Saa2;
+      const Float_t zoSaa1Saa2  = ziSaa1Saa2 + dzSaa1Saa2;
 //    Starting position of SAA2 (3.1 cm overlap with the joint)
-      Float_t ziSaa2      = zoSaa1Saa2 - 3.1;
+      const Float_t ziSaa2      = zoSaa1Saa2 - 3.1;
 //    End of SAA2
-      Float_t zoSaa2      = ziSaa2 + dzSaa2PbComp;
+      const Float_t zoSaa2      = ziSaa2 + dzSaa2PbComp;
 //    Position of SAA3
-      Float_t zcSaa3      = zoSaa2 + 50.;
+      const Float_t zcSaa3      = zoSaa2 + 40.; // ecv (put the CC block 5cm closer to the Wall)  // <--cancell that!! (cancelled)
 //    Position of the Muon Filter
-      Float_t zcFilter    = 1465.9 + dzMuonFilter;
+      const Float_t zcFilter    = 1465.9 + dzMuonFilter;
 
-      printf("FaSaa1    %f %f \n", ziFaSaa1, zoFaSaa1);
-      printf("Saa1      %f %f \n", ziSaa1, zoSaa1);
-      printf("Saa1/Saa2 %f %f \n", ziSaa1Saa2, zoSaa1Saa2);
-      printf("Saa2      %f %f \n", ziSaa2, zoSaa2);
-      
       voSaa->AddNode(voFaWTail,    1, new TGeoTranslation(0., 0., ziFaWTail));
       voSaa->AddNode(voFaSaa1,     1, new TGeoTranslation(0., 0., ziFaSaa1));
       voSaa->AddNode(voSaa1 ,      1, new TGeoTranslation(0., 0., ziSaa1));
-      voSaa->AddNode(voSaa1Saa2,   1, new TGeoTranslation(0., 0., ziSaa1Saa2));
+      voSaa->AddNode(voSaa1Saa2,   1, new TGeoTranslation(0., 0., ziSaa1Saa2 - 0.1));
       voSaa->AddNode(voSaa2 ,      1, new TGeoTranslation(0., 0., ziSaa2));
+
+//
+//    Add Saa3 to Saa and Saa to top volume
+//
       voSaa->AddNode(voSaa3,       1, new TGeoTranslation(0., 0., zcSaa3));
       
 
       TGeoRotation* rotxz  = new TGeoRotation("rotxz",   90.,   0., 90.,  90., 180., 0.);
       top->AddNode(voSaa, 1, new TGeoCombiTrans(0., 0., 0., rotxz));
+
+
+
 //
 //  Mother volume for muon stations 1+2 and shielding material placed between the quadrants
 //
       // Position of the dipole
-      Float_t ziDipole = 724.45;
+      Float_t ziDipole = 741.;
       
-      TGeoPcon* shYOUT1 = new TGeoPcon(0., 360., 25);
+      TGeoPcon* shYOUT1 = new TGeoPcon(0., 360., 24);
       Float_t eps = 1.e-2;
       // FA Tail Section
-      for (Int_t iz =  0; iz < 9; iz++) {
+      for (Int_t iz =  1; iz < 9; iz++) {
          z = shFaWTail->GetZ(iz+1);
          if (iz == 8) z -= ozFaSaa1;
-         shYOUT1->DefineSection(iz, z + ziFaWTail, shFaWTail->GetRmax(iz+1) + eps, 150.);
+         shYOUT1->DefineSection(iz-1, z + ziFaWTail, shFaWTail->GetRmax(iz+1) + eps, 150.);
       }
       // FA-SAA1 Joint
-      z = shYOUT1->GetZ(8);
+      z = shYOUT1->GetZ(7);
       
       for (Int_t iz =  9; iz < 17; iz++) 
-         shYOUT1->DefineSection(iz, z + shFaSaa1->GetZ(iz-9), shFaSaa1->GetRmax(iz-9) + eps, 150.);
+         shYOUT1->DefineSection(iz-1, z + shFaSaa1->GetZ(iz-9), shFaSaa1->GetRmax(iz-9) + eps, 150.);
 
-      z = shYOUT1->GetZ(16) - ozSaa1;
+      z = shYOUT1->GetZ(15) - ozSaa1;
       // SAA1  - Dipole
       for (Int_t iz = 17; iz < 24; iz++) 
-         shYOUT1->DefineSection(iz, z + shSaa1M->GetZ(iz-13), shSaa1M->GetRmax(iz-13) + eps, 150.); 
+         shYOUT1->DefineSection(iz-1, z + shSaa1M->GetZ(iz-13), shSaa1M->GetRmax(iz-13) + eps, 150.); 
       // Distance between dipole and start of SAA1 2deg opening cone
       dz   = ziDipole - (zSaa1StEnv[0] - dSt + zSaa1StEnvS + ziSaa1);
       rOut = rOuSaa1StEnv2 + dz * TMath::Tan(2. * kDegRad);
       
-      shYOUT1->DefineSection(24, ziDipole, rOut + eps, 150.);
+      shYOUT1->DefineSection(23, ziDipole, rOut + eps, 150.);
 
       InvertPcon(shYOUT1);
       TGeoVolume* voYOUT1 = new TGeoVolume("YOUT1", shYOUT1, kMedAirMu);
       voYOUT1->SetVisibility(0);
 
       voYOUT1->AddNode(asSaa1ExtraShield, 1, new TGeoCombiTrans(0., 0., - (100.7 + 62.2 + saa1ExtraShieldL / 2. + ziFaWTail), rotxz));
-      voYOUT1->AddNode(asFaExtraShield,   1, new TGeoCombiTrans(0., 0., - (16.41 + kFaWring2HWidth + ziFaWTail), rotxz));
-      top->AddNode(voYOUT1, 1, vec0);
+      voYOUT1->AddNode(asFaExtraShield,   1, new TGeoCombiTrans(0., 0., - (16.41 - 1.46 + kFaWring2HWidth + ziFaWTail), rotxz));
+      top->AddNode(voYOUT1, 1, gGeoIdentity);
 //
 //  Mother volume for muon stations 4+5 and trigger stations.
 //
-      Float_t zoDipole = 1235.55;
+      Float_t zoDipole = 1249.;
       
-      TGeoPcon* shYOUT2 = new TGeoPcon(0., 360., 14);
+      TGeoPcon* shYOUT21 = new TGeoPcon(0., 360., 14);
       z =  zoDipole;
-      shYOUT2->DefineSection(0, z,             rOuSaa1String,       252.);
+      shYOUT21->DefineSection(0, z,             rOuSaa1String,       375.);
 //    Start of SAA1-SAA2
       z = ziSaa1Saa2;
-      shYOUT2->DefineSection(1, z,             rOuSaa1String,       252.);
-      shYOUT2->DefineSection(2, z,             rOuSaa1Saa2Steel,    252.);
+      shYOUT21->DefineSection(1, z,             rOuSaa1String,       375.);
+      shYOUT21->DefineSection(2, z,             rOuSaa1Saa2Steel,    375.);
 //    End of SAA1-SAA2
       z = ziSaa2;
-      shYOUT2->DefineSection(3, z,             rOuSaa1Saa2Steel,    252.);
+      shYOUT21->DefineSection(3, z,             rOuSaa1Saa2Steel,    375.);
 //    SAA2
-      shYOUT2->DefineSection( 4, z,            rInSaa2StEnv1 + dSt, 252.);
+      shYOUT21->DefineSection( 4, z,            rInSaa2StEnv1 + dSt, 375.);
       z = ziSaa2 + zSaa2PbRing;
-      shYOUT2->DefineSection( 5, z,            rInSaa2StEnv1 + dSt, 252.);
+      shYOUT21->DefineSection( 5, z,            rInSaa2StEnv1 + dSt, 375.);
 //    Pb Cone
-      shYOUT2->DefineSection( 6, z,            rOuSaa2PbRingF,      252.);
+      shYOUT21->DefineSection( 6, z,            rOuSaa2PbRingF,      375.);
       rmin = rOuSaa2PbRingF + (1380. - z) * TMath::Tan(1.6 * kDegRad);
-      shYOUT2->DefineSection( 7, 1380., rmin, 252.);
-      shYOUT2->DefineSection( 8, 1380., rmin, 304.);
+      shYOUT21->DefineSection( 7, 1380., rmin, 375.);
+      shYOUT21->DefineSection( 8, 1380., rmin, 375.);
       z = ziSaa2 + zSaa2PbRing + dzSaa2PbRing;
-      shYOUT2->DefineSection( 9, z,            rOuSaa2PbRingR,      304.);
+      shYOUT21->DefineSection( 9, z,            rOuSaa2PbRingR,      375.);
 //    Straight Sections
-      shYOUT2->DefineSection(10, z,            rInSaa2StEnv1 + dSt, 460.);
+      shYOUT21->DefineSection(10, z,            rInSaa2StEnv1 + dSt, 460.);
       z = ziSaa2 + dzSaa2StEnv1;
-      shYOUT2->DefineSection(11, z,            rInSaa2StEnv1 + dSt, 460.);
-      shYOUT2->DefineSection(12, z,            rInSaa2StEnv2 + dSt, 460.);
+      shYOUT21->DefineSection(11, z,            rInSaa2StEnv1 + dSt, 460.);
+      shYOUT21->DefineSection(12, z,            rInSaa2StEnv2 + dSt, 460.);
       z += dzSaa2StEnv2;
-      shYOUT2->DefineSection(13, z,            rInSaa2StEnv2 + dSt, 460.);
+      shYOUT21->DefineSection(13, z,            rInSaa2StEnv2 + dSt, 460.);
+            
+      InvertPcon(shYOUT21);
+      shYOUT21->SetName("shYOUT21");
+
+      TGeoBBox* shYOUT22 = new TGeoBBox(460. , 200., 65. - 1.5);
+      shYOUT22->SetName("shYOUT22");
+      
+      TGeoTranslation* tYOUT22 = new TGeoTranslation(0., -310. - 200., -zcFilter);
+      tYOUT22->SetName("tYOUT22");
+      tYOUT22->RegisterYourself();
+      
+
+      TGeoCompositeShape* shYOUT2 = new TGeoCompositeShape("shYOUT2", "shYOUT21-shYOUT22:tYOUT22");
       
-      InvertPcon(shYOUT2);
       TGeoVolume* voYOUT2 = new TGeoVolume("YOUT2", shYOUT2, kMedAirMu);
-      voYOUT2->SetVisibility(0);
-      voYOUT2->AddNode(voMuonFilter, 1, new TGeoTranslation(0., 0., -zcFilter));            
-      top->AddNode(voYOUT2, 1, vec0);
+      voYOUT2->SetVisibility(1);
+      voYOUT2->AddNode(voMuonFilter, 1, new TGeoCombiTrans(0., dzMuonFilter * TMath::Tan(alhc * kDegrad), -zcFilter, rotxzlhc));
+      top->AddNode(voYOUT2, 1, gGeoIdentity);
 }
 
 void AliSHILv3::Init()
@@ -1363,7 +1350,7 @@ void AliSHILv3::Init()
   if(AliLog::GetGlobalDebugLevel()>0) {
     printf("\n%s: ",ClassName());
     for(i=0;i<35;i++) printf("*");
-    printf(" SHILvTGeo_INIT ");
+    printf(" SHILv3_INIT ");
     for(i=0;i<35;i++) printf("*");
     printf("\n%s: ",ClassName());
     //
@@ -1403,7 +1390,7 @@ void AliSHILv3::InvertPcon(TGeoPcon* pcon)
     delete[] rmax;
 }
 
-TGeoPcon* AliSHILv3::MakeShapeFromTemplate(TGeoPcon* pcon, Float_t drMin, Float_t drMax)
+TGeoPcon* AliSHILv3::MakeShapeFromTemplate(const TGeoPcon* pcon, Float_t drMin, Float_t drMax)
 {
     // 
     // Returns new shape based on a template changing