]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerGeometryBuilder.cxx
Changes to compile with Root6 on macosx64
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerGeometryBuilder.cxx
index 74e78573f2d466fc244e35d7ca4f5e0be6937a35..de8ac7a6ae360715533d5fd92cf2778c0850159b 100644 (file)
  **************************************************************************/
 
 // $Id$
-//
-// Class AliMUONTriggerGeometryBuilder
+
+//-----------------------------------------------------------------------------
+/// Class AliMUONTriggerGeometryBuilder
 // -----------------------------------
-// MUON Trigger stations geometry construction class.
-//
-// Author: Philippe Crochette, LPC Clermont-Ferrand
+// MUON Trigger stations geometry 
+// construction class.
+// Author: Philippe Crochet (LPCCFd)
+// Support for trigger chambers added April 07 by Enrico Scomparin (INFN To)
+//-----------------------------------------------------------------------------
 
 #include <TVirtualMC.h>
 #include <TGeoMatrix.h>
+#include <TArrayI.h>
+
+#include "AliLog.h"
+#include "AliRun.h"
 
 #include "AliMUONTriggerGeometryBuilder.h"
 #include "AliMUON.h"
-#include "AliMUONChamber.h"
-#include "AliMUONChamberGeometry.h"
+#include "AliMUONConstants.h"
+#include "AliMUONGeometryModule.h"
 #include "AliMUONGeometryEnvelopeStore.h"
-#include "AliLog.h"
 
+using std::endl;
+using std::cout;
+/// \cond CLASSIMP
 ClassImp(AliMUONTriggerGeometryBuilder)
+/// \endcond
+
+// vertical gap between right and left chambers (kDXZERO*2=4cm)
+const Float_t AliMUONTriggerGeometryBuilder::fgkDXZERO=2.; 
+// main distances for chamber definition in first plane/first station
+const Float_t AliMUONTriggerGeometryBuilder::fgkXMIN=34.;       
+const Float_t AliMUONTriggerGeometryBuilder::fgkXMED=51.;                                
+const Float_t AliMUONTriggerGeometryBuilder::fgkXMAX=255.; 
+// 090704 fgkXMAX changed from 272 to 255.
+// (see fig.2-4 & 2-5 of Local Trigger Board PRR)
+// segmentation updated accordingly
+const Float_t AliMUONTriggerGeometryBuilder::fgkYMIN=34.;                              
+const Float_t AliMUONTriggerGeometryBuilder::fgkYMAX=51.;                              
+// inner/outer radius of flange between beam shield. and chambers (1/station)
+//const Float_t AliMUONTriggerGeometryBuilder::fgkRMIN[2]={50.,50.};
+//const Float_t AliMUONTriggerGeometryBuilder::fgkRMAX[2]={64.,68.};
+// z position of the middle of the gas gap in mother vol 
+const Float_t AliMUONTriggerGeometryBuilder::fgkZm=-3.6;
+const Float_t AliMUONTriggerGeometryBuilder::fgkZp=+3.6;
+    
+// y positions of vertical supports
+const Float_t AliMUONTriggerGeometryBuilder::fgkYVSup[4]={61.45,122.45,192.95,236.95}; 
+// dimensions of vertical supports 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeVSupExt[3]={1.5,1.5,306.+5.}; 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeVSupInt[3]={1.2,1.2,306.+5.};  
+// transverse dimensions of angular supports 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport1V[3]={0.,1.5,0.1}; 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport1H[3]={0.,0.1,1.15}; // z should be 1.4 in the installed set-up 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport2V[3]={0.,3.0,0.1}; 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport2H[3]={0.,0.1,1.9}; 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupportXV[3]={0.,1.25,0.25}; 
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupportXH[3]={0.,0.25,1.5}; 
+// transverse dimensions of horizontal cable supports
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupportCable[3]={0.,2.,3.}; 
+// dimensions of gas pipes (inner and outer radius)
+const Float_t AliMUONTriggerGeometryBuilder::fgkSizeGasPipe[3]={0.2,0.4,0.}; 
+// Position of gas pipe with respect to angular support
+const Float_t AliMUONTriggerGeometryBuilder::fgkOffsetGasPipe=0.75; 
+// Small cut on some volumes to avoid extrusion from SC1x
+const Float_t AliMUONTriggerGeometryBuilder::fgkAvoidExtrusion=2.9;    
 
 //______________________________________________________________________________
 AliMUONTriggerGeometryBuilder::AliMUONTriggerGeometryBuilder(AliMUON* muon)
- : AliMUONVGeometryBuilder("trigger.dat",
-                           &muon->Chamber(10), &muon->Chamber(11),
-                           &muon->Chamber(12),&muon->Chamber(13)),
-   fMUON(muon)
+ : AliMUONVGeometryBuilder(16, 4),
+   fMUON(muon),
+   fIdtmed(0),
+   fIdAir(0),  
+   fIdAlu1(0),
+   fIdInox(0),
+   fYEnvPsave(0.), 
+   fYEnvMsave(0.), 
+   fDYsave(0.),
+   fDXsave(0.),
+   fRsupportpipe()
 {
-// Standard constructor
-
+/// Standard constructor
+   fRsupportpipe.SetAngles(90.,90.,0.);
 }
 
 //______________________________________________________________________________
 AliMUONTriggerGeometryBuilder::AliMUONTriggerGeometryBuilder()
  : AliMUONVGeometryBuilder(),
-   fMUON(0)
+   fMUON(0),
+   fIdtmed(0),
+   fIdAir(0),  
+   fIdAlu1(0),
+   fIdInox(0),
+   fYEnvPsave(0.), 
+   fYEnvMsave(0.), 
+   fDYsave(0.),
+   fDXsave(0.),
+   fRsupportpipe()
 {
-// Default constructor
+/// Default constructor
 }
 
+//______________________________________________________________________________
+AliMUONTriggerGeometryBuilder::~AliMUONTriggerGeometryBuilder() 
+{
+/// Destructor
+}
 
 //______________________________________________________________________________
-AliMUONTriggerGeometryBuilder::AliMUONTriggerGeometryBuilder(const AliMUONTriggerGeometryBuilder& rhs)
-  : AliMUONVGeometryBuilder(rhs)
+TString AliMUONTriggerGeometryBuilder::GetVolumeName(const TString& volume, Int_t icount) const
 {
-// Protected copy constructor
+// Function to generate a short volume name from its long variant
 
-  AliFatal("Copy constructor is not implemented.");
+  if ( volume == "volAlu" ) {
+    char volAlu[5];     // Alu 
+    snprintf(volAlu,5,"SC%dA",icount+1);
+    return volAlu;
+  }
+  else if ( volume == "volAluSupportH") {
+    char volAluSupportH[6];
+    snprintf(volAluSupportH,6,"SALH%d",icount+1);
+    return  volAluSupportH;
+  }         
+  else if ( volume == "volAirSupportH") {
+    char volAirSupportH[6];
+    snprintf(volAirSupportH,6,"SAIH%d",icount+1);
+    return  volAirSupportH;
+  }
+  else if ( volume == "volInoxGasPipe") {
+    char volInoxGasPipe[7];
+    snprintf(volInoxGasPipe,7,"SPINO%d",icount+1);
+    return volInoxGasPipe;
+  }
+  
+  AliErrorStream() << "Volume " << volume << " name is not defined." << endl; 
+  return "";
 }
 
 //______________________________________________________________________________
