CaloFilter: Include time dependent corrections, get bools with pileup, v0and and...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Feb 2011 18:25:08 +0000 (18:25 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Feb 2011 18:25:08 +0000 (18:25 +0000)
EMCALCalib: change the default number of SM to 10

PWG4/CaloCalib/AliAnalysisTaskCaloFilter.cxx
PWG4/CaloCalib/AliAnalysisTaskCaloFilter.h
PWG4/CaloCalib/AliAnalysisTaskEMCALPi0CalibSelection.cxx
PWG4/CaloCalib/AliAnalysisTaskEMCALPi0CalibSelection.h

index 49b84d4..0618292 100644 (file)
 // Author: Gustavo Conesa Balbastre (INFN - Frascati)
 //////////////////////////////////////////////////////////
 
-#include "AliAnalysisTaskCaloFilter.h"
+//Root
+#include "TGeoManager.h"
+
+//STEER
 #include "AliESDEvent.h"
 #include "AliAODEvent.h"
 #include "AliLog.h"
 #include "AliVCluster.h"
 #include "AliVCaloCells.h"
-#include "AliEMCALRecoUtils.h"
-#include "AliEMCALGeometry.h"
 #include "AliVEventHandler.h"
 #include "AliAnalysisManager.h"
 #include "AliInputEventHandler.h"
 #include "AliESDtrackCuts.h"
-#include "TGeoManager.h"
+#include "AliTriggerAnalysis.h"
+
+//EMCAL
+#include "AliEMCALRecoUtils.h"
+#include "AliEMCALGeometry.h"
+
+#include "AliAnalysisTaskCaloFilter.h"
 
 ClassImp(AliAnalysisTaskCaloFilter)
   
@@ -48,7 +55,7 @@ AliAnalysisTaskCaloFilter::AliAnalysisTaskCaloFilter():
   fCaloFilter(0), fCorrect(kFALSE), 
   fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEARV1"), 
   fEMCALRecoUtils(new AliEMCALRecoUtils),
-  fESDtrackCuts(0), fTrackMultEtaCut(0.8),
+  fESDtrackCuts(0), fTriggerAnalysis (new AliTriggerAnalysis), fTrackMultEtaCut(0.8),
   fLoadEMCALMatrices(kFALSE), //fLoadPHOSMatrices(kFALSE),
   fGeoMatrixSet(kFALSE)
 {
@@ -65,7 +72,7 @@ AliAnalysisTaskCaloFilter::AliAnalysisTaskCaloFilter(const char* name):
   fCaloFilter(0), fCorrect(kFALSE),
   fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEARV1"), 
   fEMCALRecoUtils(new AliEMCALRecoUtils),
-  fESDtrackCuts(0), fTrackMultEtaCut(0.8),
+  fESDtrackCuts(0), fTriggerAnalysis (new AliTriggerAnalysis), fTrackMultEtaCut(0.8),
   fLoadEMCALMatrices(kFALSE), //fLoadPHOSMatrices(kFALSE),
   fGeoMatrixSet(kFALSE)
 {
@@ -81,9 +88,10 @@ AliAnalysisTaskCaloFilter::~AliAnalysisTaskCaloFilter()
 {
   //Destructor.
        
-  if(fEMCALGeo)       delete fEMCALGeo;        
-  if(fEMCALRecoUtils) delete fEMCALRecoUtils;
-  if(fESDtrackCuts)   delete fESDtrackCuts;
+  if(fEMCALGeo)        delete fEMCALGeo;       
+  if(fEMCALRecoUtils)  delete fEMCALRecoUtils;
+  if(fESDtrackCuts)    delete fESDtrackCuts;
+  if(fTriggerAnalysis) delete fTriggerAnalysis;
 
 }
 
@@ -100,16 +108,15 @@ void AliAnalysisTaskCaloFilter::UserCreateOutputObjects()
 void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
 {
   // Execute analysis for current event
-  //
-  
+  // Copy input ESD or AOD header, vertex, CaloClusters and CaloCells to output AOD
+
   if (fDebug > 0)  
     printf("CaloFilter: Analysing event # %d\n", (Int_t)Entry());
   
-  // Copy input ESD or AOD header, vertex, CaloClusters and CaloCells to output AOD
   
   AliVEvent* event = InputEvent();
   if(!event) {
-    printf("AliAnalysisTaskCaloFilter::CreateAODFromESD() - This event does not contain Input?");
+    printf("AliAnalysisTaskCaloFilter::UserExec - This event does not contain Input?");
     return;
   }
 
@@ -121,17 +128,44 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   Bool_t bESD = kFALSE;
   if(!strcmp(event->GetName(),"AliESDEvent")) bESD=kTRUE;
   
-  //Get track multiplicity
-  Int_t trackMult = 0;
+  //-------------------------------------------
+  //Event selection parameters
+  //-------------------------------------------
+  //Is it a pileup event?
+  Bool_t bPileup = event->IsPileupFromSPD(3, 0.8, 3., 2., 5.); //Default values, if not it does not compile
+  //Bool_t bPileup = event->IsPileupFromSPD(); 
+  //if(bPileup) return kFALSE;
+  Int_t  trackMult    = 0;
+  Bool_t bV0AND       = kFALSE;
+  Bool_t bGoodVertex  = kFALSE;
   if(bESD){
+    //Get track multiplicity
     Int_t nTracks   = InputEvent()->GetNumberOfTracks() ;
     for (Int_t itrack =  0; itrack <  nTracks; itrack++) {////////////// track loop
       AliVTrack * track = (AliVTrack*)InputEvent()->GetTrack(itrack) ; // retrieve track from esd
       if(!fESDtrackCuts->AcceptTrack((AliESDtrack*)track)) continue;
       //Count the tracks in eta < 0.8
       if(TMath::Abs(track->Eta())< fTrackMultEtaCut) trackMult++;
-    }    
-  }
+    }  
+    //V0AND?   
+    
+    bV0AND = fTriggerAnalysis->IsOfflineTriggerFired(dynamic_cast<AliESDEvent*> (event), AliTriggerAnalysis::kV0AND);
+    //if(!bV0AND) return kFALSE;
+    //Well reconstructed vertex
+    bGoodVertex = CheckForPrimaryVertex();
+    //if(!bGoodVertex) return kFALSE;
+    
+  }//ESDs
+  
+  if(fDebug > 0)
+    printf("AliAnalysisTaskCaloFilter::UserExec() - PileUp %d, Good Vertex %d, v0AND %d, Track Mult in |eta| < %2.1f = %d\n",
+           bPileup,bGoodVertex,bV0AND, fTrackMultEtaCut, trackMult);
+  //Put bools with event selection parameters in an array, as a patch, put it later in the MC labels list
+  Int_t eventBools[] = {bPileup,bGoodVertex,bV0AND};
+  
+  //----------------------------------------------------
+  //Set in AOD General Event Parameters, vertex, runnumber etc 
+  //----------------------------------------------------
   
   // set arrays and pointers
   Float_t posF[3];
@@ -206,7 +240,9 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   TClonesArray &caloClusters = *(AODEvent()->GetCaloClusters());
   Int_t jClusters=0;
   
+  //-------------------------------------------
   //Do Corrections in EMCAL 
+  //-------------------------------------------
   //If EMCAL, and requested, correct energy, position ...
   //Need to do this in a separate loop before filling the ESDs because of the track matching recalculations
   if(fCorrect && (fCaloFilter==kEMCAL || fCaloFilter==kBoth) ) {
@@ -245,6 +281,10 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
           fGeoMatrixSet=kTRUE;
         }//ESD
       }//Load matrices from Data 
+      
+      //Recover time dependent corrections, put then in recalibration histograms. Do it once
+      fEMCALRecoUtils->SetTimeDependentCorrections(InputEvent()->GetRunNumber());
+
     }//first event
     
     
