]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONv0.cxx
Add class AliMUONConstants with MUON specific constants using static memeber data...
[u/mrichter/AliRoot.git] / MUON / AliMUONv0.cxx
index f07164c3f01049c5e965a005d5a2ba80a887ab15..fcdbfc0f20a92d6c9deccfe9d72e701cbd1c60d9 100644 (file)
@@ -1,3 +1,45 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.9  2000/06/15 07:58:49  morsch
+Code from MUON-dev joined
+
+Revision 1.8.4.9  2000/06/12 19:20:49  morsch
+Constructor sets default geometry, segmentation and response parameters.
+
+Revision 1.8.4.8  2000/06/09 21:55:28  morsch
+Most coding rule violations corrected.
+
+Revision 1.8.4.7  2000/05/02 13:15:18  morsch
+Coding rule violations RS3, RN13 corected
+
+Revision 1.8.4.6  2000/05/02 10:24:26  morsch
+Public access to fdGas and fdAlu of AliMUONChamber replaced by getters.
+
+Revision 1.8.4.5  2000/04/26 19:58:47  morsch
+Obsolete reference to trig_ removed.
+
+Revision 1.8.4.4  2000/04/19 19:42:47  morsch
+change NCH to kNCH
+
+Revision 1.8.4.3  2000/02/17 08:17:43  morsch
+Gammas and neutrons are also scored in the stepmanager
+*/
+
 /////////////////////////////////////////////////////////
 //  Manager and hits classes for set:MUON version 0    //
 /////////////////////////////////////////////////////////
 #include <TTUBE.h>
 #include <TNode.h> 
 #include <TRandom.h> 
+#include <TLorentzVector.h> 
+#include <iostream.h>
 
 #include "AliMUONv0.h"
+#include "AliMUONChamber.h"
 #include "AliRun.h"
 #include "AliMC.h"
-#include "iostream.h"
+#include "AliMUONHit.h"
+#include "AliMUONPadHit.h"
 #include "AliCallf77.h"
 #include "AliConst.h" 
-
-#define trig trig_
-
-extern "C" void type_of_call trig(float (*)[4], float (*)[4], int& iflag);
+#include "AliMUONResponseV0.h"
+#include "AliMUONResponseTrigger.h"
+#include "AliMUONSegmentationV0.h"
+#include "AliMUONSegmentationV01.h"
+#include "AliMUONSegmentationV02.h"
+#include "AliMUONSegmentationV04.h"
+#include "AliMUONSegmentationV05.h"
+#include "AliMUONSegmentationTrigger.h"
+#include "AliMUONSegmentationTriggerX.h"
+#include "AliMUONSegmentationTriggerY.h"
+#include "AliMUONConstants.h"
 
 ClassImp(AliMUONv0)
  
 //___________________________________________
 AliMUONv0::AliMUONv0() : AliMUON()
 {
+// Constructor
     fChambers = 0;
 }
  