-AliMUONTriggerGeometryBuilder::~AliMUONTriggerGeometryBuilder() {
-//
+TString AliMUONTriggerGeometryBuilder::GetVolEnvName(Int_t icount, Int_t ienv) const
+{
+/// Compose envelope names as:
+/// S0R1, S0R2, ..., S0R9, S0L1, S0L2, ..., S0L9
+/// where ienv = 0, .., 17
+
+  TString name = "S";
+  name += icount;
+  if ( ienv < 9 ) {
+    name += "R";
+    name += (ienv + 1);
+  }  
+  else {
+    name += "L";
+    name += (ienv - 8) ;
+  }  
+  return name;
+}     
+
+//______________________________________________________________________________
+TString AliMUONTriggerGeometryBuilder::GetVolAluAngSuppName(
+                                          const TString& type1234X, 
+                                          const TString& typeHV,
+                                          Int_t icount) const
+{
+/// Utility function to generate volume name 
+
+  TString name = "SA";
+  name += type1234X;
+  name += typeHV;
+  name += icount+1;
+  return name;
+}  
+   
+//______________________________________________________________________________
+TString AliMUONTriggerGeometryBuilder::GetVolEnvSuppAngName(
+                                          const TString& type1234X, 
+                                          const TString& typeHV, 
+                                          const TString& typeABDEF,
+                                          Int_t icount, Int_t ivol) const
+{
+/// Utility function to generate volume name 
+
+  TString name = "S";
+  name += typeHV;
+  name += type1234X;
+  name += icount+1;
+  name += typeABDEF;
+  name += ivol;
+  return name;
+}  
+
+//______________________________________________________________________________
+TString AliMUONTriggerGeometryBuilder::GetVolEnvInoxGasPipeName(
+                                          const TString& type12, 
+                                          const TString& typeABCDEF,
+                                          Int_t icount, Int_t ivol) const
+{
+/// Utility function to generate volume name 
+
+  TString name = "SP";
+  name += type12;
+  name += icount+1;
+  name += typeABCDEF;
+  name += ivol;
+  return name;
+}  
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildChamberPrototype(Int_t icount) const
+{   
+/// Build chamber prototype
+
+    Float_t tpar[3];
+    tpar[0]= 0.;
+    tpar[1]= 0.;
+    tpar[2]= 0.;           
+    char volBak[5];     // Bakelite
+    char volGaz[5];     // Gas streamer            
+    snprintf(volBak,5,"SB%dA",icount+1);
+    snprintf(volGaz,5,"S%dG",icount+11);
+    TVirtualMC::GetMC()->Gsvolu(GetVolumeName("volAlu", icount),"BOX",fIdAlu1,tpar,0);         // Al
+    TVirtualMC::GetMC()->Gsvolu(volBak,"BOX",fIdtmed[1107],tpar,0);   // Bakelite
+    TVirtualMC::GetMC()->Gsvolu(volGaz,"BOX",fIdtmed[1106],tpar,0);   // Gas streamer
+    tpar[0] = -1.;
+    tpar[1] = -1.;
+    tpar[2] = 0.1;    
+    TVirtualMC::GetMC()->Gsposp(volGaz,1,volBak,0.,0.,0.,0,"ONLY",tpar,3);
+    tpar[2] = 0.3;
+    TVirtualMC::GetMC()->Gsposp(volBak,1,GetVolumeName("volAlu", icount),0.,0.,0.,0,"ONLY",tpar,3);
+}    
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildRPCSupportsVertical(Int_t& iVolNum, Int_t icount) const
+{
+/// Build RPC vertical supports
+
+   Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);                  
+   char volAluSupport[5],volAirSupport[5];
+   snprintf(volAluSupport,5,"SAL%d",icount+1);
+   snprintf(volAirSupport,5,"SAI%d",icount+1);
+   char volEnvSupport[12][7];
+   for(Int_t ii=0;ii<8;ii++){
+     snprintf(volEnvSupport[ii],7,"SEA%dV%d",icount+1,ii);
+   }
+   Float_t tpar[3];
+   tpar[0]= 0.;
+   tpar[1]= 0.;
+   tpar[2]= 0.;            
+   TVirtualMC::GetMC()->Gsvolu(volAluSupport,"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(volAirSupport,"BOX",fIdAir,tpar,0);
+   tpar[0]=fgkSizeVSupInt[0];
+   tpar[1]=fgkSizeVSupInt[1];
+   tpar[2]=-1.;
+   TVirtualMC::GetMC()->Gsposp(volAirSupport,1,volAluSupport,0.,0.,0.,0,"ONLY",tpar,3);
+   
+   TGeoRotation rsupportv;
+   rsupportv.SetAngles(0.,90.,0.);
+   Double_t dpar[3];
+   dpar[0]=fgkSizeVSupExt[0];
+   dpar[1]=fgkSizeVSupExt[1];
+   dpar[2]=fgkSizeVSupExt[2]*zRatio;
+   for(Int_t ii=0;ii<4;ii++){
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupport[ii], 0, true,
+     TGeoTranslation(-fgkYVSup[ii]*zRatio,0.,0.),rsupportv);
+     GetEnvelopes(16+icount)
+     ->AddEnvelopeConstituentParam(volAluSupport,volEnvSupport[ii],iVolNum++,3, dpar);
+   }       
+   for(Int_t ii=4;ii<8;ii++){
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupport[ii], 0, true,
+     TGeoTranslation(fgkYVSup[ii-4]*zRatio,0.,0.),rsupportv);
+     GetEnvelopes(16+icount)
+     ->AddEnvelopeConstituentParam(volAluSupport,volEnvSupport[ii],iVolNum++,3, dpar);
+   }   
+}              
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildRPCSupportsHorizontal(Int_t icount) const
+{ 
+/// Build RPC horizontal supports   
+
+// RPC supports (horizontal)
+
+// supports for cables
+
+   Float_t tpar[3];
+   tpar[0]= 0.;
+   tpar[1]= 0.;
+   tpar[2]= 0.;  
+   TString volAluSupportH = GetVolumeName("volAluSupportH", icount);        
+   TString volAirSupportH = GetVolumeName("volAirSupportH", icount);        
+   TVirtualMC::GetMC()->Gsvolu(volAluSupportH,"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(volAirSupportH,"BOX",fIdAir,tpar,0);
+   tpar[0]=-1.;
+   tpar[1]=1.9;
+   tpar[2]=2.8;
+   TVirtualMC::GetMC()->Gsposp(volAirSupportH,1,volAluSupportH,0.,0.,0.,0,"ONLY",tpar,3);
+}          
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildAngularSupportForChambers(Int_t icount) const
+{
+/// Build angular supports for chambers
+
+   Float_t tpar[3];
+   tpar[0]= 0.;
+   tpar[1]= 0.;
+   tpar[2]= 0.;            
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("1","V",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("1","H",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("2","V",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("2","H",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("3","V",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("3","H",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("4","V",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("4","H",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("X","V",icount),"BOX",fIdAlu1,tpar,0);
+   TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("X","H",icount),"BOX",fIdAlu1,tpar,0);
+}          
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildGasPipes(Int_t icount) const
+{        
+/// Build gas pipes
+   TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
+   Float_t tpar[3];
+   tpar[0]= 0.;
+   tpar[1]= 0.;
+   tpar[2]= 0.;            
+   TVirtualMC::GetMC()->Gsvolu(volInoxGasPipe,"TUBE",fIdInox,tpar,0);
+}         
+  
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildChamberTypeA(Int_t& iVolNum, Int_t icount) 
+{
+/// Build chamber type A and horizontal support 
+
+   Double_t dpar[3];    
+   Double_t spar[3];    
+   Double_t ppar[3];    
+
+// chamber type A 
+   Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);                  
+   Float_t xEnv = (fgkDXZERO+fgkXMED+(fgkXMAX-fgkXMED)/2.)*zRatio;
+   Float_t yEnvM = 0.;  // y low position of envelope in chamber
+   Float_t yEnvP = 0.;  // y up position of envelope in chamber
+   fYEnvPsave = 0.; // tmp data
+   fYEnvMsave = 0.; // tmp data
+   //Float_t xpos = 0.; // x position of RPC in envelope           
+   //Float_t ypos = 0.; // y position of RPC in envelope
+   dpar[2] = 0.4;          
+   dpar[0] = ((fgkXMAX-fgkXMED)/2.)*zRatio;
+   dpar[1] = fgkYMIN * zRatio;
+
+   Int_t detElemId = (10+icount+1)*100;
+   TString volEnv4 = GetVolEnvName(icount, 4);
+   TString volEnv13 = GetVolEnvName(icount, 13);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv4, detElemId, true,  
+   TGeoTranslation(xEnv,yEnvP,fgkZp));
+   detElemId = (10+icount+1)*100+9;
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv13, detElemId, true,    
+   TGeoTranslation(-xEnv,yEnvM,fgkZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAlu = GetVolumeName("volAlu", icount);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv4,iVolNum++,3, dpar);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv13,iVolNum++,3, dpar);        
+
+// horizontal cable support chamber type A
+   char volEnvSupportHA[6][8];
+   for(Int_t jj=0;jj<2;jj++){
+     for(Int_t ii=0;ii<6;ii++){
+       if(ii<3)snprintf(volEnvSupportHA[3*jj+ii],8,"SA%dHA%d",icount+1,3*jj+ii);
+     }
+   }
+
+   spar[0]=((fgkXMAX/2)-fgkYVSup[0]/2.)*zRatio;
+   spar[1]=fgkSizeSupportCable[1];
+   spar[2]=fgkSizeSupportCable[2];
+   Float_t offsetSuppA = ((fgkXMAX-fgkXMED)/2.)*zRatio-(((fgkXMAX/2)-fgkYVSup[0]/2.)*zRatio);
+   for(Int_t in=0;in<3;in++){
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHA[in], 0, true, 
+     TGeoTranslation(xEnv+offsetSuppA/2.,yEnvP+dpar[1]/2.*(in-1),-(fgkSizeVSupExt[0]+spar[2])));    
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHA[in+3], 0, true, 
+     TGeoTranslation(-(xEnv+offsetSuppA/2.),yEnvM+dpar[1]/2.*(in-1),fgkSizeVSupExt[0]+spar[2]),
+     TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   }
+   for(Int_t ii=0;ii<6;ii++) {
+     TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
+     GetEnvelopes(16+icount)
+     ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHA[ii],iVolNum++,3, spar);
+   }  
+
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   Float_t sparysave=spar[1];
+   TString volEnvSuppAng1VA0 = GetVolEnvSuppAngName("1", "V", "A", icount, 0);
+   TString volEnvSuppAng1VA1 = GetVolEnvSuppAngName("1", "V", "A", icount, 1);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VA1, 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VA1,iVolNum++,3, spar);          
+
+// 1 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   TString volEnvSuppAng1HA0 = GetVolEnvSuppAngName("1", "H", "A", icount, 0);
+   TString volEnvSuppAng1HA1 = GetVolEnvSuppAngName("1", "H", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HA1, 0, true, 
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HA1,iVolNum++,3, spar);          
+
+// gas pipe (low)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe1A0 = GetVolEnvInoxGasPipeName("1", "A", icount, 0);
+   TString volEnvInoxGasPipe1A1 = GetVolEnvInoxGasPipeName("1", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1A0, 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1A1, 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1A0,iVolNum++,3, ppar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1A1,iVolNum++,3, ppar);
+
+// 2 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng2VA0 = GetVolEnvSuppAngName("2", "V", "A", icount, 0);
+   TString volEnvSuppAng2VA1 = GetVolEnvSuppAngName("2", "V", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VA1, 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VA1,iVolNum++,3, spar);          
+
+// 2 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2]; 
+   TString volEnvSuppAng2HA0 = GetVolEnvSuppAngName("2", "H", "A", icount, 0);
+   TString volEnvSuppAng2HA1 = GetVolEnvSuppAngName("2", "H", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HA1, 0, true,   
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HA1,iVolNum++,3, spar);          
+
+// 3 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   sparysave=spar[1];
+   TString volEnvSuppAng3VA0 = GetVolEnvSuppAngName("3", "V", "A", icount, 0);
+   TString volEnvSuppAng3VA1 = GetVolEnvSuppAngName("3", "V", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VA1, 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VA1,iVolNum++,3, spar);          
+
+// 3 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   TString volEnvSuppAng3HA0 = GetVolEnvSuppAngName("3", "H", "A", icount, 0);
+   TString volEnvSuppAng3HA1 = GetVolEnvSuppAngName("3", "H", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HA1, 0, true,   
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HA1,iVolNum++,3, spar);      
+       
+// gas pipe (high)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe2A0 = GetVolEnvInoxGasPipeName("2", "A", icount, 0);
+   TString volEnvInoxGasPipe2A1 = GetVolEnvInoxGasPipeName("2", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2A0, 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2A1, 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2A0,iVolNum++,3, ppar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2A1,iVolNum++,3, ppar);
+
+// 4 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng4VA0 = GetVolEnvSuppAngName("4", "V", "A", icount, 0);
+   TString volEnvSuppAng4VA1 = GetVolEnvSuppAngName("4", "V", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VA1, 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VA1,iVolNum++,3, spar);   
+
+// 4 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+   TString volEnvSuppAng4HA0 = GetVolEnvSuppAngName("4", "H", "A", icount, 0);
+   TString volEnvSuppAng4HA1 = GetVolEnvSuppAngName("4", "H", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HA0, 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HA1, 0, true, 
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HA0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HA1,iVolNum++,3, spar);   
+
+// X horizontal           
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXH[1];
+   spar[2]=fgkSizeSupportXH[2];
+   Float_t sparysavex=spar[1];
+   TString volEnvSuppAngXHA0 = GetVolEnvSuppAngName("X", "H", "A", icount, 0);
+   TString volEnvSuppAngXHA1 = GetVolEnvSuppAngName("X", "H", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHA0, 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHA1, 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHA0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHA1,iVolNum++,3, spar);   
+
+// X vertical     
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXV[1];
+   spar[2]=fgkSizeSupportXV[2];
+   TString volEnvSuppAngXVA0 = GetVolEnvSuppAngName("X", "V", "A", icount, 0);
+   TString volEnvSuppAngXVA1 = GetVolEnvSuppAngName("X", "V", "A", icount, 1);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVA0, 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVA1, 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVA0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVA1,iVolNum++,3, spar);         
+
+   // keep values of yEnvP, yEnvM
+   fYEnvPsave = yEnvP;
+   fYEnvMsave = yEnvM;   
+} 
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildChamberTypeB(Int_t& iVolNum, Int_t icount)
+{
+// ratio of zpos1m/zpos1p and inverse for first plane
+   Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
+   Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
+   Float_t zpm=1./zmp;
+    
+// chamber type B (plus envelope chambers B & C)   
+   Double_t dpar[3];    
+   Double_t spar[3];    
+   Double_t ppar[3];    
+
+// chamber type B
+   Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
+   Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
+   Float_t yEnvP = 0;
+   Float_t yEnvM = 0;
+   yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
+   yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
+   dpar[0] = ((fgkXMAX-fgkXMIN)/2.) * zRatio;
+   dpar[1] = ((fgkYMAX-fgkYMIN)/2.) * zRatio;
+   dpar[2] = 0.4;   
+   fDYsave = dpar[1];
+   fDXsave = dpar[0];
+   Float_t xpos = fgkXMIN/2. * zRatio;
+   Float_t ypos = (fgkYMIN - fgkYMIN/4.) * zRatio;
+   Float_t xpossave = xpos;
+
+   Int_t detElemId = (10+icount+1)*100+17;            
+   TString volEnv3 = GetVolEnvName(icount, 3);
+   TString volEnv5 = GetVolEnvName(icount, 5);
+   TString volEnv12 = GetVolEnvName(icount, 12);
+   TString volEnv14 = GetVolEnvName(icount, 14);
+   TString volAlu = GetVolumeName("volAlu", icount);
+
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv3, detElemId, true,
+   TGeoTranslation(xEnv,-yEnvM,fgkZm));   
+   detElemId = (10+icount+1)*100+1;
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv5, detElemId, true, 
+   TGeoTranslation( xEnv, yEnvM,fgkZm));
+   detElemId = (10+icount+1)*100+10;
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv12, detElemId, true,
+   TGeoTranslation(-xEnv,-yEnvP,fgkZp),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   detElemId = (10+icount+1)*100+8;
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv14, detElemId, true, 
+   TGeoTranslation(-xEnv, yEnvP,fgkZp),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv3,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv5,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv12,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv14,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+
+// chamber type C (note: same Z than type B)
+   dpar[0] = (fgkXMAX/2)*zRatio;
+   dpar[1] = (fgkYMAX/2)*zRatio;
+   xpos = 0.;   
+   ypos = ((fgkYMAX - fgkYMIN)/2.) * zRatio;
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv3,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv5,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv12,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv14,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
+
+// horizontal cable support chamber type B+C
+
+   char volEnvSupportHBC[12][8];
+   for(Int_t jj=0;jj<2;jj++){
+     for(Int_t ii=0;ii<6;ii++){
+       snprintf(volEnvSupportHBC[6*jj+ii],8,"SA%dHB%d",icount+1,6*jj+ii);
+     }
+   }
+      
+   spar[0]=dpar[0]-fgkYVSup[0]/2.;
+   spar[1]=fgkSizeSupportCable[1];
+   spar[2]=fgkSizeSupportCable[2];
+   for(Int_t in=0;in<3;in++){
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in], 0, true, 
+     TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvM+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1)),
+     fgkSizeVSupExt[0]+spar[2]));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in+3], 0, true, 
+     TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio, yEnvM+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1),
+     fgkSizeVSupExt[0]+spar[2]));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in+6], 0, true, 
+     TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),-(yEnvP+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1)),
+     -(fgkSizeVSupExt[0]+spar[2])),
+     TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in+9], 0, true, 
+     TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio), yEnvP+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1),
+     -(fgkSizeVSupExt[0]+spar[2])),
+     TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   }
+   for(Int_t ii=0;ii<12;ii++) { 
+     TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
+     GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHBC[ii],iVolNum++,3, spar);
+   }  
+
+// angular supports chamber type B and C
+// C      
+// 1 vertical
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   Float_t sparysave=spar[1];
+
+   TString volEnvSuppAng1VBC0 = GetVolEnvSuppAngName("1", "V", "B", icount, 0); 
+   TString volEnvSuppAng1VBC2 = GetVolEnvSuppAngName("1", "V", "B", icount, 2); 
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC0, 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave,fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC2, 0, true,
+   TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave,fgkZp+dpar[2]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC2,iVolNum++,3, spar);
+
+// 1 horizontal
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   
+   TString volEnvSuppAng1HBC0 = GetVolEnvSuppAngName("1", "H", "B", icount, 0);
+   TString volEnvSuppAng1HBC2 = GetVolEnvSuppAngName("1", "H", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC0, 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave-sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC2, 0, true, 
+   TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave-sparysave,fgkZp+dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC2,iVolNum++,3, spar);   
+
+// gas pipe (low)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe1BC0 = GetVolEnvInoxGasPipeName("1", "BC", icount, 0);
+   TString volEnvInoxGasPipe1BC2 = GetVolEnvInoxGasPipeName("1", "BC", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC0, 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC2, 0, true,
+   TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC0,iVolNum++,3, ppar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC2,iVolNum++,3, ppar);
+
+// 2 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng2VBC0 = GetVolEnvSuppAngName("2", "V", "B", icount, 0);
+   TString volEnvSuppAng2VBC2 = GetVolEnvSuppAngName("2", "V", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC0, 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC2, 0, true, 
+   TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC2,iVolNum++,3, spar);   
+
+// 2 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+   TString volEnvSuppAng2HBC0 = GetVolEnvSuppAngName("2", "H", "B", icount, 0);
+   TString volEnvSuppAng2HBC2 = GetVolEnvSuppAngName("2", "H", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC0, 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC2, 0, true, 
+   TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave-sparysave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC2,iVolNum++,3, spar);   
+
+// 3 vertical
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   sparysave=spar[1];
+   TString volEnvSuppAng3VBC0 = GetVolEnvSuppAngName("3", "V", "B", icount, 0);
+   TString volEnvSuppAng3VBC2 = GetVolEnvSuppAngName("3", "V", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC0, 0, true,
+   TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave,fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC2, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave,fgkZp+dpar[2]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC2,iVolNum++,3, spar);
+
+// 3 horizontal
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   TString volEnvSuppAng3HBC0 = GetVolEnvSuppAngName("3", "H", "B", icount, 0);
+   TString volEnvSuppAng3HBC2 = GetVolEnvSuppAngName("3", "H", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC0, 0, true,
+   TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave+sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC2, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave+sparysave,fgkZp+dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC0,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC2,iVolNum++,3, spar);   
+       
+// gas pipe (high)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=fDXsave-fgkAvoidExtrusion;
+   TString volEnvInoxGasPipe2BC0 = GetVolEnvInoxGasPipeName("2", "BC", icount, 0);
+   TString volEnvInoxGasPipe2BC2 = GetVolEnvInoxGasPipeName("2", "BC", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC0, 0, true,
+   TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZm),
+   fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC2, 0, true,
+   TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZp),
+   fRsupportpipe);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC0,iVolNum++,3, ppar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC2,iVolNum++,3, ppar);
+
+// 4 vertical     
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng4VBC0 = GetVolEnvSuppAngName("4", "V", "B", icount, 0);
+   TString volEnvSuppAng4VBC2 = GetVolEnvSuppAngName("4", "V", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC0, 0, true,
+   TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC2, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC2,iVolNum++,3, spar);   
+
+// 4 horizontal           
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+   TString volEnvSuppAng4HBC0 = GetVolEnvSuppAngName("4", "H", "B", icount, 0);
+   TString volEnvSuppAng4HBC2 = GetVolEnvSuppAngName("4", "H", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC0, 0, true,
+   TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC2, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave+sparysave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC2,iVolNum++,3, spar);   
+
+// X horizontal           
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXH[1];
+   spar[2]=fgkSizeSupportXH[2];
+   Float_t sparysavex=spar[1];
+   TString volEnvSuppAngXHBC0 = GetVolEnvSuppAngName("X", "H", "B", icount, 0);
+   TString volEnvSuppAngXHBC2 = GetVolEnvSuppAngName("X", "H", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC0, 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvM+dpar[1]+fDYsave+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC2, 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvP+dpar[1]+fDYsave+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC2,iVolNum++,3, spar);     
+// X vertical     
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXV[1];
+   spar[2]=fgkSizeSupportXV[2];
+   TString volEnvSuppAngXVBC0 = GetVolEnvSuppAngName("X", "V", "B", icount, 0);
+   TString volEnvSuppAngXVBC2 = GetVolEnvSuppAngName("X", "V", "B", icount, 2);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC0, 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,
+   -yEnvM+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC2, 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),
+   -yEnvP+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC0,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC2,iVolNum++,3, spar);   
+
+// B
+// 1 vertical
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   sparysave=spar[1];
+   TString volEnvSuppAng1VBC1 = GetVolEnvSuppAngName("1", "V", "B", icount, 1);
+   TString volEnvSuppAng1VBC3 = GetVolEnvSuppAngName("1", "V", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC1, 0, true,
+   TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave,fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC3, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave,fgkZp+dpar[2]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   //TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC1,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC3,iVolNum++,3, spar);
+
+
+// 1 horizontal
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   
+   TString volEnvSuppAng1HBC1 = GetVolEnvSuppAngName("1", "H", "B", icount, 1);
+   TString volEnvSuppAng1HBC3 = GetVolEnvSuppAngName("1", "H", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC1, 0, true,
+   TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave-sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC3, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave-sparysave,fgkZp+dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   //TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC1,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC3,iVolNum++,3, spar);   
+
+// gas pipe (low)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=fDXsave-fgkAvoidExtrusion;
+   TString volEnvInoxGasPipe1BC1 = GetVolEnvInoxGasPipeName("1", "BC", icount, 1);
+   TString volEnvInoxGasPipe1BC3 = GetVolEnvInoxGasPipeName("1", "BC", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC1, 0, true,
+   TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZm),
+   fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC3, 0, true,
+   TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZp),
+   fRsupportpipe);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC1,iVolNum++,3, ppar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC3,iVolNum++,3, ppar);
+
+// 2 vertical     
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng2VBC1 = GetVolEnvSuppAngName("2", "V", "B", icount, 1);
+   TString volEnvSuppAng2VBC3 = GetVolEnvSuppAngName("2", "V", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC1, 0, true,
+   TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC3, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   //TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC1,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC3,iVolNum++,3, spar);   
+// 2 horizontal           
+   spar[0]=fDXsave-fgkAvoidExtrusion;
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+   TString volEnvSuppAng2HBC1 = GetVolEnvSuppAngName("2", "H", "B", icount, 1);
+   TString volEnvSuppAng2HBC3 = GetVolEnvSuppAngName("2", "H", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC1, 0, true,
+   TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC3, 0, true, 
+   TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave-sparysave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   //TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC1,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC3,iVolNum++,3, spar);   
+
+// 3 vertical
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   sparysave=spar[1];
+   TString volEnvSuppAng3VBC1 = GetVolEnvSuppAngName("3", "V", "B", icount, 1);
+   TString volEnvSuppAng3VBC3 = GetVolEnvSuppAngName("3", "V", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC1, 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave,fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC3, 0, true,
+   TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave,fgkZp+dpar[2]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   //TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC1,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC3,iVolNum++,3, spar);
+
+// 3 horizontal
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   
+   TString volEnvSuppAng3HBC1 = GetVolEnvSuppAngName("3", "H", "B", icount, 1);
+   TString volEnvSuppAng3HBC3 = GetVolEnvSuppAngName("3", "H", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC1, 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave+sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC3, 0, true, 
+   TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave+sparysave,fgkZp+dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC1,iVolNum++,3, spar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC3,iVolNum++,3, spar);   
+
+// gas pipe (high)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe2BC1 = GetVolEnvInoxGasPipeName("2", "BC", icount, 1);
+   TString volEnvInoxGasPipe2BC3 = GetVolEnvInoxGasPipeName("2", "BC", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC1, 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC3, 0, true,
+   TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC1,iVolNum++,3, ppar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC3,iVolNum++,3, ppar);
+
+// 4 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng4VBC1 = GetVolEnvSuppAngName("4", "V", "B", icount, 1);
+   TString volEnvSuppAng4VBC3 = GetVolEnvSuppAngName("4", "V", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC1, 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC3, 0, true, 
+   TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC1,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC3,iVolNum++,3, spar);   
+
+// 4 horizontal           
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+   TString volEnvSuppAng4HBC1 = GetVolEnvSuppAngName("4", "H", "B", icount, 1);
+   TString volEnvSuppAng4HBC3 = GetVolEnvSuppAngName("4", "H", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC1, 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC3, 0, true, 
+   TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave+sparysave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC1,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC3,iVolNum++,3, spar);   
+
+// X horizontal           
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXH[1];
+   spar[2]=fgkSizeSupportXH[2];
+   sparysavex=spar[1];
+   TString volEnvSuppAngXHBC1 = GetVolEnvSuppAngName("X", "H", "B", icount, 1);
+   TString volEnvSuppAngXHBC3 = GetVolEnvSuppAngName("X", "H", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC1, 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvM+dpar[1]+fDYsave+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC3, 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvP+dpar[1]+fDYsave+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC1,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC3,iVolNum++,3, spar);   
+
+// X vertical     
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXV[1];
+   spar[2]=fgkSizeSupportXV[2];
+   TString volEnvSuppAngXVBC1 = GetVolEnvSuppAngName("X", "V", "B", icount, 1);
+   TString volEnvSuppAngXVBC3 = GetVolEnvSuppAngName("X", "V", "B", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC1, 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,
+   yEnvM+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC3, 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),
+   yEnvP+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC1,iVolNum++,3, spar);   
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC3,iVolNum++,3, spar);   
+
+   // keep values of yEnvP, yEnvM
+   fYEnvPsave = yEnvP;
+   fYEnvMsave = yEnvM;     
 }
 
 //______________________________________________________________________________
