]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliEMCALGeoUtils.cxx
Update mini-task with big output flag and add current status macros
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALGeoUtils.cxx
index c9d7194bb0f67d4dde84e76188ac0b10682f4089..5b0d25d4854efea1db1671fb7d4eb62b51bb3a49 100644 (file)
@@ -26,7 +26,7 @@
 //        You have to use just the correct name of geometry. If name is empty string the
 //        default name of geometry will be used.
 //         
-//  AliEMCALGeoUtils* geom = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
+//  AliEMCALGeoUtils* geom = new AliEMCALGeoUtils("EMCAL_COMPLETEV1","EMCAL");
 //  TGeoManager::Import("geometry.root");
 //
 //  MC:   If you work with MC data you have to get geometry the next way: 
@@ -64,16 +64,19 @@ AliEMCALGeoUtils::AliEMCALGeoUtils():
   fCentersOfCellsPhiDir(0x0),fEtaCentersOfCells(0x0),
   fNCells(0),fNPhi(0),fCentersOfCellsXDir(0x0),fArm1EtaMin(0),
   fArm1EtaMax(0),fArm1PhiMin(0),fArm1PhiMax(0),fEtaMaxOfTRD1(0),
-  fShishKebabTrd1Modules(0),fParSM(0x0),fPhiModuleSize(0.),
+  fShishKebabTrd1Modules(0),fPhiModuleSize(0.),
   fEtaModuleSize(0.),fPhiTileSize(0.),fEtaTileSize(0.),fNZ(0),
   fIPDistance(0.),fLongModuleSize(0.),fShellThickness(0.),