@@ -297,7 +337,9 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
     
   } // corrections in EMCAL
   
-  //Now loop on clusters to fill AODs
+  //-------------------------------------------
+  // Now loop on clusters to fill AODs
+  //-------------------------------------------
   for (Int_t iClust=0; iClust<nCaloClus; ++iClust) {
     
     AliVCluster * cluster = event->GetCaloCluster(iClust);
@@ -326,9 +368,10 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
       //      }
       
       fEMCALRecoUtils->GetMatchedResiduals(cluster->GetID(),dR,dZ);
-      if(DebugLevel() > 2)
-        printf("Corrected Residuals : dZ %f, dR %f\n ",dZ, dR);
-
+      if(DebugLevel() > 2){
+        if(cluster->IsEMCAL()) printf("EMCAL Corrected Residuals : dZ %f, dR %f\n ",dZ, dR);
+        if(cluster->IsPHOS())  printf("PHOS  Corrected Residuals : dZ %f, dR %f\n ",dZ, dR);
+      }
     }
     //--------------------------------------------------------------
 
@@ -340,8 +383,8 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
     
     AliAODCaloCluster *caloCluster = new(caloClusters[jClusters++]) 
       AliAODCaloCluster(id,
-                       0,
-                       0x0,
+                       3,
+                       eventBools,
                        energy,
                        posF,
                        NULL,
@@ -438,6 +481,33 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   return;
 }
 