-AliMUONTriggerGeometryBuilder& 
-AliMUONTriggerGeometryBuilder::operator = (const AliMUONTriggerGeometryBuilder& rhs) 
+void AliMUONTriggerGeometryBuilder::BuildChamberTypeD(Int_t& iVolNum, Int_t icount)
 {
-// Protected assignement operator
+// ratio of zpos1m/zpos1p and inverse for first plane
+    Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
+    Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
+    Float_t zpm=1./zmp;
+    Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
+    Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
+
+   Double_t dpar[3];    
+   Double_t spar[3];    
+   Double_t ppar[3];    
+
+// D   
+   Float_t yEnvP = 0;
+   Float_t yEnvM = 0;
+   yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
+   yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
+   dpar[0] = (fgkXMAX/2.)*zRatio;
+   dpar[1] =  fgkYMIN*zRatio;
+   dpar[2] = 0.4;   
+
+   Int_t detElemId = (10+icount+1)*100+16;   
+   TString volEnv2 = GetVolEnvName(icount, 2);
+   TString volEnv6 = GetVolEnvName(icount, 6);
+   TString volEnv11 = GetVolEnvName(icount, 11);
+   TString volEnv15 = GetVolEnvName(icount, 15);
+   TString volAlu = GetVolumeName("volAlu", icount);
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv2, detElemId, true, TGeoTranslation(xEnv,-yEnvP,fgkZp));
+   detElemId = (10+icount+1)*100+2;
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv6, detElemId, true, TGeoTranslation(xEnv, yEnvP,fgkZp));
+   detElemId = (10+icount+1)*100+11;
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv11, detElemId, true, TGeoTranslation(-xEnv,-yEnvM,fgkZm),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   detElemId = (10+icount+1)*100+7;
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv15, detElemId, true, TGeoTranslation(-xEnv, yEnvM,fgkZm),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv2,iVolNum++,3, dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv6,iVolNum++,3, dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv11,iVolNum++,3, dpar);
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAlu,volEnv15,iVolNum++,3, dpar);
+
+// horizontal cable support chamber type D
+
+   char volEnvSupportHD[12][8];
+   for(Int_t jj=0;jj<2;jj++){
+     for(Int_t ii=0;ii<6;ii++){
+       snprintf(volEnvSupportHD[6*jj+ii],8,"SA%dHD%d",icount+1,6*jj+ii);
+     }
+   }
+      
+   spar[0]=dpar[0]-(fgkYVSup[0]/2.)*zRatio;
+   spar[1]=fgkSizeSupportCable[1];
+   spar[2]=fgkSizeSupportCable[2];
+   for(Int_t in=0;in<3;in++){
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in], 0, true,
+      TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvP+dpar[1]/2.*(in-1)),
+      -(fgkSizeVSupExt[0]+spar[2])));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in+3], 0, true, 
+     TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio, yEnvP+dpar[1]/2.*(in-1),
+     -(fgkSizeVSupExt[0]+spar[2])));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in+6], 0, true, 
+     TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),-(yEnvM+dpar[1]/2.*(in-1)),
+     fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in+9], 0, true, 
+     TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),yEnvM+dpar[1]/2.*(in-1),
+     fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   }
+   for(Int_t ii=0;ii<12;ii++) { 
+     TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
+     GetEnvelopes(16+icount)
+     ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHD[ii],iVolNum++,3, spar);
+   }  
+   
+// angular supports chamber type D
+// 1 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   Double_t sparysave=spar[1];
+   
+   TString volEnvSuppAng1VD[4];
+   volEnvSuppAng1VD[0] =  GetVolEnvSuppAngName("1", "V", "D", icount, 0);
+   volEnvSuppAng1VD[1] =  GetVolEnvSuppAngName("1", "V", "D", icount, 1);
+   volEnvSuppAng1VD[2] =  GetVolEnvSuppAngName("1", "V", "D", icount, 2);
+   volEnvSuppAng1VD[3] =  GetVolEnvSuppAngName("1", "V", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
 
-  // check assignement to self
-  if (this == &rhs) return *this;
+       
+   TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
+   for (Int_t i=0;i<4;i++) 
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VD[i],iVolNum++,3, spar);
 
