]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONv1.cxx
Removing memory allocation in constructor AliMUONData(name,title)
[u/mrichter/AliRoot.git] / MUON / AliMUONv1.cxx
index d95916f70ad36d613fc21c1cee57b3fe4c17c953..925edb051b1ff718bd7a0901389cdc1fa29d6e87 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.17  2000/11/24 12:57:10  morsch
-New version of geometry for stations 3-5 "Slats" (A. de Falco)
- - sensitive region at station 3 inner radius
- - improved volume tree structure
-
-Revision 1.16  2000/11/08 13:01:40  morsch
-Chamber half-planes of stations 3-5 at different z-positions.
-
-Revision 1.15  2000/11/06 11:39:02  morsch
-Bug in StepManager() corrected.
-
-Revision 1.14  2000/11/06 09:16:50  morsch
-Avoid overlap of slat volumes.
-
-Revision 1.13  2000/10/26 07:33:44  morsch
-Correct x-position of slats in station 5.
-
-Revision 1.12  2000/10/25 19:55:35  morsch
-Switches for each station individually for debug and lego.
-
-Revision 1.11  2000/10/22 16:44:01  morsch
-Update of slat geometry for stations 3,4,5 (A. deFalco)
-
-Revision 1.10  2000/10/12 16:07:04  gosset
-StepManager:
-* SigGenCond only called for tracking chambers,
-  hence no more division by 0,
-  and may use last ALIROOT/dummies.C with exception handling;
-* "10" replaced by "AliMUONConstants::NTrackingCh()".
-
-Revision 1.9  2000/10/06 15:37:22  morsch
-Problems with variable redefinition in for-loop solved.
-Variable names starting with u-case letters changed to l-case.
-
-Revision 1.8  2000/10/06 09:06:31  morsch
-Include Slat chambers (stations 3-5) into geometry (A. de Falco)
-
-Revision 1.7  2000/10/02 21:28:09  fca
-Removal of useless dependecies via forward declarations
-
-Revision 1.6  2000/10/02 17:20:45  egangler
-Cleaning of the code (continued ) :
--> coding conventions
--> void Streamers
--> some useless includes removed or replaced by "class" statement
-
-Revision 1.5  2000/06/28 15:16:35  morsch
-(1) Client code adapted to new method signatures in AliMUONSegmentation (see comments there)
-to allow development of slat-muon chamber simulation and reconstruction code in the MUON
-framework. The changes should have no side effects (mostly dummy arguments).
-(2) Hit disintegration uses 3-dim hit coordinates to allow simulation
-of chambers with overlapping modules (MakePadHits, Disintegration).
-
-Revision 1.4  2000/06/26 14:02:38  morsch
-Add class AliMUONConstants with MUON specific constants using static memeber data and access methods.
-
-Revision 1.3  2000/06/22 14:10:05  morsch
-HP scope problems corrected (PH)
-
-Revision 1.2  2000/06/15 07:58:49  morsch
-Code from MUON-dev joined
-
-Revision 1.1.2.14  2000/06/14 14:37:25  morsch
-Initialization of TriggerCircuit added (PC)
-
-Revision 1.1.2.13  2000/06/09 21:55:47  morsch
-Most coding rule violations corrected.
-
-Revision 1.1.2.12  2000/05/05 11:34:29  morsch
-Log inside comments.
-
-Revision 1.1.2.11  2000/05/05 10:06:48  morsch
-Coding Rule violations regarding trigger section corrected (CP)
-Log messages included.
-*/
+/* $Id$ */
 
 /////////////////////////////////////////////////////////
 //  Manager and hits classes for set:MUON version 0    //
 /////////////////////////////////////////////////////////
-
-#include <TTUBE.h>
+#include <TRandom.h>
+#include <TF1.h>
+#include <Riostream.h>
+#include <TClonesArray.h>
+#include <TLorentzVector.h> 
 #include <TNode.h> 
 #include <TRandom.h> 
-#include <TLorentzVector.h> 
-#include <iostream.h>
+#include <TTUBE.h>
+#include <TVirtualMC.h>
 
-#include "AliMUONv1.h"
-#include "AliRun.h"
-#include "AliMC.h"
-#include "AliMagF.h"
 #include "AliCallf77.h"
 #include "AliConst.h" 
 #include "AliMUONChamber.h"
+#include "AliMUONConstants.h"
+#include "AliMUONFactory.h"
 #include "AliMUONHit.h"
 #include "AliMUONPadHit.h"
-#include "AliMUONConstants.h"
 #include "AliMUONTriggerCircuit.h"
+#include "AliMUONv1.h"
+#include "AliMagF.h"
+#include "AliRun.h"
 
 ClassImp(AliMUONv1)
  
@@ -120,13 +47,32 @@ AliMUONv1::AliMUONv1() : AliMUON()
 {
 // Constructor
     fChambers = 0;
+    fStations = 0;
+    fStepManagerVersionOld = kFALSE;
+    fStepManagerVersionNew = kFALSE;
+    fStepManagerVersionTest = kFALSE;
+
+    fStepMaxInActiveGas = 2.0;
 }
+
  
 //___________________________________________
 AliMUONv1::AliMUONv1(const char *name, const char *title)
        : AliMUON(name,title)
 {
 // Constructor
+    // By default include all stations
+    fStations = new Int_t[5];
+    for (Int_t i=0; i<5; i++) fStations[i] = 1;
+
+    AliMUONFactory factory;
+    factory.Build(this, title);
+
+    fStepManagerVersionOld = kFALSE;
+    fStepManagerVersionNew = kFALSE;
+    fStepManagerVersionTest = kFALSE;
+
+    fStepMaxInActiveGas = 2.0;
 }
 
 //___________________________________________
@@ -143,15 +89,25 @@ void AliMUONv1::CreateGeometry()
 //
      Float_t bpar[3];
      Float_t tpar[3];
-     Float_t pgpar[10];
+//      Float_t pgpar[10];
      Float_t zpos1, zpos2, zfpos;
+     // Outer excess and inner recess for mother volume radius
+     // with respect to ROuter and RInner
      Float_t dframep=.001; // Value for station 3 should be 6 ...
-     Float_t dframep1=.001;
-//     Bool_t frames=kTRUE;
-     Bool_t frames=kFALSE;     
+     // Width (RdPhi) of the frame crosses for stations 1 and 2 (cm)
+//      Float_t dframep1=.001;
+     Float_t dframep1 = 11.0;
+//      Bool_t frameCrosses=kFALSE;     
+     Bool_t frameCrosses=kTRUE;     
+     Float_t *dum=0;
      
-     Float_t dframez=0.9;
-     Float_t dr;
+//      Float_t dframez=0.9;
+     // Half of the total thickness of frame crosses (including DAlu)
+     // for each chamber in stations 1 and 2:
+     // 3% of X0 of composite material,
+     // but taken as Aluminium here, with same thickness in number of X0
+     Float_t dframez = 3. * 8.9 / 100;
+//      Float_t dr;
      Float_t dstation;
 
 //
@@ -171,18 +127,18 @@ void AliMUONv1::CreateGeometry()
 //
 //   pointer to the current chamber
 //   pointer to the current chamber
-     Int_t idAlu1=idtmed[1103];
-     Int_t idAlu2=idtmed[1104];
+     Int_t idAlu1=idtmed[1103]; // medium 4
+     Int_t idAlu2=idtmed[1104]; // medium 5
 //     Int_t idAlu1=idtmed[1100];
 //     Int_t idAlu2=idtmed[1100];
-     Int_t idAir=idtmed[1100];
-     Int_t idGas=idtmed[1105];
+     Int_t idAir=idtmed[1100]; // medium 1
+//      Int_t idGas=idtmed[1105]; // medium 6 = Ar-isoC4H10 gas
+     Int_t idGas=idtmed[1108]; // medium 9 = Ar-CO2 gas (80%+20%)
      
 
      AliMUONChamber *iChamber, *iChamber1, *iChamber2;
