]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerCircuit.cxx
From Laurent:
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerCircuit.cxx
index 8a2706d3b054c86d7e1668a6604e9d7bc077ec26..9b443d26c571e5b2d4d99ff9aaeb87c7302dfeb1 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-/*
-$Log$
-Revision 1.3  2000/06/26 10:04:49  pcrochet
-problem with HP compiler solved (PH), static variables removed : now defined in AliMUONTriggerConstants
 
-*/
+/* $Id$ */
 
+#include <TMath.h>
+
+#include "AliMUONTriggerCircuit.h"
 #include "AliRun.h"
 #include "AliMUON.h"
-#include "AliMUONPoints.h"
-#include "AliMUONTriggerCircuit.h"
 #include "AliMUONTriggerConstants.h"
-#include "AliMUONSegmentation.h"
-#include "AliMUONResponse.h"
+#include "AliMUONGeometrySegmentation.h"
 #include "AliMUONChamber.h"
-#include "TMath.h"
-#include "iostream.h"
+#include "AliMUONConstants.h"
+#include "AliLog.h"
 
 ClassImp(AliMUONTriggerCircuit)
 
 //----------------------------------------------------------------------
-AliMUONTriggerCircuit::AliMUONTriggerCircuit() 
+AliMUONTriggerCircuit::AliMUONTriggerCircuit()
+  : TObject(),
+    fIdCircuit(0),
+    fX2m(0),
+    fX2ud(0)
 {
 // Constructor
-  fidCircuit=0;
-  fx2m=0;
-  fx2ud=0;
+
   fOrMud[0]=fOrMud[1]=0;
   Int_t i;  
   for (i=0; i<4; i++) {
@@ -53,31 +51,43 @@ AliMUONTriggerCircuit::AliMUONTriggerCircuit()
 }
 
 //----------------------------------------------------------------------
-AliMUONTriggerCircuit::AliMUONTriggerCircuit(const AliMUONTriggerCircuit& MUONTriggerCircuit)
+AliMUONTriggerCircuit::AliMUONTriggerCircuit(const AliMUONTriggerCircuit& theMUONTriggerCircuit)
+  : TObject(theMUONTriggerCircuit)
 {
-// Dummy copy constructor
+// Protected copy constructor
+
+  AliFatal("Not implemented.");
 }
 
 //----------------------------------------------------------------------
-AliMUONTriggerCircuit & AliMUONTriggerCircuit::operator=(const AliMUONTriggerCircuit& MUONTriggerCircuit)
+AliMUONTriggerCircuit & 
+AliMUONTriggerCircuit::operator=(const AliMUONTriggerCircuit& rhs)
 {
-// Dummy assignment operator
-    return *this;
+// Protected assignement operator
+
+  if (this == &rhs) return *this;
+
+  AliFatal("Not implemented.");
+    
+  return *this;  
 }
 
 //----------------------------------------------------------------------
 void AliMUONTriggerCircuit::Init(Int_t iCircuit) {
 // initialize circuit characteristics
-  fidCircuit=AliMUONTriggerConstants::CircuitId(iCircuit);
+  fIdCircuit=AliMUONTriggerConstants::CircuitId(iCircuit);
+
   LoadX2();
   LoadXCode();
   LoadYCode();
-  LoadXPos();
-  LoadYPos();
+
+  LoadXPos2();
+  LoadYPos2();
+  
 }
 
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::CircuitNumber(Int_t idCircuit){
+Int_t AliMUONTriggerCircuit::CircuitNumber(Int_t idCircuit) const {
 // returns circuit number iCircuit (0-234) corresponding to circuit idCircuit
   Int_t iCircuit=0;
   for (Int_t i=0; i<234; i++) {
@@ -89,7 +99,7 @@ Int_t AliMUONTriggerCircuit::CircuitNumber(Int_t idCircuit){
   return iCircuit;
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::ModuleNumber(Int_t idModule){
+Int_t AliMUONTriggerCircuit::ModuleNumber(Int_t idModule) const {
 // returns module number imod (from 0 to 63) corresponding to module idmodule
   Int_t absidModule=TMath::Abs(idModule);
   Int_t iModule=0;
@@ -103,26 +113,26 @@ Int_t AliMUONTriggerCircuit::ModuleNumber(Int_t idModule){
 }
 
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::Module(Int_t idCircuit) {
+Int_t AliMUONTriggerCircuit::Module(Int_t idCircuit) const {
 // returns ModuleId where Circuit idCircuit is sitting
   return Int_t(idCircuit/10);
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::Position(Int_t idCircuit) {
+Int_t AliMUONTriggerCircuit::Position(Int_t idCircuit) const {
 // returns position of idCircuit in correcponding Module
   return TMath::Abs(idCircuit)-TMath::Abs(Module(idCircuit))*10;
 }
 
 //----------------------------------------------------------------------
 void AliMUONTriggerCircuit::LoadX2() {
-// initialize fx2m, fx2ud and fOrMud
+// initialize fX2m, fX2ud and fOrMud
   
-  Int_t idModule=Module(fidCircuit);        // corresponding module Id.
+  Int_t idModule=Module(fIdCircuit);        // corresponding module Id.
 // and its number of X strips
   Int_t nStrX=AliMUONTriggerConstants::NstripX(ModuleNumber(idModule)); 
 // and its number of Y strips
   Int_t nStrY=AliMUONTriggerConstants::NstripY(ModuleNumber(idModule)); 
-  Int_t iPosCircuit=Position(fidCircuit); // position of circuit in module
+  Int_t iPosCircuit=Position(fIdCircuit); // position of circuit in module
   
 // first step : look at lower part 
   if (iPosCircuit==1) {               // need to scan lower module       
@@ -133,8 +143,8 @@ void AliMUONTriggerCircuit::LoadX2() {
       
       if (nStrY!=nStrD    
          &&TMath::Abs(idModule)!=42&&TMath::Abs(idModule)!=52) {   
-       if (nStrY==8) fx2m=1; 
-       if (nStrD==8) fx2ud=1; 
+       if (nStrY==8) fX2m=1; 
+       if (nStrD==8) fX2ud=1; 
       }      
     }      
 
@@ -152,8 +162,8 @@ void AliMUONTriggerCircuit::LoadX2() {
 
       if (nStrY!=nStrU    
          &&TMath::Abs(idModule)!=62&&TMath::Abs(idModule)!=52) {   
-       if (nStrY==8) fx2m=1; 
-       if (nStrU==8) fx2ud=1;
+       if (nStrY==8) fX2m=1; 
+       if (nStrU==8) fX2ud=1;
       }      
     }     
     
@@ -169,10 +179,10 @@ void AliMUONTriggerCircuit::LoadXCode(){
 
 // first part : fill XMC11 XMC12 and strips 8 to 24 (middle) XMC21 XMC22
   Int_t iStripCircMT1=0, iStripCircMT2=8;
-  Int_t idModule=Module(fidCircuit);        // corresponding module Id.
+  Int_t idModule=Module(fIdCircuit);        // corresponding module Id.
 // and its number of strips
   Int_t nStrX=AliMUONTriggerConstants::NstripX(ModuleNumber(idModule)); 
-  Int_t iPosCircuit=Position(fidCircuit);   // position of circuit in module  
+  Int_t iPosCircuit=Position(fIdCircuit);   // position of circuit in module  
   Int_t sign=TMath::Abs(idModule)/idModule; // left or right 
   Int_t istrip;
 
@@ -192,7 +202,7 @@ void AliMUONTriggerCircuit::LoadXCode(){
   Int_t idModuleD, idModuleU;
   Int_t nStrD, nStrU;
 
-  idModule=Module(fidCircuit); // corresponding module Id.
+  idModule=Module(fIdCircuit); // corresponding module Id.
 // number of X strips
   nStrX=AliMUONTriggerConstants::NstripX(ModuleNumber(idModule));  
   sign=TMath::Abs(idModule)/idModule;
@@ -259,7 +269,7 @@ void AliMUONTriggerCircuit::LoadYCode(){
 // note : for Y plane fill only "central part" of circuit
 // (upper and lower parts are filled in PreHandlingY of AliMUONTriggerDecision)
     
-  Int_t idModule=Module(fidCircuit);        // corresponding module Id.
+  Int_t idModule=Module(fIdCircuit);        // corresponding module Id.
 // and its number of Y strips
   Int_t nStrY=AliMUONTriggerConstants::NstripY(ModuleNumber(idModule)); 
   Int_t sign=TMath::Abs(idModule)/idModule; // left or right 
@@ -273,31 +283,61 @@ void AliMUONTriggerCircuit::LoadYCode(){
 }
 
 //----------------------------------------------------------------------
-void AliMUONTriggerCircuit::LoadYPos(){
+Float_t AliMUONTriggerCircuit::PtCal(Int_t istripX, Int_t idev, Int_t istripY){
+// returns calculated pt for circuit/istripX/idev/istripY according 
+// to the formula of the TRD. Note : idev (input) is in [0+30]
+
+  //  Int_t jdev = idev - 15;        // jdev in [-15+15]
+  Int_t istripX2=istripX+idev+1; // find istripX2 using istripX and idev
+
+  Float_t yPosX1=fYpos11[istripX];
+  Float_t yPosX2=fYpos21[istripX2];
+  Float_t xPosY1=fXpos11[istripY];
+  
+  Float_t zf=975.;
+  Float_t z1=AliMUONConstants::DefaultChamberZ(10);
+  Float_t z2=AliMUONConstants::DefaultChamberZ(12);
+  Float_t thetaDev=(1./zf)*(yPosX1*z2-yPosX2*z1)/(z2-z1);
+  Float_t xf=xPosY1*zf/z1; 
+  Float_t yf=yPosX2-((yPosX2-yPosX1)*(z2-zf))/(z2-z1);
+  return (3.*0.3/TMath::Abs(thetaDev)) * TMath::Sqrt(xf*xf+yf*yf)/zf;
+}
+//---------------------------------------------------------------------
+//----------------------- New Segmentation ----------------------------
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+void AliMUONTriggerCircuit::LoadYPos2(){
 // fill fYpos11 and fYpos21 -> y position of X declusterized strips
 
   Int_t chamber, cathode;
   Int_t code, idModule, idStrip, idSector;
   Float_t x, y, z, width;
-  Int_t istrip;
+  Int_t istrip, idDE;
 
   AliMUON *pMUON  = (AliMUON*)gAlice->GetModule("MUON");  
   AliMUONChamber*  iChamber;
-  AliMUONSegmentation*  segmentation;    
-
+  AliMUONGeometrySegmentation* segmentation;    
+  
 // first plane (11)
   chamber=11;
   cathode=1;
   iChamber = &(pMUON->Chamber(chamber-1));
-  segmentation=iChamber->SegmentationModel(cathode);
+  segmentation=iChamber->SegmentationModel2(cathode);
   
+  if (!segmentation) {
+    AliWarning("Segmentation not defined.");
+    return;
+  }  
+
   for (istrip=0; istrip<16; istrip++) {
     code=fXcode[0][istrip];           // decode current strip
     idModule=Int_t(code/100);           // corresponding module Id.
+    idDE = DetElemId(chamber, idModule);
     idStrip=TMath::Abs(code-idModule*100); // corresp. strip number in module
-    idSector=segmentation->Sector(idModule,idStrip); // corresponding sector
-    width=segmentation->Dpy(idSector);      // corresponding strip width
-    segmentation->GetPadCxy(idModule,idStrip,x,y,z); // get strip real position
+    idSector=segmentation->Sector(idDE, idModule, idStrip); // corresponding sector
+    width=segmentation->Dpy(idDE, idSector);      // corresponding strip width
+    segmentation->GetPadC(idDE, idModule,idStrip,x,y,z); // get strip real position
     
     fYpos11[2*istrip]=y;
     if (istrip!=15) fYpos11[2*istrip+1]=y+width/2.;
@@ -307,15 +347,17 @@ void AliMUONTriggerCircuit::LoadYPos(){
   chamber=13;
   cathode=1;
   iChamber = &(pMUON->Chamber(chamber-1));
-  segmentation=iChamber->SegmentationModel(cathode);
+  segmentation=iChamber->SegmentationModel2(cathode);
   
   for (istrip=0; istrip<32; istrip++) {
     code=fXcode[2][istrip];    // decode current strip
     idModule=Int_t(code/100);           // corresponding module Id.
+    idDE = DetElemId(chamber, idModule);
+    if (idModule == 0) continue;
     idStrip=TMath::Abs(code-idModule*100); // corresp. strip number in module
-    idSector=segmentation->Sector(idModule,idStrip); // corresponding sector
-    width=segmentation->Dpy(idSector);      // corresponding strip width
-    segmentation->GetPadCxy(idModule,idStrip,x,y,z); // get strip real position
+    idSector=segmentation->Sector(idDE, idModule, idStrip); // corresponding sector
+    width=segmentation->Dpy(idDE, idSector);      // corresponding strip width
+    segmentation->GetPadC(idDE, idModule,idStrip,x,y,z); // get strip real position
     
 // using idModule!=0 prevents to fill garbage in case of circuits 
 // in the first and last rows 
@@ -327,162 +369,150 @@ void AliMUONTriggerCircuit::LoadYPos(){
 }
 
 //----------------------------------------------------------------------
-void AliMUONTriggerCircuit::LoadXPos(){
+void AliMUONTriggerCircuit::LoadXPos2(){
 // fill fXpos11 -> x position of Y strips for the first plane only
 // fXpos11 contains the x position of Y strip for the current circuit
 // taking into account whether or nor not part(s) of the circuit
 // (middle, up or down) has(have) 16 strips
   
   Float_t x, y, z;
-  Int_t istrip;  
+  Int_t istrip, idDE;  
 
   Int_t chamber=11;
   Int_t cathode=2;
   AliMUON *pMUON  = (AliMUON*)gAlice->GetModule("MUON");  
   AliMUONChamber*  iChamber;
-  AliMUONSegmentation*  segmentation; 
+  AliMUONGeometrySegmentation*  segmentation; 
   iChamber = &(pMUON->Chamber(chamber-1));
-  segmentation=iChamber->SegmentationModel(cathode);
+  segmentation=iChamber->SegmentationModel2(cathode);
   
-  Int_t idModule=Module(fidCircuit);        // corresponding module Id.  
+  if (!segmentation) {
+    AliWarning("Segmentation not defined.");
+    return;
+  }  
+  
+  Int_t idModule=Module(fIdCircuit);        // corresponding module Id.  
 // number of Y strips
+  idDE = DetElemId(chamber, idModule);
+
   Int_t nStrY=AliMUONTriggerConstants::NstripY(ModuleNumber(idModule)); 
-  Int_t idSector=segmentation->Sector(idModule,0); // corresp. sector
-  Float_t width=segmentation->Dpx(idSector);      // corresponding strip width
+  Int_t idSector=segmentation->Sector(idDE, idModule,0); // corresp. sector
+  Float_t width=segmentation->Dpx(idDE, idSector);      // corresponding strip width
   
 // first case : up middle and down parts have all 8 or 16 strip 
-  if ((nStrY==16)||(nStrY==8&&fx2m==0&&fx2ud==0)) { 
+  if ((nStrY==16)||(nStrY==8&&fX2m==0&&fX2ud==0)) { 
     for (istrip=0; istrip<nStrY; istrip++) {
-      segmentation->GetPadCxy(idModule,istrip,x,y,z); 
+      segmentation->GetPadC(idDE, idModule,istrip,x,y,z); 
       fXpos11[istrip]=x;
     }
 // second case : mixing 8 and 16 strips within same circuit      
   } else {
     for (istrip=0; istrip<nStrY; istrip++) {
-      if (nStrY!=8) { cout << " bug in LoadXpos " << "\n";}
-      segmentation->GetPadCxy(idModule,istrip,x,y,z); 
+      if (nStrY!=8) { printf(" bug in LoadXpos \n");}
+      segmentation->GetPadC(idDE, idModule, istrip, x, y, z); 
       fXpos11[2*istrip]=x-width/4.;
       fXpos11[2*istrip+1]=fXpos11[2*istrip]+width/2.;
     }
   }   
 }
 
-//----------------------------------------------------------------------
-Float_t AliMUONTriggerCircuit::PtCal(Int_t istripX, Int_t idev, Int_t istripY){
-// returns calculated pt for circuit/istripX/idev/istripY according 
-// to the formula of the TRD. Note : idev (input) is in [0+30]
-
-  //  Int_t jdev = idev - 15;        // jdev in [-15+15]
-  Int_t istripX2=istripX+idev+1; // find istripX2 using istripX and idev
-
-  Float_t yPosX1=fYpos11[istripX];
-  Float_t yPosX2=fYpos21[istripX2];
-  Float_t xPosY1=fXpos11[istripY];
-  
-  Float_t zf=975., z1=1603.5, z2=1703.5;
-  Float_t thetaDev=(1./zf)*(yPosX1*z2-yPosX2*z1)/(z2-z1);
-  Float_t xf=xPosY1*zf/z1; 
-  Float_t yf=yPosX2-((yPosX2-yPosX1)*(z2-zf))/(z2-z1);
-  return (3.*0.3/TMath::Abs(thetaDev)) * TMath::Sqrt(xf*xf+yf*yf)/zf;
-}
-
 //----------------------------------------------------------------------
 //--- methods which return member data related info
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetIdCircuit(){ 
+Int_t AliMUONTriggerCircuit::GetIdCircuit() const 
 // returns circuit Id
-  return fidCircuit;
+  return fIdCircuit;
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetIdModule(){ 
+Int_t AliMUONTriggerCircuit::GetIdModule() const 
 // returns module Id
-  return Module(fidCircuit);
+  return Module(fIdCircuit);
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetNstripX() { 
+Int_t AliMUONTriggerCircuit::GetNstripX() const 
 // returns the number of X strips in the module where the circuit is sitting
-  return AliMUONTriggerConstants::NstripX(ModuleNumber(Module(fidCircuit)));
+  return AliMUONTriggerConstants::NstripX(ModuleNumber(Module(fIdCircuit)));
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetNstripY() { 
+Int_t AliMUONTriggerCircuit::GetNstripY() const 
 // returns the number of Y strips in the module where the circuit is sitting
-  return AliMUONTriggerConstants::NstripY(ModuleNumber(Module(fidCircuit)));
+  return AliMUONTriggerConstants::NstripY(ModuleNumber(Module(fIdCircuit)));
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetPosCircuit() { 
+Int_t AliMUONTriggerCircuit::GetPosCircuit() const 
 // returns the position of the circuit in its module
-  return Position(fidCircuit);
+  return Position(fIdCircuit);
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetIdCircuitD(){
+Int_t AliMUONTriggerCircuit::GetIdCircuitD() const {
 // returns the Id of the circuit down 
-  Int_t idModule=Module(fidCircuit);
+  Int_t idModule=Module(fIdCircuit);
   Int_t idModuleD=(TMath::Abs(idModule)+10)*(TMath::Abs(idModule)/idModule); 
   return (TMath::Abs(idModuleD)*10+1)*(TMath::Abs(idModule)/idModule);
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetICircuitD(){
+Int_t AliMUONTriggerCircuit::GetICircuitD() const {
 // returns the number of the circuit down 
-  Int_t idModule=Module(fidCircuit);
+  Int_t idModule=Module(fIdCircuit);
   Int_t idModuleD=(TMath::Abs(idModule)+10)*(TMath::Abs(idModule)/idModule); 
   Int_t idCircuitD=
     (TMath::Abs(idModuleD)*10+1)*(TMath::Abs(idModule)/idModule);
   return CircuitNumber(idCircuitD);
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetIdCircuitU(){
+Int_t AliMUONTriggerCircuit::GetIdCircuitU() const {
 // returns the Id of the circuit up 
-  Int_t idModule=Module(fidCircuit);
+  Int_t idModule=Module(fIdCircuit);
   Int_t idModuleU=(TMath::Abs(idModule)-10)*(TMath::Abs(idModule)/idModule); 
   return (TMath::Abs(idModuleU)*10+1)*(TMath::Abs(idModule)/idModule);
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetICircuitU(){
+Int_t AliMUONTriggerCircuit::GetICircuitU() const {
 // returns the number of the circuit up 
-  Int_t idModule=Module(fidCircuit);
+  Int_t idModule=Module(fIdCircuit);
   Int_t idModuleU=(TMath::Abs(idModule)-10)*(TMath::Abs(idModule)/idModule); 
   Int_t idCircuitU=
     (TMath::Abs(idModuleU)*10+1)*(TMath::Abs(idModule)/idModule);
   return CircuitNumber(idCircuitU);
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetX2m(){ 
-// returns fx2m
-  return fx2m;
+Int_t AliMUONTriggerCircuit::GetX2m() const 
+// returns fX2m
+  return fX2m;
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetX2ud(){ 
-// returns fx2ud
-  return fx2ud;
+Int_t AliMUONTriggerCircuit::GetX2ud() const 
+// returns fX2ud
+  return fX2ud;
 }
 //----------------------------------------------------------------------
-void AliMUONTriggerCircuit::GetOrMud(Int_t orMud[2]){
+void AliMUONTriggerCircuit::GetOrMud(Int_t orMud[2]) const {
 // returns fOrMud 
   orMud[0]=fOrMud[0];
   orMud[1]=fOrMud[1];
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetXcode(Int_t chamber, Int_t istrip){
+Int_t AliMUONTriggerCircuit::GetXcode(Int_t chamber, Int_t istrip) const {
 // returns X code of circuit/chamber/istrip (warning : chamber in [0,3])
   return fXcode[chamber][istrip];
 }
 //----------------------------------------------------------------------
-Int_t AliMUONTriggerCircuit::GetYcode(Int_t chamber, Int_t istrip){
+Int_t AliMUONTriggerCircuit::GetYcode(Int_t chamber, Int_t istrip) const {
 // returns Y code of circuit/chamber/istrip (warning : chamber in [0,3])
   return fYcode[chamber][istrip];
 }
 //----------------------------------------------------------------------
-Float_t AliMUONTriggerCircuit::GetY11Pos(Int_t istrip){
+Float_t AliMUONTriggerCircuit::GetY11Pos(Int_t istrip) const {
 // returns Y position of X strip istrip in MC11
   return fYpos11[istrip];
 }
 //----------------------------------------------------------------------
-Float_t AliMUONTriggerCircuit::GetY21Pos(Int_t istrip){
+Float_t AliMUONTriggerCircuit::GetY21Pos(Int_t istrip) const {
 // returns Y position of X strip istrip in MC21
   return fYpos21[istrip];
 }
 //----------------------------------------------------------------------
-Float_t AliMUONTriggerCircuit::GetX11Pos(Int_t istrip){
+Float_t AliMUONTriggerCircuit::GetX11Pos(Int_t istrip) const {
 // returns X position of Y strip istrip in MC11
   return fXpos11[istrip];
 }
@@ -491,7 +521,19 @@ Float_t AliMUONTriggerCircuit::GetX11Pos(Int_t istrip){
 //----------------------------------------------------------------------
 
 
-
+Int_t AliMUONTriggerCircuit::DetElemId(Int_t ichamber, Int_t idModule)
+{
+// 07/22/05 bug found by Christophe. 
+// due to the inversion right-left of detElemId somewhere in the code
+// (AliMUONTriggerGeometrybuilder is correct!!!)
+// fixed temporary here. to be changed with official numbering of DeElemId.
+//
+// returns the detection element Id for given chamber and module
+// ichamber (from 11 to 14), idModule (from 11 to 97)
+//    Int_t itmp = (idModule > 0) ? 0 : 50; // right=0, left=50   
+    Int_t itmp = (idModule > 0) ? 50 : 0; // right=50, left=0   
+    return (ichamber*100)+itmp+(9-Int_t(TMath::Abs(idModule)/10));
+}