-  AliFatal("Assignment operator is not implemented.");
+
+// 1 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+
+   TString volEnvSuppAng1HD[4];
+   volEnvSuppAng1HD[0] =  GetVolEnvSuppAngName("1", "H", "D", icount, 0);
+   volEnvSuppAng1HD[1] =  GetVolEnvSuppAngName("1", "H", "D", icount, 1);
+   volEnvSuppAng1HD[2] =  GetVolEnvSuppAngName("1", "H", "D", icount, 2);
+   volEnvSuppAng1HD[3] =  GetVolEnvSuppAngName("1", "H", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HD[i],iVolNum++,3, spar);
+
+// gas pipe (low)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe1D[4];
+   volEnvInoxGasPipe1D[0] = GetVolEnvInoxGasPipeName("1", "D", icount, 0);
+   volEnvInoxGasPipe1D[1] = GetVolEnvInoxGasPipeName("1", "D", icount, 1);
+   volEnvInoxGasPipe1D[2] = GetVolEnvInoxGasPipeName("1", "D", icount, 2);
+   volEnvInoxGasPipe1D[3] = GetVolEnvInoxGasPipeName("1", "D", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+
+   TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1D[i],iVolNum++,3, ppar);
+
+// 2 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng2VD[4];
+   volEnvSuppAng2VD[0] =  GetVolEnvSuppAngName("2", "V", "D", icount, 0);
+   volEnvSuppAng2VD[1] =  GetVolEnvSuppAngName("2", "V", "D", icount, 1);
+   volEnvSuppAng2VD[2] =  GetVolEnvSuppAngName("2", "V", "D", icount, 2);
+   volEnvSuppAng2VD[3] =  GetVolEnvSuppAngName("2", "V", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VD[i],iVolNum++,3, spar);   
+
+// 2 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+   TString volEnvSuppAng2HD[4];
+   volEnvSuppAng2HD[0] =  GetVolEnvSuppAngName("2", "H", "D", icount, 0);
+   volEnvSuppAng2HD[1] =  GetVolEnvSuppAngName("2", "H", "D", icount, 1);
+   volEnvSuppAng2HD[2] =  GetVolEnvSuppAngName("2", "H", "D", icount, 2);
+   volEnvSuppAng2HD[3] =  GetVolEnvSuppAngName("2", "H", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HD[i],iVolNum++,3, spar);   
+
+// 3 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   sparysave=spar[1];
+   TString volEnvSuppAng3VD[4];
+   volEnvSuppAng3VD[0] =  GetVolEnvSuppAngName("3", "V", "D", icount, 0);
+   volEnvSuppAng3VD[1] =  GetVolEnvSuppAngName("3", "V", "D", icount, 1);
+   volEnvSuppAng3VD[2] =  GetVolEnvSuppAngName("3", "V", "D", icount, 2);
+   volEnvSuppAng3VD[3] =  GetVolEnvSuppAngName("3", "V", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VD[i],iVolNum++,3, spar);
+
+
+// 3 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   TString volEnvSuppAng3HD[4];
+   volEnvSuppAng3HD[0] =  GetVolEnvSuppAngName("3", "H", "D", icount, 0);
+   volEnvSuppAng3HD[1] =  GetVolEnvSuppAngName("3", "H", "D", icount, 1);
+   volEnvSuppAng3HD[2] =  GetVolEnvSuppAngName("3", "H", "D", icount, 2);
+   volEnvSuppAng3HD[3] =  GetVolEnvSuppAngName("3", "H", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[2], 0, true,   
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HD[i],iVolNum++,3, spar);
+       
+// gas pipe (high)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe2D[4];
+   volEnvInoxGasPipe2D[0] = GetVolEnvInoxGasPipeName("2", "D", icount, 0);
+   volEnvInoxGasPipe2D[1] = GetVolEnvInoxGasPipeName("2", "D", icount, 1);
+   volEnvInoxGasPipe2D[2] = GetVolEnvInoxGasPipeName("2", "D", icount, 2);
+   volEnvInoxGasPipe2D[3] = GetVolEnvInoxGasPipeName("2", "D", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2D[i],iVolNum++,3, ppar);
+
+// 4 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng4VD[4];
+   volEnvSuppAng4VD[0] =  GetVolEnvSuppAngName("4", "V", "D", icount, 0);
+   volEnvSuppAng4VD[1] =  GetVolEnvSuppAngName("4", "V", "D", icount, 1);
+   volEnvSuppAng4VD[2] =  GetVolEnvSuppAngName("4", "V", "D", icount, 2);
+   volEnvSuppAng4VD[3] =  GetVolEnvSuppAngName("4", "V", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VD[i],iVolNum++,3, spar);   
+
+// 4 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+   TString volEnvSuppAng4HD[4];
+   volEnvSuppAng4HD[0] =  GetVolEnvSuppAngName("4", "H", "D", icount, 0);
+   volEnvSuppAng4HD[1] =  GetVolEnvSuppAngName("4", "H", "D", icount, 1);
+   volEnvSuppAng4HD[2] =  GetVolEnvSuppAngName("4", "H", "D", icount, 2);
+   volEnvSuppAng4HD[3] =  GetVolEnvSuppAngName("4", "H", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HD[i],iVolNum++,3, spar);   
+
+// X horizontal           
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXH[1];
+   spar[2]=fgkSizeSupportXH[2];
+   Double_t sparysavex=spar[1];
+   TString volEnvSuppAngXHD[4];
+   volEnvSuppAngXHD[0] =  GetVolEnvSuppAngName("X", "H", "D", icount, 0);
+   volEnvSuppAngXHD[1] =  GetVolEnvSuppAngName("X", "H", "D", icount, 1);
+   volEnvSuppAngXHD[2] =  GetVolEnvSuppAngName("X", "H", "D", icount, 2);
+   volEnvSuppAngXHD[3] =  GetVolEnvSuppAngName("X", "H", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[0], 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[1], 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[2], 0, true,
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[3], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHD[i],iVolNum++,3, spar);   
+
+// X vertical     
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXV[1];
+   spar[2]=fgkSizeSupportXV[2];
+   TString volEnvSuppAngXVD[4];
+   volEnvSuppAngXVD[0] =  GetVolEnvSuppAngName("X", "V", "D", icount, 0);
+   volEnvSuppAngXVD[1] =  GetVolEnvSuppAngName("X", "V", "D", icount, 1);
+   volEnvSuppAngXVD[2] =  GetVolEnvSuppAngName("X", "V", "D", icount, 2);
+   volEnvSuppAngXVD[3] =  GetVolEnvSuppAngName("X", "V", "D", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[0], 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[1], 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[2], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[3], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVD[i],iVolNum++,3, spar);    
+
+   // keep values of yEnvP, yEnvM
+   fYEnvPsave = yEnvP;
+   fYEnvMsave = yEnvM;   
+}    
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildChamberTypeE(Int_t& iVolNum, Int_t icount)
+{
+// ratio of zpos1m/zpos1p and inverse for first plane
+    Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
+    Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
+    Float_t zpm=1./zmp;
+    Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
+    Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
+   
+   Double_t dpar[3];    
+   Double_t spar[3];    
+   Double_t ppar[3];    
+
+// E
+   Float_t yEnvP = 0;
+   Float_t yEnvM = 0;
+   yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
+   yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
+
+   Int_t detElemId = (10+icount+1)*100+15;
+   TString volEnv1 = GetVolEnvName(icount, 1);
+   TString volEnv7 = GetVolEnvName(icount, 7);
+   TString volEnv10 = GetVolEnvName(icount, 10);
+   TString volEnv16 = GetVolEnvName(icount, 16);
+   TString volAlu = GetVolumeName("volAlu", icount);
+
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv1, detElemId, true, TGeoTranslation(xEnv,-yEnvM,fgkZm));
+   detElemId = (10+icount+1)*100+3;
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv7, detElemId, true, TGeoTranslation(xEnv, yEnvM,fgkZm));
+   detElemId = (10+icount+1)*100+12;
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv10, detElemId, true, TGeoTranslation(-xEnv,-yEnvP,fgkZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   detElemId = (10+icount+1)*100+6;
+   GetEnvelopes(16+icount)->AddEnvelope(volEnv16, detElemId, true, TGeoTranslation(-xEnv, yEnvP,fgkZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv1,iVolNum++,3,dpar);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv7,iVolNum++,3,dpar);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv10,iVolNum++,3,dpar);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv16,iVolNum++,3,dpar);
+
+// horizontal cable support chamber type E
+
+   char volEnvSupportHE[12][8];
+   for(Int_t jj=0;jj<2;jj++){
+     for(Int_t ii=0;ii<6;ii++){
+       snprintf(volEnvSupportHE[6*jj+ii],8,"SA%dHE%d",icount+1,6*jj+ii);
+     }
+   }
+      
+   spar[0]=dpar[0]-(fgkYVSup[0]/2.)*zRatio;
+   spar[1]=fgkSizeSupportCable[1];
+   spar[2]=fgkSizeSupportCable[2];
+   for(Int_t in=0;in<3;in++){
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHE[in], 0, true, TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvM+dpar[1]/2.*(in-1)),fgkSizeVSupExt[0]+spar[2]));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHE[in+3], 0, true, TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio, yEnvM+dpar[1]/2.*(in-1),fgkSizeVSupExt[0]+spar[2]));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHE[in+6], 0, true, TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),-(yEnvP+dpar[1]/2.*(in-1)),-(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+     GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHE[in+9], 0, true, TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio), yEnvP+dpar[1]/2.*(in-1),-(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   }
+   for(Int_t ii=0;ii<12;ii++) {
+     TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
+     GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHE[ii],iVolNum++,3, spar);
+   }  
+   
+// angular supports chamber type E
+// 1 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   Double_t sparysave=spar[1];
+
+   TString volEnvSuppAng1VE[4];
+   volEnvSuppAng1VE[0] =  GetVolEnvSuppAngName("1", "V", "E", icount, 0);
+   volEnvSuppAng1VE[1] =  GetVolEnvSuppAngName("1", "V", "E", icount, 1);
+   volEnvSuppAng1VE[2] =  GetVolEnvSuppAngName("1", "V", "E", icount, 2);
+   volEnvSuppAng1VE[3] =  GetVolEnvSuppAngName("1", "V", "E", icount, 3);
+
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
+    for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VE[i],iVolNum++,3, spar);
+
+
+// 1 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+
+   TString volEnvSuppAng1HE[4];
+   volEnvSuppAng1HE[0] =  GetVolEnvSuppAngName("1", "H", "E", icount, 0);
+   volEnvSuppAng1HE[1] =  GetVolEnvSuppAngName("1", "H", "E", icount, 1);
+   volEnvSuppAng1HE[2] =  GetVolEnvSuppAngName("1", "H", "E", icount, 2);
+   volEnvSuppAng1HE[3] =  GetVolEnvSuppAngName("1", "H", "E", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HE[2], 0, true, TGeoTranslation(-xEnv,-yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HE[3], 0, true, TGeoTranslation(-xEnv,yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HE[i],iVolNum++,3, spar);
+
+// gas pipe (low)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe1E[4];
+   volEnvInoxGasPipe1E[0] = GetVolEnvInoxGasPipeName("1", "E", icount, 0);
+   volEnvInoxGasPipe1E[1] = GetVolEnvInoxGasPipeName("1", "E", icount, 1);
+   volEnvInoxGasPipe1E[2] = GetVolEnvInoxGasPipeName("1", "E", icount, 2);
+   volEnvInoxGasPipe1E[3] = GetVolEnvInoxGasPipeName("1", "E", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+
+    TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1E[i],iVolNum++,3, ppar);
+
+// 2 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng2VE[4];
+   volEnvSuppAng2VE[0] =  GetVolEnvSuppAngName("2", "V", "E", icount, 0);
+   volEnvSuppAng2VE[1] =  GetVolEnvSuppAngName("2", "V", "E", icount, 1);
+   volEnvSuppAng2VE[2] =  GetVolEnvSuppAngName("2", "V", "E", icount, 2);
+   volEnvSuppAng2VE[3] =  GetVolEnvSuppAngName("2", "V", "E", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[2], 0, true,
+    TGeoTranslation(-xEnv,-yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[3], 0, true,
+    TGeoTranslation(-xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VE[i],iVolNum++,3, spar);   
+
+// 2 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+
+   TString volEnvSuppAng2HE[4];
+   volEnvSuppAng2HE[0] =  GetVolEnvSuppAngName("2", "H", "E", icount, 0);
+   volEnvSuppAng2HE[1] =  GetVolEnvSuppAngName("2", "H", "E", icount, 1);
+   volEnvSuppAng2HE[2] =  GetVolEnvSuppAngName("2", "H", "E", icount, 2);
+   volEnvSuppAng2HE[3] =  GetVolEnvSuppAngName("2", "H", "E", icount, 3);
+
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HE[2], 0, true, TGeoTranslation(-xEnv,-yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HE[3], 0, true, TGeoTranslation(-xEnv,yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HE[i],iVolNum++,3, spar);   
+
+// 3 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   sparysave=spar[1];
+   TString volEnvSuppAng3VE[4];
+   volEnvSuppAng3VE[0] =  GetVolEnvSuppAngName("3", "V", "E", icount, 0);
+   volEnvSuppAng3VE[1] =  GetVolEnvSuppAngName("3", "V", "E", icount, 1);
+   volEnvSuppAng3VE[2] =  GetVolEnvSuppAngName("3", "V", "E", icount, 2);
+   volEnvSuppAng3VE[3] =  GetVolEnvSuppAngName("3", "V", "E", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VE[i],iVolNum++,3, spar);
+
+
+// 3 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+
+   TString volEnvSuppAng3HE[4];
+   volEnvSuppAng3HE[0] =  GetVolEnvSuppAngName("3", "H", "E", icount, 0);
+   volEnvSuppAng3HE[1] =  GetVolEnvSuppAngName("3", "H", "E", icount, 1);
+   volEnvSuppAng3HE[2] =  GetVolEnvSuppAngName("3", "H", "E", icount, 2);
+   volEnvSuppAng3HE[3] =  GetVolEnvSuppAngName("3", "H", "E", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HE[2], 0, true, TGeoTranslation(-xEnv,-yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HE[3], 0, true, TGeoTranslation(-xEnv,yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HE[i],iVolNum++,3, spar);
+
+// gas pipe (high)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe2E[4];
+   volEnvInoxGasPipe2E[0] = GetVolEnvInoxGasPipeName("2", "E", icount, 0);
+   volEnvInoxGasPipe2E[1] = GetVolEnvInoxGasPipeName("2", "E", icount, 1);
+   volEnvInoxGasPipe2E[2] = GetVolEnvInoxGasPipeName("2", "E", icount, 2);
+   volEnvInoxGasPipe2E[3] = GetVolEnvInoxGasPipeName("2", "E", icount, 3);
+         GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2E[i],iVolNum++,3, ppar);
+
+// 4 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+
+   TString volEnvSuppAng4VE[4];
+   volEnvSuppAng4VE[0] =  GetVolEnvSuppAngName("4", "V", "E", icount, 0);
+   volEnvSuppAng4VE[1] =  GetVolEnvSuppAngName("4", "V", "E", icount, 1);
+   volEnvSuppAng4VE[2] =  GetVolEnvSuppAngName("4", "V", "E", icount, 2);
+   volEnvSuppAng4VE[3] =  GetVolEnvSuppAngName("4", "V", "E", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAng4VE[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VE[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VE[i],iVolNum++,3, spar);   
+
+// 4 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+
+   TString volEnvSuppAng4HE[4];
+   volEnvSuppAng4HE[0] =  GetVolEnvSuppAngName("4", "H", "E", icount, 0);
+   volEnvSuppAng4HE[1] =  GetVolEnvSuppAngName("4", "H", "E", icount, 1);
+   volEnvSuppAng4HE[2] =  GetVolEnvSuppAngName("4", "H", "E", icount, 2);
+   volEnvSuppAng4HE[3] =  GetVolEnvSuppAngName("4", "H", "E", icount, 3);
+   
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAng4HE[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAng4HE[1], 0, true,
+   TGeoTranslation(xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAng4HE[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HE[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HE[i],iVolNum++,3, spar);   
+
+// X horizontal           
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXH[1];
+   spar[2]=fgkSizeSupportXH[2];
+   Double_t sparysavex=spar[1];
+
+   TString volEnvSuppAngXHE[4];
+   volEnvSuppAngXHE[0] =  GetVolEnvSuppAngName("X", "H", "E", icount, 0);
+   volEnvSuppAngXHE[1] =  GetVolEnvSuppAngName("X", "H", "E", icount, 1);
+   volEnvSuppAngXHE[2] =  GetVolEnvSuppAngName("X", "H", "E", icount, 2);
+   volEnvSuppAngXHE[3] =  GetVolEnvSuppAngName("X", "H", "E", icount, 3);
+   
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAngXHE[0], 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvM+dpar[1]+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAngXHE[1], 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvM+dpar[1]+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHE[2], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvP+dpar[1]+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHE[3], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvP+dpar[1]+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHE[i],iVolNum++,3, spar);   
+
+// X vertical     
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXV[1];
+   spar[2]=fgkSizeSupportXV[2];
+
+   TString volEnvSuppAngXVE[4];
+   volEnvSuppAngXVE[0] =  GetVolEnvSuppAngName("X", "V", "E", icount, 0);
+   volEnvSuppAngXVE[1] =  GetVolEnvSuppAngName("X", "V", "E", icount, 1);
+   volEnvSuppAngXVE[2] =  GetVolEnvSuppAngName("X", "V", "E", icount, 2);
+   volEnvSuppAngXVE[3] =  GetVolEnvSuppAngName("X", "V", "E", icount, 3);
+   
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAngXVE[0], 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAngXVE[1], 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])));
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAngXVE[2], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnvSuppAngXVE[3], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVE[i],iVolNum++,3, spar);
+   
+   // keep values of yEnvP, yEnvM
+   fYEnvPsave = yEnvP;
+   fYEnvMsave = yEnvM;   
+}
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::BuildChamberTypeF(Int_t& iVolNum, Int_t icount)
+{ 
+// ratio of zpos1m/zpos1p and inverse for first plane
+    Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
+    Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
+    Float_t zpm=1./zmp;
+    Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
+    Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
     
-  return *this;  
+   Double_t dpar[3];    
+   Double_t spar[3];    
+   Double_t ppar[3];    
+
+// F
+   dpar[0] = (fgkXMAX/2.)*zRatio;
+   dpar[1] =  fgkYMIN*zRatio;
+   dpar[2] = 0.4;   
+
+   Float_t yEnvP = 0;
+   Float_t yEnvM = 0;
+   yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
+   yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
+
+   Int_t detElemId = (10+icount+1)*100+14;
+   TString volEnv0 = GetVolEnvName(icount, 0);
+   TString volEnv8 = GetVolEnvName(icount, 8);
+   TString volEnv9 = GetVolEnvName(icount, 9);
+   TString volEnv17 = GetVolEnvName(icount, 17);
+   TString volAlu = GetVolumeName("volAlu", icount);
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv0, detElemId, true, TGeoTranslation(xEnv,-yEnvP,fgkZp));
+   detElemId = (10+icount+1)*100+4;
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv8, detElemId, true, TGeoTranslation(xEnv, yEnvP,fgkZp));
+   detElemId = (10+icount+1)*100+13;
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv9, detElemId, true, TGeoTranslation(-xEnv,-yEnvM,fgkZm),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   detElemId = (10+icount+1)*100+5;
+   GetEnvelopes(16+icount)
+   ->AddEnvelope(volEnv17, detElemId, true, TGeoTranslation(-xEnv, yEnvM,fgkZm),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv0,iVolNum++,3,dpar);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv8,iVolNum++,3,dpar);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv9,iVolNum++,3,dpar);
+   GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv17,iVolNum++,3,dpar);
+
+// horizontal cable support chamber type F
+
+   char volEnvSupportHF[12][8];
+   for(Int_t jj=0;jj<2;jj++){
+     for(Int_t ii=0;ii<6;ii++){
+       snprintf(volEnvSupportHF[6*jj+ii],8,"SA%dHF%d",icount+1,6*jj+ii);
+     }
+   }
+
+   spar[0]=dpar[0]-(fgkYVSup[0]/2.)*zRatio;
+   spar[1]=fgkSizeSupportCable[1];
+   spar[2]=fgkSizeSupportCable[2];
+   for(Int_t in=0;in<3;in++){
+     GetEnvelopes(16+icount)
+     ->AddEnvelope(volEnvSupportHF[in], 0, true, 
+     TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvP+dpar[1]/2.*(in-1)),
+     -(fgkSizeVSupExt[0]+spar[2])));
+     GetEnvelopes(16+icount)
+     ->AddEnvelope(volEnvSupportHF[in+3], 0, true, 
+     TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,yEnvP+dpar[1]/2.*(in-1),
+     -(fgkSizeVSupExt[0]+spar[2])));
+     GetEnvelopes(16+icount)
+     ->AddEnvelope(volEnvSupportHF[in+6], 0, true, 
+     TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),-(yEnvM+dpar[1]/2.*(in-1)),
+     fgkSizeVSupExt[0]+spar[2]),
+     TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+     GetEnvelopes(16+icount)
+     ->AddEnvelope(volEnvSupportHF[in+9], 0, true, 
+     TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio), yEnvM+dpar[1]/2.*(in-1),
+     fgkSizeVSupExt[0]+spar[2]),
+     TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   }
+   for(Int_t ii=0;ii<12;ii++) {
+     TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
+     GetEnvelopes(16+icount)
+     ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHF[ii],iVolNum++,3, spar);
+   }  
+
+// angular supports chamber type F
+// 1 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   Double_t sparysave=spar[1];
+   TString volEnvSuppAng1VF[4];
+   volEnvSuppAng1VF[0] =  GetVolEnvSuppAngName("1", "V", "F", icount, 0);
+   volEnvSuppAng1VF[1] =  GetVolEnvSuppAngName("1", "V", "F", icount, 1);
+   volEnvSuppAng1VF[2] =  GetVolEnvSuppAngName("1", "V", "F", icount, 2);
+   volEnvSuppAng1VF[3] =  GetVolEnvSuppAngName("1", "V", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
+   for (Int_t i=0;i<4;i++)
+    GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VF[i],iVolNum++,3, spar);
+
+// 1 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+
+   TString volEnvSuppAng1HF[4];
+   volEnvSuppAng1HF[0] =  GetVolEnvSuppAngName("1", "H", "F", icount, 0);
+   volEnvSuppAng1HF[1] =  GetVolEnvSuppAngName("1", "H", "F", icount, 1);
+   volEnvSuppAng1HF[2] =  GetVolEnvSuppAngName("1", "H", "F", icount, 2);
+   volEnvSuppAng1HF[3] =  GetVolEnvSuppAngName("1", "H", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HF[i],iVolNum++,3, spar);
+
+// gas pipe (low)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe1F[4];
+   volEnvInoxGasPipe1F[0] = GetVolEnvInoxGasPipeName("1", "F", icount, 0);
+   volEnvInoxGasPipe1F[1] = GetVolEnvInoxGasPipeName("1", "F", icount, 1);
+   volEnvInoxGasPipe1F[2] = GetVolEnvInoxGasPipeName("1", "F", icount, 2);
+   volEnvInoxGasPipe1F[3] = GetVolEnvInoxGasPipeName("1", "F", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+
+   TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1F[i],iVolNum++,3, ppar);
+
+// 2 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+   TString volEnvSuppAng2VF[4];
+   volEnvSuppAng2VF[0] =  GetVolEnvSuppAngName("2", "V", "F", icount, 0);
+   volEnvSuppAng2VF[1] =  GetVolEnvSuppAngName("2", "V", "F", icount, 1);
+   volEnvSuppAng2VF[2] =  GetVolEnvSuppAngName("2", "V", "F", icount, 2);
+   volEnvSuppAng2VF[3] =  GetVolEnvSuppAngName("2", "V", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[2], 0, true,
+    TGeoTranslation(-xEnv,-yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[3], 0, true,
+    TGeoTranslation(-xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VF[i],iVolNum++,3, spar);   
+
+// 2 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+
+   TString volEnvSuppAng2HF[4];
+   volEnvSuppAng2HF[0] =  GetVolEnvSuppAngName("2", "H", "F", icount, 0);
+   volEnvSuppAng2HF[1] =  GetVolEnvSuppAngName("2", "H", "F", icount, 1);
+   volEnvSuppAng2HF[2] =  GetVolEnvSuppAngName("2", "H", "F", icount, 2);
+   volEnvSuppAng2HF[3] =  GetVolEnvSuppAngName("2", "H", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HF[i],iVolNum++,3, spar);   
+
+// 3 vertical     
+    spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1V[1];
+   spar[2]=fgkSizeSupport1V[2];
+   sparysave=spar[1];
+
+   TString volEnvSuppAng3VF[4];
+   volEnvSuppAng3VF[0] =  GetVolEnvSuppAngName("3", "V", "F", icount, 0);
+   volEnvSuppAng3VF[1] =  GetVolEnvSuppAngName("3", "V", "F", icount, 1);
+   volEnvSuppAng3VF[2] =  GetVolEnvSuppAngName("3", "V", "F", icount, 2);
+   volEnvSuppAng3VF[3] =  GetVolEnvSuppAngName("3", "V", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
+   for (Int_t i=0;i<4;i++)
+    GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VF[i],iVolNum++,3, spar);
+
+// 3 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport1H[1];
+   spar[2]=fgkSizeSupport1H[2];
+   TString volEnvSuppAng3HF[4];
+   volEnvSuppAng3HF[0] =  GetVolEnvSuppAngName("3", "H", "F", icount, 0);
+   volEnvSuppAng3HF[1] =  GetVolEnvSuppAngName("3", "H", "F", icount, 1);
+   volEnvSuppAng3HF[2] =  GetVolEnvSuppAngName("3", "H", "F", icount, 2);
+   volEnvSuppAng3HF[3] =  GetVolEnvSuppAngName("3", "H", "F", icount, 3);
+  
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HF[i],iVolNum++,3, spar);
+   
+// gas pipe (high)
+   ppar[0]=fgkSizeGasPipe[0];
+   ppar[1]=fgkSizeGasPipe[1];
+   ppar[2]=dpar[0];
+   TString volEnvInoxGasPipe2F[4];
+   volEnvInoxGasPipe2F[0] = GetVolEnvInoxGasPipeName("2", "F", icount, 0);
+   volEnvInoxGasPipe2F[1] = GetVolEnvInoxGasPipeName("2", "F", icount, 1);
+   volEnvInoxGasPipe2F[2] = GetVolEnvInoxGasPipeName("2", "F", icount, 2);
+   volEnvInoxGasPipe2F[3] = GetVolEnvInoxGasPipeName("2", "F", icount, 3);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
+
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2F[i],iVolNum++,3, ppar);
+
+// 4 vertical     
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2V[1];
+   spar[2]=fgkSizeSupport2V[2];
+   sparysave=spar[1]+fgkSizeSupport2H[1];
+
+   TString volEnvSuppAng4VF[4];
+   volEnvSuppAng4VF[0] =  GetVolEnvSuppAngName("4", "V", "F", icount, 0);
+   volEnvSuppAng4VF[1] =  GetVolEnvSuppAngName("4", "V", "F", icount, 1);
+   volEnvSuppAng4VF[2] =  GetVolEnvSuppAngName("4", "V", "F", icount, 2);
+   volEnvSuppAng4VF[3] =  GetVolEnvSuppAngName("4", "V", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[2], 0, true,
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[3], 0, true,
+   TGeoTranslation(-xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   
+   TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VF[i],iVolNum++,3, spar);   
+
+// 4 horizontal           
+   spar[0]=dpar[0];
+   spar[1]=fgkSizeSupport2H[1];
+   spar[2]=fgkSizeSupport2H[2];
+
+   TString volEnvSuppAng4HF[4];
+   volEnvSuppAng4HF[0] =  GetVolEnvSuppAngName("4", "H", "F", icount, 0);
+   volEnvSuppAng4HF[1] =  GetVolEnvSuppAngName("4", "H", "F", icount, 1);
+   volEnvSuppAng4HF[2] =  GetVolEnvSuppAngName("4", "H", "F", icount, 2);
+   volEnvSuppAng4HF[3] =  GetVolEnvSuppAngName("4", "H", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[0], 0, true,
+   TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[1], 0, true,
+   TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[2], 0, true, 
+   TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[3], 0, true, 
+   TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HF[i],iVolNum++,3, spar);   
+
+
+// X horizontal           
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXH[1];
+   spar[2]=fgkSizeSupportXH[2];
+   Double_t sparysavex=spar[1];
+
+   TString volEnvSuppAngXHF[4];
+   volEnvSuppAngXHF[0] =  GetVolEnvSuppAngName("X", "H", "F", icount, 0);
+   volEnvSuppAngXHF[1] =  GetVolEnvSuppAngName("X", "H", "F", icount, 1);
+   volEnvSuppAngXHF[2] =  GetVolEnvSuppAngName("X", "H", "F", icount, 2);
+   volEnvSuppAngXHF[3] =  GetVolEnvSuppAngName("X", "H", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[0], 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[1], 0, true,
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0,
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[2], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[3], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0,
+   -(fgkSizeVSupExt[0]+spar[2])),
+   TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHF[i],iVolNum++,3, spar);   
+
+// X vertical     
+   spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
+   spar[1]=fgkSizeSupportXV[1];
+   spar[2]=fgkSizeSupportXV[2];
+
+   TString volEnvSuppAngXVF[4];
+   volEnvSuppAngXVF[0] =  GetVolEnvSuppAngName("X", "V", "F", icount, 0);
+   volEnvSuppAngXVF[1] =  GetVolEnvSuppAngName("X", "V", "F", icount, 1);
+   volEnvSuppAngXVF[2] =  GetVolEnvSuppAngName("X", "V", "F", icount, 2);
+   volEnvSuppAngXVF[3] =  GetVolEnvSuppAngName("X", "V", "F", icount, 3);
+   
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[0], 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[1], 0, true, 
+   TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   fgkSizeVSupExt[0]+spar[2]));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[2], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+   GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[3], 0, true, 
+   TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
+   -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
+
+   TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
+   for (Int_t i=0;i<4;i++)
+   GetEnvelopes(16+icount)
+   ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVF[i],iVolNum++,3, spar);
+   
+      // keep values of yEnvP, yEnvM
+   fYEnvPsave = yEnvP;
+   fYEnvMsave = yEnvM;   
 }
 
 //