-     Int_t stations[5] = {1, 1, 1, 1, 1};
-     
-     if (stations[0]) {
+
+     if (fStations[0]) {
         
 //********************************************************************
 //                            Station 1                             **
@@ -196,90 +152,101 @@ void AliMUONv1::CreateGeometry()
      zpos1=iChamber1->Z(); 
      zpos2=iChamber2->Z();
      dstation = zpos2 - zpos1;
+     // DGas decreased from standard one (0.5)
+     iChamber->SetDGas(0.4); iChamber2->SetDGas(0.4);
+     // DAlu increased from standard one (3% of X0),
+     // because more electronics with smaller pads
+     iChamber->SetDAlu(3.5 * 8.9 / 100.); iChamber2->SetDAlu(3.5 * 8.9 / 100.);
      zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
      
 //
 //   Mother volume
-     tpar[0] = iChamber->RInner()-dframep1
-     tpar[1] = (iChamber->ROuter()+dframep1)/TMath::Cos(phi);
+     tpar[0] = iChamber->RInner()-dframep; 
+     tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
      tpar[2] = dstation/5;
 
-     gMC->Gsvolu("C01M", "TUBE", idAir, tpar, 3);
-     gMC->Gsvolu("C02M", "TUBE", idAir, tpar, 3);
-     gMC->Gspos("C01M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     gMC->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->ROuter();
-     pgpar[6] = pgpar[5]+dframep1;
-     pgpar[7] = +dframez/2;
-     pgpar[8] = pgpar[5];
-     pgpar[9] = pgpar[6];
-     gMC->Gsvolu("C01O", "PGON", idAlu1, pgpar, 10);
-     gMC->Gsvolu("C02O", "PGON", idAlu1, pgpar, 10);
-     gMC->Gspos("C01O",1,"C01M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C01O",2,"C01M", 0.,0.,+zfpos,  0,"ONLY");
-     gMC->Gspos("C02O",1,"C02M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C02O",2,"C02M", 0.,0.,+zfpos,  0,"ONLY");
-//
-// Inner frame
-     tpar[0]= iChamber->RInner()-dframep1;
-     tpar[1]= iChamber->RInner();
-     tpar[2]= dframez/2;
-     gMC->Gsvolu("C01I", "TUBE", idAlu1, tpar, 3);
-     gMC->Gsvolu("C02I", "TUBE", idAlu1, tpar, 3);
-
-     gMC->Gspos("C01I",1,"C01M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C01I",2,"C01M", 0.,0.,+zfpos,  0,"ONLY");
-     gMC->Gspos("C02I",1,"C02M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C02I",2,"C02M", 0.,0.,+zfpos,  0,"ONLY");
+     gMC->Gsvolu("S01M", "TUBE", idAir, tpar, 3);
+     gMC->Gsvolu("S02M", "TUBE", idAir, tpar, 3);
+     gMC->Gspos("S01M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
+     gMC->Gspos("S02M", 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->ROuter();
+//      pgpar[6] = pgpar[5]+dframep1;
+//      pgpar[7] = +dframez/2;
+//      pgpar[8] = pgpar[5];
+//      pgpar[9] = pgpar[6];
+//      gMC->Gsvolu("S01O", "PGON", idAlu1, pgpar, 10);
+//      gMC->Gsvolu("S02O", "PGON", idAlu1, pgpar, 10);
+//      gMC->Gspos("S01O",1,"S01M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S01O",2,"S01M", 0.,0.,+zfpos,  0,"ONLY");
+//      gMC->Gspos("S02O",1,"S02M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S02O",2,"S02M", 0.,0.,+zfpos,  0,"ONLY");
+// //
+// // Inner frame
+//      tpar[0]= iChamber->RInner()-dframep1;
+//      tpar[1]= iChamber->RInner();
+//      tpar[2]= dframez/2;
+//      gMC->Gsvolu("S01I", "TUBE", idAlu1, tpar, 3);
+//      gMC->Gsvolu("S02I", "TUBE", idAlu1, tpar, 3);
+
+//      gMC->Gspos("S01I",1,"S01M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S01I",2,"S01M", 0.,0.,+zfpos,  0,"ONLY");
+//      gMC->Gspos("S02I",1,"S02M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S02I",2,"S02M", 0.,0.,+zfpos,  0,"ONLY");
 //
 // Frame Crosses
-     if (frames) {
-
-        bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
+     if (frameCrosses) {
+         // outside gas
+         // security for inside mother volume
+        bpar[0] = (iChamber->ROuter() - iChamber->RInner())
+          * TMath::Cos(TMath::ASin(dframep1 /
+                                  (iChamber->ROuter() - iChamber->RInner())))
+          / 2.0;
         bpar[1] = dframep1/2;
-        bpar[2] = dframez/2;
-        gMC->Gsvolu("C01B", "BOX", idAlu1, bpar, 3);
-        gMC->Gsvolu("C02B", "BOX", idAlu1, bpar, 3);
+        // total thickness will be (4 * bpar[2]) for each chamber,
+        // which has to be equal to (2 * dframez) - DAlu
+        bpar[2] = (2.0 * dframez - iChamber->DAlu()) / 4.0;
+        gMC->Gsvolu("S01B", "BOX", idAlu1, bpar, 3);
+        gMC->Gsvolu("S02B", "BOX", idAlu1, bpar, 3);
         
-        gMC->Gspos("C01B",1,"C01M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S01B",1,"S01M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C01B",2,"C01M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S01B",2,"S01M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C01B",3,"C01M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
+        gMC->Gspos("S01B",3,"S01M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C01B",4,"C01M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
+        gMC->Gspos("S01B",4,"S01M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C01B",5,"C01M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S01B",5,"S01M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C01B",6,"C01M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S01B",6,"S01M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C01B",7,"C01M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
+        gMC->Gspos("S01B",7,"S01M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C01B",8,"C01M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
+        gMC->Gspos("S01B",8,"S01M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
         
-        gMC->Gspos("C02B",1,"C02M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S02B",1,"S02M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C02B",2,"C02M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S02B",2,"S02M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C02B",3,"C02M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
+        gMC->Gspos("S02B",3,"S02M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C02B",4,"C02M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
+        gMC->Gspos("S02B",4,"S02M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C02B",5,"C02M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S02B",5,"S02M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C02B",6,"C02M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S02B",6,"S02M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C02B",7,"C02M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
+        gMC->Gspos("S02B",7,"S02M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C02B",8,"C02M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
+        gMC->Gspos("S02B",8,"S02M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
      }
 //
@@ -287,49 +254,50 @@ void AliMUONv1::CreateGeometry()
      tpar[0]= iChamber->RInner();
      tpar[1]= iChamber->ROuter();
      tpar[2] = (iChamber->DGas()+iChamber->DAlu())/2;
-     gMC->Gsvolu("C01A", "TUBE",  idAlu2, tpar, 3);
-     gMC->Gsvolu("C02A", "TUBE",idAlu2, tpar, 3);
-     gMC->Gspos("C01A", 1, "C01M", 0., 0., 0.,  0, "ONLY");
-     gMC->Gspos("C02A", 1, "C02M", 0., 0., 0.,  0, "ONLY");
+     gMC->Gsvolu("S01A", "TUBE",  idAlu2, tpar, 3);
+     gMC->Gsvolu("S02A", "TUBE",idAlu2, tpar, 3);
+     gMC->Gspos("S01A", 1, "S01M", 0., 0., 0.,  0, "ONLY");
+     gMC->Gspos("S02A", 1, "S02M", 0., 0., 0.,  0, "ONLY");
 //     
 //   Sensitive volumes
      // tpar[2] = iChamber->DGas();
      tpar[2] = iChamber->DGas()/2;
-     gMC->Gsvolu("C01G", "TUBE", idtmed[1108], tpar, 3);
-     gMC->Gsvolu("C02G", "TUBE", idtmed[1108], tpar, 3);
-     gMC->Gspos("C01G", 1, "C01A", 0., 0., 0.,  0, "ONLY");
-     gMC->Gspos("C02G", 1, "C02A", 0., 0., 0.,  0, "ONLY");
+     gMC->Gsvolu("S01G", "TUBE", idGas, tpar, 3);
+     gMC->Gsvolu("S02G", "TUBE", idGas, tpar, 3);
+     gMC->Gspos("S01G", 1, "S01A", 0., 0., 0.,  0, "ONLY");
+     gMC->Gspos("S02G", 1, "S02A", 0., 0., 0.,  0, "ONLY");
 //
-// Frame Crosses to be placed inside gas 
-     if (frames) {
-
-        dr = (iChamber->ROuter() - iChamber->RInner());
-        bpar[0] = TMath::Sqrt(dr*dr-dframep1*dframep1/4)/2;
-        bpar[1] = dframep1/2;
-        bpar[2] = iChamber->DGas()/2;
-        gMC->Gsvolu("C01F", "BOX", idAlu1, bpar, 3);
-        gMC->Gsvolu("C02F", "BOX", idAlu1, bpar, 3);
+// Frame Crosses to be placed inside gas
+     // NONE: chambers are sensitive everywhere
+//      if (frameCrosses) {
+
+//      dr = (iChamber->ROuter() - iChamber->RInner());
+//      bpar[0] = TMath::Sqrt(dr*dr-dframep1*dframep1/4)/2;
+//      bpar[1] = dframep1/2;
+//      bpar[2] = iChamber->DGas()/2;
+//      gMC->Gsvolu("S01F", "BOX", idAlu1, bpar, 3);
+//      gMC->Gsvolu("S02F", "BOX", idAlu1, bpar, 3);
         
-        gMC->Gspos("C01F",1,"C01G", +iChamber->RInner()+bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C01F",2,"C01G", -iChamber->RInner()-bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C01F",3,"C01G", 0, +iChamber->RInner()+bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
-        gMC->Gspos("C01F",4,"C01G", 0, -iChamber->RInner()-bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
+//      gMC->Gspos("S01F",1,"S01G", +iChamber->RInner()+bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S01F",2,"S01G", -iChamber->RInner()-bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S01F",3,"S01G", 0, +iChamber->RInner()+bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
+//      gMC->Gspos("S01F",4,"S01G", 0, -iChamber->RInner()-bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
         
-        gMC->Gspos("C02F",1,"C02G", +iChamber->RInner()+bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C02F",2,"C02G", -iChamber->RInner()-bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C02F",3,"C02G", 0, +iChamber->RInner()+bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
-        gMC->Gspos("C02F",4,"C02G", 0, -iChamber->RInner()-bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
-     }
+//      gMC->Gspos("S02F",1,"S02G", +iChamber->RInner()+bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S02F",2,"S02G", -iChamber->RInner()-bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S02F",3,"S02G", 0, +iChamber->RInner()+bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
+//      gMC->Gspos("S02F",4,"S02G", 0, -iChamber->RInner()-bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
+//      }
      }
-     if (stations[1]) {
+     if (fStations[1]) {
         
 //********************************************************************
 //                            Station 2                             **
@@ -342,6 +310,7 @@ void AliMUONv1::CreateGeometry()
      zpos1=iChamber1->Z(); 
      zpos2=iChamber2->Z();
      dstation = zpos2 - zpos1;
+     // DGas and DAlu not changed from standard values
      zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
      
 //
@@ -350,83 +319,95 @@ void AliMUONv1::CreateGeometry()
      tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
      tpar[2] = dstation/5;
 
-     gMC->Gsvolu("C03M", "TUBE", idAir, tpar, 3);
-     gMC->Gsvolu("C04M", "TUBE", idAir, tpar, 3);
-     gMC->Gspos("C03M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     gMC->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->ROuter();
-     pgpar[6] = pgpar[5]+dframep;
-     pgpar[7] = +dframez/2;
-     pgpar[8] = pgpar[5];
-     pgpar[9] = pgpar[6];
-     gMC->Gsvolu("C03O", "PGON", idAlu1, pgpar, 10);
-     gMC->Gsvolu("C04O", "PGON", idAlu1, pgpar, 10);
-     gMC->Gspos("C03O",1,"C03M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C03O",2,"C03M", 0.,0.,+zfpos,  0,"ONLY");
-     gMC->Gspos("C04O",1,"C04M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C04O",2,"C04M", 0.,0.,+zfpos,  0,"ONLY");
-//
-// Inner frame
-     tpar[0]= iChamber->RInner()-dframep;
-     tpar[1]= iChamber->RInner();
-     tpar[2]= dframez/2;
-     gMC->Gsvolu("C03I", "TUBE", idAlu1, tpar, 3);
-     gMC->Gsvolu("C04I", "TUBE", idAlu1, tpar, 3);
-
-     gMC->Gspos("C03I",1,"C03M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C03I",2,"C03M", 0.,0.,+zfpos,  0,"ONLY");
-     gMC->Gspos("C04I",1,"C04M", 0.,0.,-zfpos,  0,"ONLY");
-     gMC->Gspos("C04I",2,"C04M", 0.,0.,+zfpos,  0,"ONLY");
+     gMC->Gsvolu("S03M", "TUBE", idAir, tpar, 3);
+     gMC->Gsvolu("S04M", "TUBE", idAir, tpar, 3);
+     gMC->Gspos("S03M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
+     gMC->Gspos("S04M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
+     gMC->Gsbool("S03M", "L3DO");
+     gMC->Gsbool("S03M", "L3O1");
+     gMC->Gsbool("S03M", "L3O2");
+     gMC->Gsbool("S04M", "L3DO");
+     gMC->Gsbool("S04M", "L3O1");
+     gMC->Gsbool("S04M", "L3O2");
+
+// // 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->ROuter();
+//      pgpar[6] = pgpar[5]+dframep;
+//      pgpar[7] = +dframez/2;
+//      pgpar[8] = pgpar[5];
+//      pgpar[9] = pgpar[6];
+//      gMC->Gsvolu("S03O", "PGON", idAlu1, pgpar, 10);
+//      gMC->Gsvolu("S04O", "PGON", idAlu1, pgpar, 10);
+//      gMC->Gspos("S03O",1,"S03M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S03O",2,"S03M", 0.,0.,+zfpos,  0,"ONLY");
+//      gMC->Gspos("S04O",1,"S04M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S04O",2,"S04M", 0.,0.,+zfpos,  0,"ONLY");
+// //
+// // Inner frame
+//      tpar[0]= iChamber->RInner()-dframep;
+//      tpar[1]= iChamber->RInner();
+//      tpar[2]= dframez/2;
+//      gMC->Gsvolu("S03I", "TUBE", idAlu1, tpar, 3);
+//      gMC->Gsvolu("S04I", "TUBE", idAlu1, tpar, 3);
+
+//      gMC->Gspos("S03I",1,"S03M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S03I",2,"S03M", 0.,0.,+zfpos,  0,"ONLY");
+//      gMC->Gspos("S04I",1,"S04M", 0.,0.,-zfpos,  0,"ONLY");
+//      gMC->Gspos("S04I",2,"S04M", 0.,0.,+zfpos,  0,"ONLY");
 //
 // Frame Crosses
-     if (frames) {
-
-        bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
-        bpar[1] = dframep/2;
-        bpar[2] = dframez/2;
-        gMC->Gsvolu("C03B", "BOX", idAlu1, bpar, 3);
-        gMC->Gsvolu("C04B", "BOX", idAlu1, bpar, 3);
+     if (frameCrosses) {
+         // outside gas
+         // security for inside mother volume
+        bpar[0] = (iChamber->ROuter() - iChamber->RInner())
+          * TMath::Cos(TMath::ASin(dframep1 /
+                                  (iChamber->ROuter() - iChamber->RInner())))
+          / 2.0;
+        bpar[1] = dframep1/2;
+        // total thickness will be (4 * bpar[2]) for each chamber,
+        // which has to be equal to (2 * dframez) - DAlu
+        bpar[2] = (2.0 * dframez - iChamber->DAlu()) / 4.0;
+        gMC->Gsvolu("S03B", "BOX", idAlu1, bpar, 3);
+        gMC->Gsvolu("S04B", "BOX", idAlu1, bpar, 3);
         
-        gMC->Gspos("C03B",1,"C03M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S03B",1,"S03M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C03B",2,"C03M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S03B",2,"S03M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C03B",3,"C03M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
+        gMC->Gspos("S03B",3,"S03M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C03B",4,"C03M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
+        gMC->Gspos("S03B",4,"S03M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C03B",5,"C03M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S03B",5,"S03M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C03B",6,"C03M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S03B",6,"S03M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C03B",7,"C03M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
+        gMC->Gspos("S03B",7,"S03M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C03B",8,"C03M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
+        gMC->Gspos("S03B",8,"S03M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
         
-        gMC->Gspos("C04B",1,"C04M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S04B",1,"S04M", +iChamber->RInner()+bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C04B",2,"C04M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
+        gMC->Gspos("S04B",2,"S04M", -iChamber->RInner()-bpar[0] , 0,-zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C04B",3,"C04M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
+        gMC->Gspos("S04B",3,"S04M", 0, +iChamber->RInner()+bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C04B",4,"C04M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
+        gMC->Gspos("S04B",4,"S04M", 0, -iChamber->RInner()-bpar[0] ,-zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C04B",5,"C04M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S04B",5,"S04M", +iChamber->RInner()+bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C04B",6,"C04M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
+        gMC->Gspos("S04B",6,"S04M", -iChamber->RInner()-bpar[0] , 0,+zfpos, 
                    idrotm[1100],"ONLY");
-        gMC->Gspos("C04B",7,"C04M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
+        gMC->Gspos("S04B",7,"S04M", 0, +iChamber->RInner()+bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
-        gMC->Gspos("C04B",8,"C04M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
+        gMC->Gspos("S04B",8,"S04M", 0, -iChamber->RInner()-bpar[0] ,+zfpos, 
                    idrotm[1101],"ONLY");
      }
 //
@@ -434,47 +415,48 @@ void AliMUONv1::CreateGeometry()
      tpar[0]= iChamber->RInner();
      tpar[1]= iChamber->ROuter();
      tpar[2] = (iChamber->DGas()+iChamber->DAlu())/2;
-     gMC->Gsvolu("C03A", "TUBE", idAlu2, tpar, 3);
-     gMC->Gsvolu("C04A", "TUBE", idAlu2, tpar, 3);
-     gMC->Gspos("C03A", 1, "C03M", 0., 0., 0.,  0, "ONLY");
-     gMC->Gspos("C04A", 1, "C04M", 0., 0., 0.,  0, "ONLY");
+     gMC->Gsvolu("S03A", "TUBE", idAlu2, tpar, 3);
+     gMC->Gsvolu("S04A", "TUBE", idAlu2, tpar, 3);
+     gMC->Gspos("S03A", 1, "S03M", 0., 0., 0.,  0, "ONLY");
+     gMC->Gspos("S04A", 1, "S04M", 0., 0., 0.,  0, "ONLY");
 //     
 //   Sensitive volumes
      // tpar[2] = iChamber->DGas();
      tpar[2] = iChamber->DGas()/2;
-     gMC->Gsvolu("C03G", "TUBE", idGas, tpar, 3);
-     gMC->Gsvolu("C04G", "TUBE", idGas, tpar, 3);
-     gMC->Gspos("C03G", 1, "C03A", 0., 0., 0.,  0, "ONLY");
-     gMC->Gspos("C04G", 1, "C04A", 0., 0., 0.,  0, "ONLY");
-
-     if (frames) {
+     gMC->Gsvolu("S03G", "TUBE", idGas, tpar, 3);
+     gMC->Gsvolu("S04G", "TUBE", idGas, tpar, 3);
+     gMC->Gspos("S03G", 1, "S03A", 0., 0., 0.,  0, "ONLY");
+     gMC->Gspos("S04G", 1, "S04A", 0., 0., 0.,  0, "ONLY");
 //
 // Frame Crosses to be placed inside gas 
-        dr = (iChamber->ROuter() - iChamber->RInner());
-        bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
-        bpar[1] = dframep/2;
-        bpar[2] = iChamber->DGas()/2;
-        gMC->Gsvolu("C03F", "BOX", idAlu1, bpar, 3);
-        gMC->Gsvolu("C04F", "BOX", idAlu1, bpar, 3);
+     // NONE: chambers are sensitive everywhere
+//      if (frameCrosses) {
+
+//      dr = (iChamber->ROuter() - iChamber->RInner());
+//      bpar[0] = TMath::Sqrt(dr*dr-dframep1*dframep1/4)/2;
+//      bpar[1] = dframep1/2;
+//      bpar[2] = iChamber->DGas()/2;
+//      gMC->Gsvolu("S03F", "BOX", idAlu1, bpar, 3);
+//      gMC->Gsvolu("S04F", "BOX", idAlu1, bpar, 3);
         
-        gMC->Gspos("C03F",1,"C03G", +iChamber->RInner()+bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C03F",2,"C03G", -iChamber->RInner()-bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C03F",3,"C03G", 0, +iChamber->RInner()+bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
-        gMC->Gspos("C03F",4,"C03G", 0, -iChamber->RInner()-bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
+//      gMC->Gspos("S03F",1,"S03G", +iChamber->RInner()+bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S03F",2,"S03G", -iChamber->RInner()-bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S03F",3,"S03G", 0, +iChamber->RInner()+bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
+//      gMC->Gspos("S03F",4,"S03G", 0, -iChamber->RInner()-bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
         
-        gMC->Gspos("C04F",1,"C04G", +iChamber->RInner()+bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C04F",2,"C04G", -iChamber->RInner()-bpar[0] , 0, 0, 
-                   idrotm[1100],"ONLY");
-        gMC->Gspos("C04F",3,"C04G", 0, +iChamber->RInner()+bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
-        gMC->Gspos("C04F",4,"C04G", 0, -iChamber->RInner()-bpar[0] , 0, 
-                   idrotm[1101],"ONLY");
-     }
+//      gMC->Gspos("S04F",1,"S04G", +iChamber->RInner()+bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S04F",2,"S04G", -iChamber->RInner()-bpar[0] , 0, 0, 
+//                 idrotm[1100],"ONLY");
+//      gMC->Gspos("S04F",3,"S04G", 0, +iChamber->RInner()+bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
+//      gMC->Gspos("S04F",4,"S04G", 0, -iChamber->RInner()-bpar[0] , 0, 
+//                 idrotm[1101],"ONLY");
+//      }
      }
      // define the id of tracking media:
      Int_t idCopper = idtmed[1110];
@@ -569,7 +551,7 @@ void AliMUONv1::CreateGeometry()
      Float_t xxmax = (bFrameLength - nulocLength)/2.; 
      Int_t index=0;
      
-     if (stations[2]) {
+     if (fStations[2]) {
         
 //********************************************************************
 //                            Station 3                             **
@@ -583,17 +565,32 @@ void AliMUONv1::CreateGeometry()
      zpos2=iChamber2->Z();
      dstation = zpos2 - zpos1;
 
-     zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
+//      zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2; // not used any more
 //
 //   Mother volume
      tpar[0] = iChamber->RInner()-dframep; 
      tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
-     tpar[2] = dstation/4;
-     gMC->Gsvolu("C05M", "TUBE", idAir, tpar, 3);
-     gMC->Gsvolu("C06M", "TUBE", idAir, tpar, 3);
-     gMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     gMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
+     tpar[2] = dstation/5;
+
+     char *slats5Mother = "S05M";
+     char *slats6Mother = "S06M";
+     Float_t zoffs5 = 0;
+     Float_t zoffs6 = 0;
+
+     if (gAlice->GetModule("DIPO")) {
+       slats5Mother="DDIP";
+       slats6Mother="DDIP";
+
+       zoffs5 = zpos1;
+       zoffs6 = zpos2;
+     }
+     else {
+       gMC->Gsvolu("S05M", "TUBE", idAir, tpar, 3);
+       gMC->Gsvolu("S06M", "TUBE", idAir, tpar, 3);
+       gMC->Gspos("S05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
+       gMC->Gspos("S06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
+     }
+
      // volumes for slat geometry (xx=5,..,10 chamber id): 
      // Sxx0 Sxx1 Sxx2 Sxx3  -->   Slat Mother volumes 
      // SxxG                          -->   Sensitive volume (gas)
@@ -602,12 +599,23 @@ void AliMUONv1::CreateGeometry()
      // SxxC                          -->   Carbon panel 
      // SxxR                          -->   Rohacell
      // SxxH, SxxV                    -->   Horizontal and Vertical frames (vetronite)
-
+     // SB5x                          -->   Volumes for the 35 cm long PCB
      // slat dimensions: slat is a MOTHER volume!!! made of air
 
+     // only for chamber 5: slat 1 has a PCB shorter by 5cm!
+
+     Float_t tlength = 35.;
+     Float_t panelpar2[3]  = { tlength/2., panelpar[1],  panelpar[2]}; 
+     Float_t rohapar2[3]   = { tlength/2., rohapar[1],   rohapar[2]}; 
+     Float_t insupar2[3]   = { tlength/2., insupar[1],   insupar[2]}; 
+     Float_t pcbpar2[3]    = { tlength/2., pcbpar[1],    pcbpar[2]}; 
+     Float_t senspar2[3]   = { tlength/2., senspar[1],   senspar[2]}; 
+     Float_t hFramepar2[3] = { tlength/2., hFramepar[1], hFramepar[2]}; 
+     Float_t bFramepar2[3] = { tlength/2., bFramepar[1], bFramepar[2]}; 
+
      const Int_t nSlats3 = 5;  // number of slats per quadrant
      const Int_t nPCB3[nSlats3] = {3,3,4,3,2}; // n PCB per slat
-     const Float_t xpos3[nSlats3] = {30., 40., 0., 0., 0.};
+     const Float_t xpos3[nSlats3] = {31., 40., 0., 0., 0.};
      Float_t slatLength3[nSlats3]; 
 
      // create and position the slat (mother) volumes 
@@ -616,59 +624,77 @@ void AliMUONv1::CreateGeometry()
      char volNam6[5];
      Float_t xSlat3;
 
+     Float_t spar2[3];
      for (i = 0; i<nSlats3; i++){
        slatLength3[i] = pcbLength * nPCB3[i] + 2. * dSlatLength; 
        xSlat3 = slatLength3[i]/2. - vFrameLength/2. + xpos3[i]; 
-       if (i==1) slatLength3[i] -=  2. *dSlatLength; // frame out in PCB with circular border 
+       if (i==1 || i==0) slatLength3[i] -=  2. *dSlatLength; // frame out in PCB with circular border 
        Float_t ySlat31 =  sensHeight * i - yOverlap * i; 
        Float_t ySlat32 = -sensHeight * i + yOverlap * i; 
        spar[0] = slatLength3[i]/2.; 
        spar[1] = slatHeight/2.;
        spar[2] = slatWidth/2. * 1.01; 
+       // take away 5 cm from the first slat in chamber 5
+       Float_t xSlat32 = 0;
+       if (i==1 || i==2) { // 1 pcb is shortened by 5cm
+        spar2[0] = spar[0]-5./2.;
+        xSlat32 = xSlat3 - 5/2.;
+       }
+       else {
+        spar2[0] = spar[0];
+        xSlat32 = xSlat3;
+       }
+       spar2[1] = spar[1];
+       spar2[2] = spar[2]; 
        Float_t dzCh3=spar[2] * 1.01;
        // zSlat to be checked (odd downstream or upstream?)
        Float_t zSlat = (i%2 ==0)? -spar[2] : spar[2]; 
        sprintf(volNam5,"S05%d",i);
-       gMC->Gsvolu(volNam5,"BOX",slatMaterial,spar,3);
-       gMC->Gspos(volNam5, i*4+1,"C05M", xSlat3, ySlat31, zSlat+2.*dzCh3, 0, "ONLY");
-       gMC->Gspos(volNam5, i*4+2,"C05M",-xSlat3, ySlat31, zSlat-2.*dzCh3, 0, "ONLY");
+       gMC->Gsvolu(volNam5,"BOX",slatMaterial,spar2,3);
+       gMC->Gspos(volNam5, i*4+1,slats5Mother, xSlat32, ySlat31, zoffs5+zSlat+2.*dzCh3, 0, "ONLY");
+       gMC->Gspos(volNam5, i*4+2,slats5Mother,-xSlat32, ySlat31, zoffs5+zSlat-2.*dzCh3, 0, "ONLY");
+       
        if (i>0) { 
-        gMC->Gspos(volNam5, i*4+3,"C05M", xSlat3, ySlat32, zSlat+2.*dzCh3, 0, "ONLY");
-        gMC->Gspos(volNam5, i*4+4,"C05M",-xSlat3, ySlat32, zSlat-2.*dzCh3, 0, "ONLY");
+        gMC->Gspos(volNam5, i*4+3,slats5Mother, xSlat32, ySlat32, zoffs5+zSlat+2.*dzCh3, 0, "ONLY");
+        gMC->Gspos(volNam5, i*4+4,slats5Mother,-xSlat32, ySlat32, zoffs5+zSlat-2.*dzCh3, 0, "ONLY");
        }
        sprintf(volNam6,"S06%d",i);
        gMC->Gsvolu(volNam6,"BOX",slatMaterial,spar,3);
-       gMC->Gspos(volNam6, i*4+1,"C06M", xSlat3, ySlat31, zSlat+2.*dzCh3, 0, "ONLY");
-       gMC->Gspos(volNam6, i*4+2,"C06M",-xSlat3, ySlat31, zSlat-2.*dzCh3, 0, "ONLY");
+       gMC->Gspos(volNam6, i*4+1,slats6Mother, xSlat3, ySlat31, zoffs6+zSlat+2.*dzCh3, 0, "ONLY");
+       gMC->Gspos(volNam6, i*4+2,slats6Mother,-xSlat3, ySlat31, zoffs6+zSlat-2.*dzCh3, 0, "ONLY");
        if (i>0) { 
-        gMC->Gspos(volNam6, i*4+3,"C06M", xSlat3, ySlat32, zSlat+2.*dzCh3, 0, "ONLY");
-        gMC->Gspos(volNam6, i*4+4,"C06M",-xSlat3, ySlat32, zSlat-2.*dzCh3, 0, "ONLY");
+        gMC->Gspos(volNam6, i*4+3,slats6Mother, xSlat3, ySlat32, zoffs6+zSlat+2.*dzCh3, 0, "ONLY");
+        gMC->Gspos(volNam6, i*4+4,slats6Mother,-xSlat3, ySlat32, zoffs6+zSlat-2.*dzCh3, 0, "ONLY");
        }
      }
 
      // create the panel volume 
  
      gMC->Gsvolu("S05C","BOX",panelMaterial,panelpar,3);
+     gMC->Gsvolu("SB5C","BOX",panelMaterial,panelpar2,3);
      gMC->Gsvolu("S06C","BOX",panelMaterial,panelpar,3);
 
      // create the rohacell volume 
 
      gMC->Gsvolu("S05R","BOX",rohaMaterial,rohapar,3);
+     gMC->Gsvolu("SB5R","BOX",rohaMaterial,rohapar2,3);
      gMC->Gsvolu("S06R","BOX",rohaMaterial,rohapar,3);
 
      // create the insulating material volume 
 
      gMC->Gsvolu("S05I","BOX",insuMaterial,insupar,3);
+     gMC->Gsvolu("SB5I","BOX",insuMaterial,insupar2,3);
      gMC->Gsvolu("S06I","BOX",insuMaterial,insupar,3);
 
      // create the PCB volume 
 
      gMC->Gsvolu("S05P","BOX",pcbMaterial,pcbpar,3);
+     gMC->Gsvolu("SB5P","BOX",pcbMaterial,pcbpar2,3);
      gMC->Gsvolu("S06P","BOX",pcbMaterial,pcbpar,3);
  
      // create the sensitive volumes,
-     gMC->Gsvolu("S05G","BOX",sensMaterial,0,0);
-     gMC->Gsvolu("S06G","BOX",sensMaterial,0,0);
+     gMC->Gsvolu("S05G","BOX",sensMaterial,dum,0);
+     gMC->Gsvolu("S06G","BOX",sensMaterial,dum,0);
 
 
      // create the vertical frame volume 
@@ -679,11 +705,13 @@ void AliMUONv1::CreateGeometry()
      // create the horizontal frame volume 
 
      gMC->Gsvolu("S05H","BOX",hFrameMaterial,hFramepar,3);
+     gMC->Gsvolu("SB5H","BOX",hFrameMaterial,hFramepar2,3);
      gMC->Gsvolu("S06H","BOX",hFrameMaterial,hFramepar,3);
 
      // create the horizontal border volume 
 
      gMC->Gsvolu("S05B","BOX",bFrameMaterial,bFramepar,3);
+     gMC->Gsvolu("SB5B","BOX",bFrameMaterial,bFramepar2,3);
      gMC->Gsvolu("S06B","BOX",bFrameMaterial,bFramepar,3);
 
      index=0; 
@@ -691,10 +719,12 @@ void AliMUONv1::CreateGeometry()
        sprintf(volNam5,"S05%d",i);
        sprintf(volNam6,"S06%d",i);
        Float_t xvFrame  = (slatLength3[i] - vFrameLength)/2.;
+       Float_t xvFrame2  = xvFrame;
+       if ( i==1 || i ==2 ) xvFrame2 -= 5./2.;
        // position the vertical frames 
-       if (i!=1) { 
-        gMC->Gspos("S05V",2*i-1,volNam5, xvFrame, 0., 0. , 0, "ONLY");
-        gMC->Gspos("S05V",2*i  ,volNam5,-xvFrame, 0., 0. , 0, "ONLY");
+       if (i!=1 && i!=0) { 
+        gMC->Gspos("S05V",2*i-1,volNam5, xvFrame2, 0., 0. , 0, "ONLY");
+        gMC->Gspos("S05V",2*i  ,volNam5,-xvFrame2, 0., 0. , 0, "ONLY");
         gMC->Gspos("S06V",2*i-1,volNam6, xvFrame, 0., 0. , 0, "ONLY");
         gMC->Gspos("S06V",2*i  ,volNam6,-xvFrame, 0., 0. , 0, "ONLY");
        }       
@@ -702,35 +732,53 @@ void AliMUONv1::CreateGeometry()
        for (j=0; j<nPCB3[i]; j++){
         index++;
         Float_t xx = sensLength * (-nPCB3[i]/2.+j+.5); 
+        Float_t xx2 = xx + 5/2.; 
         
         Float_t zPanel = spar[2] - panelpar[2]; 
-        gMC->Gspos("S05C",2*index-1,volNam5, xx, 0., zPanel , 0, "ONLY");
-        gMC->Gspos("S05C",2*index  ,volNam5, xx, 0.,-zPanel , 0, "ONLY");
+        if ( (i==1 || i==2) && j == nPCB3[i]-1) { // 1 pcb is shortened by 5cm 
+          gMC->Gspos("SB5C",2*index-1,volNam5, xx, 0., zPanel , 0, "ONLY");
+          gMC->Gspos("SB5C",2*index  ,volNam5, xx, 0.,-zPanel , 0, "ONLY");
+          gMC->Gspos("SB5I",index    ,volNam5, xx, 0., 0      , 0, "ONLY");
+        }
+        else if ( (i==1 || i==2) && j < nPCB3[i]-1) {
+          gMC->Gspos("S05C",2*index-1,volNam5, xx2, 0., zPanel , 0, "ONLY");
+          gMC->Gspos("S05C",2*index  ,volNam5, xx2, 0.,-zPanel , 0, "ONLY");
+          gMC->Gspos("S05I",index    ,volNam5, xx2, 0., 0 , 0, "ONLY");
+        }
+        else {
+          gMC->Gspos("S05C",2*index-1,volNam5, xx, 0., zPanel , 0, "ONLY");
+          gMC->Gspos("S05C",2*index  ,volNam5, xx, 0.,-zPanel , 0, "ONLY");
+          gMC->Gspos("S05I",index    ,volNam5, xx, 0., 0 , 0, "ONLY");
+        }
         gMC->Gspos("S06C",2*index-1,volNam6, xx, 0., zPanel , 0, "ONLY");
         gMC->Gspos("S06C",2*index  ,volNam6, xx, 0.,-zPanel , 0, "ONLY");
-
-        gMC->Gspos("S05I",index,volNam5, xx, 0., 0 , 0, "ONLY");
         gMC->Gspos("S06I",index,volNam6, xx, 0., 0 , 0, "ONLY");
        } 
      }
-
+     
      // position the rohacell volume inside the panel volume
      gMC->Gspos("S05R",1,"S05C",0.,0.,0.,0,"ONLY"); 
+     gMC->Gspos("SB5R",1,"SB5C",0.,0.,0.,0,"ONLY"); 
      gMC->Gspos("S06R",1,"S06C",0.,0.,0.,0,"ONLY"); 
 
      // position the PCB volume inside the insulating material volume
      gMC->Gspos("S05P",1,"S05I",0.,0.,0.,0,"ONLY"); 
+     gMC->Gspos("SB5P",1,"SB5I",0.,0.,0.,0,"ONLY"); 
      gMC->Gspos("S06P",1,"S06I",0.,0.,0.,0,"ONLY"); 
      // position the horizontal frame volume inside the PCB volume
      gMC->Gspos("S05H",1,"S05P",0.,0.,0.,0,"ONLY"); 
+     gMC->Gspos("SB5H",1,"SB5P",0.,0.,0.,0,"ONLY"); 
      gMC->Gspos("S06H",1,"S06P",0.,0.,0.,0,"ONLY"); 
      // position the sensitive volume inside the horizontal frame volume
      gMC->Gsposp("S05G",1,"S05H",0.,0.,0.,0,"ONLY",senspar,3); 
+     gMC->Gsposp("S05G",1,"SB5H",0.,0.,0.,0,"ONLY",senspar2,3); 
      gMC->Gsposp("S06G",1,"S06H",0.,0.,0.,0,"ONLY",senspar,3); 
      // position the border volumes inside the PCB volume
      Float_t yborder = ( pcbHeight - bFrameHeight ) / 2.; 
      gMC->Gspos("S05B",1,"S05P",0., yborder,0.,0,"ONLY"); 
      gMC->Gspos("S05B",2,"S05P",0.,-yborder,0.,0,"ONLY"); 
+     gMC->Gspos("SB5B",1,"SB5P",0., yborder,0.,0,"ONLY"); 
+     gMC->Gspos("SB5B",2,"SB5P",0.,-yborder,0.,0,"ONLY"); 
      gMC->Gspos("S06B",1,"S06P",0., yborder,0.,0,"ONLY"); 
      gMC->Gspos("S06B",2,"S06P",0.,-yborder,0.,0,"ONLY"); 
 
@@ -739,10 +787,15 @@ void AliMUONv1::CreateGeometry()
      gMC->Gsvolu("S05N","BOX",nulocMaterial,nulocpar,3);
      gMC->Gsvolu("S06N","BOX",nulocMaterial,nulocpar,3);
      index = 0;
-     for (xx = -xxmax; xx<=xxmax; xx+=3*nulocLength) { 
+     Float_t xxmax2 = xxmax - 5./2.;
+     for (xx = -xxmax; xx<=xxmax; xx+=2*nulocLength) { 
        index++; 
        gMC->Gspos("S05N",2*index-1,"S05B", xx, 0.,-bFrameWidth/4., 0, "ONLY");
        gMC->Gspos("S05N",2*index  ,"S05B", xx, 0., bFrameWidth/4., 0, "ONLY");
+       if (xx > -xxmax2 && xx< xxmax2) {
+        gMC->Gspos("S05N",2*index-1,"SB5B", xx, 0.,-bFrameWidth/4., 0, "ONLY");
+        gMC->Gspos("S05N",2*index  ,"SB5B", xx, 0., bFrameWidth/4., 0, "ONLY");
+       }
        gMC->Gspos("S06N",2*index-1,"S06B", xx, 0.,-bFrameWidth/4., 0, "ONLY");
        gMC->Gspos("S06N",2*index  ,"S06B", xx, 0., bFrameWidth/4., 0, "ONLY");
      }
@@ -753,34 +806,33 @@ void AliMUONv1::CreateGeometry()
      Int_t ndiv=6;
      Float_t divpar[3];
      Double_t dydiv= sensHeight/ndiv;
-     Double_t ydiv = yoffs -dydiv - yOverlap/2.;
+     Double_t ydiv = yoffs -dydiv;
      Int_t imax=0; 
-     //     for (Int_t islat=0; islat<nSlats3; islat++) imax += nPCB3[islat]; 
      imax = 1; 
-     Float_t rmin = 35.; 
+     Float_t rmin = 33.; 
      Float_t z1 = spar[2], z2=2*spar[2]*1.01; 
      for (Int_t idiv=0;idiv<ndiv; idiv++){ 
        ydiv+= dydiv;
-       Float_t xdiv =2
+       Float_t xdiv = 0.
        if (ydiv<rmin) xdiv= rmin * TMath::Sin( TMath::ACos(ydiv/rmin) );
        divpar[0] = (pcbLength-xdiv)/2.; 
        divpar[1] = dydiv/2. - epsilon;
        divpar[2] = sensWidth/2.; 
-       Float_t xvol=(pcbLength+xdiv)/2.;
+       Float_t xvol=(pcbLength+xdiv)/2.+1.999;
        Float_t yvol=ydiv + dydiv/2.; 
-       gMC->Gsposp("S05G",imax+4*idiv+1,"C05M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S06G",imax+4*idiv+1,"C06M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S05G",imax+4*idiv+2,"C05M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S06G",imax+4*idiv+2,"C06M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S05G",imax+4*idiv+3,"C05M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S06G",imax+4*idiv+3,"C06M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S05G",imax+4*idiv+4,"C05M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S06G",imax+4*idiv+4,"C06M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
+       //printf ("y ll = %f y ur = %f \n",yvol - divpar[1], yvol + divpar[1]); 
+       gMC->Gsposp("S05G",imax+4*idiv+1,slats5Mother, xvol, yvol, zoffs5+z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S06G",imax+4*idiv+1,slats6Mother, xvol, yvol, zoffs6+z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S05G",imax+4*idiv+2,slats5Mother, xvol,-yvol, zoffs5+z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S06G",imax+4*idiv+2,slats6Mother, xvol,-yvol, zoffs6+z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S05G",imax+4*idiv+3,slats5Mother,-xvol, yvol, zoffs5+z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S06G",imax+4*idiv+3,slats6Mother,-xvol, yvol, zoffs6+z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S05G",imax+4*idiv+4,slats5Mother,-xvol,-yvol, zoffs5+z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S06G",imax+4*idiv+4,slats6Mother,-xvol,-yvol, zoffs6+z1-z2, 0, "ONLY",divpar,3);
      }
      }
      
-
- if (stations[3]) {
+ if (fStations[3]) {
 
 //********************************************************************
 //                            Station 4                             **
@@ -793,23 +845,23 @@ void AliMUONv1::CreateGeometry()
      zpos1=iChamber1->Z(); 
      zpos2=iChamber2->Z();
      dstation = zpos2 - zpos1;
-     zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
+//      zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2; // not used any more
      
 //
 //   Mother volume
      tpar[0] = iChamber->RInner()-dframep; 
      tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
-     tpar[2] = 3.252;
+     tpar[2] = dstation/4;
 
-     gMC->Gsvolu("C07M", "TUBE", idAir, tpar, 3);
-     gMC->Gsvolu("C08M", "TUBE", idAir, tpar, 3);
-     gMC->Gspos("C07M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     gMC->Gspos("C08M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
+     gMC->Gsvolu("S07M", "TUBE", idAir, tpar, 3);
+     gMC->Gsvolu("S08M", "TUBE", idAir, tpar, 3);
+     gMC->Gspos("S07M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
+     gMC->Gspos("S08M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
      
 
      const Int_t nSlats4 = 6;  // number of slats per quadrant
-     const Int_t nPCB4[nSlats4] = {4,4,5,4,4,3}; // n PCB per slat
-     const Float_t xpos4[nSlats4] = {37.5, 40., 0., 0., 0., 0.};
+     const Int_t nPCB4[nSlats4] = {4,4,5,5,4,3}; // n PCB per slat
+     const Float_t xpos4[nSlats4] = {38.5, 40., 0., 0., 0., 0.};
      Float_t slatLength4[nSlats4];     
 
      // create and position the slat (mother) volumes 
@@ -833,19 +885,19 @@ void AliMUONv1::CreateGeometry()
        Float_t zSlat = (i%2 ==0)? spar[2] : -spar[2]; 
        sprintf(volNam7,"S07%d",i);
        gMC->Gsvolu(volNam7,"BOX",slatMaterial,spar,3);
-       gMC->Gspos(volNam7, i*4+1,"C07M", xSlat4, ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
-       gMC->Gspos(volNam7, i*4+2,"C07M",-xSlat4, ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
+       gMC->Gspos(volNam7, i*4+1,"S07M", xSlat4, ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
+       gMC->Gspos(volNam7, i*4+2,"S07M",-xSlat4, ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
        if (i>0) { 
-        gMC->Gspos(volNam7, i*4+3,"C07M", xSlat4,-ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
-        gMC->Gspos(volNam7, i*4+4,"C07M",-xSlat4,-ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
+        gMC->Gspos(volNam7, i*4+3,"S07M", xSlat4,-ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
+        gMC->Gspos(volNam7, i*4+4,"S07M",-xSlat4,-ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
        }
        sprintf(volNam8,"S08%d",i);
        gMC->Gsvolu(volNam8,"BOX",slatMaterial,spar,3);
-       gMC->Gspos(volNam8, i*4+1,"C08M", xSlat4, ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
-       gMC->Gspos(volNam8, i*4+2,"C08M",-xSlat4, ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
+       gMC->Gspos(volNam8, i*4+1,"S08M", xSlat4, ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
+       gMC->Gspos(volNam8, i*4+2,"S08M",-xSlat4, ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
        if (i>0) { 
-        gMC->Gspos(volNam8, i*4+3,"C08M", xSlat4,-ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
-        gMC->Gspos(volNam8, i*4+4,"C08M",-xSlat4,-ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
+        gMC->Gspos(volNam8, i*4+3,"S08M", xSlat4,-ySlat4, zSlat+2.*dzCh4, 0, "ONLY");
+        gMC->Gspos(volNam8, i*4+4,"S08M",-xSlat4,-ySlat4, zSlat-2.*dzCh4, 0, "ONLY");
        }
      }
      
@@ -872,8 +924,8 @@ void AliMUONv1::CreateGeometry()
  
      // create the sensitive volumes,
 
-     gMC->Gsvolu("S07G","BOX",sensMaterial,0,0);
-     gMC->Gsvolu("S08G","BOX",sensMaterial,0,0);
+     gMC->Gsvolu("S07G","BOX",sensMaterial,dum,0);
+     gMC->Gsvolu("S08G","BOX",sensMaterial,dum,0);
 
      // create the vertical frame volume 
 
@@ -896,7 +948,7 @@ void AliMUONv1::CreateGeometry()
        sprintf(volNam8,"S08%d",i);
        Float_t xvFrame  = (slatLength4[i] - vFrameLength)/2.;
        // position the vertical frames 
-       if (i!=1) { 
+       if (i!=1 && i!=0) { 
         gMC->Gspos("S07V",2*i-1,volNam7, xvFrame, 0., 0. , 0, "ONLY");
         gMC->Gspos("S07V",2*i  ,volNam7,-xvFrame, 0., 0. , 0, "ONLY");
         gMC->Gspos("S08V",2*i-1,volNam8, xvFrame, 0., 0. , 0, "ONLY");
@@ -943,7 +995,7 @@ void AliMUONv1::CreateGeometry()
      gMC->Gsvolu("S07N","BOX",nulocMaterial,nulocpar,3);
      gMC->Gsvolu("S08N","BOX",nulocMaterial,nulocpar,3);
      index = 0;
-     for (xx = -xxmax; xx<=xxmax; xx+=3*nulocLength) { 
+     for (xx = -xxmax; xx<=xxmax; xx+=2*nulocLength) { 
        index++; 
        gMC->Gspos("S07N",2*index-1,"S07B", xx, 0.,-bFrameWidth/4., 0, "ONLY");
        gMC->Gspos("S07N",2*index  ,"S07B", xx, 0., bFrameWidth/4., 0, "ONLY");
@@ -952,34 +1004,33 @@ void AliMUONv1::CreateGeometry()
      }
 
      // position the volumes approximating the circular section of the pipe
-     Float_t yoffs = sensHeight/2. - yOverlap/2.
+     Float_t yoffs = sensHeight/2. - yOverlap; 
      Float_t epsilon = 0.001; 
      Int_t ndiv=6;
      Float_t divpar[3];
      Double_t dydiv= sensHeight/ndiv;
-     Double_t ydiv = yoffs -dydiv - yOverlap/2.;
+     Double_t ydiv = yoffs -dydiv;
      Int_t imax=0; 
-     //     for (Int_t islat=0; islat<nSlats3; islat++) imax += nPCB3[islat]; 
      imax = 1; 
      Float_t rmin = 40.; 
      Float_t z1 = -spar[2], z2=2*spar[2]*1.01; 
      for (Int_t idiv=0;idiv<ndiv; idiv++){ 
        ydiv+= dydiv;
-       Float_t xdiv =2
+       Float_t xdiv = 0.
        if (ydiv<rmin) xdiv= rmin * TMath::Sin( TMath::ACos(ydiv/rmin) );
        divpar[0] = (pcbLength-xdiv)/2.; 
        divpar[1] = dydiv/2. - epsilon;
        divpar[2] = sensWidth/2.; 
-       Float_t xvol=(pcbLength+xdiv)/2.;
+       Float_t xvol=(pcbLength+xdiv)/2.+1.999;
        Float_t yvol=ydiv + dydiv/2.;
-       gMC->Gsposp("S07G",imax+4*idiv+1,"C07M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S08G",imax+4*idiv+1,"C08M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S07G",imax+4*idiv+2,"C07M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S08G",imax+4*idiv+2,"C08M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S07G",imax+4*idiv+3,"C07M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S08G",imax+4*idiv+3,"C08M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S07G",imax+4*idiv+4,"C07M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S08G",imax+4*idiv+4,"C08M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S07G",imax+4*idiv+1,"S07M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S08G",imax+4*idiv+1,"S08M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S07G",imax+4*idiv+2,"S07M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S08G",imax+4*idiv+2,"S08M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S07G",imax+4*idiv+3,"S07M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S08G",imax+4*idiv+3,"S08M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S07G",imax+4*idiv+4,"S07M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S08G",imax+4*idiv+4,"S08M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
      }
 
 
@@ -988,7 +1039,7 @@ void AliMUONv1::CreateGeometry()
 
  }
 
- if (stations[4]) {
+ if (fStations[4]) {
      
 
 //********************************************************************
@@ -1002,7 +1053,7 @@ void AliMUONv1::CreateGeometry()
      zpos1=iChamber1->Z(); 
      zpos2=iChamber2->Z();
      dstation = zpos2 - zpos1;
-     zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
+//      zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2; // not used any more
      
 //
 //   Mother volume
@@ -1010,15 +1061,15 @@ void AliMUONv1::CreateGeometry()
      tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
      tpar[2] = dstation/5.;
 
-     gMC->Gsvolu("C09M", "TUBE", idAir, tpar, 3);
-     gMC->Gsvolu("C10M", "TUBE", idAir, tpar, 3);
-     gMC->Gspos("C09M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
-     gMC->Gspos("C10M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
+     gMC->Gsvolu("S09M", "TUBE", idAir, tpar, 3);
+     gMC->Gsvolu("S10M", "TUBE", idAir, tpar, 3);
+     gMC->Gspos("S09M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
+     gMC->Gspos("S10M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
 
 
      const Int_t nSlats5 = 7;  // number of slats per quadrant
      const Int_t nPCB5[nSlats5] = {5,5,6,6,5,4,3}; // n PCB per slat
-     const Float_t xpos5[nSlats5] = {37.5, 40., 0., 0., 0., 0., 0.};
+     const Float_t xpos5[nSlats5] = {38.5, 40., 0., 0., 0., 0., 0.};
      Float_t slatLength5[nSlats5]; 
      char volNam9[5];
      char volNam10[5];
@@ -1028,7 +1079,7 @@ void AliMUONv1::CreateGeometry()
      for (i = 0; i<nSlats5; i++){
        slatLength5[i] = pcbLength * nPCB5[i] + 2. * dSlatLength; 
        xSlat5 = slatLength5[i]/2. - vFrameLength/2. +xpos5[i]; 
-       if (i==1) slatLength5[i] -=  2. *dSlatLength; // frame out in PCB with circular border 
+       if (i==1 || i==0) slatLength5[i] -=  2. *dSlatLength; // frame out in PCB with circular border 
        ySlat5 = sensHeight * i - yOverlap * i; 
        spar[0] = slatLength5[i]/2.; 
        spar[1] = slatHeight/2.;
@@ -1038,19 +1089,19 @@ void AliMUONv1::CreateGeometry()
        Float_t zSlat = (i%2 ==0)? -spar[2] : spar[2]; 
        sprintf(volNam9,"S09%d",i);
        gMC->Gsvolu(volNam9,"BOX",slatMaterial,spar,3);
-       gMC->Gspos(volNam9, i*4+1,"C09M", xSlat5, ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
-       gMC->Gspos(volNam9, i*4+2,"C09M",-xSlat5, ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
+       gMC->Gspos(volNam9, i*4+1,"S09M", xSlat5, ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
+       gMC->Gspos(volNam9, i*4+2,"S09M",-xSlat5, ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
        if (i>0) { 
-          gMC->Gspos(volNam9, i*4+3,"C09M", xSlat5,-ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
-          gMC->Gspos(volNam9, i*4+4,"C09M",-xSlat5,-ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
+          gMC->Gspos(volNam9, i*4+3,"S09M", xSlat5,-ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
+          gMC->Gspos(volNam9, i*4+4,"S09M",-xSlat5,-ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
        }
        sprintf(volNam10,"S10%d",i);
        gMC->Gsvolu(volNam10,"BOX",slatMaterial,spar,3);
-       gMC->Gspos(volNam10, i*4+1,"C10M", xSlat5, ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
-       gMC->Gspos(volNam10, i*4+2,"C10M",-xSlat5, ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
+       gMC->Gspos(volNam10, i*4+1,"S10M", xSlat5, ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
+       gMC->Gspos(volNam10, i*4+2,"S10M",-xSlat5, ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
        if (i>0) { 
-          gMC->Gspos(volNam10, i*4+3,"C10M", xSlat5,-ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
-          gMC->Gspos(volNam10, i*4+4,"C10M",-xSlat5,-ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
+          gMC->Gspos(volNam10, i*4+3,"S10M", xSlat5,-ySlat5, zSlat+2.*dzCh5, 0, "ONLY");
+          gMC->Gspos(volNam10, i*4+4,"S10M",-xSlat5,-ySlat5, zSlat-2.*dzCh5, 0, "ONLY");
        }
      }
 
@@ -1076,8 +1127,8 @@ void AliMUONv1::CreateGeometry()
  
      // create the sensitive volumes,
 
-     gMC->Gsvolu("S09G","BOX",sensMaterial,0,0);
-     gMC->Gsvolu("S10G","BOX",sensMaterial,0,0);
+     gMC->Gsvolu("S09G","BOX",sensMaterial,dum,0);
+     gMC->Gsvolu("S10G","BOX",sensMaterial,dum,0);
 
      // create the vertical frame volume 
 
@@ -1100,7 +1151,7 @@ void AliMUONv1::CreateGeometry()
        sprintf(volNam10,"S10%d",i);
        Float_t xvFrame  = (slatLength5[i] - vFrameLength)/2.;
        // position the vertical frames 
-       if (i!=1) { 
+       if (i!=1 && i!=0) { 
         gMC->Gspos("S09V",2*i-1,volNam9, xvFrame, 0., 0. , 0, "ONLY");
         gMC->Gspos("S09V",2*i  ,volNam9,-xvFrame, 0., 0. , 0, "ONLY");
         gMC->Gspos("S10V",2*i-1,volNam10, xvFrame, 0., 0. , 0, "ONLY");
@@ -1148,7 +1199,7 @@ void AliMUONv1::CreateGeometry()
      gMC->Gsvolu("S09N","BOX",nulocMaterial,nulocpar,3);
      gMC->Gsvolu("S10N","BOX",nulocMaterial,nulocpar,3);
      index = 0;
-     for (xx = -xxmax; xx<=xxmax; xx+=3*nulocLength) { 
+     for (xx = -xxmax; xx<=xxmax; xx+=2*nulocLength) { 
        index++; 
        gMC->Gspos("S09N",2*index-1,"S09B", xx, 0.,-bFrameWidth/4., 0, "ONLY");
        gMC->Gspos("S09N",2*index  ,"S09B", xx, 0., bFrameWidth/4., 0, "ONLY");
@@ -1156,12 +1207,12 @@ void AliMUONv1::CreateGeometry()
        gMC->Gspos("S10N",2*index  ,"S10B", xx, 0., bFrameWidth/4., 0, "ONLY");
      }
      // position the volumes approximating the circular section of the pipe
-     Float_t yoffs = sensHeight/2. - yOverlap/2.
+     Float_t yoffs = sensHeight/2. - yOverlap; 
      Float_t epsilon = 0.001; 
      Int_t ndiv=6;
      Float_t divpar[3];
      Double_t dydiv= sensHeight/ndiv;
-     Double_t ydiv = yoffs -dydiv - yOverlap/2.;
+     Double_t ydiv = yoffs -dydiv;
      Int_t imax=0; 
      //     for (Int_t islat=0; islat<nSlats3; islat++) imax += nPCB3[islat]; 
      imax = 1; 
@@ -1169,551 +1220,223 @@ void AliMUONv1::CreateGeometry()
      Float_t z1 = spar[2], z2=2*spar[2]*1.01; 
      for (Int_t idiv=0;idiv<ndiv; idiv++){ 
        ydiv+= dydiv;
-       Float_t xdiv =2
+       Float_t xdiv = 0.
        if (ydiv<rmin) xdiv= rmin * TMath::Sin( TMath::ACos(ydiv/rmin) );
        divpar[0] = (pcbLength-xdiv)/2.; 
        divpar[1] = dydiv/2. - epsilon;
        divpar[2] = sensWidth/2.; 
-       Float_t xvol=(pcbLength+xdiv)/2.;
+       Float_t xvol=(pcbLength+xdiv)/2. + 1.999;
        Float_t yvol=ydiv + dydiv/2.;
-       gMC->Gsposp("S09G",imax+4*idiv+1,"C09M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S10G",imax+4*idiv+1,"C10M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S09G",imax+4*idiv+2,"C09M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S10G",imax+4*idiv+2,"C10M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S09G",imax+4*idiv+3,"C09M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S10G",imax+4*idiv+3,"C10M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S09G",imax+4*idiv+4,"C09M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
-       gMC->Gsposp("S10G",imax+4*idiv+4,"C10M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S09G",imax+4*idiv+1,"S09M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S10G",imax+4*idiv+1,"S10M", xvol, yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S09G",imax+4*idiv+2,"S09M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S10G",imax+4*idiv+2,"S10M", xvol,-yvol, z1+z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S09G",imax+4*idiv+3,"S09M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S10G",imax+4*idiv+3,"S10M",-xvol, yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S09G",imax+4*idiv+4,"S09M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
+       gMC->Gsposp("S10G",imax+4*idiv+4,"S10M",-xvol,-yvol, z1-z2, 0, "ONLY",divpar,3);
      }
 
  }
  
 
-///////////////////////////////////////
-// GEOMETRY FOR THE TRIGGER CHAMBERS //
-///////////////////////////////////////
-
-// 03/00 P. Dupieux : introduce a slighly more realistic  
-//                    geom. of the trigger readout planes with
-//                    2 Zpos per trigger plane (alternate
-//                    between left and right of the trigger)  
-
-//  Parameters of the Trigger Chambers
-
-               
-     const Float_t kXMC1MIN=34.;       
-     const Float_t kXMC1MED=51.;                                
-     const Float_t kXMC1MAX=272.;                               
-     const Float_t kYMC1MIN=34.;                              
-     const Float_t kYMC1MAX=51.;                              
-     const Float_t kRMIN1=50.;
-     const Float_t kRMAX1=62.;
-     const Float_t kRMIN2=50.;
-     const Float_t kRMAX2=66.;
-
-//   zposition of the middle of the gas gap in mother vol 
-     const Float_t kZMCm=-3.6;
-     const Float_t kZMCp=+3.6;
-
-
-// TRIGGER STATION 1 - TRIGGER STATION 1 - TRIGGER STATION 1
-
-     // iChamber 1 and 2 for first and second chambers in the station
-     // iChamber (first chamber) kept for other quanties than Z,
-     // assumed to be the same in both chambers
-     iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[10];
-     iChamber2 =(AliMUONChamber*) (*fChambers)[11]; 
-
-     // 03/00 
-     // zpos1 and zpos2 are now the middle of the first and second
-     // plane of station 1 : 
-     // zpos1=(16075+15995)/2=16035 mm, thick/2=40 mm
-     // zpos2=(16225+16145)/2=16185 mm, thick/2=40 mm
-     //
-     // zpos1m=15999 mm , zpos1p=16071 mm (middles of gas gaps)
-     // zpos2m=16149 mm , zpos2p=16221 mm (middles of gas gaps)
-     // rem : the total thickness accounts for 1 mm of al on both 
-     // side of the RPCs (see zpos1 and zpos2), as previously
-
-     zpos1=iChamber1->Z();
-     zpos2=iChamber2->Z();
-
-
-// Mother volume definition     
-     tpar[0] = iChamber->RInner(); 
-     tpar[1] = iChamber->ROuter();
-     tpar[2] = 4.0;    
-     gMC->Gsvolu("CM11", "TUBE", idAir, tpar, 3);
-     gMC->Gsvolu("CM12", "TUBE", idAir, tpar, 3);
-     
-// Definition of the flange between the beam shielding and the RPC 
-     tpar[0]= kRMIN1;
-     tpar[1]= kRMAX1;
-     tpar[2]= 4.0;
-   
-     gMC->Gsvolu("CF1A", "TUBE", idAlu1, tpar, 3);     //Al
-     gMC->Gspos("CF1A", 1, "CM11", 0., 0., 0., 0, "MANY");
-     gMC->Gspos("CF1A", 2, "CM12", 0., 0., 0., 0, "MANY");
-
-
-// FIRST PLANE OF STATION 1
-
-//   ratios of zpos1m/zpos1p and inverse for first plane
-     Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
-     Float_t zpm=1./zmp;
-   
-
-// Definition of prototype for chambers in the first plane     
-          
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     gMC->Gsvolu("CC1A", "BOX ", idAlu1, tpar, 0);           //Al    
-     gMC->Gsvolu("CB1A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     gMC->Gsvolu("CG1A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
-// chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t kXMC1A=kXMC1MED+(kXMC1MAX-kXMC1MED)/2.;
-     const Float_t kYMC1Am=0.;
-     const Float_t kYMC1Ap=0.;
-          
-     tpar[2] = 0.1;    
-     gMC->Gsposp("CG1A", 1, "CB1A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     gMC->Gsposp("CB1A", 1, "CC1A", 0., 0., 0., 0, "ONLY",tpar,3);
-
-     tpar[2] = 0.4;
-     tpar[0] = (kXMC1MAX-kXMC1MED)/2.;
-     tpar[1] = kYMC1MIN;
-
-     gMC->Gsposp("CC1A", 1, "CM11",kXMC1A,kYMC1Am,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 2, "CM11",-kXMC1A,kYMC1Ap,kZMCp, 0, "ONLY", tpar, 3);
-     
-//  chamber type B    
-     Float_t tpar1save=tpar[1];
-     Float_t y1msave=kYMC1Am;
-     Float_t y1psave=kYMC1Ap;
+//********************************************************************
+//                            Trigger                               **
+//******************************************************************** 
+ /* 
+    zpos1 and zpos2 are the middle of the first and second
+    planes of station 1 (+1m for second station):
+    zpos1=(zpos1m+zpos1p)/2=(15999+16071)/2=16035 mm, thick/2=40 mm
+    zpos2=(zpos2m+zpos2p)/2=(16169+16241)/2=16205 mm, thick/2=40 mm
+    zposxm and zposxp= middles of gaz gaps within a detection plane
+    rem: the total thickness accounts for 1 mm of al on both
+    side of the RPCs (see zpos1 and zpos2)
+ */
+
+// vertical gap between right and left chambers (kDXZERO*2=4cm)
+ const Float_t kDXZERO=2.; 
+// main distances for chamber definition in first plane/first station
+ const Float_t kXMIN=34.;       
+ const Float_t kXMED=51.;                                
+ const Float_t kXMAX=272.; 
+// kXMAX will become 255. in real life. segmentation to be updated accordingly
+// (see fig.2-4 & 2-5 of Local Trigger Board PRR)
+ const Float_t kYMIN=34.;                              
+ const Float_t kYMAX=51.;                              
+// inner/outer radius of flange between beam shield. and chambers (1/station)
+ const Float_t kRMIN[2]={50.,50.};
+ const Float_t kRMAX[2]={64.,68.};
+// z position of the middle of the gas gap in mother vol 
+ const Float_t kZm=-3.6;
+ const Float_t kZp=+3.6;     
  
-     tpar[0] = (kXMC1MAX-kXMC1MIN)/2.;
-     tpar[1] = (kYMC1MAX-kYMC1MIN)/2.;
-     
-     const Float_t kXMC1B=kXMC1MIN+tpar[0];
-     const Float_t kYMC1Bp=(y1msave+tpar1save)*zpm+tpar[1];
-     const Float_t kYMC1Bm=(y1psave+tpar1save)*zmp+tpar[1];
-
-     gMC->Gsposp("CC1A", 3, "CM11",kXMC1B,kYMC1Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 4, "CM11",-kXMC1B,kYMC1Bm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 5, "CM11",kXMC1B,-kYMC1Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 6, "CM11",-kXMC1B,-kYMC1Bm,kZMCm, 0, "ONLY", tpar, 3);
-     
-//  chamber type C  (end of type B !!)      
-     tpar1save=tpar[1];
-     y1msave=kYMC1Bm;
-     y1psave=kYMC1Bp;
-
-     tpar[0] = kXMC1MAX/2;
-     tpar[1] = kYMC1MAX/2;
-     
-     const Float_t kXMC1C=tpar[0];
-// warning : same Z than type B
-     const Float_t kYMC1Cp=(y1psave+tpar1save)*1.+tpar[1];
-     const Float_t kYMC1Cm=(y1msave+tpar1save)*1.+tpar[1];
-     
-     gMC->Gsposp("CC1A", 7, "CM11",kXMC1C,kYMC1Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 8, "CM11",-kXMC1C,kYMC1Cm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 9, "CM11",kXMC1C,-kYMC1Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 10, "CM11",-kXMC1C,-kYMC1Cm,kZMCm, 0, "ONLY", tpar, 3);
-     
-//  chamber type D, E and F (same size)        
-     tpar1save=tpar[1];
-     y1msave=kYMC1Cm;
-     y1psave=kYMC1Cp;
-
-     tpar[0] = kXMC1MAX/2.;
-     tpar[1] = kYMC1MIN;
-     
-     const Float_t kXMC1D=tpar[0];
-     const Float_t kYMC1Dp=(y1msave+tpar1save)*zpm+tpar[1];
-     const Float_t kYMC1Dm=(y1psave+tpar1save)*zmp+tpar[1];
-     
-     gMC->Gsposp("CC1A", 11, "CM11",kXMC1D,kYMC1Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 12, "CM11",-kXMC1D,kYMC1Dp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 13, "CM11",kXMC1D,-kYMC1Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 14, "CM11",-kXMC1D,-kYMC1Dp,kZMCp, 0, "ONLY", tpar, 3);
-
-
-     tpar1save=tpar[1];
-     y1msave=kYMC1Dm;
-     y1psave=kYMC1Dp;
-     const Float_t kYMC1Ep=(y1msave+tpar1save)*zpm+tpar[1];
-     const Float_t kYMC1Em=(y1psave+tpar1save)*zmp+tpar[1];
-     
-     gMC->Gsposp("CC1A", 15, "CM11",kXMC1D,kYMC1Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 16, "CM11",-kXMC1D,kYMC1Em,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 17, "CM11",kXMC1D,-kYMC1Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 18, "CM11",-kXMC1D,-kYMC1Em,kZMCm, 0, "ONLY", tpar, 3);
-
-     tpar1save=tpar[1];
-     y1msave=kYMC1Em;
-     y1psave=kYMC1Ep;
-     const Float_t kYMC1Fp=(y1msave+tpar1save)*zpm+tpar[1];
-     const Float_t kYMC1Fm=(y1psave+tpar1save)*zmp+tpar[1];
-    
-     gMC->Gsposp("CC1A", 19, "CM11",kXMC1D,kYMC1Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 20, "CM11",-kXMC1D,kYMC1Fp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 21, "CM11",kXMC1D,-kYMC1Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC1A", 22, "CM11",-kXMC1D,-kYMC1Fp,kZMCp, 0, "ONLY", tpar, 3);
-
-// Positioning first plane in ALICE     
-     gMC->Gspos("CM11", 1, "ALIC", 0., 0., zpos1, 0, "ONLY");
-
-// End of geometry definition for the first plane of station 1
-
-
-
-// SECOND PLANE OF STATION 1 : proj ratio = zpos2/zpos1
-
-     const Float_t kZ12=zpos2/zpos1;
-      
-// Definition of prototype for chambers in the second plane of station 1    
-          
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     gMC->Gsvolu("CC2A", "BOX ", idAlu1, tpar, 0);           //Al    
-     gMC->Gsvolu("CB2A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     gMC->Gsvolu("CG2A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
-// chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t kXMC2A=kXMC1A*kZ12;
-     const Float_t kYMC2Am=0.;
-     const Float_t kYMC2Ap=0.;
-          
-     tpar[2] = 0.1;    
-     gMC->Gsposp("CG2A", 1, "CB2A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     gMC->Gsposp("CB2A", 1, "CC2A", 0., 0., 0., 0, "ONLY",tpar,3);
-
-     tpar[2] = 0.4;
-     tpar[0] = ((kXMC1MAX-kXMC1MED)/2.)*kZ12;
-     tpar[1] = kYMC1MIN*kZ12;
-
-     gMC->Gsposp("CC2A", 1, "CM12",kXMC2A,kYMC2Am,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 2, "CM12",-kXMC2A,kYMC2Ap,kZMCp, 0, "ONLY", tpar, 3);
-     
-
-//  chamber type B    
-
-     tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ12;
-     tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ12;
-     
-     const Float_t kXMC2B=kXMC1B*kZ12;
-     const Float_t kYMC2Bp=kYMC1Bp*kZ12;
-     const Float_t kYMC2Bm=kYMC1Bm*kZ12;
-     gMC->Gsposp("CC2A", 3, "CM12",kXMC2B,kYMC2Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 4, "CM12",-kXMC2B,kYMC2Bm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 5, "CM12",kXMC2B,-kYMC2Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 6, "CM12",-kXMC2B,-kYMC2Bm,kZMCm, 0, "ONLY", tpar, 3);
-
-     
-//  chamber type C   (end of type B !!)     
-
-     tpar[0] = (kXMC1MAX/2)*kZ12;
-     tpar[1] = (kYMC1MAX/2)*kZ12;
-     
-     const Float_t kXMC2C=kXMC1C*kZ12;
-     const Float_t kYMC2Cp=kYMC1Cp*kZ12;
-     const Float_t kYMC2Cm=kYMC1Cm*kZ12;     
-     gMC->Gsposp("CC2A", 7, "CM12",kXMC2C,kYMC2Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 8, "CM12",-kXMC2C,kYMC2Cm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 9, "CM12",kXMC2C,-kYMC2Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 10, "CM12",-kXMC2C,-kYMC2Cm,kZMCm, 0, "ONLY", tpar, 3);
-     
-//  chamber type D, E and F (same size)        
-
-     tpar[0] = (kXMC1MAX/2.)*kZ12;
-     tpar[1] = kYMC1MIN*kZ12;
-     
-     const Float_t kXMC2D=kXMC1D*kZ12;
-     const Float_t kYMC2Dp=kYMC1Dp*kZ12;
-     const Float_t kYMC2Dm=kYMC1Dm*kZ12;     
-     gMC->Gsposp("CC2A", 11, "CM12",kXMC2D,kYMC2Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 12, "CM12",-kXMC2D,kYMC2Dp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 13, "CM12",kXMC2D,-kYMC2Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 14, "CM12",-kXMC2D,-kYMC2Dp,kZMCp, 0, "ONLY", tpar, 3);
-
-     const Float_t kYMC2Ep=kYMC1Ep*kZ12;
-     const Float_t kYMC2Em=kYMC1Em*kZ12;
-     gMC->Gsposp("CC2A", 15, "CM12",kXMC2D,kYMC2Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 16, "CM12",-kXMC2D,kYMC2Em,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 17, "CM12",kXMC2D,-kYMC2Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 18, "CM12",-kXMC2D,-kYMC2Em,kZMCm, 0, "ONLY", tpar, 3);
-
-
-     const Float_t kYMC2Fp=kYMC1Fp*kZ12;
-     const Float_t kYMC2Fm=kYMC1Fm*kZ12;
-     gMC->Gsposp("CC2A", 19, "CM12",kXMC2D,kYMC2Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 20, "CM12",-kXMC2D,kYMC2Fp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 21, "CM12",kXMC2D,-kYMC2Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC2A", 22, "CM12",-kXMC2D,-kYMC2Fp,kZMCp, 0, "ONLY", tpar, 3);
-
-// Positioning second plane of station 1 in ALICE     
-     
-     gMC->Gspos("CM12", 1, "ALIC", 0., 0., zpos2, 0, "ONLY");
-
-// End of geometry definition for the second plane of station 1
-
+ iChamber1 = (AliMUONChamber*) (*fChambers)[10];     
+ zpos1 = iChamber1->Z();
 
-
-// TRIGGER STATION 2 - TRIGGER STATION 2 - TRIGGER STATION 2    
-
-     // 03/00 
-     // zpos3 and zpos4 are now the middle of the first and second
-     // plane of station 2 : 
-     // zpos3=(17075+16995)/2=17035 mm, thick/2=40 mm
-     // zpos4=(17225+17145)/2=17185 mm, thick/2=40 mm
-     //
-     // zpos3m=16999 mm , zpos3p=17071 mm (middles of gas gaps)
-     // zpos4m=17149 mm , zpos4p=17221 mm (middles of gas gaps)
-     // rem : the total thickness accounts for 1 mm of al on both 
-     // side of the RPCs (see zpos3 and zpos4), as previously
-     iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[12];
-     iChamber2 =(AliMUONChamber*) (*fChambers)[13];
-     Float_t zpos3=iChamber1->Z();
-     Float_t zpos4=iChamber2->Z();
-
-
-// Mother volume definition     
-     tpar[0] = iChamber->RInner(); 
-     tpar[1] = iChamber->ROuter();
-     tpar[2] = 4.0;    
+// ratio of zpos1m/zpos1p and inverse for first plane
+ Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
+ Float_t zpm=1./zmp;
  
-     gMC->Gsvolu("CM21", "TUBE", idAir, tpar, 3);
-     gMC->Gsvolu("CM22", "TUBE", idAir, tpar, 3);
-     
-// Definition of the flange between the beam shielding and the RPC 
-//  ???? interface shielding
-
-     tpar[0]= kRMIN2;
-     tpar[1]= kRMAX2;
-     tpar[2]= 4.0;
-   
-     gMC->Gsvolu("CF2A", "TUBE", idAlu1, tpar, 3);            //Al
-     gMC->Gspos("CF2A", 1, "CM21", 0., 0., 0., 0, "MANY");
-     gMC->Gspos("CF2A", 2, "CM22", 0., 0., 0., 0, "MANY");
-    
-
-
-// FIRST PLANE OF STATION 2 : proj ratio = zpos3/zpos1
-
-     const Float_t kZ13=zpos3/zpos1; 
-
-// Definition of prototype for chambers in the first plane of station 2       
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     gMC->Gsvolu("CC3A", "BOX ", idAlu1, tpar, 0);           //Al  
-     gMC->Gsvolu("CB3A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     gMC->Gsvolu("CG3A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
-
-// chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t kXMC3A=kXMC1A*kZ13;
-     const Float_t kYMC3Am=0.;
-     const Float_t kYMC3Ap=0.;
-          
-     tpar[2] = 0.1;    
-     gMC->Gsposp("CG3A", 1, "CB3A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     gMC->Gsposp("CB3A", 1, "CC3A", 0., 0., 0., 0, "ONLY",tpar,3);
-
-     tpar[2] = 0.4;
-     tpar[0] = ((kXMC1MAX-kXMC1MED)/2.)*kZ13;
-     tpar[1] = kYMC1MIN*kZ13;
-     gMC->Gsposp("CC3A", 1, "CM21",kXMC3A,kYMC3Am,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 2, "CM21",-kXMC3A,kYMC3Ap,kZMCp, 0, "ONLY", tpar, 3);
-
-     
-//  chamber type B    
-     tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ13;
-     tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ13;
-     
-     const Float_t kXMC3B=kXMC1B*kZ13;
-     const Float_t kYMC3Bp=kYMC1Bp*kZ13;
-     const Float_t kYMC3Bm=kYMC1Bm*kZ13;
-     gMC->Gsposp("CC3A", 3, "CM21",kXMC3B,kYMC3Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 4, "CM21",-kXMC3B,kYMC3Bm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 5, "CM21",kXMC3B,-kYMC3Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 6, "CM21",-kXMC3B,-kYMC3Bm,kZMCm, 0, "ONLY", tpar, 3);
-
-     
-//  chamber type C  (end of type B !!)      
-     tpar[0] = (kXMC1MAX/2)*kZ13;
-     tpar[1] = (kYMC1MAX/2)*kZ13;
-     
-     const Float_t kXMC3C=kXMC1C*kZ13;
-     const Float_t kYMC3Cp=kYMC1Cp*kZ13;
-     const Float_t kYMC3Cm=kYMC1Cm*kZ13;     
-     gMC->Gsposp("CC3A", 7, "CM21",kXMC3C,kYMC3Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 8, "CM21",-kXMC3C,kYMC3Cm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 9, "CM21",kXMC3C,-kYMC3Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 10, "CM21",-kXMC3C,-kYMC3Cm,kZMCm, 0, "ONLY", tpar, 3);
-     
-
-//  chamber type D, E and F (same size)         
-
-     tpar[0] = (kXMC1MAX/2.)*kZ13;
-     tpar[1] = kYMC1MIN*kZ13;
-     
-     const Float_t kXMC3D=kXMC1D*kZ13;
-     const Float_t kYMC3Dp=kYMC1Dp*kZ13;
-     const Float_t kYMC3Dm=kYMC1Dm*kZ13;          
-     gMC->Gsposp("CC3A", 11, "CM21",kXMC3D,kYMC3Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 12, "CM21",-kXMC3D,kYMC3Dp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 13, "CM21",kXMC3D,-kYMC3Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 14, "CM21",-kXMC3D,-kYMC3Dp,kZMCp, 0, "ONLY", tpar, 3);
-
-     const Float_t kYMC3Ep=kYMC1Ep*kZ13;
-     const Float_t kYMC3Em=kYMC1Em*kZ13;
-     gMC->Gsposp("CC3A", 15, "CM21",kXMC3D,kYMC3Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 16, "CM21",-kXMC3D,kYMC3Em,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 17, "CM21",kXMC3D,-kYMC3Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 18, "CM21",-kXMC3D,-kYMC3Em,kZMCm, 0, "ONLY", tpar, 3);
-
-     const Float_t kYMC3Fp=kYMC1Fp*kZ13;
-     const Float_t kYMC3Fm=kYMC1Fm*kZ13;
-     gMC->Gsposp("CC3A", 19, "CM21",kXMC3D,kYMC3Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 20, "CM21",-kXMC3D,kYMC3Fp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 21, "CM21",kXMC3D,-kYMC3Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC3A", 22, "CM21",-kXMC3D,-kYMC3Fp,kZMCp, 0, "ONLY", tpar, 3);
-       
-
-// Positioning first plane of station 2 in ALICE
-     
-     gMC->Gspos("CM21", 1, "ALIC", 0., 0., zpos3, 0, "ONLY");
-
-// End of geometry definition for the first plane of station 2
-
-
-
-
-// SECOND PLANE OF STATION 2 : proj ratio = zpos4/zpos1
-
-     const Float_t kZ14=zpos4/zpos1;
-     
-// Definition of prototype for chambers in the second plane of station 2    
-          
-     tpar[0]= 0.;
-     tpar[1]= 0.;
-     tpar[2]= 0.;
-          
-     gMC->Gsvolu("CC4A", "BOX ", idAlu1, tpar, 0);           //Al      
-     gMC->Gsvolu("CB4A", "BOX ", idtmed[1107], tpar, 0);     //Bakelite 
-     gMC->Gsvolu("CG4A", "BOX ", idtmed[1106], tpar, 0);     //Gas streamer
-
+ Int_t icount=0; // chamber counter (0 1 2 3)
+ for (Int_t istation=0; istation<2; istation++) { // loop on stations   
+     for (Int_t iplane=0; iplane<2; iplane++) {          // loop on detection planes
+        
+        Int_t iVolNum=1; // counter Volume Number
+        icount = Int_t(iplane*TMath::Power(2,0))+
+            Int_t(istation*TMath::Power(2,1));
+        
+        char volPlane[5]; 
+        sprintf(volPlane,"SM%d%d",istation+1,iplane+1);
+        
+        iChamber = (AliMUONChamber*) (*fChambers)[10+icount];
+        Float_t zpos = iChamber->Z();       
+        
+// mother volume 
+        tpar[0] = iChamber->RInner(); 
+        tpar[1] = iChamber->ROuter(); 
+        tpar[2] = 4.0;    
+        gMC->Gsvolu(volPlane,"TUBE",idAir,tpar,3);
+        
+// Flange between beam shielding and RPC 
+        tpar[0]= kRMIN[istation];
+        tpar[1]= kRMAX[istation];
+        tpar[2]= 4.0;
+        
+        char volFlange[5];
+        sprintf(volFlange,"SF%dA",icount+1);    
+        gMC->Gsvolu(volFlange,"TUBE",idAlu1,tpar,3);     //Al
+        gMC->Gspos(volFlange,1,volPlane,0.,0.,0.,0,"MANY");
+        
+// scaling factor
+        Float_t zRatio = zpos / zpos1;
+        
+// chamber prototype
+        tpar[0]= 0.;
+        tpar[1]= 0.;
+        tpar[2]= 0.;
+        
+        char volAlu[5]; // Alu
+        char volBak[5]; // Bakelite
+        char volGaz[5]; // Gas streamer
+        
+        sprintf(volAlu,"SC%dA",icount+1);
+        sprintf(volBak,"SB%dA",icount+1);
+        sprintf(volGaz,"SG%dA",icount+1);
+        
+        gMC->Gsvolu(volAlu,"BOX",idAlu1,tpar,0);           // Al
+        gMC->Gsvolu(volBak,"BOX",idtmed[1107],tpar,0);     // Bakelite
+        gMC->Gsvolu(volGaz,"BOX",idtmed[1106],tpar,0);     // Gas streamer
+        
 // chamber type A
-     tpar[0] = -1.;
-     tpar[1] = -1.;
-     
-     const Float_t kXMC4A=kXMC1A*kZ14;
-     const Float_t kYMC4Am=0.;
-     const Float_t kYMC4Ap=0.;
-          
-     tpar[2] = 0.1;    
-     gMC->Gsposp("CG4A", 1, "CB4A", 0., 0., 0., 0, "ONLY",tpar,3);
-     tpar[2] = 0.3;
-     gMC->Gsposp("CB4A", 1, "CC4A", 0., 0., 0., 0, "ONLY",tpar,3);
-
-     tpar[2] = 0.4;
-     tpar[0] = ((kXMC1MAX-kXMC1MED)/2.)*kZ14;
-     tpar[1] = kYMC1MIN*kZ14;
-     gMC->Gsposp("CC4A", 1, "CM22",kXMC4A,kYMC4Am,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 2, "CM22",-kXMC4A,kYMC4Ap,kZMCp, 0, "ONLY", tpar, 3);
-     
-
-//  chamber type B    
-     tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ14;
-     tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ14;
-     
-     const Float_t kXMC4B=kXMC1B*kZ14;
-     const Float_t kYMC4Bp=kYMC1Bp*kZ14;
-     const Float_t kYMC4Bm=kYMC1Bm*kZ14;
-     gMC->Gsposp("CC4A", 3, "CM22",kXMC4B,kYMC4Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 4, "CM22",-kXMC4B,kYMC4Bm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 5, "CM22",kXMC4B,-kYMC4Bp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 6, "CM22",-kXMC4B,-kYMC4Bm,kZMCm, 0, "ONLY", tpar, 3);
-
-     
-//  chamber type C   (end of type B !!)      
-     tpar[0] =(kXMC1MAX/2)*kZ14;
-     tpar[1] =  (kYMC1MAX/2)*kZ14;
-     
-     const Float_t kXMC4C=kXMC1C*kZ14;
-     const Float_t kYMC4Cp=kYMC1Cp*kZ14;
-     const Float_t kYMC4Cm=kYMC1Cm*kZ14;     
-     gMC->Gsposp("CC4A", 7, "CM22",kXMC4C,kYMC4Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 8, "CM22",-kXMC4C,kYMC4Cm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 9, "CM22",kXMC4C,-kYMC4Cp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 10, "CM22",-kXMC4C,-kYMC4Cm,kZMCm, 0, "ONLY", tpar, 3);
-
-     
-//  chamber type D, E and F (same size)      
-     tpar[0] = (kXMC1MAX/2.)*kZ14;
-     tpar[1] =  kYMC1MIN*kZ14;
-     
-     const Float_t kXMC4D=kXMC1D*kZ14;
-     const Float_t kYMC4Dp=kYMC1Dp*kZ14;
-     const Float_t kYMC4Dm=kYMC1Dm*kZ14;          
-     gMC->Gsposp("CC4A", 11, "CM22",kXMC4D,kYMC4Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 12, "CM22",-kXMC4D,kYMC4Dp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 13, "CM22",kXMC4D,-kYMC4Dm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 14, "CM22",-kXMC4D,-kYMC4Dp,kZMCp, 0, "ONLY", tpar, 3);
-
-     const Float_t kYMC4Ep=kYMC1Ep*kZ14;
-     const Float_t kYMC4Em=kYMC1Em*kZ14;          
-     gMC->Gsposp("CC4A", 15, "CM22",kXMC4D,kYMC4Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 16, "CM22",-kXMC4D,kYMC4Em,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 17, "CM22",kXMC4D,-kYMC4Ep,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 18, "CM22",-kXMC4D,-kYMC4Em,kZMCm, 0, "ONLY", tpar, 3);
-
-     const Float_t kYMC4Fp=kYMC1Fp*kZ14;
-     const Float_t kYMC4Fm=kYMC1Fm*kZ14;          
-     gMC->Gsposp("CC4A", 19, "CM22",kXMC4D,kYMC4Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 20, "CM22",-kXMC4D,kYMC4Fp,kZMCp, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 21, "CM22",kXMC4D,-kYMC4Fm,kZMCm, 0, "ONLY", tpar, 3);
-     gMC->Gsposp("CC4A", 22, "CM22",-kXMC4D,-kYMC4Fp,kZMCp, 0, "ONLY", tpar, 3);
-     
-
-// Positioning second plane of station 2 in ALICE
-     
-     gMC->Gspos("CM22", 1, "ALIC", 0., 0., zpos4, 0, "ONLY");
-
-// End of geometry definition for the second plane of station 2
+        tpar[0] = -1.;
+        tpar[1] = -1.;
+        
+        Float_t xA=(kDXZERO+kXMED+(kXMAX-kXMED)/2.)*zRatio;
+        Float_t yAm=0.;
+        Float_t yAp=0.;
+        
+        tpar[2] = 0.1;    
+        gMC->Gsposp(volGaz,1,volBak,0.,0.,0.,0,"ONLY",tpar,3);
+        tpar[2] = 0.3;
+        gMC->Gsposp(volBak,1,volAlu,0.,0.,0.,0,"ONLY",tpar,3);
+        
+        tpar[2] = 0.4;
+        tpar[0] = ((kXMAX-kXMED)/2.)*zRatio;
+        tpar[1] = kYMIN*zRatio;
+        
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xA,yAm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xA,yAp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsbool(volAlu,volFlange);
+        
+// chamber type B    
+        Float_t tpar1save=tpar[1];
+        Float_t y1msave=yAm;
+        Float_t y1psave=yAp;
+        
+        tpar[0] = ((kXMAX-kXMIN)/2.) * zRatio;
+        tpar[1] = ((kYMAX-kYMIN)/2.) * zRatio;
+        
+        Float_t xB=(kDXZERO+kXMIN)*zRatio+tpar[0];
+        Float_t yBp=(y1msave+tpar1save)*zpm+tpar[1];
+        Float_t yBm=(y1psave+tpar1save)*zmp+tpar[1];    
+
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xB, yBp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xB, yBm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xB,-yBp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xB,-yBm,kZm,0,"ONLY",tpar,3);
+        
+// chamber type C (note : same Z than type B)
+        tpar1save=tpar[1];
+        y1msave=yBm;
+        y1psave=yBp;
+        
+        tpar[0] = (kXMAX/2)*zRatio;
+        tpar[1] = (kYMAX/2)*zRatio;
+        
+        Float_t xC=kDXZERO*zRatio+tpar[0];
+        Float_t yCp=(y1psave+tpar1save)*1.+tpar[1];
+        Float_t yCm=(y1msave+tpar1save)*1.+tpar[1];
+        
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xC, yCp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xC, yCm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xC,-yCp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xC,-yCm,kZm,0,"ONLY",tpar,3);
+                
+// chamber type D, E and F (same size)        
+        tpar1save=tpar[1];
+        y1msave=yCm;
+        y1psave=yCp;
+        
+        tpar[0] = (kXMAX/2.)*zRatio;
+        tpar[1] =  kYMIN*zRatio;
+        
+        Float_t xD=kDXZERO*zRatio+tpar[0];
+        Float_t yDp=(y1msave+tpar1save)*zpm+tpar[1];
+        Float_t yDm=(y1psave+tpar1save)*zmp+tpar[1];
+        
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xD, yDm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xD, yDp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xD,-yDm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xD,-yDp,kZp,0,"ONLY",tpar,3);
+        
+        tpar1save=tpar[1];
+        y1msave=yDm;
+        y1psave=yDp;
+        Float_t yEp=(y1msave+tpar1save)*zpm+tpar[1];
+        Float_t yEm=(y1psave+tpar1save)*zmp+tpar[1];
+        
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xD, yEp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xD, yEm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xD,-yEp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xD,-yEm,kZm,0,"ONLY",tpar,3);
+        
+        tpar1save=tpar[1];
+        y1msave=yEm;
+        y1psave=yEp;
+        Float_t yFp=(y1msave+tpar1save)*zpm+tpar[1];
+        Float_t yFm=(y1psave+tpar1save)*zmp+tpar[1];
+        
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xD, yFm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xD, yFp,kZp,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane, xD,-yFm,kZm,0,"ONLY",tpar,3);
+        gMC->Gsposp(volAlu,iVolNum++,volPlane,-xD,-yFp,kZp,0,"ONLY",tpar,3);
 
-// End of trigger geometry definition
+// Positioning plane in ALICE     
+        gMC->Gspos(volPlane,1,"ALIC",0.,0.,zpos,0,"ONLY");
+        
+     } // end loop on detection planes
+ } // end loop on stations
 
 }
 
-
  
 //___________________________________________
 void AliMUONv1::CreateMaterials()
 {
   // *** DEFINITION OF AVAILABLE MUON MATERIALS *** 
   //
-  //     Ar-CO2 gas 
+  //     Ar-CO2 gas (80%+20%)
     Float_t ag1[3]   = { 39.95,12.01,16. };
     Float_t zg1[3]   = { 18.,6.,8. };
     Float_t wg1[3]   = { .8,.0667,.13333 };
@@ -1836,7 +1559,7 @@ void AliMUONv1::Init()
    // Initialize Tracking Chambers
    //
 
-   printf("\n\n\n Start Init for version 1 - CPC chamber type\n\n\n");
+   if(fDebug) printf("\n%s: Start Init for version 1 - CPC chamber type\n\n",ClassName());
    Int_t i;
    for (i=0; i<AliMUONConstants::NCh(); i++) {
        ( (AliMUONChamber*) (*fChambers)[i])->Init();
@@ -1844,12 +1567,11 @@ void AliMUONv1::Init()
    
    //
    // Set the chamber (sensitive region) GEANT identifier
-   AliMC* gMC = AliMC::GetMC(); 
-   ((AliMUONChamber*)(*fChambers)[0])->SetGid(gMC->VolId("C01G"));
-   ((AliMUONChamber*)(*fChambers)[1])->SetGid(gMC->VolId("C02G"));
+   ((AliMUONChamber*)(*fChambers)[0])->SetGid(gMC->VolId("S01G"));
+   ((AliMUONChamber*)(*fChambers)[1])->SetGid(gMC->VolId("S02G"));
 
-   ((AliMUONChamber*)(*fChambers)[2])->SetGid(gMC->VolId("C03G"));
-   ((AliMUONChamber*)(*fChambers)[3])->SetGid(gMC->VolId("C04G"));
+   ((AliMUONChamber*)(*fChambers)[2])->SetGid(gMC->VolId("S03G"));
+   ((AliMUONChamber*)(*fChambers)[3])->SetGid(gMC->VolId("S04G"));
 
    ((AliMUONChamber*)(*fChambers)[4])->SetGid(gMC->VolId("S05G"));
    ((AliMUONChamber*)(*fChambers)[5])->SetGid(gMC->VolId("S06G"));
@@ -1860,25 +1582,210 @@ void AliMUONv1::Init()
    ((AliMUONChamber*)(*fChambers)[8])->SetGid(gMC->VolId("S09G"));
    ((AliMUONChamber*)(*fChambers)[9])->SetGid(gMC->VolId("S10G"));
 
-   ((AliMUONChamber*)(*fChambers)[10])->SetGid(gMC->VolId("CG1A"));
-   ((AliMUONChamber*)(*fChambers)[11])->SetGid(gMC->VolId("CG2A"));
-   ((AliMUONChamber*)(*fChambers)[12])->SetGid(gMC->VolId("CG3A"));
-   ((AliMUONChamber*)(*fChambers)[13])->SetGid(gMC->VolId("CG4A"));
+   ((AliMUONChamber*)(*fChambers)[10])->SetGid(gMC->VolId("SG1A"));
+   ((AliMUONChamber*)(*fChambers)[11])->SetGid(gMC->VolId("SG2A"));
+   ((AliMUONChamber*)(*fChambers)[12])->SetGid(gMC->VolId("SG3A"));
+   ((AliMUONChamber*)(*fChambers)[13])->SetGid(gMC->VolId("SG4A"));
 
-   printf("\n\n\n Finished Init for version 0 - CPC chamber type\n\n\n");
+   if(fDebug) printf("\n%s: Finished Init for version 1 - CPC chamber type\n",ClassName());
 
    //cp 
-   printf("\n\n\n Start Init for Trigger Circuits\n\n\n");
+   if(fDebug) printf("\n%s: Start Init for Trigger Circuits\n",ClassName());
    for (i=0; i<AliMUONConstants::NTriggerCircuit(); i++) {
      ( (AliMUONTriggerCircuit*) (*fTriggerCircuits)[i])->Init(i);
    }
-   printf(" Finished Init for Trigger Circuits\n\n\n");
+   if(fDebug) printf("%s: Finished Init for Trigger Circuits\n",ClassName());
    //cp
 
 }
-
 //___________________________________________
 void AliMUONv1::StepManager()
+{
+  if (fStepManagerVersionOld) {
+    StepManagerOld();
+    return;
+  }
+ if (fStepManagerVersionNew) {
+    StepManagerNew();
+    return;
+  }
+ if (fStepManagerVersionTest) {
+    StepManagerTest();
+    return;
+  }
+
+
+  // Volume id
+  Int_t   copy, id;
+  Int_t   idvol;
+  Int_t   iChamber=0;
+  // Particule id, pos and mom vectors, 
+  // theta, phi angles with respect the normal of the chamber, 
+  // spatial step, delta_energy and time of flight
+  Int_t          ipart;
+  TLorentzVector pos, mom;
+  Float_t        theta, phi, tof;
+  Float_t        destep, step;
+  const  Float_t kBig = 1.e10;
+
+  // Only charged tracks
+  if( !(gMC->TrackCharge()) ) return; 
+
+  // Only gas gap inside chamber
+  // Tag chambers and record hits when track enters 
+  idvol=-1;
+  id=gMC->CurrentVolID(copy);
+  for (Int_t i = 1; i <= AliMUONConstants::NCh(); i++) {
+    if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()) {
+      iChamber = i;
+      idvol  = i-1;
+    }
+  }
+  if (idvol == -1) return;
+
+  //   printf(">>>> This Chamber %d\n",iChamber);
+
+  // record hits when track enters ...
+  if( gMC->IsTrackEntering()) gMC->SetMaxStep(fStepMaxInActiveGas);  
+
+  if (gMC->TrackStep() > 0.) {
+    // Get current particle id (ipart), track position (pos)  and momentum (mom)
+    gMC->TrackPosition(pos);
+    gMC->TrackMomentum(mom);
+    ipart    = gMC->TrackPid();
+    theta    = mom.Theta()*kRaddeg;     // theta of track
+    phi      = mom.Phi()  *kRaddeg;     // phi of the track
+    tof      = gMC->TrackTime();        // Time of flight
+    //
+    // momentum loss and steplength in last step
+    destep = gMC->Edep();
+    step   = gMC->TrackStep();
+
+    //new hit
+    GetMUONData()->AddHit(fIshunt, gAlice->GetCurrentTrackNumber(), iChamber, ipart, 
+                         pos.X(), pos.Y(), pos.Z(), tof, mom.P(), 
+                         theta, phi, step, destep);
+  }
+  // Track left chamber ...
+  if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
+    gMC->SetMaxStep(kBig);
+  }
+}
+
+
+Int_t  AliMUONv1::GetChamberId(Int_t volId) const
+{
+// Check if the volume with specified  volId is a sensitive volume (gas) 
+// of some chamber and returns the chamber number;
+// if not sensitive volume - return 0.
+// ---
+
+  for (Int_t i = 1; i <= AliMUONConstants::NCh(); i++)
+    if (volId==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()) return i;
+
+  return 0;
+}
+//__
+
+
+
+void AliMUONv1::StepManagerTest()
+{
+  return;
+}
+//________________________________________
+void AliMUONv1::StepManagerNew()
+{
+
+//   // Volume id
+//   Int_t   copy, id;
+//   Int_t   idvol;
+//   Int_t   iChamber=0;
+//   // Particule id, pos and mom vectors, 
+//   // theta, phi angles with respect the normal of the chamber, 
+//   // spatial step, delta_energy and time of flight
+//   Int_t          ipart;
+//   TLorentzVector pos, mom;
+//   Float_t        theta, phi, tof;
+//   Float_t        destep, step;
+//   const  Float_t kBig = 1.e10;
+
+//   // Only charged tracks
+//   if( !(gMC->TrackCharge()) ) return; 
+
+//   // Only gas gap inside chamber
+//   // Tag chambers and record hits when track enters 
+//   idvol=-1;
+//   id=gMC->CurrentVolID(copy);
+//   for (Int_t i = 1; i <= AliMUONConstants::NCh(); i++) {
+//     if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()) {
+//       iChamber = i;
+//       idvol  = i-1;
+//     }
+//   }
+//   static Float_t Sstep[20]; // Sum of steps per chamber
+//   // static Float_t Sdestep[20]; // Sum of eloss per chamber
+//   Float_t GAP;
+//   Float_t TEST; 
+
+//   if (idvol == -1) return;
+
+//   //  printf(">>>> This Chamber %d\n",iChamber);
+
+//   // record hits when track enters ...
+//   //if( gMC->IsTrackEntering()) gMC->SetMaxStep(fStepMaxInActiveGas);  
+
+//   if (gMC->TrackStep() > 0.) {
+//     // Get current particle id (ipart), track position (pos)  and momentum (mom)
+//     gMC->TrackPosition(pos);
+//     gMC->TrackMomentum(mom);
+//     ipart    = gMC->TrackPid();         // Particle
+//     theta    = mom.Theta()*kRaddeg;     // theta of track
+//     phi      = mom.Phi()  *kRaddeg;     // phi of the track
+//     tof      = gMC->TrackTime();        // Time of flight
+//     //
+//     // momentum loss and steplength in last step
+//     destep = gMC->Edep();
+//     step   = gMC->TrackStep();
+
+//     Sstep[iChamber]+=step;
+//     // Sdestep[iChamber]+=destep;
+
+//   }
+  
+//   step   =  Sstep[iChamber]; // Total step >= gap
+//   //  destep   =  Sdestep[iChamber]; // Total eloss
+
+
+//   // Track left chamber ...
+//   if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
+//     gMC->SetMaxStep(kBig);
+
+//     Sstep[iChamber]=0; // Reset for the next event
+//     //Sdestep[iChamber]=0; // Reset for the next event
+
+//     if (iChamber>=1 && iChamber<=2) GAP=0.4;
+//     if (iChamber>=11 && iChamber<=14) GAP=0.2;
+//     if (iChamber>=3 && iChamber<=10) GAP=0.5;
+   
+//     TF1 *ELOSS1 = new TF1("Gauss1","exp(-((x-4.13727e+01)**2)/(2*1.42223e+01**2))",0,75);
+//     TF1 *ELOSS2 = new TF1("Gauss2","exp(-((x+6.83795e+02)**2)/(2*4.48415e+02**2))",75,350);
+//     TEST=gRandom->Rndm();
+//     if (TEST <=0.89) destep=ELOSS1->GetRandom();
+//     else destep=ELOSS2->GetRandom();
+//     destep*=pow(10,-6)*0.0274;
+//     destep*=GAP/0.5;
+
+//     // One hit per chamber
+//     GetMUONData()->AddHit(fIshunt, gAlice->GetCurrentTrackNumber(), iChamber, ipart, 
+//        pos.X()-(step/2*sin(theta*kDegrad)*cos(phi*kDegrad)), pos.Y()-(step/2*sin(theta*kDegrad)*sin(phi*kDegrad)), pos.Z()-GAP/2, tof, mom.P(),theta, phi, step, destep);
+
+//   }
+}
+
+//___________________________________________
+void AliMUONv1::StepManagerOld()
 {
   Int_t          copy, id;
   static Int_t   idvol;
@@ -1889,102 +1796,99 @@ void AliMUONv1::StepManager()
   Float_t        theta,phi;
   Float_t        destep, step;
   
+  static Float_t Sstep;
   static Float_t eloss, eloss2, xhit, yhit, zhit, tof, tlength;
-  const  Float_t kBig=1.e10;
-  //  modifs perso
+  const  Float_t kBig = 1.e10;
   static Float_t hits[15];
 
   TClonesArray &lhits = *fHits;
 
   //
-  // Set maximum step size for gas
-  // numed=gMC->GetMedium();
   //
   // Only charged tracks
   if( !(gMC->TrackCharge()) ) return; 
   //
   // Only gas gap inside chamber
   // Tag chambers and record hits when track enters 
-  idvol=-1;
   id=gMC->CurrentVolID(copy);
-  
-    for (Int_t i=1; i<=AliMUONConstants::NCh(); i++) {
-      if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()){ 
-         vol[0]=i; 
-         idvol=i-1;
-      }
-    }
-    if (idvol == -1) return;
+  vol[0] = GetChamberId(id);
+  idvol = vol[0] -1;
+
+  if (idvol == -1) return;
+
   //
   // Get current particle id (ipart), track position (pos)  and momentum (mom) 
   gMC->TrackPosition(pos);
   gMC->TrackMomentum(mom);
 
   ipart  = gMC->TrackPid();
-  //Int_t ipart1 = gMC->IdFromPDG(ipart);
-  //printf("ich, ipart %d %d \n",vol[0],ipart1);
 
   //
   // momentum loss and steplength in last step
   destep = gMC->Edep();
   step   = gMC->TrackStep();
-  
+  // cout<<"------------"<<step<<endl;
   //
   // record hits when track enters ...
   if( gMC->IsTrackEntering()) {
+
       gMC->SetMaxStep(fMaxStepGas);
       Double_t tc = mom[0]*mom[0]+mom[1]*mom[1];
       Double_t rt = TMath::Sqrt(tc);
       Double_t pmom = TMath::Sqrt(tc+mom[2]*mom[2]);
-      Double_t tx=mom[0]/pmom;
-      Double_t ty=mom[1]/pmom;
-      Double_t tz=mom[2]/pmom;
-      Double_t s=((AliMUONChamber*)(*fChambers)[idvol])
+      Double_t tx = mom[0]/pmom;
+      Double_t ty = mom[1]/pmom;
+      Double_t tz = mom[2]/pmom;
+      Double_t s  = ((AliMUONChamber*)(*fChambers)[idvol])
          ->ResponseModel()
          ->Pitch()/tz;
       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]+s*tx;                 // X-position for hit
-      hits[2] = pos[1]+s*ty;                 // Y-position for hit
-      hits[3] = pos[2]+s*tz;                 // Z-position for hit
+      hits[1] = pos[0]+s*tx;            // X-position for hit
+      hits[2] = pos[1]+s*ty;            // Y-position for hit
+      hits[3] = pos[2]+s*tz;            // Z-position for hit
       hits[4] = theta;                  // theta angle of incidence
       hits[5] = phi;                    // phi angle of incidence 
-      hits[8] = (Float_t) fNPadHits;   // first padhit
+      hits[8] = 0;//PadHits does not exist anymore  (Float_t) fNPadHits;    // first padhit
       hits[9] = -1;                     // last pad hit
-
-      // modifs perso
-      hits[10] = mom[3]; // hit momentum P
-      hits[11] = mom[0]; // Px/P
-      hits[12] = mom[1]; // Py/P
-      hits[13] = mom[2]; // Pz/P
-      // fin modifs perso
+      hits[10] = mom[3];                // hit momentum P
+      hits[11] = mom[0];                // Px
+      hits[12] = mom[1];                // Py
+      hits[13] = mom[2];                // Pz
       tof=gMC->TrackTime();
-      hits[14] = tof;    // Time of flight
-      // phi angle of incidence
-      tlength = 0;
-      eloss   = 0;
-      eloss2  = 0;
-      xhit    = pos[0];
-      yhit    = pos[1];      
-      zhit    = pos[2];      
+      hits[14] = tof;                   // Time of flight
+      tlength  = 0;
+      eloss    = 0;
+      eloss2   = 0;
+      Sstep=0;
+      xhit     = pos[0];
+      yhit     = pos[1];      
+      zhit     = pos[2];      
+      Chamber(idvol).ChargeCorrelationInit();
       // Only if not trigger chamber
 
-      
+//       printf("---------------------------\n");
+//       printf(">>>> Y =  %f \n",hits[2]);
+//       printf("---------------------------\n");
+    
       
 
-      if(idvol<AliMUONConstants::NTrackingCh()) {
-         //
-         //  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);
-      }
+     //  if(idvol < AliMUONConstants::NTrackingCh()) {
+//       //
+//       //  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);
+//       }
   }
   eloss2+=destep;
-  
+  Sstep+=step;
+
+  // cout<<Sstep<<endl;
+
   // 
   // Calculate the charge induced on a pad (disintegration) in case 
   //
@@ -1999,33 +1903,35 @@ void AliMUONv1::StepManager()
       Float_t globalPos[3] = {pos[0], pos[1], pos[2]};
       gMC->Gmtod(globalPos,localPos,1); 
 
-      if(idvol<AliMUONConstants::NTrackingCh()) {
+      if(idvol < AliMUONConstants::NTrackingCh()) {
 // tracking chambers
          x0 = 0.5*(xhit+pos[0]);
          y0 = 0.5*(yhit+pos[1]);
          z0 = 0.5*(zhit+pos[2]);
-         //      z0 = localPos[2];
       } else {
 // trigger chambers
-         x0=xhit;
-         y0=yhit;
-//       z0=yhit;
-         z0=0.;
+         x0 = xhit;
+         y0 = yhit;
+         z0 = 0.;
       }
       
 
-      if (eloss >0)  MakePadHits(x0,y0,z0,eloss,tof,idvol);
+      //      if (eloss >0)  MakePadHits(x0,y0,z0,eloss,tof,idvol);
       
          
-      hits[6]=tlength;
-      hits[7]=eloss2;
-      if (fNPadHits > (Int_t)hits[8]) {
-         hits[8]= hits[8]+1;
-         hits[9]= (Float_t) fNPadHits;
-      }
-    
+      hits[6] = tlength;   // track length
+      hits[7] = eloss2;    // de/dx energy loss
+
+
+      //      if (fNPadHits > (Int_t)hits[8]) {
+      //         hits[8] = hits[8]+1;
+      //         hits[9] = 0: // PadHits does not exist anymore (Float_t) fNPadHits;
+      //}
+//
+//    new hit 
+      
       new(lhits[fNhits++]) 
-         AliMUONHit(fIshunt,gAlice->CurrentTrack(),vol,hits);
+         AliMUONHit(fIshunt, gAlice->GetCurrentTrackNumber(), vol,hits);
       eloss = 0; 
       //
       // Check additional signal generation conditions 
@@ -2043,13 +1949,14 @@ void AliMUONv1::StepManager()
       Float_t globalPos[3] = {pos[0], pos[1], pos[2]};
       gMC->Gmtod(globalPos,localPos,1); 
 
+      eloss    += destep;
 
-      if (eloss > 0 && idvol < AliMUONConstants::NTrackingCh())
-       MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),pos[2],eloss,tof,idvol);
+      // if (eloss > 0 && idvol < AliMUONConstants::NTrackingCh())
+      //       MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),pos[2],eloss,tof,idvol);
       xhit     = pos[0];
       yhit     = pos[1]; 
-      zhit     = pos[2]; 
-      eloss    = destep;
+      zhit     = pos[2];
+      eloss = 0;
       tlength += step ;
       //
       // nothing special  happened, add up energy loss