@@ -29,1301 +83,417 @@ AliMUONv0::AliMUONv0() : AliMUON()
 AliMUONv0::AliMUONv0(const char *name, const char *title)
        : AliMUON(name,title)
 {
-//
-//  z-Positions of Chambers
-    const Float_t zch[7]={511., 686., 971., 1245., 1445., 1610, 1710.};
-//
-//  inner diameter
-    const Float_t dmi[7]={ 35.,  47.,  67.,   86.,  100., 96., 101.96};
-//
-//  outer diameter
-    const Float_t dma[7]={183., 245., 346.,  442.,  513., 824., 874.};
-//
-    Int_t k;
-
-    fChambers = new TObjArray(14);
-    
-    for (Int_t i=0; i<7; i++) {
-       for (Int_t j=0; j< 2; j++) {
-//
-//    
-//    Default Parameters for Muon Tracking Stations
-           k=2*i+j;
-//
-           (*fChambers)[k] = new AliMUONchamber();
-           AliMUONchamber* chamber = (AliMUONchamber*) (*fChambers)[k];
-           chamber->SetGid(0);
-           chamber->SetZPOS(zch[i]);
-//
-           chamber->InitGeo(zch[i]);
-           chamber->frMin=dmi[i]/2.;
-           chamber->frMax=dma[i]/2.;
-//
-       } // Chamber j in 
-    }     // Station i
-    fMaxStepGas=0.01; 
-    fMaxStepAlu=0.1; 
-    fMaxDestepGas=-1;
-    fMaxDestepAlu=-1;
-}
-
-//___________________________________________
-void AliMUONv0::Trigger(Float_t (*x)[4], Float_t (*y)[4], Int_t& iflag)
-{
-  trig(x,y,iflag);
-}
-
-//___________________________________________
-void AliMUONv0::CreateGeometry()
-{
-    Int_t *idtmed = gAlice->Idtmed();
-    AliMC* pMC = AliMC::GetMC();
-//
-//   Note: all chambers have the same structure, which could be 
-//   easily parameterised. This was intentionally not done in order
-//   to give a starting point for the implementation of the actual 
-//   design of each station. 
-//
-//   Distance between Stations
-     const Float_t dstation = 8.;
-//
-     Float_t bpar[3];
-     Float_t tpar[3];
-     Float_t tspar[5], pgpar[10];
-     Float_t zpos1, zpos2, zfpos;
-     Float_t dframep=3.;
-     Float_t dframez=0.9;
-     Float_t dr, rMin;
-//
-//   Rotation matrices in the x-y plane  
-     Int_t idrotm[1199];
-//   phi=   0 deg
-     AliMatrix(idrotm[1100],  90.,   0., 90.,  90., 0., 0.);
-//   phi=  90 deg
-     AliMatrix(idrotm[1101],  90.,  90., 90., 180., 0., 0.);
-//   phi= 180 deg
-     AliMatrix(idrotm[1102],  90., 180., 90., 270., 0., 0.);
-//   phi= 270 deg
-     AliMatrix(idrotm[1103],  90., 270., 90.,   0., 0., 0.);
-//
-     Float_t phi=2*TMath::Pi()/12/2;
-
-//
-//   pointer to the current chamber
-     AliMUONchamber *iChamber;
-//********************************************************************
-//                            Station 1                             **
-//********************************************************************
-//  CONCENTRIC
-     iChamber=(AliMUONchamber*) (*fChambers)[0];
-     zpos1=iChamber->ZPosition()-dstation/2; 
-     zpos2=zpos1+dstation; 
-     zfpos=-(iChamber->fdGas+dframez)/2;
-     
-//
-//   Mother volume
-     tpar[0] = iChamber->frMin-dframep; 
-     tpar[1] = (iChamber->frMax+dframep)/TMath::Cos(phi);
-     tpar[2] = dstation/2;
-
-     pMC->Gsvolu("C01M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gsvolu("C02M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gspos("C01M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     pMC->Gspos("C02M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
-     pgpar[0] = 360/12/2;
-     pgpar[1] = 360.;
-     pgpar[2] = 12.;
-     pgpar[3] =   2;
-     pgpar[4] = -dframez/2;
-     pgpar[5] = iChamber->frMax;
-     pgpar[6] = pgpar[5]+dframep;
-     pgpar[7] = +dframez/2;
-     pgpar[8] = pgpar[5];
-     pgpar[9] = pgpar[6];
-     pMC->Gsvolu("C01O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gsvolu("C02O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gspos("C01O",1,"C01M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C01O",2,"C01M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C02O",1,"C02M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C02O",2,"C02M", 0.,0.,+zfpos,  0,"ONLY");
-//
-// Inner frame
-     tpar[0]= iChamber->frMin-dframep;
-     tpar[1]= iChamber->frMin;
-     tpar[2]= dframez/2;
-     pMC->Gsvolu("C01I", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C02I", "TUBE", idtmed[1103], tpar, 3);
-
-     pMC->Gspos("C01I",1,"C01M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C01I",2,"C01M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C02I",1,"C02M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C02I",2,"C02M", 0.,0.,+zfpos,  0,"ONLY");
-//
-// Frame Crosses
-     bpar[0] = (iChamber->frMax - iChamber->frMin)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = dframez/2;
-     pMC->Gsvolu("C01B", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C02B", "BOX", idtmed[1103], bpar, 3);
-
-     pMC->Gspos("C01B",1,"C01M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C01B",2,"C01M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C01B",3,"C01M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C01B",4,"C01M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C01B",5,"C01M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C01B",6,"C01M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C01B",7,"C01M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C01B",8,"C01M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-
-     pMC->Gspos("C02B",1,"C02M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C02B",2,"C02M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C02B",3,"C02M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C02B",4,"C02M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C02B",5,"C02M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C02B",6,"C02M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C02B",7,"C02M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C02B",8,"C02M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-
-//
-//   Chamber Material represented by Alu sheet
-     tpar[0]= iChamber->frMin+dframep*2;
-     tpar[1]= iChamber->frMax-dframep*2;
-     tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
-     pMC->Gsvolu("C01A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C02A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gspos("C01A", 1, "C01M", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C02A", 1, "C02M", 0., 0., 0.,  0, "ONLY");
-//     
-//   Sensitive volumes
-     // tpar[2] = iChamber->fdGas;
-     tpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C01G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gsvolu("C02G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gspos("C01G", 1, "C01A", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C02G", 1, "C02A", 0., 0., 0.,  0, "ONLY");
-//
-// Frame Crosses to be placed inside gas 
-     dr = (iChamber->frMax - iChamber->frMin);
-     bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C01F", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C02F", "BOX", idtmed[1103], bpar, 3);
-
-     pMC->Gspos("C01F",1,"C01G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C01F",2,"C01G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C01F",3,"C01G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C01F",4,"C01G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-
-     pMC->Gspos("C02F",1,"C02G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C02F",2,"C02G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C02F",3,"C02G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C02F",4,"C02G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-//
-//
-//********************************************************************
-//                            Station 2                             **
-//********************************************************************
-     iChamber=(AliMUONchamber*) (*fChambers)[2];
-     zpos1=iChamber->ZPosition()-dstation/2; 
-     zpos2=zpos1+dstation; 
-     zfpos=-(iChamber->fdGas+dframez)/2;
-     
-//
-//   Mother volume
-     tpar[0] = iChamber->frMin-dframep; 
-     tpar[1] = (iChamber->frMax+dframep)/TMath::Cos(phi);
-     tpar[2] = dstation/2;
-
-     pMC->Gsvolu("C03M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gsvolu("C04M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gspos("C03M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     pMC->Gspos("C04M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
-     pgpar[0] = 360/12/2;
-     pgpar[1] = 360.;
-     pgpar[2] = 12.;
-     pgpar[3] =   2;
-     pgpar[4] = -dframez/2;
-     pgpar[5] = iChamber->frMax;
-     pgpar[6] = pgpar[5]+dframep;
-     pgpar[7] = +dframez/2;
-     pgpar[8] = pgpar[5];
-     pgpar[9] = pgpar[6];
-     pMC->Gsvolu("C03O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gsvolu("C04O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gspos("C03O",1,"C03M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C03O",2,"C03M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C04O",1,"C04M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C04O",2,"C04M", 0.,0.,+zfpos,  0,"ONLY");
-//
-// Inner frame
-     tpar[0]= iChamber->frMin-dframep;
-     tpar[1]= iChamber->frMin;
-     tpar[2]= dframez/2;
-     pMC->Gsvolu("C03I", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C04I", "TUBE", idtmed[1103], tpar, 3);
-
-     pMC->Gspos("C03I",1,"C03M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C03I",2,"C03M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C04I",1,"C04M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C04I",2,"C04M", 0.,0.,+zfpos,  0,"ONLY");
-//
-// Frame Crosses
-     bpar[0] = (iChamber->frMax - iChamber->frMin)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = dframez/2;
-     pMC->Gsvolu("C03B", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C04B", "BOX", idtmed[1103], bpar, 3);
-
-     pMC->Gspos("C03B",1,"C03M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C03B",2,"C03M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C03B",3,"C03M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C03B",4,"C03M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C03B",5,"C03M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C03B",6,"C03M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C03B",7,"C03M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C03B",8,"C03M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-
-     pMC->Gspos("C04B",1,"C04M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C04B",2,"C04M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C04B",3,"C04M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C04B",4,"C04M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C04B",5,"C04M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C04B",6,"C04M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C04B",7,"C04M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C04B",8,"C04M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-
-//
-//   Chamber Material represented by Alu sheet
-     tpar[0]= iChamber->frMin+dframep*2;
-     tpar[1]= iChamber->frMax-dframep*2;
-     tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
-     pMC->Gsvolu("C03A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C04A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gspos("C03A", 1, "C03M", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C04A", 1, "C04M", 0., 0., 0.,  0, "ONLY");
-//     
-//   Sensitive volumes
-     // tpar[2] = iChamber->fdGas;
-     tpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C03G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gsvolu("C04G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gspos("C03G", 1, "C03A", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C04G", 1, "C04A", 0., 0., 0.,  0, "ONLY");
-//
-// Frame Crosses to be placed inside gas 
-     dr = (iChamber->frMax - iChamber->frMin);
-     bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C03F", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C04F", "BOX", idtmed[1103], bpar, 3);
-
-     pMC->Gspos("C03F",1,"C03G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C03F",2,"C03G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C03F",3,"C03G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C03F",4,"C03G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-
-     pMC->Gspos("C04F",1,"C04G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C04F",2,"C04G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C04F",3,"C04G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C04F",4,"C04G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-
-//********************************************************************
-//                            Station 3                             **
-//********************************************************************
-//  CONCENTRIC
-     iChamber=(AliMUONchamber*) (*fChambers)[4];
-     zpos1=iChamber->ZPosition(); // 975-13.75
-     zpos2=zpos1 // +dstation;
-                    +27.5;
-//
-//   Mother volume
-     tpar[0] = iChamber->frMin; 
-     tpar[1]= TMath::Sqrt(iChamber->frMax*iChamber->frMax + dframep*dframep) ;
-     tpar[2] = // 3.; 
-            5.325*2;
-     pMC->Gsvolu("C05M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gsvolu("C06M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     pMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-//
-//   Mother volume for one quadrant
-     tspar[0]= iChamber->frMin;
-     tspar[1]= TMath::Sqrt(iChamber->frMax*iChamber->frMax + dframep*dframep) ;
-     tspar[2]= // dframez; 
-                 5.325;
-     tspar[3] = 0.-TMath::ATan2(dframep,iChamber->frMin)*180/kPI;
-     tspar[4] = 90.+TMath::ATan2(dframep,iChamber->frMin)*180/kPI;
-     pMC->Gsvolu("C05Q", "TUBS", idtmed[1100], tspar, 5);
-     pMC->Gsvolu("C06Q", "TUBS", idtmed[1100], tspar, 5);
-//   Position the four quadrants
-     pMC->Gspos("C05Q",1,"C05M", 0., 0., 5.325, idrotm[1100], "ONLY");
-     pMC->Gspos("C05Q",2,"C05M", 0., 0.,-5.325, idrotm[1101], "ONLY");
-     pMC->Gspos("C05Q",3,"C05M", 0., 0., 5.325, idrotm[1102], "ONLY");
-     pMC->Gspos("C05Q",4,"C05M", 0., 0.,-5.325, idrotm[1103], "ONLY");
-
-     pMC->Gspos("C06Q",1,"C06M", 0., 0., 5.325, idrotm[1100], "ONLY");
-     pMC->Gspos("C06Q",2,"C06M", 0., 0.,-5.325, idrotm[1101], "ONLY");
-     pMC->Gspos("C06Q",3,"C06M", 0., 0., 5.325, idrotm[1102], "ONLY");
-     pMC->Gspos("C06Q",4,"C06M", 0., 0.,-5.325, idrotm[1103], "ONLY");
-// Aluminium frames
-// Outer frame
-     tspar[0]= iChamber->frMax-dframep*2;
-     tspar[1]= iChamber->frMax;
-     tspar[3] = 0.;
-     tspar[4] = 90.;
-     pMC->Gsvolu("C05O", "TUBS", idtmed[1100], tspar, 5);
-     pMC->Gsvolu("C06O", "TUBS", idtmed[1100], tspar, 5);
-     pMC->Gspos("C05O",1,"C05Q", 0.,0.,0.,  0,"ONLY");
-     pMC->Gspos("C06O",1,"C06Q", 0.,0.,0.,  0,"ONLY");
-//
-// Inner frame
-     tspar[0]= iChamber->frMin;
-     tspar[1]= iChamber->frMin+dframep*2;
-     pMC->Gsvolu("C05I", "TUBS", idtmed[1100], tspar, 5);
-     pMC->Gsvolu("C06I", "TUBS", idtmed[1100], tspar, 5);
-     pMC->Gspos("C05I",1,"C05Q", 0.,0.,0.,  0,"ONLY");
-     pMC->Gspos("C06I",1,"C06Q", 0.,0.,0.,  0,"ONLY");
-//
-// Boundary half frame
-     bpar[0] = (iChamber->frMax - iChamber->frMin)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = 5.325;
-     pMC->Gsvolu("C05B", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C06B", "BOX", idtmed[1103], bpar, 3);
-//place 2 boudaries
-     pMC->Gspos("C05B",1,"C05Q", iChamber->frMin+bpar[0] ,-bpar[1],0.,  idrotm[1100],"ONLY");
-     pMC->Gspos("C05B",2,"C05Q", -bpar[1],iChamber->frMin+bpar[0] ,0.,  idrotm[1101],"ONLY");
-     pMC->Gspos("C06B",1,"C06Q", iChamber->frMin+bpar[0] ,-bpar[1],0.,  idrotm[1100],"ONLY");
-     pMC->Gspos("C06B",2,"C06Q", -bpar[1],iChamber->frMin+bpar[0] ,0.,  idrotm[1101],"ONLY");
-//
-// Boundary second half frame (should not overlapp with sensitive surface, nor frames)
-//          Effective inner radius due to circle effect
-     rMin =  TMath::Sqrt(
-        (iChamber->frMin+2*dframep)*(iChamber->frMin+2*dframep) - dframep*dframep );
-     bpar[0] = (iChamber->frMax - 2*dframep - rMin ) /2;
-     bpar[2] = (5.325- (0.055 + 0.325)) / 2;
-     pMC->Gsvolu("C05H", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C06H", "BOX", idtmed[1103], bpar, 3);
-//place 2 boudaries
-     pMC->Gspos("C05H",1,"C05Q", rMin+bpar[0],bpar[1],  0.055+0.325+bpar[2] , idrotm[1100],"ONLY");
-     pMC->Gspos("C05H",2,"C05Q", rMin+bpar[0],bpar[1],-(0.055+0.325+bpar[2]), idrotm[1100],"ONLY");
-     pMC->Gspos("C05H",3,"C05Q", bpar[1],rMin+bpar[0],  0.055+0.325+bpar[2] , idrotm[1101],"ONLY");
-     pMC->Gspos("C05H",4,"C05Q", bpar[1],rMin+bpar[0],-(0.055+0.325+bpar[2]), idrotm[1101],"ONLY");
-     pMC->Gspos("C06H",1,"C06Q", rMin+bpar[0],bpar[1],  0.055+0.325+bpar[2] , idrotm[1100],"ONLY");
-     pMC->Gspos("C06H",2,"C06Q", rMin+bpar[0],bpar[1],-(0.055+0.325+bpar[2]), idrotm[1100],"ONLY");
-     pMC->Gspos("C06H",3,"C06Q", bpar[1],rMin+bpar[0],  0.055+0.325+bpar[2] , idrotm[1101],"ONLY");
-     pMC->Gspos("C06H",4,"C06Q", bpar[1],rMin+bpar[0],-(0.055+0.325+bpar[2]), idrotm[1101],"ONLY");
-//
-//   Chamber Material represented by Alu sheet
-     //     tspar[2] = (iChamber->fdAlu)+(iChamber->fdGas);
-     tspar[0]= iChamber->frMin+dframep*2;
-     tspar[1]= iChamber->frMax-dframep*2;
-     tspar[2] = 0.055 + 0.325;
-     pMC->Gsvolu("C05A", "TUBS", idtmed[1103], tspar, 5);
-     pMC->Gsvolu("C06A", "TUBS", idtmed[1103], tspar, 5);
-     pMC->Gspos("C05A", 1, "C05Q", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C06A", 1, "C06Q", 0., 0., 0.,  0, "ONLY");
-//     
-//   Sensitive volumes
-     // tpar[2] = iChamber->fdGas;
-     tspar[2] = 0.325;
-     pMC->Gsvolu("C05G", "TUBS", idtmed[1105], tspar, 5);
-     pMC->Gsvolu("C06G", "TUBS", idtmed[1105], tspar, 5);
-     pMC->Gspos("C05G", 1, "C05A", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C06G", 1, "C06A", 0., 0., 0.,  0, "ONLY");
-//
-//   Overwrite sensitive volume with ALU
-// Overwrite Gaz volume
-     bpar[2] = 0.325;
-     pMC->Gsvolu("C05Z", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C06Z", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gspos("C05Z",1,"C05G", rMin+bpar[0] ,bpar[1],0.,  idrotm[1100],"ONLY");
-     pMC->Gspos("C05Z",2,"C05G", bpar[1], rMin+bpar[0] ,0., idrotm[1101],"ONLY");
-     pMC->Gspos("C06Z",1,"C06G", rMin+bpar[0] ,bpar[1],0.,  idrotm[1100],"ONLY");
-     pMC->Gspos("C06Z",2,"C06G", bpar[1], rMin+bpar[0] ,0., idrotm[1101],"ONLY");
+// Constructor
+    fChambers = 0;
 
-//********************************************************************
-//                            Station 4                             **
-//********************************************************************
-     iChamber=(AliMUONchamber*) (*fChambers)[6];
-     zpos1=iChamber->ZPosition()-dstation/2; 
-     zpos2=zpos1+dstation; 
-     zfpos=-(iChamber->fdGas+dframez)/2;
-     
+    SetIshunt(0);
+    SetMaxStepGas(0.1);
+    SetMaxStepAlu(0.1);
 //
-//   Mother volume
-     tpar[0] = iChamber->frMin-dframep; 
-     tpar[1] = (iChamber->frMax+dframep)/TMath::Cos(phi);
-     tpar[2] = dstation/2;
-
-     pMC->Gsvolu("C07M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gsvolu("C08M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gspos("C07M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     pMC->Gspos("C08M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
-     pgpar[0] = 360/12/2;
-     pgpar[1] = 360.;
-     pgpar[2] = 12.;
-     pgpar[3] =   2;
-     pgpar[4] = -dframez/2;
-     pgpar[5] = iChamber->frMax;
-     pgpar[6] = pgpar[5]+dframep;
-     pgpar[7] = +dframez/2;
-     pgpar[8] = pgpar[5];
-     pgpar[9] = pgpar[6];
-     pMC->Gsvolu("C07O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gsvolu("C08O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gspos("C07O",1,"C07M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C07O",2,"C07M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C08O",1,"C08M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C08O",2,"C08M", 0.,0.,+zfpos,  0,"ONLY");
+// Version 0
 //
-// Inner frame
-     tpar[0]= iChamber->frMin-dframep;
-     tpar[1]= iChamber->frMin;
-     tpar[2]= dframez/2;
-     pMC->Gsvolu("C07I", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C08I", "TUBE", idtmed[1103], tpar, 3);
-
-     pMC->Gspos("C07I",1,"C07M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C07I",2,"C07M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C08I",1,"C08M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C08I",2,"C08M", 0.,0.,+zfpos,  0,"ONLY");
+// First define the number of planes that are segmented (1 or 2) by a call
+// to SetNsec. 
+// Then chose for each chamber (chamber plane) the segmentation 
+// and response model.
+// They should be equal for the two chambers of each station. In a future
+// version this will be enforced.
 //
-// Frame Crosses
-     bpar[0] = (iChamber->frMax - iChamber->frMin)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = dframez/2;
-     pMC->Gsvolu("C07B", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C08B", "BOX", idtmed[1103], bpar, 3);
-
-     pMC->Gspos("C07B",1,"C07M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C07B",2,"C07M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C07B",3,"C07M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C07B",4,"C07M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C07B",5,"C07M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C07B",6,"C07M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C07B",7,"C07M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C07B",8,"C07M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-
-     pMC->Gspos("C08B",1,"C08M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C08B",2,"C08M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C08B",3,"C08M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C08B",4,"C08M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C08B",5,"C08M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C08B",6,"C08M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C08B",7,"C08M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C08B",8,"C08M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-
-//
-//   Chamber Material represented by Alu sheet
-     tpar[0]= iChamber->frMin+dframep*2;
-     tpar[1]= iChamber->frMax-dframep*2;
-     tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
-     pMC->Gsvolu("C07A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C08A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gspos("C07A", 1, "C07M", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C08A", 1, "C08M", 0., 0., 0.,  0, "ONLY");
-//     
-//   Sensitive volumes
-     // tpar[2] = iChamber->fdGas;
-     tpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C07G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gsvolu("C08G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gspos("C07G", 1, "C07A", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C08G", 1, "C08A", 0., 0., 0.,  0, "ONLY");
-//
-// Frame Crosses to be placed inside gas 
-     dr = (iChamber->frMax - iChamber->frMin);
-     bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C07F", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C08F", "BOX", idtmed[1103], bpar, 3);
-
-     pMC->Gspos("C07F",1,"C07G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C07F",2,"C07G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C07F",3,"C07G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C07F",4,"C07G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-
-     pMC->Gspos("C08F",1,"C08G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C08F",2,"C08G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C08F",3,"C08G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C08F",4,"C08G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-
-//********************************************************************
-//                            Station 5                             **
-//********************************************************************
-     iChamber=(AliMUONchamber*) (*fChambers)[8];
-     zpos1=iChamber->ZPosition()-dstation/2; 
-     zpos2=zpos1+dstation; 
-     zfpos=-(iChamber->fdGas+dframez)/2;
-     
+//  
+    Int_t chamber;
+    Int_t station;
+// Default response
+    AliMUONResponseV0* response0 = new AliMUONResponseV0;
+    response0->SetSqrtKx3(0.7131);
+    response0->SetKx2(1.0107);
+    response0->SetKx4(0.4036);
+    response0->SetSqrtKy3(0.7642);
+    response0->SetKy2(0.9706);
+    response0->SetKy4(0.3831);
+    response0->SetPitch(0.25);
+    response0->SetSigmaIntegration(10.);
+    response0->SetChargeSlope(50);
+    response0->SetChargeSpread(0.18, 0.18);
+    response0->SetMaxAdc(4096);
+    response0->SetZeroSuppression(6);
+//--------------------------------------------------------
+// Configuration for Chamber TC1/2  (Station 1) ----------           
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    Float_t rseg1[4]={17.5, 55.2, 71.3, 95.5};
+    Int_t   nseg1[4]={4, 4, 2, 1};
+//
+    chamber=1;
+//^^^^^^^^^
+    SetNsec(chamber-1,2);
+//
+    AliMUONSegmentationV01 *seg11=new AliMUONSegmentationV01;
+    
+    seg11->SetSegRadii(rseg1);
+    seg11->SetPadSize(3, 0.5);
+    seg11->SetDAnod(3.0/3./4);
+    seg11->SetPadDivision(nseg1);
+    
+    SetSegmentationModel(chamber-1, 1, seg11);
 //
-//   Mother volume
-     tpar[0] = iChamber->frMin-dframep; 
-     tpar[1] = (iChamber->frMax+dframep)/TMath::Cos(phi);
-     tpar[2] = dstation/2;
+    AliMUONSegmentationV02 *seg12=new AliMUONSegmentationV02;
+    seg12->SetSegRadii(rseg1); 
+    seg12->SetPadSize(0.75, 2.0);
+    seg12->SetDAnod(3.0/3./4);
+    seg12->SetPadDivision(nseg1);
+    
+    SetSegmentationModel(chamber-1, 2, seg12);
+    
+    SetResponseModel(chamber-1, response0);        
+    
+    chamber=2;
+//^^^^^^^^^
+//
+    SetNsec(chamber-1,2);
+//
+    AliMUONSegmentationV01 *seg21=new AliMUONSegmentationV01;
+    seg21->SetSegRadii(rseg1);
+    seg21->SetPadSize(3, 0.5);
+    seg21->SetDAnod(3.0/3./4);
+    seg21->SetPadDivision(nseg1);
+    SetSegmentationModel(chamber-1, 1, seg21);
+//
+    AliMUONSegmentationV02 *seg22=new AliMUONSegmentationV02;
+    seg22->SetSegRadii(rseg1); 
+    seg22->SetPadSize(0.75, 2.);
+    seg22->SetDAnod(3.0/3./4);
+    seg22->SetPadDivision(nseg1);
+    SetSegmentationModel(chamber-1, 2, seg22);
+    
+    SetResponseModel(chamber-1, response0);        
+//
+//--------------------------------------------------------
+// Configuration for Chamber TC3/4 -----------------------
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    Float_t rseg2[4]={23.5, 47.1, 87.7, 122.5};
+    Int_t   nseg2[4]={4, 4, 2, 1};
+//
+    chamber=3;
+//^^^^^^^^^
+    SetNsec(chamber-1,2);
+//
+    AliMUONSegmentationV01 *seg31=new AliMUONSegmentationV01;
+    seg31->SetSegRadii(rseg2);
+    seg31->SetPadSize(6, 0.5);
+    seg31->SetDAnod(3.0/3./4);
+    seg31->SetPadDivision(nseg2);
+    SetSegmentationModel(chamber-1, 1, seg31);
+//
+    AliMUONSegmentationV02 *seg32=new AliMUONSegmentationV02;
+    seg32->SetSegRadii(rseg2); 
+    seg32->SetPadSize(0.75, 4.);
+    seg32->SetPadDivision(nseg2);
+    seg32->SetDAnod(3.0/3./4);
+    
+    SetSegmentationModel(chamber-1, 2, seg32);
+    
+    SetResponseModel(chamber-1, response0);        
+    
+    chamber=4;
+//^^^^^^^^^
+//
+    SetNsec(chamber-1,2);
+//
+    AliMUONSegmentationV01 *seg41=new AliMUONSegmentationV01;
+    seg41->SetSegRadii(rseg2);
+    seg41->SetPadSize(6, 0.5);
+    seg41->SetDAnod(3.0/3./4);
+    seg41->SetPadDivision(nseg2);
+    SetSegmentationModel(chamber-1, 1, seg41);
+//
+    AliMUONSegmentationV02 *seg42=new AliMUONSegmentationV02;
+    seg42->SetSegRadii(rseg2); 
+    seg42->SetPadSize(0.75, 4.);
+    seg42->SetPadDivision(nseg2);
+    seg42->SetDAnod(3.0/3./4);
+    
+    SetSegmentationModel(chamber-1, 2, seg42);
+    
+    SetResponseModel(chamber-1, response0);        
+
+
+//--------------------------------------------------------
+// Configuration for Chamber TC5/6 -----------------------
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    chamber=5;
+//^^^^^^^^^
+    SetNsec(chamber-1,2);
+//
+    AliMUONSegmentationV01 *seg51=new AliMUONSegmentationV01;
+    seg51->SetSegRadii(rseg2);
+    seg51->SetPadSize(6, 0.5);
+    seg51->SetDAnod(3.0/3./4);
+    seg51->SetPadDivision(nseg2);
+    SetSegmentationModel(chamber-1, 1, seg51);
+//
+    AliMUONSegmentationV02 *seg52=new AliMUONSegmentationV02;
+    seg52->SetSegRadii(rseg2); 
+    seg52->SetPadSize(0.75, 4.);
+    seg52->SetPadDivision(nseg2);
+    seg52->SetDAnod(3.0/3./4);
+    
+    SetSegmentationModel(chamber-1, 2, seg52);
+    SetResponseModel(chamber-1, response0);        
+    
+    chamber=6;
+//^^^^^^^^^
+//
+    SetNsec(chamber-1,2);
+//
+    AliMUONSegmentationV01 *seg61=new AliMUONSegmentationV01;
+    seg61->SetSegRadii(rseg2);
+    seg61->SetPadSize(6, 0.5);
+    seg61->SetDAnod(3.0/3./4);
+    seg61->SetPadDivision(nseg2);
+    SetSegmentationModel(chamber-1, 1, seg61);
+//
+    AliMUONSegmentationV02 *seg62=new AliMUONSegmentationV02;
+    seg62->SetSegRadii(rseg2); 
+    seg62->SetPadSize(0.75, 4.);
+    seg62->SetPadDivision(nseg2);
+    seg62->SetDAnod(3.0/3./4);
+    
+    SetSegmentationModel(chamber-1, 2, seg62);
+    
+    SetResponseModel(chamber-1, response0);        
 
-     pMC->Gsvolu("C09M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gsvolu("C10M", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gspos("C09M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     pMC->Gspos("C10M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
-// Aluminium frames
-// Outer frames
-     pgpar[0] = 360/12/2;
-     pgpar[1] = 360.;
-     pgpar[2] = 12.;
-     pgpar[3] =   2;
-     pgpar[4] = -dframez/2;
-     pgpar[5] = iChamber->frMax;
-     pgpar[6] = pgpar[5]+dframep;
-     pgpar[7] = +dframez/2;
-     pgpar[8] = pgpar[5];
-     pgpar[9] = pgpar[6];
-     pMC->Gsvolu("C09O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gsvolu("C10O", "PGON", idtmed[1103], pgpar, 10);
-     pMC->Gspos("C09O",1,"C09M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C09O",2,"C09M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C10O",1,"C10M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C10O",2,"C10M", 0.,0.,+zfpos,  0,"ONLY");
-//
-// Inner frame
-     tpar[0]= iChamber->frMin-dframep;
-     tpar[1]= iChamber->frMin;
-     tpar[2]= dframez/2;
-     pMC->Gsvolu("C09I", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C10I", "TUBE", idtmed[1103], tpar, 3);
 
-     pMC->Gspos("C09I",1,"C09M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C09I",2,"C09M", 0.,0.,+zfpos,  0,"ONLY");
-     pMC->Gspos("C10I",1,"C10M", 0.,0.,-zfpos,  0,"ONLY");
-     pMC->Gspos("C10I",2,"C10M", 0.,0.,+zfpos,  0,"ONLY");
 //
-// Frame Crosses
-     bpar[0] = (iChamber->frMax - iChamber->frMin)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = dframez/2;
-     pMC->Gsvolu("C09B", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C10B", "BOX", idtmed[1103], bpar, 3);
+// Station 3
+    station=3;
+    SetPadSize(station, 1, 0.975, 0.55);
 
-     pMC->Gspos("C09B",1,"C09M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C09B",2,"C09M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C09B",3,"C09M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C09B",4,"C09M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C09B",5,"C09M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C09B",6,"C09M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C09B",7,"C09M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C09B",8,"C09M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
+//--------------------------------------------------------
+// Configuration for Chamber TC7/8  (Station 4) ----------           
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-     pMC->Gspos("C10B",1,"C10M", +iChamber->frMin+bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C10B",2,"C10M", -iChamber->frMin-bpar[0] , 0,-zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C10B",3,"C10M", 0, +iChamber->frMin+bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C10B",4,"C10M", 0, -iChamber->frMin-bpar[0] ,-zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C10B",5,"C10M", +iChamber->frMin+bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C10B",6,"C10M", -iChamber->frMin-bpar[0] , 0,+zfpos, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C10B",7,"C10M", 0, +iChamber->frMin+bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C10B",8,"C10M", 0, -iChamber->frMin-bpar[0] ,+zfpos, 
-idrotm[1101],"ONLY");
+    Int_t   nseg4[4]={4, 4, 2, 1};
 
+    chamber=7;
+//^^^^^^^^^
+    SetNsec(chamber-1,2);
 //
-//   Chamber Material represented by Alu sheet
-     tpar[0]= iChamber->frMin+dframep*2;
-     tpar[1]= iChamber->frMax-dframep*2;
-     tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
-     pMC->Gsvolu("C09A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gsvolu("C10A", "TUBE", idtmed[1103], tpar, 3);
-     pMC->Gspos("C09A", 1, "C09M", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C10A", 1, "C10M", 0., 0., 0.,  0, "ONLY");
-//     
-//   Sensitive volumes
-     // tpar[2] = iChamber->fdGas;
-     tpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C09G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gsvolu("C10G", "TUBE", idtmed[1105], tpar, 3);
-     pMC->Gspos("C09G", 1, "C09A", 0., 0., 0.,  0, "ONLY");
-     pMC->Gspos("C10G", 1, "C10A", 0., 0., 0.,  0, "ONLY");
-//
-// Frame Crosses to be placed inside gas 
-     dr = (iChamber->frMax - iChamber->frMin);
-     bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
-     bpar[1] = dframep/2;
-     bpar[2] = iChamber->fdGas/2;
-     pMC->Gsvolu("C09F", "BOX", idtmed[1103], bpar, 3);
-     pMC->Gsvolu("C10F", "BOX", idtmed[1103], bpar, 3);
-
-     pMC->Gspos("C09F",1,"C09G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C09F",2,"C09G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C09F",3,"C09G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C09F",4,"C09G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-
-     pMC->Gspos("C10F",1,"C10G", +iChamber->frMin+bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C10F",2,"C10G", -iChamber->frMin-bpar[0] , 0, 0, 
-idrotm[1100],"ONLY");
-     pMC->Gspos("C10F",3,"C10G", 0, +iChamber->frMin+bpar[0] , 0, 
-idrotm[1101],"ONLY");
-     pMC->Gspos("C10F",4,"C10G", 0, -iChamber->frMin-bpar[0] , 0, 
-idrotm[1101],"ONLY");
-
-///////////////////////////////////////
-// GEOMETRY FOR THE TRIGGER CHAMBERS //
-///////////////////////////////////////
-     
-//  Distance between planes inside each trigger station
-    const Float_t DTPLANES = 15.;
-
-//  Parameters of the Trigger Chambers
-    //Station 1
-               
-    const Float_t X_MC1_MIN=38.;       
-    const Float_t X_MC1_MED=51.;                                
-    const Float_t X_MC1_MAX=272.;                               
-    const Float_t Y_MC1_MIN=34.;                              
-    const Float_t Y_MC1_MAX=51.;                              
-    const Float_t R_MIN1=48.;
-    const Float_t R_MAX1=64.;
-
-// Station 1
-     iChamber=(AliMUONchamber*) (*fChambers)[10];
-     zpos1=iChamber->ZPosition();
-     zpos2=zpos1+DTPLANES;
-
-// Mother volume definition     
-     tpar[0] = iChamber->frMin; 
-     tpar[1] = iChamber->frMax;
-     tpar[2] = 0.4;    
-     pMC->Gsvolu("CM11", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gsvolu("CM12", "TUBE", idtmed[1100], tpar, 3);
-     
-// Definition of the flange between the beam shielding and the RPC 
-     tpar[0]= R_MIN1;
-     tpar[1]= R_MAX1;
-     tpar[2]= 0.4;
-   
-     pMC->Gsvolu("CF1A", "TUBE", idtmed[1103], tpar, 3);     //Al
-     pMC->Gspos("CF1A", 1, "CM11", 0., 0., 0., 0, "MANY");
-     pMC->Gspos("CF1A", 2, "CM12", 0., 0., 0., 0, "MANY");
-
-// Definition of prototype for chambers in the first plane     
-          
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     pMC->Gsvolu("CC1A", "BOX ", idtmed[1103], tpar, 0);     //Al      
-     pMC->Gsvolu("CB1A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     pMC->Gsvolu("CG1A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
-// chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t X_MC1A=X_MC1_MED+(X_MC1_MAX-X_MC1_MED)/2.;
-     const Float_t Y_MC1A=0.;
-     const Float_t Z_MC1A=0.;
-          
-     tpar[2] = 0.1;    
-     pMC->Gsposp("CG1A", 1, "CB1A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     pMC->Gsposp("CB1A", 1, "CC1A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.4;
-     tpar[0] = (X_MC1_MAX-X_MC1_MED)/2.;
-     tpar[1] = Y_MC1_MIN;
-     pMC->Gsposp("CC1A", 1, "CM11",X_MC1A,Y_MC1A,Z_MC1A, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 2, "CM11",-X_MC1A,Y_MC1A,Z_MC1A, 0, "ONLY", tpar, 3);
-     
-//  chamber type B    
-     tpar[0] = (X_MC1_MAX-X_MC1_MIN)/2.;
-     tpar[1] = (Y_MC1_MAX-Y_MC1_MIN)/2.;
-     
-     const Float_t X_MC1B=X_MC1_MIN+tpar[0];
-     const Float_t Y_MC1B=Y_MC1_MIN+tpar[1];
-     const Float_t Z_MC1B=0.;
-
-     pMC->Gsposp("CC1A", 3, "CM11",X_MC1B,Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 4, "CM11",-X_MC1B,Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 5, "CM11",X_MC1B,-Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 6, "CM11",-X_MC1B,-Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
-     
-//  chamber type C        
-     tpar[0] = X_MC1_MAX/2;
-     tpar[1] = Y_MC1_MAX/2;
-     
-     const Float_t X_MC1C=tpar[0];
-     const Float_t Y_MC1C=Y_MC1_MAX+tpar[1];
-     const Float_t Z_MC1C=0.;
-     
-     pMC->Gsposp("CC1A", 7, "CM11",X_MC1C,Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 8, "CM11",-X_MC1C,Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 9, "CM11",X_MC1C,-Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 10, "CM11",-X_MC1C,-Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
-     
-//  chamber type D        
-     tpar[0] = X_MC1_MAX/2.;
-     tpar[1] = Y_MC1_MIN;
-     
-     const Float_t X_MC1D=tpar[0];
-     const Float_t Z_MC1D=0.;
-     
-     Float_t Y_MC1D=4.*Y_MC1_MIN;
-     pMC->Gsposp("CC1A", 11, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 12, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 13, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 14, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-
-     Y_MC1D=6.*Y_MC1_MIN;
-     pMC->Gsposp("CC1A", 15, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 16, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 17, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 18, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-
-     Y_MC1D=8.*Y_MC1_MIN;
-     pMC->Gsposp("CC1A", 19, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 20, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 21, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC1A", 22, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
-
-// Positioning first plane in ALICE     
-     pMC->Gspos("CM11", 1, "ALIC", 0., 0., zpos1, 0, "ONLY");
-
-// End of geometry definition for the first plane
-
-// Station 1 - plan 2  -  same RPCs as plan 1 ==> small non covered area
-// Y position moved (ratio zpos2/zpos1)
-     const Float_t Z_1S2=zpos2/zpos1;
-     
-// Definition of prototype for chambers in the second plane     
-          
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     pMC->Gsvolu("CC2A", "BOX ", idtmed[1103], tpar, 0);     //Al      
-     pMC->Gsvolu("CB2A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     pMC->Gsvolu("CG2A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
-// chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t X_MC2A=X_MC1A;
-     const Float_t Y_MC2A=0.;
-     const Float_t Z_MC2A=0.;
-          
-     tpar[2] = 0.1;    
-     pMC->Gsposp("CG2A", 1, "CB2A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     pMC->Gsposp("CB2A", 1, "CC2A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.4;
-     tpar[0] = (X_MC1_MAX-X_MC1_MED)/2.;
-     tpar[1] = Y_MC1_MIN;
-     pMC->Gsposp("CC2A", 1, "CM12",X_MC2A,Y_MC2A,Z_MC2A, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 2, "CM12",-X_MC2A,Y_MC2A,Z_MC2A, 0, "ONLY", tpar, 3);
-     
-//  chamber type B    
-     tpar[0] = (X_MC1_MAX-X_MC1_MIN)/2.;
-     tpar[1] = (Y_MC1_MAX-Y_MC1_MIN)/2.;
-     
-     const Float_t X_MC2B=X_MC1B;
-     const Float_t Y_MC2B=2.*Y_MC1_MIN*Z_1S2-Y_MC1_MIN*1.5+Y_MC1_MAX*0.5;
-     const Float_t Z_MC2B=0.;
-
-     pMC->Gsposp("CC2A", 3, "CM12",X_MC2B,Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 4, "CM12",-X_MC2B,Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 5, "CM12",X_MC2B,-Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 6, "CM12",-X_MC2B,-Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
-     
-//  chamber type C        
-     tpar[0] = X_MC1_MAX/2;
-     tpar[1] = Y_MC1_MAX/2;
-     
-     const Float_t X_MC2C=X_MC1C;
-     const Float_t Y_MC2C=2.*Y_MC1_MIN*Z_1S2-Y_MC1_MIN*2.+Y_MC1_MAX*1.5;
-     const Float_t Z_MC2C=0.;
-     
-     pMC->Gsposp("CC2A", 7, "CM12",X_MC2C,Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 8, "CM12",-X_MC2C,Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 9, "CM12",X_MC2C,-Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 10, "CM12",-X_MC2C,-Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
-     
-//  chamber type D        
-     tpar[0] = X_MC1_MAX/2.;
-     tpar[1] = Y_MC1_MIN;
-     
-     const Float_t X_MC2D=X_MC1D;
-     const Float_t Z_MC2D=0.;
-     
-     Float_t Y_MC2D=4.*Y_MC1_MIN*Z_1S2;
-     pMC->Gsposp("CC2A", 11, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 12, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 13, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 14, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-
-     Y_MC2D=6.*Y_MC1_MIN*Z_1S2;
-     pMC->Gsposp("CC2A", 15, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 16, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 17, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 18, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-
-     Y_MC2D=8.*Y_MC1_MIN*Z_1S2;
-     pMC->Gsposp("CC2A", 19, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 20, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 21, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC2A", 22, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
-     
-     pMC->Gspos("CM12", 1, "ALIC", 0., 0., zpos2, 0, "ONLY");
-
-// Station 2
-     iChamber=(AliMUONchamber*) (*fChambers)[12];
-     Float_t zpos3=iChamber->ZPosition();
-     Float_t zpos4=zpos3+DTPLANES;
-
-//  Parameters of the Trigger Chambers
-                                              //Station 2
-     const Float_t X_MC3_MIN=X_MC1_MIN*zpos3/zpos1;          
-     const Float_t X_MC3_MED=X_MC1_MED*zpos3/zpos1;          
-     const Float_t X_MC3_MAX=X_MC1_MAX*zpos3/zpos1;           
-     const Float_t Y_MC3_MIN=Y_MC1_MIN*zpos3/zpos1;            
-     const Float_t Y_MC3_MAX=Y_MC1_MAX*zpos3/zpos1;             
-     const Float_t R_MIN3=R_MIN1*zpos3/zpos1;
-     const Float_t R_MAX3=R_MAX1*zpos3/zpos1;
-
-// Mother volume definition     
-     tpar[0] = iChamber->frMin; 
-     tpar[1] = iChamber->frMax;
-     tpar[2] = 0.4;    
-     pMC->Gsvolu("CM21", "TUBE", idtmed[1100], tpar, 3);
-     pMC->Gsvolu("CM22", "TUBE", idtmed[1100], tpar, 3);
-     
-// Definition of the flange between the beam shielding and the RPC 
-     tpar[0]= R_MIN3;
-     tpar[1]= R_MAX3;
-     tpar[2]= 0.4;
-   
-     pMC->Gsvolu("CF2A", "TUBE", idtmed[1103], tpar, 3);     //Al
-     pMC->Gspos("CF2A", 1, "CM21", 0., 0., 0., 0, "MANY");
-     pMC->Gspos("CF2A", 2, "CM22", 0., 0., 0., 0, "MANY");
-
-// Definition of prototype for chambers in the third plane     
-          
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     pMC->Gsvolu("CC3A", "BOX ", idtmed[1103], tpar, 0);     //Al      
-     pMC->Gsvolu("CB3A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     pMC->Gsvolu("CG3A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
-// chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t X_MC3A=X_MC3_MED+(X_MC3_MAX-X_MC3_MED)/2.;
-     const Float_t Y_MC3A=0.;
-     const Float_t Z_MC3A=0.;
-          
-     tpar[2] = 0.1;    
-     pMC->Gsposp("CG3A", 1, "CB3A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     pMC->Gsposp("CB3A", 1, "CC3A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[0] = (X_MC3_MAX-X_MC3_MED)/2.;
-     tpar[1] = Y_MC3_MIN;
-     tpar[2] = 0.4;
-     pMC->Gsposp("CC3A", 1, "CM21",X_MC3A,Y_MC3A,Z_MC3A, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 2, "CM21",-X_MC3A,Y_MC3A,Z_MC3A, 0, "ONLY", tpar, 3);
-     
-//  chamber type B    
-     tpar[0] = (X_MC3_MAX-X_MC3_MIN)/2.;
-     tpar[1] = (Y_MC3_MAX-Y_MC3_MIN)/2.;
-     
-     const Float_t X_MC3B=X_MC3_MIN+tpar[0];
-     const Float_t Y_MC3B=Y_MC3_MIN+tpar[1];
-     const Float_t Z_MC3B=0.;
-
-     pMC->Gsposp("CC3A", 3, "CM21",X_MC3B,Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 4, "CM21",-X_MC3B,Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 5, "CM21",X_MC3B,-Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 6, "CM21",-X_MC3B,-Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
-     
-//  chamber type C        
-     tpar[0] = X_MC3_MAX/2.;
-     tpar[1] = Y_MC3_MAX/2.;
-     
-     const Float_t X_MC3C=tpar[0];
-     const Float_t Y_MC3C=Y_MC3_MAX+tpar[1];
-     const Float_t Z_MC3C=0.;
-     
-     pMC->Gsposp("CC3A", 7, "CM21",X_MC3C,Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 8, "CM21",-X_MC3C,Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 9, "CM21",X_MC3C,-Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 10, "CM21",-X_MC3C,-Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
-     
-//  chamber type D        
-     tpar[0] = X_MC3_MAX/2.;
-     tpar[1] = Y_MC3_MIN;
-     
-     const Float_t X_MC3D=tpar[0];
-     const Float_t Z_MC3D=0.;
-     
-     Float_t Y_MC3D=4.*Y_MC3_MIN;
-     pMC->Gsposp("CC3A", 11, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 12, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 13, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 14, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-
-     Y_MC3D=6.*Y_MC3_MIN;
-     pMC->Gsposp("CC3A", 15, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 16, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 17, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 18, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-
-     Y_MC3D=8.*Y_MC3_MIN;
-     pMC->Gsposp("CC3A", 19, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 20, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 21, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC3A", 22, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
-
-// Positioning third plane in ALICE     
-     pMC->Gspos("CM21", 1, "ALIC", 0., 0., zpos3, 0, "ONLY");
-
-// End of geometry definition for the third plane
-
-// Station 2 - plan 4  -  same RPCs as plan 3 ==> small non covered area
-// Y position moved (ratio zpos4/zpos3)
-     const Float_t Z_3S4=zpos4/zpos3;
-     
-// Definition of prototype for chambers in the fourth plane     
-          
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     pMC->Gsvolu("CC4A", "BOX ", idtmed[1103], tpar, 0);     //Al      
-     pMC->Gsvolu("CB4A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     pMC->Gsvolu("CG4A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
-// chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t X_MC4A=X_MC3A;
-     const Float_t Y_MC4A=0.;
-     const Float_t Z_MC4A=0.;
-          
-     tpar[2] = 0.1;    
-     pMC->Gsposp("CG4A", 1, "CB4A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     pMC->Gsposp("CB4A", 1, "CC4A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.4;
-     tpar[0] = (X_MC3_MAX-X_MC3_MED)/2.;
-     tpar[1] = Y_MC3_MIN;
-     pMC->Gsposp("CC4A", 1, "CM22",X_MC4A,Y_MC4A,Z_MC4A, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 2, "CM22",-X_MC4A,Y_MC4A,Z_MC4A, 0, "ONLY", tpar, 3);
-     
-//  chamber type B    
-     tpar[0] = (X_MC3_MAX-X_MC3_MIN)/2.;
-     tpar[1] = (Y_MC3_MAX-Y_MC3_MIN)/2.;
-     
-     const Float_t X_MC4B=X_MC3B;
-     const Float_t Y_MC4B=2.*Y_MC3_MIN*Z_3S4-Y_MC3_MIN*1.5+Y_MC3_MAX*0.5;
-     const Float_t Z_MC4B=0.;
-
-     pMC->Gsposp("CC4A", 3, "CM22",X_MC4B,Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 4, "CM22",-X_MC4B,Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 5, "CM22",X_MC4B,-Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 6, "CM22",-X_MC4B,-Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
-     
-//  chamber type C        
-     tpar[0] = X_MC3_MAX/2;
-     tpar[1] = Y_MC3_MAX/2;
-     
-     const Float_t X_MC4C=X_MC3C;
-     const Float_t Y_MC4C=2.*Y_MC3_MIN*Z_3S4-Y_MC3_MIN*2.+Y_MC3_MAX*1.5;
-     const Float_t Z_MC4C=0.;
-     
-     pMC->Gsposp("CC4A", 7, "CM22",X_MC4C,Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 8, "CM22",-X_MC4C,Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 9, "CM22",X_MC4C,-Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 10, "CM22",-X_MC4C,-Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
-     
-//  chamber type D        
-     tpar[0] = X_MC3_MAX/2.;
-     tpar[1] = Y_MC3_MIN;
-     
-     const Float_t X_MC4D=X_MC3D;
-     const Float_t Z_MC4D=0.;
-     
-     Float_t Y_MC4D=4.*Y_MC3_MIN*Z_3S4;
-     pMC->Gsposp("CC4A", 11, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 12, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 13, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 14, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
+    AliMUONSegmentationV04 *seg71=new AliMUONSegmentationV04;
+    seg71->SetPadSize(10.,0.5);
+    seg71->SetDAnod(0.25);
+    seg71->SetPadDivision(nseg4);
+    SetSegmentationModel(chamber-1, 1, seg71);
+    AliMUONSegmentationV05 *seg72=new AliMUONSegmentationV05;
+    seg72->SetPadSize(1,10);
+    seg72->SetDAnod(0.25);
+    seg72->SetPadDivision(nseg4);
+    SetSegmentationModel(chamber-1, 2, seg72);
+    
+    SetResponseModel(chamber-1, response0);        
+
+    chamber=8;
+//^^^^^^^^^
+    SetNsec(chamber-1,2);
+    AliMUONSegmentationV04 *seg81=new AliMUONSegmentationV04;
+    seg81->SetPadSize(10., 0.5);
+    seg81->SetPadDivision(nseg4);
+    seg81->SetDAnod(0.25);
+    SetSegmentationModel(chamber-1, 1, seg81);
+    
+    AliMUONSegmentationV05 *seg82=new AliMUONSegmentationV05;
+    seg82->SetPadSize(1, 10);
+    seg82->SetPadDivision(nseg4);
+    seg82->SetDAnod(0.25);
+    SetSegmentationModel(chamber-1, 2, seg82);
+    
+    SetResponseModel(chamber-1, response0);        
+//--------------------------------------------------------
+// Configuration for Chamber TC9/10  (Station 5) ---------           
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    chamber=9;
+//^^^^^^^^^
+    SetNsec(chamber-1,2);
+//
+    AliMUONSegmentationV04 *seg91=new AliMUONSegmentationV04;
+    seg91->SetPadSize(10.,0.5);
+    seg91->SetDAnod(0.25);
+    seg91->SetPadDivision(nseg4);
+    SetSegmentationModel(chamber-1, 1, seg91);
+    
+    AliMUONSegmentationV05 *seg92=new AliMUONSegmentationV05;
+    seg92->SetPadSize(1,10);
+    seg92->SetDAnod(0.25);
+    seg92->SetPadDivision(nseg4);
+    
+    SetSegmentationModel(chamber-1, 2, seg92);
+    
+    SetResponseModel(chamber-1, response0);        
+    
+    chamber=10;
+//^^^^^^^^^
+    SetNsec(chamber-1,2);
+    AliMUONSegmentationV04 *seg101=new AliMUONSegmentationV04;
+    seg101->SetPadSize(10., 0.5);
+    seg101->SetPadDivision(nseg4);
+    seg101->SetDAnod(0.25);
+    SetSegmentationModel(chamber-1, 1, seg101);
+    
+    AliMUONSegmentationV05 *seg102=new AliMUONSegmentationV05;
+    seg102->SetPadSize(1,10);
+    seg102->SetPadDivision(nseg4);
+    seg102->SetDAnod(0.25);
+    SetSegmentationModel(chamber-1, 2, seg102);
+    
+    SetResponseModel(chamber-1, response0);        
 
-     Y_MC4D=6.*Y_MC3_MIN*Z_3S4;
-     pMC->Gsposp("CC4A", 15, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 16, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 17, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 18, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
+//--------------------------------------------------------
+// Configuration for Trigger staions --------------------- 
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    AliMUONResponseTrigger* responseTrigger0 =  new AliMUONResponseTrigger;
+    
+    chamber=11;
+    SetNsec(chamber-1,2);
+    AliMUONSegmentationTriggerX *seg111=new AliMUONSegmentationTriggerX;
+    SetSegmentationModel(chamber-1, 1, seg111);
+    AliMUONSegmentationTriggerY *seg112=new AliMUONSegmentationTriggerY;
+    SetSegmentationModel(chamber-1, 2, seg112);
+    
+    SetResponseModel(chamber-1, responseTrigger0);      
+    
+    chamber=12;
+    SetNsec(chamber-1,2);
+    AliMUONSegmentationTriggerX *seg121=new AliMUONSegmentationTriggerX;
+    SetSegmentationModel(chamber-1, 1, seg121);
+    AliMUONSegmentationTriggerY *seg122=new AliMUONSegmentationTriggerY;
+    SetSegmentationModel(chamber-1, 2, seg122);
+    
+    SetResponseModel(chamber-1, responseTrigger0);      
+    
+    chamber=13;
+    SetNsec(chamber-1,2);
+    AliMUONSegmentationTriggerX *seg131=new AliMUONSegmentationTriggerX;
+    SetSegmentationModel(chamber-1, 1, seg131);
+    AliMUONSegmentationTriggerY *seg132=new AliMUONSegmentationTriggerY;
+    SetSegmentationModel(chamber-1, 2, seg132);
+    SetResponseModel(chamber-1, responseTrigger0);      
+    
+    chamber=14;
+    SetNsec(chamber-1,2);
+    AliMUONSegmentationTriggerX *seg141=new AliMUONSegmentationTriggerX;
+    SetSegmentationModel(chamber-1, 1, seg141);
+    AliMUONSegmentationTriggerY *seg142=new AliMUONSegmentationTriggerY;
+    SetSegmentationModel(chamber-1, 2, seg142);
+    
+    SetResponseModel(chamber-1, responseTrigger0); 
+}
 
-     Y_MC4D=8.*Y_MC3_MIN*Z_3S4;
-     pMC->Gsposp("CC4A", 19, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 20, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 21, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     pMC->Gsposp("CC4A", 22, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
-     
-     pMC->Gspos("CM22", 1, "ALIC", 0., 0., zpos4, 0, "ONLY");
+void AliMUONv0::CreateGeometry()
+{
+// Creates coarse geometry for hit density simulations
+    Int_t *idtmed = fIdtmed->GetArray()-1099;
+//
+     Float_t zpos, dAlu, tpar[3];
+     Int_t idAir=idtmed[1100];
+     Int_t idAlu=idtmed[1103];     
+
+     AliMUONChamber *iChamber;
+     // Loop over all chambers (tracking and trigger)
+     for (Int_t ch = 0; ch < AliMUONConstants::NCh(); ch++) {
+        char alu[8];
+        char gas[8];
+     
+        iChamber=(AliMUONChamber*) (*fChambers)[ch];
+        // Z of the chamber
+        zpos=iChamber->Z(); 
+        dAlu=iChamber->DAlu();
+        if (ch < AliMUONConstants::NTrackingCh()) {
+          // tracking chambers
+            sprintf(alu,"CA0%1d",ch);
+            sprintf(gas,"CG0%1d",ch);   
+        } else {
+          // trigger chambers
+            sprintf(alu,"CA%2d",ch);
+            sprintf(gas,"CG%2d",ch);    
+        }
+//
+        printf("\n %d,  %s,  %s \n ", ch, alu, gas);
+        
+        tpar[0] = iChamber->RInner(); 
+        tpar[1] = iChamber->ROuter();
+        tpar[2] = (dAlu+0.2)/2.;
+        if (ch !=4 && ch !=5) {
+            gMC->Gsvolu(alu, "TUBE", idAlu, tpar, 3);
+            tpar[2] = 0.1;
+            gMC->Gsvolu(gas, "TUBE", idAir, tpar, 3);
+        } else {
+            gMC->Gsvolu(alu, "TUBE", idAlu, tpar, 3);
+            tpar[2] = 0.1;
+            gMC->Gsvolu(gas, "TUBE", idAir, tpar, 3);
+        }
+        gMC->Gspos(gas, 1, alu,  0., 0., 0., 0, "ONLY");
+        gMC->Gspos(alu, 1, "ALIC", 0., 0., zpos, 0, "ONLY");
+        iChamber->SetGid(gMC->VolId(gas));
+     }
 }
 
 //___________________________________________
 void AliMUONv0::CreateMaterials()
 {
-  // *** DEFINITION OF AVAILABLE MUON MATERIALS *** 
-  //
-  //     Ar-CO2 gas 
-    Float_t ag1[3]   = { 39.95,12.01,16. };
-    Float_t zg1[3]   = { 18.,6.,8. };
-    Float_t wg1[3]   = { .8,.0667,.13333 };
-    Float_t dg1      = .001821;
-    //
-    //     Ar-buthane-freon gas -- trigger chambers 
-    Float_t atr1[4]  = { 39.95,12.01,1.01,19. };
-    Float_t ztr1[4]  = { 18.,6.,1.,9. };
-    Float_t wtr1[4]  = { .56,.1262857,.2857143,.028 };
-    Float_t dtr1     = .002599;
-    //
-    //     Ar-CO2 gas 
-    Float_t agas[3]  = { 39.95,12.01,16. };
-    Float_t zgas[3]  = { 18.,6.,8. };
-    Float_t wgas[3]  = { .74,.086684,.173316 };
-    Float_t dgas     = .0018327;
-    //
-    //     Ar-Isobutane gas (80%+20%) -- tracking 
-    Float_t ag[3]    = { 39.95,12.01,1.01 };
-    Float_t zg[3]    = { 18.,6.,1. };
-    Float_t wg[3]    = { .8,.057,.143 };
-    Float_t dg       = .0019596;
-    //
-    //     Ar-Isobutane-Forane-SF6 gas (49%+7%+40%+4%) -- trigger 
-    Float_t atrig[5] = { 39.95,12.01,1.01,19.,32.066 };
-    Float_t ztrig[5] = { 18.,6.,1.,9.,16. };
-    Float_t wtrig[5] = { .49,1.08,1.5,1.84,0.04 };
-    Float_t dtrig    = .0031463;
-    //
-    //     bakelite 
-
-    Float_t abak[3] = {12.01 , 1.01 , 16.};
-    Float_t zbak[3] = {6.     , 1.   , 8.};
-    Float_t wbak[3] = {6.     , 6.   , 1.}; 
-    Float_t dbak = 1.4;
-
-    Float_t epsil, stmin, deemax, tmaxfd, stemax;
-
-    Int_t ISXFLD   = gAlice->Field()->Integ();
-    Float_t SXMGMX = gAlice->Field()->Max();
-    //
-    // --- Define the various materials for GEANT --- 
-    AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
+// Creates materials for coarse geometry
     AliMaterial(15, "AIR$      ", 14.61, 7.3, .001205, 30423.24, 67500);
-    AliMixture(19, "Bakelite$", abak, zbak, dbak, -3, wbak);
-    AliMixture(20, "ArC4H10 GAS$", ag, zg, dg, 3, wg);
-    AliMixture(21, "TRIG GAS$", atrig, ztrig, dtrig, -5, wtrig);
-    AliMixture(22, "ArCO2 80%$", ag1, zg1, dg1, 3, wg1);
-    AliMixture(23, "Ar-freon $", atr1, ztr1, dtr1, 4, wtr1);
-    AliMixture(24, "ArCO2 GAS$", agas, zgas, dgas, 3, wgas);
+    AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
 
-    epsil  = .001; // Tracking precision, 
-    stemax = -1.;  // Maximum displacement for multiple scat 
-    tmaxfd = -20.; // Maximum angle due to field deflection 
-    deemax = -.3;  // Maximum fractional energy loss, DLS 
-    stmin  = -.8;
-    //
-    //    Air 
-    AliMedium(1101, "AIR_CH_US         ", 15, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
-    //
-    //    Aluminum 
+    Float_t epsil  = .001; // Tracking precision, 
+    Float_t stemax = -1.;  // Maximum displacement for multiple scat 
+    Float_t tmaxfd = -20.; // Maximum angle due to field deflection 
+    Float_t deemax = -.3;  // Maximum fractional energy loss, DLS 
+    Float_t stmin  = -.8;
+    Int_t isxfld   = gAlice->Field()->Integ();
+    Float_t sxmgmx = gAlice->Field()->Max();
 
-    AliMedium(1104, "ALU_CH_US          ", 9, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu, 
-           fMaxDestepAlu, epsil, stmin);
     //
-    //    Ar-isoC4H10 gas 
-
-    AliMedium(1106, "AR_CH_US          ", 20, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepGas, 
-           fMaxDestepGas, epsil, stmin);
-//
-    //    Ar-Isobuthane-Forane-SF6 gas 
-
-    AliMedium(1107, "GAS_CH_TRIGGER    ", 21, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
-
-    AliMedium(1108, "BAKE_CH_TRIGGER   ", 19, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu, 
+    //    Air 
+    AliMedium(1, "AIR_CH_US         ", 15, 1, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
+    AliMedium(4, "ALU_CH_US          ", 9, 0, isxfld, sxmgmx, tmaxfd, fMaxStepAlu, 
            fMaxDestepAlu, epsil, stmin);
 
 }
 
-//___________________________________________
-
 void AliMUONv0::Init()
 {
-   printf("\n\n\n Start Init for version 0 - CPC chamber type\n\n\n");
-
    // 
    // Initialize Tracking Chambers
    //
-   for (Int_t i=0; i<NCH; i++) {
-       ( (AliMUONchamber*) (*fChambers)[i])->Init();
-   }
-   //
-   // Set the chamber (sensitive region) GEANT identifier
-   AliMC* pMC = AliMC::GetMC(); 
-   ((AliMUONchamber*)(*fChambers)[0])->SetGid(pMC->VolId("C01G"));
-   ((AliMUONchamber*)(*fChambers)[1])->SetGid(pMC->VolId("C02G"));
-   ((AliMUONchamber*)(*fChambers)[2])->SetGid(pMC->VolId("C03G"));
-   ((AliMUONchamber*)(*fChambers)[3])->SetGid(pMC->VolId("C04G"));
-   ((AliMUONchamber*)(*fChambers)[4])->SetGid(pMC->VolId("C05G"));
-   ((AliMUONchamber*)(*fChambers)[5])->SetGid(pMC->VolId("C06G"));
-   ((AliMUONchamber*)(*fChambers)[6])->SetGid(pMC->VolId("C07G"));
-   ((AliMUONchamber*)(*fChambers)[7])->SetGid(pMC->VolId("C08G"));
-   ((AliMUONchamber*)(*fChambers)[8])->SetGid(pMC->VolId("C09G"));
-   ((AliMUONchamber*)(*fChambers)[9])->SetGid(pMC->VolId("C10G"));
-   ((AliMUONchamber*)(*fChambers)[10])->SetGid(pMC->VolId("CG1A"));
-   ((AliMUONchamber*)(*fChambers)[11])->SetGid(pMC->VolId("CG2A"));
-   ((AliMUONchamber*)(*fChambers)[12])->SetGid(pMC->VolId("CG3A"));
-   ((AliMUONchamber*)(*fChambers)[13])->SetGid(pMC->VolId("CG4A"));
 
-   printf("\n\n\n Finished Init for version 0 - CPC chamber type\n\n\n");
+   printf("\n\n\n Start Init for version 0 - CPC chamber type\n\n\n");
+   for (Int_t i=0; i<AliMUONConstants::NCh(); i++) {
+       ( (AliMUONChamber*) (*fChambers)[i])->Init();
+   }
 }
 
-//___________________________________________
 void AliMUONv0::StepManager()
 {
+//
+// Step manager for hit density simulations
   Int_t          copy, id;
   static Int_t   idvol;
   static Int_t   vol[2];
   Int_t          ipart;
-  static Float_t hits[10];
-  Float_t        pos[3];
-  Float_t        mom[4];
+  TLorentzVector pos;
+  TLorentzVector mom;
   Float_t        theta,phi;
-  Float_t        destep, step;
-  static Float_t eloss, xhit, yhit, tlength;
-  const  Float_t big=1.e10;
   
-  TClonesArray &lhits = *fHits;
-  AliMC* pMC = AliMC::GetMC();
+  //  modifs perso
+  static Float_t hits[15];
 
-  //
-  // Set maximum step size for gas
-  // numed=pMC->GetMedium();
-  //
-  // Only charged tracks
-  if( !(pMC->TrackCharge()) ) return; 
+  TClonesArray &lhits = *fHits;
   //
   // Only gas gap inside chamber
   // Tag chambers and record hits when track enters 
   idvol=-1;
-  id=pMC->CurrentVol(0,copy);
+  id=gMC->CurrentVolID(copy);
   
-    for (Int_t i=1; i<=NCH; i++) {
-      if(id==((AliMUONchamber*)(*fChambers)[i-1])->GetGid()){ 
+    for (Int_t i=1; i<=AliMUONConstants::NCh(); i++) {
+      if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()){ 
          vol[0]=i; 
          idvol=i-1;
       }
@@ -1331,418 +501,41 @@ void AliMUONv0::StepManager()
     if (idvol == -1) return;
   //
   // Get current particle id (ipart), track position (pos)  and momentum (mom) 
-  pMC->TrackPosition(pos);
-  pMC->TrackMomentum(mom);
+  gMC->TrackPosition(pos);
+  gMC->TrackMomentum(mom);
 
-  ipart  = pMC->TrackPid();
-  //
-  // momentum loss and steplength in last step
-  destep = pMC->Edep();
-  step   = pMC->TrackStep();
-  
+  ipart  = gMC->TrackPid();
   //
   // record hits when track enters ...
-  if( pMC->TrackEntering()) {
-      pMC->SetMaxStep(fMaxStepGas);
+//  if( !(gMC->TrackCharge()) ) return; 
+  if( gMC->IsTrackEntering()) {
       Double_t tc = mom[0]*mom[0]+mom[1]*mom[1];
       Double_t rt = TMath::Sqrt(tc);
       theta   = Float_t(TMath::ATan2(rt,Double_t(mom[2])))*kRaddeg;
       phi     = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg;
-      hits[0] = Float_t(ipart);         // Geant3 particle type
-      hits[1] = pos[0];                 // X-position for hit
-      hits[2] = pos[1];                 // Y-position for hit
-      hits[3] = pos[2];                 // Z-position for hit
-      hits[4] = theta;                  // theta angle of incidence
-      hits[5] = phi;                    // phi angle of incidence 
-      hits[8] = (Float_t) fNclusters;   // first padhit
-      hits[9] = -1;                     // last pad hit
-      // phi angle of incidence
-      tlength = 0;
-      eloss   = 0;
-      xhit    = pos[0];
-      yhit    = pos[1];      
-      // Only if not trigger chamber
-      if(idvol<10) {
-         //
-         //  Initialize hit position (cursor) in the segmentation model 
-         ((AliMUONchamber*) (*fChambers)[idvol])
-             ->SigGenInit(pos[0], pos[1], pos[2]);
-      } else {
-         //geant3->Gpcxyz();
-         //printf("In the Trigger Chamber #%d\n",idvol-9);
-      }
-  }
-  
-  // 
-  // Calculate the charge induced on a pad (disintegration) in case 
-  //
-  // Mip left chamber ...
-  if( pMC->TrackExiting() || pMC->TrackStop() || pMC->TrackDisappear()){
-      pMC->SetMaxStep(big);
-      eloss   += destep;
-      tlength += step;
+      hits[0] = Float_t(ipart);             // Geant3 particle type
+      hits[1] = pos[0];                     // X-position for hit
+      hits[2] = pos[1];                     // Y-position for hit
+      hits[3] = pos[2];                     // Z-position for hit
+      hits[4] = theta;                      // theta angle of incidence
+      hits[5] = phi;                        // phi angle of incidence 
+      hits[8] = -1;                         // first padhit
+      hits[9] = -1;                         // last pad hit
+
+      // modifs personel
+      hits[10] = mom[3]; // hit Energy
+      hits[11] = mom[0]; // Px
+      hits[12] = mom[1]; // Py
+      hits[13] = mom[2]; // Pz
+      hits[14] = gMC->TrackTime();
       
-      // Only if not trigger chamber
-      if(idvol<10) {
-         if (eloss > 0) MakePadHits(xhit,yhit,eloss,idvol);
-      }
-         
-      hits[6]=tlength;
-      hits[7]=eloss;
-      if (fNclusters > (Int_t)hits[8]) {
-         hits[8]= hits[8]+1;
-         hits[9]= (Float_t) fNclusters;
-      }
-    
+      // fin modifs perso
       new(lhits[fNhits++]) 
-         AliMUONhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
-      eloss = 0; 
-      //
-      // Check additional signal generation conditions 
-      // defined by the segmentation
-      // model (boundary crossing conditions) 
-  } else if 
-      (((AliMUONchamber*) (*fChambers)[idvol])
-       ->SigGenCond(pos[0], pos[1], pos[2]))
-  {
-      ((AliMUONchamber*) (*fChambers)[idvol])
-         ->SigGenInit(pos[0], pos[1], pos[2]);
-//      printf("\n-> MakePadHits, reason special %d",ipart);
-      if (eloss > 0) MakePadHits(xhit,yhit,eloss,idvol);
-      xhit     = pos[0];
-      yhit     = pos[1]; 
-      eloss    = destep;
-      tlength += step ;
-      //
-      // nothing special  happened, add up energy loss
-  } else {        
-      eloss   += destep;
-      tlength += step ;
-  }
-}
+         AliMUONHit(fIshunt,gAlice->CurrentTrack(),vol,hits);
 
-//___________________________________________
-void AliMUON::MakePadHits(Float_t xhit,Float_t yhit,Float_t eloss, Int_t idvol)
-{
-//
-//  Calls the charge disintegration method of the current chamber and adds
-//  the simulated cluster to the root treee 
-//
-    Int_t clhits[7];
-    Float_t newclust[6][500];
-    Int_t nnew;
-    
-    
-//
-//  Integrated pulse height on chamber
-
-    
-    clhits[0]=fNhits+1;
-//
-//
-    ((AliMUONchamber*) (*fChambers)[idvol])->DisIntegration(eloss, xhit, yhit, nnew, newclust);
-//    printf("\n Add new clusters %d %f", nnew, eloss*1.e9);
-    Int_t ic=0;
-    
-//
-//  Add new clusters
-    for (Int_t i=0; i<nnew; i++) {
-       if (Int_t(newclust[3][i]) > 0) {
-           ic++;
-// Cathode plane
-           clhits[1] = Int_t(newclust[5][i]);
-//  Cluster Charge
-           clhits[2] = Int_t(newclust[0][i]);
-//  Pad: ix
-           clhits[3] = Int_t(newclust[1][i]);
-//  Pad: iy 
-           clhits[4] = Int_t(newclust[2][i]);
-//  Pad: charge
-           clhits[5] = Int_t(newclust[3][i]);
-//  Pad: chamber sector
-           clhits[6] = Int_t(newclust[4][i]);
-           
-           AddCluster(clhits);
-       }
-    }
-//    printf("\n %d new clusters added", ic);
-}
-
-ClassImp(AliMUONchamber)       
-    AliMUONchamber::AliMUONchamber() 
-{
-    fSegmentation = new TObjArray(2);
-    fResponse=0;
-    fnsec=1;
-}
-
-void AliMUONchamber::Init()
-{
-    
-    ((AliMUONsegmentation *) (*fSegmentation)[0])->Init(this);
-    if (fnsec==2) {
-       ((AliMUONsegmentation *) (*fSegmentation)[1])->Init(this);
-    }
-    
-}
-
-void AliMUONchamber::DisIntegration(Float_t eloss, Float_t xhit, Float_t yhit,
-                                   Int_t& nnew,Float_t newclust[6][500]) 
-{
-//    
-//  Generates pad hits (simulated cluster) 
-//  using the segmentation and the response model 
-    Float_t dx, dy;
-    //
-    // Width of the integration area
-    //
-    dx=fResponse->Nsigma()*fResponse->ChwX();
-    dy=fResponse->Nsigma()*fResponse->ChwY();
-    //
-    // Get pulse height from energy loss
-    Float_t qtot = fResponse->IntPH(eloss);
-    //
-    // Loop Over Pads
-    
-    Float_t qcheck=0, qp;
-    nnew=0;
-    for (Int_t i=1; i<=fnsec; i++) {
-       qcheck=0;
-       AliMUONsegmentation * segmentation=(AliMUONsegmentation *) (*fSegmentation)[i-1];
-       for (segmentation->FirstPad(xhit, yhit, dx, dy); 
-            segmentation->MorePads(); 
-            segmentation->NextPad()) 
-       {
-           qp=fResponse->IntXY(segmentation);
-           qp=TMath::Abs(qp);
-           
-//
-//
-           if (qp > 1.e-4) {
-               qcheck+=qp;
-           //
-           // --- store signal information
-               newclust[0][nnew]=qtot;
-               newclust[1][nnew]=segmentation->Ix();
-               newclust[2][nnew]=segmentation->Iy();
-               newclust[3][nnew]=qp * qtot;
-               newclust[4][nnew]=segmentation->ISector();
-               newclust[5][nnew]=(Float_t) i;
-//             printf("\n pad hit %d %d %f %f ",nnew,i,newclust[1][nnew],newclust[2][nnew]);
-               nnew++;
-
-               
-           }
-       } // Pad loop
-//     printf("\n check sum is %f %f %f %f %d",qcheck,qtot,xhit,yhit,fGid);
-    } // Cathode plane loop
-}
-
-
-ClassImp(AliMUONsegmentation)
-ClassImp(AliMUONresponse)      
-//___________________________________________
-ClassImp(AliMUONsegmentationV0)
-    void AliMUONsegmentationV0::Init(AliMUONchamber* Chamber)
-{
-    fNpx=(Int_t) (Chamber->frMax/fDpx+1);
-    fNpy=(Int_t) (Chamber->frMax/fDpy+1);
-}
-
-
-Float_t AliMUONsegmentationV0::GetAnod(Float_t xhit)
-{
-    Float_t wire= (xhit<0)? Int_t(xhit/fWireD)+0.5:Int_t(xhit/fWireD)-0.5;
-    return fWireD*wire;
-}
-
-void AliMUONsegmentationV0::SetPADSIZ(Float_t p1, Float_t p2)
-{
-    fDpx=p1;
-    fDpy=p2;
-}
-void AliMUONsegmentationV0::
-    GetPadIxy(Float_t x, Float_t y, Int_t &ix, Int_t &iy)
-{
-//  returns pad coordinates (ix,iy) for given real coordinates (x,y)
-//
-    ix = (x>0)? Int_t(x/fDpx)+1 : Int_t(x/fDpx)-1;
-    iy = (y>0)? Int_t(y/fDpy)+1 : Int_t(y/fDpy)-1;
-    if (iy >  fNpy) iy= fNpy;
-    if (iy < -fNpy) iy=-fNpy;
-    if (ix >  fNpx) ix= fNpx;
-    if (ix < -fNpx) ix=-fNpx;
-}
-void AliMUONsegmentationV0::
-GetPadCxy(Int_t ix, Int_t iy, Float_t &x, Float_t &y)
-{
-//  returns real coordinates (x,y) for given pad coordinates (ix,iy)
-//
-    x = (ix>0) ? Float_t(ix*fDpx)-fDpx/2. : Float_t(ix*fDpx)+fDpx/2.;
-    y = (iy>0) ? Float_t(iy*fDpy)-fDpy/2. : Float_t(iy*fDpy)+fDpy/2.;
-}
-
-void AliMUONsegmentationV0::
-FirstPad(Float_t xhit, Float_t yhit, Float_t dx, Float_t dy)
-{
-    //
-    // Find the wire position (center of charge distribution)
-    Float_t x0a=GetAnod(xhit);
-    //
-    // and take fNsigma*sigma around this center
-    Float_t x01=x0a  - dx;
-    Float_t x02=x0a  + dx;
-    Float_t y01=yhit - dy;
-    Float_t y02=yhit + dy;
-    //
-    // find the pads over which the charge distributes
-    GetPadIxy(x01,y01,fixmin,fiymin);
-    GetPadIxy(x02,y02,fixmax,fiymax);    
-//    printf("\n %f %f %d %d",x02,y02,fixmax,fiymax);
-//    printf("\n FirstPad called %f %f ", fDpx, fDpy);
-//    printf("\n Hit Position %f %f",xhit,yhit);
-//    printf("\n Integration limits: %i %i %i %i",fixmin,fixmax,fiymin,fiymax);
-//    printf("\n Integration limits: %f %f %f %f \n",x01,x02,y01,y02);
-    // 
-    // Set current pad to lower left corner
-    fix=fixmin;
-    fiy=fiymin;
-    GetPadCxy(fix,fiy,fx,fy);
-}
-
-void AliMUONsegmentationV0::NextPad()
-{
-  // 
-  // Step to next pad in integration region
-    if (fix != fixmax) {
-       fix++;
-    } else if (fiy != fiymax) {
-       fix=fixmin;
-       fiy++;
-    } else {
-       printf("\n Error: Stepping outside integration region\n ");
-    }
-    GetPadCxy(fix,fiy,fx,fy);
-}
-
-Int_t AliMUONsegmentationV0::MorePads()
-//
-// Are there more pads in the integration region
-{
-    if (fix == fixmax && fiy == fiymax) {
-       return 0;
-    } else {
-       return 1;
-       
-    }
-}
-
-void AliMUONsegmentationV0::SigGenInit(Float_t x,Float_t y,Float_t)
-{
-//
-//  Initialises pad and wire position during stepping
-    fxt =x;
-    fyt =y;
-    GetPadIxy(x,y,fixt,fiyt);
-    fiwt=Int_t(x/fWireD)+1;
-}
-
-Int_t AliMUONsegmentationV0::SigGenCond(Float_t x,Float_t y,Float_t)
-{
-//
-//  Signal will be generated if particle crosses pad boundary or
-//  boundary between two wires. 
-    Int_t ixt, iyt;
-    GetPadIxy(x,y,ixt,iyt);
-    Int_t iwt=Int_t(x/fWireD)+1;
-    
-    if ((ixt != fixt) || (iyt !=fiyt) || (iwt != fiwt)) {
-       return 1;
-    } else {
-       return 0;
-    }
-}
-void AliMUONsegmentationV0::
-IntegrationLimits(Float_t& x1,Float_t& x2,Float_t& y1, Float_t& y2)
-{
-    x1=fxt-fx-fDpx/2.;
-    x2=x1+fDpx;
-    y1=fyt-fy-fDpy/2.;
-    y2=y1+fDpy;    
-}
-
-void AliMUONsegmentationV0::
-Neighbours(Int_t iX, Int_t iY, Int_t* Nlist, Int_t Xlist[7], Int_t Ylist[7])
-{
-    *Nlist=4;Xlist[0]=Xlist[1]=iX;Xlist[2]=iX-1;Xlist[3]=iX+1;
-    Ylist[0]=iY-1;Ylist[1]=iY+1;Ylist[2]=Ylist[3]=iY;
-}
-
-void AliMUONsegmentationV0::
-FitXY(AliMUONRecCluster* ,TClonesArray* )
-    // Default : Centre of gravity method
-{
-    ;
-}
-
-
-//___________________________________________
-ClassImp(AliMUONresponseV0)    
-Float_t AliMUONresponseV0::IntPH(Float_t eloss)
-{
-  // Get number of electrons and return charge
-     
-  Int_t nel;
-  nel= Int_t(eloss*1.e9/26.);
-  Float_t charge=0;
-  if (nel == 0) nel=1;
-  for (Int_t i=1;i<=nel;i++) {
-    charge -= fChslope*TMath::Log(gRandom->Rndm());    
   }
-  return charge;
-}
-// -------------------------------------------
-Float_t AliMUONresponseV0::IntXY(AliMUONsegmentation * segmentation)
-{
-
-    const Float_t invpitch = 1/fPitch;
-//
-//  Integration limits defined by segmentation model
-//  
-    Float_t xi1, xi2, yi1, yi2;
-    segmentation->IntegrationLimits(xi1,xi2,yi1,yi2);
-    xi1=xi1*invpitch;
-    xi2=xi2*invpitch;
-    yi1=yi1*invpitch;
-    yi2=yi2*invpitch;
-//
-// The Mathieson function 
-    Double_t ux1=fSqrtKx3*TMath::TanH(fKx2*xi1);
-    Double_t ux2=fSqrtKx3*TMath::TanH(fKx2*xi2);
-
-    Double_t uy1=fSqrtKy3*TMath::TanH(fKy2*yi1);
-    Double_t uy2=fSqrtKy3*TMath::TanH(fKy2*yi2);
-
-    
-    return Float_t(4.*fKx4*(TMath::ATan(ux2)-TMath::ATan(ux1))*
-                     fKy4*(TMath::ATan(uy2)-TMath::ATan(uy1)));
 }
 
-// -------------------------------------------
-ClassImp(AliMUONgeometry)      
-    void AliMUONgeometry::InitGeo(Float_t)
-{
-      fdGas= 0.5;
-      fdAlu= 2.5/100*8.9;
-}
-
-
-
-
-
-
-
-