@@ -88,7 +2440,7 @@ AliMUONTriggerGeometryBuilder::operator = (const AliMUONTriggerGeometryBuilder&
 //______________________________________________________________________________
 void AliMUONTriggerGeometryBuilder::CreateGeometry()
 {
-// From AliMUONv1::CreateGeometry()
+/// From AliMUONv1::CreateGeometry()
 
     /* 
        zpos1 and zpos2 are the middle of the first and second
@@ -100,266 +2452,110 @@ void AliMUONTriggerGeometryBuilder::CreateGeometry()
        side of the RPCs (see zpos1 and zpos2)
     */
     
-    Int_t *idtmed = fMUON->GetIdtmed()->GetArray()-1099;
-    Int_t idAir= idtmed[1100]; // medium 1
-    Int_t idAlu1=idtmed[1103]; // medium 4
-    Int_t detElemId=0;          // Detection Element Number    
-    Float_t tpar[3];
-    Double_t dpar[3];    
-    
-// vertical gap between right and left chambers (kDXZERO*2=4cm)
-    const Float_t kDXZERO=2.; 
-// main distances for chamber definition in first plane/first station
-    const Float_t kXMIN=34.;       
-    const Float_t kXMED=51.;                                
-    const Float_t kXMAX=255.; 
-// 090704 kXMAX changed from 272 to 255.
-// (see fig.2-4 & 2-5 of Local Trigger Board PRR)
-// segmentation updated accordingly
-    const Float_t kYMIN=34.;                              
-    const Float_t kYMAX=51.;                              
-// inner/outer radius of flange between beam shield. and chambers (1/station)
-    const Float_t kRMIN[2]={50.,50.};
-    const Float_t kRMAX[2]={64.,68.};
-// z position of the middle of the gas gap in mother vol 
-    const Float_t kZm=-3.6;
-    const Float_t kZp=+3.6;     
-
-    AliMUONChamber *iChamber, *iChamber1;
-    iChamber1 = GetChamber(10);
-    Float_t zpos1=-iChamber1->Z(); 
-    
-// ratio of zpos1m/zpos1p and inverse for first plane
-    Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
-    Float_t zpm=1./zmp;
+    fIdtmed = fMUON->GetIdtmed()->GetArray()-1099;
+    fIdAir= fIdtmed[1100]; // medium 1
+    fIdAlu1=fIdtmed[1103]; // medium 4
+    fIdInox = fIdtmed[1128];       // medium 29 Stainless Steel (18%Cr,9%Ni,Fe) 
     
+    Double_t dstation =  ( ( - AliMUONConstants::DefaultChamberZ(11)) - 
+         ( - AliMUONConstants::DefaultChamberZ(10)) ) /2.1;
+    Float_t par[3];
+    par[2] = dstation;
     Int_t icount=0;  // chamber counter (0 1 2 3)
     
     for (Int_t istation=0; istation<2; istation++) { // loop on stations
-       for (Int_t iplane=0; iplane<2; iplane++) { // loop on detection planes
-           
-           Int_t iVolNum=1; // counter Volume Number
-           icount = Int_t(iplane*TMath::Power(2,0))+
-               Int_t(istation*TMath::Power(2,1));
-           
-           iChamber = GetChamber(10+icount);
-           Float_t zpos = - iChamber->Z();          
-           
-// Flange between beam shielding and RPC 
-           tpar[0]= kRMIN[istation];
-           tpar[1]= kRMAX[istation];
-           tpar[2]= 4.0;           
-           char volFlange[5];
-           sprintf(volFlange,"SF%dA",icount+1);         
-           gMC->Gsvolu(volFlange,"TUBE",idAlu1,tpar,3);     // Al
-            // changed by ivana
-           //gMC->Gspos(volFlange,1,"ALIC",0.,0.,zpos,0,"MANY");
-           iChamber->GetGeometry()->GetEnvelopeStore()
-             ->AddEnvelope(volFlange, 0, false, "MANY");
-           
-// scaling factor
-           Float_t zRatio = zpos / zpos1;
-           
-// envelopes (same size except line 5, all virtual)
-           char volEnv[18][5];
-           tpar[1] = kYMIN * zRatio; 
-           tpar[2] = 0.4;
-           Int_t i=0;    // counter
-           for (Int_t icolumn=0; icolumn<2; icolumn++) {
-               for (Int_t iline=1; iline<10; iline++){
-                   tpar[0] = (kXMAX/2.) * zRatio;
-                   if (iline==5) tpar[0] = ((kXMAX-kXMED)/2.)*zRatio;
-                   if (icolumn==0) 
-                       sprintf(volEnv[i],"S%dR%d",icount,iline);
-                   else
-                       sprintf(volEnv[i],"S%dL%d",icount,iline);
-                   gMC->Gsvolu(volEnv[i],"BOX",idAir,tpar,0); 
-                   i++;
-               }
-           }
-
+      for (Int_t iplane=0; iplane<2; iplane++) { // loop on detection planes
+   
+          Int_t iVolNum=1; // counter Volume Number
+          icount = Int_t(iplane<<0)+Int_t(istation<<1);
+          
+          cout << "## In AliMUONTriggerGeometryBuilder " << icount << endl;
+    
+          par[0] = AliMUONConstants::Rmin(5+istation); 
+          par[1] = AliMUONConstants::Rmax(5+istation);
+          Char_t volName[6];
+          snprintf(volName,6,"%s%d", "SC",11+icount);
+          TVirtualMC::GetMC()->Gsvolu(volName,"TUBE", fIdAir, par, 3);
+          
 // chamber prototype
-           tpar[0]= 0.;
-           tpar[1]= 0.;
-           tpar[2]= 0.;            
-           char volAlu[5];     // Alu 
-           char volBak[5];     // Bakelite
-           char volGaz[5];     // Gas streamer     
-           sprintf(volAlu,"SC%dA",icount+1);
-           sprintf(volBak,"SB%dA",icount+1);
-           sprintf(volGaz,"SG%dA",icount+1);
-           gMC->Gsvolu(volAlu,"BOX",idAlu1,tpar,0);         // Al
-           gMC->Gsvolu(volBak,"BOX",idtmed[1107],tpar,0);   // Bakelite
-           gMC->Gsvolu(volGaz,"BOX",idtmed[1106],tpar,0);   // Gas streamer
-           tpar[0] = -1.;
-           tpar[1] = -1.;
-           tpar[2] = 0.1;    
-           gMC->Gsposp(volGaz,1,volBak,0.,0.,0.,0,"ONLY",tpar,3);
-           tpar[2] = 0.3;
-           gMC->Gsposp(volBak,1,volAlu,0.,0.,0.,0,"ONLY",tpar,3);
+          BuildChamberPrototype(icount);
+
+// RPC supports (vertical)
+          BuildRPCSupportsVertical(iVolNum, icount);
+            
+// RPC supports (horizontal)
+
+// supports for cables
+          BuildRPCSupportsHorizontal(icount);
+          
+// Angular supports for chambers
+          BuildAngularSupportForChambers(icount);
+
+// gas pipes
+          BuildGasPipes(icount);
 
 // chamber type A
-           Float_t xEnv = (kDXZERO+kXMED+(kXMAX-kXMED)/2.)*zRatio;
-           Float_t yEnvM = 0.;  // y low position of envelope in chamber
-           Float_t yEnvP = 0.;  // y up position of envelope in chamber
-           Float_t yEnvPsave = 0.; // tmp data
-           Float_t yEnvMsave = 0.; // tmp data
-           Float_t xpos = 0.; // x position of RPC in envelope     
-           Float_t ypos = 0.; // y position of RPC in envelope
-           dpar[2] = 0.4;          
-           dpar[0] = ((kXMAX-kXMED)/2.)*zRatio;
-           dpar[1] = kYMIN * zRatio;
-
-           detElemId = (10+icount+1)*100+4;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[4], detElemId, true, TGeoTranslation(xEnv,yEnvM,kZm));
-           detElemId = (10+icount+1)*100+50+4;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[13], detElemId, true, TGeoTranslation(-xEnv,yEnvP,kZp));
-
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[4],iVolNum++,3, dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[13],iVolNum++,3, dpar);      
+          BuildChamberTypeA(iVolNum, icount);
 
 // chamber type B (plus envelope chambers B & C)   
-           xEnv = (kDXZERO+kXMAX/2.)*zRatio;
-           yEnvPsave = yEnvP;
-           yEnvMsave = yEnvM;
-           yEnvP = (yEnvMsave + kYMIN * zRatio ) * zpm + kYMIN * zRatio;
-           yEnvM = (yEnvPsave + kYMIN * zRatio ) * zmp + kYMIN * zRatio;
-           dpar[0] = ((kXMAX-kXMIN)/2.) * zRatio;
-           dpar[1] = ((kYMAX-kYMIN)/2.) * zRatio;
-           xpos = kXMIN/2. * zRatio;
-           ypos = (kYMIN - kYMIN/4.) * zRatio;
-
-           detElemId = (10+icount+1)*100+3;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[3], detElemId, true, TGeoTranslation( xEnv,-yEnvP,kZp));
-           detElemId = (10+icount+1)*100+5;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[5], detElemId, true, TGeoTranslation( xEnv, yEnvP,kZp));
-           detElemId = (10+icount+1)*100+50+3;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[12], detElemId, true, TGeoTranslation(-xEnv,-yEnvM,kZm));
-           detElemId = (10+icount+1)*100+50+5;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[14], detElemId, true, TGeoTranslation(-xEnv, yEnvM,kZm));
-
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[3],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[5],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[12],iVolNum++,TGeoTranslation(-xpos, ypos,0.),3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[14],iVolNum++,TGeoTranslation(-xpos,-ypos,0.),3,dpar);
+          BuildChamberTypeB(iVolNum, icount);
 