-  fZLength(0.),fSampling(0.)
+  fZLength(0.),fSampling(0.),fUseExternalMatrices(kFALSE)
 {
   // default ctor 
   // must be kept public for root persistency purposes, but should never be called by the outside world
   fEnvelop[0] = 0.;
   fEnvelop[1] = 0.;
   fEnvelop[2] = 0.;
+  fParSM[0]   = 0.;
+  fParSM[1]   = 0.;
+  fParSM[2]   = 0.;
   for(Int_t i=0;i<12;i++)fkSModuleMatrix[i]=0 ;
 
   for (Int_t i = 0; i < 48; i++)
@@ -90,14 +93,17 @@ AliEMCALGeoUtils::AliEMCALGeoUtils(const AliEMCALGeoUtils & geo)
     fCentersOfCellsPhiDir(geo.fCentersOfCellsPhiDir),fEtaCentersOfCells(geo.fEtaCentersOfCells),
     fNCells(geo.fNCells),fNPhi(geo.fNPhi),fCentersOfCellsXDir(geo.fCentersOfCellsXDir),fArm1EtaMin(geo.fArm1EtaMin),
     fArm1EtaMax(geo.fArm1EtaMax),fArm1PhiMin(geo.fArm1PhiMin),fArm1PhiMax(geo.fArm1PhiMax),fEtaMaxOfTRD1(geo.fEtaMaxOfTRD1),
-    fShishKebabTrd1Modules(geo.fShishKebabTrd1Modules),fParSM(geo.fParSM),fPhiModuleSize(geo.fPhiModuleSize),
+    fShishKebabTrd1Modules(geo.fShishKebabTrd1Modules),fPhiModuleSize(geo.fPhiModuleSize),
     fEtaModuleSize(geo.fEtaModuleSize),fPhiTileSize(geo.fPhiTileSize),fEtaTileSize(geo.fEtaTileSize),fNZ(geo.fNZ),
     fIPDistance(geo.fIPDistance),fLongModuleSize(geo.fLongModuleSize),fShellThickness(geo.fShellThickness),
-    fZLength(geo.fZLength),fSampling(geo.fSampling)
+    fZLength(geo.fZLength),fSampling(geo.fSampling),fUseExternalMatrices(geo.fUseExternalMatrices)
 {
   fEnvelop[0] = geo.fEnvelop[0];
   fEnvelop[1] = geo.fEnvelop[1];
   fEnvelop[2] = geo.fEnvelop[2];
+  fParSM[0]   = geo.fParSM[0];
+  fParSM[1]   = geo.fParSM[1];
+  fParSM[2]   = geo.fParSM[2];
   for(Int_t i=0;i<12;i++)fkSModuleMatrix[i]=0 ;
   
   for (Int_t i = 0; i < 48; i++)
@@ -114,10 +120,10 @@ AliEMCALGeoUtils::AliEMCALGeoUtils(const Text_t* name, const Text_t* title)
     fCentersOfCellsPhiDir(0x0),fEtaCentersOfCells(0x0),
     fNCells(0),fNPhi(0),fCentersOfCellsXDir(0x0),fArm1EtaMin(0),
     fArm1EtaMax(0),fArm1PhiMin(0),fArm1PhiMax(0),fEtaMaxOfTRD1(0),
-    fShishKebabTrd1Modules(0),fParSM(0x0),fPhiModuleSize(0.),
+    fShishKebabTrd1Modules(0),fPhiModuleSize(0.),
     fEtaModuleSize(0.),fPhiTileSize(0.),fEtaTileSize(0.),fNZ(0),
     fIPDistance(0.),fLongModuleSize(0.),fShellThickness(0.),
-    fZLength(0.),fSampling(0.)
+    fZLength(0.),fSampling(0.), fUseExternalMatrices(kFALSE)
 { 
 
   // ctor only for normal usage 
@@ -151,20 +157,22 @@ AliEMCALGeoUtils::AliEMCALGeoUtils(const Text_t* name, const Text_t* title)
   fEnvelop[0] = fEMCGeometry->GetEnvelop(0);
   fEnvelop[1] = fEMCGeometry->GetEnvelop(1);
   fEnvelop[2] = fEMCGeometry->GetEnvelop(2);
+  fParSM[0]   = fEMCGeometry->GetSuperModulesPar(0);
+  fParSM[1]   = fEMCGeometry->GetSuperModulesPar(1);
+  fParSM[2]   = fEMCGeometry->GetSuperModulesPar(2);
   fArm1EtaMin = fEMCGeometry->GetArm1EtaMin();
   fArm1EtaMax = fEMCGeometry->GetArm1EtaMax();
   fArm1PhiMin = fEMCGeometry->GetArm1PhiMin();
   fArm1PhiMax = fEMCGeometry->GetArm1PhiMax();
   fShellThickness = fEMCGeometry->GetShellThickness();
-  fZLength = fEMCGeometry->GetZLength();
-  fSampling = fEMCGeometry->GetSampling();
-  fParSM = fEMCGeometry->GetSuperModulesPars();
+  fZLength    = fEMCGeometry->GetZLength();
+  fSampling   = fEMCGeometry->GetSampling();
   fEtaModuleSize = fEMCGeometry->GetEtaModuleSize();
   fPhiModuleSize = fEMCGeometry->GetPhiModuleSize();
   fEtaTileSize = fEMCGeometry->GetEtaTileSize();
   fPhiTileSize = fEMCGeometry->GetPhiTileSize();
-  fNZ = fEMCGeometry->GetNZ();
-  fIPDistance = fEMCGeometry->GetIPDistance();
+  fNZ          = fEMCGeometry->GetNZ();
+  fIPDistance  = fEMCGeometry->GetIPDistance();
   fLongModuleSize = fEMCGeometry->GetLongModuleSize();
 
   CreateListOfTrd1Modules();
@@ -174,7 +182,7 @@ AliEMCALGeoUtils::AliEMCALGeoUtils(const Text_t* name, const Text_t* title)
        
   if (AliDebugLevel()>=2) {
     fEMCGeometry->Print();
-    PrintGeometry();
+    PrintGeometryGeoUtils();
   }
 
   for (Int_t ix = 0; ix < 48; ix++)
@@ -185,7 +193,7 @@ AliEMCALGeoUtils::AliEMCALGeoUtils(const Text_t* name, const Text_t* title)
 
 //____________________________________________________________________________
 AliEMCALGeoUtils & AliEMCALGeoUtils::operator = (const AliEMCALGeoUtils  & /*rvalue*/) { 
-
+  //assing operator
   Fatal("assignment operator", "not implemented") ; 
     return *this ;
 }
@@ -301,6 +309,16 @@ void AliEMCALGeoUtils::PrintCellIndexes(Int_t absId, int pri, const char *tit) c
   }
 }
 
+void AliEMCALGeoUtils::PrintLocalTrd1(Int_t pri) const
+{
+  // For comparing with numbers from drawing
+  for(Int_t i=0; i<GetShishKebabTrd1Modules()->GetSize(); i++){
+    printf(" %s | ", GetShishKebabModule(i)->GetName());
+    if(i==0 && pri<1) GetShishKebabModule(i)->PrintShish(1);
+    else     GetShishKebabModule(i)->PrintShish(pri);
+  }
+}
+
 //________________________________________________________________________________________________
 void AliEMCALGeoUtils::EtaPhiFromIndex(Int_t absId,Double_t &eta,Double_t &phi) const
 {
@@ -660,6 +678,7 @@ void AliEMCALGeoUtils::CreateListOfTrd1Modules()
   // Generate the list of Trd1 modules
   // which will make up the EMCAL
   // geometry
+  // key: look to the AliEMCALShishKebabTrd1Module::
 
   AliDebug(2,Form(" AliEMCALGeometry::CreateListOfTrd1Modules() started "));
 
@@ -786,7 +805,7 @@ AliEMCALShishKebabTrd1Module* AliEMCALGeoUtils::GetShishKebabModule(Int_t neta)
 }
 
 //___________________________________________________________________
-void AliEMCALGeoUtils::PrintGeometry()
+void AliEMCALGeoUtils::PrintGeometryGeoUtils()
 {
   //Print information from geometry
   fEMCGeometry->PrintGeometry();
@@ -969,7 +988,7 @@ Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromTRU(const Int_t iTRU, const Int_t
 {
        //Trigger mapping method, get  FastOr Index from TRU
 
-    if (iTRU > 31 || iTRU < 0 || iADC > 95 || iADC < 0) 
+  if (iTRU > 31 || iTRU < 0 || iADC > 95 || iADC < 0) 
        {
                AliError("TRU out of range!");
                return kFALSE;
@@ -1054,6 +1073,8 @@ Bool_t AliEMCALGeoUtils::GetPositionInSMFromAbsFastORIndex(const Int_t id, Int_t
 //________________________________________________________________________________________________
 Bool_t AliEMCALGeoUtils::GetPositionInEMCALFromAbsFastORIndex(const Int_t id, Int_t& iEta, Int_t& iPhi) const
 {
+  //Trigger mapping method, get position in EMCAL from FastOR index
+
        Int_t iSM=-1;
        
        if (GetPositionInSMFromAbsFastORIndex(id, iSM, iEta, iPhi))
@@ -1087,7 +1108,8 @@ Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromPositionInTRU(const Int_t iTRU, co
 //________________________________________________________________________________________________
 Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromPositionInSM(const Int_t  iSM, const Int_t iEta, const Int_t iPhi, Int_t& id) const
 {
-       //
+  //Trigger mapping method, from position in SM Index get FastOR index 
+
        if (iSM < 0 || iSM > 11 || iEta < 0 || iEta > 23 || iPhi < 0 || iPhi > 11) 
        {
                AliError("Out of range!");
@@ -1111,7 +1133,8 @@ Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromPositionInSM(const Int_t  iSM, con
 //________________________________________________________________________________________________
 Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromPositionInEMCAL(const Int_t iEta, const Int_t iPhi, Int_t& id) const
 {
-       //
+  //Trigger mapping method, from position in EMCAL Index get FastOR index 
+
        if (iEta < 0 || iEta > 47 || iPhi < 0 || iPhi > 63 ) 
        {
                AliError("Out of range!");
@@ -1132,6 +1155,8 @@ Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromPositionInEMCAL(const Int_t iEta,
 //________________________________________________________________________________________________
 Bool_t AliEMCALGeoUtils::GetFastORIndexFromCellIndex(const Int_t id, Int_t& idx) const
 {
+  //Trigger mapping method, from cell index get FastOR index 
+
        Int_t iSupMod, nModule, nIphi, nIeta, iphim, ietam;
        
        Bool_t isOK = GetCellIndex( id, iSupMod, nModule, nIphi, nIeta );
@@ -1149,7 +1174,9 @@ Bool_t AliEMCALGeoUtils::GetFastORIndexFromCellIndex(const Int_t id, Int_t& idx)
 //________________________________________________________________________________________________
 Bool_t AliEMCALGeoUtils::GetCellIndexFromFastORIndex(const Int_t id, Int_t idx[4]) const
 {
-       Int_t iSM=-1, iEta=-1, iPhi=-1;
+  //Trigger mapping method, from FASTOR index get cell index 
+
+  Int_t iSM=-1, iEta=-1, iPhi=-1;
        if (GetPositionInSMFromAbsFastORIndex(id, iSM, iEta, iPhi))
        {
                Int_t ix = 2 * iEta;
@@ -1172,6 +1199,8 @@ Bool_t AliEMCALGeoUtils::GetCellIndexFromFastORIndex(const Int_t id, Int_t idx[4
 //________________________________________________________________________________________________
 Bool_t AliEMCALGeoUtils::GetTRUIndexFromSTUIndex(const Int_t id, Int_t& idx) const
 {
+  //Trigger mapping method, from STU index get TRU index 
+
        if (id > 31 || id < 0) 
        {
                AliError(Form("TRU index out of range: %d",id));
@@ -1186,6 +1215,8 @@ Bool_t AliEMCALGeoUtils::GetTRUIndexFromSTUIndex(const Int_t id, Int_t& idx) con
 //________________________________________________________________________________________________
 Int_t AliEMCALGeoUtils::GetTRUIndexFromSTUIndex(const Int_t id) const
 {
+  //Trigger mapping method, from STU index get TRU index 
+
        if (id > 31 || id < 0) 
        {
                AliError(Form("TRU index out of range: %d",id));
@@ -1223,6 +1254,7 @@ void AliEMCALGeoUtils::BuildFastOR2DMap()
 //________________________________________________________________________________________________
 Bool_t AliEMCALGeoUtils::GetFastORIndexFromL0Index(const Int_t iTRU, const Int_t id, Int_t idx[], const Int_t size) const
 {
+  //Trigger mapping method, from L0 index get FastOR index 
        if (size <= 0 ||size > 4)
        {
                AliError("Size not supported!");
@@ -1234,7 +1266,7 @@ Bool_t AliEMCALGeoUtils::GetFastORIndexFromL0Index(const Int_t iTRU, const Int_t
        switch (size)
        {
                case 1: // Cosmic trigger
-                       if (!GetAbsFastORIndexFromTRU(iTRU, id, idx[0])) return kFALSE;
+                       if (!GetAbsFastORIndexFromTRU(iTRU, id, idx[1])) return kFALSE;
                        break;
                case 4: // 4 x 4
                        for (Int_t k = 0; k < 4; k++)
@@ -1269,7 +1301,22 @@ const TGeoHMatrix * AliEMCALGeoUtils::GetMatrixForSuperModule(Int_t smod) const
        //      AliFatal(Form("AliEMCALGeometry::GeoManager cannot find path %s!",volpath.Data()));
        //
        //    TGeoHMatrix* m = gGeoManager->GetCurrentMatrix();
-       
+  
+  //Use matrices set externally
+       if(!gGeoManager || (gGeoManager && fUseExternalMatrices)){
+    if(fkSModuleMatrix[smod]){
+      return fkSModuleMatrix[smod] ;
+    }
+    else{
+      AliInfo("Stop:");
+      printf("\t Can not find EMCAL misalignment matrixes\n") ;
+      printf("\t Either import TGeoManager from geometry.root or \n");
+      printf("\t read stored matrixes from AliESD Header:  \n") ;   
+      printf("\t AliEMCALGeoUtils::SetMisalMatrixes(header->GetEMCALMisalMatrix()) \n") ;
+      abort() ;
+    }  
+  }//external matrices
+  
        if(gGeoManager){
     const Int_t buffersize = 255;
                char path[buffersize] ;
@@ -1288,17 +1335,6 @@ const TGeoHMatrix * AliEMCALGeoUtils::GetMatrixForSuperModule(Int_t smod) const
                return gGeoManager->GetCurrentMatrix();
        }
 
-       if(fkSModuleMatrix[smod]){
-               return fkSModuleMatrix[smod] ;
-       }
-       else{
-               AliInfo("Stop:");
-               printf("\t Can not find EMCAL misalignment matrixes\n") ;
-               printf("\t Either import TGeoManager from geometry.root or \n");
-               printf("\t read stored matrixes from AliESD Header:  \n") ;   
-               printf("\t AliEMCALGeoUtils::SetMisalMatrixes(header->GetEMCALMisalMatrix()) \n") ;
-               abort() ;
-       }
        return 0 ;
 }
 
@@ -1322,28 +1358,34 @@ void AliEMCALGeoUtils::GetModulePhiEtaIndexInSModuleFromTRUIndex(Int_t itru, Int
 }
 
 //__________________________________________________________________________________________________________________
-void AliEMCALGeoUtils::RecalculateTowerPosition(Float_t drow, Float_t dcol, const Int_t sm, Float_t energy, 
-                                                const Int_t particle, const Float_t misaligshifts[15], Float_t global[3]) const
+void AliEMCALGeoUtils::RecalculateTowerPosition(Float_t drow, Float_t dcol, const Int_t sm, const Float_t depth,
+                                                const Float_t misaligTransShifts[15], const Float_t misaligRotShifts[15], Float_t global[3]) const
 { //Transform clusters cell position into global with alternative method, taking into account the depth calculation.
   //Input are: the tower indeces, 
   //           supermodule, 
   //           particle type (photon 0, electron 1, hadron 2 )
   //           misalignment shifts to global position in case of need.
   // Federico.Ronchetti@cern.ch
-
+  
+    
+  // To use in a print later
+  Float_t droworg = drow;
+  Float_t dcolorg = dcol;
+  
   if(gGeoManager){
     //Recover some stuff
-    
-    TGeoNode        *geoXEn1;         
-    TGeoNodeMatrix  *geoSM[4];        
-    TGeoVolume      *geoSMVol[4];     
-    TGeoShape       *geoSMShape[4];    
-    TGeoBBox        *geoBox[4];        
-    TGeoMatrix      *geoSMMatrix[4];       
-    
+
+    const Int_t nSMod = fEMCGeometry->GetNumberOfSuperModules();
     gGeoManager->cd("ALIC_1/XEN1_1");
-    geoXEn1 = gGeoManager->GetCurrentNode();
-    for(int iSM = 0; iSM < 4; iSM++) {  
+    TGeoNode        *geoXEn1 = gGeoManager->GetCurrentNode();
+    TGeoNodeMatrix  *geoSM[nSMod];        
+    TGeoVolume      *geoSMVol[nSMod];     
+    TGeoShape       *geoSMShape[nSMod];    
+    TGeoBBox        *geoBox[nSMod];        
+    TGeoMatrix      *geoSMMatrix[nSMod];       
+    
+    for(int iSM = 0; iSM < nSMod; iSM++) {  
       geoSM[iSM]       = dynamic_cast<TGeoNodeMatrix *>(geoXEn1->GetDaughter(iSM));
       geoSMVol[iSM]    = geoSM[iSM]->GetVolume(); 
       geoSMShape[iSM]  = geoSMVol[iSM]->GetShape();
@@ -1356,72 +1398,39 @@ void AliEMCALGeoUtils::RecalculateTowerPosition(Float_t drow, Float_t dcol, cons
       drow = 23. - drow;
     }
     
-    Int_t i = 0; // one always needs "i"
     Int_t istrip = 0;
-    Float_t z0 = 0;
-    Float_t zb = 0;
+    Float_t z0   = 0;
+    Float_t zb   = 0;
     Float_t z_is = 0;
-    Float_t d = 0;
     
     Float_t x,y,z; // return variables in terry's RF
     
     //***********************************************************
-    //Do not like this: too many hardcoded values, is it no stored somewhere else?
+    //Do not like this: too many hardcoded values, is it not already stored somewhere else?
     //                : need more comments in the code 
     //***********************************************************
     
     Float_t dz = 6.0;   // base cell width in eta
     Float_t dx = 6.004; // base cell width in phi
     
-    // parameters for shower depth calculation
-    Float_t x0  = 1.23;
-    Float_t ecr = 8;
-    Float_t cj  = 0.;
     
     //Float_t L = 26.04; // active tower length for hadron (lead+scint+paper)
     // we use the geant numbers 13.87*2=27.74
     Float_t teta1 = 0.;
-    
-    i = sm;
-    
+      
+    //Do some basic checks
     if (dcol >= 47.5 || dcol<-0.5) {
-      exit(0);
+      AliError(Form("Bad tower coordinate dcol=%f, where dcol >= 47.5 || dcol<-0.5; org: %f", dcol, dcolorg));
+      return;
     }
-    
     if (drow >= 23.5 || drow<-0.5) {
-      exit(0);
-    }
-    if (sm > 13 || sm <0) {
-      exit(0);
-    }
-    
-    
-    //boxes anc. here
-    Float_t l = geoBox[i]->GetDX()*2 ;
-    
-    energy = energy * 1000; // converting to MEV
-    
-    switch ( particle )
-    {
-      case 0:
-        cj = + 0.5; // photon
-        d  = x0 * TMath::Log( (energy / ecr) + cj);
-        break;
-        
-      case 1:
-        cj = - 0.5; // electron 
-        d = x0 * TMath::Log( (energy / ecr) + cj);
-        break;
-        
-      case 2:
-        // hadron 
-        d = 0.5 * l;
-        break;
-        
-      default:
-        cj = + 0.5; // photon
-        d = x0 * TMath::Log( (energy / ecr) + cj);
+      AliError(Form("Bad tower coordinate drow=%f, where drow >= 23.5 || drow<-0.5; org: %f", drow, droworg));
+      return;
     }
+    if (sm >= nSMod || sm < 0) {
+      AliError(Form("Bad SM number sm=%d, where sm >= %d || sm < 0", nSMod, sm));
+      return;
+    }    
     
     istrip = int ((dcol+0.5)/2);
     
@@ -1433,41 +1442,45 @@ void AliEMCALGeoUtils::RecalculateTowerPosition(Float_t drow, Float_t dcol, cons
     
     for (int is=0; is<= istrip; is++) {
       
-      teta1 = TMath::DegToRad() * (is+1) * 1.5;
-      z_is = z_is + 2*dz*(TMath::Sin(teta1)*TMath::Tan(teta1) + TMath::Cos(teta1));
+      teta1 = TMath::DegToRad() * (is*1.5 + 0.75);
+      if(is==0)
+        z_is = z_is + 2*dz*TMath::Cos(teta1);
+      else
+        z_is = z_is + 2*dz*TMath::Cos(teta1) + 2*dz*TMath::Sin(teta1)*TMath::Tan(teta1-0.75*TMath::DegToRad());
       
     }
     
     z0 = dz*(dcol-2*istrip+0.5);
-    zb = (2*dz-z0-d*TMath::Tan(teta1));
+    zb = (2*dz-z0-depth*TMath::Tan(teta1));
     
     z = z_is - zb*TMath::Cos(teta1);
-    y = d/TMath::Cos(teta1) + zb*TMath::Sin(teta1);
+    y = depth/TMath::Cos(teta1) + zb*TMath::Sin(teta1);
     
     x = (drow + 0.5)*dx;
     
     // moving the origin from terry's RF
     // to the GEANT one
     
-    double xx =  y - geoBox[i]->GetDX();
-    double yy = -x + geoBox[i]->GetDY() - 0.512; //to center the towers in the box
-    double zz =  z - geoBox[i]->GetDZ() + 1; //gap at z = 0
-    
+    double xx =  y - geoBox[sm]->GetDX();
+    double yy = -x + geoBox[sm]->GetDY(); 
+    double zz =  z - geoBox[sm]->GetDZ(); 
     const double localIn[3] = {xx, yy, zz};
     double dglobal[3];
-    geoSMMatrix[i]->LocalToMaster(localIn, dglobal);
-    
+    //geoSMMatrix[sm]->Print();
+    //printf("TFF Local    (row = %d, col = %d, x = %3.2f,  y = %3.2f, z = %3.2f)\n", iroworg, icolorg, localIn[0], localIn[1], localIn[2]);
+    geoSMMatrix[sm]->LocalToMaster(localIn, dglobal);
+    //printf("TFF Global   (row = %2.0f, col = %2.0f, x = %3.2f,  y = %3.2f, z = %3.2f)\n", drow, dcol, dglobal[0], dglobal[1], dglobal[2]);
     
-    //hardcoded global shifts
+    //apply global shifts
     if(sm == 2 || sm == 3) {//sector 1
-      global[0] = dglobal[0] + misaligshifts[3]*TMath::Sin(TMath::DegToRad()*20); // misaligshifts[3] = - 7.5
-      global[1] = dglobal[1] + misaligshifts[4]*TMath::Cos(TMath::DegToRad()*20); // misaligshifts[4] = + 7.5
-      global[2] = dglobal[2] + misaligshifts[5];                                  // misaligshifts[6] = 2.
+      global[0] = dglobal[0] + misaligTransShifts[3] + misaligRotShifts[3]*TMath::Sin(TMath::DegToRad()*20) ; 
+      global[1] = dglobal[1] + misaligTransShifts[4] + misaligRotShifts[4]*TMath::Cos(TMath::DegToRad()*20) ; 
+      global[2] = dglobal[2] + misaligTransShifts[5];
     }
     else if(sm == 0 || sm == 1){//sector 0
-      global[0] = dglobal[0] + misaligshifts[0]; // misaligshifts[0] = 0.8
-      global[1] = dglobal[1] + misaligshifts[1]; // misaligshifts[1] = 8.3
-      global[2] = dglobal[2] + misaligshifts[2]; // misaligshifts[2] = 1.
+      global[0] = dglobal[0] + misaligTransShifts[0]; 
+      global[1] = dglobal[1] + misaligTransShifts[1]; 
+      global[2] = dglobal[2] + misaligTransShifts[2];
     }
     else {
       AliInfo("Careful, correction not implemented yet!");
@@ -1483,5 +1496,3 @@ void AliEMCALGeoUtils::RecalculateTowerPosition(Float_t drow, Float_t dcol, cons
   }
   
 }
-
-