Move the initialization of geometry pointer from single analysis to reader so that...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Dec 2009 19:23:08 +0000 (19:23 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Dec 2009 19:23:08 +0000 (19:23 +0000)
PWG4/PartCorrBase/AliCaloTrackReader.cxx
PWG4/PartCorrBase/AliCaloTrackReader.h
PWG4/PartCorrDep/AliAnaCalorimeterQA.cxx
PWG4/PartCorrDep/AliAnaCalorimeterQA.h
PWG4/PartCorrDep/AliAnaPi0.cxx
PWG4/PartCorrDep/AliAnaPi0.h
PWG4/macros/AddTaskPartCorr.C

index 56edc06..b3824b8 100755 (executable)
@@ -50,12 +50,13 @@ ClassImp(AliCaloTrackReader)
     fInputEvent(0x0), fOutputEvent(0x0),fMC(0x0),
     fFillCTS(0),fFillEMCAL(0),fFillPHOS(0),
     fFillEMCALCells(0),fFillPHOSCells(0), 
-       fSecondInputAODTree(0x0), fSecondInputAODEvent(0x0),
-       fSecondInputFileName(""),fSecondInputFirstEvent(0), 
-       fAODCTSNormalInputEntries(0), fAODEMCALNormalInputEntries(0), 
+    fSecondInputAODTree(0x0), fSecondInputAODEvent(0x0),
+    fSecondInputFileName(""),fSecondInputFirstEvent(0), 
+    fAODCTSNormalInputEntries(0), fAODEMCALNormalInputEntries(0), 
     fAODPHOSNormalInputEntries(0), fTrackStatus(0), 
-       fReadStack(kFALSE), fReadAODMCParticles(kFALSE), 
-       fCleanOutputStdAOD(kFALSE), fDeltaAODFileName("deltaAODPartCorr.root"),fFiredTriggerClassName("")
+    fReadStack(kFALSE), fReadAODMCParticles(kFALSE), 
+    fCleanOutputStdAOD(kFALSE), fDeltaAODFileName("deltaAODPartCorr.root"),fFiredTriggerClassName(""),
+    fEMCALGeoName("EMCAL_COMPLETE"),fPHOSGeoName("PHOSgeo"), fEMCALGeo(0x0), fPHOSGeo(0x0)
 {
   //Ctor
   
@@ -89,7 +90,9 @@ AliCaloTrackReader::AliCaloTrackReader(const AliCaloTrackReader & g) :
   fTrackStatus(g.fTrackStatus),
   fReadStack(g.fReadStack), fReadAODMCParticles(g.fReadAODMCParticles),
   fCleanOutputStdAOD(g.fCleanOutputStdAOD), fDeltaAODFileName(g.fDeltaAODFileName),
-   fFiredTriggerClassName(g.fFiredTriggerClassName  )
+  fFiredTriggerClassName(g.fFiredTriggerClassName),
+  fEMCALGeoName(g.fEMCALGeoName),fPHOSGeoName(g.fPHOSGeoName),
+  fEMCALGeo(g.fEMCALGeo), fPHOSGeo(g.fPHOSGeo)
 {
   // cpy ctor
   
@@ -148,6 +151,10 @@ AliCaloTrackReader & AliCaloTrackReader::operator = (const AliCaloTrackReader &
   fDeltaAODFileName   = source.fDeltaAODFileName;
   fFiredTriggerClassName = source.fFiredTriggerClassName  ;
        
+  fEMCALGeoName = source.fEMCALGeoName ; 
+  fPHOSGeoName  = source.fPHOSGeoName ; 
+  fEMCALGeo = source.fEMCALGeo;  fPHOSGeo = source.fPHOSGeo;
+       
   return *this;
   
 }
@@ -188,12 +195,15 @@ AliCaloTrackReader::~AliCaloTrackReader() {
   if(fMC)          delete fMC ;  
        
   if(fSecondInputAODTree){
-       fSecondInputAODTree->Clear();
-       delete fSecondInputAODTree;
+    fSecondInputAODTree->Clear();
+    delete fSecondInputAODTree;
   }
        
   if(fSecondInputAODEvent) delete fSecondInputAODEvent ;
 
+  if(fPHOSGeo)  delete fPHOSGeo  ;
+  if(fEMCALGeo) delete fEMCALGeo ;
+       
 }
 
 
@@ -361,6 +371,9 @@ void AliCaloTrackReader::InitParameters()
   fCleanOutputStdAOD     = kFALSE; // Clean the standard clusters/tracks?
   fDeltaAODFileName      = "deltaAODPartCorr.root";
   fFiredTriggerClassName      = "";
+  fEMCALGeoName = "EMCAL_COMPLETE";
+  fPHOSGeoName  = "PHOSgeo";
+       
 }
 
 
@@ -426,23 +439,23 @@ Bool_t AliCaloTrackReader::FillInputEvent(const Int_t iEntry, const char * curre
   //In case of mixing events with other AOD file       
   if(fDataType == kAOD && fSecondInputAODTree){
         
-        if(fDebug > 1) 
-                printf("AliCaloTrackReader::FillInputEvent() - Get event %d from second input AOD file \n", iEntry+fSecondInputFirstEvent);
-        if(fSecondInputAODTree->GetEntriesFast() <= iEntry+fSecondInputFirstEvent) {
-                if(fSecondInputAODTree->GetEntriesFast() == iEntry+fSecondInputFirstEvent) 
+    if(fDebug > 1) 
+      printf("AliCaloTrackReader::FillInputEvent() - Get event %d from second input AOD file \n", iEntry+fSecondInputFirstEvent);
+    if(fSecondInputAODTree->GetEntriesFast() <= iEntry+fSecondInputFirstEvent) {
+      if(fSecondInputAODTree->GetEntriesFast() == iEntry+fSecondInputFirstEvent) 
                         printf("AliCaloTrackReader::FillInputEvent() - Skip events from event %d, no more events in second AOD file \n", iEntry);
-                return kFALSE;
-        }
-         
-        //Get the Event
-        Int_t nbytes = fSecondInputAODTree->GetEvent(iEntry+fSecondInputFirstEvent);
-        if ( nbytes == 0 ) {//If nothing in AOD
-                printf("AliCaloTrackReader::FillInputEvent() - Nothing in Second AOD input, STOP\n");
-                abort() ; 
-        }
-         
+      return kFALSE;
+    }
+    
+    //Get the Event
+    Int_t nbytes = fSecondInputAODTree->GetEvent(iEntry+fSecondInputFirstEvent);
+    if ( nbytes == 0 ) {//If nothing in AOD
+      printf("AliCaloTrackReader::FillInputEvent() - Nothing in Second AOD input, STOP\n");
+      abort() ; 
+    }
+    
   }
-
+  
   if(fFillCTS)   FillInputCTS();
   if(fFillEMCAL) FillInputEMCAL();
   if(fFillPHOS)  FillInputPHOS();
@@ -462,8 +475,8 @@ void AliCaloTrackReader::ResetLists() {
   if(fEMCALCells) fEMCALCells -> Clear();
   if(fPHOSCells)  fPHOSCells -> Clear();
   if(fCleanOutputStdAOD && fOutputEvent ){
-         //Only keep copied tracks and clusters if requested
-         fOutputEvent->GetTracks()      ->Clear();
-         fOutputEvent->GetCaloClusters()->Clear();
+    //Only keep copied tracks and clusters if requested
+    fOutputEvent->GetTracks()      ->Clear();
+    fOutputEvent->GetCaloClusters()->Clear();
   }
 }
index 5d4fcaf..4bc39f6 100755 (executable)
@@ -32,6 +32,8 @@ class AliAODEvent;
 class AliMCEvent;
 class AliFiducialCut;
 class AliAODMCHeader;
+#include "AliPHOSGeoUtils.h"
+#include "AliEMCALGeoUtils.h"
 
 class AliCaloTrackReader : public TObject {
 
@@ -175,6 +177,16 @@ class AliCaloTrackReader : public TObject {
   TString GetFiredTriggerClassName() const {return fFiredTriggerClassName ; }
   virtual TString GetFiredTriggerClasses() {return "";}
        
+  void SetEMCALGeometryName(TString name)   { fEMCALGeoName = name ; }
+  TString EMCALGeometryName() const { return fEMCALGeoName ; }
+       void InitEMCALGeometry() {if (!fEMCALGeo) fEMCALGeo = new AliEMCALGeoUtils(fEMCALGeoName); }
+  AliEMCALGeoUtils * GetEMCALGeometry() const {return fEMCALGeo;}
+       
+  void SetPHOSGeometryName(TString name)   { fPHOSGeoName = name ; }
+  TString PHOSGeometryName() const { return fPHOSGeoName ; }
+  void InitPHOSGeometry() {if (!fPHOSGeo) fPHOSGeo = new AliPHOSGeoUtils(fPHOSGeoName); }
+  AliPHOSGeoUtils * GetPHOSGeometry() const {return fPHOSGeo;}
+       
  protected:
   Int_t                   fEventNumber; // Event number
   TString          fCurrentFileName; // Current file name under analysis
@@ -221,8 +233,13 @@ class AliCaloTrackReader : public TObject {
   Bool_t            fCleanOutputStdAOD;   // clean the written standard tracks and caloclusters in output AOD
   TString        fDeltaAODFileName ;   // Delta AOD file name
   TString        fFiredTriggerClassName  ;  // Name of trigger event type used to do the analysis
-       
-  ClassDef(AliCaloTrackReader,9)
+
+  TString        fEMCALGeoName;  // Name of geometry to use for EMCAL.
+  TString        fPHOSGeoName;   // Name of geometry to use for PHOS.  
+  AliEMCALGeoUtils * fEMCALGeo ; //! EMCAL geometry pointer
+  AliPHOSGeoUtils  * fPHOSGeo  ; //! PHOS geometry pointer  
+
+  ClassDef(AliCaloTrackReader,10)
 } ;
 
 
index 1da8666..f4193b3 100755 (executable)
 #include "AliAODMCParticle.h"
 #include "AliMCAnalysisUtils.h"
 #include "AliAODPid.h"
-#include "AliPHOSGeoUtils.h"
-#include "AliEMCALGeoUtils.h"
 
 ClassImp(AliAnaCalorimeterQA)
   
 //____________________________________________________________________________
   AliAnaCalorimeterQA::AliAnaCalorimeterQA() : 
-       AliAnaPartCorrBaseClass(), fCalorimeter(""), fStyleMacro(""), fMakePlots(kFALSE), fCorrelateCalos(kFALSE),
-       fPHOSGeo(0x0),fEMCALGeo(0x0), fEMCALGeoName("EMCAL_COMPLETE"), fNModules(12),
-    fhE(0),fhPt(0),fhPhi(0),fhEta(0), fhEtaPhi(0),  fhEtaPhiE(0),
+    AliAnaPartCorrBaseClass(), fCalorimeter(""), fStyleMacro(""), fMakePlots(kFALSE), fCorrelateCalos(kFALSE),
+    fNModules(12), fhE(0),fhPt(0),fhPhi(0),fhEta(0), fhEtaPhi(0),  fhEtaPhiE(0),
     fhECharged(0),fhPtCharged(0),fhPhiCharged(0),fhEtaCharged(0), fhEtaPhiCharged(0), 
     fhEChargedNoOut(0),fhPtChargedNoOut(0),fhPhiChargedNoOut(0),fhEtaChargedNoOut(0), fhEtaPhiChargedNoOut(0), 
     fhDeltaE(0), fhDeltaPt(0),fhDeltaPhi(0),fhDeltaEta(0), fhRatioE(0), fhRatioPt(0),fhRatioPhi(0),fhRatioEta(0),
     fh2E(0),fh2Pt(0),fh2Phi(0),fh2Eta(0), fhIM(0), fhIMCellCut(0),fhAsym(0), fhNCellsPerCluster(0), fhNClusters(0), fhNCells(0), fhAmplitude(0), 
-       fhCaloCorrNClusters(0), fhCaloCorrEClusters(0), fhCaloCorrNCells(0), fhCaloCorrECells(0),
-       fhEMod(0),fhNClustersMod(0), fhNCellsPerClusterMod(0), fhNCellsMod(0),  
-       fhGridCellsMod(0),  fhGridCellsEMod(0), fhAmplitudeMod(0), fhIMMod(0),  fhIMCellCutMod(0),
+    fhCaloCorrNClusters(0), fhCaloCorrEClusters(0), fhCaloCorrNCells(0), fhCaloCorrECells(0),
+    fhEMod(0),fhNClustersMod(0), fhNCellsPerClusterMod(0), fhNCellsMod(0),  
+    fhGridCellsMod(0),  fhGridCellsEMod(0), fhAmplitudeMod(0), fhIMMod(0),  fhIMCellCutMod(0),
     fhGenGamPt(0),fhGenGamEta(0),fhGenGamPhi(0),fhGenPi0Pt(0),fhGenPi0Eta(0),fhGenPi0Phi(0),
     fhGenEtaPt(0),fhGenEtaEta(0),fhGenEtaPhi(0),fhGenOmegaPt(0),fhGenOmegaEta(0),fhGenOmegaPhi(0),
     fhGenElePt(0),fhGenEleEta(0),fhGenElePhi(0), fhEMVxyz(0),  fhEMR(0), fhHaVxyz(0),  fhHaR(0),
@@ -90,7 +87,7 @@ ClassImp(AliAnaCalorimeterQA)
     fh1pOverER02(0), fhMCEle1pOverER02(0), fhMCChHad1pOverER02(0), fhMCNeutral1pOverER02(0)
 {
   //Default Ctor
-
+  
   //Initialize parameters
   InitParameters();
 }
@@ -98,8 +95,7 @@ ClassImp(AliAnaCalorimeterQA)
 //____________________________________________________________________________
 AliAnaCalorimeterQA::AliAnaCalorimeterQA(const AliAnaCalorimeterQA & qa) :   
   AliAnaPartCorrBaseClass(qa), fCalorimeter(qa.fCalorimeter), fStyleMacro(qa.fStyleMacro), 
-  fMakePlots(qa.fMakePlots), fCorrelateCalos(qa.fCorrelateCalos),
-  fPHOSGeo(qa.fPHOSGeo),fEMCALGeo(qa.fEMCALGeo), fEMCALGeoName(qa.fEMCALGeoName), fNModules(qa.fNModules),
+  fMakePlots(qa.fMakePlots), fCorrelateCalos(qa.fCorrelateCalos), fNModules(qa.fNModules),
   fhE(qa.fhE),fhPt(qa.fhPt), fhPhi(qa.fhPhi), fhEta(qa.fhEta), 
   fhEtaPhi(qa.fhEtaPhi),  fhEtaPhiE(qa.fhEtaPhiE), fhECharged(qa.fhECharged),fhPtCharged(qa.fhPtCharged),fhPhiCharged(qa.fhPhiCharged),
   fhEtaCharged(qa.fhEtaCharged), fhEtaPhiCharged(qa.fhEtaPhiCharged), 
@@ -158,9 +154,6 @@ AliAnaCalorimeterQA & AliAnaCalorimeterQA::operator = (const AliAnaCalorimeterQA
   fMakePlots       = qa.fMakePlots;
   fCorrelateCalos  = qa.fCorrelateCalos;
 
-  fPHOSGeo      = qa.fPHOSGeo;
-  fEMCALGeo     = qa.fEMCALGeo;
-  fEMCALGeoName = qa.fEMCALGeoName ; 
   fNModules     = qa.fNModules; 
        
   fhE      = qa.fhE;
@@ -260,13 +253,10 @@ AliAnaCalorimeterQA & AliAnaCalorimeterQA::operator = (const AliAnaCalorimeterQA
 }
 
 //________________________________________________________________________________________________________________________________________________
-AliAnaCalorimeterQA::~AliAnaCalorimeterQA() {
+//AliAnaCalorimeterQA::~AliAnaCalorimeterQA() {
        // dtor
        
-       if(fPHOSGeo)  delete fPHOSGeo  ;
-       if(fEMCALGeo) delete fEMCALGeo ;
-       
-}
+//}
 
 
 //________________________________________________________________________
@@ -277,14 +267,16 @@ TList *  AliAnaCalorimeterQA::GetCreateOutputObjects()
     
        //If Geometry library loaded, do geometry selection during analysis.
        if(fCalorimeter=="PHOS"){
-               fPHOSGeo = new AliPHOSGeoUtils("PHOSgeo") ; 
-               printf("AliAnaCalorimeterQA::GetCreateOutputObjects() - PHOS geometry initialized!\n");
+               if(!GetReader()->GetPHOSGeometry()) printf("AliAnaPi0::GetCreateOutputObjects() - Initialize PHOS geometry!\n");
+               GetReader()->InitPHOSGeometry();
+               
        }
        else if(fCalorimeter=="EMCAL"){
-               fEMCALGeo = new AliEMCALGeoUtils(fEMCALGeoName) ;
-               printf("AliAnaCalorimeterQA::GetCreateOutputObjects() - EMCAL geometry initialized!\n");
+               if(!GetReader()->GetEMCALGeometry()) printf("AliAnaPi0::GetCreateOutputObjects() - Initialize EMCAL geometry!\n");
+               GetReader()->InitEMCALGeometry();
        }
        
+       
        TList * outputContainer = new TList() ; 
        outputContainer->SetName("QAHistos") ; 
        
@@ -994,11 +986,11 @@ Int_t AliAnaCalorimeterQA::GetModuleNumber(AliESDCaloCluster * cluster)
        if(phi < 0) phi+=TMath::TwoPi();        
        Int_t absId = -1;
        if(fCalorimeter=="EMCAL"){
-               fEMCALGeo->GetAbsCellIdFromEtaPhi(lv.Eta(),phi, absId);
+               GetReader()->GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(lv.Eta(),phi, absId);
                if(GetDebug() > 2) 
                        printf("AliAnaCalorimeterQA::GetModuleNumber(ESD) - EMCAL: cluster eta %f, phi %f, absid %d, SuperModule %d\n",
-                                  lv.Eta(), phi*TMath::RadToDeg(),absId, fEMCALGeo->GetSuperModuleNumber(absId));
-               return fEMCALGeo->GetSuperModuleNumber(absId) ;
+                                  lv.Eta(), phi*TMath::RadToDeg(),absId, GetReader()->GetEMCALGeometry()->GetSuperModuleNumber(absId));
+               return GetReader()->GetEMCALGeometry()->GetSuperModuleNumber(absId) ;
        }//EMCAL
        else{//PHOS
                Int_t    relId[4];
@@ -1011,7 +1003,7 @@ Int_t AliAnaCalorimeterQA::GetModuleNumber(AliESDCaloCluster * cluster)
                else return -1;
                
                if ( absId >= 0) {
-                       fPHOSGeo->AbsToRelNumbering(absId,relId);
+                       GetReader()->GetPHOSGeometry()->AbsToRelNumbering(absId,relId);
                        if(GetDebug() > 2) 
                                printf("AliAnaCalorimeterQA::GetModuleNumber(ESD) - PHOS: Module %d\n",relId[0]-1);
                        return relId[0]-1;
@@ -1033,11 +1025,11 @@ Int_t AliAnaCalorimeterQA::GetModuleNumber(AliAODCaloCluster * cluster)
        if(phi < 0) phi+=TMath::TwoPi();        
        Int_t absId = -1;
        if(fCalorimeter=="EMCAL"){
-               fEMCALGeo->GetAbsCellIdFromEtaPhi(lv.Eta(),phi, absId);
+               GetReader()->GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(lv.Eta(),phi, absId);
                if(GetDebug() > 2) 
                        printf("AliAnaCalorimeterQA::GetModuleNumber(ESD) - EMCAL: cluster eta %f, phi %f, absid %d, SuperModule %d\n",
-                                  lv.Eta(), phi*TMath::RadToDeg(),absId, fEMCALGeo->GetSuperModuleNumber(absId));
-               return fEMCALGeo->GetSuperModuleNumber(absId) ;
+                                  lv.Eta(), phi*TMath::RadToDeg(),absId, GetReader()->GetEMCALGeometry()->GetSuperModuleNumber(absId));
+               return GetReader()->GetEMCALGeometry()->GetSuperModuleNumber(absId) ;
        }//EMCAL
        else{//PHOS
                Int_t    relId[4];
@@ -1050,7 +1042,7 @@ Int_t AliAnaCalorimeterQA::GetModuleNumber(AliAODCaloCluster * cluster)
                else return -1;
                
                if ( absId >= 0) {
-                       fPHOSGeo->AbsToRelNumbering(absId,relId);
+                       GetReader()->GetPHOSGeometry()->AbsToRelNumbering(absId,relId);
                        if(GetDebug() > 2) 
                                printf("AliAnaCalorimeterQA::GetModuleNumber(AOD) - PHOS: Module %d\n",relId[0]-1);
                        return relId[0]-1;
@@ -1068,14 +1060,14 @@ Int_t AliAnaCalorimeterQA::GetModuleNumberCellIndexes(const Int_t absId, Int_t &
        if ( absId >= 0) {
                if(fCalorimeter=="EMCAL"){
                        Int_t iTower = -1, iIphi = -1, iIeta = -1; 
-                       fEMCALGeo->GetCellIndex(absId,imod,iTower,iIphi,iIeta); 
-            fEMCALGeo->GetCellPhiEtaIndexInSModule(imod,iTower,
+                       GetReader()->GetEMCALGeometry()->GetCellIndex(absId,imod,iTower,iIphi,iIeta); 
+            GetReader()->GetEMCALGeometry()->GetCellPhiEtaIndexInSModule(imod,iTower,
                                               iIphi, iIeta,irow,icol);
                        return imod ;
                }//EMCAL
                else{//PHOS
                        Int_t    relId[4];
-                       fPHOSGeo->AbsToRelNumbering(absId,relId);
+                       GetReader()->GetPHOSGeometry()->AbsToRelNumbering(absId,relId);
                        irow = relId[2];
                        icol = relId[3];
                        imod = relId[0]-1;
@@ -1112,7 +1104,6 @@ void AliAnaCalorimeterQA::InitParameters()
 
   fCalorimeter = "EMCAL"; //or PHOS
   fStyleMacro = "" ;
-  fEMCALGeoName = "EMCAL_COMPLETE";
   fNModules = 12; // set maximum to maximum number of EMCAL modules
 
 }
index 18bdb15..d8aa394 100755 (executable)
@@ -16,8 +16,6 @@ class TH2F;
 class TH1F;
 
 // --- Analysis system --- 
-class AliPHOSGeoUtils;
-class AliEMCALGeoUtils;
 class AliESDCaloCluster;
 class AliAODCaloCluster;
 
@@ -30,7 +28,7 @@ class AliAnaCalorimeterQA : public AliAnaPartCorrBaseClass {
   AliAnaCalorimeterQA() ; // default ctor
   AliAnaCalorimeterQA(const AliAnaCalorimeterQA & g) ; // cpy ctor
   AliAnaCalorimeterQA & operator = (const AliAnaCalorimeterQA & g) ;//cpy assignment
-  virtual ~AliAnaCalorimeterQA() ; //virtual dtor
+  virtual ~AliAnaCalorimeterQA() {;} //virtual dtor
   
   void ClusterHistograms(const TLorentzVector mom, const Int_t nCaloCellsPerCluster, const Int_t nModule,
                                                 const Int_t nTracksMatched, const TObject* track, 
@@ -62,9 +60,6 @@ class AliAnaCalorimeterQA : public AliAnaPartCorrBaseClass {
   void Terminate(TList * outputList);
   void ReadHistograms(TList * outputList); //Fill histograms with histograms in ouput list, needed in Terminate.
 
-  void SetEMCALGeometryName(TString name)   { fEMCALGeoName = name ; }
-  TString EMCALGeometryName() const { return fEMCALGeoName ; }
-
   Int_t GetModuleNumber(AliESDCaloCluster * cluster);
   Int_t GetModuleNumber(AliAODCaloCluster * cluster);
   Int_t GetModuleNumberCellIndexes(const Int_t absId, Int_t & icol, Int_t & irow);
@@ -77,9 +72,6 @@ class AliAnaCalorimeterQA : public AliAnaPartCorrBaseClass {
   TString fStyleMacro  ;   //Location of macro for plots style
   Bool_t fMakePlots    ;   //Print plots
   Bool_t fCorrelateCalos;  //Correlate PHOS/EMCAL clusters
-  AliPHOSGeoUtils  * fPHOSGeo  ; //! PHOS geometry pointer  
-  AliEMCALGeoUtils * fEMCALGeo ; //! EMCAL geometry pointer
-  TString fEMCALGeoName;  // Name of geometry to use.
   Int_t fNModules ;        // Number of EMCAL/PHOS modules, set as many histogras as modules 
        
   //Histograms
@@ -245,7 +237,7 @@ class AliAnaCalorimeterQA : public AliAnaPartCorrBaseClass {
   TH2F *fhMCChHad1pOverER02;    //! p/E for track-cluster matches, dR > 0.2, MC charged hadrons
   TH2F *fhMCNeutral1pOverER02;  //! p/E for track-cluster matches, dR > 0.2, MC neutral
        
-       ClassDef(AliAnaCalorimeterQA,3)
+       ClassDef(AliAnaCalorimeterQA,4)
 } ;
 
 
index d2c6103..ab5947e 100755 (executable)
@@ -42,8 +42,6 @@
 #include "TParticle.h"
 #include "AliAODCaloCluster.h"
 #include "AliVEvent.h"
-#include "AliPHOSGeoUtils.h"
-#include "AliEMCALGeoUtils.h"
 #include "AliESDCaloCluster.h"
 #include "AliESDEvent.h"
 #include "AliAODEvent.h"
@@ -54,10 +52,9 @@ ClassImp(AliAnaPi0)
 AliAnaPi0::AliAnaPi0() : AliAnaPartCorrBaseClass(),
 fNCentrBin(0),fNZvertBin(0),fNrpBin(0),
 fNPID(0),fNmaxMixEv(0), fZvtxCut(0.),fCalorimeter(""),
-fEMCALGeoName("EMCAL_COMPLETE"), fNModules(12), fEventsList(0x0), fhEtalon(0x0), fhReMod(0x0),
+fNModules(12), fEventsList(0x0), fhEtalon(0x0), fhReMod(0x0),
 fhRe1(0x0),fhMi1(0x0),fhRe2(0x0),fhMi2(0x0),fhRe3(0x0),fhMi3(0x0),fhEvents(0x0),
-fhPrimPt(0x0), fhPrimAccPt(0x0), fhPrimY(0x0), fhPrimAccY(0x0), fhPrimPhi(0x0), fhPrimAccPhi(0x0), 
-fPHOSGeo(0x0),fEMCALGeo(0x0)
+fhPrimPt(0x0), fhPrimAccPt(0x0), fhPrimY(0x0), fhPrimAccY(0x0), fhPrimPhi(0x0), fhPrimAccPhi(0x0)
 {
 //Default Ctor
  InitParameters();
@@ -68,11 +65,10 @@ fPHOSGeo(0x0),fEMCALGeo(0x0)
 AliAnaPi0::AliAnaPi0(const AliAnaPi0 & ex) : AliAnaPartCorrBaseClass(ex),  
 fNCentrBin(ex.fNCentrBin),fNZvertBin(ex.fNZvertBin),fNrpBin(ex.fNrpBin),
 fNPID(ex.fNPID),fNmaxMixEv(ex.fNmaxMixEv),fZvtxCut(ex.fZvtxCut), fCalorimeter(ex.fCalorimeter),
-fEMCALGeoName(ex.fEMCALGeoName), fNModules(ex.fNModules), fEventsList(ex.fEventsList), fhEtalon(ex.fhEtalon), fhReMod(ex.fhReMod),
+fNModules(ex.fNModules), fEventsList(ex.fEventsList), fhEtalon(ex.fhEtalon), fhReMod(ex.fhReMod),
 fhRe1(ex.fhRe1),fhMi1(ex.fhMi1),fhRe2(ex.fhRe2),fhMi2(ex.fhMi2),fhRe3(ex.fhRe3),fhMi3(ex.fhMi3),fhEvents(ex.fhEvents),
 fhPrimPt(ex.fhPrimPt), fhPrimAccPt(ex.fhPrimAccPt), fhPrimY(ex.fhPrimY), 
-fhPrimAccY(ex.fhPrimAccY), fhPrimPhi(ex.fhPrimPhi), fhPrimAccPhi(ex.fhPrimAccPhi),
-fPHOSGeo(ex.fPHOSGeo),fEMCALGeo(ex.fEMCALGeo)
+fhPrimAccY(ex.fhPrimAccY), fhPrimPhi(ex.fhPrimPhi), fhPrimAccPhi(ex.fhPrimAccPhi)
 {
   // cpy ctor
   //Do not need it
@@ -88,7 +84,7 @@ AliAnaPi0 & AliAnaPi0::operator = (const AliAnaPi0 & ex)
   
   fNCentrBin = ex.fNCentrBin  ; fNZvertBin = ex.fNZvertBin  ; fNrpBin = ex.fNrpBin  ; 
   fNPID = ex.fNPID  ; fNmaxMixEv = ex.fNmaxMixEv  ; fZvtxCut = ex.fZvtxCut  ;  fCalorimeter = ex.fCalorimeter  ;  
-  fEMCALGeoName = ex.fEMCALGeoName ; fNModules = ex.fNModules; fEventsList = ex.fEventsList  ;  fhEtalon = ex.fhEtalon  ; 
+ fNModules = ex.fNModules; fEventsList = ex.fEventsList  ;  fhEtalon = ex.fhEtalon  ; 
   fhRe1 = ex.fhRe1  ; fhMi1 = ex.fhMi1  ; fhRe2 = ex.fhRe2  ; fhMi2 = ex.fhMi2  ; fhReMod = ex.fhReMod; 
   fhRe3 = ex.fhRe3  ; fhMi3 = ex.fhMi3  ; fhEvents = ex.fhEvents  ; 
   fhPrimPt = ex.fhPrimPt  ;  fhPrimAccPt = ex.fhPrimAccPt  ;  fhPrimY = ex.fhPrimY  ;  
@@ -113,9 +109,6 @@ AliAnaPi0::~AliAnaPi0() {
     delete[] fEventsList; 
     fEventsList=0 ;
   }
-  
-  if(fPHOSGeo)  delete fPHOSGeo  ;
-  if(fEMCALGeo) delete fEMCALGeo ;
        
 }
 
@@ -135,7 +128,6 @@ void AliAnaPi0::InitParameters()
   fNmaxMixEv = 10;
   fZvtxCut   = 40;
   fCalorimeter  = "PHOS";
-  fEMCALGeoName = "EMCAL_COMPLETE";
 }
 //________________________________________________________________________________________________________________________________________________
 void AliAnaPi0::Init()
@@ -171,12 +163,13 @@ TList * AliAnaPi0::GetCreateOutputObjects()
   
   //If Geometry library loaded, do geometry selection during analysis.
   if(fCalorimeter=="PHOS"){
-               fPHOSGeo = new AliPHOSGeoUtils("PHOSgeo") ; 
-               printf("AliAnaPi0::GetCreateOutputObjects() - PHOS geometry initialized!\n");
+    if(!GetReader()->GetPHOSGeometry()) printf("AliAnaPi0::GetCreateOutputObjects() - Initialize PHOS geometry!\n");
+    GetReader()->InitPHOSGeometry();
+    
   }
   else if(fCalorimeter=="EMCAL"){
-         fEMCALGeo = new AliEMCALGeoUtils(fEMCALGeoName) ;
-         printf("AliAnaPi0::GetCreateOutputObjects() - EMCAL geometry initialized!\n");
+    if(!GetReader()->GetEMCALGeometry()) printf("AliAnaPi0::GetCreateOutputObjects() - Initialize EMCAL geometry!\n");
+    GetReader()->InitEMCALGeometry();
   }
        
   TList * outputContainer = new TList() ; 
@@ -345,11 +338,11 @@ Int_t AliAnaPi0::GetModuleNumber(AliAODPWG4Particle * particle)
        
        Int_t absId = -1;
        if(fCalorimeter=="EMCAL"){
-               fEMCALGeo->GetAbsCellIdFromEtaPhi(particle->Eta(),particle->Phi(), absId);
+               GetReader()->GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(particle->Eta(),particle->Phi(), absId);
                if(GetDebug() > 2) 
                        printf("AliAnaPi0::GetModuleNumber() - EMCAL: cluster eta %f, phi %f, absid %d, SuperModule %d\n",
-                                  particle->Eta(), particle->Phi()*TMath::RadToDeg(),absId, fEMCALGeo->GetSuperModuleNumber(absId));
-               return fEMCALGeo->GetSuperModuleNumber(absId) ;
+                                  particle->Eta(), particle->Phi()*TMath::RadToDeg(),absId, GetReader()->GetEMCALGeometry()->GetSuperModuleNumber(absId));
+               return GetReader()->GetEMCALGeometry()->GetSuperModuleNumber(absId) ;
        }//EMCAL
        else{//PHOS
                Int_t    relId[4];
@@ -375,7 +368,7 @@ Int_t AliAnaPi0::GetModuleNumber(AliAODPWG4Particle * particle)
                }//AODs
 
                if ( absId >= 0) {
-                       fPHOSGeo->AbsToRelNumbering(absId,relId);
+                       GetReader()->GetPHOSGeometry()->AbsToRelNumbering(absId,relId);
                        if(GetDebug() > 2) 
                                printf("PHOS: Module %d\n",relId[0]-1);
                        return relId[0]-1;
@@ -538,10 +531,10 @@ void AliAnaPi0::MakeAnalysisFillHistograms()
                   Bool_t inacceptance = kFALSE;
 
                           if(fCalorimeter == "PHOS"){
-                                  if(fPHOSGeo){
+                                  if(GetReader()->GetPHOSGeometry()){
                                           Int_t mod ;
                                           Double_t x,z ;
-                                          if(fPHOSGeo->ImpactOnEmc(phot1,mod,z,x) && fPHOSGeo->ImpactOnEmc(phot2,mod,z,x)) 
+                                          if(GetReader()->GetPHOSGeometry()->ImpactOnEmc(phot1,mod,z,x) && GetReader()->GetPHOSGeometry()->ImpactOnEmc(phot2,mod,z,x)) 
                                                   inacceptance = kTRUE;
                                           if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance);
                                   }
@@ -556,8 +549,8 @@ void AliAnaPi0::MakeAnalysisFillHistograms()
                                   
                           }       
                           else if(fCalorimeter == "EMCAL"){
-                                  if(fEMCALGeo){
-                                          if(fEMCALGeo->Impact(phot1) && fEMCALGeo->Impact(phot2)) 
+                                  if(GetReader()->GetEMCALGeometry()){
+                                          if(GetReader()->GetEMCALGeometry()->Impact(phot1) && GetReader()->GetEMCALGeometry()->Impact(phot2)) 
                                                   inacceptance = kTRUE;
                                           if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance);
                                        }
index 3f1b5c4..c32fe0e 100755 (executable)
@@ -21,9 +21,6 @@ class AliAODEvent ;
 class AliESDEvent ;
 #include "AliAnaPartCorrBaseClass.h"
 
-class AliPHOSGeoUtils;
-class AliEMCALGeoUtils;
-
 class AliAnaPi0 : public AliAnaPartCorrBaseClass {
   
   public: 
@@ -59,10 +56,7 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass {
   
   TString GetCalorimeter()   const {return fCalorimeter ; }
   void SetCalorimeter(TString det)    {fCalorimeter = det ; }
-  
-  void SetEMCALGeometryName(TString name)   { fEMCALGeoName = name ; }
-  TString EMCALGeometryName() const { return fEMCALGeoName ; }
-       
+       
   void Terminate(TList* outputList);
   void ReadHistograms(TList * outputList); //Fill histograms with histograms in ouput list, needed in Terminate.
        
@@ -83,7 +77,6 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass {
   Int_t fNmaxMixEv ;     // Maximal number of events stored in buffer for mixing
   Float_t fZvtxCut ;     // Cut on vertex position
   TString fCalorimeter ;  // Select Calorimeter for IM
-  TString fEMCALGeoName;  // Name of geometry to use.
   Int_t fNModules ;       // Number of EMCAL/PHOS modules, set as many histogras as modules 
 
   TList ** fEventsList ;  //! containers for photons in stored events
@@ -109,11 +102,8 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass {
   TH1D * fhPrimAccY ;  //! Rapidity distribution of primary with accepted daughters
   TH1D * fhPrimPhi ;   //! Azimutal distribution of primary particles
   TH1D * fhPrimAccPhi; //! Azimutal distribution of primary with accepted daughters    
-  
-  AliPHOSGeoUtils  * fPHOSGeo  ; //! PHOS geometry pointer  
-  AliEMCALGeoUtils * fEMCALGeo ; //! EMCAL geometry pointer
 
-  ClassDef(AliAnaPi0,5)
+  ClassDef(AliAnaPi0,6)
 } ;
 
 
index 56c77db..9d3e438 100644 (file)
@@ -20,45 +20,46 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
    //cout<<"DATA TYPE :: "<<inputDataType<<endl;
    // inputDataType: data managed by the input handler
    // data: can be same as one managed by input handler, or the output AOD created by the filter. By default use AOD
-       
+   
    // Configure analysis
    //===========================================================================
-  
-  //Reader
-  AliCaloTrackReader * reader = 0x0;
-  if(data=="AOD") reader = new AliCaloTrackAODReader();
-  else if(data=="ESD") reader = new AliCaloTrackESDReader();
-  else if(data=="MC" && dataType == "ESD") reader = new AliCaloTrackMCReader();
-  //reader->SetDebug(10);//10 for lots of messages
-  reader->SwitchOnCTS();
-  if(!kSimulation) reader->SetFiredTriggerClassName("CINT1B-ABCE-NOPF-ALL");
+   
+   //Reader
+   AliCaloTrackReader * reader = 0x0;
+   if(data=="AOD") reader = new AliCaloTrackAODReader();
+   else if(data=="ESD") reader = new AliCaloTrackESDReader();
+   else if(data=="MC" && dataType == "ESD") reader = new AliCaloTrackMCReader();
+   //reader->SetDebug(10);//10 for lots of messages
+   reader->SwitchOnCTS();
+   //reader->SetDeltaAODFileName("");
+   if(!kSimulation) reader->SetFiredTriggerClassName("CINT1B-ABCE-NOPF-ALL");
   if(calorimeter == "EMCAL") {
-         reader->SwitchOnEMCALCells();  
-         reader->SwitchOnEMCAL();
+    reader->SwitchOnEMCALCells();  
+    reader->SwitchOnEMCAL();
   }
   if(calorimeter == "PHOS") { 
-         reader->SwitchOnPHOSCells();  
-         reader->SwitchOnPHOS();
+    reader->SwitchOnPHOSCells();  
+    reader->SwitchOnPHOS();
   }
   if(kUseKinematics){
-       if(inputDataType == "ESD"){
-               reader->SwitchOnStack();          
-               reader->SwitchOffAODMCParticles(); 
-       }
-       else if(inputDataType == "AOD"){
-               reader->SwitchOffStack();          
-               reader->SwitchOnAODMCParticles(); 
-       }
+    if(inputDataType == "ESD"){
+      reader->SwitchOnStack();          
+      reader->SwitchOffAODMCParticles(); 
+    }
+    else if(inputDataType == "AOD"){
+      reader->SwitchOffStack();          
+      reader->SwitchOnAODMCParticles(); 
+    }
   }
-       
+  
   //Min particle pT
   reader->SetEMCALPtMin(0.1); 
   reader->SetPHOSPtMin(0.);
   reader->SetCTSPtMin(0.);
   if(kPrintSettings) reader->Print("");
-       
+  
   // ##### Analysis algorithm settings ####
-
+  
   // --------------------
   // --- Pi0 Analysis ---
   // --------------------
@@ -75,34 +76,34 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   fidCut->DoPHOSFiducialCut(kTRUE) ;
        
   AliAnaCalorimeterQA *qa = new AliAnaCalorimeterQA();
-  qa->SetDebug(-1); //10 for lots of messages
+  //qa->SetDebug(10); //10 for lots of messages
   qa->SetCalorimeter(calorimeter);
   if(kUseKinematics && inputDataType!="AOD") qa->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
   else  qa->SwitchOffDataMC() ;
   qa->AddToHistogramsName("AnaCaloQA_");
   qa->SetFiducialCut(fidCut);
   qa->SwitchOnFiducialCut();
-  if(qa=="PHOS") anapi0->SetNumberOfModules(3); //PHOS first year
+  if(qa=="PHOS") qa->SetNumberOfModules(3); //PHOS first year
   else  qa->SetNumberOfModules(4); //EMCAL first year
   //Set Histograms bins and ranges
-  qa->SetHistoPtRangeAndNBins(0, 50, 200) ;
+  qa->SetHistoPtRangeAndNBins(0, 50, 500) ;
        //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
        //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
   if(kPrintSettings) qa->Print("");    
-       
+  
   AliFiducialCut * fidCut1stYear = new AliFiducialCut();
   fidCut1stYear->DoCTSFiducialCut(kFALSE) ;
   if(kSimulation){
-         fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
-         fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
-         fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
-         fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
+    fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
+    fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
+    fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
+    fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
   } 
   else{
-         fidCut1stYear->DoEMCALFiducialCut(kFALSE) ;
-         fidCut1stYear->DoPHOSFiducialCut(kFALSE) ;
+    fidCut1stYear->DoEMCALFiducialCut(kFALSE) ;
+    fidCut1stYear->DoPHOSFiducialCut(kFALSE) ;
   }    
-       
+  
   AliAnaPhoton *anaphoton1 = new AliAnaPhoton();
   anaphoton1->SetDebug(-1); //10 for lots of messages
   anaphoton1->SetMinPt(0.);
@@ -114,15 +115,15 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   anaphoton1->SwitchOffCaloPID();
   anaphoton1->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL
   if(kSimulation){
-               anaphoton1->SwitchOnFiducialCut();
-               anaphoton1->SetFiducialCut(fidCut1stYear);
+    anaphoton1->SwitchOnFiducialCut();
+    anaphoton1->SetFiducialCut(fidCut1stYear);
   }
   anaphoton1->SetOutputAODName(Form("PhotonsForIM%s",calorimeter.Data()));
   //Set Histograms bins and ranges
-  anaphoton1->SetHistoPtRangeAndNBins(0, 50, 200) ;
+  anaphoton1->SetHistoPtRangeAndNBins(0, 50, 500) ;
   //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
   //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
-       
+  
   if(kPrintSettings) anaphoton1->Print("");
 
   AliAnaPi0 *anapi0 = new AliAnaPi0();
@@ -132,12 +133,20 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   anapi0->SetCalorimeter(calorimeter);
   anapi0->SwitchOnFiducialCut();
   anapi0->SetNPID(1); //Available from tag AliRoot::v4-18-15-AN
+  //settings for pp collision
+  anapi0->SetNCentrBin(1);
+  anapi0->SetNZvertBin(1);
+  anapi0->SetNRPBin(1);
+  anapi0->SetNMaxEvMix(10);
+  //TH3D * h = new TH3D("binning","Histo with binning parameters",500,0.,50.,10,0.,1.,100,0.,1.) ;
+  //anapi0->SetEtalonHisto(h);
+  // anapi0->SetZvertexCut(40);
   anapi0->SwitchOffDataMC() ;//Access MC stack and fill more histograms
   if(calorimeter=="PHOS") anapi0->SetNumberOfModules(3); //PHOS first year
   else  anapi0->SetNumberOfModules(4); //EMCAL first year
   if(kPrintSettings) anapi0->Print("");
   
-       
+  
   // -------------------------------------------------
   // --- Photon Isolation and Correlation Analysis ---
   // -------------------------------------------------
@@ -155,9 +164,9 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   anaphoton2->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
   anaphoton2->AddToHistogramsName("AnaPhotonCorr_");
   //Set Histograms bins and ranges
-  anaphoton2->SetHistoPtRangeAndNBins(0, 50, 200) ;
-       //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
-       //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+  anaphoton2->SetHistoPtRangeAndNBins(0, 50, 500) ;
+  //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+  //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
   if(kPrintSettings) anaphoton2->Print("");
   // ### Isolation analysis ###        
   
@@ -185,7 +194,7 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   //Multiple IC
   anaisol->SwitchOffSeveralIsolation() ;
   //Set Histograms bins and ranges
-  anaisol->SetHistoPtRangeAndNBins(0, 50, 200) ;
+  anaisol->SetHistoPtRangeAndNBins(0, 50, 500) ;
   //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
   //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
   anaisol->AddToHistogramsName("AnaIsolPhoton_");
@@ -203,9 +212,9 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   anacorrjet->SetRatioCutRange(0.01,3); //Mostly Open Cuts
   anacorrjet->UseJetRefTracks(kFALSE); //Not working now
   //Set Histograms bins and ranges
-  anacorrjet->SetHistoPtRangeAndNBins(0, 50, 200) ;
-       //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
-       //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+  anacorrjet->SetHistoPtRangeAndNBins(0, 50, 500) ;
+  //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+  //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
   if(kPrintSettings) anacorrjet->Print("");
   
   // ### Correlation with hadrons
@@ -220,56 +229,58 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   anacorrhadron->SetPtCutRange(0.1,100);
   anacorrhadron->SetDeltaPhiCutRange(1.5,4.5);
   anacorrhadron->SwitchOnSeveralUECalculation();
+  anacorrhadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
   anacorrhadron->SelectIsolated(kFALSE); // do correlation with isolated photons
   if(kUseKinematics) anacorrhadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
   else  anacorrhadron->SwitchOffDataMC() ;
   //if(calorimeter=="PHOS"){
-    //Correlate with particles in EMCAL
-    //anacorrhadron->SwitchOnCaloPID();
-    //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
+  //Correlate with particles in EMCAL
+  //anacorrhadron->SwitchOnCaloPID();
+  //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
   //}
   //Set Histograms bins and ranges
-  anacorrhadron->SetHistoPtRangeAndNBins(0, 50, 200) ;
-       //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
-       //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+  anacorrhadron->SetHistoPtRangeAndNBins(0, 50, 500) ;
+  //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+  //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
   if(kPrintSettings) anacorrhadron->Print("");
   
-       // ### Correlation with hadrons
-       AliAnaParticleHadronCorrelation *anacorrisohadron = new AliAnaParticleHadronCorrelation();
-       anacorrisohadron->SetInputAODName(Form("Photons%s",calorimeter.Data()));
-       anacorrisohadron->SetOutputAODName(Form("CorrIsoGammaHadrons%s",calorimeter.Data()));
-       anacorrisohadron->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
-       anacorrisohadron->AddToHistogramsName("AnaHadronCorrIsoPhoton_");
-       anacorrisohadron->SetDebug(-1);
-       anacorrisohadron->SwitchOffCaloPID();
-       anacorrisohadron->SwitchOffFiducialCut();
-       anacorrisohadron->SetPtCutRange(0.1,100);
-       anacorrisohadron->SetDeltaPhiCutRange(1.5,4.5);
-       anacorrisohadron->SwitchOnSeveralUECalculation();
-       anacorrisohadron->SelectIsolated(kTRUE); // do correlation with isolated photons
-       if(kUseKinematics) anacorrisohadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
-       else  anacorrisohadron->SwitchOffDataMC() ;
-       //if(calorimeter=="PHOS"){
-    //Correlate with particles in EMCAL
-    //anacorrhadron->SwitchOnCaloPID();
-    //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
-       //}
-       //Set Histograms bins and ranges
-       anacorrisohadron->SetHistoPtRangeAndNBins(0, 50, 200) ;
-       //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
-       //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
-       if(kPrintSettings) anacorrisohadron->Print("");
-       
-       
+  // ### Correlation with hadrons
+  AliAnaParticleHadronCorrelation *anacorrisohadron = new AliAnaParticleHadronCorrelation();
+  anacorrisohadron->SetInputAODName(Form("Photons%s",calorimeter.Data()));
+  anacorrisohadron->SetOutputAODName(Form("CorrIsoGammaHadrons%s",calorimeter.Data()));
+  anacorrisohadron->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
+  anacorrisohadron->AddToHistogramsName("AnaHadronCorrIsoPhoton_");
+  anacorrisohadron->SetDebug(-1);
+  anacorrisohadron->SwitchOffCaloPID();
+  anacorrisohadron->SwitchOffFiducialCut();
+  anacorrisohadron->SetPtCutRange(0.1,100);
+  anacorrisohadron->SetDeltaPhiCutRange(1.5,4.5);
+  anacorrisohadron->SwitchOnSeveralUECalculation();
+  anacorrisohadron->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
+  anacorrisohadron->SelectIsolated(kTRUE); // do correlation with isolated photons
+  if(kUseKinematics) anacorrisohadron->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+  else  anacorrisohadron->SwitchOffDataMC() ;
+  //if(calorimeter=="PHOS"){
+  //Correlate with particles in EMCAL
+  //anacorrhadron->SwitchOnCaloPID();
+  //anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
+  //}
+  //Set Histograms bins and ranges
+  anacorrisohadron->SetHistoPtRangeAndNBins(0, 50, 500) ;
+  //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+  //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+  if(kPrintSettings) anacorrisohadron->Print("");
+  
+  
   AliNeutralMesonSelection *nms = new AliNeutralMesonSelection();
   nms->SetInvMassCutRange(0.05, 0.2)     ;
   nms->KeepNeutralMesonSelectionHistos(kTRUE);
   //Set Histrograms bins and ranges
-  nms->SetHistoERangeAndNBins(0, 50, 200) ;
+  nms->SetHistoERangeAndNBins(0, 50, 500) ;
   //      nms->SetHistoPtRangeAndNBins(0, 50, 100) ;
   //      nms->SetHistoAngleRangeAndNBins(0, 0.3, 100) ;
   //      nsm->SetHistoIMRangeAndNBins(0, 0.4, 100) ;  
-       
+  
   AliAnaPi0EbE *anapi0ebe = new AliAnaPi0EbE();
   anapi0ebe->SetDebug(-1);//10 for lots of messages
   anapi0ebe->SetAnalysisType(AliAnaPi0EbE::kIMCalo);
@@ -282,62 +293,90 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   else  anapi0ebe->SwitchOffDataMC() ; 
   anapi0ebe->SetNeutralMesonSelection(nms);
   //Set Histrograms bins and ranges
-  anapi0ebe->SetHistoPtRangeAndNBins(0, 50, 200) ;
+  anapi0ebe->SetHistoPtRangeAndNBins(0, 50, 500) ;
   //      anapi0->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
   //      anapi0->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
   if(kPrintSettings) anapi0ebe->Print("");
-       
-       AliAnaParticleIsolation *anaisolpi0 = new AliAnaParticleIsolation();
-       anaisolpi0->SetDebug(-1);
-       anaisolpi0->SetMinPt(2);
-       anaisolpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
-       anaisolpi0->AddToHistogramsName("AnaIsolPi0_");
-       anaisolpi0->SetCalorimeter(calorimeter);
-       if(kUseKinematics) anaisolpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
-       else  anaisolpi0->SwitchOffDataMC() ;
-       //Select clusters with no pair, if both clusters with pi0 mass
-       anaisolpi0->SwitchOffInvariantMass();
-       //anaisol->SetNeutralMesonSelection(nms);
-       //Do isolation cut
-       anaisolpi0->SetIsolationCut(ic);        
-       //Do or not do isolation with previously produced AODs.
-       //No effect if use of SwitchOnSeveralIsolation()
-       anaisolpi0->SwitchOffReIsolation();
-       //Multiple IC
-       anaisolpi0->SwitchOffSeveralIsolation() ;
-       //Set Histograms bins and ranges
-       anaisolpi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
-       //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
-       //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
-       if(kPrintSettings) anaisol->Print("");
-       
-       
-       // ### Pi0 Correlation with hadrons, not isolated
-       AliAnaParticleHadronCorrelation *anacorrhadronpi0 = new AliAnaParticleHadronCorrelation();
-       anacorrhadronpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
-       anacorrhadronpi0->SetOutputAODName(Form("CorrPi0Hadrons%s",calorimeter.Data()));
-       anacorrhadronpi0->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
-       anacorrhadronpi0->AddToHistogramsName("AnaHadronCorrPi0_");
-       anacorrhadronpi0->SetDebug(-1);
-       anacorrhadronpi0->SwitchOffCaloPID();
-       anacorrhadronpi0->SwitchOffFiducialCut();
-       anacorrhadronpi0->SetPtCutRange(0.1,100);
-       anacorrhadronpi0->SetDeltaPhiCutRange(1.5,4.5);
-       anacorrhadronpi0->SelectIsolated(kFALSE); // do correlation with isolated photons
-       if(kUseKinematics) anacorrhadronpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
-       else  anacorrhadronpi0->SwitchOffDataMC() ;
-       //if(calorimeter=="PHOS"){
-       //      //Correlate with particles in EMCAL
-       //      anacorrhadronpi0->SwitchOnCaloPID();
-       //      anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
-       //}
-       //Set Histograms bins and ranges
-       anacorrhadronpi0->SetHistoPtRangeAndNBins(0, 50, 200) ;
-       //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
-       //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
-       if(kPrintSettings) anacorrhadronpi0->Print("");
-       
-       
+  
+  AliAnaParticleIsolation *anaisolpi0 = new AliAnaParticleIsolation();
+  anaisolpi0->SetDebug(-1);
+  anaisolpi0->SetMinPt(2);
+  anaisolpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
+  anaisolpi0->AddToHistogramsName("AnaIsolPi0_");
+  anaisolpi0->SetCalorimeter(calorimeter);
+  if(kUseKinematics) anaisolpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+  else  anaisolpi0->SwitchOffDataMC() ;
+  //Select clusters with no pair, if both clusters with pi0 mass
+  anaisolpi0->SwitchOffInvariantMass();
+  //anaisol->SetNeutralMesonSelection(nms);
+  //Do isolation cut
+  anaisolpi0->SetIsolationCut(ic);     
+  //Do or not do isolation with previously produced AODs.
+  //No effect if use of SwitchOnSeveralIsolation()
+  anaisolpi0->SwitchOffReIsolation();
+  //Multiple IC
+  anaisolpi0->SwitchOffSeveralIsolation() ;
+  //Set Histograms bins and ranges
+  anaisolpi0->SetHistoPtRangeAndNBins(0, 50, 500) ;
+  //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+  //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+  if(kPrintSettings) anaisol->Print("");
+  
+  
+  // ### Pi0 Correlation with hadrons, not isolated
+  AliAnaParticleHadronCorrelation *anacorrhadronpi0 = new AliAnaParticleHadronCorrelation();
+  anacorrhadronpi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
+  anacorrhadronpi0->SetOutputAODName(Form("CorrPi0Hadrons%s",calorimeter.Data()));
+  anacorrhadronpi0->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
+  anacorrhadronpi0->AddToHistogramsName("AnaHadronCorrPi0_");
+  anacorrhadronpi0->SetDebug(-1);
+  anacorrhadronpi0->SwitchOffCaloPID();
+  anacorrhadronpi0->SwitchOffFiducialCut();
+  anacorrhadronpi0->SetPtCutRange(0.1,100);
+  anacorrhadronpi0->SetDeltaPhiCutRange(1.5,4.5);
+  anacorrhadronpi0->SelectIsolated(kFALSE); // do correlation with non isolated pi0
+  anacorrhadronpi0->SwitchOnSeveralUECalculation();
+  anacorrhadronpi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
+  if(kUseKinematics) anacorrhadronpi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+  else  anacorrhadronpi0->SwitchOffDataMC() ;
+  //if(calorimeter=="PHOS"){
+  //   //Correlate with particles in EMCAL
+  //   anacorrhadronpi0->SwitchOnCaloPID();
+  //   anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
+  //}
+  //Set Histograms bins and ranges
+  anacorrhadronpi0->SetHistoPtRangeAndNBins(0, 50, 500) ;
+  //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+  //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+  if(kPrintSettings) anacorrhadronpi0->Print("");
+  
+  // ### Pi0 Correlation with hadrons, isolated
+  AliAnaParticleHadronCorrelation *anacorrhadronisopi0 = new AliAnaParticleHadronCorrelation();
+  anacorrhadronisopi0->SetInputAODName(Form("Pi0s%s",calorimeter.Data()));
+  anacorrhadronisopi0->SetOutputAODName(Form("CorrIsoPi0Hadrons%s",calorimeter.Data()));
+  anacorrhadronisopi0->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
+  anacorrhadronisopi0->AddToHistogramsName("AnaHadronCorrIsoPi0_");
+  anacorrhadronisopi0->SetDebug(-1);
+  anacorrhadronisopi0->SwitchOffCaloPID();
+  anacorrhadronisopi0->SwitchOffFiducialCut();
+  anacorrhadronisopi0->SetPtCutRange(0.1,100);
+  anacorrhadronisopi0->SetDeltaPhiCutRange(1.5,4.5);
+  anacorrhadronisopi0->SelectIsolated(kTRUE); // do correlation with isolated pi0
+  anacorrhadronisopi0->SwitchOnSeveralUECalculation();
+  anacorrhadronisopi0->SetUeDeltaPhiCutRange(TMath::Pi()/3, 2*TMath::Pi()/3);
+  if(kUseKinematics) anacorrhadronisopi0->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+  else  anacorrhadronisopi0->SwitchOffDataMC() ;
+  //if(calorimeter=="PHOS"){
+  //   //Correlate with particles in EMCAL
+  //   anacorrhadronpi0->SwitchOnCaloPID();
+  //   anacorrhadronpi0->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
+  //}
+  //Set Histograms bins and ranges
+  anacorrhadronisopi0->SetHistoPtRangeAndNBins(0, 50, 500) ;
+  //      ana->SetHistoPhiRangeAndNBins(0, TMath::TwoPi(), 100) ;
+  //      ana->SetHistoEtaRangeAndNBins(-0.7, 0.7, 100) ;
+  if(kPrintSettings) anacorrhadronisopi0->Print("");
+  
   // #### Configure Maker ####
   AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker();
   maker->SetReader(reader);//pointer to reader
@@ -352,7 +391,8 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   maker->AddAnalysis(anapi0ebe,8);
   maker->AddAnalysis(anaisolpi0,9);
   maker->AddAnalysis(anacorrhadronpi0,10);
-       
+  maker->AddAnalysis(anacorrhadronisopi0,11);
+  
   maker->SetAnaDebug(-1)  ;
   maker->SwitchOnHistogramsMaker()  ;
   maker->SwitchOnAODsMaker()  ;
@@ -362,8 +402,8 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   printf(" End Configuration of PartCorr analysis with detector %s \n",calorimeter.Data());
   printf("======================== \n");
   
-   // Create task
-   //===========================================================================
+  // Create task
+  //===========================================================================
   AliAnalysisTaskParticleCorrelation * task = new AliAnalysisTaskParticleCorrelation (Form("PartCorr%s",calorimeter.Data()));
   task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
   //task->SetDebugLevel(-1);
@@ -374,12 +414,12 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori
   sprintf(name,"PartCorr_%s",calorimeter.Data());
   cout<<"Name of task "<<name<<endl;
   //AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form(name),TList::Class(),
-       //                                         AliAnalysisManager::kOutputContainer, Form("PartCorr_%s.root",calorimeter.Data()));
+  //                                      AliAnalysisManager::kOutputContainer, Form("PartCorr_%s.root",calorimeter.Data()));
   
   TString outputfile = AliAnalysisManager::GetCommonFileName(); 
   //  AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("PartCorr_%s",calorimeter.Data()),  TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr_%s",outputfile.Data(),calorimeter.Data()));
   AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(calorimeter.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr",outputfile.Data()));
-
+  
   // Create ONLY the output containers for the data produced by the task.
   // Get and connect other common input/output containers via the manager as below
   //==============================================================================