-// chamber type C (note: same Z than type B)
-           dpar[0] = (kXMAX/2)*zRatio;
-           dpar[1] = (kYMAX/2)*zRatio;
-           xpos = 0.;      
-           ypos = ((kYMAX - kYMIN)/2.) * zRatio;
-
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[3],iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[5],iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[12],iVolNum++,TGeoTranslation(-xpos,-ypos,0.),3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[14],iVolNum++,TGeoTranslation(-xpos, ypos,0.),3,dpar);
-    
 // chamber type D, E and F (same size)
-// D       
-           yEnvPsave = yEnvP;
-           yEnvMsave = yEnvM;
-           yEnvP = (yEnvMsave + kYMIN * zRatio ) * zpm + kYMIN * zRatio;
-           yEnvM = (yEnvPsave + kYMIN * zRatio ) * zmp + kYMIN * zRatio;
-           dpar[0] = (kXMAX/2.)*zRatio;
-           dpar[1] =  kYMIN*zRatio;
-
-           detElemId = (10+icount+1)*100+2;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[2], detElemId, true, TGeoTranslation(xEnv,-yEnvM,kZm));
-           detElemId = (10+icount+1)*100+6;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[6], detElemId, true, TGeoTranslation(xEnv, yEnvM,kZm));
-           detElemId = (10+icount+1)*100+50+2;
-            GetEnvelopes(10+icount)->AddEnvelope(volEnv[11], detElemId, true, TGeoTranslation(-xEnv,-yEnvP,kZp));
-           detElemId = (10+icount+1)*100+50+6;
-            GetEnvelopes(10+icount)->AddEnvelope(volEnv[15], detElemId, true, TGeoTranslation(-xEnv, yEnvP,kZp));
-
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[2],iVolNum++,3, dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[6],iVolNum++,3, dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[11],iVolNum++,3, dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[15],iVolNum++,3, dpar);
+          BuildChamberTypeD(iVolNum, icount);
+          BuildChamberTypeE(iVolNum, icount);
+          BuildChamberTypeF(iVolNum, icount);
+       } // end loop on detection planes
+    } // end loop on stations    
+}
 
