LCOV - code coverage report
Current view: top level - MUON/MUONsim - AliMUONTriggerGeometryBuilder.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1870 1872 99.9 %
Date: 2016-06-14 17:26:59 Functions: 27 27 100.0 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : // $Id$
      17             : 
      18             : //-----------------------------------------------------------------------------
      19             : /// Class AliMUONTriggerGeometryBuilder
      20             : // -----------------------------------
      21             : // MUON Trigger stations geometry 
      22             : // construction class.
      23             : // Author: Philippe Crochet (LPCCFd)
      24             : // Support for trigger chambers added April 07 by Enrico Scomparin (INFN To)
      25             : //-----------------------------------------------------------------------------
      26             : 
      27             : #include <TVirtualMC.h>
      28             : #include <TGeoMatrix.h>
      29             : #include <TArrayI.h>
      30             : 
      31             : #include "AliLog.h"
      32             : #include "AliRun.h"
      33             : 
      34             : #include "AliMUONTriggerGeometryBuilder.h"
      35             : #include "AliMUON.h"
      36             : #include "AliMUONConstants.h"
      37             : #include "AliMUONGeometryModule.h"
      38             : #include "AliMUONGeometryEnvelopeStore.h"
      39             : #include <iostream>
      40             : 
      41             : using std::endl;
      42             : using std::cout;
      43             : /// \cond CLASSIMP
      44          16 : ClassImp(AliMUONTriggerGeometryBuilder)
      45             : /// \endcond
      46             : 
      47             : // vertical gap between right and left chambers (kDXZERO*2=4cm)
      48             : const Float_t AliMUONTriggerGeometryBuilder::fgkDXZERO=2.; 
      49             : // main distances for chamber definition in first plane/first station
      50             : const Float_t AliMUONTriggerGeometryBuilder::fgkXMIN=34.;       
      51             : const Float_t AliMUONTriggerGeometryBuilder::fgkXMED=51.;                                
      52             : const Float_t AliMUONTriggerGeometryBuilder::fgkXMAX=255.; 
      53             : // 090704 fgkXMAX changed from 272 to 255.
      54             : // (see fig.2-4 & 2-5 of Local Trigger Board PRR)
      55             : // segmentation updated accordingly
      56             : const Float_t AliMUONTriggerGeometryBuilder::fgkYMIN=34.;                              
      57             : const Float_t AliMUONTriggerGeometryBuilder::fgkYMAX=51.;                              
      58             : // inner/outer radius of flange between beam shield. and chambers (1/station)
      59             : //const Float_t AliMUONTriggerGeometryBuilder::fgkRMIN[2]={50.,50.};
      60             : //const Float_t AliMUONTriggerGeometryBuilder::fgkRMAX[2]={64.,68.};
      61             : // z position of the middle of the gas gap in mother vol 
      62             : const Float_t AliMUONTriggerGeometryBuilder::fgkZm=-3.6;
      63             : const Float_t AliMUONTriggerGeometryBuilder::fgkZp=+3.6;
      64             :     
      65             : // y positions of vertical supports
      66             : const Float_t AliMUONTriggerGeometryBuilder::fgkYVSup[4]={61.45,122.45,192.95,236.95}; 
      67             : // dimensions of vertical supports 
      68             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeVSupExt[3]={1.5,1.5,306.+5.}; 
      69             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeVSupInt[3]={1.2,1.2,306.+5.};  
      70             : // transverse dimensions of angular supports 
      71             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport1V[3]={0.,1.5,0.1}; 
      72             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport1H[3]={0.,0.1,1.15}; // z should be 1.4 in the installed set-up 
      73             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport2V[3]={0.,3.0,0.1}; 
      74             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupport2H[3]={0.,0.1,1.9}; 
      75             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupportXV[3]={0.,1.25,0.25}; 
      76             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupportXH[3]={0.,0.25,1.5}; 
      77             : // transverse dimensions of horizontal cable supports
      78             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeSupportCable[3]={0.,2.,3.}; 
      79             : // dimensions of gas pipes (inner and outer radius)
      80             : const Float_t AliMUONTriggerGeometryBuilder::fgkSizeGasPipe[3]={0.2,0.4,0.}; 
      81             : // Position of gas pipe with respect to angular support
      82             : const Float_t AliMUONTriggerGeometryBuilder::fgkOffsetGasPipe=0.75; 
      83             : // Small cut on some volumes to avoid extrusion from SC1x
      84             : const Float_t AliMUONTriggerGeometryBuilder::fgkAvoidExtrusion=2.9;    
      85             : 
      86             : //______________________________________________________________________________
      87             : AliMUONTriggerGeometryBuilder::AliMUONTriggerGeometryBuilder(AliMUON* muon)
      88           1 :  : AliMUONVGeometryBuilder(16, 4),
      89           1 :    fMUON(muon),
      90           1 :    fIdtmed(0),
      91           1 :    fIdAir(0),  
      92           1 :    fIdAlu1(0),
      93           1 :    fIdInox(0),
      94           1 :    fYEnvPsave(0.), 
      95           1 :    fYEnvMsave(0.), 
      96           1 :    fDYsave(0.),
      97           1 :    fDXsave(0.),
      98           1 :    fRsupportpipe()
      99           5 : {
     100             : /// Standard constructor
     101           1 :    fRsupportpipe.SetAngles(90.,90.,0.);
     102           2 : }
     103             : 
     104             : //______________________________________________________________________________
     105             : AliMUONTriggerGeometryBuilder::AliMUONTriggerGeometryBuilder()
     106          12 :  : AliMUONVGeometryBuilder(),
     107          12 :    fMUON(0),
     108          12 :    fIdtmed(0),
     109          12 :    fIdAir(0),  
     110          12 :    fIdAlu1(0),
     111          12 :    fIdInox(0),
     112          12 :    fYEnvPsave(0.), 
     113          12 :    fYEnvMsave(0.), 
     114          12 :    fDYsave(0.),
     115          12 :    fDXsave(0.),
     116          12 :    fRsupportpipe()
     117          60 : {
     118             : /// Default constructor
     119          24 : }
     120             : 
     121             : //______________________________________________________________________________
     122             : AliMUONTriggerGeometryBuilder::~AliMUONTriggerGeometryBuilder() 
     123          78 : {
     124             : /// Destructor
     125          39 : }
     126             : 
     127             : //______________________________________________________________________________
     128             : TString AliMUONTriggerGeometryBuilder::GetVolumeName(const TString& volume, Int_t icount) const
     129             : {
     130             : // Function to generate a short volume name from its long variant
     131             : 
     132         552 :   if ( volume == "volAlu" ) {
     133          28 :     char volAlu[5];     // Alu 
     134          28 :     snprintf(volAlu,5,"SC%dA",icount+1);
     135          28 :     return volAlu;
     136          28 :   }
     137         248 :   else if ( volume == "volAluSupportH") {
     138         220 :     char volAluSupportH[6];
     139         220 :     snprintf(volAluSupportH,6,"SALH%d",icount+1);
     140         220 :     return  volAluSupportH;
     141         220 :   }         
     142          28 :   else if ( volume == "volAirSupportH") {
     143           4 :     char volAirSupportH[6];
     144           4 :     snprintf(volAirSupportH,6,"SAIH%d",icount+1);
     145           4 :     return  volAirSupportH;
     146           4 :   }
     147          24 :   else if ( volume == "volInoxGasPipe") {
     148          24 :     char volInoxGasPipe[7];
     149          24 :     snprintf(volInoxGasPipe,7,"SPINO%d",icount+1);
     150          24 :     return volInoxGasPipe;
     151          24 :   }
     152             :   
     153           0 :   AliErrorStream() << "Volume " << volume << " name is not defined." << endl; 
     154           0 :   return "";
     155         276 : }
     156             : 
     157             : //______________________________________________________________________________
     158             : TString AliMUONTriggerGeometryBuilder::GetVolEnvName(Int_t icount, Int_t ienv) const
     159             : {
     160             : /// Compose envelope names as:
     161             : /// S0R1, S0R2, ..., S0R9, S0L1, S0L2, ..., S0L9
     162             : /// where ienv = 0, .., 17
     163             : 
     164         144 :   TString name = "S";
     165          72 :   name += icount;
     166          72 :   if ( ienv < 9 ) {
     167          36 :     name += "R";
     168          36 :     name += (ienv + 1);
     169             :   }  
     170             :   else {
     171          36 :     name += "L";
     172          36 :     name += (ienv - 8) ;
     173             :   }  
     174             :   return name;
     175         144 : }     
     176             : 
     177             : //______________________________________________________________________________
     178             : TString AliMUONTriggerGeometryBuilder::GetVolAluAngSuppName(
     179             :                                           const TString& type1234X, 
     180             :                                           const TString& typeHV,
     181             :                                           Int_t icount) const
     182             : {
     183             : /// Utility function to generate volume name 
     184             : 
     185         480 :   TString name = "SA";
     186         240 :   name += type1234X;
     187         240 :   name += typeHV;
     188         240 :   name += icount+1;
     189             :   return name;
     190         480 : }  
     191             :    
     192             : //______________________________________________________________________________
     193             : TString AliMUONTriggerGeometryBuilder::GetVolEnvSuppAngName(
     194             :                                           const TString& type1234X, 
     195             :                                           const TString& typeHV, 
     196             :                                           const TString& typeABDEF,
     197             :                                           Int_t icount, Int_t ivol) const
     198             : {
     199             : /// Utility function to generate volume name 
     200             : 
     201        1440 :   TString name = "S";
     202         720 :   name += typeHV;
     203         720 :   name += type1234X;
     204         720 :   name += icount+1;
     205         720 :   name += typeABDEF;
     206         720 :   name += ivol;
     207             :   return name;
     208        1440 : }  
     209             : 
     210             : //______________________________________________________________________________
     211             : TString AliMUONTriggerGeometryBuilder::GetVolEnvInoxGasPipeName(
     212             :                                           const TString& type12, 
     213             :                                           const TString& typeABCDEF,
     214             :                                           Int_t icount, Int_t ivol) const
     215             : {
     216             : /// Utility function to generate volume name 
     217             : 
     218         288 :   TString name = "SP";
     219         144 :   name += type12;
     220         144 :   name += icount+1;
     221         144 :   name += typeABCDEF;
     222         144 :   name += ivol;
     223             :   return name;
     224         288 : }  
     225             : 
     226             : //______________________________________________________________________________
     227             : void AliMUONTriggerGeometryBuilder::BuildChamberPrototype(Int_t icount) const
     228             : {   
     229             : /// Build chamber prototype
     230             : 
     231           8 :     Float_t tpar[3];
     232           4 :     tpar[0]= 0.;
     233           4 :     tpar[1]= 0.;
     234           4 :     tpar[2]= 0.;            
     235           4 :     char volBak[5];     // Bakelite
     236           4 :     char volGaz[5];     // Gas streamer     
     237           4 :     snprintf(volBak,5,"SB%dA",icount+1);
     238           4 :     snprintf(volGaz,5,"S%dG",icount+11);
     239          16 :     TVirtualMC::GetMC()->Gsvolu(GetVolumeName("volAlu", icount),"BOX",fIdAlu1,tpar,0);         // Al
     240           4 :     TVirtualMC::GetMC()->Gsvolu(volBak,"BOX",fIdtmed[1107],tpar,0);   // Bakelite
     241           4 :     TVirtualMC::GetMC()->Gsvolu(volGaz,"BOX",fIdtmed[1106],tpar,0);   // Gas streamer
     242           4 :     tpar[0] = -1.;
     243           4 :     tpar[1] = -1.;
     244           4 :     tpar[2] = 0.1;    
     245           4 :     TVirtualMC::GetMC()->Gsposp(volGaz,1,volBak,0.,0.,0.,0,"ONLY",tpar,3);
     246           4 :     tpar[2] = 0.3;
     247          16 :     TVirtualMC::GetMC()->Gsposp(volBak,1,GetVolumeName("volAlu", icount),0.,0.,0.,0,"ONLY",tpar,3);
     248           4 : }    
     249             : 
     250             : //______________________________________________________________________________
     251             : void AliMUONTriggerGeometryBuilder::BuildRPCSupportsVertical(Int_t& iVolNum, Int_t icount) const
     252             : {
     253             : /// Build RPC vertical supports
     254             : 
     255           8 :    Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);                   
     256           4 :    char volAluSupport[5],volAirSupport[5];
     257           4 :    snprintf(volAluSupport,5,"SAL%d",icount+1);
     258           4 :    snprintf(volAirSupport,5,"SAI%d",icount+1);
     259           4 :    char volEnvSupport[12][7];
     260          72 :    for(Int_t ii=0;ii<8;ii++){
     261          32 :      snprintf(volEnvSupport[ii],7,"SEA%dV%d",icount+1,ii);
     262             :    }
     263           4 :    Float_t tpar[3];
     264           4 :    tpar[0]= 0.;
     265           4 :    tpar[1]= 0.;
     266           4 :    tpar[2]= 0.;            
     267           4 :    TVirtualMC::GetMC()->Gsvolu(volAluSupport,"BOX",fIdAlu1,tpar,0);
     268           4 :    TVirtualMC::GetMC()->Gsvolu(volAirSupport,"BOX",fIdAir,tpar,0);
     269           4 :    tpar[0]=fgkSizeVSupInt[0];
     270           4 :    tpar[1]=fgkSizeVSupInt[1];
     271           4 :    tpar[2]=-1.;
     272           4 :    TVirtualMC::GetMC()->Gsposp(volAirSupport,1,volAluSupport,0.,0.,0.,0,"ONLY",tpar,3);
     273             :    
     274           4 :    TGeoRotation rsupportv;
     275           4 :    rsupportv.SetAngles(0.,90.,0.);
     276           4 :    Double_t dpar[3];
     277           4 :    dpar[0]=fgkSizeVSupExt[0];
     278           4 :    dpar[1]=fgkSizeVSupExt[1];
     279           4 :    dpar[2]=fgkSizeVSupExt[2]*zRatio;
     280          40 :    for(Int_t ii=0;ii<4;ii++){
     281          64 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupport[ii], 0, true,
     282          16 :      TGeoTranslation(-fgkYVSup[ii]*zRatio,0.,0.),rsupportv);
     283          48 :      GetEnvelopes(16+icount)
     284          48 :      ->AddEnvelopeConstituentParam(volAluSupport,volEnvSupport[ii],iVolNum++,3, dpar);
     285             :    }       
     286          40 :    for(Int_t ii=4;ii<8;ii++){
     287          64 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupport[ii], 0, true,
     288          16 :      TGeoTranslation(fgkYVSup[ii-4]*zRatio,0.,0.),rsupportv);
     289          48 :      GetEnvelopes(16+icount)
     290          48 :      ->AddEnvelopeConstituentParam(volAluSupport,volEnvSupport[ii],iVolNum++,3, dpar);
     291             :    }   
     292           4 : }               
     293             : 
     294             : //______________________________________________________________________________
     295             : void AliMUONTriggerGeometryBuilder::BuildRPCSupportsHorizontal(Int_t icount) const
     296             : { 
     297             : /// Build RPC horizontal supports   
     298             : 
     299             : // RPC supports (horizontal)
     300             : 
     301             : // supports for cables
     302             : 
     303           8 :    Float_t tpar[3];
     304           4 :    tpar[0]= 0.;
     305           4 :    tpar[1]= 0.;
     306           4 :    tpar[2]= 0.;  
     307           8 :    TString volAluSupportH = GetVolumeName("volAluSupportH", icount);        
     308          12 :    TString volAirSupportH = GetVolumeName("volAirSupportH", icount);        
     309          12 :    TVirtualMC::GetMC()->Gsvolu(volAluSupportH,"BOX",fIdAlu1,tpar,0);
     310          12 :    TVirtualMC::GetMC()->Gsvolu(volAirSupportH,"BOX",fIdAir,tpar,0);
     311           4 :    tpar[0]=-1.;
     312           4 :    tpar[1]=1.9;
     313           4 :    tpar[2]=2.8;
     314          16 :    TVirtualMC::GetMC()->Gsposp(volAirSupportH,1,volAluSupportH,0.,0.,0.,0,"ONLY",tpar,3);
     315           4 : }           
     316             : 
     317             : //______________________________________________________________________________
     318             : void AliMUONTriggerGeometryBuilder::BuildAngularSupportForChambers(Int_t icount) const
     319             : {
     320             : /// Build angular supports for chambers
     321             : 
     322           8 :    Float_t tpar[3];
     323           4 :    tpar[0]= 0.;
     324           4 :    tpar[1]= 0.;
     325           4 :    tpar[2]= 0.;            
     326          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("1","V",icount),"BOX",fIdAlu1,tpar,0);
     327          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("1","H",icount),"BOX",fIdAlu1,tpar,0);
     328          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("2","V",icount),"BOX",fIdAlu1,tpar,0);
     329          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("2","H",icount),"BOX",fIdAlu1,tpar,0);
     330          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("3","V",icount),"BOX",fIdAlu1,tpar,0);
     331          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("3","H",icount),"BOX",fIdAlu1,tpar,0);
     332          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("4","V",icount),"BOX",fIdAlu1,tpar,0);
     333          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("4","H",icount),"BOX",fIdAlu1,tpar,0);
     334          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("X","V",icount),"BOX",fIdAlu1,tpar,0);
     335          20 :    TVirtualMC::GetMC()->Gsvolu(GetVolAluAngSuppName("X","H",icount),"BOX",fIdAlu1,tpar,0);
     336           4 : }           
     337             : 
     338             : //______________________________________________________________________________
     339             : void AliMUONTriggerGeometryBuilder::BuildGasPipes(Int_t icount) const
     340             : {        
     341             : /// Build gas pipes
     342          12 :    TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
     343           4 :    Float_t tpar[3];
     344           4 :    tpar[0]= 0.;
     345           4 :    tpar[1]= 0.;
     346           4 :    tpar[2]= 0.;            
     347          12 :    TVirtualMC::GetMC()->Gsvolu(volInoxGasPipe,"TUBE",fIdInox,tpar,0);
     348           4 : }          
     349             :   
     350             : //______________________________________________________________________________
     351             : void AliMUONTriggerGeometryBuilder::BuildChamberTypeA(Int_t& iVolNum, Int_t icount) 
     352             : {
     353             : /// Build chamber type A and horizontal support 
     354             : 
     355           8 :    Double_t dpar[3];    
     356           4 :    Double_t spar[3];    
     357           4 :    Double_t ppar[3];    
     358             : 
     359             : // chamber type A 
     360           4 :    Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);                   
     361           4 :    Float_t xEnv = (fgkDXZERO+fgkXMED+(fgkXMAX-fgkXMED)/2.)*zRatio;
     362             :    Float_t yEnvM = 0.;   // y low position of envelope in chamber
     363             :    Float_t yEnvP = 0.;   // y up position of envelope in chamber
     364           4 :    fYEnvPsave = 0.; // tmp data
     365           4 :    fYEnvMsave = 0.; // tmp data
     366             :    //Float_t xpos = 0.; // x position of RPC in envelope            
     367             :    //Float_t ypos = 0.; // y position of RPC in envelope
     368           4 :    dpar[2] = 0.4;           
     369           4 :    dpar[0] = ((fgkXMAX-fgkXMED)/2.)*zRatio;
     370           4 :    dpar[1] = fgkYMIN * zRatio;
     371             : 
     372           4 :    Int_t detElemId = (10+icount+1)*100;
     373           4 :    TString volEnv4 = GetVolEnvName(icount, 4);
     374           4 :    TString volEnv13 = GetVolEnvName(icount, 13);
     375          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv4, detElemId, true,  
     376           4 :    TGeoTranslation(xEnv,yEnvP,fgkZp));
     377           4 :    detElemId = (10+icount+1)*100+9;
     378          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv13, detElemId, true,    
     379           8 :    TGeoTranslation(-xEnv,yEnvM,fgkZm),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     380             : 
     381          12 :    TString volAlu = GetVolumeName("volAlu", icount);
     382           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv4,iVolNum++,3, dpar);
     383           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv13,iVolNum++,3, dpar);      
     384             : 
     385             : // horizontal cable support chamber type A
     386           4 :    char volEnvSupportHA[6][8];
     387          24 :    for(Int_t jj=0;jj<2;jj++){
     388         112 :      for(Int_t ii=0;ii<6;ii++){
     389          96 :        if(ii<3)snprintf(volEnvSupportHA[3*jj+ii],8,"SA%dHA%d",icount+1,3*jj+ii);
     390             :      }
     391             :    }
     392             : 
     393           4 :    spar[0]=((fgkXMAX/2)-fgkYVSup[0]/2.)*zRatio;
     394           4 :    spar[1]=fgkSizeSupportCable[1];
     395           4 :    spar[2]=fgkSizeSupportCable[2];
     396           4 :    Float_t offsetSuppA = ((fgkXMAX-fgkXMED)/2.)*zRatio-(((fgkXMAX/2)-fgkYVSup[0]/2.)*zRatio);
     397          32 :    for(Int_t in=0;in<3;in++){
     398          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHA[in], 0, true, 
     399          12 :      TGeoTranslation(xEnv+offsetSuppA/2.,yEnvP+dpar[1]/2.*(in-1),-(fgkSizeVSupExt[0]+spar[2])));    
     400          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHA[in+3], 0, true, 
     401          12 :      TGeoTranslation(-(xEnv+offsetSuppA/2.),yEnvM+dpar[1]/2.*(in-1),fgkSizeVSupExt[0]+spar[2]),
     402          12 :      TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     403             :    }
     404          56 :    for(Int_t ii=0;ii<6;ii++) {
     405          72 :      TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
     406          72 :      GetEnvelopes(16+icount)
     407          48 :      ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHA[ii],iVolNum++,3, spar);
     408          24 :    }  
     409             : 
     410           4 :    spar[0]=dpar[0];
     411           4 :    spar[1]=fgkSizeSupport1V[1];
     412           4 :    spar[2]=fgkSizeSupport1V[2];
     413           4 :    Float_t sparysave=spar[1];
     414          20 :    TString volEnvSuppAng1VA0 = GetVolEnvSuppAngName("1", "V", "A", icount, 0);
     415          20 :    TString volEnvSuppAng1VA1 = GetVolEnvSuppAngName("1", "V", "A", icount, 1);
     416             :    
     417          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VA0, 0, true,
     418           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
     419          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VA1, 0, true,
     420           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
     421           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     422             : 
     423          16 :    TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
     424           8 :    GetEnvelopes(16+icount)
     425           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VA0,iVolNum++,3, spar);
     426           8 :    GetEnvelopes(16+icount)
     427           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VA1,iVolNum++,3, spar);        
     428             : 
     429             : // 1 horizontal    
     430             :  
     431           4 :    spar[0]=dpar[0];
     432           4 :    spar[1]=fgkSizeSupport1H[1];
     433           4 :    spar[2]=fgkSizeSupport1H[2];
     434          20 :    TString volEnvSuppAng1HA0 = GetVolEnvSuppAngName("1", "H", "A", icount, 0);
     435          20 :    TString volEnvSuppAng1HA1 = GetVolEnvSuppAngName("1", "H", "A", icount, 1);
     436          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HA0, 0, true,
     437           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
     438          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HA1, 0, true, 
     439           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
     440           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     441             : 
     442          16 :    TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
     443           8 :    GetEnvelopes(16+icount)
     444           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HA0,iVolNum++,3, spar);
     445           8 :    GetEnvelopes(16+icount)
     446           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HA1,iVolNum++,3, spar);        
     447             : 
     448             : // gas pipe (low)
     449           4 :    ppar[0]=fgkSizeGasPipe[0];
     450           4 :    ppar[1]=fgkSizeGasPipe[1];
     451           4 :    ppar[2]=dpar[0];
     452          16 :    TString volEnvInoxGasPipe1A0 = GetVolEnvInoxGasPipeName("1", "A", icount, 0);
     453          16 :    TString volEnvInoxGasPipe1A1 = GetVolEnvInoxGasPipeName("1", "A", icount, 1);
     454          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1A0, 0, true,
     455           8 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
     456          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1A1, 0, true,
     457           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
     458          12 :    TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
     459           8 :    GetEnvelopes(16+icount)
     460           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1A0,iVolNum++,3, ppar);
     461           8 :    GetEnvelopes(16+icount)
     462           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1A1,iVolNum++,3, ppar);
     463             : 
     464             : // 2 vertical      
     465             :  
     466           4 :    spar[0]=dpar[0];
     467           4 :    spar[1]=fgkSizeSupport2V[1];
     468           4 :    spar[2]=fgkSizeSupport2V[2];
     469           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
     470          20 :    TString volEnvSuppAng2VA0 = GetVolEnvSuppAngName("2", "V", "A", icount, 0);
     471          20 :    TString volEnvSuppAng2VA1 = GetVolEnvSuppAngName("2", "V", "A", icount, 1);
     472          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VA0, 0, true,
     473           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
     474          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VA1, 0, true,
     475           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
     476           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     477             : 
     478          16 :    TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
     479           8 :    GetEnvelopes(16+icount)
     480           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VA0,iVolNum++,3, spar);
     481           8 :    GetEnvelopes(16+icount)
     482           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VA1,iVolNum++,3, spar);        
     483             : 
     484             : // 2 horizontal    
     485             :  
     486           4 :    spar[0]=dpar[0];
     487           4 :    spar[1]=fgkSizeSupport2H[1];
     488           4 :    spar[2]=fgkSizeSupport2H[2]; 
     489          20 :    TString volEnvSuppAng2HA0 = GetVolEnvSuppAngName("2", "H", "A", icount, 0);
     490          20 :    TString volEnvSuppAng2HA1 = GetVolEnvSuppAngName("2", "H", "A", icount, 1);
     491          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HA0, 0, true,
     492           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
     493          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HA1, 0, true,   
     494           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
     495           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     496             : 
     497          16 :    TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
     498           8 :    GetEnvelopes(16+icount)
     499           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HA0,iVolNum++,3, spar);
     500           8 :    GetEnvelopes(16+icount)
     501           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HA1,iVolNum++,3, spar);        
     502             : 
     503             : // 3 vertical      
     504             :  
     505           4 :    spar[0]=dpar[0];
     506           4 :    spar[1]=fgkSizeSupport1V[1];
     507           4 :    spar[2]=fgkSizeSupport1V[2];
     508           4 :    sparysave=spar[1];
     509          20 :    TString volEnvSuppAng3VA0 = GetVolEnvSuppAngName("3", "V", "A", icount, 0);
     510          20 :    TString volEnvSuppAng3VA1 = GetVolEnvSuppAngName("3", "V", "A", icount, 1);
     511          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VA0, 0, true,
     512           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
     513          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VA1, 0, true,
     514           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
     515           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     516             : 
     517          16 :    TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
     518           8 :    GetEnvelopes(16+icount)
     519           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VA0,iVolNum++,3, spar);
     520           8 :    GetEnvelopes(16+icount)
     521           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VA1,iVolNum++,3, spar);        
     522             : 
     523             : // 3 horizontal    
     524             :  
     525           4 :    spar[0]=dpar[0];
     526           4 :    spar[1]=fgkSizeSupport1H[1];
     527           4 :    spar[2]=fgkSizeSupport1H[2];
     528          20 :    TString volEnvSuppAng3HA0 = GetVolEnvSuppAngName("3", "H", "A", icount, 0);
     529          20 :    TString volEnvSuppAng3HA1 = GetVolEnvSuppAngName("3", "H", "A", icount, 1);
     530          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HA0, 0, true,
     531           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
     532          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HA1, 0, true,   
     533           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
     534           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     535             : 
     536          16 :    TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
     537           8 :    GetEnvelopes(16+icount)
     538           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HA0,iVolNum++,3, spar);
     539           8 :    GetEnvelopes(16+icount)
     540           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HA1,iVolNum++,3, spar);    
     541             :        
     542             : // gas pipe (high)
     543           4 :    ppar[0]=fgkSizeGasPipe[0];
     544           4 :    ppar[1]=fgkSizeGasPipe[1];
     545           4 :    ppar[2]=dpar[0];
     546          16 :    TString volEnvInoxGasPipe2A0 = GetVolEnvInoxGasPipeName("2", "A", icount, 0);
     547          16 :    TString volEnvInoxGasPipe2A1 = GetVolEnvInoxGasPipeName("2", "A", icount, 1);
     548          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2A0, 0, true,
     549           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
     550          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2A1, 0, true,
     551           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
     552           8 :    GetEnvelopes(16+icount)
     553           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2A0,iVolNum++,3, ppar);
     554           8 :    GetEnvelopes(16+icount)
     555           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2A1,iVolNum++,3, ppar);
     556             : 
     557             : // 4 vertical      
     558             :  
     559           4 :    spar[0]=dpar[0];
     560           4 :    spar[1]=fgkSizeSupport2V[1];
     561           4 :    spar[2]=fgkSizeSupport2V[2];
     562           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
     563          20 :    TString volEnvSuppAng4VA0 = GetVolEnvSuppAngName("4", "V", "A", icount, 0);
     564          20 :    TString volEnvSuppAng4VA1 = GetVolEnvSuppAngName("4", "V", "A", icount, 1);
     565          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VA0, 0, true,
     566           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
     567          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VA1, 0, true,
     568           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
     569           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     570             : 
     571          16 :    TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
     572           8 :    GetEnvelopes(16+icount)
     573           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VA0,iVolNum++,3, spar);
     574           8 :    GetEnvelopes(16+icount)
     575           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VA1,iVolNum++,3, spar);   
     576             : 
     577             : // 4 horizontal    
     578             :  
     579           4 :    spar[0]=dpar[0];
     580           4 :    spar[1]=fgkSizeSupport2H[1];
     581           4 :    spar[2]=fgkSizeSupport2H[2];
     582          20 :    TString volEnvSuppAng4HA0 = GetVolEnvSuppAngName("4", "H", "A", icount, 0);
     583          20 :    TString volEnvSuppAng4HA1 = GetVolEnvSuppAngName("4", "H", "A", icount, 1);
     584          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HA0, 0, true,
     585           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
     586          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HA1, 0, true, 
     587           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
     588           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     589             : 
     590          16 :    TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
     591           8 :    GetEnvelopes(16+icount)
     592           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HA0,iVolNum++,3, spar);
     593           8 :    GetEnvelopes(16+icount)
     594           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HA1,iVolNum++,3, spar);   
     595             : 
     596             : // X horizontal    
     597           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
     598           4 :    spar[1]=fgkSizeSupportXH[1];
     599           4 :    spar[2]=fgkSizeSupportXH[2];
     600           4 :    Float_t sparysavex=spar[1];
     601          20 :    TString volEnvSuppAngXHA0 = GetVolEnvSuppAngName("X", "H", "A", icount, 0);
     602          20 :    TString volEnvSuppAngXHA1 = GetVolEnvSuppAngName("X", "H", "A", icount, 1);
     603          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHA0, 0, true,
     604           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0,
     605           4 :    fgkSizeVSupExt[0]+spar[2]));
     606          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHA1, 0, true, 
     607           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0,
     608           4 :    -(fgkSizeVSupExt[0]+spar[2])),
     609           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     610             : 
     611          16 :    TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
     612           8 :    GetEnvelopes(16+icount)
     613           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHA0,iVolNum++,3, spar);   
     614           8 :    GetEnvelopes(16+icount)
     615           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHA1,iVolNum++,3, spar);   
     616             : 
     617             : // X vertical      
     618           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
     619           4 :    spar[1]=fgkSizeSupportXV[1];
     620           4 :    spar[2]=fgkSizeSupportXV[2];
     621          20 :    TString volEnvSuppAngXVA0 = GetVolEnvSuppAngName("X", "V", "A", icount, 0);
     622          20 :    TString volEnvSuppAngXVA1 = GetVolEnvSuppAngName("X", "V", "A", icount, 1);
     623          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVA0, 0, true, 
     624           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
     625           4 :    fgkSizeVSupExt[0]+spar[2]));
     626          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVA1, 0, true, 
     627           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
     628           4 :    -(fgkSizeVSupExt[0]+spar[2])),
     629           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     630             : 
     631          16 :    TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
     632           8 :    GetEnvelopes(16+icount)
     633           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVA0,iVolNum++,3, spar);   
     634           8 :    GetEnvelopes(16+icount)
     635           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVA1,iVolNum++,3, spar);       
     636             : 
     637             :    // keep values of yEnvP, yEnvM
     638           4 :    fYEnvPsave = yEnvP;
     639           4 :    fYEnvMsave = yEnvM;   
     640           4 : } 
     641             : 
     642             : //______________________________________________________________________________
     643             : void AliMUONTriggerGeometryBuilder::BuildChamberTypeB(Int_t& iVolNum, Int_t icount)
     644             : {
     645             : // ratio of zpos1m/zpos1p and inverse for first plane
     646           8 :    Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
     647           4 :    Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
     648           4 :    Float_t zpm=1./zmp;
     649             :     
     650             : // chamber type B (plus envelope chambers B & C)   
     651           4 :    Double_t dpar[3];    
     652           4 :    Double_t spar[3];    
     653           4 :    Double_t ppar[3];    
     654             : 
     655             : // chamber type B
     656           4 :    Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
     657           4 :    Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
     658             :    Float_t yEnvP = 0;
     659             :    Float_t yEnvM = 0;
     660           4 :    yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
     661           4 :    yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
     662           4 :    dpar[0] = ((fgkXMAX-fgkXMIN)/2.) * zRatio;
     663           4 :    dpar[1] = ((fgkYMAX-fgkYMIN)/2.) * zRatio;
     664           4 :    dpar[2] = 0.4;   
     665           4 :    fDYsave = dpar[1];
     666           4 :    fDXsave = dpar[0];
     667           4 :    Float_t xpos = fgkXMIN/2. * zRatio;
     668           4 :    Float_t ypos = (fgkYMIN - fgkYMIN/4.) * zRatio;
     669             :    Float_t xpossave = xpos;
     670             : 
     671           4 :    Int_t detElemId = (10+icount+1)*100+17;            
     672           4 :    TString volEnv3 = GetVolEnvName(icount, 3);
     673           4 :    TString volEnv5 = GetVolEnvName(icount, 5);
     674           4 :    TString volEnv12 = GetVolEnvName(icount, 12);
     675           4 :    TString volEnv14 = GetVolEnvName(icount, 14);
     676          12 :    TString volAlu = GetVolumeName("volAlu", icount);
     677             : 
     678          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv3, detElemId, true,
     679           4 :    TGeoTranslation(xEnv,-yEnvM,fgkZm));   
     680           4 :    detElemId = (10+icount+1)*100+1;
     681          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv5, detElemId, true, 
     682           4 :    TGeoTranslation( xEnv, yEnvM,fgkZm));
     683           4 :    detElemId = (10+icount+1)*100+10;
     684          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv12, detElemId, true,
     685           4 :    TGeoTranslation(-xEnv,-yEnvP,fgkZp),
     686           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     687           4 :    detElemId = (10+icount+1)*100+8;
     688          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv14, detElemId, true, 
     689           4 :    TGeoTranslation(-xEnv, yEnvP,fgkZp),
     690           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     691             : 
     692          12 :    GetEnvelopes(16+icount)
     693           8 :    ->AddEnvelopeConstituentParam(volAlu,volEnv3,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
     694          12 :    GetEnvelopes(16+icount)
     695           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv5,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
     696          12 :    GetEnvelopes(16+icount)
     697           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv12,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
     698          12 :    GetEnvelopes(16+icount)
     699           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv14,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
     700             : 
     701             : // chamber type C (note: same Z than type B)
     702           4 :    dpar[0] = (fgkXMAX/2)*zRatio;
     703           4 :    dpar[1] = (fgkYMAX/2)*zRatio;
     704             :    xpos = 0.;   
     705           4 :    ypos = ((fgkYMAX - fgkYMIN)/2.) * zRatio;
     706             : 
     707          12 :    GetEnvelopes(16+icount)
     708           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv3,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
     709          12 :    GetEnvelopes(16+icount)
     710           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv5,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
     711          12 :    GetEnvelopes(16+icount)
     712           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv12,iVolNum++,TGeoTranslation(xpos,-ypos,0.),3,dpar);
     713          12 :    GetEnvelopes(16+icount)
     714           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv14,iVolNum++,TGeoTranslation(xpos, ypos,0.),3,dpar);
     715             : 
     716             : // horizontal cable support chamber type B+C
     717             : 
     718           4 :    char volEnvSupportHBC[12][8];
     719          24 :    for(Int_t jj=0;jj<2;jj++){
     720         112 :      for(Int_t ii=0;ii<6;ii++){
     721          48 :        snprintf(volEnvSupportHBC[6*jj+ii],8,"SA%dHB%d",icount+1,6*jj+ii);
     722             :      }
     723             :    }
     724             :       
     725           4 :    spar[0]=dpar[0]-fgkYVSup[0]/2.;
     726           4 :    spar[1]=fgkSizeSupportCable[1];
     727           4 :    spar[2]=fgkSizeSupportCable[2];
     728          32 :    for(Int_t in=0;in<3;in++){
     729          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in], 0, true, 
     730          24 :      TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvM+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1)),
     731          12 :      fgkSizeVSupExt[0]+spar[2]));
     732          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in+3], 0, true, 
     733          12 :      TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio, yEnvM+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1),
     734          12 :      fgkSizeVSupExt[0]+spar[2]));
     735          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in+6], 0, true, 
     736          24 :      TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),-(yEnvP+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1)),
     737          12 :      -(fgkSizeVSupExt[0]+spar[2])),
     738          12 :      TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     739          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHBC[in+9], 0, true, 
     740          12 :      TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio), yEnvP+(fgkYMAX-fgkYMIN/2.*zRatio)/2.*(in-1),
     741          12 :      -(fgkSizeVSupExt[0]+spar[2])),
     742          12 :      TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     743             :    }
     744         104 :    for(Int_t ii=0;ii<12;ii++) { 
     745         144 :      TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
     746         144 :      GetEnvelopes(16+icount)
     747          96 :    ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHBC[ii],iVolNum++,3, spar);
     748          48 :    }  
     749             : 
     750             : // angular supports chamber type B and C
     751             : // C       
     752             : // 1 vertical
     753           4 :    spar[0]=dpar[0];
     754           4 :    spar[1]=fgkSizeSupport1V[1];
     755           4 :    spar[2]=fgkSizeSupport1V[2];
     756           4 :    Float_t sparysave=spar[1];
     757             : 
     758          20 :    TString volEnvSuppAng1VBC0 = GetVolEnvSuppAngName("1", "V", "B", icount, 0); 
     759          20 :    TString volEnvSuppAng1VBC2 = GetVolEnvSuppAngName("1", "V", "B", icount, 2); 
     760          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC0, 0, true,
     761           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave,fgkZm-dpar[2]-spar[2]));
     762          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC2, 0, true,
     763           4 :    TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave,fgkZp+dpar[2]+spar[2]),
     764           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     765             :    
     766          16 :    TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
     767           8 :    GetEnvelopes(16+icount)
     768           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC0,iVolNum++,3, spar);
     769           8 :    GetEnvelopes(16+icount)
     770           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC2,iVolNum++,3, spar);
     771             : 
     772             : // 1 horizontal
     773           4 :    spar[0]=dpar[0];
     774           4 :    spar[1]=fgkSizeSupport1H[1];
     775           4 :    spar[2]=fgkSizeSupport1H[2];
     776             :    
     777          20 :    TString volEnvSuppAng1HBC0 = GetVolEnvSuppAngName("1", "H", "B", icount, 0);
     778          20 :    TString volEnvSuppAng1HBC2 = GetVolEnvSuppAngName("1", "H", "B", icount, 2);
     779          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC0, 0, true,
     780           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave-sparysave,fgkZm-(dpar[2]-spar[2])));
     781          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC2, 0, true, 
     782           4 :    TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave-sparysave,fgkZp+dpar[2]-spar[2]),
     783           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     784             : 
     785          16 :    TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
     786           8 :    GetEnvelopes(16+icount)
     787           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC0,iVolNum++,3, spar);
     788           8 :    GetEnvelopes(16+icount)
     789           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC2,iVolNum++,3, spar);   
     790             : 
     791             : // gas pipe (low)
     792           4 :    ppar[0]=fgkSizeGasPipe[0];
     793           4 :    ppar[1]=fgkSizeGasPipe[1];
     794           4 :    ppar[2]=dpar[0];
     795          16 :    TString volEnvInoxGasPipe1BC0 = GetVolEnvInoxGasPipeName("1", "BC", icount, 0);
     796          16 :    TString volEnvInoxGasPipe1BC2 = GetVolEnvInoxGasPipeName("1", "BC", icount, 2);
     797          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC0, 0, true,
     798           8 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
     799          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC2, 0, true,
     800           4 :    TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
     801          12 :    TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
     802           8 :    GetEnvelopes(16+icount)
     803           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC0,iVolNum++,3, ppar);
     804           8 :    GetEnvelopes(16+icount)
     805           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC2,iVolNum++,3, ppar);
     806             : 
     807             : // 2 vertical      
     808           4 :    spar[0]=dpar[0];
     809           4 :    spar[1]=fgkSizeSupport2V[1];
     810           4 :    spar[2]=fgkSizeSupport2V[2];
     811           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
     812          20 :    TString volEnvSuppAng2VBC0 = GetVolEnvSuppAngName("2", "V", "B", icount, 0);
     813          20 :    TString volEnvSuppAng2VBC2 = GetVolEnvSuppAngName("2", "V", "B", icount, 2);
     814          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC0, 0, true,
     815           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
     816          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC2, 0, true, 
     817           4 :    TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave,fgkSizeVSupExt[0]+spar[2]),
     818           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     819             :    
     820          16 :    TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
     821           8 :    GetEnvelopes(16+icount)
     822           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC0,iVolNum++,3, spar);   
     823           8 :    GetEnvelopes(16+icount)
     824           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC2,iVolNum++,3, spar);   
     825             : 
     826             : // 2 horizontal    
     827           4 :    spar[0]=dpar[0];
     828           4 :    spar[1]=fgkSizeSupport2H[1];
     829           4 :    spar[2]=fgkSizeSupport2H[2];
     830          20 :    TString volEnvSuppAng2HBC0 = GetVolEnvSuppAngName("2", "H", "B", icount, 0);
     831          20 :    TString volEnvSuppAng2HBC2 = GetVolEnvSuppAngName("2", "H", "B", icount, 2);
     832          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC0, 0, true,
     833           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-fDYsave-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
     834          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC2, 0, true, 
     835           4 :    TGeoTranslation(-xEnv,-yEnvP-dpar[1]-fDYsave-sparysave,fgkSizeVSupExt[0]+spar[2]),
     836           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     837             : 
     838          16 :    TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
     839           8 :    GetEnvelopes(16+icount)
     840           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC0,iVolNum++,3, spar);   
     841           8 :    GetEnvelopes(16+icount)
     842           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC2,iVolNum++,3, spar);   
     843             : 
     844             : // 3 vertical
     845           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
     846           4 :    spar[1]=fgkSizeSupport1V[1];
     847           4 :    spar[2]=fgkSizeSupport1V[2];
     848           4 :    sparysave=spar[1];
     849          20 :    TString volEnvSuppAng3VBC0 = GetVolEnvSuppAngName("3", "V", "B", icount, 0);
     850          20 :    TString volEnvSuppAng3VBC2 = GetVolEnvSuppAngName("3", "V", "B", icount, 2);
     851          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC0, 0, true,
     852           4 :    TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave,fgkZm-dpar[2]-spar[2]));
     853          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC2, 0, true, 
     854           4 :    TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave,fgkZp+dpar[2]+spar[2]),
     855           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     856             :    
     857          16 :    TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
     858           8 :    GetEnvelopes(16+icount)
     859           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC0,iVolNum++,3, spar);
     860           8 :    GetEnvelopes(16+icount)
     861           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC2,iVolNum++,3, spar);
     862             : 
     863             : // 3 horizontal
     864           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
     865           4 :    spar[1]=fgkSizeSupport1H[1];
     866           4 :    spar[2]=fgkSizeSupport1H[2];
     867          20 :    TString volEnvSuppAng3HBC0 = GetVolEnvSuppAngName("3", "H", "B", icount, 0);
     868          20 :    TString volEnvSuppAng3HBC2 = GetVolEnvSuppAngName("3", "H", "B", icount, 2);
     869          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC0, 0, true,
     870           4 :    TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave+sparysave,fgkZm-(dpar[2]-spar[2])));
     871          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC2, 0, true, 
     872           4 :    TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave+sparysave,fgkZp+dpar[2]-spar[2]),
     873           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     874             : 
     875          16 :    TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
     876           8 :    GetEnvelopes(16+icount)
     877           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC0,iVolNum++,3, spar);
     878           8 :    GetEnvelopes(16+icount)
     879           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC2,iVolNum++,3, spar);   
     880             :        
     881             : // gas pipe (high)
     882           4 :    ppar[0]=fgkSizeGasPipe[0];
     883           4 :    ppar[1]=fgkSizeGasPipe[1];
     884           4 :    ppar[2]=fDXsave-fgkAvoidExtrusion;
     885          16 :    TString volEnvInoxGasPipe2BC0 = GetVolEnvInoxGasPipeName("2", "BC", icount, 0);
     886          16 :    TString volEnvInoxGasPipe2BC2 = GetVolEnvInoxGasPipeName("2", "BC", icount, 2);
     887          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC0, 0, true,
     888           4 :    TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZm),
     889             :    fRsupportpipe);
     890          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC2, 0, true,
     891           4 :    TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZp),
     892             :    fRsupportpipe);
     893           8 :    GetEnvelopes(16+icount)
     894           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC0,iVolNum++,3, ppar);
     895           8 :    GetEnvelopes(16+icount)
     896           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC2,iVolNum++,3, ppar);
     897             : 
     898             : // 4 vertical      
     899           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
     900           4 :    spar[1]=fgkSizeSupport2V[1];
     901           4 :    spar[2]=fgkSizeSupport2V[2];
     902           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
     903          20 :    TString volEnvSuppAng4VBC0 = GetVolEnvSuppAngName("4", "V", "B", icount, 0);
     904          20 :    TString volEnvSuppAng4VBC2 = GetVolEnvSuppAngName("4", "V", "B", icount, 2);
     905          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC0, 0, true,
     906           4 :    TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
     907          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC2, 0, true, 
     908           4 :    TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave,fgkSizeVSupExt[0]+spar[2]),
     909           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     910             :    
     911          16 :    TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
     912           8 :    GetEnvelopes(16+icount)
     913           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC0,iVolNum++,3, spar);   
     914           8 :    GetEnvelopes(16+icount)
     915           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC2,iVolNum++,3, spar);   
     916             : 
     917             : // 4 horizontal    
     918           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
     919           4 :    spar[1]=fgkSizeSupport2H[1];
     920           4 :    spar[2]=fgkSizeSupport2H[2];
     921          20 :    TString volEnvSuppAng4HBC0 = GetVolEnvSuppAngName("4", "H", "B", icount, 0);
     922          20 :    TString volEnvSuppAng4HBC2 = GetVolEnvSuppAngName("4", "H", "B", icount, 2);
     923          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC0, 0, true,
     924           4 :    TGeoTranslation(xEnv+xpossave,-yEnvM+dpar[1]+fDYsave+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
     925          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC2, 0, true, 
     926           4 :    TGeoTranslation(-xEnv-xpossave,-yEnvP+dpar[1]+fDYsave+sparysave,fgkSizeVSupExt[0]+spar[2]),
     927           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     928             : 
     929          16 :    TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
     930           8 :    GetEnvelopes(16+icount)
     931           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC0,iVolNum++,3, spar);   
     932           8 :    GetEnvelopes(16+icount)
     933           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC2,iVolNum++,3, spar);   
     934             : 
     935             : // X horizontal    
     936           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
     937           4 :    spar[1]=fgkSizeSupportXH[1];
     938           4 :    spar[2]=fgkSizeSupportXH[2];
     939           4 :    Float_t sparysavex=spar[1];
     940          20 :    TString volEnvSuppAngXHBC0 = GetVolEnvSuppAngName("X", "H", "B", icount, 0);
     941          20 :    TString volEnvSuppAngXHBC2 = GetVolEnvSuppAngName("X", "H", "B", icount, 2);
     942          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC0, 0, true,
     943           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvM+dpar[1]+fDYsave+sparysave+1.0,
     944           4 :    -(fgkSizeVSupExt[0]+spar[2])));
     945          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC2, 0, true, 
     946           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvP+dpar[1]+fDYsave+sparysave+1.0,
     947           4 :    fgkSizeVSupExt[0]+spar[2]),
     948           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     949             : 
     950          16 :    TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
     951           8 :    GetEnvelopes(16+icount)
     952           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC0,iVolNum++,3, spar);   
     953           8 :    GetEnvelopes(16+icount)
     954           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC2,iVolNum++,3, spar);   
     955             : // X vertical      
     956           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
     957           4 :    spar[1]=fgkSizeSupportXV[1];
     958           4 :    spar[2]=fgkSizeSupportXV[2];
     959          20 :    TString volEnvSuppAngXVBC0 = GetVolEnvSuppAngName("X", "V", "B", icount, 0);
     960          20 :    TString volEnvSuppAngXVBC2 = GetVolEnvSuppAngName("X", "V", "B", icount, 2);
     961          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC0, 0, true, 
     962           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,
     963           4 :    -yEnvM+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],
     964           4 :    -(fgkSizeVSupExt[0]+spar[2])));
     965          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC2, 0, true, 
     966           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),
     967           4 :    -yEnvP+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],
     968           4 :    fgkSizeVSupExt[0]+spar[2]),
     969           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     970             : 
     971          16 :    TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
     972           8 :    GetEnvelopes(16+icount)
     973           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC0,iVolNum++,3, spar);   
     974           8 :    GetEnvelopes(16+icount)
     975           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC2,iVolNum++,3, spar);   
     976             : 
     977             : // B
     978             : // 1 vertical
     979           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
     980           4 :    spar[1]=fgkSizeSupport1V[1];
     981           4 :    spar[2]=fgkSizeSupport1V[2];
     982           4 :    sparysave=spar[1];
     983          20 :    TString volEnvSuppAng1VBC1 = GetVolEnvSuppAngName("1", "V", "B", icount, 1);
     984          20 :    TString volEnvSuppAng1VBC3 = GetVolEnvSuppAngName("1", "V", "B", icount, 3);
     985          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC1, 0, true,
     986           4 :    TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave,fgkZm-dpar[2]-spar[2]));
     987          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VBC3, 0, true, 
     988           4 :    TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave,fgkZp+dpar[2]+spar[2]),
     989           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
     990             :    //TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
     991           8 :    GetEnvelopes(16+icount)
     992           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC1,iVolNum++,3, spar);
     993           8 :    GetEnvelopes(16+icount)
     994           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VBC3,iVolNum++,3, spar);
     995             : 
     996             : 
     997             : // 1 horizontal
     998           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
     999           4 :    spar[1]=fgkSizeSupport1H[1];
    1000           4 :    spar[2]=fgkSizeSupport1H[2];
    1001             :    
    1002          20 :    TString volEnvSuppAng1HBC1 = GetVolEnvSuppAngName("1", "H", "B", icount, 1);
    1003          20 :    TString volEnvSuppAng1HBC3 = GetVolEnvSuppAngName("1", "H", "B", icount, 3);
    1004          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC1, 0, true,
    1005           4 :    TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave-sparysave,fgkZm-(dpar[2]-spar[2])));
    1006          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HBC3, 0, true, 
    1007           4 :    TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave-sparysave,fgkZp+dpar[2]-spar[2]),
    1008           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1009             : 
    1010             :    //TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
    1011           8 :    GetEnvelopes(16+icount)
    1012           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC1,iVolNum++,3, spar);
    1013           8 :    GetEnvelopes(16+icount)
    1014           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HBC3,iVolNum++,3, spar);   
    1015             : 
    1016             : // gas pipe (low)
    1017           4 :    ppar[0]=fgkSizeGasPipe[0];
    1018           4 :    ppar[1]=fgkSizeGasPipe[1];
    1019           4 :    ppar[2]=fDXsave-fgkAvoidExtrusion;
    1020          16 :    TString volEnvInoxGasPipe1BC1 = GetVolEnvInoxGasPipeName("1", "BC", icount, 1);
    1021          16 :    TString volEnvInoxGasPipe1BC3 = GetVolEnvInoxGasPipeName("1", "BC", icount, 3);
    1022          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC1, 0, true,
    1023           4 :    TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZm),
    1024             :    fRsupportpipe);
    1025          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1BC3, 0, true,
    1026           4 :    TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave-sparysave-fgkOffsetGasPipe,fgkZp),
    1027             :    fRsupportpipe);
    1028           8 :    GetEnvelopes(16+icount)
    1029           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC1,iVolNum++,3, ppar);
    1030           8 :    GetEnvelopes(16+icount)
    1031           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1BC3,iVolNum++,3, ppar);
    1032             : 
    1033             : // 2 vertical      
    1034           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
    1035           4 :    spar[1]=fgkSizeSupport2V[1];
    1036           4 :    spar[2]=fgkSizeSupport2V[2];
    1037           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    1038          20 :    TString volEnvSuppAng2VBC1 = GetVolEnvSuppAngName("2", "V", "B", icount, 1);
    1039          20 :    TString volEnvSuppAng2VBC3 = GetVolEnvSuppAngName("2", "V", "B", icount, 3);
    1040          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC1, 0, true,
    1041           4 :    TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
    1042          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VBC3, 0, true, 
    1043           4 :    TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave,fgkSizeVSupExt[0]+spar[2]),
    1044           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1045             :    
    1046             :    //TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
    1047           8 :    GetEnvelopes(16+icount)
    1048           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC1,iVolNum++,3, spar);   
    1049           8 :    GetEnvelopes(16+icount)
    1050           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VBC3,iVolNum++,3, spar);   
    1051             : // 2 horizontal    
    1052           4 :    spar[0]=fDXsave-fgkAvoidExtrusion;
    1053           4 :    spar[1]=fgkSizeSupport2H[1];
    1054           4 :    spar[2]=fgkSizeSupport2H[2];
    1055          20 :    TString volEnvSuppAng2HBC1 = GetVolEnvSuppAngName("2", "H", "B", icount, 1);
    1056          20 :    TString volEnvSuppAng2HBC3 = GetVolEnvSuppAngName("2", "H", "B", icount, 3);
    1057          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC1, 0, true,
    1058           4 :    TGeoTranslation(xEnv+xpossave,yEnvM-dpar[1]-fDYsave-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
    1059          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HBC3, 0, true, 
    1060           4 :    TGeoTranslation(-xEnv-xpossave,yEnvP-dpar[1]-fDYsave-sparysave,fgkSizeVSupExt[0]+spar[2]),
    1061           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1062             : 
    1063             :    //TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
    1064           8 :    GetEnvelopes(16+icount)
    1065           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC1,iVolNum++,3, spar);   
    1066           8 :    GetEnvelopes(16+icount)
    1067           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HBC3,iVolNum++,3, spar);   
    1068             : 
    1069             : // 3 vertical
    1070           4 :    spar[0]=dpar[0];
    1071           4 :    spar[1]=fgkSizeSupport1V[1];
    1072           4 :    spar[2]=fgkSizeSupport1V[2];
    1073           4 :    sparysave=spar[1];
    1074          20 :    TString volEnvSuppAng3VBC1 = GetVolEnvSuppAngName("3", "V", "B", icount, 1);
    1075          20 :    TString volEnvSuppAng3VBC3 = GetVolEnvSuppAngName("3", "V", "B", icount, 3);
    1076          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC1, 0, true,
    1077           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave,fgkZm-dpar[2]-spar[2]));
    1078          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VBC3, 0, true,
    1079           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave,fgkZp+dpar[2]+spar[2]),
    1080           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1081             : 
    1082             :    //TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
    1083           8 :    GetEnvelopes(16+icount)
    1084           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC1,iVolNum++,3, spar);
    1085           8 :    GetEnvelopes(16+icount)
    1086           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VBC3,iVolNum++,3, spar);
    1087             : 
    1088             : // 3 horizontal
    1089           4 :    spar[1]=fgkSizeSupport1H[1];
    1090           4 :    spar[2]=fgkSizeSupport1H[2];
    1091             :    
    1092          20 :    TString volEnvSuppAng3HBC1 = GetVolEnvSuppAngName("3", "H", "B", icount, 1);
    1093          20 :    TString volEnvSuppAng3HBC3 = GetVolEnvSuppAngName("3", "H", "B", icount, 3);
    1094          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC1, 0, true,
    1095           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave+sparysave,fgkZm-(dpar[2]-spar[2])));
    1096          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HBC3, 0, true, 
    1097           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave+sparysave,fgkZp+dpar[2]-spar[2]),
    1098           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1099             : 
    1100           8 :    GetEnvelopes(16+icount)
    1101           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC1,iVolNum++,3, spar);
    1102           8 :    GetEnvelopes(16+icount)
    1103           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HBC3,iVolNum++,3, spar);   
    1104             : 
    1105             : // gas pipe (high)
    1106           4 :    ppar[0]=fgkSizeGasPipe[0];
    1107           4 :    ppar[1]=fgkSizeGasPipe[1];
    1108           4 :    ppar[2]=dpar[0];
    1109          16 :    TString volEnvInoxGasPipe2BC1 = GetVolEnvInoxGasPipeName("2", "BC", icount, 1);
    1110          16 :    TString volEnvInoxGasPipe2BC3 = GetVolEnvInoxGasPipeName("2", "BC", icount, 3);
    1111          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC1, 0, true,
    1112           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1113          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2BC3, 0, true,
    1114           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1115           8 :    GetEnvelopes(16+icount)
    1116           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC1,iVolNum++,3, ppar);
    1117           8 :    GetEnvelopes(16+icount)
    1118           4 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2BC3,iVolNum++,3, ppar);
    1119             : 
    1120             : // 4 vertical      
    1121           4 :    spar[0]=dpar[0];
    1122           4 :    spar[1]=fgkSizeSupport2V[1];
    1123           4 :    spar[2]=fgkSizeSupport2V[2];
    1124           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    1125          20 :    TString volEnvSuppAng4VBC1 = GetVolEnvSuppAngName("4", "V", "B", icount, 1);
    1126          20 :    TString volEnvSuppAng4VBC3 = GetVolEnvSuppAngName("4", "V", "B", icount, 3);
    1127          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC1, 0, true,
    1128           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave,-(fgkSizeVSupExt[0]+spar[2])));
    1129          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VBC3, 0, true, 
    1130           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave,fgkSizeVSupExt[0]+spar[2]),
    1131           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1132             :    
    1133           8 :    GetEnvelopes(16+icount)
    1134           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC1,iVolNum++,3, spar);   
    1135           8 :    GetEnvelopes(16+icount)
    1136           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VBC3,iVolNum++,3, spar);   
    1137             : 
    1138             : // 4 horizontal    
    1139           4 :    spar[1]=fgkSizeSupport2H[1];
    1140           4 :    spar[2]=fgkSizeSupport2H[2];
    1141          20 :    TString volEnvSuppAng4HBC1 = GetVolEnvSuppAngName("4", "H", "B", icount, 1);
    1142          20 :    TString volEnvSuppAng4HBC3 = GetVolEnvSuppAngName("4", "H", "B", icount, 3);
    1143          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC1, 0, true,
    1144           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+fDYsave+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
    1145          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HBC3, 0, true, 
    1146           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1]+fDYsave+sparysave,fgkSizeVSupExt[0]+spar[2]),
    1147           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1148             : 
    1149           8 :    GetEnvelopes(16+icount)
    1150           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC1,iVolNum++,3, spar);   
    1151           8 :    GetEnvelopes(16+icount)
    1152           4 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HBC3,iVolNum++,3, spar);   
    1153             : 
    1154             : // X horizontal    
    1155           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    1156           4 :    spar[1]=fgkSizeSupportXH[1];
    1157           4 :    spar[2]=fgkSizeSupportXH[2];
    1158           4 :    sparysavex=spar[1];
    1159          20 :    TString volEnvSuppAngXHBC1 = GetVolEnvSuppAngName("X", "H", "B", icount, 1);
    1160          20 :    TString volEnvSuppAngXHBC3 = GetVolEnvSuppAngName("X", "H", "B", icount, 3);
    1161          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC1, 0, true,
    1162           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvM+dpar[1]+fDYsave+sparysave+1.0,
    1163           4 :    -(fgkSizeVSupExt[0]+spar[2])));
    1164          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHBC3, 0, true, 
    1165           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvP+dpar[1]+fDYsave+sparysave+1.0,
    1166           4 :    fgkSizeVSupExt[0]+spar[2]),
    1167           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1168             : 
    1169           8 :    GetEnvelopes(16+icount)
    1170           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC1,iVolNum++,3, spar);   
    1171           8 :    GetEnvelopes(16+icount)
    1172           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHBC3,iVolNum++,3, spar);   
    1173             : 
    1174             : // X vertical      
    1175           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    1176           4 :    spar[1]=fgkSizeSupportXV[1];
    1177           4 :    spar[2]=fgkSizeSupportXV[2];
    1178          20 :    TString volEnvSuppAngXVBC1 = GetVolEnvSuppAngName("X", "V", "B", icount, 1);
    1179          20 :    TString volEnvSuppAngXVBC3 = GetVolEnvSuppAngName("X", "V", "B", icount, 3);
    1180          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC1, 0, true, 
    1181           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,
    1182           4 :    yEnvM+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],-(fgkSizeVSupExt[0]+spar[2])));
    1183          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVBC3, 0, true, 
    1184           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),
    1185           4 :    yEnvP+dpar[1]+fDYsave+sparysave+1.0+sparysavex+spar[1],fgkSizeVSupExt[0]+spar[2]),
    1186           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1187             : 
    1188           8 :    GetEnvelopes(16+icount)
    1189           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC1,iVolNum++,3, spar);   
    1190           8 :    GetEnvelopes(16+icount)
    1191           4 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVBC3,iVolNum++,3, spar);   
    1192             : 
    1193             :    // keep values of yEnvP, yEnvM
    1194           4 :    fYEnvPsave = yEnvP;
    1195           4 :    fYEnvMsave = yEnvM;     
    1196           4 : }
    1197             : 
    1198             : //______________________________________________________________________________
    1199             : void AliMUONTriggerGeometryBuilder::BuildChamberTypeD(Int_t& iVolNum, Int_t icount)
    1200             : {
    1201             : // ratio of zpos1m/zpos1p and inverse for first plane
    1202           8 :     Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
    1203           4 :     Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
    1204           4 :     Float_t zpm=1./zmp;
    1205           4 :     Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
    1206           4 :     Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
    1207             : 
    1208           4 :    Double_t dpar[3];    
    1209           4 :    Double_t spar[3];    
    1210           4 :    Double_t ppar[3];    
    1211             : 
    1212             : // D   
    1213             :    Float_t yEnvP = 0;
    1214             :    Float_t yEnvM = 0;
    1215           4 :    yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
    1216           4 :    yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
    1217           4 :    dpar[0] = (fgkXMAX/2.)*zRatio;
    1218           4 :    dpar[1] =  fgkYMIN*zRatio;
    1219           4 :    dpar[2] = 0.4;   
    1220             : 
    1221           4 :    Int_t detElemId = (10+icount+1)*100+16;   
    1222           4 :    TString volEnv2 = GetVolEnvName(icount, 2);
    1223           4 :    TString volEnv6 = GetVolEnvName(icount, 6);
    1224           4 :    TString volEnv11 = GetVolEnvName(icount, 11);
    1225           4 :    TString volEnv15 = GetVolEnvName(icount, 15);
    1226          12 :    TString volAlu = GetVolumeName("volAlu", icount);
    1227             : 
    1228          12 :    GetEnvelopes(16+icount)
    1229           4 :    ->AddEnvelope(volEnv2, detElemId, true, TGeoTranslation(xEnv,-yEnvP,fgkZp));
    1230           4 :    detElemId = (10+icount+1)*100+2;
    1231          12 :    GetEnvelopes(16+icount)
    1232           4 :    ->AddEnvelope(volEnv6, detElemId, true, TGeoTranslation(xEnv, yEnvP,fgkZp));
    1233           4 :    detElemId = (10+icount+1)*100+11;
    1234          12 :    GetEnvelopes(16+icount)
    1235           4 :    ->AddEnvelope(volEnv11, detElemId, true, TGeoTranslation(-xEnv,-yEnvM,fgkZm),
    1236           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1237           4 :    detElemId = (10+icount+1)*100+7;
    1238          12 :    GetEnvelopes(16+icount)
    1239           4 :    ->AddEnvelope(volEnv15, detElemId, true, TGeoTranslation(-xEnv, yEnvM,fgkZm),
    1240           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1241             : 
    1242           8 :    GetEnvelopes(16+icount)
    1243           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv2,iVolNum++,3, dpar);
    1244           8 :    GetEnvelopes(16+icount)
    1245           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv6,iVolNum++,3, dpar);
    1246           8 :    GetEnvelopes(16+icount)
    1247           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv11,iVolNum++,3, dpar);
    1248           8 :    GetEnvelopes(16+icount)
    1249           4 :    ->AddEnvelopeConstituentParam(volAlu,volEnv15,iVolNum++,3, dpar);
    1250             : 
    1251             : // horizontal cable support chamber type D
    1252             : 
    1253           4 :    char volEnvSupportHD[12][8];
    1254          24 :    for(Int_t jj=0;jj<2;jj++){
    1255         112 :      for(Int_t ii=0;ii<6;ii++){
    1256          48 :        snprintf(volEnvSupportHD[6*jj+ii],8,"SA%dHD%d",icount+1,6*jj+ii);
    1257             :      }
    1258             :    }
    1259             :       
    1260           4 :    spar[0]=dpar[0]-(fgkYVSup[0]/2.)*zRatio;
    1261           4 :    spar[1]=fgkSizeSupportCable[1];
    1262           4 :    spar[2]=fgkSizeSupportCable[2];
    1263          32 :    for(Int_t in=0;in<3;in++){
    1264          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in], 0, true,
    1265          24 :       TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvP+dpar[1]/2.*(in-1)),
    1266          12 :       -(fgkSizeVSupExt[0]+spar[2])));
    1267          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in+3], 0, true, 
    1268          24 :      TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio, yEnvP+dpar[1]/2.*(in-1),
    1269          12 :      -(fgkSizeVSupExt[0]+spar[2])));
    1270          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in+6], 0, true, 
    1271          24 :      TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),-(yEnvM+dpar[1]/2.*(in-1)),
    1272          24 :      fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1273          48 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHD[in+9], 0, true, 
    1274          24 :      TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),yEnvM+dpar[1]/2.*(in-1),
    1275          24 :      fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1276             :    }
    1277         104 :    for(Int_t ii=0;ii<12;ii++) { 
    1278         144 :      TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
    1279         144 :      GetEnvelopes(16+icount)
    1280          96 :      ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHD[ii],iVolNum++,3, spar);
    1281          48 :    }  
    1282             :    
    1283             : // angular supports chamber type D
    1284             : // 1 vertical      
    1285             :  
    1286           4 :    spar[0]=dpar[0];
    1287           4 :    spar[1]=fgkSizeSupport1V[1];
    1288           4 :    spar[2]=fgkSizeSupport1V[2];
    1289           4 :    Double_t sparysave=spar[1];
    1290             :    
    1291          36 :    TString volEnvSuppAng1VD[4];
    1292          24 :    volEnvSuppAng1VD[0] =  GetVolEnvSuppAngName("1", "V", "D", icount, 0);
    1293          24 :    volEnvSuppAng1VD[1] =  GetVolEnvSuppAngName("1", "V", "D", icount, 1);
    1294          24 :    volEnvSuppAng1VD[2] =  GetVolEnvSuppAngName("1", "V", "D", icount, 2);
    1295          24 :    volEnvSuppAng1VD[3] =  GetVolEnvSuppAngName("1", "V", "D", icount, 3);
    1296             :    
    1297          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[0], 0, true,
    1298           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
    1299          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[1], 0, true,
    1300           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
    1301          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[2], 0, true,
    1302           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
    1303           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1304          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VD[3], 0, true,
    1305           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
    1306           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1307             : 
    1308             :        
    1309          16 :    TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
    1310          40 :    for (Int_t i=0;i<4;i++) 
    1311          32 :    GetEnvelopes(16+icount)
    1312          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VD[i],iVolNum++,3, spar);
    1313             : 
    1314             : 
    1315             : // 1 horizontal    
    1316             :  
    1317           4 :    spar[0]=dpar[0];
    1318           4 :    spar[1]=fgkSizeSupport1H[1];
    1319           4 :    spar[2]=fgkSizeSupport1H[2];
    1320             : 
    1321          36 :    TString volEnvSuppAng1HD[4];
    1322          24 :    volEnvSuppAng1HD[0] =  GetVolEnvSuppAngName("1", "H", "D", icount, 0);
    1323          24 :    volEnvSuppAng1HD[1] =  GetVolEnvSuppAngName("1", "H", "D", icount, 1);
    1324          24 :    volEnvSuppAng1HD[2] =  GetVolEnvSuppAngName("1", "H", "D", icount, 2);
    1325          24 :    volEnvSuppAng1HD[3] =  GetVolEnvSuppAngName("1", "H", "D", icount, 3);
    1326             :    
    1327          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[0], 0, true,
    1328           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
    1329          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[1], 0, true,
    1330           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
    1331          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[2], 0, true, 
    1332           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
    1333           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1334          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HD[3], 0, true, 
    1335           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
    1336           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1337             : 
    1338          16 :    TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
    1339          40 :    for (Int_t i=0;i<4;i++)
    1340          32 :    GetEnvelopes(16+icount)
    1341          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HD[i],iVolNum++,3, spar);
    1342             : 
    1343             : // gas pipe (low)
    1344           4 :    ppar[0]=fgkSizeGasPipe[0];
    1345           4 :    ppar[1]=fgkSizeGasPipe[1];
    1346           4 :    ppar[2]=dpar[0];
    1347          36 :    TString volEnvInoxGasPipe1D[4];
    1348          20 :    volEnvInoxGasPipe1D[0] = GetVolEnvInoxGasPipeName("1", "D", icount, 0);
    1349          20 :    volEnvInoxGasPipe1D[1] = GetVolEnvInoxGasPipeName("1", "D", icount, 1);
    1350          20 :    volEnvInoxGasPipe1D[2] = GetVolEnvInoxGasPipeName("1", "D", icount, 2);
    1351          20 :    volEnvInoxGasPipe1D[3] = GetVolEnvInoxGasPipeName("1", "D", icount, 3);
    1352          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[0], 0, true,
    1353           8 :    TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1354          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[1], 0, true,
    1355           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1356          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[2], 0, true,
    1357           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1358          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1D[3], 0, true,
    1359           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1360             : 
    1361          12 :    TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
    1362          40 :    for (Int_t i=0;i<4;i++)
    1363          32 :    GetEnvelopes(16+icount)
    1364          16 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1D[i],iVolNum++,3, ppar);
    1365             : 
    1366             : // 2 vertical      
    1367             :  
    1368           4 :    spar[0]=dpar[0];
    1369           4 :    spar[1]=fgkSizeSupport2V[1];
    1370           4 :    spar[2]=fgkSizeSupport2V[2];
    1371           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    1372          36 :    TString volEnvSuppAng2VD[4];
    1373          24 :    volEnvSuppAng2VD[0] =  GetVolEnvSuppAngName("2", "V", "D", icount, 0);
    1374          24 :    volEnvSuppAng2VD[1] =  GetVolEnvSuppAngName("2", "V", "D", icount, 1);
    1375          24 :    volEnvSuppAng2VD[2] =  GetVolEnvSuppAngName("2", "V", "D", icount, 2);
    1376          24 :    volEnvSuppAng2VD[3] =  GetVolEnvSuppAngName("2", "V", "D", icount, 3);
    1377             :    
    1378          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[0], 0, true,
    1379           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
    1380          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[1], 0, true,
    1381           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
    1382          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[2], 0, true,
    1383           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
    1384           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1385          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VD[3], 0, true,
    1386           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
    1387           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1388             :    
    1389          16 :    TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
    1390          40 :    for (Int_t i=0;i<4;i++)
    1391          32 :    GetEnvelopes(16+icount)
    1392          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VD[i],iVolNum++,3, spar);   
    1393             : 
    1394             : // 2 horizontal    
    1395             :  
    1396           4 :    spar[0]=dpar[0];
    1397           4 :    spar[1]=fgkSizeSupport2H[1];
    1398           4 :    spar[2]=fgkSizeSupport2H[2];
    1399          36 :    TString volEnvSuppAng2HD[4];
    1400          24 :    volEnvSuppAng2HD[0] =  GetVolEnvSuppAngName("2", "H", "D", icount, 0);
    1401          24 :    volEnvSuppAng2HD[1] =  GetVolEnvSuppAngName("2", "H", "D", icount, 1);
    1402          24 :    volEnvSuppAng2HD[2] =  GetVolEnvSuppAngName("2", "H", "D", icount, 2);
    1403          24 :    volEnvSuppAng2HD[3] =  GetVolEnvSuppAngName("2", "H", "D", icount, 3);
    1404             :    
    1405          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[0], 0, true,
    1406           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
    1407          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[1], 0, true,
    1408           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
    1409          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[2], 0, true, 
    1410           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    1411           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1412          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HD[3], 0, true, 
    1413           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    1414           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1415             : 
    1416          16 :    TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
    1417          40 :    for (Int_t i=0;i<4;i++)
    1418          32 :    GetEnvelopes(16+icount)
    1419          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HD[i],iVolNum++,3, spar);   
    1420             : 
    1421             : // 3 vertical      
    1422             :  
    1423           4 :    spar[0]=dpar[0];
    1424           4 :    spar[1]=fgkSizeSupport1V[1];
    1425           4 :    spar[2]=fgkSizeSupport1V[2];
    1426           4 :    sparysave=spar[1];
    1427          36 :    TString volEnvSuppAng3VD[4];
    1428          24 :    volEnvSuppAng3VD[0] =  GetVolEnvSuppAngName("3", "V", "D", icount, 0);
    1429          24 :    volEnvSuppAng3VD[1] =  GetVolEnvSuppAngName("3", "V", "D", icount, 1);
    1430          24 :    volEnvSuppAng3VD[2] =  GetVolEnvSuppAngName("3", "V", "D", icount, 2);
    1431          24 :    volEnvSuppAng3VD[3] =  GetVolEnvSuppAngName("3", "V", "D", icount, 3);
    1432             :    
    1433          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[0], 0, true,
    1434           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
    1435          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[1], 0, true,
    1436           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
    1437          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[2], 0, true,
    1438           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
    1439           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1440          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VD[3], 0, true,
    1441           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
    1442           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1443             : 
    1444          16 :    TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
    1445          40 :    for (Int_t i=0;i<4;i++)
    1446          32 :    GetEnvelopes(16+icount)
    1447          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VD[i],iVolNum++,3, spar);
    1448             : 
    1449             : 
    1450             : // 3 horizontal    
    1451             :  
    1452           4 :    spar[0]=dpar[0];
    1453           4 :    spar[1]=fgkSizeSupport1H[1];
    1454           4 :    spar[2]=fgkSizeSupport1H[2];
    1455          36 :    TString volEnvSuppAng3HD[4];
    1456          24 :    volEnvSuppAng3HD[0] =  GetVolEnvSuppAngName("3", "H", "D", icount, 0);
    1457          24 :    volEnvSuppAng3HD[1] =  GetVolEnvSuppAngName("3", "H", "D", icount, 1);
    1458          24 :    volEnvSuppAng3HD[2] =  GetVolEnvSuppAngName("3", "H", "D", icount, 2);
    1459          24 :    volEnvSuppAng3HD[3] =  GetVolEnvSuppAngName("3", "H", "D", icount, 3);
    1460             :    
    1461          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[0], 0, true,
    1462           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
    1463          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[1], 0, true,
    1464           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
    1465          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[2], 0, true,   
    1466           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
    1467           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1468          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HD[3], 0, true, 
    1469           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
    1470           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1471             : 
    1472          16 :    TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
    1473          40 :    for (Int_t i=0;i<4;i++)
    1474          32 :    GetEnvelopes(16+icount)
    1475          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HD[i],iVolNum++,3, spar);
    1476             :        
    1477             : // gas pipe (high)
    1478           4 :    ppar[0]=fgkSizeGasPipe[0];
    1479           4 :    ppar[1]=fgkSizeGasPipe[1];
    1480           4 :    ppar[2]=dpar[0];
    1481          36 :    TString volEnvInoxGasPipe2D[4];
    1482          20 :    volEnvInoxGasPipe2D[0] = GetVolEnvInoxGasPipeName("2", "D", icount, 0);
    1483          20 :    volEnvInoxGasPipe2D[1] = GetVolEnvInoxGasPipeName("2", "D", icount, 1);
    1484          20 :    volEnvInoxGasPipe2D[2] = GetVolEnvInoxGasPipeName("2", "D", icount, 2);
    1485          20 :    volEnvInoxGasPipe2D[3] = GetVolEnvInoxGasPipeName("2", "D", icount, 3);
    1486          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[0], 0, true,
    1487           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1488          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[1], 0, true,
    1489           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1490          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[2], 0, true,
    1491           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1492          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2D[3], 0, true,
    1493           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1494             : 
    1495          40 :    for (Int_t i=0;i<4;i++)
    1496          32 :    GetEnvelopes(16+icount)
    1497          16 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2D[i],iVolNum++,3, ppar);
    1498             : 
    1499             : // 4 vertical      
    1500             :  
    1501           4 :    spar[0]=dpar[0];
    1502           4 :    spar[1]=fgkSizeSupport2V[1];
    1503           4 :    spar[2]=fgkSizeSupport2V[2];
    1504           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    1505          36 :    TString volEnvSuppAng4VD[4];
    1506          24 :    volEnvSuppAng4VD[0] =  GetVolEnvSuppAngName("4", "V", "D", icount, 0);
    1507          24 :    volEnvSuppAng4VD[1] =  GetVolEnvSuppAngName("4", "V", "D", icount, 1);
    1508          24 :    volEnvSuppAng4VD[2] =  GetVolEnvSuppAngName("4", "V", "D", icount, 2);
    1509          24 :    volEnvSuppAng4VD[3] =  GetVolEnvSuppAngName("4", "V", "D", icount, 3);
    1510             :    
    1511          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[0], 0, true,
    1512           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
    1513          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[1], 0, true,
    1514           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
    1515          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[2], 0, true,
    1516           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
    1517           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1518          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VD[3], 0, true,
    1519           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
    1520           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1521             :    
    1522          16 :    TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
    1523          40 :    for (Int_t i=0;i<4;i++)
    1524          32 :    GetEnvelopes(16+icount)
    1525          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VD[i],iVolNum++,3, spar);   
    1526             : 
    1527             : // 4 horizontal    
    1528             :  
    1529           4 :    spar[0]=dpar[0];
    1530           4 :    spar[1]=fgkSizeSupport2H[1];
    1531           4 :    spar[2]=fgkSizeSupport2H[2];
    1532          36 :    TString volEnvSuppAng4HD[4];
    1533          24 :    volEnvSuppAng4HD[0] =  GetVolEnvSuppAngName("4", "H", "D", icount, 0);
    1534          24 :    volEnvSuppAng4HD[1] =  GetVolEnvSuppAngName("4", "H", "D", icount, 1);
    1535          24 :    volEnvSuppAng4HD[2] =  GetVolEnvSuppAngName("4", "H", "D", icount, 2);
    1536          24 :    volEnvSuppAng4HD[3] =  GetVolEnvSuppAngName("4", "H", "D", icount, 3);
    1537             :    
    1538          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[0], 0, true,
    1539           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
    1540          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[1], 0, true,
    1541           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
    1542          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[2], 0, true, 
    1543           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    1544           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1545          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HD[3], 0, true, 
    1546           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    1547           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1548             : 
    1549          16 :    TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
    1550          40 :    for (Int_t i=0;i<4;i++)
    1551          32 :    GetEnvelopes(16+icount)
    1552          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HD[i],iVolNum++,3, spar);   
    1553             : 
    1554             : // X horizontal    
    1555           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    1556           4 :    spar[1]=fgkSizeSupportXH[1];
    1557           4 :    spar[2]=fgkSizeSupportXH[2];
    1558           4 :    Double_t sparysavex=spar[1];
    1559          36 :    TString volEnvSuppAngXHD[4];
    1560          24 :    volEnvSuppAngXHD[0] =  GetVolEnvSuppAngName("X", "H", "D", icount, 0);
    1561          24 :    volEnvSuppAngXHD[1] =  GetVolEnvSuppAngName("X", "H", "D", icount, 1);
    1562          24 :    volEnvSuppAngXHD[2] =  GetVolEnvSuppAngName("X", "H", "D", icount, 2);
    1563          24 :    volEnvSuppAngXHD[3] =  GetVolEnvSuppAngName("X", "H", "D", icount, 3);
    1564             :    
    1565          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[0], 0, true,
    1566           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0,
    1567           4 :    fgkSizeVSupExt[0]+spar[2]));
    1568          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[1], 0, true,
    1569           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0,
    1570           4 :    fgkSizeVSupExt[0]+spar[2]));
    1571          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[2], 0, true,
    1572           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0,
    1573           8 :    -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1574          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHD[3], 0, true, 
    1575           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0,
    1576           8 :    -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1577             : 
    1578          16 :    TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
    1579          40 :    for (Int_t i=0;i<4;i++)
    1580          32 :    GetEnvelopes(16+icount)
    1581          16 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHD[i],iVolNum++,3, spar);   
    1582             : 
    1583             : // X vertical      
    1584           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    1585           4 :    spar[1]=fgkSizeSupportXV[1];
    1586           4 :    spar[2]=fgkSizeSupportXV[2];
    1587          36 :    TString volEnvSuppAngXVD[4];
    1588          24 :    volEnvSuppAngXVD[0] =  GetVolEnvSuppAngName("X", "V", "D", icount, 0);
    1589          24 :    volEnvSuppAngXVD[1] =  GetVolEnvSuppAngName("X", "V", "D", icount, 1);
    1590          24 :    volEnvSuppAngXVD[2] =  GetVolEnvSuppAngName("X", "V", "D", icount, 2);
    1591          24 :    volEnvSuppAngXVD[3] =  GetVolEnvSuppAngName("X", "V", "D", icount, 3);
    1592             :    
    1593          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[0], 0, true, 
    1594           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    1595           4 :    fgkSizeVSupExt[0]+spar[2]));
    1596          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[1], 0, true, 
    1597           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    1598           4 :    fgkSizeVSupExt[0]+spar[2]));
    1599          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[2], 0, true, 
    1600           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    1601           8 :    -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1602          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVD[3], 0, true, 
    1603           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    1604           8 :    -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1605             : 
    1606          16 :    TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
    1607          40 :    for (Int_t i=0;i<4;i++)
    1608          32 :    GetEnvelopes(16+icount)
    1609          16 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVD[i],iVolNum++,3, spar);  
    1610             : 
    1611             :    // keep values of yEnvP, yEnvM
    1612           4 :    fYEnvPsave = yEnvP;
    1613           4 :    fYEnvMsave = yEnvM;   
    1614         244 : }    
    1615             : 
    1616             : //______________________________________________________________________________
    1617             : void AliMUONTriggerGeometryBuilder::BuildChamberTypeE(Int_t& iVolNum, Int_t icount)
    1618             : {
    1619             : // ratio of zpos1m/zpos1p and inverse for first plane
    1620           8 :     Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
    1621           4 :     Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
    1622           4 :     Float_t zpm=1./zmp;
    1623           4 :     Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
    1624           4 :     Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
    1625             :    
    1626           4 :    Double_t dpar[3];    
    1627           4 :    Double_t spar[3];    
    1628           4 :    Double_t ppar[3];    
    1629             : 
    1630             : // E
    1631             :    Float_t yEnvP = 0;
    1632             :    Float_t yEnvM = 0;
    1633           4 :    yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
    1634           4 :    yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
    1635             : 
    1636           4 :    Int_t detElemId = (10+icount+1)*100+15;
    1637           4 :    TString volEnv1 = GetVolEnvName(icount, 1);
    1638           4 :    TString volEnv7 = GetVolEnvName(icount, 7);
    1639           4 :    TString volEnv10 = GetVolEnvName(icount, 10);
    1640           4 :    TString volEnv16 = GetVolEnvName(icount, 16);
    1641          12 :    TString volAlu = GetVolumeName("volAlu", icount);
    1642             : 
    1643          12 :    GetEnvelopes(16+icount)
    1644           4 :    ->AddEnvelope(volEnv1, detElemId, true, TGeoTranslation(xEnv,-yEnvM,fgkZm));
    1645           4 :    detElemId = (10+icount+1)*100+3;
    1646          12 :    GetEnvelopes(16+icount)
    1647           4 :    ->AddEnvelope(volEnv7, detElemId, true, TGeoTranslation(xEnv, yEnvM,fgkZm));
    1648           4 :    detElemId = (10+icount+1)*100+12;
    1649          20 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv10, detElemId, true, TGeoTranslation(-xEnv,-yEnvP,fgkZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1650           4 :    detElemId = (10+icount+1)*100+6;
    1651          20 :    GetEnvelopes(16+icount)->AddEnvelope(volEnv16, detElemId, true, TGeoTranslation(-xEnv, yEnvP,fgkZp),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1652             : 
    1653           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv1,iVolNum++,3,dpar);
    1654           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv7,iVolNum++,3,dpar);
    1655           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv10,iVolNum++,3,dpar);
    1656           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv16,iVolNum++,3,dpar);
    1657             : 
    1658             : // horizontal cable support chamber type E
    1659             : 
    1660           4 :    char volEnvSupportHE[12][8];
    1661          24 :    for(Int_t jj=0;jj<2;jj++){
    1662         112 :      for(Int_t ii=0;ii<6;ii++){
    1663          48 :        snprintf(volEnvSupportHE[6*jj+ii],8,"SA%dHE%d",icount+1,6*jj+ii);
    1664             :      }
    1665             :    }
    1666             :       
    1667           4 :    spar[0]=dpar[0]-(fgkYVSup[0]/2.)*zRatio;
    1668           4 :    spar[1]=fgkSizeSupportCable[1];
    1669           4 :    spar[2]=fgkSizeSupportCable[2];
    1670          32 :    for(Int_t in=0;in<3;in++){
    1671          60 :      GetEnvelopes(16+icount)->AddEnvelope(volEnvSupportHE[in], 0, true, TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvM+dpar[1]/2.*(in-1)),fgkSizeVSupExt[0]+spar[2]));
    1672          60 :      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]));
    1673          72 :      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.));
    1674          72 :      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.));
    1675             :    }
    1676         104 :    for(Int_t ii=0;ii<12;ii++) {
    1677         144 :      TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
    1678         144 :      GetEnvelopes(16+icount)
    1679          96 :    ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHE[ii],iVolNum++,3, spar);
    1680          48 :    }  
    1681             :    
    1682             : // angular supports chamber type E
    1683             : // 1 vertical      
    1684             :  
    1685           4 :    spar[0]=dpar[0];
    1686           4 :    spar[1]=fgkSizeSupport1V[1];
    1687           4 :    spar[2]=fgkSizeSupport1V[2];
    1688           4 :    Double_t sparysave=spar[1];
    1689             : 
    1690          36 :    TString volEnvSuppAng1VE[4];
    1691          24 :    volEnvSuppAng1VE[0] =  GetVolEnvSuppAngName("1", "V", "E", icount, 0);
    1692          24 :    volEnvSuppAng1VE[1] =  GetVolEnvSuppAngName("1", "V", "E", icount, 1);
    1693          24 :    volEnvSuppAng1VE[2] =  GetVolEnvSuppAngName("1", "V", "E", icount, 2);
    1694          24 :    volEnvSuppAng1VE[3] =  GetVolEnvSuppAngName("1", "V", "E", icount, 3);
    1695             : 
    1696          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[0], 0, true,
    1697           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]));
    1698          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[1], 0, true,
    1699           4 :    TGeoTranslation(xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]));
    1700          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[2], 0, true,
    1701           8 :    TGeoTranslation(-xEnv,-yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1702          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VE[3], 0, true,
    1703           8 :    TGeoTranslation(-xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1704             :  
    1705          16 :    TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
    1706          40 :     for (Int_t i=0;i<4;i++)
    1707          32 :    GetEnvelopes(16+icount)
    1708          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VE[i],iVolNum++,3, spar);
    1709             : 
    1710             : 
    1711             : // 1 horizontal    
    1712             :  
    1713           4 :    spar[0]=dpar[0];
    1714           4 :    spar[1]=fgkSizeSupport1H[1];
    1715           4 :    spar[2]=fgkSizeSupport1H[2];
    1716             : 
    1717          36 :    TString volEnvSuppAng1HE[4];
    1718          24 :    volEnvSuppAng1HE[0] =  GetVolEnvSuppAngName("1", "H", "E", icount, 0);
    1719          24 :    volEnvSuppAng1HE[1] =  GetVolEnvSuppAngName("1", "H", "E", icount, 1);
    1720          24 :    volEnvSuppAng1HE[2] =  GetVolEnvSuppAngName("1", "H", "E", icount, 2);
    1721          24 :    volEnvSuppAng1HE[3] =  GetVolEnvSuppAngName("1", "H", "E", icount, 3);
    1722             :    
    1723          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HE[0], 0, true,
    1724           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])));
    1725          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HE[1], 0, true,
    1726           4 :    TGeoTranslation(xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])));
    1727          20 :    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.));
    1728          20 :    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.));
    1729             : 
    1730          16 :    TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
    1731          40 :    for (Int_t i=0;i<4;i++)
    1732          32 :    GetEnvelopes(16+icount)
    1733          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HE[i],iVolNum++,3, spar);
    1734             : 
    1735             : // gas pipe (low)
    1736           4 :    ppar[0]=fgkSizeGasPipe[0];
    1737           4 :    ppar[1]=fgkSizeGasPipe[1];
    1738           4 :    ppar[2]=dpar[0];
    1739          36 :    TString volEnvInoxGasPipe1E[4];
    1740          20 :    volEnvInoxGasPipe1E[0] = GetVolEnvInoxGasPipeName("1", "E", icount, 0);
    1741          20 :    volEnvInoxGasPipe1E[1] = GetVolEnvInoxGasPipeName("1", "E", icount, 1);
    1742          20 :    volEnvInoxGasPipe1E[2] = GetVolEnvInoxGasPipeName("1", "E", icount, 2);
    1743          20 :    volEnvInoxGasPipe1E[3] = GetVolEnvInoxGasPipeName("1", "E", icount, 3);
    1744          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[0], 0, true,
    1745           8 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1746          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[1], 0, true,
    1747           4 :    TGeoTranslation(xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1748          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[2], 0, true,
    1749           4 :    TGeoTranslation(-xEnv,-yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1750          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1E[3], 0, true,
    1751           4 :    TGeoTranslation(-xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1752             : 
    1753          12 :     TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
    1754          40 :    for (Int_t i=0;i<4;i++)
    1755          32 :    GetEnvelopes(16+icount)
    1756          16 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1E[i],iVolNum++,3, ppar);
    1757             : 
    1758             : // 2 vertical      
    1759             :  
    1760           4 :    spar[0]=dpar[0];
    1761           4 :    spar[1]=fgkSizeSupport2V[1];
    1762           4 :    spar[2]=fgkSizeSupport2V[2];
    1763           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    1764          36 :    TString volEnvSuppAng2VE[4];
    1765          24 :    volEnvSuppAng2VE[0] =  GetVolEnvSuppAngName("2", "V", "E", icount, 0);
    1766          24 :    volEnvSuppAng2VE[1] =  GetVolEnvSuppAngName("2", "V", "E", icount, 1);
    1767          24 :    volEnvSuppAng2VE[2] =  GetVolEnvSuppAngName("2", "V", "E", icount, 2);
    1768          24 :    volEnvSuppAng2VE[3] =  GetVolEnvSuppAngName("2", "V", "E", icount, 3);
    1769          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[0], 0, true,
    1770           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
    1771          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[1], 0, true,
    1772           4 :    TGeoTranslation(xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
    1773          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[2], 0, true,
    1774           8 :     TGeoTranslation(-xEnv,-yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1775          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VE[3], 0, true,
    1776           8 :     TGeoTranslation(-xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1777             :    
    1778          16 :    TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
    1779          40 :    for (Int_t i=0;i<4;i++)
    1780          32 :    GetEnvelopes(16+icount)
    1781          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VE[i],iVolNum++,3, spar);   
    1782             : 
    1783             : // 2 horizontal    
    1784             :  
    1785           4 :    spar[0]=dpar[0];
    1786           4 :    spar[1]=fgkSizeSupport2H[1];
    1787           4 :    spar[2]=fgkSizeSupport2H[2];
    1788             : 
    1789          36 :    TString volEnvSuppAng2HE[4];
    1790          24 :    volEnvSuppAng2HE[0] =  GetVolEnvSuppAngName("2", "H", "E", icount, 0);
    1791          24 :    volEnvSuppAng2HE[1] =  GetVolEnvSuppAngName("2", "H", "E", icount, 1);
    1792          24 :    volEnvSuppAng2HE[2] =  GetVolEnvSuppAngName("2", "H", "E", icount, 2);
    1793          24 :    volEnvSuppAng2HE[3] =  GetVolEnvSuppAngName("2", "H", "E", icount, 3);
    1794             : 
    1795          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HE[0], 0, true,
    1796           4 :    TGeoTranslation(xEnv,-yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
    1797          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HE[1], 0, true,
    1798           4 :    TGeoTranslation(xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])));
    1799          20 :    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.));
    1800          20 :    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.));
    1801             : 
    1802          16 :    TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
    1803          40 :    for (Int_t i=0;i<4;i++)
    1804          32 :    GetEnvelopes(16+icount)
    1805          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HE[i],iVolNum++,3, spar);   
    1806             : 
    1807             : // 3 vertical      
    1808             :  
    1809           4 :    spar[0]=dpar[0];
    1810           4 :    spar[1]=fgkSizeSupport1V[1];
    1811           4 :    spar[2]=fgkSizeSupport1V[2];
    1812           4 :    sparysave=spar[1];
    1813          36 :    TString volEnvSuppAng3VE[4];
    1814          24 :    volEnvSuppAng3VE[0] =  GetVolEnvSuppAngName("3", "V", "E", icount, 0);
    1815          24 :    volEnvSuppAng3VE[1] =  GetVolEnvSuppAngName("3", "V", "E", icount, 1);
    1816          24 :    volEnvSuppAng3VE[2] =  GetVolEnvSuppAngName("3", "V", "E", icount, 2);
    1817          24 :    volEnvSuppAng3VE[3] =  GetVolEnvSuppAngName("3", "V", "E", icount, 3);
    1818             :    
    1819          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[0], 0, true,
    1820           4 :    TGeoTranslation(xEnv,-yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]));
    1821          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[1], 0, true,
    1822           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]));
    1823          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[2], 0, true,
    1824           8 :    TGeoTranslation(-xEnv,-yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1825          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VE[3], 0, true,
    1826           8 :    TGeoTranslation(-xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1827             :  
    1828          16 :    TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
    1829          40 :    for (Int_t i=0;i<4;i++)
    1830          32 :    GetEnvelopes(16+icount)
    1831          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VE[i],iVolNum++,3, spar);
    1832             : 
    1833             : 
    1834             : // 3 horizontal    
    1835             :  
    1836           4 :    spar[0]=dpar[0];
    1837           4 :    spar[1]=fgkSizeSupport1H[1];
    1838           4 :    spar[2]=fgkSizeSupport1H[2];
    1839             : 
    1840          36 :    TString volEnvSuppAng3HE[4];
    1841          24 :    volEnvSuppAng3HE[0] =  GetVolEnvSuppAngName("3", "H", "E", icount, 0);
    1842          24 :    volEnvSuppAng3HE[1] =  GetVolEnvSuppAngName("3", "H", "E", icount, 1);
    1843          24 :    volEnvSuppAng3HE[2] =  GetVolEnvSuppAngName("3", "H", "E", icount, 2);
    1844          24 :    volEnvSuppAng3HE[3] =  GetVolEnvSuppAngName("3", "H", "E", icount, 3);
    1845             :    
    1846          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HE[0], 0, true,
    1847           4 :    TGeoTranslation(xEnv,-yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])));
    1848          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HE[1], 0, true,
    1849           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])));
    1850          20 :    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.));
    1851          20 :    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.));
    1852             : 
    1853          16 :    TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
    1854          40 :    for (Int_t i=0;i<4;i++)
    1855          32 :    GetEnvelopes(16+icount)
    1856          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HE[i],iVolNum++,3, spar);
    1857             : 
    1858             : // gas pipe (high)
    1859           4 :    ppar[0]=fgkSizeGasPipe[0];
    1860           4 :    ppar[1]=fgkSizeGasPipe[1];
    1861           4 :    ppar[2]=dpar[0];
    1862          36 :    TString volEnvInoxGasPipe2E[4];
    1863          20 :    volEnvInoxGasPipe2E[0] = GetVolEnvInoxGasPipeName("2", "E", icount, 0);
    1864          20 :    volEnvInoxGasPipe2E[1] = GetVolEnvInoxGasPipeName("2", "E", icount, 1);
    1865          20 :    volEnvInoxGasPipe2E[2] = GetVolEnvInoxGasPipeName("2", "E", icount, 2);
    1866          20 :    volEnvInoxGasPipe2E[3] = GetVolEnvInoxGasPipeName("2", "E", icount, 3);
    1867          12 :          GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[0], 0, true,
    1868           4 :    TGeoTranslation(xEnv,-yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1869          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[1], 0, true,
    1870           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    1871          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[2], 0, true,
    1872           4 :    TGeoTranslation(-xEnv,-yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1873          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2E[3], 0, true,
    1874           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    1875             : 
    1876          40 :    for (Int_t i=0;i<4;i++)
    1877          32 :    GetEnvelopes(16+icount)
    1878          16 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2E[i],iVolNum++,3, ppar);
    1879             : 
    1880             : // 4 vertical      
    1881             :  
    1882           4 :    spar[0]=dpar[0];
    1883           4 :    spar[1]=fgkSizeSupport2V[1];
    1884           4 :    spar[2]=fgkSizeSupport2V[2];
    1885           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    1886             : 
    1887          36 :    TString volEnvSuppAng4VE[4];
    1888          24 :    volEnvSuppAng4VE[0] =  GetVolEnvSuppAngName("4", "V", "E", icount, 0);
    1889          24 :    volEnvSuppAng4VE[1] =  GetVolEnvSuppAngName("4", "V", "E", icount, 1);
    1890          24 :    volEnvSuppAng4VE[2] =  GetVolEnvSuppAngName("4", "V", "E", icount, 2);
    1891          24 :    volEnvSuppAng4VE[3] =  GetVolEnvSuppAngName("4", "V", "E", icount, 3);
    1892             :    
    1893          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VE[0], 0, true,
    1894           4 :    TGeoTranslation(xEnv,-yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
    1895          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VE[1], 0, true,
    1896           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])));
    1897          12 :    GetEnvelopes(16+icount)
    1898             :    ->AddEnvelope(volEnvSuppAng4VE[2], 0, true,
    1899           4 :    TGeoTranslation(-xEnv,-yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]),
    1900           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1901          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VE[3], 0, true,
    1902           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]),
    1903           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1904             :    
    1905          16 :    TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
    1906          40 :    for (Int_t i=0;i<4;i++)
    1907          32 :    GetEnvelopes(16+icount)
    1908          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VE[i],iVolNum++,3, spar);   
    1909             : 
    1910             : // 4 horizontal    
    1911             :  
    1912           4 :    spar[0]=dpar[0];
    1913           4 :    spar[1]=fgkSizeSupport2H[1];
    1914           4 :    spar[2]=fgkSizeSupport2H[2];
    1915             : 
    1916          36 :    TString volEnvSuppAng4HE[4];
    1917          24 :    volEnvSuppAng4HE[0] =  GetVolEnvSuppAngName("4", "H", "E", icount, 0);
    1918          24 :    volEnvSuppAng4HE[1] =  GetVolEnvSuppAngName("4", "H", "E", icount, 1);
    1919          24 :    volEnvSuppAng4HE[2] =  GetVolEnvSuppAngName("4", "H", "E", icount, 2);
    1920          24 :    volEnvSuppAng4HE[3] =  GetVolEnvSuppAngName("4", "H", "E", icount, 3);
    1921             :    
    1922          12 :    GetEnvelopes(16+icount)
    1923             :    ->AddEnvelope(volEnvSuppAng4HE[0], 0, true,
    1924           4 :    TGeoTranslation(xEnv,-yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
    1925          12 :    GetEnvelopes(16+icount)
    1926             :    ->AddEnvelope(volEnvSuppAng4HE[1], 0, true,
    1927           4 :    TGeoTranslation(xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])));
    1928          12 :    GetEnvelopes(16+icount)
    1929             :    ->AddEnvelope(volEnvSuppAng4HE[2], 0, true, 
    1930           4 :    TGeoTranslation(-xEnv,-yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]),
    1931           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1932          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HE[3], 0, true, 
    1933           4 :    TGeoTranslation(-xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]),
    1934           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1935             : 
    1936          16 :    TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
    1937          40 :    for (Int_t i=0;i<4;i++)
    1938          32 :    GetEnvelopes(16+icount)
    1939          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HE[i],iVolNum++,3, spar);   
    1940             : 
    1941             : // X horizontal    
    1942           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    1943           4 :    spar[1]=fgkSizeSupportXH[1];
    1944           4 :    spar[2]=fgkSizeSupportXH[2];
    1945           4 :    Double_t sparysavex=spar[1];
    1946             : 
    1947          36 :    TString volEnvSuppAngXHE[4];
    1948          24 :    volEnvSuppAngXHE[0] =  GetVolEnvSuppAngName("X", "H", "E", icount, 0);
    1949          24 :    volEnvSuppAngXHE[1] =  GetVolEnvSuppAngName("X", "H", "E", icount, 1);
    1950          24 :    volEnvSuppAngXHE[2] =  GetVolEnvSuppAngName("X", "H", "E", icount, 2);
    1951          24 :    volEnvSuppAngXHE[3] =  GetVolEnvSuppAngName("X", "H", "E", icount, 3);
    1952             :    
    1953          12 :    GetEnvelopes(16+icount)
    1954             :    ->AddEnvelope(volEnvSuppAngXHE[0], 0, true,
    1955           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvM+dpar[1]+sparysave+1.0,
    1956           4 :    -(fgkSizeVSupExt[0]+spar[2])));
    1957          12 :    GetEnvelopes(16+icount)
    1958             :    ->AddEnvelope(volEnvSuppAngXHE[1], 0, true,
    1959           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvM+dpar[1]+sparysave+1.0,
    1960           4 :    -(fgkSizeVSupExt[0]+spar[2])));
    1961          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHE[2], 0, true, 
    1962           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvP+dpar[1]+sparysave+1.0,
    1963           4 :    fgkSizeVSupExt[0]+spar[2]),
    1964           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1965          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHE[3], 0, true, 
    1966           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvP+dpar[1]+sparysave+1.0,
    1967           4 :    fgkSizeVSupExt[0]+spar[2]),
    1968           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1969             : 
    1970          16 :    TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
    1971          40 :    for (Int_t i=0;i<4;i++)
    1972          32 :    GetEnvelopes(16+icount)
    1973          16 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHE[i],iVolNum++,3, spar);   
    1974             : 
    1975             : // X vertical      
    1976           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    1977           4 :    spar[1]=fgkSizeSupportXV[1];
    1978           4 :    spar[2]=fgkSizeSupportXV[2];
    1979             : 
    1980          36 :    TString volEnvSuppAngXVE[4];
    1981          24 :    volEnvSuppAngXVE[0] =  GetVolEnvSuppAngName("X", "V", "E", icount, 0);
    1982          24 :    volEnvSuppAngXVE[1] =  GetVolEnvSuppAngName("X", "V", "E", icount, 1);
    1983          24 :    volEnvSuppAngXVE[2] =  GetVolEnvSuppAngName("X", "V", "E", icount, 2);
    1984          24 :    volEnvSuppAngXVE[3] =  GetVolEnvSuppAngName("X", "V", "E", icount, 3);
    1985             :    
    1986          12 :    GetEnvelopes(16+icount)
    1987             :    ->AddEnvelope(volEnvSuppAngXVE[0], 0, true, 
    1988           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    1989           4 :    -(fgkSizeVSupExt[0]+spar[2])));
    1990          12 :    GetEnvelopes(16+icount)
    1991             :    ->AddEnvelope(volEnvSuppAngXVE[1], 0, true, 
    1992           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    1993           4 :    -(fgkSizeVSupExt[0]+spar[2])));
    1994          12 :    GetEnvelopes(16+icount)
    1995             :    ->AddEnvelope(volEnvSuppAngXVE[2], 0, true, 
    1996           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    1997           8 :    fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    1998          12 :    GetEnvelopes(16+icount)
    1999             :    ->AddEnvelope(volEnvSuppAngXVE[3], 0, true, 
    2000           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    2001           8 :    fgkSizeVSupExt[0]+spar[2]),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2002             : 
    2003          16 :    TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
    2004          40 :    for (Int_t i=0;i<4;i++)
    2005          32 :    GetEnvelopes(16+icount)
    2006          16 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVE[i],iVolNum++,3, spar);
    2007             :    
    2008             :    // keep values of yEnvP, yEnvM
    2009           4 :    fYEnvPsave = yEnvP;
    2010           4 :    fYEnvMsave = yEnvM;   
    2011         244 : }
    2012             : 
    2013             : //______________________________________________________________________________
    2014             : void AliMUONTriggerGeometryBuilder::BuildChamberTypeF(Int_t& iVolNum, Int_t icount)
    2015             : { 
    2016             : // ratio of zpos1m/zpos1p and inverse for first plane
    2017           8 :     Float_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
    2018           4 :     Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
    2019           4 :     Float_t zpm=1./zmp;
    2020           4 :     Float_t zRatio = AliMUONConstants::DefaultRatioTriggerChamber(icount);      
    2021           4 :     Float_t xEnv = (fgkDXZERO+fgkXMAX/2.)*zRatio;
    2022             :     
    2023           4 :    Double_t dpar[3];    
    2024           4 :    Double_t spar[3];    
    2025           4 :    Double_t ppar[3];    
    2026             : 
    2027             : // F
    2028           4 :    dpar[0] = (fgkXMAX/2.)*zRatio;
    2029           4 :    dpar[1] =  fgkYMIN*zRatio;
    2030           4 :    dpar[2] = 0.4;   
    2031             : 
    2032             :    Float_t yEnvP = 0;
    2033             :    Float_t yEnvM = 0;
    2034           4 :    yEnvP = (fYEnvMsave + fgkYMIN * zRatio ) * zpm + fgkYMIN * zRatio;
    2035           4 :    yEnvM = (fYEnvPsave + fgkYMIN * zRatio ) * zmp + fgkYMIN * zRatio;
    2036             : 
    2037           4 :    Int_t detElemId = (10+icount+1)*100+14;
    2038           4 :    TString volEnv0 = GetVolEnvName(icount, 0);
    2039           4 :    TString volEnv8 = GetVolEnvName(icount, 8);
    2040           4 :    TString volEnv9 = GetVolEnvName(icount, 9);
    2041           4 :    TString volEnv17 = GetVolEnvName(icount, 17);
    2042          12 :    TString volAlu = GetVolumeName("volAlu", icount);
    2043          12 :    GetEnvelopes(16+icount)
    2044           4 :    ->AddEnvelope(volEnv0, detElemId, true, TGeoTranslation(xEnv,-yEnvP,fgkZp));
    2045           4 :    detElemId = (10+icount+1)*100+4;
    2046          12 :    GetEnvelopes(16+icount)
    2047           4 :    ->AddEnvelope(volEnv8, detElemId, true, TGeoTranslation(xEnv, yEnvP,fgkZp));
    2048           4 :    detElemId = (10+icount+1)*100+13;
    2049          12 :    GetEnvelopes(16+icount)
    2050           4 :    ->AddEnvelope(volEnv9, detElemId, true, TGeoTranslation(-xEnv,-yEnvM,fgkZm),
    2051           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2052           4 :    detElemId = (10+icount+1)*100+5;
    2053          12 :    GetEnvelopes(16+icount)
    2054           4 :    ->AddEnvelope(volEnv17, detElemId, true, TGeoTranslation(-xEnv, yEnvM,fgkZm),
    2055           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2056             :    
    2057           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv0,iVolNum++,3,dpar);
    2058           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv8,iVolNum++,3,dpar);
    2059           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv9,iVolNum++,3,dpar);
    2060           8 :    GetEnvelopes(16+icount)->AddEnvelopeConstituentParam(volAlu,volEnv17,iVolNum++,3,dpar);
    2061             : 
    2062             : // horizontal cable support chamber type F
    2063             : 
    2064           4 :    char volEnvSupportHF[12][8];
    2065          24 :    for(Int_t jj=0;jj<2;jj++){
    2066         112 :      for(Int_t ii=0;ii<6;ii++){
    2067          48 :        snprintf(volEnvSupportHF[6*jj+ii],8,"SA%dHF%d",icount+1,6*jj+ii);
    2068             :      }
    2069             :    }
    2070             : 
    2071           4 :    spar[0]=dpar[0]-(fgkYVSup[0]/2.)*zRatio;
    2072           4 :    spar[1]=fgkSizeSupportCable[1];
    2073           4 :    spar[2]=fgkSizeSupportCable[2];
    2074          32 :    for(Int_t in=0;in<3;in++){
    2075          36 :      GetEnvelopes(16+icount)
    2076          12 :      ->AddEnvelope(volEnvSupportHF[in], 0, true, 
    2077          24 :      TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,-(yEnvP+dpar[1]/2.*(in-1)),
    2078          12 :      -(fgkSizeVSupExt[0]+spar[2])));
    2079          36 :      GetEnvelopes(16+icount)
    2080          12 :      ->AddEnvelope(volEnvSupportHF[in+3], 0, true, 
    2081          24 :      TGeoTranslation(xEnv+fgkYVSup[0]/2.*zRatio,yEnvP+dpar[1]/2.*(in-1),
    2082          12 :      -(fgkSizeVSupExt[0]+spar[2])));
    2083          36 :      GetEnvelopes(16+icount)
    2084          12 :      ->AddEnvelope(volEnvSupportHF[in+6], 0, true, 
    2085          24 :      TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio),-(yEnvM+dpar[1]/2.*(in-1)),
    2086          12 :      fgkSizeVSupExt[0]+spar[2]),
    2087          12 :      TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2088          36 :      GetEnvelopes(16+icount)
    2089          12 :      ->AddEnvelope(volEnvSupportHF[in+9], 0, true, 
    2090          24 :      TGeoTranslation(-(xEnv+fgkYVSup[0]/2.*zRatio), yEnvM+dpar[1]/2.*(in-1),
    2091          12 :      fgkSizeVSupExt[0]+spar[2]),
    2092          12 :      TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2093             :    }
    2094         104 :    for(Int_t ii=0;ii<12;ii++) {
    2095         144 :      TString volAluSupportH = GetVolumeName("volAluSupportH", icount);
    2096         144 :      GetEnvelopes(16+icount)
    2097          96 :      ->AddEnvelopeConstituentParam(volAluSupportH,volEnvSupportHF[ii],iVolNum++,3, spar);
    2098          48 :    }  
    2099             : 
    2100             : // angular supports chamber type F
    2101             : // 1 vertical      
    2102             :  
    2103           4 :    spar[0]=dpar[0];
    2104           4 :    spar[1]=fgkSizeSupport1V[1];
    2105           4 :    spar[2]=fgkSizeSupport1V[2];
    2106           4 :    Double_t sparysave=spar[1];
    2107          36 :    TString volEnvSuppAng1VF[4];
    2108          24 :    volEnvSuppAng1VF[0] =  GetVolEnvSuppAngName("1", "V", "F", icount, 0);
    2109          24 :    volEnvSuppAng1VF[1] =  GetVolEnvSuppAngName("1", "V", "F", icount, 1);
    2110          24 :    volEnvSuppAng1VF[2] =  GetVolEnvSuppAngName("1", "V", "F", icount, 2);
    2111          24 :    volEnvSuppAng1VF[3] =  GetVolEnvSuppAngName("1", "V", "F", icount, 3);
    2112             :    
    2113          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[0], 0, true,
    2114           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
    2115          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[1], 0, true,
    2116           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1],fgkZp+dpar[2]+spar[2]));
    2117          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[2], 0, true,
    2118           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
    2119           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2120          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1VF[3], 0, true,
    2121           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1],fgkZm-dpar[2]-spar[2]),
    2122           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2123             :  
    2124          16 :    TString volAluAngSupport1V = GetVolAluAngSuppName("1", "V", icount);
    2125          40 :    for (Int_t i=0;i<4;i++)
    2126          32 :     GetEnvelopes(16+icount)
    2127          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport1V,volEnvSuppAng1VF[i],iVolNum++,3, spar);
    2128             : 
    2129             : // 1 horizontal    
    2130             :  
    2131           4 :    spar[0]=dpar[0];
    2132           4 :    spar[1]=fgkSizeSupport1H[1];
    2133           4 :    spar[2]=fgkSizeSupport1H[2];
    2134             : 
    2135          36 :    TString volEnvSuppAng1HF[4];
    2136          24 :    volEnvSuppAng1HF[0] =  GetVolEnvSuppAngName("1", "H", "F", icount, 0);
    2137          24 :    volEnvSuppAng1HF[1] =  GetVolEnvSuppAngName("1", "H", "F", icount, 1);
    2138          24 :    volEnvSuppAng1HF[2] =  GetVolEnvSuppAngName("1", "H", "F", icount, 2);
    2139          24 :    volEnvSuppAng1HF[3] =  GetVolEnvSuppAngName("1", "H", "F", icount, 3);
    2140             :    
    2141          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[0], 0, true,
    2142           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
    2143          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[1], 0, true,
    2144           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkZp+dpar[2]-spar[2]));
    2145          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[2], 0, true, 
    2146           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
    2147           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2148          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng1HF[3], 0, true, 
    2149           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,fgkZm-(dpar[2]-spar[2])),
    2150           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2151             : 
    2152          16 :    TString volAluAngSupport1H = GetVolAluAngSuppName("1", "H", icount);
    2153          40 :    for (Int_t i=0;i<4;i++)
    2154          32 :    GetEnvelopes(16+icount)
    2155          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport1H,volEnvSuppAng1HF[i],iVolNum++,3, spar);
    2156             : 
    2157             : // gas pipe (low)
    2158           4 :    ppar[0]=fgkSizeGasPipe[0];
    2159           4 :    ppar[1]=fgkSizeGasPipe[1];
    2160           4 :    ppar[2]=dpar[0];
    2161          36 :    TString volEnvInoxGasPipe1F[4];
    2162          20 :    volEnvInoxGasPipe1F[0] = GetVolEnvInoxGasPipeName("1", "F", icount, 0);
    2163          20 :    volEnvInoxGasPipe1F[1] = GetVolEnvInoxGasPipeName("1", "F", icount, 1);
    2164          20 :    volEnvInoxGasPipe1F[2] = GetVolEnvInoxGasPipeName("1", "F", icount, 2);
    2165          20 :    volEnvInoxGasPipe1F[3] = GetVolEnvInoxGasPipeName("1", "F", icount, 3);
    2166          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[0], 0, true,
    2167           8 :    TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    2168          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[1], 0, true,
    2169           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    2170          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[2], 0, true,
    2171           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    2172          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe1F[3], 0, true,
    2173           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave-fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    2174             : 
    2175          12 :    TString volInoxGasPipe = GetVolumeName("volInoxGasPipe", icount);
    2176          40 :    for (Int_t i=0;i<4;i++)
    2177          32 :    GetEnvelopes(16+icount)
    2178          16 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe1F[i],iVolNum++,3, ppar);
    2179             : 
    2180             : // 2 vertical      
    2181             :  
    2182           4 :    spar[0]=dpar[0];
    2183           4 :    spar[1]=fgkSizeSupport2V[1];
    2184           4 :    spar[2]=fgkSizeSupport2V[2];
    2185           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    2186             :  
    2187          36 :    TString volEnvSuppAng2VF[4];
    2188          24 :    volEnvSuppAng2VF[0] =  GetVolEnvSuppAngName("2", "V", "F", icount, 0);
    2189          24 :    volEnvSuppAng2VF[1] =  GetVolEnvSuppAngName("2", "V", "F", icount, 1);
    2190          24 :    volEnvSuppAng2VF[2] =  GetVolEnvSuppAngName("2", "V", "F", icount, 2);
    2191          24 :    volEnvSuppAng2VF[3] =  GetVolEnvSuppAngName("2", "V", "F", icount, 3);
    2192             :    
    2193          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[0], 0, true,
    2194           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
    2195          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[1], 0, true,
    2196           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1],fgkSizeVSupExt[0]+spar[2]));
    2197          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[2], 0, true,
    2198           8 :     TGeoTranslation(-xEnv,-yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2199          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2VF[3], 0, true,
    2200           8 :     TGeoTranslation(-xEnv,yEnvM-dpar[1],-(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2201             :    
    2202          16 :    TString volAluAngSupport2V = GetVolAluAngSuppName("2", "V", icount);
    2203          40 :    for (Int_t i=0;i<4;i++)
    2204          32 :    GetEnvelopes(16+icount)
    2205          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport2V,volEnvSuppAng2VF[i],iVolNum++,3, spar);   
    2206             : 
    2207             : // 2 horizontal    
    2208             :  
    2209           4 :    spar[0]=dpar[0];
    2210           4 :    spar[1]=fgkSizeSupport2H[1];
    2211           4 :    spar[2]=fgkSizeSupport2H[2];
    2212             : 
    2213          36 :    TString volEnvSuppAng2HF[4];
    2214          24 :    volEnvSuppAng2HF[0] =  GetVolEnvSuppAngName("2", "H", "F", icount, 0);
    2215          24 :    volEnvSuppAng2HF[1] =  GetVolEnvSuppAngName("2", "H", "F", icount, 1);
    2216          24 :    volEnvSuppAng2HF[2] =  GetVolEnvSuppAngName("2", "H", "F", icount, 2);
    2217          24 :    volEnvSuppAng2HF[3] =  GetVolEnvSuppAngName("2", "H", "F", icount, 3);
    2218             :    
    2219          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[0], 0, true,
    2220           4 :    TGeoTranslation(xEnv,-yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
    2221          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[1], 0, true,
    2222           4 :    TGeoTranslation(xEnv,yEnvP-dpar[1]-sparysave,fgkSizeVSupExt[0]+spar[2]));
    2223          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[2], 0, true, 
    2224           4 :    TGeoTranslation(-xEnv,-yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    2225           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2226          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng2HF[3], 0, true, 
    2227           4 :    TGeoTranslation(-xEnv,yEnvM-dpar[1]-sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    2228           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2229             : 
    2230          16 :    TString volAluAngSupport2H = GetVolAluAngSuppName("2", "H", icount);
    2231          40 :    for (Int_t i=0;i<4;i++)
    2232          32 :    GetEnvelopes(16+icount)
    2233          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport2H,volEnvSuppAng2HF[i],iVolNum++,3, spar);   
    2234             : 
    2235             : // 3 vertical      
    2236             :  
    2237           4 :     spar[0]=dpar[0];
    2238           4 :    spar[1]=fgkSizeSupport1V[1];
    2239           4 :    spar[2]=fgkSizeSupport1V[2];
    2240           4 :    sparysave=spar[1];
    2241             : 
    2242          36 :    TString volEnvSuppAng3VF[4];
    2243          24 :    volEnvSuppAng3VF[0] =  GetVolEnvSuppAngName("3", "V", "F", icount, 0);
    2244          24 :    volEnvSuppAng3VF[1] =  GetVolEnvSuppAngName("3", "V", "F", icount, 1);
    2245          24 :    volEnvSuppAng3VF[2] =  GetVolEnvSuppAngName("3", "V", "F", icount, 2);
    2246          24 :    volEnvSuppAng3VF[3] =  GetVolEnvSuppAngName("3", "V", "F", icount, 3);
    2247             :    
    2248          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[0], 0, true,
    2249           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
    2250          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[1], 0, true,
    2251           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1],fgkZp+dpar[2]+spar[2]));
    2252          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[2], 0, true,
    2253           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
    2254           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2255          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3VF[3], 0, true,
    2256           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1],fgkZm-dpar[2]-spar[2]),
    2257           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2258             : 
    2259          16 :    TString volAluAngSupport3V = GetVolAluAngSuppName("3", "V", icount);
    2260          40 :    for (Int_t i=0;i<4;i++)
    2261          32 :     GetEnvelopes(16+icount)
    2262          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport3V,volEnvSuppAng3VF[i],iVolNum++,3, spar);
    2263             : 
    2264             : // 3 horizontal    
    2265             :  
    2266           4 :    spar[0]=dpar[0];
    2267           4 :    spar[1]=fgkSizeSupport1H[1];
    2268           4 :    spar[2]=fgkSizeSupport1H[2];
    2269             :  
    2270          36 :    TString volEnvSuppAng3HF[4];
    2271          24 :    volEnvSuppAng3HF[0] =  GetVolEnvSuppAngName("3", "H", "F", icount, 0);
    2272          24 :    volEnvSuppAng3HF[1] =  GetVolEnvSuppAngName("3", "H", "F", icount, 1);
    2273          24 :    volEnvSuppAng3HF[2] =  GetVolEnvSuppAngName("3", "H", "F", icount, 2);
    2274          24 :    volEnvSuppAng3HF[3] =  GetVolEnvSuppAngName("3", "H", "F", icount, 3);
    2275             :   
    2276          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[0], 0, true,
    2277           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
    2278          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[1], 0, true,
    2279           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkZp+dpar[2]-spar[2]));
    2280          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[2], 0, true, 
    2281           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
    2282           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2283          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng3HF[3], 0, true, 
    2284           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,fgkZm-(dpar[2]-spar[2])),
    2285           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2286             : 
    2287          16 :    TString volAluAngSupport3H = GetVolAluAngSuppName("3", "H", icount);
    2288          40 :    for (Int_t i=0;i<4;i++)
    2289          32 :    GetEnvelopes(16+icount)
    2290          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport3H,volEnvSuppAng3HF[i],iVolNum++,3, spar);
    2291             :    
    2292             : // gas pipe (high)
    2293           4 :    ppar[0]=fgkSizeGasPipe[0];
    2294           4 :    ppar[1]=fgkSizeGasPipe[1];
    2295           4 :    ppar[2]=dpar[0];
    2296          36 :    TString volEnvInoxGasPipe2F[4];
    2297          20 :    volEnvInoxGasPipe2F[0] = GetVolEnvInoxGasPipeName("2", "F", icount, 0);
    2298          20 :    volEnvInoxGasPipe2F[1] = GetVolEnvInoxGasPipeName("2", "F", icount, 1);
    2299          20 :    volEnvInoxGasPipe2F[2] = GetVolEnvInoxGasPipeName("2", "F", icount, 2);
    2300          20 :    volEnvInoxGasPipe2F[3] = GetVolEnvInoxGasPipeName("2", "F", icount, 3);
    2301          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[0], 0, true,
    2302           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    2303          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[1], 0, true,
    2304           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZp),fRsupportpipe);
    2305          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[2], 0, true,
    2306           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    2307          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvInoxGasPipe2F[3], 0, true,
    2308           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave+fgkOffsetGasPipe,fgkZm),fRsupportpipe);
    2309             : 
    2310          40 :    for (Int_t i=0;i<4;i++)
    2311          32 :    GetEnvelopes(16+icount)
    2312          16 :    ->AddEnvelopeConstituentParam(volInoxGasPipe,volEnvInoxGasPipe2F[i],iVolNum++,3, ppar);
    2313             : 
    2314             : // 4 vertical      
    2315             :  
    2316           4 :    spar[0]=dpar[0];
    2317           4 :    spar[1]=fgkSizeSupport2V[1];
    2318           4 :    spar[2]=fgkSizeSupport2V[2];
    2319           4 :    sparysave=spar[1]+fgkSizeSupport2H[1];
    2320             : 
    2321          36 :    TString volEnvSuppAng4VF[4];
    2322          24 :    volEnvSuppAng4VF[0] =  GetVolEnvSuppAngName("4", "V", "F", icount, 0);
    2323          24 :    volEnvSuppAng4VF[1] =  GetVolEnvSuppAngName("4", "V", "F", icount, 1);
    2324          24 :    volEnvSuppAng4VF[2] =  GetVolEnvSuppAngName("4", "V", "F", icount, 2);
    2325          24 :    volEnvSuppAng4VF[3] =  GetVolEnvSuppAngName("4", "V", "F", icount, 3);
    2326             :    
    2327          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[0], 0, true,
    2328           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
    2329          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[1], 0, true,
    2330           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1],fgkSizeVSupExt[0]+spar[2]));
    2331          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[2], 0, true,
    2332           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
    2333           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2334          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4VF[3], 0, true,
    2335           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1],-(fgkSizeVSupExt[0]+spar[2])),
    2336           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2337             :    
    2338          16 :    TString volAluAngSupport4V = GetVolAluAngSuppName("4", "V", icount);
    2339          40 :    for (Int_t i=0;i<4;i++)
    2340          32 :    GetEnvelopes(16+icount)
    2341          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport4V,volEnvSuppAng4VF[i],iVolNum++,3, spar);   
    2342             : 
    2343             : // 4 horizontal    
    2344             :  
    2345           4 :    spar[0]=dpar[0];
    2346           4 :    spar[1]=fgkSizeSupport2H[1];
    2347           4 :    spar[2]=fgkSizeSupport2H[2];
    2348             : 
    2349          36 :    TString volEnvSuppAng4HF[4];
    2350          24 :    volEnvSuppAng4HF[0] =  GetVolEnvSuppAngName("4", "H", "F", icount, 0);
    2351          24 :    volEnvSuppAng4HF[1] =  GetVolEnvSuppAngName("4", "H", "F", icount, 1);
    2352          24 :    volEnvSuppAng4HF[2] =  GetVolEnvSuppAngName("4", "H", "F", icount, 2);
    2353          24 :    volEnvSuppAng4HF[3] =  GetVolEnvSuppAngName("4", "H", "F", icount, 3);
    2354             :    
    2355          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[0], 0, true,
    2356           4 :    TGeoTranslation(xEnv,-yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
    2357          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[1], 0, true,
    2358           4 :    TGeoTranslation(xEnv,yEnvP+dpar[1]+sparysave,fgkSizeVSupExt[0]+spar[2]));
    2359          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[2], 0, true, 
    2360           4 :    TGeoTranslation(-xEnv,-yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    2361           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2362          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAng4HF[3], 0, true, 
    2363           4 :    TGeoTranslation(-xEnv,yEnvM+dpar[1]+sparysave,-(fgkSizeVSupExt[0]+spar[2])),
    2364           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2365             : 
    2366          16 :    TString volAluAngSupport4H = GetVolAluAngSuppName("4", "H", icount);
    2367          40 :    for (Int_t i=0;i<4;i++)
    2368          32 :    GetEnvelopes(16+icount)
    2369          16 :    ->AddEnvelopeConstituentParam(volAluAngSupport4H,volEnvSuppAng4HF[i],iVolNum++,3, spar);   
    2370             : 
    2371             : 
    2372             : // X horizontal    
    2373           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    2374           4 :    spar[1]=fgkSizeSupportXH[1];
    2375           4 :    spar[2]=fgkSizeSupportXH[2];
    2376           4 :    Double_t sparysavex=spar[1];
    2377             : 
    2378          36 :    TString volEnvSuppAngXHF[4];
    2379          24 :    volEnvSuppAngXHF[0] =  GetVolEnvSuppAngName("X", "H", "F", icount, 0);
    2380          24 :    volEnvSuppAngXHF[1] =  GetVolEnvSuppAngName("X", "H", "F", icount, 1);
    2381          24 :    volEnvSuppAngXHF[2] =  GetVolEnvSuppAngName("X", "H", "F", icount, 2);
    2382          24 :    volEnvSuppAngXHF[3] =  GetVolEnvSuppAngName("X", "H", "F", icount, 3);
    2383             :    
    2384          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[0], 0, true,
    2385           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0,
    2386           4 :    fgkSizeVSupExt[0]+spar[2]));
    2387          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[1], 0, true,
    2388           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0,
    2389           4 :    fgkSizeVSupExt[0]+spar[2]));
    2390          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[2], 0, true, 
    2391           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0,
    2392           8 :    -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2393          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXHF[3], 0, true, 
    2394           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0,
    2395           4 :    -(fgkSizeVSupExt[0]+spar[2])),
    2396           4 :    TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2397             : 
    2398          16 :    TString volAluAngSupportXH = GetVolAluAngSuppName("X", "H", icount);
    2399          40 :    for (Int_t i=0;i<4;i++)
    2400          32 :    GetEnvelopes(16+icount)
    2401          16 :    ->AddEnvelopeConstituentParam(volAluAngSupportXH,volEnvSuppAngXHF[i],iVolNum++,3, spar);   
    2402             : 
    2403             : // X vertical      
    2404           4 :    spar[0]=(fgkYVSup[3]-fgkYVSup[0])/2.*zRatio;
    2405           4 :    spar[1]=fgkSizeSupportXV[1];
    2406           4 :    spar[2]=fgkSizeSupportXV[2];
    2407             : 
    2408          36 :    TString volEnvSuppAngXVF[4];
    2409          24 :    volEnvSuppAngXVF[0] =  GetVolEnvSuppAngName("X", "V", "F", icount, 0);
    2410          24 :    volEnvSuppAngXVF[1] =  GetVolEnvSuppAngName("X", "V", "F", icount, 1);
    2411          24 :    volEnvSuppAngXVF[2] =  GetVolEnvSuppAngName("X", "V", "F", icount, 2);
    2412          24 :    volEnvSuppAngXVF[3] =  GetVolEnvSuppAngName("X", "V", "F", icount, 3);
    2413             :    
    2414          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[0], 0, true, 
    2415           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,-yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    2416           4 :    fgkSizeVSupExt[0]+spar[2]));
    2417          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[1], 0, true, 
    2418           8 :    TGeoTranslation(spar[0]+fgkYVSup[0]*zRatio,yEnvP+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    2419           4 :    fgkSizeVSupExt[0]+spar[2]));
    2420          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[2], 0, true, 
    2421           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),-yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    2422           8 :    -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2423          12 :    GetEnvelopes(16+icount)->AddEnvelope(volEnvSuppAngXVF[3], 0, true, 
    2424           8 :    TGeoTranslation(-(spar[0]+fgkYVSup[0]*zRatio),yEnvM+dpar[1]+sparysave+1.0+sparysavex+spar[1],
    2425           8 :    -(fgkSizeVSupExt[0]+spar[2])),TGeoRotation("rot1",90.,180.,90.,90.,180.,0.));
    2426             : 
    2427          16 :    TString volAluAngSupportXV = GetVolAluAngSuppName("X", "V", icount);
    2428          40 :    for (Int_t i=0;i<4;i++)
    2429          32 :    GetEnvelopes(16+icount)
    2430          16 :    ->AddEnvelopeConstituentParam(volAluAngSupportXV,volEnvSuppAngXVF[i],iVolNum++,3, spar);
    2431             :    
    2432             :       // keep values of yEnvP, yEnvM
    2433           4 :    fYEnvPsave = yEnvP;
    2434           4 :    fYEnvMsave = yEnvM;   
    2435         244 : }
    2436             : 
    2437             : //
    2438             : // public methods
    2439             : //
    2440             : 
    2441             : //______________________________________________________________________________
    2442             : void AliMUONTriggerGeometryBuilder::CreateGeometry()
    2443             : {
    2444             : /// From AliMUONv1::CreateGeometry()
    2445             : 
    2446             :     /* 
    2447             :        zpos1 and zpos2 are the middle of the first and second
    2448             :        planes of station 1 (+1m for second station):
    2449             :        zpos1=(zpos1m+zpos1p)/2=(15999+16071)/2=16035 mm, thick/2=40 mm
    2450             :        zpos2=(zpos2m+zpos2p)/2=(16169+16241)/2=16205 mm, thick/2=40 mm
    2451             :        zposxm and zposxp= middles of gaz gaps within a detection plane
    2452             :        rem: the total thickness accounts for 1 mm of al on both
    2453             :        side of the RPCs (see zpos1 and zpos2)
    2454             :     */
    2455             :     
    2456           2 :     fIdtmed = fMUON->GetIdtmed()->GetArray()-1099;
    2457           1 :     fIdAir= fIdtmed[1100]; // medium 1
    2458           1 :     fIdAlu1=fIdtmed[1103]; // medium 4
    2459           1 :     fIdInox = fIdtmed[1128];       // medium 29 Stainless Steel (18%Cr,9%Ni,Fe) 
    2460             :     
    2461           2 :     Double_t dstation =  ( ( - AliMUONConstants::DefaultChamberZ(11)) - 
    2462           2 :          ( - AliMUONConstants::DefaultChamberZ(10)) ) /2.1;
    2463           1 :     Float_t par[3];
    2464           1 :     par[2] = dstation;
    2465             :  
    2466             :     Int_t icount=0;  // chamber counter (0 1 2 3)
    2467             :     
    2468           6 :     for (Int_t istation=0; istation<2; istation++) { // loop on stations
    2469          12 :       for (Int_t iplane=0; iplane<2; iplane++) { // loop on detection planes
    2470             :    
    2471           4 :           Int_t iVolNum=1; // counter Volume Number
    2472           4 :           icount = Int_t(iplane<<0)+Int_t(istation<<1);
    2473             :           
    2474           4 :           cout << "## In AliMUONTriggerGeometryBuilder " << icount << endl;
    2475             :     
    2476           4 :           par[0] = AliMUONConstants::Rmin(5+istation); 
    2477           4 :           par[1] = AliMUONConstants::Rmax(5+istation);
    2478           4 :           Char_t volName[6];
    2479           4 :           snprintf(volName,6,"%s%d", "SC",11+icount);
    2480           4 :           TVirtualMC::GetMC()->Gsvolu(volName,"TUBE", fIdAir, par, 3);
    2481             :           
    2482             : // chamber prototype
    2483           4 :           BuildChamberPrototype(icount);
    2484             : 
    2485             : // RPC supports (vertical)
    2486           4 :           BuildRPCSupportsVertical(iVolNum, icount);
    2487             :             
    2488             : // RPC supports (horizontal)
    2489             : 
    2490             : // supports for cables
    2491           4 :           BuildRPCSupportsHorizontal(icount);
    2492             :           
    2493             : // Angular supports for chambers
    2494           4 :           BuildAngularSupportForChambers(icount);
    2495             : 
    2496             : // gas pipes
    2497           4 :           BuildGasPipes(icount);
    2498             : 
    2499             : // chamber type A
    2500           4 :           BuildChamberTypeA(iVolNum, icount);
    2501             : 
    2502             : // chamber type B (plus envelope chambers B & C)   
    2503           4 :           BuildChamberTypeB(iVolNum, icount);
    2504             : 
    2505             : // chamber type D, E and F (same size)
    2506           4 :           BuildChamberTypeD(iVolNum, icount);
    2507           4 :           BuildChamberTypeE(iVolNum, icount);
    2508           4 :           BuildChamberTypeF(iVolNum, icount);
    2509           4 :         } // end loop on detection planes
    2510             :     } // end loop on stations    
    2511           1 : }
    2512             : 
    2513             : //______________________________________________________________________________
    2514             : void AliMUONTriggerGeometryBuilder::SetVolumes() 
    2515             : {
    2516             : /// Defines the volumes for the trigger chambers.
    2517             : 
    2518           2 :     if (gAlice->GetModule("SHIL")) {
    2519           2 :       SetMotherVolume(16, "YOUT2");
    2520           2 :       SetMotherVolume(17, "YOUT2");
    2521           2 :       SetMotherVolume(18, "YOUT2");
    2522           2 :       SetMotherVolume(19, "YOUT2");
    2523           1 :     }  
    2524             : 
    2525           2 :     SetVolume(16, "SC11");
    2526           2 :     SetVolume(17, "SC12");
    2527           2 :     SetVolume(18, "SC13");
    2528           2 :     SetVolume(19, "SC14");
    2529           1 : }
    2530             : 
    2531             : //______________________________________________________________________________
    2532             : void AliMUONTriggerGeometryBuilder::SetTransformations() 
    2533             : {
    2534             : /// Defines the transformations for the trigger chambers.
    2535             : 
    2536           2 :     TGeoRotation st345inclination("rotbeam");
    2537           1 :     st345inclination.RotateX(-AliMUONConstants::St345Inclination());
    2538             : 
    2539           1 :     Double_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
    2540           3 :     SetTransformation(16, TGeoTranslation(0., 0, zpos1), st345inclination);
    2541             :     
    2542           1 :     zpos1= AliMUONConstants::DefaultChamberZ(11); 
    2543           3 :     SetTransformation(17, TGeoTranslation(0., 0, zpos1), st345inclination);
    2544             : 
    2545           1 :     zpos1= AliMUONConstants::DefaultChamberZ(12); 
    2546           3 :     SetTransformation(18, TGeoTranslation(0., 0, zpos1), st345inclination);
    2547             : 
    2548           1 :     zpos1= AliMUONConstants::DefaultChamberZ(13); 
    2549           3 :     SetTransformation(19, TGeoTranslation(0., 0, zpos1), st345inclination);
    2550           1 : }
    2551             : 
    2552             : //______________________________________________________________________________
    2553             : void AliMUONTriggerGeometryBuilder::SetSensitiveVolumes()
    2554             : {
    2555             : /// Defines the sensitive volumes for trigger station chambers.
    2556             : 
    2557           3 :   GetGeometry(16)->SetSensitiveVolume("S11G");
    2558           2 :   GetGeometry(17)->SetSensitiveVolume("S12G");
    2559           2 :   GetGeometry(18)->SetSensitiveVolume("S13G");
    2560           2 :   GetGeometry(19)->SetSensitiveVolume("S14G");
    2561           1 : }
    2562             : 

Generated by: LCOV version 1.11