+//____________________________________________________________________________
+Bool_t AliAnalysisTaskCaloFilter::CheckForPrimaryVertex(){
+  //Check if the vertex was well reconstructed, copy from V0Reader of conversion group
+  //It only works for ESDs
+  
+  AliESDEvent * event = dynamic_cast<AliESDEvent*> (InputEvent());
+  if(event->GetPrimaryVertexTracks()->GetNContributors() > 0) {
+    return 1;
+  }
+  
+  if(event->GetPrimaryVertexTracks()->GetNContributors() < 1) {
+    // SPD vertex
+    if(event->GetPrimaryVertexSPD()->GetNContributors() > 0) {
+      //cout<<"spd vertex type::"<< fESDEvent->GetPrimaryVertex()->GetName() << endl;
+      return 1;
+      
+    }
+    if(event->GetPrimaryVertexSPD()->GetNContributors() < 1) {
+      //      cout<<"bad vertex type::"<< fESDEvent->GetPrimaryVertex()->GetName() << endl;
+      return 0;
+    }
+  }
+  return 0;
+  //return fInputEvent->GetPrimaryVertex()->GetNContributors()>0;
+}
+
+
 //_____________________________________________________
 void AliAnalysisTaskCaloFilter::PrintInfo(){
 
@@ -448,7 +518,6 @@ void AliAnalysisTaskCaloFilter::PrintInfo(){
   printf("\t Calorimeter Filtering Option     ? %d\n",fCaloFilter);
   //printf("\t Use handmade geo matrices?   EMCAL %d, PHOS %d\n",fLoadEMCALMatrices, fLoadPHOSMatrices);
   printf("\t Use handmade geo matrices?   EMCAL %d, PHOS 0\n",fLoadEMCALMatrices);
-
 }
 
 //_____________________________________________________
index a5cacb2..3003ff3 100644 (file)
@@ -22,6 +22,7 @@ class TList;
 class AliEMCALRecoUtils;
 class AliEMCALGeometry;
 class AliESDtrackCuts;
+class AliTriggerAnalysis;
 
 class AliAnalysisTaskCaloFilter : public AliAnalysisTaskSE
 {
@@ -35,60 +36,66 @@ private:
   AliAnalysisTaskCaloFilter& operator=(const AliAnalysisTaskCaloFilter&);
   
 public:
+  //General analysis frame methods
   virtual void   UserCreateOutputObjects();
   //virtual void   Init();
   //virtual void   LocalInit() ;
   virtual void   UserExec(Option_t *option);
   virtual void   Terminate(Option_t *option);
   
-  enum caloFilter {kBoth = 0, kEMCAL = 1, kPHOS=2};
-  void SetCaloFilter(Int_t calo) {fCaloFilter = calo;}
-  TString GetCaloFilter() const  {return fCaloFilter;}
-
-  void SetEMCALGeometryName(TString name) { fEMCALGeoName = name ; }
-  TString EMCALGeometryName() const       { return fEMCALGeoName ; }
-  
+  //Geometry methods
+  void SetEMCALGeometryName(TString name)         { fEMCALGeoName = name ; }
+  TString EMCALGeometryName()              const  { return fEMCALGeoName ; }
   void SwitchOnLoadOwnEMCALGeometryMatrices()              { fLoadEMCALMatrices = kTRUE  ; }
   void SwitchOffLoadOwnEMCALGeometryMatrices()             { fLoadEMCALMatrices = kFALSE ; }
   void SetEMCALGeometryMatrixInSM(TGeoHMatrix* m, Int_t i) { fEMCALMatrix[i]    = m      ; }
-  
   //void SwitchOnLoadOwnPHOSGeometryMatrices()               { fLoadPHOSMatrices = kTRUE  ; }
   //void SwitchOffLoadOwnPHOSGeometryMatrices()              { fLoadPHOSMatrices = kFALSE ; }
   //void SetPHOSGeometryMatrixInSM(TGeoHMatrix* m, Int_t i)  { fPHOSMatrix[i]    = m      ; }
   
-  void SetEMCALRecoUtils(AliEMCALRecoUtils * ru) {fEMCALRecoUtils = ru;}
-  AliEMCALRecoUtils* GetEMCALRecoUtils() const   {return fEMCALRecoUtils;}
-
-  void SwitchOnClusterCorrection()  {fCorrect = kTRUE ;}
-  void SwitchOffClusterCorrection() {fCorrect = kFALSE;}
+  //Task settings
+  enum caloFilter {kBoth = 0, kEMCAL = 1, kPHOS=2};
+  void SetCaloFilter(Int_t calo)                  { fCaloFilter = calo;}
+  TString GetCaloFilter()                  const  { return fCaloFilter;}  
+  
+  void SetEMCALRecoUtils(AliEMCALRecoUtils * ru)  { fEMCALRecoUtils = ru  ;}
+  AliEMCALRecoUtils* GetEMCALRecoUtils()   const  { return fEMCALRecoUtils;}
 
+  void SwitchOnClusterCorrection()                { fCorrect = kTRUE ;}
+  void SwitchOffClusterCorrection()               { fCorrect = kFALSE;}
+  
+  //Event selection
   AliESDtrackCuts* GetTrackCuts()          const  { return fESDtrackCuts    ; }
   void    SetTrackCuts(AliESDtrackCuts * cuts)    { fESDtrackCuts = cuts    ; }                  
   Float_t GetTrackMultiplicityEtaCut()     const  { return fTrackMultEtaCut ; }
   void    SetTrackMultiplicityEtaCut(Float_t eta) { fTrackMultEtaCut = eta  ; }                
-  
-  void PrintInfo();
+  virtual Bool_t CheckForPrimaryVertex();
+
+  void    PrintInfo();
   
 private:
   
   //TList* fCuts ;      //! List with analysis cuts
-  Int_t  fCaloFilter; // Calorimeter to filter
-  Int_t  fCorrect;    // Recalibrate or recalculate different cluster parameters
+  Int_t               fCaloFilter; // Calorimeter to filter
+  Int_t               fCorrect;    // Recalibrate or recalculate different cluster parameters
   //EMCAL specific
   AliEMCALGeometry  * fEMCALGeo;       //! EMCAL geometry
   TString             fEMCALGeoName;   // Name of geometry to use.
   AliEMCALRecoUtils * fEMCALRecoUtils; // Pointer to EMCAL utilities for clusterization
 
-  AliESDtrackCuts *fESDtrackCuts       ; // Track cut  
-  Float_t          fTrackMultEtaCut    ; // Track multiplicity eta cut
+  AliESDtrackCuts   * fESDtrackCuts       ; // Track cut  
+  AliTriggerAnalysis* fTriggerAnalysis;  // Access to trigger selection algorithm for V0AND calculation
+  Float_t             fTrackMultEtaCut    ; // Track multiplicity eta cut
   
-  Bool_t        fLoadEMCALMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
-  TGeoHMatrix * fEMCALMatrix[10];   // Geometry matrices with alignments
-  //Bool_t        fLoadPHOSMatrices;  // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
-  //TGeoHMatrix * fPHOSMatrix[5];     // Geometry matrices with alignments
-  Bool_t        fGeoMatrixSet;      // Set geometry matrices only once, for the first event.         
+  //Geometry
+  Bool_t              fLoadEMCALMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
+  TGeoHMatrix *       fEMCALMatrix[10];   // Geometry matrices with alignments
+  //Bool_t            fLoadPHOSMatrices;  // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
+  //TGeoHMatrix *     fPHOSMatrix[5];     // Geometry matrices with alignments
+  Bool_t              fGeoMatrixSet;      // Set geometry matrices only once, for the first event.   
+
   
-  ClassDef(AliAnalysisTaskCaloFilter, 4); // Analysis task for standard ESD filtering
+  ClassDef(AliAnalysisTaskCaloFilter, 5); // Analysis task for standard ESD filtering
 };
 
 #endif
index 2ead249..2248e01 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
  * Author: Boris Polishchuk                                               *
- * Adapted to AOD reading by Gustavo Conesa  *
+ * Adapted to AOD reading by Gustavo Conesa                               *
  *                                                                        *
  * Permission to use, copy, modify and distribute this software and its   *
  * documentation strictly for non-commercial purposes is hereby granted   *
@@ -61,7 +61,7 @@ AliAnalysisTaskEMCALPi0CalibSelection::AliAnalysisTaskEMCALPi0CalibSelection(con
 {
   //Named constructor which should be used.
   
-  for(Int_t iMod=0; iMod < 12; iMod++) {
+  for(Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++) {
     for(Int_t iX=0; iX<24; iX++) {
       for(Int_t iZ=0; iZ<48; iZ++) {
         fHmpi0[iMod][iZ][iX]=0;
@@ -69,19 +69,19 @@ AliAnalysisTaskEMCALPi0CalibSelection::AliAnalysisTaskEMCALPi0CalibSelection(con
     } 
   }
   
-  for(Int_t iSM=0; iSM<4; iSM++) {
-    fHmggSM[iSM]              =0;
-    fHmggPairSM[iSM]          =0;
-    fHOpeningAngleSM[iSM]     =0;
-    fHOpeningAnglePairSM[iSM] =0;
-    fHAsymmetrySM[iSM]     =0;
-    fHAsymmetryPairSM[iSM] =0;
-    fHIncidentAngleSM[iSM]    =0;
-    fHIncidentAnglePairSM[iSM]=0;
-    fhTowerDecayPhotonHit[iSM] =0;
-    fhTowerDecayPhotonEnergy[iSM]=0;
-    fhTowerDecayPhotonAsymmetry[iSM]=0;
-    fMatrix[iSM] = 0x0;
+  for(Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++) {
+    fHmggSM[iSM]                     = 0;
+    fHmggPairSM[iSM]                 = 0;
+    fHOpeningAngleSM[iSM]            = 0;
+    fHOpeningAnglePairSM[iSM]        = 0;
+    fHAsymmetrySM[iSM]               = 0;
+    fHAsymmetryPairSM[iSM]           = 0;
+    fHIncidentAngleSM[iSM]           = 0;
+    fHIncidentAnglePairSM[iSM]       = 0;
+    fhTowerDecayPhotonHit[iSM]       = 0;
+    fhTowerDecayPhotonEnergy[iSM]    = 0;
+    fhTowerDecayPhotonAsymmetry[iSM] = 0;
+    fMatrix[iSM]                     = 0x0;
   }
   
   DefineOutput(1, TList::Class());
@@ -182,14 +182,15 @@ void AliAnalysisTaskEMCALPi0CalibSelection::UserCreateOutputObjects()
   //Create output container, init geometry 
        
   fEMCALGeo =  AliEMCALGeometry::GetInstance(fEMCALGeoName) ;  
+  Int_t nSM = (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
   
   fOutputContainer = new TList();
   const Int_t buffersize = 255;
   char hname[buffersize], htitl[buffersize];
   
-  for(Int_t iMod=0; iMod < (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); iMod++) {
-    for(Int_t iRow=0; iRow<AliEMCALGeoParams::fgkEMCALRows; iRow++) {
-      for(Int_t iCol=0; iCol<AliEMCALGeoParams::fgkEMCALCols; iCol++) {
+  for(Int_t iMod=0; iMod < nSM; iMod++) {
+    for(Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++) {
+      for(Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++) {
         snprintf(hname,buffersize, "%d_%d_%d",iMod,iCol,iRow);
         snprintf(htitl,buffersize, "Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
         fHmpi0[iMod][iCol][iRow] = new TH1F(hname,htitl,fNbins,fMinBin,fMaxBin);
@@ -241,7 +242,7 @@ void AliAnalysisTaskEMCALPi0CalibSelection::UserCreateOutputObjects()
   
   TString pairname[] = {"A side (0-2)", "C side (1-3)","Row 0 (0-1)", "Row 1 (2-3)"};
   
-  for(Int_t iSM=0; iSM<4; iSM++) {
+  for(Int_t iSM = 0; iSM < nSM; iSM++) {
     
     snprintf(hname, buffersize, "hmgg_SM%d",iSM);
     snprintf(htitl, buffersize, "Two-gamma inv. mass for super mod %d",iSM);
@@ -686,7 +687,7 @@ void AliAnalysisTaskEMCALPi0CalibSelection::PrintInfo(){
        printf("Switchs:\n \t Remove Bad Channels? %d; Use filtered input? %d;  Correct Clusters? %d, \n \t Analyze Old AODs? %d, Mass per channel same SM clusters? %d\n",
            fRecoUtils->IsBadChannelsRemovalSwitchedOn(),fFilteredInput,fCorrectClusters, fOldAOD, fSameSM) ;
        printf("EMCAL Geometry name: < %s >, Load Matrices %d\n",fEMCALGeoName.Data(), fLoadMatrices) ;
-  if(fLoadMatrices) {for(Int_t ism = 0; ism < 4; ism++) fMatrix[ism]->Print();}
+  if(fLoadMatrices) {for(Int_t ism = 0; ism < AliEMCALGeoParams::fgkEMCALModules; ism++) fMatrix[ism]->Print();}
 
   
 }
index 31159f9..864a83d 100644 (file)
@@ -107,36 +107,36 @@ private:
   TList*  fOutputContainer; //!histogram container
   TH1F*   fHmpi0[AliEMCALGeoParams::fgkEMCALModules][AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows];//! two-cluster inv. mass assigned to each cell.
 
-  TH2F*   fHmgg;            //! two-cluster inv.mass vs pt of pair
-  TH2F*   fHmggDifferentSM; //! two-cluster inv.mass vs pt of pair, each cluster in different SM
-  TH2F*   fHmggSM[4];       //! two-cluster inv.mass per SM
-  TH2F*   fHmggPairSM[4];   //! two-cluster inv.mass per Pair
-  
-  TH2F*   fHOpeningAngle;            //! two-cluster opening angle vs pt of pair, with mass close to pi0
-  TH2F*   fHOpeningAngleDifferentSM; //! two-cluster opening angle vs pt of pair, each cluster in different SM, with mass close to pi0
-  TH2F*   fHOpeningAngleSM[4];       //! two-cluster opening angle vs pt per SM,with mass close to pi0
-  TH2F*   fHOpeningAnglePairSM[4];   //! two-cluster opening angle vs pt per Pair,with mass close to pi0
-
-  TH2F*   fHIncidentAngle;            //! cluster incident angle vs pt of pair, with mass close to pi0
-  TH2F*   fHIncidentAngleDifferentSM; //! cluster incident angle vs pt of pair, each cluster in different SM, with mass close to pi0
-  TH2F*   fHIncidentAngleSM[4];       //! cluster incident angle vs pt per SM,with mass close to pi0
-  TH2F*   fHIncidentAnglePairSM[4];   //! cluster incident angle vs pt per Pair,with mass close to pi0
-  
-  TH2F*   fHAsymmetry;            //! two-cluster asymmetry vs pt of pair, with mass close to pi0
-  TH2F*   fHAsymmetryDifferentSM; //! two-cluster asymmetry vs pt of pair, each cluster in different SM, with mass close to pi0
-  TH2F*   fHAsymmetrySM[4];       //! two-cluster asymmetry vs pt per SM,with mass close to pi0
-  TH2F*   fHAsymmetryPairSM[4];   //! two-cluster asymmetry vs pt per Pair,with mass close to pi0
-  
-  TH2F*   fhTowerDecayPhotonHit[4] ;       //! Cells ordered in column/row for different module, number of times a decay photon hits
-  TH2F*   fhTowerDecayPhotonEnergy[4] ;    //! Cells ordered in column/row for different module, accumulated energy in the tower by decay photons.
-  TH2F*   fhTowerDecayPhotonAsymmetry[4] ; //! Cells ordered in column/row for different module, accumulated asymmetry in the tower by decay photons.
-
-  TH1I*   fhNEvents;           //! Number of events counter histogram
-  TList * fCuts ;              //! List with analysis cuts
+  TH2F*   fHmgg;             //! two-cluster inv.mass vs pt of pair
+  TH2F*   fHmggDifferentSM;  //! two-cluster inv.mass vs pt of pair, each cluster in different SM
+  TH2F*   fHmggSM[AliEMCALGeoParams::fgkEMCALModules];       //! two-cluster inv.mass per SM
+  TH2F*   fHmggPairSM[AliEMCALGeoParams::fgkEMCALModules];   //! two-cluster inv.mass per Pair
+  
+  TH2F*   fHOpeningAngle;             //! two-cluster opening angle vs pt of pair, with mass close to pi0
+  TH2F*   fHOpeningAngleDifferentSM;  //! two-cluster opening angle vs pt of pair, each cluster in different SM, with mass close to pi0
+  TH2F*   fHOpeningAngleSM[AliEMCALGeoParams::fgkEMCALModules];       //! two-cluster opening angle vs pt per SM,with mass close to pi0
+  TH2F*   fHOpeningAnglePairSM[AliEMCALGeoParams::fgkEMCALModules];   //! two-cluster opening angle vs pt per Pair,with mass close to pi0
+
+  TH2F*   fHIncidentAngle;             //! cluster incident angle vs pt of pair, with mass close to pi0
+  TH2F*   fHIncidentAngleDifferentSM;  //! cluster incident angle vs pt of pair, each cluster in different SM, with mass close to pi0
+  TH2F*   fHIncidentAngleSM[AliEMCALGeoParams::fgkEMCALModules];       //! cluster incident angle vs pt per SM,with mass close to pi0
+  TH2F*   fHIncidentAnglePairSM[AliEMCALGeoParams::fgkEMCALModules];   //! cluster incident angle vs pt per Pair,with mass close to pi0
+  
+  TH2F*   fHAsymmetry;             //! two-cluster asymmetry vs pt of pair, with mass close to pi0
+  TH2F*   fHAsymmetryDifferentSM;  //! two-cluster asymmetry vs pt of pair, each cluster in different SM, with mass close to pi0
+  TH2F*   fHAsymmetrySM[AliEMCALGeoParams::fgkEMCALModules];       //! two-cluster asymmetry vs pt per SM,with mass close to pi0
+  TH2F*   fHAsymmetryPairSM[AliEMCALGeoParams::fgkEMCALModules];   //! two-cluster asymmetry vs pt per Pair,with mass close to pi0
+  
+  TH2F*   fhTowerDecayPhotonHit[AliEMCALGeoParams::fgkEMCALModules] ;       //! Cells ordered in column/row for different module, number of times a decay photon hits
+  TH2F*   fhTowerDecayPhotonEnergy[AliEMCALGeoParams::fgkEMCALModules] ;    //! Cells ordered in column/row for different module, accumulated energy in the tower by decay photons.
+  TH2F*   fhTowerDecayPhotonAsymmetry[AliEMCALGeoParams::fgkEMCALModules] ; //! Cells ordered in column/row for different module, accumulated asymmetry in the tower by decay photons.
+
+  TH1I*         fhNEvents;     //! Number of events counter histogram
+  TList *       fCuts ;        //! List with analysis cuts
   Bool_t        fLoadMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
-  TGeoHMatrix * fMatrix[4];    // Geometry matrices with alignments
+  TGeoHMatrix * fMatrix[AliEMCALGeoParams::fgkEMCALModules];    // Geometry matrices with alignments
   
-  ClassDef(AliAnalysisTaskEMCALPi0CalibSelection,11);
+  ClassDef(AliAnalysisTaskEMCALPi0CalibSelection,12);
 
 };