-// E
-           yEnvPsave = yEnvP;
-           yEnvMsave = yEnvM;
-           yEnvP = (yEnvMsave + kYMIN * zRatio ) * zpm + kYMIN * zRatio;
-           yEnvM = (yEnvPsave + kYMIN * zRatio ) * zmp + kYMIN * zRatio;
-
-           detElemId = (10+icount+1)*100+1;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[1], detElemId, true, TGeoTranslation(xEnv,-yEnvP,kZp));
-           detElemId = (10+icount+1)*100+7;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[7], detElemId, true, TGeoTranslation(xEnv, yEnvP,kZp));
-           detElemId = (10+icount+1)*100+50+1;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[10], detElemId, true, TGeoTranslation(-xEnv,-yEnvM,kZm));
-           detElemId = (10+icount+1)*100+50+7;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[16], detElemId, true, TGeoTranslation(-xEnv, yEnvM,kZm));
-
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[1],iVolNum++,3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[7],iVolNum++,3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[10],iVolNum++,3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[16],iVolNum++,3,dpar);
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::SetVolumes() 
+{
+/// Defines the volumes for the trigger chambers.
 
+    if (gAlice->GetModule("SHIL")) {
+      SetMotherVolume(16, "YOUT2");
+      SetMotherVolume(17, "YOUT2");
+      SetMotherVolume(18, "YOUT2");
+      SetMotherVolume(19, "YOUT2");
+    }  
 
-// F
-           yEnvPsave = yEnvP;
-           yEnvMsave = yEnvM;
-           yEnvP = (yEnvMsave + kYMIN * zRatio ) * zpm + kYMIN * zRatio;
-           yEnvM = (yEnvPsave + kYMIN * zRatio ) * zmp + kYMIN * zRatio;
-
-           detElemId = (10+icount+1)*100;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[0], detElemId, true, TGeoTranslation(xEnv,-yEnvM,kZm));
-           detElemId = (10+icount+1)*100+8;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[8], detElemId, true, TGeoTranslation(xEnv, yEnvM,kZm));
-           detElemId = (10+icount+1)*100+50;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[9], detElemId, true, TGeoTranslation(-xEnv,-yEnvP,kZp));
-           detElemId = (10+icount+1)*100+50+8;
-           GetEnvelopes(10+icount)->AddEnvelope(volEnv[17], detElemId, true, TGeoTranslation(-xEnv, yEnvP,kZp));
-           
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[0],iVolNum++,3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[8],iVolNum++,3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[9],iVolNum++,3,dpar);
-           GetEnvelopes(10+icount)->AddEnvelopeConstituentParam(volAlu,volEnv[17],iVolNum++,3,dpar);
-
-       } // end loop on detection planes
-    } // end loop on stations    
+    SetVolume(16, "SC11");
+    SetVolume(17, "SC12");
+    SetVolume(18, "SC13");
+    SetVolume(19, "SC14");
 }
 
 //______________________________________________________________________________
 void AliMUONTriggerGeometryBuilder::SetTransformations() 
 {
-// Defines the transformations for the trigger chambers.
-// ---
-    Double_t zpos1, zpos2;    
-    AliMUONChamber *iChamber1, *iChamber2;
-
-    iChamber1 = GetChamber(10);
-    zpos1= - iChamber1->Z(); 
-    iChamber1->GetGeometry()
-       ->SetTranslation(TGeoTranslation(0., 0., zpos1));
-    
-    iChamber2 = GetChamber(11);
-    zpos2 = - iChamber2->Z(); 
-    iChamber2->GetGeometry()
-       ->SetTranslation(TGeoTranslation(0., 0., zpos2));
-
-    iChamber1 = GetChamber(12);
-    zpos1 = - iChamber1->Z(); 
-    iChamber1->GetGeometry()
-       ->SetTranslation(TGeoTranslation(0., 0., zpos1));
+/// Defines the transformations for the trigger chambers.
+
+    TGeoRotation st345inclination("rotbeam");
+    st345inclination.RotateX(-AliMUONConstants::St345Inclination());
+
+    Double_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
+    SetTransformation(16, TGeoTranslation(0., 0, zpos1), st345inclination);
     
-    iChamber2 = GetChamber(13);
-    zpos2 = - iChamber2->Z(); 
-    iChamber2->GetGeometry()
-       ->SetTranslation(TGeoTranslation(0., 0., zpos2));
+    zpos1= AliMUONConstants::DefaultChamberZ(11); 
+    SetTransformation(17, TGeoTranslation(0., 0, zpos1), st345inclination);
+
+    zpos1= AliMUONConstants::DefaultChamberZ(12); 
+    SetTransformation(18, TGeoTranslation(0., 0, zpos1), st345inclination);
+
+    zpos1= AliMUONConstants::DefaultChamberZ(13); 
+    SetTransformation(19, TGeoTranslation(0., 0, zpos1), st345inclination);
 }
 
 //______________________________________________________________________________
 void AliMUONTriggerGeometryBuilder::SetSensitiveVolumes()
 {
-// Defines the sensitive volumes for trigger station chambers.
-// ---
+/// Defines the sensitive volumes for trigger station chambers.
 
-  GetChamber(10)->GetGeometry()->SetSensitiveVolume("SG1A");
-  GetChamber(11)->GetGeometry()->SetSensitiveVolume("SG2A");
-  GetChamber(12)->GetGeometry()->SetSensitiveVolume("SG3A");
-  GetChamber(13)->GetGeometry()->SetSensitiveVolume("SG4A");
+  GetGeometry(16)->SetSensitiveVolume("S11G");
+  GetGeometry(17)->SetSensitiveVolume("S12G");
+  GetGeometry(18)->SetSensitiveVolume("S13G");
+  GetGeometry(19)->SetSensitiveVolume("S14G");
 }