]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/CaloTrackCorrelations/AliAnaParticleIsolation.cxx
fix wrong initialization of int with a float
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaParticleIsolation.cxx
index eb920620d37cfacc56467cc2485e2e0230729985..ef5a02e7351c94ee8a0be8792c04286202969dc5 100755 (executable)
 // Class for analysis of particle isolation
 // Input is selected particles put in AOD branch (AliAODPWG4ParticleCorrelation)
 //
-//  Class created from old AliPHOSGammaJet 
+//  Class created from old AliPHOSGammaJet
 //  (see AliRoot versions previous Release 4-09)
 //
-// -- Author: Gustavo Conesa (LNF-INFN) 
+// -- Author: Gustavo Conesa (LNF-INFN)
 
 //-Yaxian Mao (add the possibility for different IC method with different pt range, 01/10/2010)
 //////////////////////////////////////////////////////////////////////////////
 
-
-// --- ROOT system --- 
+// --- ROOT system ---
 #include <TClonesArray.h>
 #include <TList.h>
 #include <TObjString.h>
 #include <TH2F.h>
 #include <TClass.h>
+#include <TH2F.h>
+#include "TParticle.h"
+#include "TDatabasePDG.h"
 
-// --- Analysis system --- 
-#include "AliAnaParticleIsolation.h" 
+// --- Analysis system ---
+#include "AliAnaParticleIsolation.h"
 #include "AliCaloTrackReader.h"
+#include "AliStack.h"
 #include "AliIsolationCut.h"
+#include "AliFiducialCut.h"
+#include "AliMCAnalysisUtils.h"
 #include "AliNeutralMesonSelection.h"
+#include "AliAODMCParticle.h"
 #include "AliAODPWG4ParticleCorrelation.h"
 #include "AliMCAnalysisUtils.h"
 #include "AliVTrack.h"
 #include "AliVCluster.h"
 #include "AliESDEvent.h"
 #include "AliAODEvent.h"
-#include "AliEMCALGeometry.h"                    
+// --- Detectors ---
+#include "AliEMCALGeometry.h"
+#include "AliPHOSGeoUtils.h"
 
 ClassImp(AliAnaParticleIsolation)
 
 //______________________________________________________________________________
-AliAnaParticleIsolation::AliAnaParticleIsolation() : 
-AliAnaCaloTrackCorrBaseClass(),   fCalorimeter(""), 
-fReMakeIC(0),                     fMakeSeveralIC(0),               
+AliAnaParticleIsolation::AliAnaParticleIsolation() :
+AliAnaCaloTrackCorrBaseClass(),
+fCalorimeter(""),                 fIsoDetector(""),
+fReMakeIC(0),                     fMakeSeveralIC(0),
 fFillPileUpHistograms(0),
-fFillTMHisto(0),                  fFillSSHisto(0),
+fFillTMHisto(0),                  fFillSSHisto(1),
+fFillUEBandSubtractHistograms(1), fFillCellHistograms(0),
+fFillHighMultHistograms(0),       fFillTaggedDecayHistograms(0),
+fNDecayBits(0),                   fDecayBits(),
+fFillNLMHistograms(0),
+fLeadingOnly(0),                  fCheckLeadingWithNeutralClusters(0),
+fFillBackgroundBinHistograms(0),  fNBkgBin(0),
 // Several IC
-fNCones(0),                       fNPtThresFrac(0), 
-fConeSizes(),                     fPtThresholds(),                 
+fNCones(0),                       fNPtThresFrac(0),
+fConeSizes(),                     fPtThresholds(),
 fPtFractions(),                   fSumPtThresholds(),
 // Histograms
 fhEIso(0),                        fhPtIso(0),
 fhPtCentralityIso(0),             fhPtEventPlaneIso(0),
 fhPtNLocMaxIso(0),
-fhPhiIso(0),                      fhEtaIso(0),                              fhEtaPhiIso(0), 
-fhEtaPhiNoIso(0), 
+fhPhiIso(0),                      fhEtaIso(0),                              fhEtaPhiIso(0),
+fhEtaPhiNoIso(0),
 fhENoIso(0),                      fhPtNoIso(0),                             fhPtNLocMaxNoIso(0),
-fhPtDecayIso(0),                  fhPtDecayNoIso(0),
-fhEtaPhiDecayIso(0),              fhEtaPhiDecayNoIso(0), 
 fhPtInCone(0),
 fhPtClusterInCone(0),             fhPtCellInCone(0),                        fhPtTrackInCone(0),
 fhPtTrackInConeOtherBC(0),        fhPtTrackInConeOtherBCPileUpSPD(0),
@@ -74,10 +87,13 @@ fhPtTrackInConeBC0(0),            fhPtTrackInConeVtxBC0(0),
 fhPtTrackInConeBC0PileUpSPD(0),
 fhPtInConePileUp(),               fhPtInConeCent(0),
 fhPerpConeSumPt(0),               fhPtInPerpCone(0),
-fhEtaPhiInConeCluster(0),fhEtaPhiCluster(0),fhEtaPhiInConeTrack(0),fhEtaPhiTrack(0),
+fhEtaPhiInConeCluster(0),         fhEtaPhiCluster(0),
+fhEtaPhiInConeTrack(0),           fhEtaPhiTrack(0),
 fhEtaBandCluster(0),              fhPhiBandCluster(0),
 fhEtaBandTrack(0),                fhPhiBandTrack(0),
 fhEtaBandCell(0),                 fhPhiBandCell(0),
+fhConePtLead(0),                  fhConePtLeadCluster(0),                   fhConePtLeadTrack(0),
+fhConePtLeadClustervsTrack(0),    fhConePtLeadClusterTrackFrac(0),
 fhConeSumPt(0),                   fhConeSumPtCellTrack(0),
 fhConeSumPtCell(0),               fhConeSumPtCluster(0),                    fhConeSumPtTrack(0),
 fhConeSumPtEtaBandUECluster(0),             fhConeSumPtPhiBandUECluster(0),
@@ -103,7 +119,7 @@ fhFractionClusterOutConeEta(0),             fhFractionClusterOutConeEtaTrigEtaPh
 fhFractionClusterOutConePhi(0),             fhFractionClusterOutConePhiTrigEtaPhi(0),
 fhFractionCellOutConeEta(0),                fhFractionCellOutConeEtaTrigEtaPhi(0),
 fhFractionCellOutConePhi(0),                fhFractionCellOutConePhiTrigEtaPhi(0),
-fhConeSumPtClustervsTrack(0),
+fhConeSumPtClustervsTrack(0),               fhConeSumPtClusterTrackFrac(0),
 fhConeSumPtEtaUESubClustervsTrack(0),       fhConeSumPtPhiUESubClustervsTrack(0),
 fhConeSumPtCellvsTrack(0),
 fhConeSumPtEtaUESubCellvsTrack(0),          fhConeSumPtPhiUESubCellvsTrack(0),
@@ -117,45 +133,10 @@ fhConeSumPtSubvsConeSumPtTotPhiCluster(0),  fhConeSumPtSubNormvsConeSumPtTotPhiC
 fhConeSumPtSubvsConeSumPtTotEtaCluster(0),  fhConeSumPtSubNormvsConeSumPtTotEtaCluster(0),
 fhConeSumPtSubvsConeSumPtTotPhiCell(0),     fhConeSumPtSubNormvsConeSumPtTotPhiCell(0),
 fhConeSumPtSubvsConeSumPtTotEtaCell(0),     fhConeSumPtSubNormvsConeSumPtTotEtaCell(0),
-// MC histograms
-fhPtIsoPrompt(0),                 fhPhiIsoPrompt(0),               fhEtaIsoPrompt(0), 
-fhPtThresIsolatedPrompt(),        fhPtFracIsolatedPrompt(),        fhPtSumIsolatedPrompt(),
-fhPtIsoFragmentation(0),          fhPhiIsoFragmentation(0),        fhEtaIsoFragmentation(0), 
-fhPtThresIsolatedFragmentation(), fhPtFracIsolatedFragmentation(), fhPtSumIsolatedFragmentation(),
-fhPtIsoPi0(0),                    fhPhiIsoPi0(0),                  fhEtaIsoPi0(0),
-fhPtThresIsolatedPi0(),           fhPtFracIsolatedPi0(),           fhPtSumIsolatedPi0(),
-fhPtIsoPi0Decay(0),               fhPhiIsoPi0Decay(0),             fhEtaIsoPi0Decay(0),
-fhPtThresIsolatedPi0Decay(),      fhPtFracIsolatedPi0Decay(),      fhPtSumIsolatedPi0Decay(),
-fhPtIsoEtaDecay(0),               fhPhiIsoEtaDecay(0),             fhEtaIsoEtaDecay(0),
-fhPtThresIsolatedEtaDecay(),      fhPtFracIsolatedEtaDecay(),      fhPtSumIsolatedEtaDecay(),
-fhPtIsoOtherDecay(0),             fhPhiIsoOtherDecay(0),           fhEtaIsoOtherDecay(0), 
-fhPtThresIsolatedOtherDecay(),    fhPtFracIsolatedOtherDecay(),    fhPtSumIsolatedOtherDecay(),
-//fhPtIsoConversion(0),             fhPhiIsoConversion(0),           fhEtaIsoConversion(0), 
-//fhPtThresIsolatedConversion(),    fhPtFracIsolatedConversion(),    fhPtSumIsolatedConversion(),
-fhPtIsoHadron(0),                 fhPhiIsoHadron(0),               fhEtaIsoHadron(0), 
-fhPtThresIsolatedHadron(),        fhPtFracIsolatedHadron(),        fhPtSumIsolatedHadron(),
-fhPtNoIsoPi0(0),                  fhPtNoIsoPi0Decay(0),             
-fhPtNoIsoEtaDecay(0),             fhPtNoIsoOtherDecay(0),
-fhPtNoIsoPrompt(0),               fhPtIsoMCPhoton(0),              fhPtNoIsoMCPhoton(0),
-//fhPtNoIsoConversion(0),           
-fhPtNoIsoFragmentation(0),        fhPtNoIsoHadron(0),
-// Hist several IC
-fhSumPtLeadingPt(),               fhPtLeadingPt(), 
-fhPerpSumPtLeadingPt(),           fhPerpPtLeadingPt(),
-fhPtThresIsolated(),              fhPtFracIsolated(),              fhPtSumIsolated(),
-fhEtaPhiPtThresIso(),             fhEtaPhiPtThresDecayIso(),       fhPtPtThresDecayIso(),
-fhEtaPhiPtFracIso(),              fhEtaPhiPtFracDecayIso(),        fhPtPtFracDecayIso(),
-fhPtPtSumDecayIso(),              fhEtaPhiSumDensityIso(),         fhEtaPhiSumDensityDecayIso(),
-fhPtSumDensityIso(),              fhPtSumDensityDecayIso(), 
-fhPtFracPtSumIso(),               fhPtFracPtSumDecayIso(),      
-fhEtaPhiFracPtSumIso(),           fhEtaPhiFracPtSumDecayIso(),
-// Cluster control histograms
-fhTrackMatchedDEta(),             fhTrackMatchedDPhi(),           fhTrackMatchedDEtaDPhi(),
-fhdEdx(),                         fhEOverP(),                     fhTrackMatchedMCParticle(),
-fhELambda0() ,                    fhELambda1(),                   fhELambda0SSBkg(),
-fhELambda0TRD(),                  fhELambda1TRD(),
-fhELambda0MCPhoton(),             fhELambda0MCPi0(),              fhELambda0MCPi0Decay(),
-fhELambda0MCEtaDecay(),           fhELambda0MCOtherDecay(),       fhELambda0MCHadron(),
+fhConeSumPtVSUETracksEtaBand(0),            fhConeSumPtVSUETracksPhiBand(0),
+fhConeSumPtVSUEClusterEtaBand(0),           fhConeSumPtVSUEClusterPhiBand(0),
+fhPtLeadConeBinLambda0(0),                  fhSumPtConeBinLambda0(0),
+fhPtLeadConeBinLambda0MC(0),                fhSumPtConeBinLambda0MC(0),
 // Number of local maxima in cluster
 fhNLocMax(),
 fhELambda0LocMax1(),              fhELambda1LocMax1(),
@@ -167,10 +148,7 @@ fhENoIsoPileUp(),                 fhPtNoIsoPileUp(),
 fhTimeENoCut(0),                  fhTimeESPD(0),                  fhTimeESPDMulti(0),
 fhTimeNPileUpVertSPD(0),          fhTimeNPileUpVertTrack(0),
 fhTimeNPileUpVertContributors(0),
-fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0),
-// Histograms settings
-fHistoNPtSumBins(0),              fHistoPtSumMax(0.),              fHistoPtSumMin(0.),
-fHistoNPtInConeBins(0),           fHistoPtInConeMax(0.),           fHistoPtInConeMin(0.)
+fhTimePileUpMainVertexZDistance(0), fhTimePileUpMainVertexZDiamond(0)
 {
   //default ctor
   
@@ -178,23 +156,17 @@ fHistoNPtInConeBins(0),           fHistoPtInConeMax(0.),           fHistoPtInCon
   InitParameters();
   
   for(Int_t i = 0; i < 5 ; i++)
-  { 
-    fConeSizes[i]      = 0 ; 
-    
-    fhPtSumIsolatedPrompt       [i] = 0 ;  
-    fhPtSumIsolatedFragmentation[i] = 0 ;  
-    fhPtSumIsolatedPi0Decay     [i] = 0 ;  
-    fhPtSumIsolatedPi0          [i] = 0 ;  
-    fhPtSumIsolatedEtaDecay     [i] = 0 ;  
-    fhPtSumIsolatedOtherDecay   [i] = 0 ;  
-//  fhPtSumIsolatedConversion   [i] = 0 ;  
-    fhPtSumIsolatedHadron       [i] = 0 ;  
+  {
+    fConeSizes[i]      = 0 ;
+    
+    for(Int_t imc = 0; imc < 9; imc++)
+      fhSumPtLeadingPtMC[imc][i] = 0 ;
     
     for(Int_t j = 0; j < 5 ; j++)
-    { 
+    {
       fhPtThresIsolated             [i][j] = 0 ;
       fhPtFracIsolated              [i][j] = 0 ;
-      fhPtSumIsolated               [i][j] = 0 ;
+      fhSumPtIsolated               [i][j] = 0 ;
       
       fhEtaPhiPtThresIso            [i][j] = 0 ;
       fhEtaPhiPtThresDecayIso       [i][j] = 0 ;
@@ -213,53 +185,75 @@ fHistoNPtInConeBins(0),           fHistoPtInConeMax(0.),           fHistoPtInCon
       fhEtaPhiFracPtSumIso          [i][j] = 0 ;
       fhEtaPhiFracPtSumDecayIso     [i][j] = 0 ;
       
-      fhPtThresIsolatedPrompt       [i][j] = 0 ;  
-      fhPtThresIsolatedFragmentation[i][j] = 0 ; 
-      fhPtThresIsolatedPi0Decay     [i][j] = 0 ; 
-      fhPtThresIsolatedPi0          [i][j] = 0 ; 
-      fhPtThresIsolatedEtaDecay     [i][j] = 0 ; 
-      fhPtThresIsolatedOtherDecay   [i][j] = 0 ;  
-//    fhPtThresIsolatedConversion   [i][j] = 0 ;  
-      fhPtThresIsolatedHadron      [ i][j] = 0 ;  
-      
-      fhPtFracIsolatedPrompt        [i][j] = 0 ;  
-      fhPtFracIsolatedFragmentation [i][j] = 0 ;  
-      fhPtFracIsolatedPi0           [i][j] = 0 ;  
-      fhPtFracIsolatedPi0Decay      [i][j] = 0 ;  
-      fhPtFracIsolatedEtaDecay      [i][j] = 0 ;  
-      fhPtFracIsolatedOtherDecay    [i][j] = 0 ;  
-//    fhPtFracIsolatedConversion    [i][j] = 0 ;
-      fhPtFracIsolatedHadron        [i][j] = 0 ;  
-      
-    }  
-  } 
+      for(Int_t imc = 0; imc < 9; imc++)
+      {
+        fhPtThresIsolatedMC[imc][i][j] = 0 ;
+        fhPtFracIsolatedMC [imc][i][j] = 0 ;
+        fhSumPtIsolatedMC  [imc][i][j] = 0 ;
+        
+      }
+    }
+  }
+  
+  for(Int_t ibit =0; ibit< 4; ibit++)
+  {
+    fhPtDecayIso       [ibit] = 0;
+    fhPtLambda0Decay[0][ibit] = 0;
+    fhPtLambda0Decay[1][ibit] = 0;
+    fhPtDecayNoIso     [ibit] = 0;
+    fhEtaPhiDecayIso   [ibit] = 0;
+    fhEtaPhiDecayNoIso [ibit] = 0;
+    for(Int_t imc = 0; imc < 9; imc++)
+    {
+      fhPtDecayIsoMC  [ibit][imc]    = 0;
+      fhPtDecayNoIsoMC[ibit][imc]    = 0;
+    }
+  }
   
   for(Int_t i = 0; i < 5 ; i++)
-  { 
-    fPtFractions    [i] = 0 ; 
+  {
+    fPtFractions    [i] = 0 ;
     fPtThresholds   [i] = 0 ;
     fSumPtThresholds[i] = 0 ;
-  } 
-
+    
+    fhSumPtLeadingPt    [i] = 0 ;
+    fhPtLeadingPt       [i] = 0 ;
+    fhPerpSumPtLeadingPt[i] = 0 ;
+    fhPerpPtLeadingPt   [i] = 0 ;
+  }
+  
+  for(Int_t imc = 0; imc < 9; imc++)
+  {
+    fhPtNoIsoMC  [imc]    = 0;
+    fhPtIsoMC    [imc]    = 0;
+    fhPhiIsoMC   [imc]    = 0;
+    fhEtaIsoMC   [imc]    = 0;
+    fhPtLambda0MC[imc][0] = 0;
+    fhPtLambda0MC[imc][1] = 0;
+  }
   
   for(Int_t i = 0; i < 2 ; i++)
-  { 
-    fhTrackMatchedDEta[i] = 0 ;             fhTrackMatchedDPhi[i] = 0 ;           fhTrackMatchedDEtaDPhi  [i] = 0 ;
-    fhdEdx            [i] = 0 ;             fhEOverP          [i] = 0 ;           fhTrackMatchedMCParticle[i] = 0 ;
-    fhELambda0        [i] = 0 ;             fhELambda1        [i] = 0 ; 
-    fhELambda0TRD     [i] = 0 ;             fhELambda1TRD     [i] = 0 ;
-    
-    fhELambda0MCPhoton  [i] = 0 ;           fhELambda0MCPi0       [i] = 0 ;       fhELambda0MCPi0Decay[i] = 0 ;
-    fhELambda0MCEtaDecay[i] = 0 ;           fhELambda0MCOtherDecay[i] = 0 ;       fhELambda0MCHadron  [i] = 0 ;
-
+  {
+    fhTrackMatchedDEta[i] = 0 ;             fhTrackMatchedDPhi[i] = 0 ;   fhTrackMatchedDEtaDPhi  [i] = 0 ;
+    fhdEdx            [i] = 0 ;             fhEOverP          [i] = 0 ;   fhTrackMatchedMCParticle[i] = 0 ;
+    fhELambda0        [i] = 0 ;             fhELambda1        [i] = 0 ;   fhPtLambda0       [i] = 0 ;
+    fhELambda0TRD     [i] = 0 ;             fhELambda1TRD     [i] = 0 ;   fhPtLambda0TRD    [i] = 0 ;
     
     // Number of local maxima in cluster
     fhNLocMax        [i] = 0 ;
     fhELambda0LocMax1[i] = 0 ;              fhELambda1LocMax1[i] = 0 ;
     fhELambda0LocMax2[i] = 0 ;              fhELambda1LocMax2[i] = 0 ;
     fhELambda0LocMaxN[i] = 0 ;              fhELambda1LocMaxN[i] = 0 ;
-    
-  } 
+  }
+  
+  // Acceptance
+  for(Int_t i = 0; i < 6; i++)
+  {
+    fhPtPrimMCiso[i] = 0;
+    fhEPrimMC    [i] = 0;
+    fhEtaPrimMC  [i] = 0;
+    fhPhiPrimMC  [i] = 0;
+  }
   
   // Pile-Up
   
@@ -271,7 +265,6 @@ fHistoNPtInConeBins(0),           fHistoPtInConeMax(0.),           fHistoPtInCon
     fhENoIsoPileUp  [i] = 0 ;
     fhPtNoIsoPileUp [i] = 0 ;
   }
-  
 }
 
 //_______________________________________________________________________________________________
@@ -285,7 +278,7 @@ void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation
   Float_t conesize   = GetIsolationCut()->GetConeSize();
   TLorentzVector mom ;
   
-  //Select the Calorimeter 
+  //Select the Calorimeter
   TObjArray * pl = 0x0;
   if      (fCalorimeter == "PHOS" )
     pl    = GetPHOSClusters();
@@ -312,14 +305,14 @@ void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation
       printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Cluster not available?");
       continue;
     }
-        
+    
     //Do not count the candidate (photon or pi0) or the daughters of the candidate
     if(cluster->GetID() == pCandidate->GetCaloLabel(0) ||
        cluster->GetID() == pCandidate->GetCaloLabel(1)   ) continue ;
     
     //Remove matched clusters to tracks if Neutral and Track info is used
     if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged &&
-        IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
+       IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ;
     
     cluster->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
     
@@ -330,8 +323,8 @@ void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation
     fhEtaPhiCluster->Fill(mom.Eta(), mom.Phi());
     if(rad < conesize) {
        // histos for all clusters in cone
-     fhEtaPhiInConeCluster->Fill(mom.Eta(), mom.Phi());
-    continue ;
+      fhEtaPhiInConeCluster->Fill(mom.Eta(), mom.Phi());
+      continue ;
     }
     //fill histogram for UE in phi band in EMCal acceptance
     if(mom.Eta() > (etaTrig-conesize) && mom.Eta()  < (etaTrig+conesize))
@@ -339,7 +332,7 @@ void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation
       phiBandPtSum+=mom.Pt();
       fhPhiBandCluster->Fill(mom.Eta(),mom.Phi());
       
-}
+    }
     
     //fill histogram for UE in eta band in EMCal acceptance
     if(mom.Phi() > (phiTrig-conesize) && mom.Phi() < (phiTrig+conesize))
@@ -353,7 +346,7 @@ void AliAnaParticleIsolation::CalculateCaloUEBand(AliAODPWG4ParticleCorrelation
   fhConeSumPtPhiBandUECluster          ->Fill(ptTrig  ,       phiBandPtSum);
   fhConeSumPtEtaBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
   fhConeSumPtPhiBandUEClusterTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
-
+  
 }
 
 //________________________________________________________________________________________________
@@ -384,7 +377,7 @@ void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelat
       Int_t nModule = -1;
       Int_t imEta=-1, imPhi=-1;
       Int_t ieta =-1, iphi =-1;
-
+      
       if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
       {
         eGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule,imPhi,imEta,iphi,ieta);
@@ -399,22 +392,22 @@ void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelat
         
         Int_t nTotalRows = AliEMCALGeoParams::fgkEMCALRows*16/3 ; // 24*(16/3) 5 full-size Sectors (2 SM) + 1 one-third Sector (2 SM)
         Int_t nTotalCols = 2*AliEMCALGeoParams::fgkEMCALCols;
-       //  printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
+        //  printf("nTotalRows %i, nTotalCols %i\n",nTotalRows,nTotalCols);
         // Loop on cells in eta band
-         
+        
                  Int_t irowmin = rowTrig-sqrSize;
-         if(irowmin<0) irowmin=0;
-  Int_t irowmax = rowTrig+sqrSize;
-         if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
-
-
+        if(irowmin<0) irowmin=0;
+        Int_t irowmax = rowTrig+sqrSize;
+        if(irowmax>AliEMCALGeoParams::fgkEMCALRows) irowmax=AliEMCALGeoParams::fgkEMCALRows;
+        
+        
         for(Int_t irow = irowmin; irow <irowmax; irow++)
         {
           for(Int_t icol = 0; icol < nTotalCols; icol++)
           {
             Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
-       if(inSector==5) continue;
-          Int_t inSupMod = -1;
+            if(inSector==5) continue;
+            Int_t inSupMod = -1;
             Int_t icolLoc  = -1;
             if(icol < AliEMCALGeoParams::fgkEMCALCols)
             {
@@ -428,63 +421,63 @@ void AliAnaParticleIsolation::CalculateCaloCellUEBand(AliAODPWG4ParticleCorrelat
             }
             
             Int_t irowLoc  = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;
-
+            
             // Exclude cells in cone
             if(TMath::Abs(icol-colTrig) < sqrSize || TMath::Abs(irow-rowTrig) < sqrSize){
-                continue ;
+              continue ;
             }
             Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
             if(!eGeom->CheckAbsCellId(iabsId)) continue;
             etaBandPtSumCells += cells->GetCellAmplitude(iabsId);
-               fhEtaBandCell->Fill(colTrig,rowTrig);
-               
-    //          printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
-  }
+            fhEtaBandCell->Fill(colTrig,rowTrig);
+            
+            //          printf("ETA inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, etaBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,etaBandPtSumCells);
+          }
         }
-    Int_t icolmin = colTrig-sqrSize;
-         if(icolmin<0) icolmin=0;
-         Int_t icolmax = colTrig+sqrSize;
-         if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
+        Int_t icolmin = colTrig-sqrSize;
+        if(icolmin<0) icolmin=0;
+        Int_t icolmax = colTrig+sqrSize;
+        if(icolmax>AliEMCALGeoParams::fgkEMCALCols) icolmax=AliEMCALGeoParams::fgkEMCALCols;
              
         // Loop on cells in phi band
         for(Int_t icol = icolmin; icol < icolmax; icol++)
         {
           for(Int_t irow = 0; irow < nTotalRows; irow++)
-          {       
+          {
             Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
-               if(inSector==5) continue;
+            if(inSector==5) continue;
             Int_t inSupMod = -1;
             Int_t icolLoc  = -1;
-       //    printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
+            //    printf("icol %i, irow %i, inSector %i\n",icol,irow ,inSector);
             if(icol < AliEMCALGeoParams::fgkEMCALCols)
             {
-       //      printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
+              //       printf("icol < AliEMCALGeoParams::fgkEMCALCols %i\n",AliEMCALGeoParams::fgkEMCALCols );
               inSupMod = 2*inSector + 1;
               icolLoc  = icol;
             }
             else if(icol > AliEMCALGeoParams::fgkEMCALCols - 1)
             {
-     //      printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
-             inSupMod = 2*inSector;
+              //      printf("icol > AliEMCALGeoParams::fgkEMCALCols -1 %i\n",AliEMCALGeoParams::fgkEMCALCols -1 );
+              inSupMod = 2*inSector;
               icolLoc  = icol-AliEMCALGeoParams::fgkEMCALCols;
             }
             
             Int_t irowLoc  = irow - AliEMCALGeoParams::fgkEMCALRows*inSector ;   // Stesso problema di sopra //
-
+            
             // Exclude cells in cone
             if(TMath::Abs(icol-colTrig) < sqrSize) {
-               //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
-               }      
+              //printf("TMath::Abs(icol-colTrig) %i < sqrSize %i\n",TMath::Abs(icol-colTrig) ,sqrSize);continue ;
+            }
             if(TMath::Abs(irow-rowTrig) < sqrSize) {
-               //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
-               }      
+              //printf("TMath::Abs(irow-rowTrig) %i < sqrSize %i\n",TMath::Abs(irow-rowTrig) ,sqrSize);continue ;
+            }
             
             Int_t iabsId = eGeom->GetAbsCellIdFromCellIndexes(inSupMod,irowLoc,icolLoc);
             if(!eGeom->CheckAbsCellId(iabsId)) {printf("!eGeom->CheckAbsCellId(iabsId=%i) inSupMod %i irowLoc %i icolLoc %i \n",iabsId,inSupMod, irowLoc, icolLoc);continue;}
             phiBandPtSumCells += cells->GetCellAmplitude(iabsId);
-               fhPhiBandCell->Fill(colTrig,rowTrig);
-        //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
-           }
+            fhPhiBandCell->Fill(colTrig,rowTrig);
+            //printf("inSupMod %i,irowLoc %i,icolLoc %i, iabsId %i, phiBandPtSumCells %f\n",nSupMod,irowLoc,icolLoc,iabsId,phiBandPtSumCells);
+          }
         }
       }
     }
@@ -521,22 +514,22 @@ void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation
     
     if(!track)
     {
-      printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Track not available?");
+      printf("AliAnaParticleIsolation::CalculateTrackUEBand() - Track not available?");
       continue;
     }
     
     //Do not count the candidate (pion, conversion photon) or the daughters of the candidate
     if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1) ||
        track->GetID() == pCandidate->GetTrackLabel(2) || track->GetID() == pCandidate->GetTrackLabel(3)   ) continue ;
-   
-   // histo of eta:phi for all tracks 
+    
+    // histo of eta:phi for all tracks
     fhEtaPhiTrack->Fill(track->Eta(),track->Phi());
-   
+    
     //exclude particles in cone
     Float_t rad = GetIsolationCut()->Radius(etaTrig, phiTrig, track->Eta(), track->Phi());
     if(rad < conesize) {
        // histo of eta:phi for all tracks in cone
-       fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
+      fhEtaPhiInConeTrack->Fill(track->Eta(),track->Phi());
       continue ;
     }
     
@@ -548,7 +541,7 @@ void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation
     }
     
     //fill histogram for UE in eta band in EMCal acceptance
-    if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize)) 
+    if(track->Phi() > (phiTrig-conesize) && track->Phi() < (phiTrig+conesize))
     {
       etaBandPtSum+=track->Pt();
       fhEtaBandTrack->Fill(track->Eta(),track->Phi());
@@ -578,128 +571,18 @@ void AliAnaParticleIsolation::CalculateTrackUEBand(AliAODPWG4ParticleCorrelation
   fhConeSumPtPhiBandUETrack          ->Fill(ptTrig ,        phiBandPtSum);
   fhConeSumPtEtaBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,etaBandPtSum);
   fhConeSumPtPhiBandUETrackTrigEtaPhi->Fill(etaTrig,phiTrig,phiBandPtSum);
-
+  
 }
 
 
-//________________________________________________________________________________________________________
-Float_t AliAnaParticleIsolation::CalculateExcessAreaFraction(const Float_t excess, const Float_t conesize)
-{
-  // Area of a circunference segment segment 1/2 R^2 (angle-sin(angle)), angle = 2*ACos((R-excess)/R)
-  
-  
-  Float_t angle   = 2*TMath::ACos( (conesize-excess) / conesize );
-  
-  Float_t coneA   = conesize*conesize*TMath::Pi(); // A = pi R^2, isolation cone area
-  
-  Float_t excessA = conesize*conesize / 2 * (angle-TMath::Sin(angle));
-  
-  if(coneA > excessA) return coneA / (coneA-excessA);
-  else
-  {
-    printf("AliAnaParticleIsolation::CalculateExcessAreaFraction() - Please Check : Excess Track %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",
-           excess,coneA, excessA, angle*TMath::RadToDeg(), coneA / (coneA-excessA));
-    return  1;
-  }
-}
-//__________________________________________________________________________________
-void AliAnaParticleIsolation::GetCoeffNormBadCell(const AliAODPWG4ParticleCorrelation * pCandidate, 
-                                        const AliCaloTrackReader * reader,  Float_t &  coneBadCellsCoeff, Float_t &  etaBandBadCellsCoeff, Float_t & phiBandBadCellsCoeff, const Float_t conesize) 
-{
-  // Get good cell density (number of active cells over all cells in cone)
-  
-   Double_t coneCells    = 0.; //number of cells in cone with radius fConeSize
-  Double_t  phiBandCells    = 0.; //number of cells in band phi
-  Double_t etaBandCells    = 0.; //number of cells in band eta
- Float_t phiC  = pCandidate->Phi() ;
-  if(phiC<0) phiC+=TMath::TwoPi();
-  Float_t etaC  = pCandidate->Eta() ;
-  
-  if(pCandidate->GetDetector()=="EMCAL")
-  {
-    AliEMCALGeometry* eGeom = AliEMCALGeometry::GetInstance();
-    AliCalorimeterUtils *cu = reader->GetCaloUtils();
-    
-    Int_t absId = -999;
-    if (eGeom->GetAbsCellIdFromEtaPhi(etaC,phiC,absId))
-    {
-      //Get absolute (col,row) of candidate
-      Int_t iEta=-1, iPhi=-1, iRCU = -1;      
-      Int_t nSupMod = cu->GetModuleNumberCellIndexes(absId, pCandidate->GetDetector(), iEta, iPhi, iRCU);
-      
-      Int_t colC = iEta;
-      if (nSupMod % 2) colC =  AliEMCALGeoParams::fgkEMCALCols + iEta ;
-      Int_t rowC = iPhi + AliEMCALGeoParams::fgkEMCALRows*int(nSupMod/2);
-      
-      Int_t sqrSize = int(conesize/0.0143) ; // Size of cell in radians
-      for(Int_t icol = 0; icol < 2*AliEMCALGeoParams::fgkEMCALCols-1;icol++)
-      {
-        for(Int_t irow = 0; irow < 5*AliEMCALGeoParams::fgkEMCALRows -1; irow++)
-        {
-           //loop on cells in a square of side fConeSize to check cells in cone    
-         if ( GetIsolationCut()->Radius(colC, rowC, icol, irow) < sqrSize) { coneCells += 1.;}
-         else if(icol>colC-sqrSize && icol<colC+sqrSize ){  phiBandCells +=1;}
-          else if(irow>rowC-sqrSize && irow<rowC+sqrSize ){  etaBandCells +=1;}
-               
-            Int_t cellSM  = -999;
-            Int_t cellEta = -999;
-            Int_t cellPhi = -999;
-            if(icol > AliEMCALGeoParams::fgkEMCALCols-1) 
-            {
-              cellSM = 0+int(irow/AliEMCALGeoParams::fgkEMCALRows)*2;
-              cellEta = icol-AliEMCALGeoParams::fgkEMCALCols;
-              cellPhi = irow-AliEMCALGeoParams::fgkEMCALRows*int(cellSM/2);
-            }
-            if(icol < AliEMCALGeoParams::fgkEMCALCols) 
-            {
-              cellSM = 1+int(irow/AliEMCALGeoParams::fgkEMCALRows)*2;
-              cellEta = icol;
-              cellPhi = irow-AliEMCALGeoParams::fgkEMCALRows*int(cellSM/2);
-            }
-            
-            if( (icol < 0 || icol > AliEMCALGeoParams::fgkEMCALCols*2-1 || 
-               irow < 0 || irow > AliEMCALGeoParams::fgkEMCALRows*5 - 1) //5*nRows+1/3*nRows //Count as bad "cells" out of EMCAL acceptance
-                  || (cu->GetEMCALChannelStatus(cellSM,cellEta,cellPhi)==1))  //Count as bad "cells" marked as bad in the DataBase
-            {
-                   if (GetIsolationCut()->Radius(colC, rowC, icol, irow) < sqrSize) coneBadCellsCoeff += 1.;
-                   else if(icol>colC-sqrSize && icol<colC+sqrSize ) phiBandBadCellsCoeff +=1;
-                 else if(irow>rowC-sqrSize && irow<rowC+sqrSize ) etaBandBadCellsCoeff +=1;
-             }          
-        }
-      }//end of cells loop
-    }
-    
-    else if(GetDebug()>0) printf("cluster with bad (eta,phi) in EMCal for energy density coeff calculation\n");
-    
-    if (coneCells > 0.) 
-    {
-   //   printf("Energy density coneBadCellsCoeff= %.2f coneCells%.2f\n", coneBadCellsCoeff,coneCells);
-      coneBadCellsCoeff = (coneCells-coneBadCellsCoeff)/coneCells;
-    //  printf("coneBadCellsCoeff= %.2f\n", coneBadCellsCoeff);
-    }
-    if (phiBandCells > 0.) 
-    {
-     printf("Energy density phiBandBadCellsCoeff = %.2f phiBandCells%.2f\n", phiBandBadCellsCoeff,phiBandCells);
-      phiBandBadCellsCoeff = (phiBandCells-phiBandBadCellsCoeff)/phiBandCells;
-     printf("phiBandBadCellsCoeff = %.2f\n", phiBandBadCellsCoeff);
-     } 
-      if (etaBandCells > 0.) 
-    {
-      printf("Energy density etaBandBadCellsCoeff = %.2f etaBandCells%.2f\n", etaBandBadCellsCoeff,etaBandCells);
-      etaBandBadCellsCoeff = (etaBandCells-etaBandBadCellsCoeff)/etaBandCells;
-      printf("etaBandBadCellsCoeff = %.2f\n",etaBandBadCellsCoeff);
-   } 
-   
-     }
-  
-}
 
-//___________________________________________________________________________________________________________________________________
-void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate,
-                                                                   Float_t coneptsumCluster,  Float_t coneptsumCell, Float_t coneptsumTrack)
+//_____________________________________________________________________________________________________________________________________
+void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4ParticleCorrelation * pCandidate, Float_t coneptsumCluster,
+                                                                  Float_t coneptsumCell,          Float_t coneptsumTrack,
+                                                                  Float_t &etaBandptsumTrackNorm, Float_t &etaBandptsumClusterNorm)
 {
   //normalize phi/eta band per area unit
-
+  
   Float_t etaUEptsumTrack   = 0 ;
   Float_t phiUEptsumTrack   = 0 ;
   Float_t etaUEptsumCluster = 0 ;
@@ -707,15 +590,8 @@ void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4Part
   Float_t etaUEptsumCell    = 0 ;
   Float_t phiUEptsumCell    = 0 ;
   
-  
   Int_t   partTypeInCone    = GetIsolationCut()->GetParticleTypeInCone();
   
-  // Sum the pT in the phi or eta band for clusters or tracks
-  
-  CalculateTrackUEBand   (pCandidate,etaUEptsumTrack  ,phiUEptsumTrack  );// rajouter ici l'histo eta phi 
-  CalculateCaloUEBand    (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
-  CalculateCaloCellUEBand(pCandidate,etaUEptsumCell   ,phiUEptsumCell   );
-
   // Do the normalization
   
   Float_t conesize  = GetIsolationCut()->GetConeSize();
@@ -723,12 +599,8 @@ void AliAnaParticleIsolation::CalculateNormalizeUEBandPerUnitArea(AliAODPWG4Part
   Float_t ptTrig    = pCandidate->Pt() ;
   Float_t phiTrig   = pCandidate->Phi();
   Float_t etaTrig   = pCandidate->Eta();
-
-Float_t coneBadCellsCoeff=1;
-Float_t etaBandBadCellsCoeff=1;
-Float_t phiBandBadCellsCoeff=1;
-GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff,conesize) ;
-
+  
+  
   // ------ //
   // Tracks //
   // ------ //
@@ -738,39 +610,30 @@ GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsC
   Float_t coneptsumTrackSubEta = 0 ;
   Float_t coneptsumTrackSubPhiNorm = 0 ;
   Float_t coneptsumTrackSubEtaNorm = 0 ;
-
+  etaBandptsumTrackNorm = 0 ;
+  
   if( partTypeInCone!=AliIsolationCut::kOnlyNeutral )
   {
-    // Get the cut used for the TPC tracks in the reader, +-0.8, +-0.9 ...
-    // Only valid in simple fidutial cut case and if the cut is applied, careful!
-    Float_t tpcEtaSize = GetReader()->GetFiducialCut()->GetCTSFidCutMaxEtaArray()->At(0) -
-    GetReader()->GetFiducialCut()->GetCTSFidCutMinEtaArray()->At(0) ;
-    Float_t tpcPhiSize = TMath::TwoPi();
+    // Sum the pT in the phi or eta band for clusters or tracks
+    CalculateTrackUEBand   (pCandidate,etaUEptsumTrack  ,phiUEptsumTrack  );// rajouter ici l'histo eta phi
     
+    //Fill histos
+    fhConeSumPtVSUETracksEtaBand->Fill(coneptsumTrack,etaUEptsumTrack);
+    fhConeSumPtVSUETracksPhiBand->Fill(coneptsumTrack,phiUEptsumTrack);
     
-    //printf("tracks eta fiducial acceptance %f\n",tpcEtaSize);
     
-/*    phiUEptsumTrackNorm = phiUEptsumTrack*(coneA*coneBadCellsCoeff / (((2*conesize*tpcPhiSize)-coneA))*phiBandBadCellsCoeff); // pi * R^2 / (2 R * 2 pi) -  trigger cone
-    etaUEptsumTrackNorm = etaUEptsumTrack*(coneA*coneBadCellsCoeff / (((2*conesize*tpcEtaSize)-coneA))*etaBandBadCellsCoeff); // pi * R^2 / (2 R * 1.6)  -  trigger cone
-  */  
-    if((2*conesize*tpcPhiSize-coneA)!=0)phiUEptsumTrackNorm = phiUEptsumTrack*(coneA / (((2*conesize*tpcPhiSize)-coneA))); // pi * R^2 / (2 R * 2 pi) -  trigger cone
-    if((2*conesize*tpcEtaSize-coneA)!=0)etaUEptsumTrackNorm = etaUEptsumTrack*(coneA / (((2*conesize*tpcEtaSize)-coneA))); // pi * R^2 / (2 R * 1.6)  -  trigger cone
-   
-    // Need to correct coneptsumTrack by the fraction of the cone out of track cut acceptance!
-    Float_t correctConeSumTrack = 1;
-    if(TMath::Abs(etaTrig)+conesize > tpcEtaSize/2.)
-    {
-      Float_t excess = TMath::Abs(etaTrig) + conesize - tpcEtaSize/2.;
-      correctConeSumTrack = CalculateExcessAreaFraction(excess,conesize);
-      //printf("Excess Track   %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumTrack);
-      
-      // Need to correct phi band surface if part of the cone falls out of track cut acceptance! Not sure this will happen.
-      if((2*(conesize-excess)*tpcPhiSize)-(coneA-correctConeSumTrack)!=0)phiUEptsumTrackNorm = phiUEptsumTrack*(coneA / (((2*(conesize-excess)*tpcPhiSize)-(coneA/correctConeSumTrack))));
-  //    phiUEptsumTrackNorm = phiUEptsumTrack*(coneA *coneBadCellsCoeff/ (((2*(conesize-excess)*tpcPhiSize)-(coneA-correctConeSumTrack))*phiBandBadCellsCoeff));
-   }
+    Float_t correctConeSumTrack    = 1;
+    Float_t correctConeSumTrackPhi = 1;
+    
+    GetIsolationCut()->CalculateUEBandTrackNormalization(GetReader(),etaTrig, phiTrig,
+                                                         phiUEptsumTrack,etaUEptsumTrack,
+                                                         phiUEptsumTrackNorm,etaUEptsumTrackNorm,
+                                                         correctConeSumTrack,correctConeSumTrackPhi);
     
-    coneptsumTrackSubPhi = coneptsumTrack*correctConeSumTrack - phiUEptsumTrackNorm;
-    coneptsumTrackSubEta = coneptsumTrack*correctConeSumTrack - etaUEptsumTrackNorm;
+    coneptsumTrackSubPhi = coneptsumTrack - phiUEptsumTrackNorm;
+    coneptsumTrackSubEta = coneptsumTrack - etaUEptsumTrackNorm;
+    
+    etaBandptsumTrackNorm = etaUEptsumTrackNorm;
     
     fhConeSumPtPhiUESubTrack           ->Fill(ptTrig ,          coneptsumTrackSubPhi);
     fhConeSumPtPhiUESubTrackTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumTrackSubPhi);
@@ -780,10 +643,12 @@ GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsC
     fhFractionTrackOutConeEta          ->Fill(ptTrig ,         correctConeSumTrack-1);
     fhFractionTrackOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig,correctConeSumTrack-1);
     
-    if(coneptsumTrack!=0){
-       coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
+    if(coneptsumTrack > 0)
+    {
+      coneptsumTrackSubPhiNorm = coneptsumTrackSubPhi/coneptsumTrack;
        coneptsumTrackSubEtaNorm = coneptsumTrackSubEta/coneptsumTrack;
     }
+    
     fhConeSumPtSubvsConeSumPtTotPhiTrack    ->Fill(coneptsumTrack,coneptsumTrackSubPhi);
     fhConeSumPtSubNormvsConeSumPtTotPhiTrack->Fill(coneptsumTrack,coneptsumTrackSubPhiNorm);
     fhConeSumPtSubvsConeSumPtTotEtaTrack    ->Fill(coneptsumTrack,coneptsumTrackSubEta);
@@ -806,55 +671,45 @@ GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsC
   Float_t coneptsumCellSubEta    = 0 ;
   Float_t coneptsumCellSubPhiNorm = 0 ;
   Float_t coneptsumCellSubEtaNorm = 0 ;
-
+  etaBandptsumClusterNorm = 0;
+  
   if( partTypeInCone!=AliIsolationCut::kOnlyCharged )
   {
-    //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
-    Float_t emcEtaSize = 0.7*2;
-    Float_t emcPhiSize = TMath::DegToRad()*100;
-
+    
     // -------------- //
     // EMCal clusters //
     // -------------- //
-        
-   if(((((2*conesize*emcPhiSize)-coneA))*phiBandBadCellsCoeff)!=0)phiUEptsumClusterNorm = phiUEptsumCluster*(coneA*coneBadCellsCoeff / (((2*conesize*emcPhiSize)-coneA))*phiBandBadCellsCoeff); // pi * R^2 / (2 R * 2 100 deg) -  trigger cone
-   if(((((2*conesize*emcEtaSize)-coneA))*etaBandBadCellsCoeff)!=0) etaUEptsumClusterNorm = etaUEptsumCluster*(coneA*coneBadCellsCoeff / (((2*conesize*emcEtaSize)-coneA))*etaBandBadCellsCoeff); // pi * R^2 / (2 R * 2*1.7)  -  trigger cone
-  
-    // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!    
-    Float_t correctConeSumClusterEta = 1;
-    if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
-    {
-      Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
-      correctConeSumClusterEta = CalculateExcessAreaFraction(excess,conesize);
-      //printf("Excess EMC-Eta %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterEta);
-      
-      // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
-     if(((((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumClusterEta))*etaBandBadCellsCoeff))!=0)phiUEptsumClusterNorm = phiUEptsumCluster*(coneA *coneBadCellsCoeff/ (((2*(conesize-excess)*emcPhiSize)-(coneA/correctConeSumClusterEta))*etaBandBadCellsCoeff));
-     }
     
+    // Sum the pT in the phi or eta band for clusters or tracks
+    CalculateCaloUEBand    (pCandidate,etaUEptsumCluster,phiUEptsumCluster);// rajouter ici l'histo eta phi
+    
+    //Fill histos
+    fhConeSumPtVSUEClusterEtaBand->Fill(coneptsumCluster,etaUEptsumCluster);
+    fhConeSumPtVSUEClusterPhiBand->Fill(coneptsumCluster,phiUEptsumCluster);
+    
+    
+    Float_t correctConeSumClusterEta = 1;
     Float_t correctConeSumClusterPhi = 1;
-    //printf("EMCPhiTrig %2.2f, conesize %2.2f, sum %2.2f, rest %2.2f \n",phiTrig*TMath::RadToDeg(),conesize*TMath::RadToDeg(),(phiTrig+conesize)*TMath::RadToDeg(),(phiTrig-conesize)*TMath::RadToDeg() );
-    if((phiTrig+conesize > 180*TMath::DegToRad()) ||
-       (phiTrig-conesize <  80*TMath::DegToRad()))
-    {
-      Float_t excess = 0;
-      if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
-      else                                           excess = conesize - phiTrig +  80*TMath::DegToRad() ;
-      
-      correctConeSumClusterPhi = CalculateExcessAreaFraction(excess,conesize);
-      //printf("Excess EMC-Phi %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterPhi);
-      
-      // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
-     if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumClusterPhi))*phiBandBadCellsCoeff!=0) etaUEptsumClusterNorm = etaUEptsumCluster*(coneA*coneBadCellsCoeff / (((2*(conesize-excess)*emcEtaSize)-(coneA/correctConeSumClusterPhi))*phiBandBadCellsCoeff));
-    }
+    
+    GetIsolationCut()->CalculateUEBandClusterNormalization(GetReader(),etaTrig, phiTrig,
+                                                           phiUEptsumCluster,etaUEptsumCluster,
+                                                           phiUEptsumClusterNorm,etaUEptsumClusterNorm,
+                                                           correctConeSumClusterEta,correctConeSumClusterPhi);
     
     // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
-    coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
-    coneptsumClusterSubPhi =  coneptsumCluster - phiUEptsumClusterNorm;
+    // Comment if not used
+    //  Float_t coneBadCellsCoeff   =1;
+    //  Float_t etaBandBadCellsCoeff=1;
+    //  Float_t phiBandBadCellsCoeff=1;
+    //  GetIsolationCut()->GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsCoeff,phiBandBadCellsCoeff) ;
+    
+    //coneptsumCluster=coneptsumCluster*coneBadCellsCoeff*correctConeSumClusterEta*correctConeSumClusterPhi;
+    
+    coneptsumClusterSubPhi = coneptsumCluster - phiUEptsumClusterNorm;
     coneptsumClusterSubEta = coneptsumCluster - etaUEptsumClusterNorm;
     
-
+    etaBandptsumClusterNorm = etaUEptsumClusterNorm;
+    
     fhConeSumPtPhiUESubCluster           ->Fill(ptTrig ,          coneptsumClusterSubPhi);
     fhConeSumPtPhiUESubClusterTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumClusterSubPhi);
     fhConeSumPtEtaUESubCluster           ->Fill(ptTrig ,          coneptsumClusterSubEta);
@@ -865,10 +720,12 @@ GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsC
     fhFractionClusterOutConePhi          ->Fill(ptTrig ,          correctConeSumClusterPhi-1);
     fhFractionClusterOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumClusterPhi-1);
     
-    if(coneptsumCluster!=0){
+    if(coneptsumCluster!=0)
+    {
            coneptsumClusterSubPhiNorm = coneptsumClusterSubPhi/coneptsumCluster;
        coneptsumClusterSubEtaNorm = coneptsumClusterSubEta/coneptsumCluster;
     }
+    
     fhConeSumPtSubvsConeSumPtTotPhiCluster    ->Fill(coneptsumCluster,coneptsumClusterSubPhi);
     fhConeSumPtSubNormvsConeSumPtTotPhiCluster->Fill(coneptsumCluster,coneptsumClusterSubPhiNorm);
     fhConeSumPtSubvsConeSumPtTotEtaCluster    ->Fill(coneptsumCluster,coneptsumClusterSubEta);
@@ -877,66 +734,78 @@ GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsC
     // ----------- //
     // EMCal Cells //
     // ----------- //
-        
-    if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
-    if((((2*conesize*emcEtaSize)-coneA))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
-    
-    // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
-    
-    Float_t correctConeSumCellEta = 1;
-    if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
-    {
-      Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
-      correctConeSumCellEta = CalculateExcessAreaFraction(excess,conesize);
-      //printf("Excess EMC-Eta %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterEta);
-      // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
-      if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
-    }
     
-    Float_t correctConeSumCellPhi = 1;
-    //printf("EMCPhiTrig %2.2f, conesize %2.2f, sum %2.2f, rest %2.2f \n",phiTrig*TMath::RadToDeg(),conesize*TMath::RadToDeg(),(phiTrig+conesize)*TMath::RadToDeg(),(phiTrig-conesize)*TMath::RadToDeg() );
-    if((phiTrig+conesize > 180*TMath::DegToRad()) ||
-       (phiTrig-conesize <  80*TMath::DegToRad()))
+    if(fFillCellHistograms)
     {
-      Float_t excess = 0;
-      if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
-      else                                           excess = conesize - phiTrig +  80*TMath::DegToRad() ;
+      // Sum the pT in the phi or eta band for clusters or tracks
+      CalculateCaloCellUEBand(pCandidate,etaUEptsumCell   ,phiUEptsumCell   );
       
-      correctConeSumCellPhi = CalculateExcessAreaFraction(excess,conesize);
-      //printf("Excess EMC-Phi %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterPhi);
+      // Move to AliIsolationCut the calculation not the histograms??
       
-      // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
-      if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
-
+      //Careful here if EMCal limits changed .. 2010 (4 SM) to 2011-12 (10 SM), for the moment consider 100 deg in phi
+      Float_t emcEtaSize = 0.7*2; // TO FIX
+      Float_t emcPhiSize = TMath::DegToRad()*100.; // TO FIX
+      
+      if(((2*conesize*emcPhiSize)-coneA)!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*conesize*emcPhiSize)-coneA));
+      if(((2*conesize*emcEtaSize)-coneA)!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*conesize*emcEtaSize)-coneA));
+      
+      // Need to correct coneptsumCluster by the fraction of the cone out of the calorimeter cut acceptance!
+      
+      Float_t correctConeSumCellEta = 1;
+      if(TMath::Abs(etaTrig)+conesize > emcEtaSize/2.)
+      {
+        Float_t excess = TMath::Abs(etaTrig) + conesize - emcEtaSize/2.;
+        correctConeSumCellEta = GetIsolationCut()->CalculateExcessAreaFraction(excess);
+        //printf("Excess EMC-Eta %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterEta);
+        // Need to correct phi band surface if part of the cone falls out of track cut acceptance!
+        if(((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta))!=0)phiUEptsumCellNorm = phiUEptsumCell*(coneA / ((2*(conesize-excess)*emcPhiSize)-(coneA-correctConeSumCellEta)));
+      }
+      
+      Float_t correctConeSumCellPhi = 1;
+      //printf("EMCPhiTrig %2.2f, conesize %2.2f, sum %2.2f, rest %2.2f \n",phiTrig*TMath::RadToDeg(),conesize*TMath::RadToDeg(),(phiTrig+conesize)*TMath::RadToDeg(),(phiTrig-conesize)*TMath::RadToDeg() );
+      if((phiTrig+conesize > 180*TMath::DegToRad()) ||
+         (phiTrig-conesize <  80*TMath::DegToRad()))
+      {
+        Float_t excess = 0;
+        if( phiTrig+conesize > 180*TMath::DegToRad() ) excess = conesize + phiTrig - 180*TMath::DegToRad() ;
+        else                                           excess = conesize - phiTrig +  80*TMath::DegToRad() ;
+        
+        correctConeSumCellPhi = GetIsolationCut()->CalculateExcessAreaFraction(excess);
+        //printf("Excess EMC-Phi %2.3f, coneA %2.2f,  excessA %2.2f, angle %2.2f,factor %2.2f\n",excess,coneA, excessA, angle*TMath::RadToDeg(), correctConeSumClusterPhi);
+        
+        // Need to correct eta band surface if part of the cone falls out of track cut acceptance!
+        if(((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi))!=0)etaUEptsumCellNorm = etaUEptsumCell*(coneA / ((2*(conesize-excess)*emcEtaSize)-(coneA-correctConeSumCellPhi)));
+        
+      }
+      
+      // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
+      coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
+      coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
+      
+      fhConeSumPtPhiUESubCell           ->Fill(ptTrig ,          coneptsumCellSubPhi);
+      fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
+      fhConeSumPtEtaUESubCell           ->Fill(ptTrig ,          coneptsumCellSubEta);
+      fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
+      
+      fhFractionCellOutConeEta          ->Fill(ptTrig ,          correctConeSumCellEta-1);
+      fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
+      fhFractionCellOutConePhi          ->Fill(ptTrig ,          correctConeSumCellPhi-1);
+      fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
+      if(coneptsumCell!=0)
+      {
+        coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
+        coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
+      }
+      
+      fhConeSumPtSubvsConeSumPtTotPhiCell    ->Fill(coneptsumCell,coneptsumCellSubPhi);
+      fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
+      fhConeSumPtSubvsConeSumPtTotEtaCell    ->Fill(coneptsumCell,coneptsumCellSubEta);
+      fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
     }
-    
-    // In case that cone is out of eta and phi side, we are over correcting, not too often with the current cuts ...
-    coneptsumCellSubPhi = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - phiUEptsumCellNorm;
-    coneptsumCellSubEta = coneptsumCell*correctConeSumCellEta*correctConeSumCellPhi - etaUEptsumCellNorm;
-    
-    fhConeSumPtPhiUESubCell           ->Fill(ptTrig ,          coneptsumCellSubPhi);
-    fhConeSumPtPhiUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubPhi);
-    fhConeSumPtEtaUESubCell           ->Fill(ptTrig ,          coneptsumCellSubEta);
-    fhConeSumPtEtaUESubCellTrigEtaPhi ->Fill(etaTrig, phiTrig, coneptsumCellSubEta);
-    
-    fhFractionCellOutConeEta          ->Fill(ptTrig ,          correctConeSumCellEta-1);
-    fhFractionCellOutConeEtaTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellEta-1);
-    fhFractionCellOutConePhi          ->Fill(ptTrig ,          correctConeSumCellPhi-1);
-    fhFractionCellOutConePhiTrigEtaPhi->Fill(etaTrig, phiTrig, correctConeSumCellPhi-1);
-    if(coneptsumCell!=0){
-       coneptsumCellSubPhiNorm = coneptsumCellSubPhi/coneptsumCell;
-       coneptsumCellSubEtaNorm = coneptsumCellSubEta/coneptsumCell;
-    }
-    fhConeSumPtSubvsConeSumPtTotPhiCell    ->Fill(coneptsumCell,coneptsumCellSubPhi);
-    fhConeSumPtSubNormvsConeSumPtTotPhiCell->Fill(coneptsumCell,coneptsumCellSubPhiNorm);
-    fhConeSumPtSubvsConeSumPtTotEtaCell    ->Fill(coneptsumCell,coneptsumCellSubEta);
-    fhConeSumPtSubNormvsConeSumPtTotEtaCell->Fill(coneptsumCell,coneptsumCellSubEtaNorm);
-    
   }
-    
+  
   if( partTypeInCone==AliIsolationCut::kNeutralAndCharged )
   {
-    
     // --------------------------- //
     // Tracks and clusters in cone //
     // --------------------------- //
@@ -956,46 +825,50 @@ GetCoeffNormBadCell(pCandidate,   GetReader(),coneBadCellsCoeff,etaBandBadCellsC
     
     fhConeSumPtEtaUESubClustervsTrack->Fill(coneptsumClusterSubEta,coneptsumTrackSubEta);
     fhConeSumPtPhiUESubClustervsTrack->Fill(coneptsumClusterSubPhi,coneptsumTrackSubPhi);
-        
+    
     // ------------------------ //
     // Tracks and cells in cone //
     // ------------------------ //
     
-    Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
-    Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
-    
-    fhConeSumPtPhiUESubTrackCell          ->Fill(ptTrig ,          sumPhiUESubTrackCell);
-    fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
-    fhConeSumPtEtaUESubTrackCell          ->Fill(ptTrig ,          sumEtaUESubTrackCell);
-    fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
-    
-    fhEtaBandCellvsTrack    ->Fill(etaUEptsumCell    ,etaUEptsumTrack    );
-    fhPhiBandCellvsTrack    ->Fill(phiUEptsumCell    ,phiUEptsumTrack    );
-    fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
-    fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
-    
-    fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
-    fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
+    if(fFillCellHistograms)
+    {
+      Double_t sumPhiUESubTrackCell = coneptsumCellSubPhi + coneptsumTrackSubPhi;
+      Double_t sumEtaUESubTrackCell = coneptsumCellSubEta + coneptsumTrackSubEta;
+      
+      fhConeSumPtPhiUESubTrackCell          ->Fill(ptTrig ,          sumPhiUESubTrackCell);
+      fhConeSumPtPhiUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumPhiUESubTrackCell);
+      fhConeSumPtEtaUESubTrackCell          ->Fill(ptTrig ,          sumEtaUESubTrackCell);
+      fhConeSumPtEtaUESubTrackCellTrigEtaPhi->Fill(etaTrig, phiTrig, sumEtaUESubTrackCell);
+      
+      fhEtaBandCellvsTrack    ->Fill(etaUEptsumCell    ,etaUEptsumTrack    );
+      fhPhiBandCellvsTrack    ->Fill(phiUEptsumCell    ,phiUEptsumTrack    );
+      fhEtaBandNormCellvsTrack->Fill(etaUEptsumCellNorm,etaUEptsumTrackNorm);
+      fhPhiBandNormCellvsTrack->Fill(phiUEptsumCellNorm,phiUEptsumTrackNorm);
+      
+      fhConeSumPtEtaUESubCellvsTrack->Fill(coneptsumCellSubEta,coneptsumTrackSubEta);
+      fhConeSumPtPhiUESubCellvsTrack->Fill(coneptsumCellSubPhi,coneptsumTrackSubPhi);
+    }
     
   }
 }
 
 
-//__________________________________________________________________________________________________
+//______________________________________________________________________________________________________________
 void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
-                                                        Float_t & coneptsumCluster)
+                                                        Float_t & coneptsumCluster, Float_t & coneptLeadCluster)
 {
   // Get the cluster pT or sum of pT in isolation cone
+  coneptLeadCluster = 0;
+  coneptsumCluster  = 0;
   
   if( GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kOnlyCharged ) return ;
   
   //Recover reference arrays with clusters and tracks
-  TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");  
+  TObjArray * refclusters = aodParticle->GetObjArray(GetAODObjArrayName()+"Clusters");
   if(!refclusters) return ;
   
   Float_t ptTrig = aodParticle->Pt();
-
+  
   //Get vertex for cluster momentum calculation
   Double_t vertex[] = {0,0,0} ; //vertex ;
   if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
@@ -1021,14 +894,17 @@ void AliAnaParticleIsolation::CalculateCaloSignalInCone(AliAODPWG4ParticleCorrel
       if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,mom.Pt());
     }
     
-    fhPtInConeCent->Fill(GetEventCentrality(),mom.Pt());
+    if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),mom.Pt());
+    
     coneptsumCluster+=mom.Pt();
+    if(mom.Pt() > coneptLeadCluster) coneptLeadCluster = mom.Pt();
   }
-
-  fhConeSumPtCluster   ->Fill(ptTrig,     coneptsumCluster);
+  
+  fhConeSumPtCluster ->Fill(ptTrig, coneptsumCluster );
+  fhConePtLeadCluster->Fill(ptTrig, coneptLeadCluster);
 }
 
-//__________________________________________________________________________________________________
+//______________________________________________________________________________________________________
 void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
                                                             Float_t & coneptsumCell)
 {
@@ -1058,7 +934,7 @@ void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCo
       Int_t nModule = -1;
       Int_t imEta=-1, imPhi=-1;
       Int_t ieta =-1, iphi =-1;
-
+      
       if (eGeom->GetCellIndex(absId,nSupMod,nModule,imPhi,imEta))
       {
         Int_t iEta=-1, iPhi=-1;
@@ -1078,9 +954,9 @@ void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCo
           for(Int_t icol = colTrig-sqrSize; icol < colTrig+sqrSize; icol++)
           {
             Int_t inSector = int(irow/AliEMCALGeoParams::fgkEMCALRows);
-     if(inSector==5) continue;
-   
-                  Int_t inSupMod = -1;
+            if(inSector==5) continue;
+            
+            Int_t inSupMod = -1;
             Int_t icolLoc  = -1;
             if(icol < AliEMCALGeoParams::fgkEMCALCols)
             {
@@ -1110,9 +986,9 @@ void AliAnaParticleIsolation::CalculateCaloCellSignalInCone(AliAODPWG4ParticleCo
   
 }
 
-//___________________________________________________________________________________________________
+//___________________________________________________________________________________________________________
 void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorrelation * aodParticle,
-                                                         Float_t & coneptsumTrack)
+                                                         Float_t & coneptsumTrack, Float_t & coneptLeadTrack)
 {
   // Get the track pT or sum of pT in isolation cone
   
@@ -1124,7 +1000,7 @@ void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorre
   
   Float_t  ptTrig = aodParticle->Pt();
   Double_t bz     = GetReader()->GetInputEvent()->GetMagneticField();
-
+  
   for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
   {
     AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
@@ -1147,8 +1023,8 @@ void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorre
       if(vtxBC == 0 || vtxBC==AliVTrack::kTOFBCNA) fhPtTrackInConeVtxBC0->Fill(ptTrig,pTtrack);
       
       if(GetReader()->IsPileUpFromSPD())             { fhPtInConePileUp[0]->Fill(ptTrig,pTtrack);
-      if(okTOF && trackBC!=0 )                         fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
-      if(okTOF && trackBC==0 )                         fhPtTrackInConeBC0PileUpSPD    ->Fill(ptTrig,pTtrack); }
+        if(okTOF && trackBC!=0 )                         fhPtTrackInConeOtherBCPileUpSPD->Fill(ptTrig,pTtrack);
+        if(okTOF && trackBC==0 )                         fhPtTrackInConeBC0PileUpSPD    ->Fill(ptTrig,pTtrack); }
       if(GetReader()->IsPileUpFromEMCal())             fhPtInConePileUp[1]->Fill(ptTrig,pTtrack);
       if(GetReader()->IsPileUpFromSPDOrEMCal())        fhPtInConePileUp[2]->Fill(ptTrig,pTtrack);
       if(GetReader()->IsPileUpFromSPDAndEMCal())       fhPtInConePileUp[3]->Fill(ptTrig,pTtrack);
@@ -1157,11 +1033,14 @@ void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorre
       if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtInConePileUp[6]->Fill(ptTrig,pTtrack);
     }
     
-    fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
+    if(fFillHighMultHistograms) fhPtInConeCent->Fill(GetEventCentrality(),pTtrack);
+    
     coneptsumTrack+=pTtrack;
+    if(pTtrack > coneptLeadTrack) coneptLeadTrack = pTtrack;
   }
-  
-  fhConeSumPtTrack->Fill(ptTrig, coneptsumTrack);
+
+  fhConeSumPtTrack ->Fill(ptTrig, coneptsumTrack );
+  fhConePtLeadTrack->Fill(ptTrig, coneptLeadTrack);
 
 }
 
@@ -1169,9 +1048,8 @@ void AliAnaParticleIsolation::CalculateTrackSignalInCone(AliAODPWG4ParticleCorre
 void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
 {
   // Fill some histograms to understand pile-up
-  if(!fFillPileUpHistograms) return;
   
-  if(clusterID < 0 ) 
+  if(clusterID < 0 )
   {
     printf("AliAnaParticleIsolation::FillPileUpHistograms(), ID of cluster = %d, not possible! ", clusterID);
     return;
@@ -1184,13 +1062,13 @@ void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
   
   Float_t energy = 0;
   Float_t time   = -1000;
-
+  
   if(clusters)
   {
-    AliVCluster *cluster = FindCluster(clusters,clusterID,iclus); 
+    AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
     energy = cluster->E();
     time   = cluster->GetTOF()*1e9;
-  } 
+  }
   
   //printf("E %f, time %f\n",energy,time);
   AliVEvent * event = GetReader()->GetInputEvent();
@@ -1223,7 +1101,7 @@ void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
   fhTimeNPileUpVertSPD  ->Fill(time,nVerticesSPD);
   fhTimeNPileUpVertTrack->Fill(time,nVerticesTracks);
   
-  //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n", 
+  //printf("Is SPD %d, Is SPD Multi %d, n spd %d, n track %d\n",
   //       GetReader()->IsPileUpFromSPD(),event->IsPileupFromSPDInMultBins(),nVerticesSPD,nVerticesTracks);
   
   Int_t ncont = -1;
@@ -1261,11 +1139,11 @@ void AliAnaParticleIsolation::FillPileUpHistograms(Int_t clusterID)
 
 //_____________________________________________________________________________________________________________________
 void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliAODPWG4ParticleCorrelation  *pCandidate,
-                                                                            const AliCaloTrackReader * reader, 
-                                                                            const AliCaloPID * pid)
+                                                                            Float_t coneptsum, Float_t coneleadpt,
+                                                                            Int_t mcIndex)
 {
-  // Fill Track matching and Shower Shape control histograms  
-  if(!fFillTMHisto &&  !fFillSSHisto) return;
+  // Fill Track matching and Shower Shape control histograms
+  if(!fFillTMHisto && !fFillSSHisto && !fFillBackgroundBinHistograms) return;
   
   Int_t  clusterID = pCandidate->GetCaloLabel(0) ;
   Int_t  nMaxima   = pCandidate->GetFiducialArea(); // bad name, just place holder for the moment
@@ -1283,152 +1161,184 @@ void AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms(AliA
   if     (fCalorimeter == "EMCAL") clusters = GetEMCALClusters();
   else if(fCalorimeter == "PHOS" ) clusters = GetPHOSClusters();
   
-  if(clusters)
+  if(!clusters) return;
+  
+  AliVCluster *cluster = FindCluster(clusters,clusterID,iclus);
+
+  Float_t m02    = cluster->GetM02() ;
+  Float_t energy = pCandidate->E();
+  Float_t pt     = pCandidate->Pt();
+
+  // Get the max pt leading in cone or the sum of pt in cone
+  // assign a bin to the candidate, depending on both quantities
+  // see the shower shape in those bins.
+  if(fFillBackgroundBinHistograms)
   {
-    AliVCluster *cluster = FindCluster(clusters,clusterID,iclus); 
-    Float_t energy = cluster->E();
+    // Get the background bin for this cone and trigger
+    Int_t ptsumBin  = -1;
+    Int_t leadptBin = -1;
     
-    if(fFillSSHisto)
+    if( GetDebug() > 1 )
+      printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeControlHistograms() - pT cand: %2.2f, In cone pT: Sum %2.2f, Lead %2.2f, n bins %d\n",
+             pt,coneptsum,coneleadpt,fNBkgBin);
+    
+    for(Int_t ibin = 0; ibin < fNBkgBin; ibin++)
     {
-      fhELambda0[isolated]->Fill(energy, cluster->GetM02() );  
-      fhELambda1[isolated]->Fill(energy, cluster->GetM20() );  
-      
-      if(IsDataMC())
+      if( coneptsum  >= fBkgBinLimit[ibin] && coneptsum  < fBkgBinLimit[ibin+1]) ptsumBin  = ibin;
+      if( coneleadpt >= fBkgBinLimit[ibin] && coneleadpt < fBkgBinLimit[ibin+1]) leadptBin = ibin;
+    }
+    
+    // Fill the histograms per bin of pt lead or pt sum
+    if( GetDebug() > 1 && ptsumBin  >=0 ) printf("\t Sum bin %d [%2.2f,%2.2f]\n" , ptsumBin ,fBkgBinLimit[ptsumBin] ,fBkgBinLimit[ptsumBin +1]);
+    if( GetDebug() > 1 && leadptBin >=0 ) printf("\t Lead bin %d [%2.2f,%2.2f]\n", leadptBin,fBkgBinLimit[leadptBin],fBkgBinLimit[leadptBin+1]);
+    
+    if( leadptBin >=0 ) fhPtLeadConeBinLambda0[leadptBin]->Fill(pt,m02);
+    if( ptsumBin  >=0 ) fhSumPtConeBinLambda0 [ ptsumBin]->Fill(pt,m02);
+    
+    if( GetDebug() > 1 && leadptBin == 0 )
+      printf("No track/clusters in isolation cone: cand pt %2.2f GeV/c, track multiplicity %d, N clusters %d\n",
+             pt, GetTrackMultiplicity(),GetEMCALClusters()->GetEntriesFast());
+    
+    if(IsDataMC())
+    {
+      Int_t leadptBinMC = leadptBin+mcIndex*fNBkgBin;
+      Int_t  ptsumBinMC =  ptsumBin+mcIndex*fNBkgBin;
+      if( leadptBin >=0 ) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,m02);
+      if( ptsumBin  >=0 ) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,m02);
+      if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
       {
-        if     (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt) ||        
-                GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation)) fhELambda0MCPhoton    [isolated]->Fill(energy, cluster->GetM02());
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))           fhELambda0MCPi0       [isolated]->Fill(energy, cluster->GetM02());
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))      fhELambda0MCPi0Decay  [isolated]->Fill(energy, cluster->GetM02());
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))      fhELambda0MCEtaDecay  [isolated]->Fill(energy, cluster->GetM02());
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))    fhELambda0MCOtherDecay[isolated]->Fill(energy, cluster->GetM02());
-        
-        //        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion))    fhPtNoIsoConversion   ->Fill(energy, cluster->GetM02());
-        else if(!GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))     fhELambda0MCHadron    [isolated]->Fill(energy, cluster->GetM02());        
-        
+        leadptBinMC = leadptBin+kmcPhoton*fNBkgBin;
+        ptsumBinMC  =  ptsumBin+kmcPhoton*fNBkgBin;
+        if( leadptBin >=0 ) fhPtLeadConeBinLambda0MC[leadptBinMC]->Fill(pt,m02);
+        if( ptsumBin  >=0 ) fhSumPtConeBinLambda0MC [ ptsumBinMC]->Fill(pt,m02);
       }
-      
-      if(fCalorimeter == "EMCAL" && GetModuleNumber(cluster) > 5) // TO DO: CHANGE FOR 2012
+    }
+  }
+  
+  if(fFillSSHisto)
+  {
+    fhELambda0 [isolated]->Fill(energy, m02);
+    fhPtLambda0[isolated]->Fill(pt,     m02);
+    fhELambda1 [isolated]->Fill(energy, m02);
+    if(fFillTaggedDecayHistograms)
+    {
+      Int_t decayTag = pCandidate->GetBtag(); // temporary
+      if(decayTag < 0) decayTag = 0;    // temporary
+      for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
       {
-        fhELambda0TRD[isolated]->Fill(energy, cluster->GetM02() );  
-        fhELambda1TRD[isolated]->Fill(energy, cluster->GetM20() );  
+        if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
+          fhPtLambda0Decay[isolated][ibit]->Fill(pt,m02);
       }
+    }
+    
+    if(IsDataMC())
+    {
+      if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
+        fhPtLambda0MC[kmcPhoton][isolated]->Fill(pt,m02);
       
+      fhPtLambda0MC[mcIndex][isolated]->Fill(pt,m02);
+    }
+    
+    if(fCalorimeter == "EMCAL" &&  GetFirstSMCoveredByTRD() >= 0 &&
+       GetModuleNumber(cluster) >= GetFirstSMCoveredByTRD()  )
+    {
+      fhELambda0TRD [isolated]->Fill(energy, m02 );
+      fhPtLambda0TRD[isolated]->Fill(pt    , m02 );
+      fhELambda1TRD [isolated]->Fill(energy, m02 );
+    }
+    
+    if(fFillNLMHistograms)
+    {
       fhNLocMax[isolated]->Fill(energy,nMaxima);
-      if     (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax1[isolated]->Fill(energy,cluster->GetM20()); }
-      else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMax2[isolated]->Fill(energy,cluster->GetM20()); }
-      else                { fhELambda0LocMaxN[isolated]->Fill(energy,cluster->GetM02()); fhELambda1LocMaxN[isolated]->Fill(energy,cluster->GetM20()); }
-      
-      if(isolated==0)
-      {
-        //Analyse non-isolated events
-        Int_t   n         = 0; 
-        Int_t   nfrac     = 0;
-        Bool_t  iso       = kFALSE ;
-        Float_t coneptsum = 0 ;
-        
-        TObjArray * plNe  = pCandidate->GetObjArray(GetAODObjArrayName()+"Clusters");
-        TObjArray * plCTS = pCandidate->GetObjArray(GetAODObjArrayName()+"Tracks");
-        
-        GetIsolationCut()->SetPtThresholdMax(1.);
-        GetIsolationCut()->MakeIsolationCut(plCTS,   plNe, 
-                                            reader, pid,
-                                            kFALSE, pCandidate, "", 
-                                            n,nfrac,coneptsum, iso);
-        
-        if (!iso) fhELambda0SSBkg->Fill(energy, cluster->GetM02());
-        
-        if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Energy Sum in Isolation Cone %2.2f\n", coneptsum);    
-      }
-      
-      GetIsolationCut()->SetPtThresholdMax(10000.);
-      
-    } // SS histo fill        
+      if     (nMaxima==1) { fhELambda0LocMax1[isolated]->Fill(energy,m02); fhELambda1LocMax1[isolated]->Fill(energy,m02); }
+      else if(nMaxima==2) { fhELambda0LocMax2[isolated]->Fill(energy,m02); fhELambda1LocMax2[isolated]->Fill(energy,m02); }
+      else                { fhELambda0LocMaxN[isolated]->Fill(energy,m02); fhELambda1LocMaxN[isolated]->Fill(energy,m02); }
+    }
+  } // SS histo fill
+  
+  if(fFillTMHisto)
+  {
+    Float_t dZ  = cluster->GetTrackDz();
+    Float_t dR  = cluster->GetTrackDx();
+    
+    if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
+    {
+      dR = 2000., dZ = 2000.;
+      GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
+    }
+    
+    //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
+    if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
+    {
+      fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
+      fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
+      if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
+    }
     
+    // Check dEdx and E/p of matched clusters
     
-    if(fFillTMHisto)
+    if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
     {
-      Float_t dZ  = cluster->GetTrackDz();
-      Float_t dR  = cluster->GetTrackDx();
       
-      if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn())
-      {
-        dR = 2000., dZ = 2000.;
-        GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
-      }
+      AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
       
-      //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
-      if(fhTrackMatchedDEta[isolated] && TMath::Abs(dR) < 999)
+      if(track)
       {
-        fhTrackMatchedDEta[isolated]->Fill(energy,dZ);
-        fhTrackMatchedDPhi[isolated]->Fill(energy,dR);
-        if(energy > 0.5) fhTrackMatchedDEtaDPhi[isolated]->Fill(dZ,dR);
+        Float_t dEdx = track->GetTPCsignal();
+        fhdEdx[isolated]->Fill(cluster->E(), dEdx);
+        
+        Float_t eOverp = cluster->E()/track->P();
+        fhEOverP[isolated]->Fill(cluster->E(),  eOverp);
       }
+      //else
+      //  printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
       
-      // Check dEdx and E/p of matched clusters
       
-      if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
+      if(IsDataMC())
       {
-        
-        AliVTrack *track = GetCaloUtils()->GetMatchedTrack(cluster, GetReader()->GetInputEvent());
-        
-        if(track) 
+        if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion)  )
         {
-          Float_t dEdx = track->GetTPCsignal();
-          fhdEdx[isolated]->Fill(cluster->E(), dEdx);
+          if       ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0)      ||
+                     GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
+          else                                                                                   fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
           
-          Float_t eOverp = cluster->E()/track->P();
-          fhEOverP[isolated]->Fill(cluster->E(),  eOverp);
         }
-        //else 
-        //  printf("AliAnaParticleIsolation::FillTrackMatchingShowerShapeHistograms() - Residual OK but (dR, dZ)= (%2.4f,%2.4f) no track associated WHAT? \n", dR,dZ);
-        
-        
-        if(IsDataMC())
+        else
         {
-          if ( !GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion)  )
-          {
-            if       ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0)      ||
-                       GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 2.5 );
-            else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 0.5 );
-            else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 1.5 );
-            else                                                                                   fhTrackMatchedMCParticle[isolated]->Fill(energy, 3.5 );
-            
-          }
-          else
-          {
-            if       ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0)      ||
-                       GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
-            else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
-            else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
-            else                                                                                   fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
-          }                    
-          
-        }  // MC           
-        
-      } // match window            
+          if       ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0)      ||
+                     GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 6.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 4.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle[isolated]->Fill(energy, 5.5 );
+          else                                                                                   fhTrackMatchedMCParticle[isolated]->Fill(energy, 7.5 );
+        }
+      }  // MC
       
-    }// TM histos fill
+    } // match window
     
-  } // clusters array available
+  }// TM histos fill
   
 }
 
 //______________________________________________________
 TObjString *  AliAnaParticleIsolation::GetAnalysisCuts()
-{ 
+{
   //Save parameters used for analysis
   TString parList ; //this will be list of parameters used for this analysis.
   const Int_t buffersize = 255;
   char onePar[buffersize] ;
   
   snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ;
-  parList+=onePar ;    
+  parList+=onePar ;
   snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ;
   parList+=onePar ;
+  snprintf(onePar, buffersize,"Isolation Cand Detector: %s\n",fIsoDetector.Data()) ;
+  parList+=onePar ;
   snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ;
   parList+=onePar ;
   snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ;
-  parList+=onePar ;  
+  parList+=onePar ;
   snprintf(onePar, buffersize,"fFillTMHisto=%d (Flag for track matching histograms) \n",fFillTMHisto) ;
   parList+=onePar ;
   snprintf(onePar, buffersize,"fFillSSHisto=%d (Flag for shower shape histograms) \n",fFillSSHisto) ;
@@ -1444,23 +1354,23 @@ TObjString *  AliAnaParticleIsolation::GetAnalysisCuts()
     for(Int_t icone = 0; icone < fNCones ; icone++)
     {
       snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ;
-      parList+=onePar ;        
+      parList+=onePar ;
     }
     for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
     {
       snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ;
-      parList+=onePar ;        
+      parList+=onePar ;
     }
     for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
     {
       snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ;
-      parList+=onePar ;        
+      parList+=onePar ;
     }
     for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
     {
       snprintf(onePar, buffersize,"fSumPtThresholds[%d]=%1.2f (isolation sum pt threshold) \n",ipt, fSumPtThresholds[ipt]) ;
-      parList+=onePar ;        
-    }          
+      parList+=onePar ;
+    }
   }
   
   //Get parameters set in base class.
@@ -1475,11 +1385,11 @@ TObjString *  AliAnaParticleIsolation::GetAnalysisCuts()
 
 //________________________________________________________
 TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
-{  
-  // Create histograms to be saved in output file and 
+{
+  // Create histograms to be saved in output file and
   // store them in outputContainer
-  TList * outputContainer = new TList() ; 
-  outputContainer->SetName("IsolatedParticleHistos") ; 
+  TList * outputContainer = new TList() ;
+  outputContainer->SetName("IsolatedParticleHistos") ;
   
   Int_t   nptbins  = GetHistogramRanges()->GetHistoPtBins();
   Int_t   nphibins = GetHistogramRanges()->GetHistoPhiBins();
@@ -1489,828 +1399,1151 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
   Float_t etamax   = GetHistogramRanges()->GetHistoEtaMax();
   Float_t ptmin    = GetHistogramRanges()->GetHistoPtMin();
   Float_t phimin   = GetHistogramRanges()->GetHistoPhiMin();
-  Float_t etamin   = GetHistogramRanges()->GetHistoEtaMin();   
-  Int_t   ssbins   = GetHistogramRanges()->GetHistoShowerShapeBins(); 
-  Float_t ssmax    = GetHistogramRanges()->GetHistoShowerShapeMax();  
+  Float_t etamin   = GetHistogramRanges()->GetHistoEtaMin();
+  Int_t   ssbins   = GetHistogramRanges()->GetHistoShowerShapeBins();
+  Float_t ssmax    = GetHistogramRanges()->GetHistoShowerShapeMax();
   Float_t ssmin    = GetHistogramRanges()->GetHistoShowerShapeMin();
-  Int_t   ntimebins= GetHistogramRanges()->GetHistoTimeBins();         
-  Float_t timemax  = GetHistogramRanges()->GetHistoTimeMax();         
-  Float_t timemin  = GetHistogramRanges()->GetHistoTimeMin();       
-
-  Int_t   nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();          
-  Float_t resetamax   = GetHistogramRanges()->GetHistoTrackResidualEtaMax();          
+  Int_t   ntimebins= GetHistogramRanges()->GetHistoTimeBins();
+  Float_t timemax  = GetHistogramRanges()->GetHistoTimeMax();
+  Float_t timemin  = GetHistogramRanges()->GetHistoTimeMin();
+  
+  Int_t   nresetabins = GetHistogramRanges()->GetHistoTrackResidualEtaBins();
+  Float_t resetamax   = GetHistogramRanges()->GetHistoTrackResidualEtaMax();
   Float_t resetamin   = GetHistogramRanges()->GetHistoTrackResidualEtaMin();
-  Int_t   nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();          
-  Float_t resphimax   = GetHistogramRanges()->GetHistoTrackResidualPhiMax();          
-  Float_t resphimin   = GetHistogramRanges()->GetHistoTrackResidualPhiMin();  
+  Int_t   nresphibins = GetHistogramRanges()->GetHistoTrackResidualPhiBins();
+  Float_t resphimax   = GetHistogramRanges()->GetHistoTrackResidualPhiMax();
+  Float_t resphimin   = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
   
-  Int_t   ndedxbins   = GetHistogramRanges()->GetHistodEdxBins();         
-  Float_t dedxmax     = GetHistogramRanges()->GetHistodEdxMax();         
+  Int_t   ndedxbins   = GetHistogramRanges()->GetHistodEdxBins();
+  Float_t dedxmax     = GetHistogramRanges()->GetHistodEdxMax();
   Float_t dedxmin     = GetHistogramRanges()->GetHistodEdxMin();
-  Int_t   nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();       
-  Float_t pOverEmax   = GetHistogramRanges()->GetHistoPOverEMax();       
+  Int_t   nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();
+  Float_t pOverEmax   = GetHistogramRanges()->GetHistoPOverEMax();
   Float_t pOverEmin   = GetHistogramRanges()->GetHistoPOverEMin();
   
-  Int_t   nptsumbins    = fHistoNPtSumBins;
-  Float_t ptsummax      = fHistoPtSumMax;
-  Float_t ptsummin      = fHistoPtSumMin;      
-  Int_t   nptinconebins = fHistoNPtInConeBins;
-  Float_t ptinconemax   = fHistoPtInConeMax;
-  Float_t ptinconemin   = fHistoPtInConeMin;
+  Int_t   nptsumbins    = GetHistogramRanges()->GetHistoNPtSumBins();
+  Float_t ptsummax      = GetHistogramRanges()->GetHistoPtSumMax();
+  Float_t ptsummin      = GetHistogramRanges()->GetHistoPtSumMin();
+  Int_t   nptinconebins = GetHistogramRanges()->GetHistoNPtInConeBins();
+  Float_t ptinconemax   = GetHistogramRanges()->GetHistoPtInConeMax();
+  Float_t ptinconemin   = GetHistogramRanges()->GetHistoPtInConeMin();
+  
+  //Float_t ptthre    = GetIsolationCut()->GetPtThreshold();
+  //Float_t ptsumthre = GetIsolationCut()->GetSumPtThreshold();
+  //Float_t ptfrac    = GetIsolationCut()->GetPtFraction();
+  Float_t r         = GetIsolationCut()->GetConeSize();
+  Int_t   method    = GetIsolationCut()->GetICMethod() ;
+  Int_t   particle  = GetIsolationCut()->GetParticleTypeInCone() ;
+  
+  TString sThreshold = "";
+  if      ( method == AliIsolationCut::kSumPtIC )
+  {
+    sThreshold = Form(", %2.2f < #Sigma #it{p}_{T}^{in cone} < %2.2f GeV/#it{c}",
+                      GetIsolationCut()->GetSumPtThreshold(), GetIsolationCut()->GetSumPtThresholdMax());
+    if(GetIsolationCut()->GetSumPtThresholdMax() > 200)
+      sThreshold = Form(", #Sigma #it{p}_{T}^{in cone} = %2.2f GeV/#it{c}",
+                        GetIsolationCut()->GetSumPtThreshold());
+  }
+  else if ( method == AliIsolationCut::kPtThresIC)
+  {
+    sThreshold = Form(", %2.2f < #it{p}_{T}^{th} < %2.2f GeV/#it{c}",
+                      GetIsolationCut()->GetPtThreshold(),GetIsolationCut()->GetPtThresholdMax());
+    if(GetIsolationCut()->GetSumPtThreshold() > 200)
+      sThreshold = Form(", #it{p}_{T}^{th} = %2.2f GeV/#it{c}",
+                        GetIsolationCut()->GetPtThreshold());
+  }
+  else if ( method == AliIsolationCut::kPtFracIC)
+    sThreshold = Form(", #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig} = %2.2f" ,
+                      GetIsolationCut()->GetPtFraction());
   
-  Float_t ptthre = GetIsolationCut()->GetPtThreshold();
-  Float_t ptfrac = GetIsolationCut()->GetPtFraction();
-  Float_t r      = GetIsolationCut()->GetConeSize();
+  TString sParticle = ", x^{0,#pm}";
+  if      ( particle == AliIsolationCut::kOnlyNeutral )  sParticle = ", x^{0}";
+  else if ( particle == AliIsolationCut::kOnlyCharged )  sParticle = ", x^{#pm}";
+  
+  TString parTitle = Form("#it{R} = %2.2f%s%s",GetIsolationCut()->GetConeSize(), sThreshold.Data(),sParticle.Data());
   
   TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
   
+  // MC histograms title and name
+  TString mcPartType[] = { "#gamma", "#gamma_{prompt}", "#gamma_{fragmentation}",
+    "#pi^{0} (merged #gamma)","#gamma_{#pi decay}",
+    "#gamma_{#eta decay}","#gamma_{other decay}",
+    "e^{#pm}","hadrons?"} ;
+  
+  TString mcPartName[] = { "Photon","PhotonPrompt","PhotonFrag",
+    "Pi0","Pi0Decay","EtaDecay","OtherDecay",
+    "Electron","Hadron"} ;
+  
+  // Primary MC histograms title and name
+  TString pptype[] = { "#gamma", "#gamma_{#pi decay}","#gamma_{other decay}",
+    "#gamma_{prompt}","#gamma_{fragmentation}","#gamma_{ISR}"} ;
+  
+  TString ppname[] = { "Photon","PhotonPi0Decay","PhotonOtherDecay",
+    "PhotonPrompt","PhotonFrag","PhotonISR"} ;
+  
+  // Not Isolated histograms, reference histograms
+  
+  fhENoIso  = new TH1F("hENoIso",
+                       Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
+                       nptbins,ptmin,ptmax);
+  fhENoIso->SetYTitle("#it{counts}");
+  fhENoIso->SetXTitle("E (GeV/#it{c})");
+  outputContainer->Add(fhENoIso) ;
+  
+  fhPtNoIso  = new TH1F("hPtNoIso",
+                        Form("Number of not isolated leading particles vs #it{p}_{T}, %s",parTitle.Data()),
+                        nptbins,ptmin,ptmax);
+  fhPtNoIso->SetYTitle("#it{counts}");
+  fhPtNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+  outputContainer->Add(fhPtNoIso) ;
+  
+  fhEtaPhiNoIso  = new TH2F("hEtaPhiNoIso",
+                            Form("Number of not isolated leading particles #eta vs #phi, %s",parTitle.Data()),
+                            netabins,etamin,etamax,nphibins,phimin,phimax);
+  fhEtaPhiNoIso->SetXTitle("#eta");
+  fhEtaPhiNoIso->SetYTitle("#phi");
+  outputContainer->Add(fhEtaPhiNoIso) ;
+  
+  if(IsDataMC())
+  {
+    // For histograms in arrays, index in the array, corresponding to any particle origin
+    
+    for(Int_t imc = 0; imc < 9; imc++)
+    {
+      
+      fhPtNoIsoMC[imc]  = new TH1F(Form("hPtNoIsoMC%s",mcPartName[imc].Data()),
+                                   Form("#it{p}_{T} of NOT isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
+                                   nptbins,ptmin,ptmax);
+      fhPtNoIsoMC[imc]->SetYTitle("#it{counts}");
+      fhPtNoIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+      outputContainer->Add(fhPtNoIsoMC[imc]) ;
+      
+      fhPtIsoMC[imc]  = new TH1F(Form("hPtMC%s",mcPartName[imc].Data()),
+                                 Form("#it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
+                                 nptbins,ptmin,ptmax);
+      fhPtIsoMC[imc]->SetYTitle("#it{counts}");
+      fhPtIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+      outputContainer->Add(fhPtIsoMC[imc]) ;
+      
+      fhPhiIsoMC[imc]  = new TH2F(Form("hPhiMC%s",mcPartName[imc].Data()),
+                                  Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
+                                  nptbins,ptmin,ptmax,nphibins,phimin,phimax);
+      fhPhiIsoMC[imc]->SetYTitle("#phi");
+      fhPhiIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+      outputContainer->Add(fhPhiIsoMC[imc]) ;
+      
+      fhEtaIsoMC[imc]  = new TH2F(Form("hEtaMC%s",mcPartName[imc].Data()),
+                                  Form("#phi vs #it{p}_{T} of isolated %s, %s",mcPartType[imc].Data(),parTitle.Data()),
+                                  nptbins,ptmin,ptmax,netabins,etamin,etamax);
+      fhEtaIsoMC[imc]->SetYTitle("#eta");
+      fhEtaIsoMC[imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+      outputContainer->Add(fhEtaIsoMC[imc]) ;
+    }
+  }
+  
+  // Histograms for tagged candidates as decay
+  if(fFillTaggedDecayHistograms)
+  {
+    for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
+    {
+      fhPtDecayNoIso[ibit]  =
+      new TH1F(Form("hPtDecayNoIso_bit%d",fDecayBits[ibit]),
+               Form("Number of not isolated leading pi0 decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
+               nptbins,ptmin,ptmax);
+      fhPtDecayNoIso[ibit]->SetYTitle("#it{counts}");
+      fhPtDecayNoIso[ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhPtDecayNoIso[ibit]) ;
+      
+      fhEtaPhiDecayNoIso[ibit]  =
+      new TH2F(Form("hEtaPhiDecayNoIso_bit%d",fDecayBits[ibit]),
+               Form("Number of not isolated leading Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
+               netabins,etamin,etamax,nphibins,phimin,phimax);
+      fhEtaPhiDecayNoIso[ibit]->SetXTitle("#eta");
+      fhEtaPhiDecayNoIso[ibit]->SetYTitle("#phi");
+      outputContainer->Add(fhEtaPhiDecayNoIso[ibit]) ;
+      
+      if(!fMakeSeveralIC)
+      {
+        fhPtDecayIso[ibit]  =
+        new TH1F(Form("hPtDecayIso_bit%d",fDecayBits[ibit]),
+                 Form("Number of isolated #pi^{0} decay particles vs #it{p}_{T}, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
+                 nptbins,ptmin,ptmax);
+        fhPtDecayIso[ibit]->SetYTitle("#it{counts}");
+        fhPtDecayIso[ibit]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+        outputContainer->Add(fhPtDecayIso[ibit]) ;
+        
+        fhEtaPhiDecayIso[ibit]  =
+        new TH2F(Form("hEtaPhiDecayIso_bit%d",fDecayBits[ibit]),
+                 Form("Number of isolated Pi0 decay particles #eta vs #phi, bit %d, %s",fDecayBits[ibit],parTitle.Data()),
+                 netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhEtaPhiDecayIso[ibit]->SetXTitle("#eta");
+        fhEtaPhiDecayIso[ibit]->SetYTitle("#phi");
+        outputContainer->Add(fhEtaPhiDecayIso[ibit]) ;
+      }
+      
+      if(IsDataMC())
+      {
+        for(Int_t imc = 0; imc < 9; imc++)
+        {
+          
+          fhPtDecayNoIsoMC[ibit][imc]  =
+          new TH1F(Form("hPtDecayNoIso_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
+                   Form("#it{p}_{T} of NOT isolated, decay bit %d,  %s, %s",fDecayBits[ibit],mcPartType[imc].Data(),parTitle.Data()),
+                   nptbins,ptmin,ptmax);
+          fhPtDecayNoIsoMC[ibit][imc]->SetYTitle("#it{counts}");
+          fhPtDecayNoIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+          outputContainer->Add(fhPtDecayNoIsoMC[ibit][imc]) ;
+          
+          if(!fMakeSeveralIC)
+          {
+            fhPtDecayIsoMC[ibit][imc]  =
+            new TH1F(Form("hPtDecay_bit%d_MC%s",fDecayBits[ibit],mcPartName[imc].Data()),
+                     Form("#it{p}_{T} of isolated %s, decay bit %d, %s",mcPartType[imc].Data(),fDecayBits[ibit],parTitle.Data()),
+                     nptbins,ptmin,ptmax);
+            fhPtDecayIsoMC[ibit][imc]->SetYTitle("#it{counts}");
+            fhPtDecayIsoMC[ibit][imc]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+            outputContainer->Add(fhPtDecayIsoMC[ibit][imc]) ;
+          }
+        }// MC particle loop
+      }// MC
+    } // bit loop
+  }// decay
+  
   if(!fMakeSeveralIC)
   {
-    TString hName [] = {"NoIso",""};
-    TString hTitle[] = {"Not isolated"  ,"isolated"};
+    TString isoName [] = {"NoIso",""};
+    TString isoTitle[] = {"Not isolated"  ,"isolated"};
     
     fhEIso   = new TH1F("hE",
-                        Form("Number of isolated particles vs E for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
+                        Form("Number of isolated particles vs E, %s",parTitle.Data()),
                         nptbins,ptmin,ptmax);
-    fhEIso->SetYTitle("dN / dE");
-    fhEIso->SetXTitle("E (GeV/c)");
+    fhEIso->SetYTitle("d#it{N} / d#it{E}");
+    fhEIso->SetXTitle("#it{E} (GeV/#it{c})");
     outputContainer->Add(fhEIso) ;
     
     fhPtIso  = new TH1F("hPt",
-                        Form("Number of isolated particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
+                        Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
                         nptbins,ptmin,ptmax);
-    fhPtIso->SetYTitle("dN / p_{T}");
-    fhPtIso->SetXTitle("p_{T} (GeV/c)");
+    fhPtIso->SetYTitle("d#it{N} / #it{p}_{T}");
+    fhPtIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
     outputContainer->Add(fhPtIso) ;
     
-    fhPtCentralityIso  = new TH2F("hPtCentrality","centrality vs p_{T} for isolated particles",nptbins,ptmin,ptmax, 100,0,100);
-    fhPtCentralityIso->SetYTitle("centrality");
-    fhPtCentralityIso->SetXTitle("p_{T}(GeV/c)");
-    outputContainer->Add(fhPtCentralityIso) ;
-    
-    fhPtEventPlaneIso  = new TH2F("hPtEventPlane","event plane angle vs p_{T} for isolated particles",nptbins,ptmin,ptmax, 100,0,TMath::Pi());
-    fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
-    fhPtEventPlaneIso->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtEventPlaneIso) ;
-    
-    
-    fhPtNLocMaxIso  = new TH2F("hPtNLocMax",
-                               Form("Number of isolated particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f vs NLM, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                               nptbins,ptmin,ptmax,10,0,10);
-    fhPtNLocMaxIso->SetYTitle("NLM");
-    fhPtNLocMaxIso->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNLocMaxIso) ;
-    
     fhPhiIso  = new TH2F("hPhi",
-                         Form("Number of isolated particles vs #phi for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
+                         Form("Number of isolated particles vs #phi, %s",parTitle.Data()),
                          nptbins,ptmin,ptmax,nphibins,phimin,phimax);
     fhPhiIso->SetYTitle("#phi");
-    fhPhiIso->SetXTitle("p_{T} (GeV/c)");
+    fhPhiIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
     outputContainer->Add(fhPhiIso) ;
     
     fhEtaIso  = new TH2F("hEta",
-                         Form("Number of isolated particles vs #eta for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
+                         Form("Number of isolated particles vs #eta, %s",parTitle.Data()),
                          nptbins,ptmin,ptmax,netabins,etamin,etamax);
     fhEtaIso->SetYTitle("#eta");
-    fhEtaIso->SetXTitle("p_{T} (GeV/c)");
+    fhEtaIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
     outputContainer->Add(fhEtaIso) ;
     
     fhEtaPhiIso  = new TH2F("hEtaPhiIso",
-                            Form("Number of isolated particles #eta vs #phi for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
+                            Form("Number of isolated particles #eta vs #phi, %s",parTitle.Data()),
                             netabins,etamin,etamax,nphibins,phimin,phimax);
     fhEtaPhiIso->SetXTitle("#eta");
     fhEtaPhiIso->SetYTitle("#phi");
     outputContainer->Add(fhEtaPhiIso) ;
     
-    fhPtDecayIso  = new TH1F("hPtDecayIso",
-                             Form("Number of isolated #pi^{0} decay particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                             nptbins,ptmin,ptmax);
-    fhPtDecayIso->SetYTitle("N");
-    fhPtDecayIso->SetXTitle("p_{T}(GeV/c)");
-    outputContainer->Add(fhPtDecayIso) ;
+    if(fFillHighMultHistograms)
+    {
+      fhPtCentralityIso  = new TH2F("hPtCentrality",
+                                    Form("centrality vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
+                                    nptbins,ptmin,ptmax, 100,0,100);
+      fhPtCentralityIso->SetYTitle("centrality");
+      fhPtCentralityIso->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+      outputContainer->Add(fhPtCentralityIso) ;
+      
+      fhPtEventPlaneIso  = new TH2F("hPtEventPlane",
+                                    Form("event plane angle vs #it{p}_{T} for isolated particles, %s",parTitle.Data()),
+                                    nptbins,ptmin,ptmax, 100,0,TMath::Pi());
+      fhPtEventPlaneIso->SetYTitle("Event plane angle (rad)");
+      fhPtEventPlaneIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhPtEventPlaneIso) ;
+    }
     
-    fhEtaPhiDecayIso  = new TH2F("hEtaPhiDecayIso",
-                                 Form("Number of isolated Pi0 decay particles #eta vs #phi for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                                 netabins,etamin,etamax,nphibins,phimin,phimax);
-    fhEtaPhiDecayIso->SetXTitle("#eta");
-    fhEtaPhiDecayIso->SetYTitle("#phi");
-    outputContainer->Add(fhEtaPhiDecayIso) ;
+    if(fFillNLMHistograms)
+    {
+      fhPtNLocMaxIso  = new TH2F("hPtNLocMax",
+                                 Form("Number of isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
+                                 nptbins,ptmin,ptmax,10,0,10);
+      fhPtNLocMaxIso->SetYTitle("#it{NLM}");
+      fhPtNLocMaxIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+      
+      fhPtNLocMaxNoIso  = new TH2F("hPtNLocMaxNoIso",
+                                   Form("Number of not isolated particles vs #it{p}_{T}, %s",parTitle.Data()),
+                                   nptbins,ptmin,ptmax,10,0,10);
+      fhPtNLocMaxNoIso->SetYTitle("#it{NLM}");
+      fhPtNLocMaxNoIso->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhPtNLocMaxNoIso) ;
+    }
+
+    fhConePtLead  = new TH2F("hConePtLead",
+                            Form("Track or Cluster  leading #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                            nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+    fhConePtLead->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
+    fhConePtLead->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+    outputContainer->Add(fhConePtLead) ;
     
     fhConeSumPt  = new TH2F("hConePtSum",
-                            Form("Track and Cluster #Sigma p_{T} in isolation cone for R = %2.2f",r),
+                            Form("Track and Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
                             nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-    fhConeSumPt->SetYTitle("#Sigma p_{T}");
-    fhConeSumPt->SetXTitle("p_{T, trigger} (GeV/c)");
+    fhConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
+    fhConeSumPt->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
     outputContainer->Add(fhConeSumPt) ;
     
     fhConeSumPtTrigEtaPhi  = new TH2F("hConePtSumTrigEtaPhi",
-                            Form("Trigger #eta vs #phi, #Sigma p_{T} in isolation cone for R = %2.2f",r),
-                            netabins,etamin,etamax,nphibins,phimin,phimax);
-    fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma p_{T}");
+                                      Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                                      netabins,etamin,etamax,nphibins,phimin,phimax);
+    fhConeSumPtTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
     fhConeSumPtTrigEtaPhi->SetXTitle("#eta_{trigger}");
     fhConeSumPtTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
     outputContainer->Add(fhConeSumPtTrigEtaPhi) ;
     
     fhPtInCone  = new TH2F("hPtInCone",
-                           Form("p_{T} of clusters and tracks in isolation cone for R = %2.2f",r),
+                           Form("#it{p}_{T} of clusters and tracks in isolation cone for #it{R} =  %2.2f",r),
                            nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-    fhPtInCone->SetYTitle("p_{T in cone} (GeV/c)");
-    fhPtInCone->SetXTitle("p_{T} (GeV/c)");
+    fhPtInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+    fhPtInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
     outputContainer->Add(fhPtInCone) ;
     
-    fhPtInConeCent  = new TH2F("hPtInConeCent",
-                               Form("p_{T} in isolation cone for R = %2.2f",r),
-                               100,0,100,nptinconebins,ptinconemin,ptinconemax);
-    fhPtInConeCent->SetYTitle("p_{T in cone} (GeV/c)");
-    fhPtInConeCent->SetXTitle("centrality");
-    outputContainer->Add(fhPtInConeCent) ;
+    if(fFillBackgroundBinHistograms)
+    {
+      fhPtLeadConeBinLambda0 = new TH2F*[fNBkgBin];
+      fhSumPtConeBinLambda0  = new TH2F*[fNBkgBin];
+      
+      if(IsDataMC())
+      {
+        fhPtLeadConeBinLambda0MC = new TH2F*[fNBkgBin*9];
+        fhSumPtConeBinLambda0MC  = new TH2F*[fNBkgBin*9];
+      }
+      
+      for(Int_t ibin = 0; ibin < fNBkgBin; ibin++)
+      {
+        fhPtLeadConeBinLambda0[ibin]  = new TH2F
+        (Form("hPtLeadConeLambda0_Bin%d",ibin),
+         Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f (GeV/#it{c}), %s",
+              fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+        fhPtLeadConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
+        fhPtLeadConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPtLeadConeBinLambda0[ibin]) ;
+        
+        fhSumPtConeBinLambda0[ibin]  = new TH2F
+        (Form("hSumPtConeLambda0_Bin%d",ibin),
+         Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f (GeV/#it{c}), %s",
+              fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+        fhSumPtConeBinLambda0[ibin]->SetYTitle("#lambda_{0}^{2}");
+        fhSumPtConeBinLambda0[ibin]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhSumPtConeBinLambda0[ibin]) ;
+        
+        if(IsDataMC())
+        {
+          for(Int_t imc = 0; imc < 9; imc++)
+          {
+            Int_t binmc = ibin+imc*fNBkgBin;
+            fhPtLeadConeBinLambda0MC[binmc]  = new TH2F
+            (Form("hPtLeadConeLambda0_Bin%d_MC%s",ibin, mcPartName[imc].Data()),
+             Form("#lambda_{0}, in cone %2.2f<#it{p}_{T}^{leading}<%2.2f (GeV/#it{c}), MC %s, %s",
+                  fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+            fhPtLeadConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
+            fhPtLeadConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+            outputContainer->Add(fhPtLeadConeBinLambda0MC[binmc]) ;
+            
+            fhSumPtConeBinLambda0MC[binmc]  = new TH2F
+            (Form("hSumPtConeLambda0_Bin%d_MC%s",ibin,mcPartName[imc].Data()),
+             Form("#lambda_{0}, in cone %2.2f <#Sigma #it{p}_{T}< %2.2f (GeV/#it{c}), MC %s, %s",
+                  fBkgBinLimit[ibin],fBkgBinLimit[ibin+1], mcPartType[imc].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+            fhSumPtConeBinLambda0MC[binmc]->SetYTitle("#lambda_{0}^{2}");
+            fhSumPtConeBinLambda0MC[binmc]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+            outputContainer->Add(fhSumPtConeBinLambda0MC[binmc]) ;
+          } // MC particle loop
+        }
+        
+      }// pt bin loop
+    } // bkg cone pt bin histograms
+    
+    if(fFillHighMultHistograms)
+    {
+      fhPtInConeCent  = new TH2F("hPtInConeCent",
+                                 Form("#it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                                 100,0,100,nptinconebins,ptinconemin,ptinconemax);
+      fhPtInConeCent->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtInConeCent->SetXTitle("centrality");
+      outputContainer->Add(fhPtInConeCent) ;
+    }
     
     // Cluster only histograms
     if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyCharged)
     {
       fhConeSumPtCluster  = new TH2F("hConePtSumCluster",
-                                     Form("Cluster #Sigma p_{T} in isolation cone for R = %2.2f",r),
+                                     Form("Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
                                      nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtCluster->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtCluster->SetXTitle("p_{T, trigger} (GeV/c)");
+      fhConeSumPtCluster->SetYTitle("#Sigma #it{p}_{T}");
+      fhConeSumPtCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
       outputContainer->Add(fhConeSumPtCluster) ;
       
-      fhConeSumPtCell  = new TH2F("hConePtSumCell",
-                                  Form("Cell #Sigma p_{T} in isolation cone for R = %2.2f",r),
-                                  nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtCell->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtCell->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtCell) ;
-      
-      fhConeSumPtEtaBandUECluster  = new TH2F("hConePtSumEtaBandUECluster",
-                                              "#Sigma cluster p_{T} in UE Eta Band",
-                                              nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaBandUECluster->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
-      
-      fhConeSumPtPhiBandUECluster  = new TH2F("hConePtSumPhiBandUECluster",
-                                              "#Sigma cluster p_{T} UE Phi Band",
-                                              nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiBandUECluster->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
+      fhConePtLeadCluster  = new TH2F("hConeLeadPtCluster",
+                                    Form("Cluster leading in isolation cone for #it{R} =  %2.2f",r),
+                                    nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+      fhConePtLeadCluster->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
+      fhConePtLeadCluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+      outputContainer->Add(fhConePtLeadCluster) ;
+
       
-      fhConeSumPtEtaBandUEClusterTrigEtaPhi  = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
-                                                        "Trigger #eta vs #phi, #Sigma cluster p_{T} in UE Eta Band",
-                                                        netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
+      if(fFillCellHistograms)
+      {
+        fhConeSumPtCell  = new TH2F("hConePtSumCell",
+                                    Form("Cell #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                                    nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+        fhConeSumPtCell->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtCell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtCell) ;
+      }
       
-      fhConeSumPtPhiBandUEClusterTrigEtaPhi  = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
-                                                        "Trigger #eta vs #phi, #Sigma cluster p_{T} UE Phi Band",
-                                                        netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
-      
-      
-      fhConeSumPtEtaBandUECell  = new TH2F("hConePtSumEtaBandUECell",
-                                           "#Sigma cell p_{T} in UE Eta Band",
-                                           nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtEtaBandUECell->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaBandUECell->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaBandUECell) ;
-      
-      fhConeSumPtPhiBandUECell  = new TH2F("hConePtSumPhiBandUECell",
-                                           "#Sigma cell p_{T} UE Phi Band",
-                                           nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtPhiBandUECell->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiBandUECell->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiBandUECell) ;
-      
-      fhConeSumPtEtaBandUECellTrigEtaPhi  = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
-                                                     "Trigger #eta vs #phi, #Sigma cell p_{T} in UE Eta Band",
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
-      
-      fhConeSumPtPhiBandUECellTrigEtaPhi  = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
-                                                     "Trigger #eta vs #phi, #Sigma cell p_{T} UE Phi Band",
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
-
+      if(fFillUEBandSubtractHistograms)
+      {
+        fhConeSumPtEtaBandUECluster  = new TH2F("hConePtSumEtaBandUECluster",
+                                                "#Sigma cluster #it{p}_{T} in UE Eta Band",
+                                                nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+        fhConeSumPtEtaBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtEtaBandUECluster) ;
+        
+        fhConeSumPtPhiBandUECluster  = new TH2F("hConePtSumPhiBandUECluster",
+                                                "#Sigma cluster #it{p}_{T} UE Phi Band",
+                                                nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+        fhConeSumPtPhiBandUECluster->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiBandUECluster->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtPhiBandUECluster) ;
+        
+        fhConeSumPtEtaBandUEClusterTrigEtaPhi  = new TH2F("hConePtSumEtaBandUEClusterTrigEtaPhi",
+                                                          "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} in UE Eta Band",
+                                                          netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtEtaBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtEtaBandUEClusterTrigEtaPhi) ;
+        
+        fhConeSumPtPhiBandUEClusterTrigEtaPhi  = new TH2F("hConePtSumPhiBandUEClusterTrigEtaPhi",
+                                                          "Trigger #eta vs #phi, #Sigma cluster #it{p}_{T} UE Phi Band",
+                                                          netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtPhiBandUEClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtPhiBandUEClusterTrigEtaPhi) ;
+        if(fFillCellHistograms)
+        {
+          
+          fhConeSumPtEtaBandUECell  = new TH2F("hConePtSumEtaBandUECell",
+                                               "#Sigma cell #it{p}_{T} in UE Eta Band",
+                                               nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+          fhConeSumPtEtaBandUECell->SetYTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtEtaBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtEtaBandUECell) ;
+          
+          fhConeSumPtPhiBandUECell  = new TH2F("hConePtSumPhiBandUECell",
+                                               "#Sigma cell #it{p}_{T} UE Phi Band",
+                                               nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+          fhConeSumPtPhiBandUECell->SetYTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtPhiBandUECell->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtPhiBandUECell) ;
+          
+          fhConeSumPtEtaBandUECellTrigEtaPhi  = new TH2F("hConePtSumEtaBandUECellTrigEtaPhi",
+                                                         "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} in UE Eta Band",
+                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhConeSumPtEtaBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtEtaBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhConeSumPtEtaBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhConeSumPtEtaBandUECellTrigEtaPhi) ;
+          
+          fhConeSumPtPhiBandUECellTrigEtaPhi  = new TH2F("hConePtSumPhiBandUECellTrigEtaPhi",
+                                                         "Trigger #eta vs #phi, #Sigma cell #it{p}_{T} UE Phi Band",
+                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhConeSumPtPhiBandUECellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtPhiBandUECellTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhConeSumPtPhiBandUECellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhConeSumPtPhiBandUECellTrigEtaPhi) ;
+        }
+        
+        fhEtaBandCluster  = new TH2F("hEtaBandCluster",
+                                     Form("#eta vs #phi of clusters in #eta band isolation cone for #it{R} =  %2.2f",r),
+                                     netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhEtaBandCluster->SetXTitle("#eta");
+        fhEtaBandCluster->SetYTitle("#phi");
+        outputContainer->Add(fhEtaBandCluster) ;
+        
+        fhPhiBandCluster  = new TH2F("hPhiBandCluster",
+                                     Form("#eta vs #phi of clusters in #phi band isolation cone for #it{R} =  %2.2f",r),
+                                     netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhPhiBandCluster->SetXTitle("#eta");
+        fhPhiBandCluster->SetYTitle("#phi");
+        outputContainer->Add(fhPhiBandCluster) ;
+        
+        fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
+                                        Form("#eta vs #phi of clusters in cone for #it{R} =  %2.2f",r),
+                                        netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhEtaPhiInConeCluster->SetXTitle("#eta");
+        fhEtaPhiInConeCluster->SetYTitle("#phi");
+        outputContainer->Add(fhEtaPhiInConeCluster) ;
+        
+        fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
+                                  Form("#eta vs #phi of all clusters"),
+                                  netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhEtaPhiCluster->SetXTitle("#eta");
+        fhEtaPhiCluster->SetYTitle("#phi");
+        outputContainer->Add(fhEtaPhiCluster) ;
+        
+      }
       
       fhPtClusterInCone  = new TH2F("hPtClusterInCone",
-                                    Form("p_{T} of clusters in isolation cone for R = %2.2f",r),
+                                    Form("#it{p}_{T} of clusters in isolation cone for #it{R} =  %2.2f",r),
                                     nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtClusterInCone->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtClusterInCone->SetXTitle("p_{T} (GeV/c)");
+      fhPtClusterInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtClusterInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
       outputContainer->Add(fhPtClusterInCone) ;
       
-      fhEtaBandCluster  = new TH2F("hEtaBandCluster",
-                                   Form("#eta vs #phi of clusters in #eta band isolation cone for R = %2.2f",r),
-                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhEtaBandCluster->SetXTitle("#eta");
-      fhEtaBandCluster->SetYTitle("#phi");
-      outputContainer->Add(fhEtaBandCluster) ;
-      
-      fhPhiBandCluster  = new TH2F("hPhiBandCluster",
-                                   Form("#eta vs #phi of clusters in #phi band isolation cone for R = %2.2f",r),
-                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhPhiBandCluster->SetXTitle("#eta");
-      fhPhiBandCluster->SetYTitle("#phi");
-      outputContainer->Add(fhPhiBandCluster) ;
-      
-       fhEtaPhiInConeCluster= new TH2F("hEtaPhiInConeCluster",
-                                   Form("#eta vs #phi of clusters in cone for R = %2.2f",r),
-                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhEtaPhiInConeCluster->SetXTitle("#eta");
-      fhEtaPhiInConeCluster->SetYTitle("#phi");
-      outputContainer->Add(fhEtaPhiInConeCluster) ;
-       
-       fhEtaPhiCluster= new TH2F("hEtaPhiCluster",
-                                   Form("#eta vs #phi of all clusters"),
-                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhEtaPhiCluster->SetXTitle("#eta");
-      fhEtaPhiCluster->SetYTitle("#phi");
-      outputContainer->Add(fhEtaPhiCluster) ;
-
-       fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
-                                   Form("#eta vs #phi of Tracks in cone for R = %2.2f",r),
-                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhEtaPhiInConeTrack->SetXTitle("#eta");
-      fhEtaPhiInConeTrack->SetYTitle("#phi");
-      outputContainer->Add(fhEtaPhiInConeTrack) ;
-       
-       fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
-                                   Form("#eta vs #phi of all Tracks"),
-                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhEtaPhiTrack->SetXTitle("#eta");
-      fhEtaPhiTrack->SetYTitle("#phi");
-      outputContainer->Add(fhEtaPhiTrack) ;
-
-    fhPtCellInCone  = new TH2F("hPtCellInCone",
-                                 Form("p_{T} of cells in isolation cone for R = %2.2f",r),
-                                 nptbins,ptmin,ptmax,1000,0,50);
-      fhPtCellInCone->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtCellInCone->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhPtCellInCone) ;
-
-      fhEtaBandCell  = new TH2F("hEtaBandCell",
-                                Form("#col vs #row of cells in #eta band isolation cone for R = %2.2f",r),
-                                96,0,95,128,0,127);
-      fhEtaBandCell->SetXTitle("#col");
-      fhEtaBandCell->SetYTitle("#row");
-      outputContainer->Add(fhEtaBandCell) ;
-      
-      fhPhiBandCell  = new TH2F("hPhiBandCell",
-                                Form("#col vs #row of cells in #phi band isolation cone for R = %2.2f",r),
-                                96,0,95,128,0,127);
-      fhPhiBandCell->SetXTitle("#col");
-      fhPhiBandCell->SetYTitle("#row");
-      outputContainer->Add(fhPhiBandCell) ;
-      
-      fhConeSumPtEtaUESubCluster  = new TH2F("hConeSumPtEtaUESubCluster",
-                                             Form("Clusters #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                             nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubCluster->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
-      
-      fhConeSumPtPhiUESubCluster  = new TH2F("hConeSumPtPhiUESubCluster",
-                                             Form("Clusters #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                             nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubCluster->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
-      
-      fhConeSumPtEtaUESubClusterTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
-                                                       Form("Trigger #eta vs #phi, Clusters #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                                       netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
-      
-      fhConeSumPtPhiUESubClusterTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
-                                                       Form("Trigger #eta vs #phi, Clusters #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                                       netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
-      
-      
-      fhConeSumPtEtaUESubCell  = new TH2F("hConeSumPtEtaUESubCell",
-                                          Form("Cells #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                          nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESubCell->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubCell->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaUESubCell) ;
-      
-      fhConeSumPtPhiUESubCell  = new TH2F("hConeSumPtPhiUESubCell",
-                                          Form("Cells #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                          nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESubCell->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubCell->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiUESubCell) ;
-      
-      fhConeSumPtEtaUESubCellTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
-                                                    Form("Trigger #eta vs #phi, Cells #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                                    netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
-      
-      fhConeSumPtPhiUESubCellTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
-                                                    Form("Trigger #eta vs #phi, Cells #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                                    netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
-      
-      
-      fhFractionClusterOutConeEta  = new TH2F("hFractionClusterOutConeEta",
-                                              Form("Fraction of the isolation cone R = %2.2f, out of clusters #eta acceptance",r),
-                                              nptbins,ptmin,ptmax,100,0,1);
-      fhFractionClusterOutConeEta->SetYTitle("fraction");
-      fhFractionClusterOutConeEta->SetXTitle("p_{T,trigger} (GeV/c)");
-      outputContainer->Add(fhFractionClusterOutConeEta) ;
+      if(fFillCellHistograms)
+      {
+        fhPtCellInCone  = new TH2F("hPtCellInCone",
+                                   Form("#it{p}_{T} of cells in isolation cone for #it{R} =  %2.2f",r),
+                                   nptbins,ptmin,ptmax,1000,0,50);
+        fhPtCellInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+        fhPtCellInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPtCellInCone) ;
+        
+        fhEtaBandCell  = new TH2F("hEtaBandCell",
+                                  Form("#col vs #row of cells in #eta band isolation cone for #it{R} =  %2.2f",r),
+                                  96,0,95,128,0,127);
+        fhEtaBandCell->SetXTitle("#col");
+        fhEtaBandCell->SetYTitle("#row");
+        outputContainer->Add(fhEtaBandCell) ;
+        
+        fhPhiBandCell  = new TH2F("hPhiBandCell",
+                                  Form("#col vs #row of cells in #phi band isolation cone for #it{R} =  %2.2f",r),
+                                  96,0,95,128,0,127);
+        fhPhiBandCell->SetXTitle("#col");
+        fhPhiBandCell->SetYTitle("#row");
+        outputContainer->Add(fhPhiBandCell) ;
+      }
       
-      fhFractionClusterOutConeEtaTrigEtaPhi  = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
-                                                        Form("Fraction of the isolation cone R = %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
+      if(fFillUEBandSubtractHistograms)
+      {
+        fhConeSumPtEtaUESubCluster  = new TH2F("hConeSumPtEtaUESubCluster",
+                                               Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                               nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtEtaUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtEtaUESubCluster) ;
+        
+        fhConeSumPtPhiUESubCluster  = new TH2F("hConeSumPtPhiUESubCluster",
+                                               Form("Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                               nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtPhiUESubCluster->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiUESubCluster->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtPhiUESubCluster) ;
+        
+        fhConeSumPtEtaUESubClusterTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubClusterTrigEtaPhi",
+                                                         Form("Trigger #eta vs #phi, Clusters #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtEtaUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtEtaUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtEtaUESubClusterTrigEtaPhi) ;
+        
+        fhConeSumPtPhiUESubClusterTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubClusterTrigEtaPhi",
+                                                         Form("Trigger #eta vs #phi, Clusters #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtPhiUESubClusterTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiUESubClusterTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtPhiUESubClusterTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtPhiUESubClusterTrigEtaPhi) ;
+        
+        if(fFillCellHistograms)
+        {
+          fhConeSumPtEtaUESubCell  = new TH2F("hConeSumPtEtaUESubCell",
+                                              Form("Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                              nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtEtaUESubCell->SetYTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtEtaUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtEtaUESubCell) ;
+          
+          fhConeSumPtPhiUESubCell  = new TH2F("hConeSumPtPhiUESubCell",
+                                              Form("Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                              nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtPhiUESubCell->SetYTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtPhiUESubCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtPhiUESubCell) ;
+          
+          fhConeSumPtEtaUESubCellTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubCellTrigEtaPhi",
+                                                        Form("Trigger #eta vs #phi, Cells #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("fraction");
-      fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
-      
-      fhFractionClusterOutConePhi  = new TH2F("hFractionClusterOutConePhi",
-                                              Form("Fraction of the isolation cone R = %2.2f, out of clusters #phi acceptance",r),
-                                              nptbins,ptmin,ptmax,100,0,1);
-      fhFractionClusterOutConePhi->SetYTitle("fraction");
-      fhFractionClusterOutConePhi->SetXTitle("p_{T,trigger} (GeV/c)");
-      outputContainer->Add(fhFractionClusterOutConePhi) ;
-      
-      fhFractionClusterOutConePhiTrigEtaPhi  = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
-                                                        Form("Fraction of the isolation cone R = %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
+          fhConeSumPtEtaUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtEtaUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhConeSumPtEtaUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhConeSumPtEtaUESubCellTrigEtaPhi) ;
+          
+          fhConeSumPtPhiUESubCellTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubCellTrigEtaPhi",
+                                                        Form("Trigger #eta vs #phi, Cells #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("fraction");
-      fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
-      
-      fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
-                                                        Form("#Sigma p_{T} in cone after bkg sub from #phi band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                        nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma p_{T, sub} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
-      
-      fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
-                                                            Form("#Sigma p_{T, norm} in cone after bkg sub from #phi band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                            nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma p_{T, sub norm} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
-      
-      fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
-                                                        Form("#Sigma p_{T} in cone after bkg sub from #eta band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                        nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma p_{T, sub} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
-      
-      fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
-                                                            Form("#Sigma p_{T, norm} in cone after bkg sub from #eta band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                            nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma p_{T, sub norm} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
-
-      
-      fhFractionCellOutConeEta  = new TH2F("hFractionCellOutConeEta",
-                                           Form("Fraction of the isolation cone R = %2.2f, out of cells #eta acceptance",r),
-                                           nptbins,ptmin,ptmax,100,0,1);
-      fhFractionCellOutConeEta->SetYTitle("fraction");
-      fhFractionCellOutConeEta->SetXTitle("p_{T,trigger} (GeV/c)");
-      outputContainer->Add(fhFractionCellOutConeEta) ;
-      
-      fhFractionCellOutConeEtaTrigEtaPhi  = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
-                                                     Form("Fraction of the isolation cone R = %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("fraction");
-      fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
-      
-      fhFractionCellOutConePhi  = new TH2F("hFractionCellOutConePhi",
-                                           Form("Fraction of the isolation cone R = %2.2f, out of cells #phi acceptance",r),
-                                           nptbins,ptmin,ptmax,100,0,1);
-      fhFractionCellOutConePhi->SetYTitle("fraction");
-      fhFractionCellOutConePhi->SetXTitle("p_{T,trigger} (GeV/c)");
-      outputContainer->Add(fhFractionCellOutConePhi) ;
-      
-      fhFractionCellOutConePhiTrigEtaPhi  = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
-                                                     Form("Fraction of the isolation cone R = %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("fraction");
-      fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
-      
-      
-      fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
-                                                     Form("#Sigma p_{T} in cone after bkg sub from #phi band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                     nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma p_{T, sub} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
-      
-      fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
-                                                         Form("#Sigma p_{T, norm} in cone after bkg sub from #phi band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
+          fhConeSumPtPhiUESubCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtPhiUESubCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhConeSumPtPhiUESubCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhConeSumPtPhiUESubCellTrigEtaPhi) ;
+        }
+        
+        fhFractionClusterOutConeEta  = new TH2F("hFractionClusterOutConeEta",
+                                                Form("Fraction of the isolation cone #it{R} =  %2.2f, out of clusters #eta acceptance",r),
+                                                nptbins,ptmin,ptmax,100,0,1);
+        fhFractionClusterOutConeEta->SetYTitle("#it{fraction}");
+        fhFractionClusterOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
+        outputContainer->Add(fhFractionClusterOutConeEta) ;
+        
+        fhFractionClusterOutConeEtaTrigEtaPhi  = new TH2F("hFractionClusterOutConeEtaTrigEtaPhi",
+                                                          Form("Fraction of the isolation cone #it{R} =  %2.2f, out of clusters #eta acceptance, in trigger #eta-#phi ",r),
+                                                          netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhFractionClusterOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
+        fhFractionClusterOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhFractionClusterOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhFractionClusterOutConeEtaTrigEtaPhi) ;
+        
+        fhFractionClusterOutConePhi  = new TH2F("hFractionClusterOutConePhi",
+                                                Form("Fraction of the isolation cone #it{R} =  %2.2f, out of clusters #phi acceptance",r),
+                                                nptbins,ptmin,ptmax,100,0,1);
+        fhFractionClusterOutConePhi->SetYTitle("#it{fraction}");
+        fhFractionClusterOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
+        outputContainer->Add(fhFractionClusterOutConePhi) ;
+        
+        fhFractionClusterOutConePhiTrigEtaPhi  = new TH2F("hFractionClusterOutConePhiTrigEtaPhi",
+                                                          Form("Fraction of the isolation cone #it{R} =  %2.2f, out of clusters #phi acceptance, in trigger #eta-#phi ",r),
+                                                          netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhFractionClusterOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
+        fhFractionClusterOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhFractionClusterOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhFractionClusterOutConePhiTrigEtaPhi) ;
+        
+        fhConeSumPtSubvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCluster",
+                                                          Form("#Sigma #it{p}_{T} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                          nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCluster);
+        
+        fhConeSumPtSubNormvsConeSumPtTotPhiCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCluster",
+                                                              Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                              nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubNormvsConeSumPtTotPhiCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCluster);
+        
+        fhConeSumPtSubvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCluster",
+                                                          Form("#Sigma #it{p}_{T} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                          nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCluster);
+        
+        fhConeSumPtSubNormvsConeSumPtTotEtaCluster = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCluster",
+                                                              Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                              nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubNormvsConeSumPtTotEtaCluster->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCluster);
+        
+        fhConeSumPtVSUEClusterEtaBand  = new TH2F("hConeSumPtVSUEClusterEtaBand",
+                                                  Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for cluster (before normalization), R=%2.2f",r),
+                                                  nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
+        fhConeSumPtVSUEClusterEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
+        fhConeSumPtVSUEClusterEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtVSUEClusterEtaBand);
+        
+        fhConeSumPtVSUEClusterPhiBand  = new TH2F("hConeSumPtVSUEClusterPhiBand",
+                                                  Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for cluster (before normalization), R=%2.2f",r),
+                                                  nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
+        fhConeSumPtVSUEClusterPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
+        fhConeSumPtVSUEClusterPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtVSUEClusterPhiBand);
+        
+        if(fFillCellHistograms)
+        {
+          fhFractionCellOutConeEta  = new TH2F("hFractionCellOutConeEta",
+                                               Form("Fraction of the isolation cone #it{R} =  %2.2f, out of cells #eta acceptance",r),
+                                               nptbins,ptmin,ptmax,100,0,1);
+          fhFractionCellOutConeEta->SetYTitle("#it{fraction}");
+          fhFractionCellOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
+          outputContainer->Add(fhFractionCellOutConeEta) ;
+          
+          fhFractionCellOutConeEtaTrigEtaPhi  = new TH2F("hFractionCellOutConeEtaTrigEtaPhi",
+                                                         Form("Fraction of the isolation cone #it{R} =  %2.2f, out of cells #eta acceptance, in trigger #eta-#phi ",r),
+                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhFractionCellOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
+          fhFractionCellOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhFractionCellOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhFractionCellOutConeEtaTrigEtaPhi) ;
+          
+          fhFractionCellOutConePhi  = new TH2F("hFractionCellOutConePhi",
+                                               Form("Fraction of the isolation cone #it{R} =  %2.2f, out of cells #phi acceptance",r),
+                                               nptbins,ptmin,ptmax,100,0,1);
+          fhFractionCellOutConePhi->SetYTitle("#it{fraction}");
+          fhFractionCellOutConePhi->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
+          outputContainer->Add(fhFractionCellOutConePhi) ;
+          
+          fhFractionCellOutConePhiTrigEtaPhi  = new TH2F("hFractionCellOutConePhiTrigEtaPhi",
+                                                         Form("Fraction of the isolation cone #it{R} =  %2.2f, out of cells #phi acceptance, in trigger #eta-#phi ",r),
+                                                         netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhFractionCellOutConePhiTrigEtaPhi->SetZTitle("#it{fraction}");
+          fhFractionCellOutConePhiTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhFractionCellOutConePhiTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhFractionCellOutConePhiTrigEtaPhi) ;
+          
+          
+          fhConeSumPtSubvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubvsConeSumPtTotPhiCell",
+                                                         Form("#Sigma #it{p}_{T} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
                                                          nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma p_{T, sub norm} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
-      
-      fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
-                                                     Form("#Sigma p_{T} in cone after bkg sub from #eta band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                     nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma p_{T, sub} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
-      
-      fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
-                                                         Form("#Sigma p_{T, norm} in cone after bkg sub from #eta band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
+          fhConeSumPtSubvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+          fhConeSumPtSubvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiCell);
+          
+          fhConeSumPtSubNormvsConeSumPtTotPhiCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiCell",
+                                                             Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                             nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+          fhConeSumPtSubNormvsConeSumPtTotPhiCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiCell);
+          
+          fhConeSumPtSubvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubvsConeSumPtTotEtaCell",
+                                                         Form("#Sigma #it{p}_{T} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
                                                          nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma p_{T, sub norm} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
-      
+          fhConeSumPtSubvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+          fhConeSumPtSubvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaCell);
+          
+          fhConeSumPtSubNormvsConeSumPtTotEtaCell = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaCell",
+                                                             Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                             nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+          fhConeSumPtSubNormvsConeSumPtTotEtaCell->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaCell);
+        }
+      }
     }
     
     // Track only histograms
     if(GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
     {
       fhConeSumPtTrack  = new TH2F("hConePtSumTrack",
-                                   Form("Track #Sigma p_{T} in isolation cone for R = %2.2f",r),
+                                   Form("Track #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
                                    nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtTrack->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtTrack->SetXTitle("p_{T, trigger} (GeV/c)");
+      fhConeSumPtTrack->SetYTitle("#Sigma #it{p}_{T}");
+      fhConeSumPtTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
       outputContainer->Add(fhConeSumPtTrack) ;
-      
-      
-      fhConeSumPtEtaBandUETrack  = new TH2F("hConePtSumEtaBandUETrack",
-                                            "#Sigma track p_{T} in UE Eta Band",
-                                            nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaBandUETrack->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
-      
-      fhConeSumPtPhiBandUETrack  = new TH2F("hConePtSumPhiBandUETrack",
-                                            "#Sigma track p_{T} in UE Phi Band",
-                                            nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
-      fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiBandUETrack->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
-      
-      
-      fhConeSumPtEtaBandUETrackTrigEtaPhi  = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
-                                                      "Trigger #eta vs #phi, #Sigma track p_{T} in UE Eta Band",
-                                                      netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
-      
-      fhConeSumPtPhiBandUETrackTrigEtaPhi  = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
-                                                      "Trigger #eta vs #phi, #Sigma track p_{T} in UE Phi Band",
-                                                      netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
-      
+
+      fhConePtLeadTrack  = new TH2F("hConeLeadPtTrack",
+                                   Form("Track leading in isolation cone for #it{R} =  %2.2f",r),
+                                   nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+      fhConePtLeadTrack->SetYTitle("#it{p}_{T, leading} (GeV/#it{c})");
+      fhConePtLeadTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+      outputContainer->Add(fhConePtLeadTrack) ;
       
       fhPtTrackInCone  = new TH2F("hPtTrackInCone",
-                                  Form("p_{T} of tracks in isolation cone for R = %2.2f",r),
+                                  Form("#it{p}_{T} of tracks in isolation cone for #it{R} =  %2.2f",r),
                                   nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtTrackInCone->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtTrackInCone->SetXTitle("p_{T} (GeV/c)");
+      fhPtTrackInCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtTrackInCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
       outputContainer->Add(fhPtTrackInCone) ;
       
       
-      fhEtaBandTrack  = new TH2F("hEtaBandTrack",
-                                 Form("#eta vs #phi of tracks in #eta band isolation cone for R = %2.2f",r),
-                                 netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhEtaBandTrack->SetXTitle("#eta");
-      fhEtaBandTrack->SetYTitle("#phi");
-      outputContainer->Add(fhEtaBandTrack) ;
-      
-      fhPhiBandTrack  = new TH2F("hPhiBandTrack",
-                                 Form("#eta vs #phi of tracks in #phi band isolation cone for R = %2.2f",r),
-                                 netabins,-1,1,nphibins,0,TMath::TwoPi());
-      fhPhiBandTrack->SetXTitle("#eta");
-      fhPhiBandTrack->SetYTitle("#phi");
-      outputContainer->Add(fhPhiBandTrack) ;
-      
-      
-      fhConeSumPtEtaUESubTrack  = new TH2F("hConeSumPtEtaUESubTrack",
-                                           Form("Tracks #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                           nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubTrack->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
-      
-      fhConeSumPtPhiUESubTrack  = new TH2F("hConeSumPtPhiUESubTrack",
-                                           Form("Tracks #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                           nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubTrack->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
-      
-      fhConeSumPtEtaUESubTrackTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
-                                                     Form("Trigger #eta vs #phi, Tracks #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
-      
-      fhConeSumPtPhiUESubTrackTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
-                                                     Form("Trigger #eta vs #phi, Tracks #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
-      
-      fhFractionTrackOutConeEta  = new TH2F("hFractionTrackOutConeEta",
-                                            Form("Fraction of the isolation cone R = %2.2f, out of tracks #eta acceptance",r),
-                                            nptbins,ptmin,ptmax,100,0,1);
-      fhFractionTrackOutConeEta->SetYTitle("fraction");
-      fhFractionTrackOutConeEta->SetXTitle("p_{T,trigger} (GeV/c)");
-      outputContainer->Add(fhFractionTrackOutConeEta) ;
-      
-      fhFractionTrackOutConeEtaTrigEtaPhi  = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
-                                                      Form("Fraction of the isolation cone R = %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
-                                                      netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("fraction");
-      fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
-      
-      fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
-                                                      Form("#Sigma p_{T} in cone after bkg sub from #phi band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                      nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma p_{T, sub} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
-      
-      fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
-                                                          Form("#Sigma p_{T, norm} in cone after bkg sub from #phi band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                          nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma p_{T, sub norm} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
-      
-      fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
-                                                      Form("#Sigma p_{T} in cone after bkg sub from #eta band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                      nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma p_{T, sub} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
-      
-      fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
-                                                          Form("#Sigma p_{T, norm} in cone after bkg sub from #eta band vs #Sigma p_{T} in cone before bkg sub, R=%2.2f",r),
-                                                          nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma p_{T, tot} (GeV/c)");
-      fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma p_{T, sub norm} (GeV/c)");
-      outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
-      
-      // UE in perpendicular cone
-      fhPerpConeSumPt  = new TH2F("hPerpConePtSum",
-                                  Form("#Sigma p_{T} in isolation cone at #pm 45 degree phi from trigger particle, R = %2.2f",r),
-                                  nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhPerpConeSumPt->SetYTitle("#Sigma p_{T}");
-      fhPerpConeSumPt->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhPerpConeSumPt) ;
-      
-      fhPtInPerpCone  = new TH2F("hPtInPerpCone",
-                                 Form("p_{T} in isolation cone at #pm 45 degree phi from trigger particle, R = %2.2f",r),
-                                 nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtInPerpCone->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtInPerpCone->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhPtInPerpCone) ;
+      if(fFillUEBandSubtractHistograms)
+      {
+        fhConeSumPtEtaBandUETrack  = new TH2F("hConePtSumEtaBandUETrack",
+                                              "#Sigma track #it{p}_{T} in UE Eta Band",
+                                              nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+        fhConeSumPtEtaBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtEtaBandUETrack) ;
+        
+        fhConeSumPtPhiBandUETrack  = new TH2F("hConePtSumPhiBandUETrack",
+                                              "#Sigma track #it{p}_{T} in UE Phi Band",
+                                              nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax*8);
+        fhConeSumPtPhiBandUETrack->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiBandUETrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtPhiBandUETrack) ;
+        
+        
+        fhConeSumPtEtaBandUETrackTrigEtaPhi  = new TH2F("hConePtSumEtaBandUETrackTrigEtaPhi",
+                                                        "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Eta Band",
+                                                        netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtEtaBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtEtaBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtEtaBandUETrackTrigEtaPhi) ;
+        
+        fhConeSumPtPhiBandUETrackTrigEtaPhi  = new TH2F("hConePtSumPhiBandUETrackTrigEtaPhi",
+                                                        "Trigger #eta vs #phi, #Sigma track #it{p}_{T} in UE Phi Band",
+                                                        netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtPhiBandUETrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiBandUETrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtPhiBandUETrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtPhiBandUETrackTrigEtaPhi) ;
+        
+        fhEtaBandTrack  = new TH2F("hEtaBandTrack",
+                                   Form("#eta vs #phi of tracks in #eta band isolation cone for #it{R} =  %2.2f",r),
+                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhEtaBandTrack->SetXTitle("#eta");
+        fhEtaBandTrack->SetYTitle("#phi");
+        outputContainer->Add(fhEtaBandTrack) ;
+        
+        fhPhiBandTrack  = new TH2F("hPhiBandTrack",
+                                   Form("#eta vs #phi of tracks in #phi band isolation cone for #it{R} =  %2.2f",r),
+                                   netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhPhiBandTrack->SetXTitle("#eta");
+        fhPhiBandTrack->SetYTitle("#phi");
+        outputContainer->Add(fhPhiBandTrack) ;
+        
+        fhConeSumPtEtaUESubTrack  = new TH2F("hConeSumPtEtaUESubTrack",
+                                             Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                             nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtEtaUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtEtaUESubTrack) ;
+        
+        fhConeSumPtPhiUESubTrack  = new TH2F("hConeSumPtPhiUESubTrack",
+                                             Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                             nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtPhiUESubTrack->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiUESubTrack->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtPhiUESubTrack) ;
+        
+        fhConeSumPtEtaUESubTrackTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubTrackTrigEtaPhi",
+                                                       Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                                       netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtEtaUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtEtaUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtEtaUESubTrackTrigEtaPhi) ;
+        
+        fhConeSumPtPhiUESubTrackTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubTrackTrigEtaPhi",
+                                                       Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                                       netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtPhiUESubTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiUESubTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtPhiUESubTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtPhiUESubTrackTrigEtaPhi) ;
+        
+        fhFractionTrackOutConeEta  = new TH2F("hFractionTrackOutConeEta",
+                                              Form("Fraction of the isolation cone #it{R} =  %2.2f, out of tracks #eta acceptance",r),
+                                              nptbins,ptmin,ptmax,100,0,1);
+        fhFractionTrackOutConeEta->SetYTitle("#it{fraction}");
+        fhFractionTrackOutConeEta->SetXTitle("#it{p}_{T,trigger} (GeV/#it{c})");
+        outputContainer->Add(fhFractionTrackOutConeEta) ;
+        
+        fhFractionTrackOutConeEtaTrigEtaPhi  = new TH2F("hFractionTrackOutConeEtaTrigEtaPhi",
+                                                        Form("Fraction of the isolation cone #it{R} =  %2.2f, out of tracks #eta acceptance, in trigger #eta-#phi ",r),
+                                                        netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhFractionTrackOutConeEtaTrigEtaPhi->SetZTitle("#it{fraction}");
+        fhFractionTrackOutConeEtaTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhFractionTrackOutConeEtaTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhFractionTrackOutConeEtaTrigEtaPhi) ;
+        
+        fhConeSumPtSubvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubvsConeSumPtTotPhiTrack",
+                                                        Form("#Sigma #it{p}_{T} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                        nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubvsConeSumPtTotPhiTrack);
+        
+        fhConeSumPtSubNormvsConeSumPtTotPhiTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotPhiTrack",
+                                                            Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #phi band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                            nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubNormvsConeSumPtTotPhiTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotPhiTrack);
+        
+        fhConeSumPtSubvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubvsConeSumPtTotEtaTrack",
+                                                        Form("#Sigma #it{p}_{T} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                        nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubvsConeSumPtTotEtaTrack);
+        
+        fhConeSumPtSubNormvsConeSumPtTotEtaTrack = new TH2F("hConeSumPtSubNormvsConeSumPtTotEtaTrack",
+                                                            Form("#Sigma #it{p}_{T, norm} in cone after bkg sub from #eta band vs #Sigma #it{p}_{T} in cone before bkg sub, R=%2.2f",r),
+                                                            nptsumbins,ptsummin,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetXTitle("#Sigma #it{p}_{T, tot} (GeV/#it{c})");
+        fhConeSumPtSubNormvsConeSumPtTotEtaTrack->SetYTitle("#Sigma #it{p}_{T, sub norm} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtSubNormvsConeSumPtTotEtaTrack);
+        
+        
+        // UE in perpendicular cone
+        fhPerpConeSumPt  = new TH2F("hPerpConePtSum",
+                                    Form("#Sigma #it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} =  %2.2f",r),
+                                    nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+        fhPerpConeSumPt->SetYTitle("#Sigma #it{p}_{T}");
+        fhPerpConeSumPt->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPerpConeSumPt) ;
+        
+        fhPtInPerpCone  = new TH2F("hPtInPerpCone",
+                                   Form("#it{p}_{T} in isolation cone at #pm 45 degree phi from trigger particle, #it{R} =  %2.2f",r),
+                                   nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
+        fhPtInPerpCone->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+        fhPtInPerpCone->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPtInPerpCone) ;
+        
+        fhEtaPhiTrack= new TH2F("hEtaPhiTrack",
+                                Form("#eta vs #phi of all Tracks"),
+                                netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhEtaPhiTrack->SetXTitle("#eta");
+        fhEtaPhiTrack->SetYTitle("#phi");
+        outputContainer->Add(fhEtaPhiTrack) ;
+        
+        fhEtaPhiInConeTrack= new TH2F("hEtaPhiInConeTrack",
+                                      Form("#eta vs #phi of Tracks in cone for #it{R} =  %2.2f",r),
+                                      netabins,-1,1,nphibins,0,TMath::TwoPi());
+        fhEtaPhiInConeTrack->SetXTitle("#eta");
+        fhEtaPhiInConeTrack->SetYTitle("#phi");
+        outputContainer->Add(fhEtaPhiInConeTrack) ;
+        
+        fhConeSumPtVSUETracksEtaBand  = new TH2F("hConeSumPtVSUETracksEtaBand",
+                                                 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in eta band for tracks (before normalization), R=%2.2f",r),
+                                                 nptsumbins,ptsummin,ptsummax,2*nptsumbins,ptsummin,2*ptsummax);
+        fhConeSumPtVSUETracksEtaBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
+        fhConeSumPtVSUETracksEtaBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtVSUETracksEtaBand);
+        
+        fhConeSumPtVSUETracksPhiBand  = new TH2F("hConeSumPtVSUETracksPhiBand",
+                                                 Form("#Sigma #it{p}_{T} in cone versus #Sigma #it{p}_{T} in phi band for tracks (before normalization), R=%2.2f",r),
+                                                 nptsumbins,ptsummin,ptsummax,8*nptsumbins,ptsummin,8*ptsummax);
+        fhConeSumPtVSUETracksPhiBand->SetXTitle("#Sigma #it{p}_{T} cone (GeV/#it{c})");
+        fhConeSumPtVSUETracksPhiBand->SetYTitle("#Sigma #it{p}_{T} UE (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtVSUETracksPhiBand);
+      }
     }
     
-    if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
+    if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged )
     {
-      fhConeSumPtEtaUESub  = new TH2F("hConeSumPtEtaUESub",
-                                      Form("#Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                      nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESub->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESub->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaUESub) ;
-      
-      fhConeSumPtPhiUESub  = new TH2F("hConeSumPtPhiUESub",
-                                      Form("#Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                      nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESub->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESub->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiUESub) ;
-      
-      fhConeSumPtEtaUESubTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
-                                                Form("Trigger #eta vs #phi, #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                                netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
-      
-      fhConeSumPtPhiUESubTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
-                                                Form("Trigger #eta vs #phi, #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                                netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
-      
       fhConeSumPtClustervsTrack   = new TH2F("hConePtSumClustervsTrack",
-                                             Form("Track vs Cluster #Sigma p_{T} in isolation cone for R = %2.2f",r),
+                                             Form("Track vs Cluster #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
                                              nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhConeSumPtClustervsTrack->SetYTitle("#Sigma p_{T} track");
+      fhConeSumPtClustervsTrack->SetXTitle("#Sigma #it{p}_{T}^{cluster} (GeV/#it{c})");
+      fhConeSumPtClustervsTrack->SetYTitle("#Sigma #it{p}_{T}^{track} (GeV/#it{c})");
       outputContainer->Add(fhConeSumPtClustervsTrack) ;
-      
-      fhConeSumPtEtaUESubClustervsTrack   = new TH2F("hConePtSumEtaUESubClustervsTrack",
-                                                     Form("Track vs Cluster #Sigma p_{T} UE sub eta band in isolation cone for R = %2.2f",r),
-                                                     2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
-      
-      fhConeSumPtPhiUESubClustervsTrack   = new TH2F("hConePhiUESubPtSumClustervsTrack",
-                                                     Form("Track vs Cluster #Sigma p_{T} UE sub phi band in isolation cone for R = %2.2f",r),
-                                                     2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
-      
-      fhEtaBandClustervsTrack   = new TH2F("hEtaBandClustervsTrack",
-                                           "Track vs Cluster #Sigma p_{T} in Eta band in isolation cone for R = %2.2f",
-                                           nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhEtaBandClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhEtaBandClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhEtaBandClustervsTrack) ;
-      
-      fhPhiBandClustervsTrack   = new TH2F("hPhiBandClustervsTrack",
-                                           "Track vs Cluster #Sigma p_{T} in Phi band in isolation cone for R = %2.2f",
-                                           nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
-      fhPhiBandClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhPhiBandClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhPhiBandClustervsTrack) ;
-      
-      fhEtaBandNormClustervsTrack   = new TH2F("hEtaBandNormClustervsTrack",
-                                               "Track vs Cluster #Sigma p_{T} in Eta band in isolation cone for R = %2.2f",
-                                               nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhEtaBandNormClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhEtaBandNormClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhEtaBandNormClustervsTrack) ;
-      
-      fhPhiBandNormClustervsTrack   = new TH2F("hPhiBandNormClustervsTrack",
-                                               "Track vs Cluster #Sigma p_{T} in Phi band in isolation cone for R = %2.2f",
-                                               nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhPhiBandNormClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhPhiBandNormClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhPhiBandNormClustervsTrack) ;
-      
-            
-      fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
-                                      Form("Track and Cell #Sigma p_{T} in isolation cone for R = %2.2f",r),
-                                      nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtCellTrack->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtCellTrack->SetXTitle("p_{T, trigger} (GeV/c)");
-      outputContainer->Add(fhConeSumPtCellTrack) ;
 
-      fhConeSumPtCellTrackTrigEtaPhi  = new TH2F("hConePtSumCellTrackTrigEtaPhi",
-                                                 Form("Trigger #eta vs #phi, #Sigma p_{T} in isolation cone for R = %2.2f",r),
-                                                 netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
+      fhConeSumPtClusterTrackFrac   = new TH2F("hConePtSumClusterTrackFraction",
+                                             Form("#Sigma #it{p}_{T}^{cluster}/#Sigma #it{p}_{T}^{track} in isolation cone for #it{R} =  %2.2f",r),
+                                             nptbins,ptmin,ptmax,200,0,5);
+      fhConeSumPtClusterTrackFrac->SetYTitle("#Sigma #it{p}^{cluster}_{T} /#Sigma #it{p}_{T}^{track}");
+      fhConeSumPtClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhConeSumPtClusterTrackFrac) ;
 
       
-      fhConeSumPtEtaUESubClustervsTrack   = new TH2F("hConePtSumEtaUESubClustervsTrack",
-                                                     Form("Track vs Cluster #Sigma p_{T} UE sub eta band in isolation cone for R = %2.2f",r),
-                                                     2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
-      
-      fhConeSumPtPhiUESubClustervsTrack   = new TH2F("hConePhiUESubPtSumClustervsTrack",
-                                                     Form("Track vs Cluster #Sigma p_{T} UE sub phi band in isolation cone for R = %2.2f",r),
-                                                     2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma p_{T} cluster");
-      fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
-      
-      fhConeSumPtCellvsTrack   = new TH2F("hConePtSumCellvsTrack",
-                                             Form("Track vs cell #Sigma p_{T} in isolation cone for R = %2.2f",r),
-                                             nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhConeSumPtCellvsTrack->SetXTitle("#Sigma p_{T} cell");
-      fhConeSumPtCellvsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhConeSumPtCellvsTrack) ;
-      
-      fhConeSumPtEtaUESubCellvsTrack   = new TH2F("hConePtSumEtaUESubCellvsTrack",
-                                                  Form("Track vs Cell #Sigma p_{T} UE sub eta band in isolation cone for R = %2.2f",r),
-                                                  2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma p_{T} cell");
-      fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
-      
-      fhConeSumPtPhiUESubCellvsTrack   = new TH2F("hConePhiUESubPtSumCellvsTrack",
-                                                  Form("Track vs Cell #Sigma p_{T} UE sub phi band in isolation cone for R = %2.2f",r),
-                                                  2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma p_{T} cell");
-      fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
-      
-      fhEtaBandCellvsTrack   = new TH2F("hEtaBandCellvsTrack",
-                                        "Track vs Cell #Sigma p_{T} in Eta band in isolation cone for R = %2.2f",
-                                        nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhEtaBandCellvsTrack->SetXTitle("#Sigma p_{T} cell");
-      fhEtaBandCellvsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhEtaBandCellvsTrack) ;
-      
-      fhPhiBandCellvsTrack   = new TH2F("hPhiBandCellvsTrack",
-                                        "Track vs Cell #Sigma p_{T} in Phi band in isolation cone for R = %2.2f",
-                                        nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
-      fhPhiBandCellvsTrack->SetXTitle("#Sigma p_{T} cell");
-      fhPhiBandCellvsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhPhiBandCellvsTrack) ;
+      fhConePtLeadClustervsTrack   = new TH2F("hConePtLeadClustervsTrack",
+                                             Form("Track vs Cluster lead #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                                             nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+      fhConePtLeadClustervsTrack->SetXTitle("#it{p}^{leading cluster}_{T} (GeV/#it{c})");
+      fhConePtLeadClustervsTrack->SetYTitle("#it{p}^{leading track}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhConePtLeadClustervsTrack) ;
+      
+      fhConePtLeadClusterTrackFrac   = new TH2F("hConePtLeadClusterTrackFraction",
+                                               Form(" #it{p}^{leading cluster}_{T}/#it{p}^{leading track}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                                               nptbins,ptmin,ptmax,200,0,5);
+      fhConePtLeadClusterTrackFrac->SetYTitle("#it{p}^{leading cluster}_{T}/ #it{p}^{leading track}_{T}");
+      fhConePtLeadClusterTrackFrac->SetXTitle("#it{p}^{trigger}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhConePtLeadClusterTrackFrac) ;
 
-      fhEtaBandNormCellvsTrack   = new TH2F("hEtaBandNormCellvsTrack",
-                                            "Track vs Cell #Sigma p_{T} in Eta band in isolation cone for R = %2.2f",
+      
+      if(fFillCellHistograms)
+      {
+        fhConeSumPtCellvsTrack   = new TH2F("hConePtSumCellvsTrack",
+                                            Form("Track vs cell #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
                                             nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhEtaBandNormCellvsTrack->SetXTitle("#Sigma p_{T} cell");
-      fhEtaBandNormCellvsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhEtaBandNormCellvsTrack) ;
+        fhConeSumPtCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
+        fhConeSumPtCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhConeSumPtCellvsTrack) ;
+        
+        fhConeSumPtCellTrack = new TH2F("hConePtSumCellTrack",
+                                        Form("Track and Cell #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                                        nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+        fhConeSumPtCellTrack->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtCellTrack->SetXTitle("#it{p}_{T, trigger} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtCellTrack) ;
+        
+        fhConeSumPtCellTrackTrigEtaPhi  = new TH2F("hConePtSumCellTrackTrigEtaPhi",
+                                                   Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",r),
+                                                   netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtCellTrackTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtCellTrackTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtCellTrackTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtCellTrackTrigEtaPhi) ;
+        
+      }
       
-      fhPhiBandNormCellvsTrack   = new TH2F("hPhiBandNormCellvsTrack",
-                                            "Track vs Cell #Sigma p_{T} in Phi band in isolation cone for R = %2.2f",
+      if(fFillUEBandSubtractHistograms)
+      {
+        fhConeSumPtEtaUESub  = new TH2F("hConeSumPtEtaUESub",
+                                        Form("#Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                        nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtEtaUESub->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtEtaUESub) ;
+        
+        fhConeSumPtPhiUESub  = new TH2F("hConeSumPtPhiUESub",
+                                        Form("#Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                        nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtPhiUESub->SetYTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiUESub->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhConeSumPtPhiUESub) ;
+        
+        fhConeSumPtEtaUESubTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubTrigEtaPhi",
+                                                  Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                                  netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtEtaUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtEtaUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtEtaUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtEtaUESubTrigEtaPhi) ;
+        
+        fhConeSumPtPhiUESubTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubTrigEtaPhi",
+                                                  Form("Trigger #eta vs #phi, #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                                  netabins,etamin,etamax,nphibins,phimin,phimax);
+        fhConeSumPtPhiUESubTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+        fhConeSumPtPhiUESubTrigEtaPhi->SetXTitle("#eta_{trigger}");
+        fhConeSumPtPhiUESubTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+        outputContainer->Add(fhConeSumPtPhiUESubTrigEtaPhi) ;
+        
+        fhConeSumPtEtaUESubClustervsTrack   = new TH2F("hConePtSumEtaUESubClustervsTrack",
+                                                       Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} =  %2.2f",r),
+                                                       2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
+        
+        fhConeSumPtPhiUESubClustervsTrack   = new TH2F("hConePhiUESubPtSumClustervsTrack",
+                                                       Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} =  %2.2f",r),
+                                                       2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
+        
+        fhEtaBandClustervsTrack   = new TH2F("hEtaBandClustervsTrack",
+                                             Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} =  %2.2f",r),
+                                             nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
+        fhEtaBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhEtaBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhEtaBandClustervsTrack) ;
+        
+        fhPhiBandClustervsTrack   = new TH2F("hPhiBandClustervsTrack",
+                                             Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} =  %2.2f",r),
+                                             nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
+        fhPhiBandClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhPhiBandClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhPhiBandClustervsTrack) ;
+        
+        fhEtaBandNormClustervsTrack   = new TH2F("hEtaBandNormClustervsTrack",
+                                                 Form("Track vs Cluster #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} =  %2.2f",r),
+                                                 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
+        fhEtaBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhEtaBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhEtaBandNormClustervsTrack) ;
+        
+        fhPhiBandNormClustervsTrack   = new TH2F("hPhiBandNormClustervsTrack",
+                                                 Form("Track vs Cluster #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} =  %2.2f",r),
+                                                 nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
+        fhPhiBandNormClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhPhiBandNormClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhPhiBandNormClustervsTrack) ;
+        
+        fhConeSumPtEtaUESubClustervsTrack   = new TH2F("hConePtSumEtaUESubClustervsTrack",
+                                                       Form("Track vs Cluster #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} =  %2.2f",r),
+                                                       2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtEtaUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhConeSumPtEtaUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhConeSumPtEtaUESubClustervsTrack) ;
+        
+        fhConeSumPtPhiUESubClustervsTrack   = new TH2F("hConePhiUESubPtSumClustervsTrack",
+                                                       Form("Track vs Cluster #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} =  %2.2f",r),
+                                                       2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+        fhConeSumPtPhiUESubClustervsTrack->SetXTitle("#Sigma #it{p}_{T} cluster");
+        fhConeSumPtPhiUESubClustervsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+        outputContainer->Add(fhConeSumPtPhiUESubClustervsTrack) ;
+        
+        if(fFillCellHistograms)
+        {
+          
+          fhConeSumPtEtaUESubCellvsTrack   = new TH2F("hConePtSumEtaUESubCellvsTrack",
+                                                      Form("Track vs Cell #Sigma #it{p}_{T} UE sub eta band in isolation cone for #it{R} =  %2.2f",r),
+                                                      2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtEtaUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
+          fhConeSumPtEtaUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+          outputContainer->Add(fhConeSumPtEtaUESubCellvsTrack) ;
+          
+          fhConeSumPtPhiUESubCellvsTrack   = new TH2F("hConePhiUESubPtSumCellvsTrack",
+                                                      Form("Track vs Cell #Sigma #it{p}_{T} UE sub phi band in isolation cone for #it{R} =  %2.2f",r),
+                                                      2*nptsumbins,-ptsummax,ptsummax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtPhiUESubCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
+          fhConeSumPtPhiUESubCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+          outputContainer->Add(fhConeSumPtPhiUESubCellvsTrack) ;
+          
+          fhEtaBandCellvsTrack   = new TH2F("hEtaBandCellvsTrack",
+                                            Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} =  %2.2f",r),
                                             nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
-      fhPhiBandNormCellvsTrack->SetXTitle("#Sigma p_{T} cell");
-      fhPhiBandNormCellvsTrack->SetYTitle("#Sigma p_{T} track");
-      outputContainer->Add(fhPhiBandNormCellvsTrack) ;
-      
-      fhConeSumPtEtaUESubTrackCell  = new TH2F("hConeSumPtEtaUESubTrackCell",
-                                           Form("Tracks #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                           nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubTrackCell->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
-      
-      fhConeSumPtPhiUESubTrackCell  = new TH2F("hConeSumPtPhiUESubTrackCell",
-                                           Form("Tracks #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                           nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
-      fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubTrackCell->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
-      
-      fhConeSumPtEtaUESubTrackCellTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
-                                                     Form("Trigger #eta vs #phi, Tracks #Sigma p_{T} after bkg subtraction from eta band in the isolation cone for R = %2.2f",r),
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
-      
-      fhConeSumPtPhiUESubTrackCellTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
-                                                     Form("Trigger #eta vs #phi, Tracks #Sigma p_{T} after bkg subtraction from phi band in the isolation cone for R = %2.2f",r),
-                                                     netabins,etamin,etamax,nphibins,phimin,phimax);
-      fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma p_{T}");
-      fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
-      fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
-      outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
-      
-    }
-        
-    if(fFillSSHisto)
-    {
-       fhELambda0SSBkg  = new TH2F
-      ("hELambda0SSBkg","Non isolated clusters : E vs #lambda_{0}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-      fhELambda0SSBkg->SetYTitle("#lambda_{0}^{2}");
-      fhELambda0SSBkg->SetXTitle("E (GeV)");
-      outputContainer->Add(fhELambda0SSBkg) ;
+          fhEtaBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
+          fhEtaBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+          outputContainer->Add(fhEtaBandCellvsTrack) ;
+          
+          fhPhiBandCellvsTrack   = new TH2F("hPhiBandCellvsTrack",
+                                            Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} =  %2.2f",r),
+                                            nptsumbins,ptsummin,ptsummax*4,nptsumbins,ptsummin,ptsummax*8);
+          fhPhiBandCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
+          fhPhiBandCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+          outputContainer->Add(fhPhiBandCellvsTrack) ;
+          
+          fhEtaBandNormCellvsTrack   = new TH2F("hEtaBandNormCellvsTrack",
+                                                Form("Track vs Cell #Sigma #it{p}_{T} in Eta band in isolation cone for #it{R} =  %2.2f",r),
+                                                nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
+          fhEtaBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
+          fhEtaBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+          outputContainer->Add(fhEtaBandNormCellvsTrack) ;
+          
+          fhPhiBandNormCellvsTrack   = new TH2F("hPhiBandNormCellvsTrack",
+                                                Form("Track vs Cell #Sigma #it{p}_{T} in Phi band in isolation cone for #it{R} =  %2.2f",r),
+                                                nptsumbins,ptsummin,ptsummax,nptsumbins,ptsummin,ptsummax);
+          fhPhiBandNormCellvsTrack->SetXTitle("#Sigma #it{p}_{T} cell");
+          fhPhiBandNormCellvsTrack->SetYTitle("#Sigma #it{p}_{T} track");
+          outputContainer->Add(fhPhiBandNormCellvsTrack) ;
+          
+          fhConeSumPtEtaUESubTrackCell  = new TH2F("hConeSumPtEtaUESubTrackCell",
+                                                   Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                                   nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtEtaUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtEtaUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtEtaUESubTrackCell) ;
+          
+          fhConeSumPtPhiUESubTrackCell  = new TH2F("hConeSumPtPhiUESubTrackCell",
+                                                   Form("Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                                   nptbins,ptmin,ptmax,2*nptsumbins,-ptsummax,ptsummax);
+          fhConeSumPtPhiUESubTrackCell->SetYTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtPhiUESubTrackCell->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhConeSumPtPhiUESubTrackCell) ;
+          
+          fhConeSumPtEtaUESubTrackCellTrigEtaPhi  = new TH2F("hConeSumPtEtaUESubTrackCellTrigEtaPhi",
+                                                             Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from eta band in the isolation cone for #it{R} =  %2.2f",r),
+                                                             netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhConeSumPtEtaUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhConeSumPtEtaUESubTrackCellTrigEtaPhi) ;
+          
+          fhConeSumPtPhiUESubTrackCellTrigEtaPhi  = new TH2F("hConeSumPtPhiUESubTrackCellTrigEtaPhi",
+                                                             Form("Trigger #eta vs #phi, Tracks #Sigma #it{p}_{T} after bkg subtraction from phi band in the isolation cone for #it{R} =  %2.2f",r),
+                                                             netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetZTitle("#Sigma #it{p}_{T}");
+          fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetXTitle("#eta_{trigger}");
+          fhConeSumPtPhiUESubTrackCellTrigEtaPhi->SetYTitle("#phi_{trigger} (rad)");
+          outputContainer->Add(fhConeSumPtPhiUESubTrackCellTrigEtaPhi) ;
+        }
+      }
     }
     
     for(Int_t iso = 0; iso < 2; iso++)
@@ -2318,22 +2551,22 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
       if(fFillTMHisto)
       {
         fhTrackMatchedDEta[iso]  = new TH2F
-        (Form("hTrackMatchedDEta%s",hName[iso].Data()),
-         Form("%s - d#eta of cluster-track vs cluster energy for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",hTitle[iso].Data(),r,ptthre,ptfrac),
+        (Form("hTrackMatchedDEta%s",isoName[iso].Data()),
+         Form("%s - d#eta of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
          nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
         fhTrackMatchedDEta[iso]->SetYTitle("d#eta");
         fhTrackMatchedDEta[iso]->SetXTitle("E_{cluster} (GeV)");
         
         fhTrackMatchedDPhi[iso]  = new TH2F
-        (Form("hTrackMatchedDPhi%s",hName[iso].Data()),
-         Form("%s - d#phi of cluster-track vs cluster energy for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",hTitle[iso].Data(),r,ptthre,ptfrac),
+        (Form("hTrackMatchedDPhi%s",isoName[iso].Data()),
+         Form("%s - d#phi of cluster-track vs cluster energy, %s",isoTitle[iso].Data(),parTitle.Data()),
          nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
         fhTrackMatchedDPhi[iso]->SetYTitle("d#phi (rad)");
         fhTrackMatchedDPhi[iso]->SetXTitle("E_{cluster} (GeV)");
         
         fhTrackMatchedDEtaDPhi[iso]  = new TH2F
-        (Form("hTrackMatchedDEtaDPhi%s",hName[iso].Data()),
-         Form("%s - d#eta vs d#phi of cluster-track for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",hTitle[iso].Data(),r,ptthre,ptfrac),
+        (Form("hTrackMatchedDEtaDPhi%s",isoName[iso].Data()),
+         Form("%s - d#eta vs d#phi of cluster-track, %s",isoTitle[iso].Data(),parTitle.Data()),
          nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
         fhTrackMatchedDEtaDPhi[iso]->SetYTitle("d#phi (rad)");
         fhTrackMatchedDEtaDPhi[iso]->SetXTitle("d#eta");
@@ -2343,28 +2576,28 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
         outputContainer->Add(fhTrackMatchedDEtaDPhi[iso]) ;
         
         fhdEdx[iso]  = new TH2F
-        (Form("hdEdx%s",hName[iso].Data()),
-         Form("%s - Matched track <dE/dx> vs cluster E for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",hTitle[iso].Data(),r,ptthre,ptfrac),
+        (Form("hdEdx%s",isoName[iso].Data()),
+         Form("%s - Matched track <d#it{E}/d#it{x}> vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
          nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax);
-        fhdEdx[iso]->SetXTitle("E (GeV)");
-        fhdEdx[iso]->SetYTitle("<dE/dx>");
+        fhdEdx[iso]->SetXTitle("#it{E} (GeV)");
+        fhdEdx[iso]->SetYTitle("<d#it{E}/d#it{x}>");
         outputContainer->Add(fhdEdx[iso]);
         
         fhEOverP[iso]  = new TH2F
-        (Form("hEOverP%s",hName[iso].Data()),
-         Form("%s - Matched track E/p vs cluster E for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",hTitle[iso].Data(),r,ptthre,ptfrac),
+        (Form("hEOverP%s",isoName[iso].Data()),
+         Form("%s - Matched track #it{E}/#it{p} vs cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
          nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax);
-        fhEOverP[iso]->SetXTitle("E (GeV)");
-        fhEOverP[iso]->SetYTitle("E/p");
+        fhEOverP[iso]->SetXTitle("#it{E} (GeV)");
+        fhEOverP[iso]->SetYTitle("#it{E}/#it{p}");
         outputContainer->Add(fhEOverP[iso]);
         
         if(IsDataMC())
         {
           fhTrackMatchedMCParticle[iso]  = new TH2F
-          (Form("hTrackMatchedMCParticle%s",hName[iso].Data()),
-           Form("%s - Origin of particle vs energy vs cluster E for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",hTitle[iso].Data(),r,ptthre,ptfrac),
+          (Form("hTrackMatchedMCParticle%s",isoName[iso].Data()),
+           Form("%s - Origin of particle vs cluster #it{E}, %s",isoTitle[iso].Data(),parTitle.Data()),
            nptbins,ptmin,ptmax,8,0,8);
-          fhTrackMatchedMCParticle[iso]->SetXTitle("E (GeV)");
+          fhTrackMatchedMCParticle[iso]->SetXTitle("#it{E} (GeV)");
           //fhTrackMatchedMCParticle[iso]->SetYTitle("Particle type");
           
           fhTrackMatchedMCParticle[iso]->GetYaxis()->SetBinLabel(1 ,"Photon");
@@ -2383,783 +2616,447 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
       if(fFillSSHisto)
       {
         fhELambda0[iso]  = new TH2F
-        (Form("hELambda0%s",hName[iso].Data()),
-         Form("%s cluster : E vs #lambda_{0}",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+        (Form("hELambda0%s",isoName[iso].Data()),
+         Form("%s cluster : #it{E} vs #lambda_{0}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
         fhELambda0[iso]->SetYTitle("#lambda_{0}^{2}");
-        fhELambda0[iso]->SetXTitle("E (GeV)");
+        fhELambda0[iso]->SetXTitle("#it{E} (GeV)");
         outputContainer->Add(fhELambda0[iso]) ;
         
-        if(IsDataMC())
-        {
-          fhELambda0MCPhoton[iso]  = new TH2F
-          (Form("hELambda0%s_MCPhoton",hName[iso].Data()),
-           Form("%s cluster : E vs #lambda_{0}: Origin is final state photon",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-          fhELambda0MCPhoton[iso]->SetYTitle("#lambda_{0}^{2}");
-          fhELambda0MCPhoton[iso]->SetXTitle("E (GeV)");
-          outputContainer->Add(fhELambda0MCPhoton[iso]) ;
-          
-          fhELambda0MCPi0[iso]  = new TH2F
-          (Form("hELambda0%s_MCPi0",hName[iso].Data()),
-           Form("%s cluster : E vs #lambda_{0}: Origin is pi0 (2 #gamma)",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-          fhELambda0MCPi0[iso]->SetYTitle("#lambda_{0}^{2}");
-          fhELambda0MCPi0[iso]->SetXTitle("E (GeV)");
-          outputContainer->Add(fhELambda0MCPi0[iso]) ;
-          
-          fhELambda0MCPi0Decay[iso]  = new TH2F
-          (Form("hELambda0%s_MCPi0Decay",hName[iso].Data()),
-           Form("%s cluster : E vs #lambda_{0}: Origin is pi0 decay",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-          fhELambda0MCPi0Decay[iso]->SetYTitle("#lambda_{0}^{2}");
-          fhELambda0MCPi0Decay[iso]->SetXTitle("E (GeV)");
-          outputContainer->Add(fhELambda0MCPi0Decay[iso]) ;
-          
-          fhELambda0MCEtaDecay[iso]  = new TH2F
-          (Form("hELambda0%s_MCEtaDecay",hName[iso].Data()),
-           Form("%s cluster : E vs #lambda_{0}: Origin is eta decay",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-          fhELambda0MCEtaDecay[iso]->SetYTitle("#lambda_{0}^{2}");
-          fhELambda0MCEtaDecay[iso]->SetXTitle("E (GeV)");
-          outputContainer->Add(fhELambda0MCEtaDecay[iso]) ;
-          
-          fhELambda0MCOtherDecay[iso]  = new TH2F
-          (Form("hELambda0%s_MCOtherDecay",hName[iso].Data()),
-           Form("%s cluster : E vs #lambda_{0}: Origin is other decay",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-          fhELambda0MCOtherDecay[iso]->SetYTitle("#lambda_{0}^{2}");
-          fhELambda0MCOtherDecay[iso]->SetXTitle("E (GeV)");
-          outputContainer->Add(fhELambda0MCOtherDecay[iso]) ;
-          
-          fhELambda0MCHadron[iso]  = new TH2F
-          (Form("hELambda0%s_MCHadron",hName[iso].Data()),
-           Form("%s cluster : E vs #lambda_{0}: Origin is hadron",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-          fhELambda0MCHadron[iso]->SetYTitle("#lambda_{0}^{2}");
-          fhELambda0MCHadron[iso]->SetXTitle("E (GeV)");
-          outputContainer->Add(fhELambda0MCHadron[iso]) ;
-        }
-        
         fhELambda1[iso]  = new TH2F
-        (Form("hELambda1%s",hName[iso].Data()),
-         Form("%s cluster: E vs #lambda_{1}",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+        (Form("hELambda1%s",isoName[iso].Data()),
+         Form("%s cluster: #it{E} vs #lambda_{1}, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
         fhELambda1[iso]->SetYTitle("#lambda_{1}^{2}");
-        fhELambda1[iso]->SetXTitle("E (GeV)");
+        fhELambda1[iso]->SetXTitle("#it{E} (GeV)");
         outputContainer->Add(fhELambda1[iso]) ;
         
-        if(fCalorimeter=="EMCAL")
+        fhPtLambda0[iso]  = new TH2F
+        (Form("hPtLambda0%s",isoName[iso].Data()),
+         Form("%s cluster : #it{p}_{T} vs #lambda_{0}, %s",isoTitle[iso].Data(), parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+        fhPtLambda0[iso]->SetYTitle("#lambda_{0}^{2}");
+        fhPtLambda0[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPtLambda0[iso]) ;
+        
+        if(fFillTaggedDecayHistograms)
+        {
+          for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
+          {
+            fhPtLambda0Decay[iso][ibit]  = new TH2F
+            (Form("hPtLambda0Decay%s_bit%d",isoName[iso].Data(),fDecayBits[ibit]),
+             Form("%s cluster : #it{p}_{T} vs #lambda_{0}, decay bit %d, %s",isoTitle[iso].Data(), fDecayBits[ibit], parTitle.Data()),
+             nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+            fhPtLambda0Decay[iso][ibit]->SetYTitle("#lambda_{0}^{2}");
+            fhPtLambda0Decay[iso][ibit]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+            outputContainer->Add(fhPtLambda0Decay[iso][ibit]) ;
+          }
+        }
+        
+        if(IsDataMC())
         {
+          for(Int_t imc = 0; imc < 9; imc++)
+          {
+            fhPtLambda0MC[imc][iso]  = new TH2F(Form("hPtLambda0%s_MC%s",isoName[iso].Data(),mcPartName[imc].Data()),
+                                                Form("%s cluster : #it{p}_{T} vs #lambda_{0}: %s %s",isoTitle[iso].Data(),mcPartType[imc].Data(),parTitle.Data()),
+                                                nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+            fhPtLambda0MC[imc][iso]->SetYTitle("#lambda_{0}^{2}");
+            fhPtLambda0MC[imc][iso]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+            outputContainer->Add( fhPtLambda0MC[imc][iso]) ;
+          }
+        }
+        
+        if(fIsoDetector=="EMCAL" &&  GetFirstSMCoveredByTRD() >= 0)
+        {
+          fhPtLambda0TRD[iso]  = new TH2F
+          (Form("hPtLambda0TRD%s",isoName[iso].Data()),
+           Form("%s cluster: #it{p}_{T} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          fhPtLambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
+          fhPtLambda0TRD[iso]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhPtLambda0TRD[iso]) ;
+          
           fhELambda0TRD[iso]  = new TH2F
-          (Form("hELambda0TRD%s",hName[iso].Data()),
-           Form("%s cluster: E vs #lambda_{0}, SM behind TRD",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          (Form("hELambda0TRD%s",isoName[iso].Data()),
+           Form("%s cluster: #it{E} vs #lambda_{0}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
           fhELambda0TRD[iso]->SetYTitle("#lambda_{0}^{2}");
-          fhELambda0TRD[iso]->SetXTitle("E (GeV)");
+          fhELambda0TRD[iso]->SetXTitle("#it{E} (GeV)");
           outputContainer->Add(fhELambda0TRD[iso]) ;
           
           fhELambda1TRD[iso]  = new TH2F
-          (Form("hELambda1TRD%s",hName[iso].Data()),
-           Form("%s cluster: E vs #lambda_{1}, SM behind TRD",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          (Form("hELambda1TRD%s",isoName[iso].Data()),
+           Form("%s cluster: #it{E} vs #lambda_{1}, SM behind TRD, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
           fhELambda1TRD[iso]->SetYTitle("#lambda_{1}^{2}");
-          fhELambda1TRD[iso]->SetXTitle("E (GeV)");
+          fhELambda1TRD[iso]->SetXTitle("#it{E} (GeV)");
           outputContainer->Add(fhELambda1TRD[iso]) ;
         }
         
-        fhNLocMax[iso] = new TH2F
-        (Form("hNLocMax%s",hName[iso].Data()),
-         Form("%s - Number of local maxima in cluster",hTitle[iso].Data()),
-         nptbins,ptmin,ptmax,10,0,10);
-        fhNLocMax[iso]->SetYTitle("N maxima");
-        fhNLocMax[iso]->SetXTitle("E (GeV)");
-        outputContainer->Add(fhNLocMax[iso]) ;
-        
-        fhELambda0LocMax1[iso]  = new TH2F
-        (Form("hELambda0LocMax1%s",hName[iso].Data()),
-         Form("%s cluster (#eta) pairs: E vs #lambda_{0}, 1 Local maxima",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-        fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
-        fhELambda0LocMax1[iso]->SetXTitle("E (GeV)");
-        outputContainer->Add(fhELambda0LocMax1[iso]) ;
-        
-        fhELambda1LocMax1[iso]  = new TH2F
-        (Form("hELambda1LocMax1%s",hName[iso].Data()),
-         Form("%s cluster (#eta) pairs: E vs #lambda_{1}, 1 Local maxima",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-        fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
-        fhELambda1LocMax1[iso]->SetXTitle("E (GeV)");
-        outputContainer->Add(fhELambda1LocMax1[iso]) ;
-        
-        fhELambda0LocMax2[iso]  = new TH2F
-        (Form("hELambda0LocMax2%s",hName[iso].Data()),
-         Form("%s cluster (#eta) pairs: E vs #lambda_{0}, 2 Local maxima",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-        fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
-        fhELambda0LocMax2[iso]->SetXTitle("E (GeV)");
-        outputContainer->Add(fhELambda0LocMax2[iso]) ;
-        
-        fhELambda1LocMax2[iso]  = new TH2F
-        (Form("hELambda1LocMax2%s",hName[iso].Data()),
-         Form("%s cluster (#eta) pairs: E vs #lambda_{1}, 2 Local maxima",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-        fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
-        fhELambda1LocMax2[iso]->SetXTitle("E (GeV)");
-        outputContainer->Add(fhELambda1LocMax2[iso]) ;
-        
-        fhELambda0LocMaxN[iso]  = new TH2F
-        ( Form("hELambda0LocMaxN%s",hName[iso].Data()),
-         Form("%s cluster (#eta) pairs: E vs #lambda_{0}, N>2 Local maxima",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-        fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
-        fhELambda0LocMaxN[iso]->SetXTitle("E (GeV)");
-        outputContainer->Add(fhELambda0LocMaxN[iso]) ;
-        
-        fhELambda1LocMaxN[iso]  = new TH2F
-        (Form("hELambda1LocMaxN%s",hName[iso].Data()),
-         Form("%s cluster (#eta) pairs: E vs #lambda_{1}, N>2 Local maxima",hTitle[iso].Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
-        fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
-        fhELambda1LocMaxN[iso]->SetXTitle("E (GeV)");
-        outputContainer->Add(fhELambda1LocMaxN[iso]) ;
-        
-      }
+        if(fFillNLMHistograms)
+        {
+          fhNLocMax[iso] = new TH2F
+          (Form("hNLocMax%s",isoName[iso].Data()),
+           Form("%s - Number of local maxima in cluster, %s",isoTitle[iso].Data(),parTitle.Data()),
+           nptbins,ptmin,ptmax,10,0,10);
+          fhNLocMax[iso]->SetYTitle("#it{NLM}");
+          fhNLocMax[iso]->SetXTitle("#it{E} (GeV)");
+          outputContainer->Add(fhNLocMax[iso]) ;
+          
+          fhELambda0LocMax1[iso]  = new TH2F
+          (Form("hELambda0LocMax1%s",isoName[iso].Data()),
+           Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{0}, #it{NLM}=1, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          fhELambda0LocMax1[iso]->SetYTitle("#lambda_{0}^{2}");
+          fhELambda0LocMax1[iso]->SetXTitle("#it{E} (GeV)");
+          outputContainer->Add(fhELambda0LocMax1[iso]) ;
+          
+          fhELambda1LocMax1[iso]  = new TH2F
+          (Form("hELambda1LocMax1%s",isoName[iso].Data()),
+           Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{1}, #it{NLM}=1, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          fhELambda1LocMax1[iso]->SetYTitle("#lambda_{1}^{2}");
+          fhELambda1LocMax1[iso]->SetXTitle("#it{E} (GeV)");
+          outputContainer->Add(fhELambda1LocMax1[iso]) ;
+          
+          fhELambda0LocMax2[iso]  = new TH2F
+          (Form("hELambda0LocMax2%s",isoName[iso].Data()),
+           Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{0}, #it{NLM}=2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          fhELambda0LocMax2[iso]->SetYTitle("#lambda_{0}^{2}");
+          fhELambda0LocMax2[iso]->SetXTitle("#it{E} (GeV)");
+          outputContainer->Add(fhELambda0LocMax2[iso]) ;
+          
+          fhELambda1LocMax2[iso]  = new TH2F
+          (Form("hELambda1LocMax2%s",isoName[iso].Data()),
+           Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{1}, #it{NLM}=2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          fhELambda1LocMax2[iso]->SetYTitle("#lambda_{1}^{2}");
+          fhELambda1LocMax2[iso]->SetXTitle("#it{E} (GeV)");
+          outputContainer->Add(fhELambda1LocMax2[iso]) ;
+          
+          fhELambda0LocMaxN[iso]  = new TH2F
+          ( Form("hELambda0LocMaxN%s",isoName[iso].Data()),
+           Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{0}, #it{NLM}>2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          fhELambda0LocMaxN[iso]->SetYTitle("#lambda_{0}^{2}");
+          fhELambda0LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
+          outputContainer->Add(fhELambda0LocMaxN[iso]) ;
+          
+          fhELambda1LocMaxN[iso]  = new TH2F
+          (Form("hELambda1LocMaxN%s",isoName[iso].Data()),
+           Form("%s cluster (#eta) pairs: #it{E} vs #lambda_{1}, #it{NLM}>2, %s",isoTitle[iso].Data(),parTitle.Data()),nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
+          fhELambda1LocMaxN[iso]->SetYTitle("#lambda_{1}^{2}");
+          fhELambda1LocMaxN[iso]->SetXTitle("#it{E} (GeV)");
+          outputContainer->Add(fhELambda1LocMaxN[iso]) ;
+        } // NLM
+      } // SS histo
     } // control histograms for isolated and non isolated objects
     
     
     if(fFillPileUpHistograms)
     {
       fhPtTrackInConeOtherBC  = new TH2F("hPtTrackInConeOtherBC",
-                                         Form("p_{T} of tracks in isolation cone for R = %2.2f, TOF from BC!=0",r),
+                                         Form("#it{p}_{T} of tracks in isolation cone for #it{R} =  %2.2f, TOF from BC!=0",r),
                                          nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtTrackInConeOtherBC->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtTrackInConeOtherBC->SetXTitle("p_{T} (GeV/c)");
+      fhPtTrackInConeOtherBC->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtTrackInConeOtherBC->SetXTitle("#it{p}_{T} (GeV/#it{c})");
       outputContainer->Add(fhPtTrackInConeOtherBC) ;
       
       fhPtTrackInConeOtherBCPileUpSPD  = new TH2F("hPtTrackInConeOtherBCPileUpSPD",
-                                                  Form("p_{T} of tracks in isolation cone for R = %2.2f, TOF from BC!=0, pile-up from SPD",r),
+                                                  Form("#it{p}_{T} of tracks in isolation cone for #it{R} =  %2.2f, TOF from BC!=0, pile-up from SPD",r),
                                                   nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("p_{T} (GeV/c)");
+      fhPtTrackInConeOtherBCPileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtTrackInConeOtherBCPileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
       outputContainer->Add(fhPtTrackInConeOtherBCPileUpSPD) ;
       
       fhPtTrackInConeBC0  = new TH2F("hPtTrackInConeBC0",
-                                     Form("p_{T} of tracks in isolation cone for R = %2.2f, TOF from BC==0",r),
+                                     Form("#it{p}_{T} of tracks in isolation cone for #it{R} =  %2.2f, TOF from BC==0",r),
                                      nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtTrackInConeBC0->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtTrackInConeBC0->SetXTitle("p_{T} (GeV/c)");
+      fhPtTrackInConeBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtTrackInConeBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
       outputContainer->Add(fhPtTrackInConeBC0) ;
       
       fhPtTrackInConeVtxBC0  = new TH2F("hPtTrackInConeVtxBC0",
-                                        Form("p_{T} of tracks in isolation cone for R = %2.2f, TOF from BC==0",r),
+                                        Form("#it{p}_{T} of tracks in isolation cone for #it{R} =  %2.2f, TOF from BC==0",r),
                                         nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtTrackInConeVtxBC0->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtTrackInConeVtxBC0->SetXTitle("p_{T} (GeV/c)");
+      fhPtTrackInConeVtxBC0->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtTrackInConeVtxBC0->SetXTitle("#it{p}_{T} (GeV/#it{c})");
       outputContainer->Add(fhPtTrackInConeVtxBC0) ;
       
       
       fhPtTrackInConeBC0PileUpSPD  = new TH2F("hPtTrackInConeBC0PileUpSPD",
-                                              Form("p_{T} of tracks in isolation cone for R = %2.2f, TOF from BC==0, pile-up from SPD",r),
+                                              Form("#it{p}_{T} of tracks in isolation cone for #it{R} =  %2.2f, TOF from BC==0, pile-up from SPD",r),
                                               nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-      fhPtTrackInConeBC0PileUpSPD->SetYTitle("p_{T in cone} (GeV/c)");
-      fhPtTrackInConeBC0PileUpSPD->SetXTitle("p_{T} (GeV/c)");
+      fhPtTrackInConeBC0PileUpSPD->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+      fhPtTrackInConeBC0PileUpSPD->SetXTitle("#it{p}_{T} (GeV/#it{c})");
       outputContainer->Add(fhPtTrackInConeBC0PileUpSPD) ;
       
       
       for (Int_t i = 0; i < 7 ; i++)
       {
         fhPtInConePileUp[i]  = new TH2F(Form("hPtInConePileUp%s",pileUpName[i].Data()),
-                                        Form("p_{T} in isolation cone for R = %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
+                                        Form("#it{p}_{T} in isolation cone for #it{R} =  %2.2f, from pile-up (%s)",r,pileUpName[i].Data()),
                                         nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
-        fhPtInConePileUp[i]->SetYTitle("p_{T in cone} (GeV/c)");
-        fhPtInConePileUp[i]->SetXTitle("p_{T} (GeV/c)");
+        fhPtInConePileUp[i]->SetYTitle("#it{p}_{T in cone} (GeV/#it{c})");
+        fhPtInConePileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
         outputContainer->Add(fhPtInConePileUp[i]) ;
       }
     }
     
     if(IsDataMC())
     {
-      fhPtIsoPrompt  = new TH1F("hPtMCPrompt","Number of isolated prompt #gamma",nptbins,ptmin,ptmax); 
-      fhPtIsoPrompt->SetYTitle("N");
-      fhPtIsoPrompt->SetXTitle("p_{T #gamma}(GeV/c)");
-      outputContainer->Add(fhPtIsoPrompt) ; 
-      
-      fhPhiIsoPrompt  = new TH2F
-      ("hPhiMCPrompt","Number of isolated prompt #gamma",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      fhPhiIsoPrompt->SetYTitle("#phi");
-      fhPhiIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhPhiIsoPrompt) ; 
-      
-      fhEtaIsoPrompt  = new TH2F
-      ("hEtaMCPrompt","Number of isolated prompt #gamma",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      fhEtaIsoPrompt->SetYTitle("#eta");
-      fhEtaIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhEtaIsoPrompt) ;
-      
-      fhPtIsoFragmentation  = new TH1F("hPtMCFragmentation","Number of isolated #gamma",nptbins,ptmin,ptmax); 
-      fhPtIsoFragmentation->SetYTitle("N");
-      fhPtIsoFragmentation->SetXTitle("p_{T #gamma}(GeV/c)");
-      outputContainer->Add(fhPtIsoFragmentation) ; 
-      
-      fhPhiIsoFragmentation  = new TH2F
-      ("hPhiMCFragmentation","Number of isolated fragmentation #gamma",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      fhPhiIsoFragmentation->SetYTitle("#phi");
-      fhPhiIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhPhiIsoFragmentation) ; 
-      
-      fhEtaIsoFragmentation  = new TH2F
-      ("hEtaMCFragmentation","Number of isolated fragmentation #gamma",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      fhEtaIsoFragmentation->SetYTitle("#eta");
-      fhEtaIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhEtaIsoFragmentation) ;
-      
-      fhPtIsoPi0  = new TH1F("hPtMCPi0","Number of isolated #gamma from #pi^{0} (2 #gamma)",nptbins,ptmin,ptmax); 
-      fhPtIsoPi0->SetYTitle("N");
-      fhPtIsoPi0->SetXTitle("p_{T #gamma}(GeV/c)");
-      outputContainer->Add(fhPtIsoPi0) ; 
-      
-      fhPhiIsoPi0  = new TH2F
-      ("hPhiMCPi0","Number of isolated #gamma from #pi^{0} (2 #gamma)",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      fhPhiIsoPi0->SetYTitle("#phi");
-      fhPhiIsoPi0->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhPhiIsoPi0) ; 
-      
-      fhEtaIsoPi0  = new TH2F
-      ("hEtaMCPi0","Number of isolated #gamma from #pi^{0} (2 #gamma)",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      fhEtaIsoPi0->SetYTitle("#eta");
-      fhEtaIsoPi0->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhEtaIsoPi0) ;
-      
-      fhPtIsoPi0Decay  = new TH1F("hPtMCPi0Decay","Number of isolated #gamma from #pi^{0} decay",nptbins,ptmin,ptmax); 
-      fhPtIsoPi0Decay->SetYTitle("N");
-      fhPtIsoPi0Decay->SetXTitle("p_{T #gamma}(GeV/c)");
-      outputContainer->Add(fhPtIsoPi0Decay) ; 
-      
-      fhPhiIsoPi0Decay  = new TH2F
-      ("hPhiMCPi0Decay","Number of isolated #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      fhPhiIsoPi0Decay->SetYTitle("#phi");
-      fhPhiIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhPhiIsoPi0Decay) ; 
-      
-      fhEtaIsoPi0Decay  = new TH2F
-      ("hEtaMCPi0Decay","Number of isolated #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      fhEtaIsoPi0Decay->SetYTitle("#eta");
-      fhEtaIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhEtaIsoPi0Decay) ;
-      
-      fhPtIsoEtaDecay  = new TH1F("hPtMCEtaDecay","Number of isolated #gamma from #eta decay",nptbins,ptmin,ptmax); 
-      fhPtIsoEtaDecay->SetYTitle("N");
-      fhPtIsoEtaDecay->SetXTitle("p_{T #gamma}(GeV/c)");
-      outputContainer->Add(fhPtIsoEtaDecay) ; 
-      
-      fhPhiIsoEtaDecay  = new TH2F
-      ("hPhiMCEtaDecay","Number of isolated #gamma from #eta decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      fhPhiIsoEtaDecay->SetYTitle("#phi");
-      fhPhiIsoEtaDecay->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhPhiIsoEtaDecay) ; 
-      
-      fhEtaIsoEtaDecay  = new TH2F
-      ("hEtaMCEtaDecay","Number of isolated #gamma from #eta decay",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      fhEtaIsoEtaDecay->SetYTitle("#eta");
-      fhEtaIsoEtaDecay->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhEtaIsoEtaDecay) ;
-      
-      fhPtIsoOtherDecay  = new TH1F("hPtMCOtherDecay","Number of isolated #gamma from non-#pi^{0} decay",nptbins,ptmin,ptmax); 
-      fhPtIsoOtherDecay->SetYTitle("N");
-      fhPtIsoOtherDecay->SetXTitle("p_{T #gamma}(GeV/c)");
-      outputContainer->Add(fhPtIsoOtherDecay) ; 
-      
-      fhPhiIsoOtherDecay  = new TH2F
-      ("hPhiMCOtherDecay","Number of isolated #gamma from non-#pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      fhPhiIsoOtherDecay->SetYTitle("#phi");
-      fhPhiIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhPhiIsoOtherDecay) ; 
-      
-      fhEtaIsoOtherDecay  = new TH2F
-      ("hEtaMCOtherDecay","Number of isolated #gamma non-#pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      fhEtaIsoOtherDecay->SetYTitle("#eta");
-      fhEtaIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)");
-      outputContainer->Add(fhEtaIsoOtherDecay) ;
-      
-      //      fhPtIsoConversion  = new TH1F("hPtMCConversion","Number of isolated converted #gamma",nptbins,ptmin,ptmax); 
-      //      fhPtIsoConversion->SetYTitle("N");
-      //      fhPtIsoConversion->SetXTitle("p_{T #gamma}(GeV/c)");
-      //      outputContainer->Add(fhPtIsoConversion) ; 
-      //      
-      //      fhPhiIsoConversion  = new TH2F
-      //      ("hPhiMCConversion","Number of isolated converted #gamma",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      //      fhPhiIsoConversion->SetYTitle("#phi");
-      //      fhPhiIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)");
-      //      outputContainer->Add(fhPhiIsoConversion) ; 
-      //      
-      //      fhEtaIsoConversion  = new TH2F
-      //      ("hEtaMCConversion","Number of isolated converted #gamma",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      //      fhEtaIsoConversion->SetYTitle("#eta");
-      //      fhEtaIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)");
-      //      outputContainer->Add(fhEtaIsoConversion) ;
-      
-      fhPtIsoHadron  = new TH1F("hPtMCHadron","Number of isolated non-#gamma particles",nptbins,ptmin,ptmax); 
-      fhPtIsoHadron->SetYTitle("N");
-      fhPtIsoHadron->SetXTitle("p_{T}(GeV/c)");
-      outputContainer->Add(fhPtIsoHadron) ; 
-      
-      
-      fhPhiIsoHadron  = new TH2F
-      ("hPhiMCHadron","Number of isolated non-#gamma particles",nptbins,ptmin,ptmax,nphibins,phimin,phimax); 
-      fhPhiIsoHadron->SetYTitle("#phi");
-      fhPhiIsoHadron->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhPhiIsoHadron) ; 
-      
-      fhEtaIsoHadron  = new TH2F
-      ("hEtaMCHadron","Number of isolated non-#gamma particles",nptbins,ptmin,ptmax,netabins,etamin,etamax); 
-      fhEtaIsoHadron->SetYTitle("#eta");
-      fhEtaIsoHadron->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhEtaIsoHadron) ;
+      // For histograms in arrays, index in the array, corresponding to any particle origin
+      
+      for(Int_t i = 0; i < 6; i++)
+      {
+        fhEPrimMC[i]  = new TH1F(Form("hEPrim_MC%s",ppname[i].Data()),
+                                 Form("primary photon  %s : #it{E}, %s",pptype[i].Data(),parTitle.Data()),
+                                 nptbins,ptmin,ptmax);
+        fhEPrimMC[i]->SetXTitle("#it{E} (GeV)");
+        outputContainer->Add(fhEPrimMC[i]) ;
+        
+        fhPtPrimMCiso[i]  = new TH1F(Form("hPtPrim_MCiso%s",ppname[i].Data()),
+                                     Form("primary isolated photon %s : #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
+                                     nptbins,ptmin,ptmax);
+        fhPtPrimMCiso[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPtPrimMCiso[i]) ;
+        
+        fhEtaPrimMC[i]  = new TH2F(Form("hEtaPrim_MC%s",ppname[i].Data()),
+                                   Form("primary photon %s : #eta vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
+                                   nptbins,ptmin,ptmax,200,-2,2);
+        fhEtaPrimMC[i]->SetYTitle("#eta");
+        fhEtaPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhEtaPrimMC[i]) ;
+        
+        fhPhiPrimMC[i]  = new TH2F(Form("hPhiPrim_MC%s",ppname[i].Data()),
+                                   Form("primary photon %s : #phi vs #it{p}_{T}, %s",pptype[i].Data(),parTitle.Data()),
+                                   nptbins,ptmin,ptmax,200,0.,TMath::TwoPi());
+        fhPhiPrimMC[i]->SetYTitle("#phi");
+        fhPhiPrimMC[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPhiPrimMC[i]) ;
+      }
       
     }//Histos with MC
     
   }
   
-  // Not Isolated histograms, reference histograms
-  
-  fhENoIso  = new TH1F("hENoIso",
-                        Form("Number of not isolated leading particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                        nptbins,ptmin,ptmax); 
-  fhENoIso->SetYTitle("N");
-  fhENoIso->SetXTitle("E (GeV/c)");
-  outputContainer->Add(fhENoIso) ;
-  
-  fhPtNoIso  = new TH1F("hPtNoIso",
-                        Form("Number of not isolated leading particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                        nptbins,ptmin,ptmax); 
-  fhPtNoIso->SetYTitle("N");
-  fhPtNoIso->SetXTitle("p_{T} (GeV/c)");
-  outputContainer->Add(fhPtNoIso) ;
-  
-  fhPtNLocMaxNoIso  = new TH2F("hPtNLocMaxNoIso",
-                               Form("Number of not isolated particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f vs NLM, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                               nptbins,ptmin,ptmax,10,0,10); 
-  fhPtNLocMaxNoIso->SetYTitle("NLM");
-  fhPtNLocMaxNoIso->SetXTitle("p_{T} (GeV/c)");
-  outputContainer->Add(fhPtNLocMaxNoIso) ;   
-  
-  fhEtaPhiNoIso  = new TH2F("hEtaPhiNoIso",
-                            Form("Number of not isolated leading particles #eta vs #phi for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                            netabins,etamin,etamax,nphibins,phimin,phimax); 
-  fhEtaPhiNoIso->SetXTitle("#eta");
-  fhEtaPhiNoIso->SetYTitle("#phi");
-  outputContainer->Add(fhEtaPhiNoIso) ;    
-  
-  fhPtDecayNoIso  = new TH1F("hPtDecayNoIso",
-                             Form("Number of not isolated leading pi0 decay particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                             nptbins,ptmin,ptmax); 
-  fhPtDecayNoIso->SetYTitle("N");
-  fhPtDecayNoIso->SetXTitle("p_{T} (GeV/c)");
-  outputContainer->Add(fhPtDecayNoIso) ;
-  
-  fhEtaPhiDecayNoIso  = new TH2F("hEtaPhiDecayNoIso",
-                                 Form("Number of not isolated leading Pi0 decay particles #eta vs #phi for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f",r,ptthre,ptfrac),
-                                 netabins,etamin,etamax,nphibins,phimin,phimax); 
-  fhEtaPhiDecayNoIso->SetXTitle("#eta");
-  fhEtaPhiDecayNoIso->SetYTitle("#phi");
-  outputContainer->Add(fhEtaPhiDecayNoIso) ;
-  
-  if(IsDataMC())
-  {
-    fhPtNoIsoPi0  = new TH1F
-    ("hPtNoIsoPi0","Number of not isolated leading #gamma from #pi^{0} (2 #gamma)",nptbins,ptmin,ptmax); 
-    fhPtNoIsoPi0->SetYTitle("N");
-    fhPtNoIsoPi0->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoPi0) ;
-    
-    fhPtNoIsoPi0Decay  = new TH1F
-    ("hPtNoIsoPi0Decay","Number of not isolated leading #gamma from #pi^{0} decay",nptbins,ptmin,ptmax); 
-    fhPtNoIsoPi0Decay->SetYTitle("N");
-    fhPtNoIsoPi0Decay->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoPi0Decay) ;
-    
-    fhPtNoIsoEtaDecay  = new TH1F
-    ("hPtNoIsoEtaDecay","Number of not isolated leading #gamma from eta decay",nptbins,ptmin,ptmax); 
-    fhPtNoIsoEtaDecay->SetYTitle("N");
-    fhPtNoIsoEtaDecay->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoEtaDecay) ;
-    
-    fhPtNoIsoOtherDecay  = new TH1F
-    ("hPtNoIsoOtherDecay","Number of not isolated leading #gamma from other decay",nptbins,ptmin,ptmax); 
-    fhPtNoIsoOtherDecay->SetYTitle("N");
-    fhPtNoIsoOtherDecay->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoOtherDecay) ;
-    
-    fhPtNoIsoPrompt  = new TH1F
-    ("hPtNoIsoPrompt","Number of not isolated leading prompt #gamma",nptbins,ptmin,ptmax); 
-    fhPtNoIsoPrompt->SetYTitle("N");
-    fhPtNoIsoPrompt->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoPrompt) ;
-    
-    fhPtIsoMCPhoton  = new TH1F
-    ("hPtIsoMCPhoton","Number of isolated leading  #gamma",nptbins,ptmin,ptmax); 
-    fhPtIsoMCPhoton->SetYTitle("N");
-    fhPtIsoMCPhoton->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtIsoMCPhoton) ;
-    
-    fhPtNoIsoMCPhoton  = new TH1F
-    ("hPtNoIsoMCPhoton","Number of not isolated leading #gamma",nptbins,ptmin,ptmax); 
-    fhPtNoIsoMCPhoton->SetYTitle("N");
-    fhPtNoIsoMCPhoton->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoMCPhoton) ;
-    
-//    fhPtNoIsoConversion  = new TH1F
-//    ("hPtNoIsoConversion","Number of not isolated leading conversion #gamma",nptbins,ptmin,ptmax); 
-//    fhPtNoIsoConversion->SetYTitle("N");
-//    fhPtNoIsoConversion->SetXTitle("p_{T} (GeV/c)");
-//    outputContainer->Add(fhPtNoIsoConversion) ;
-    
-    fhPtNoIsoFragmentation  = new TH1F
-    ("hPtNoIsoFragmentation","Number of not isolated leading fragmentation #gamma",nptbins,ptmin,ptmax); 
-    fhPtNoIsoFragmentation->SetYTitle("N");
-    fhPtNoIsoFragmentation->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoFragmentation) ;
-    
-    fhPtNoIsoHadron  = new TH1F
-    ("hPtNoIsoHadron","Number of not isolated leading hadrons",nptbins,ptmin,ptmax); 
-    fhPtNoIsoHadron->SetYTitle("N");
-    fhPtNoIsoHadron->SetXTitle("p_{T} (GeV/c)");
-    outputContainer->Add(fhPtNoIsoHadron) ;
-    
-  }//Histos with MC
-  
-  
   if(fMakeSeveralIC)
   {
     const Int_t buffersize = 255;
     char name[buffersize];
     char title[buffersize];
     for(Int_t icone = 0; icone<fNCones; icone++)
-    {  
+    {
       // sum pt in cone vs. pt leading
       snprintf(name, buffersize,"hSumPtLeadingPt_Cone_%d",icone);
-      snprintf(title, buffersize,"#Sigma p_{T} in isolation cone for R = %2.2f",fConeSizes[icone]);
+      snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",fConeSizes[icone]);
       fhSumPtLeadingPt[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}p_{T} (GeV/c)");//#Sigma p_{T}
-      fhSumPtLeadingPt[icone] ->SetXTitle("p_{T}^{leading} (GeV/c)");
+      fhSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
+      fhSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
       outputContainer->Add(fhSumPtLeadingPt[icone]) ;
-   
-      // pt in cone vs. pt leading      
+      
+      // pt in cone vs. pt leading
       snprintf(name, buffersize,"hPtLeadingPt_Cone_%d",icone);
-      snprintf(title, buffersize,"p_{T} in isolation cone for R = %2.2f",fConeSizes[icone]);
-      fhPtLeadingPt[icone]  = new TH2F(name, title,  nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax); 
-      fhPtLeadingPt[icone] ->SetYTitle("p_{T}^{cone} (GeV/c)");
-      fhPtLeadingPt[icone] ->SetXTitle("p_{T}^{leading} (GeV/c)");
-      outputContainer->Add(fhPtLeadingPt[icone]) ;    
-
-       // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
-        snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
-      snprintf(title, buffersize,"#Sigma p_{T} in isolation cone for R = %2.2f",fConeSizes[icone]);
+      snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} =  %2.2f",fConeSizes[icone]);
+      fhPtLeadingPt[icone]  = new TH2F(name, title,  nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
+      fhPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
+      fhPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
+      outputContainer->Add(fhPtLeadingPt[icone]) ;
+      
+      // sum pt in cone vs. pt leading in the forward region (for background subtraction studies)
+      snprintf(name, buffersize,"hPerpSumPtLeadingPt_Cone_%d",icone);
+      snprintf(title, buffersize,"#Sigma #it{p}_{T} in isolation cone for #it{R} =  %2.2f",fConeSizes[icone]);
       fhPerpSumPtLeadingPt[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-      fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}p_{T} (GeV/c)");//#Sigma p_{T}
-      fhPerpSumPtLeadingPt[icone] ->SetXTitle("p_{T}^{leading} (GeV/c)");
+      fhPerpSumPtLeadingPt[icone] ->SetYTitle("#sum_{cone}#it{p}_{T} (GeV/#it{c})");//#Sigma #it{p}_{T}
+      fhPerpSumPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
       outputContainer->Add(fhPerpSumPtLeadingPt[icone]) ;
       
-      // pt in cone vs. pt leading in the forward region (for background subtraction studies)    
-        snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
-      snprintf(title, buffersize,"p_{T} in isolation cone for R = %2.2f",fConeSizes[icone]);
-      fhPerpPtLeadingPt[icone]  = new TH2F(name, title,  nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax); 
-      fhPerpPtLeadingPt[icone] ->SetYTitle("p_{T}^{cone} (GeV/c)");
-      fhPerpPtLeadingPt[icone] ->SetXTitle("p_{T}^{leading} (GeV/c)");
-      outputContainer->Add(fhPerpPtLeadingPt[icone]) ;    
-  
-
+      // pt in cone vs. pt leading in the forward region (for background subtraction studies)
+      snprintf(name, buffersize,"hPerpPtLeadingPt_Cone_%d",icone);
+      snprintf(title, buffersize,"#it{p}_{T} in isolation cone for #it{R} =  %2.2f",fConeSizes[icone]);
+      fhPerpPtLeadingPt[icone]  = new TH2F(name, title,  nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax);
+      fhPerpPtLeadingPt[icone] ->SetYTitle("#it{p}_{T}^{cone} (GeV/#it{c})");
+      fhPerpPtLeadingPt[icone] ->SetXTitle("#it{p}_{T}^{leading} (GeV/#it{c})");
+      outputContainer->Add(fhPerpPtLeadingPt[icone]) ;
+      
       if(IsDataMC())
       {
-        snprintf(name, buffersize,"hPtSumPrompt_Cone_%d",icone);
-        snprintf(title, buffersize,"Candidate Prompt cone sum p_{T} for R = %2.2f vs candidate p_{T}",fConeSizes[icone]);
-        fhPtSumIsolatedPrompt[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-        fhPtSumIsolatedPrompt[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolatedPrompt[icone]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolatedPrompt[icone]) ; 
-        
-        snprintf(name, buffersize,"hPtSumFragmentation_Cone_%d",icone);
-        snprintf(title, buffersize,"Candidate Fragmentation cone sum p_{T} for R = %2.2fvs candidate p_{T}",fConeSizes[icone]);
-        fhPtSumIsolatedFragmentation[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-        fhPtSumIsolatedFragmentation[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolatedFragmentation[icone]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolatedFragmentation[icone]) ; 
-        
-        snprintf(name, buffersize,"hPtSumPi0_Cone_%d",icone);
-        snprintf(title, buffersize,"Candidate Pi0 cone sum p_{T} for R = %2.2f vs candidate p_{T}",fConeSizes[icone]);
-        fhPtSumIsolatedPi0[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-        fhPtSumIsolatedPi0[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolatedPi0[icone]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolatedPi0[icone]) ; 
-        
-        snprintf(name, buffersize,"hPtSumPi0Decay_Cone_%d",icone);
-        snprintf(title, buffersize,"Candidate Pi0Decay cone sum p_{T} for R = %2.2f vs candidate p_{T}",fConeSizes[icone]);
-        fhPtSumIsolatedPi0Decay[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-        fhPtSumIsolatedPi0Decay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolatedPi0Decay[icone]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolatedPi0Decay[icone]) ; 
-        
-        snprintf(name, buffersize,"hPtSumEtaDecay_Cone_%d",icone);
-        snprintf(title, buffersize,"Candidate EtaDecay cone sum p_{T} for R = %2.2f vs candidate p_{T}",fConeSizes[icone]);
-        fhPtSumIsolatedEtaDecay[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-        fhPtSumIsolatedEtaDecay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolatedEtaDecay[icone]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolatedEtaDecay[icone]) ;         
-        
-        snprintf(name, buffersize,"hPtSumOtherDecay_Cone_%d",icone);
-        snprintf(title, buffersize,"Candidate OtherDecay cone sum p_{T} for R = %2.2f vs candidate p_{T}",fConeSizes[icone]);
-        fhPtSumIsolatedOtherDecay[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-        fhPtSumIsolatedOtherDecay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolatedOtherDecay[icone]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolatedOtherDecay[icone]) ; 
-        
-//        snprintf(name, buffersize,"hPtSumConversion_Cone_%d",icone);
-//        snprintf(title, buffersize,"Candidate Conversion cone sum p_{T} for R = %2.2f vs candidate p_{T}",fConeSizes[icone]);
-//        fhPtSumIsolatedConversion[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-//        fhPtSumIsolatedConversion[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-//        fhPtSumIsolatedConversion[icone]->SetXTitle("p_{T} (GeV/c)");
-//        outputContainer->Add(fhPtSumIsolatedConversion[icone]) ; 
-        
-        snprintf(name, buffersize,"hPtSumHadron_Cone_%d",icone);
-        snprintf(title, buffersize,"Candidate Hadron cone sum p_{T} for R = %2.2f vs candidate p_{T}",fConeSizes[icone]);
-        fhPtSumIsolatedHadron[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
-        fhPtSumIsolatedHadron[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolatedHadron[icone]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolatedHadron[icone]) ; 
-        
+        for(Int_t imc = 0; imc < 9; imc++)
+        {
+          snprintf(name , buffersize,"hSumPtLeadingPt_MC%s_Cone_%d",mcPartName[imc].Data(),icone);
+          snprintf(title, buffersize,"Candidate %s #it{p}_{T} vs cone #Sigma #it{p}_{T} for #it{R}=%2.2f",mcPartType[imc].Data(),fConeSizes[icone]);
+          fhSumPtLeadingPtMC[imc][icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
+          fhSumPtLeadingPtMC[imc][icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
+          fhSumPtLeadingPtMC[imc][icone]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+          outputContainer->Add(fhSumPtLeadingPtMC[imc][icone]) ;
+        }
       }//Histos with MC
       
       for(Int_t ipt = 0; ipt<fNPtThresFrac;ipt++)
-      {   
-
+      {
         snprintf(name, buffersize,"hPtThres_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate p_{T} distribution for R = %2.2f and p_{T}^{th} = %2.2f GeV/c",fConeSizes[icone],fPtThresholds[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for #it{R} =  %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
         fhPtThresIsolated[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-        fhPtThresIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtThresIsolated[icone][ipt]) ; 
+        fhPtThresIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPtThresIsolated[icone][ipt]) ;
         
         snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate p_{T} distribution for R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
         fhPtFracIsolated[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-        fhPtFracIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtFracIsolated[icone][ipt]) ; 
-        
+        fhPtFracIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhPtFracIsolated[icone][ipt]) ;
         
-        snprintf(name, buffersize,"hPtSum_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate p_{T} distribution for R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
-        fhPtSumIsolated[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-        // fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumIsolated[icone][ipt]) ;
+        snprintf(name, buffersize,"hSumPt_Cone_%d_Pt%d",icone,ipt);
+        snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
+        fhSumPtIsolated[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
+        // fhSumPtIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
+        fhSumPtIsolated[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+        outputContainer->Add(fhSumPtIsolated[icone][ipt]) ;
         
         snprintf(name, buffersize,"hPtSumDensity_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate p_{T} distribution for density in R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for density in #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
         fhPtSumDensityIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
-        //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumDensityIso[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
+        //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
+        fhPtSumDensityIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
         outputContainer->Add(fhPtSumDensityIso[icone][ipt]) ;
         
         snprintf(name, buffersize,"hPtFracPtSum_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate p_{T} distribution for PtFracPtSum in R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #it{p}_{T} distribution for PtFracPtSum in #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
         fhPtFracPtSumIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
-        //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtFracPtSumIso[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
+        //fhPtSumIsolated[icone][ipt]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
+        fhPtFracPtSumIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
         outputContainer->Add(fhPtFracPtSumIso[icone][ipt]) ;
         
-        // pt decays isolated
-        snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate p_{T} distribution for R = %2.2f and p_{T}^{th} = %2.2f GeV/c",fConeSizes[icone],fPtThresholds[ipt]);
-        fhPtPtThresDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-        fhPtPtThresDecayIso[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
-        
-        snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate p_{T} distribution for R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
-        fhPtPtFracDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-        fhPtPtFracDecayIso[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
-        
-        snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate p_{T} distribution for R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
-        fhPtPtSumDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
-        //  fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtPtSumDecayIso[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
-        
-        snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate p_{T} distribution for density in R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
-        fhPtSumDensityDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
-        //  fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
-        
-        snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate p_{T} distribution for PtFracPtSum in R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
-        fhPtFracPtSumDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
-        //  fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma p_{T} (GeV/c)");
-        fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-        outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
-        
-        
         // eta:phi
         snprintf(name, buffersize,"hEtaPhiPtThres_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for R = %2.2f and p_{T}^{th} = %2.2f GeV/c",fConeSizes[icone],fPtThresholds[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for #it{R} =  %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
         fhEtaPhiPtThresIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
         fhEtaPhiPtThresIso[icone][ipt]->SetXTitle("#eta");
         fhEtaPhiPtThresIso[icone][ipt]->SetYTitle("#phi");
         outputContainer->Add(fhEtaPhiPtThresIso[icone][ipt]) ;
         
         snprintf(name, buffersize,"hEtaPhiPtFrac_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
         fhEtaPhiPtFracIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
         fhEtaPhiPtFracIso[icone][ipt]->SetXTitle("#eta");
         fhEtaPhiPtFracIso[icone][ipt]->SetYTitle("#phi");
         outputContainer->Add(fhEtaPhiPtFracIso[icone][ipt]) ;
         
         snprintf(name, buffersize,"hEtaPhiPtSum_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
         fhEtaPhiPtSumIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
         fhEtaPhiPtSumIso[icone][ipt]->SetXTitle("#eta");
         fhEtaPhiPtSumIso[icone][ipt]->SetYTitle("#phi");
         outputContainer->Add(fhEtaPhiPtSumIso[icone][ipt]) ;
         
         snprintf(name, buffersize,"hEtaPhiSumDensity_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for density R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for density #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
         fhEtaPhiSumDensityIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
         fhEtaPhiSumDensityIso[icone][ipt]->SetXTitle("#eta");
         fhEtaPhiSumDensityIso[icone][ipt]->SetYTitle("#phi");
         outputContainer->Add(fhEtaPhiSumDensityIso[icone][ipt]) ;
         
         snprintf(name, buffersize,"hEtaPhiFracPtSum_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for FracPtSum R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
+        snprintf(title, buffersize,"Isolated candidate #eta:#phi distribution for FracPtSum #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
         fhEtaPhiFracPtSumIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
         fhEtaPhiFracPtSumIso[icone][ipt]->SetXTitle("#eta");
         fhEtaPhiFracPtSumIso[icone][ipt]->SetYTitle("#phi");
         outputContainer->Add(fhEtaPhiFracPtSumIso[icone][ipt]) ;
         
-        // eta:phi decays
-        snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for R = %2.2f and p_{T}^{th} = %2.2f GeV/c",fConeSizes[icone],fPtThresholds[ipt]);
-        fhEtaPhiPtThresDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
-        fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
-        fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
-        outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
-        
-        snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
-        fhEtaPhiPtFracDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
-        fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
-        fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
-        outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
-        
-        
-        snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
-        fhEtaPhiPtSumDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
-        fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
-        fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
-        outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
-        
-        snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for density R = %2.2f and p_{T}^{sum} = %2.2f GeV/c",fConeSizes[icone],fSumPtThresholds[ipt]);
-        fhEtaPhiSumDensityDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
-        fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
-        fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
-        outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
-        
-        snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
-        snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for FracPtSum R = %2.2f and p_{T}^{fr} = %2.2f GeV/c",fConeSizes[icone],fPtFractions[ipt]);
-        fhEtaPhiFracPtSumDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
-        fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
-        fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
-        outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
-        
-        
-        if(IsDataMC())
+        if(fFillTaggedDecayHistograms)
         {
-          snprintf(name, buffersize,"hPtThresMCPrompt_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtThresIsolatedPrompt[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtThresIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtThresIsolatedPrompt[icone][ipt]) ; 
-          
-          snprintf(name, buffersize,"hPtFracMCPrompt_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtFracIsolatedPrompt[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtFracIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtFracIsolatedPrompt[icone][ipt]) ; 
+          // pt decays isolated
+          snprintf(name, buffersize,"hPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for #it{R} =  %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
+          fhPtPtThresDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
+          fhPtPtThresDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhPtPtThresDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtThresMCFragmentation_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtThresIsolatedFragmentation[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtThresIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtThresIsolatedFragmentation[icone][ipt]) ; 
+          snprintf(name, buffersize,"hPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
+          fhPtPtFracDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
+          fhPtPtFracDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhPtPtFracDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtFracMCFragmentation_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtFracIsolatedFragmentation[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtFracIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtFracIsolatedFragmentation[icone][ipt]) ; 
+          snprintf(name, buffersize,"hPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
+          fhPtPtSumDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
+          //  fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
+          fhPtPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhPtPtSumDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtThresMCPi0_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Pi0 p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtThresIsolatedPi0[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtThresIsolatedPi0[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtThresIsolatedPi0[icone][ipt]) ; 
+          snprintf(name, buffersize,"hPtSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for density in #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
+          fhPtSumDensityDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
+          //  fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
+          fhPtSumDensityDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhPtSumDensityDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtFracMCPi0_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Pi0 p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtFracIsolatedPi0[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtFracIsolatedPi0[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtFracIsolatedPi0[icone][ipt]) ;
+          snprintf(name, buffersize,"hPtFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #it{p}_{T} distribution for PtFracPtSum in #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
+          fhPtFracPtSumDecayIso[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);//,nptsumbins,ptsummin,ptsummax);
+          //  fhPtPtSumDecayIso[icone]->SetYTitle("#Sigma #it{p}_{T} (GeV/#it{c})");
+          fhPtFracPtSumDecayIso[icone][ipt]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+          outputContainer->Add(fhPtFracPtSumDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtThresMCPi0Decay_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtThresIsolatedPi0Decay[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtThresIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtThresIsolatedPi0Decay[icone][ipt]) ; 
+          // eta:phi decays
+          snprintf(name, buffersize,"hEtaPhiPtThres_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for #it{R} =  %2.2f and #it{p}_{T}^{th} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtThresholds[ipt]);
+          fhEtaPhiPtThresDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhEtaPhiPtThresDecayIso[icone][ipt]->SetXTitle("#eta");
+          fhEtaPhiPtThresDecayIso[icone][ipt]->SetYTitle("#phi");
+          outputContainer->Add(fhEtaPhiPtThresDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtFracMCPi0Decay_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtFracIsolatedPi0Decay[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtFracIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtFracIsolatedPi0Decay[icone][ipt]) ; 
+          snprintf(name, buffersize,"hEtaPhiPtFrac_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
+          fhEtaPhiPtFracDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhEtaPhiPtFracDecayIso[icone][ipt]->SetXTitle("#eta");
+          fhEtaPhiPtFracDecayIso[icone][ipt]->SetYTitle("#phi");
+          outputContainer->Add(fhEtaPhiPtFracDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtThresMCEtaDecay_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate EtaDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtThresIsolatedEtaDecay[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtThresIsolatedEtaDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtThresIsolatedEtaDecay[icone][ipt]) ; 
           
-          snprintf(name, buffersize,"hPtFracMCEtaDecay_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate EtaDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtFracIsolatedEtaDecay[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtFracIsolatedEtaDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtFracIsolatedEtaDecay[icone][ipt]) ; 
+          snprintf(name, buffersize,"hEtaPhiPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
+          fhEtaPhiPtSumDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhEtaPhiPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
+          fhEtaPhiPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
+          outputContainer->Add(fhEtaPhiPtSumDecayIso[icone][ipt]) ;
           
+          snprintf(name, buffersize,"hEtaPhiSumDensity_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for density #it{R} =  %2.2f and #it{p}_{T}^{sum} = %2.2f GeV/#it{c}",fConeSizes[icone],fSumPtThresholds[ipt]);
+          fhEtaPhiSumDensityDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhEtaPhiSumDensityDecayIso[icone][ipt]->SetXTitle("#eta");
+          fhEtaPhiSumDensityDecayIso[icone][ipt]->SetYTitle("#phi");
+          outputContainer->Add(fhEtaPhiSumDensityDecayIso[icone][ipt]) ;
           
-          snprintf(name, buffersize,"hPtThresMCOtherDecay_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtThresIsolatedOtherDecay[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtThresIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtThresIsolatedOtherDecay[icone][ipt]) ; 
-          
-          snprintf(name, buffersize,"hPtFracMCOtherDecay_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtFracIsolatedOtherDecay[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtFracIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtFracIsolatedOtherDecay[icone][ipt]) ;
-          
-//          snprintf(name, buffersize,"hPtThresMCConversion_Cone_%d_Pt%d",icone,ipt);
-//          snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-//          fhPtThresIsolatedConversion[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-//          fhPtThresIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-//          outputContainer->Add(fhPtThresIsolatedConversion[icone][ipt]) ; 
-          
-//          snprintf(name, buffersize,"hPtFracMCConversion_Cone_%d_Pt%d",icone,ipt);
-//          snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-//          fhPtFracIsolatedConversion[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-//          fhPtFracIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-//          outputContainer->Add(fhPtFracIsolatedConversion[icone][ipt]) ;
-          
-          snprintf(name, buffersize,"hPtThresMCHadron_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Hadron p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtThresIsolatedHadron[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtThresIsolatedHadron[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtThresIsolatedHadron[icone][ipt]) ; 
-          
-          snprintf(name, buffersize,"hPtFracMCHadron_Cone_%d_Pt%d",icone,ipt);
-          snprintf(title, buffersize,"Isolated candidate Hadron p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
-          fhPtFracIsolatedHadron[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
-          fhPtFracIsolatedHadron[icone][ipt]->SetXTitle("p_{T} (GeV/c)");
-          outputContainer->Add(fhPtFracIsolatedHadron[icone][ipt]) ;  
+          snprintf(name, buffersize,"hEtaPhiFracPtSum_Decay_Cone_%d_Pt%d",icone,ipt);
+          snprintf(title, buffersize,"Isolated decay candidate #eta:#phi distribution for FracPtSum #it{R} =  %2.2f and #it{p}_{T}^{fr} = %2.2f GeV/#it{c}",fConeSizes[icone],fPtFractions[ipt]);
+          fhEtaPhiFracPtSumDecayIso[icone][ipt]  = new TH2F(name, title,netabins,etamin,etamax,nphibins,phimin,phimax);
+          fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetXTitle("#eta");
+          fhEtaPhiFracPtSumDecayIso[icone][ipt]->SetYTitle("#phi");
+          outputContainer->Add(fhEtaPhiFracPtSumDecayIso[icone][ipt]) ;
           
+        }
+        
+        if(IsDataMC())
+        {
+          for(Int_t imc = 0; imc < 9; imc++)
+          {
+            snprintf(name , buffersize,"hPtThreshMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
+            snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #it{p}_{T}^{th}=%2.2f",
+                     mcPartType[imc].Data(),fConeSizes[icone], fPtThresholds[ipt]);
+            fhPtThresIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
+            fhPtThresIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
+            fhPtThresIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+            outputContainer->Add(fhPtThresIsolatedMC[imc][icone][ipt]) ;
+            
+            
+            snprintf(name , buffersize,"hPtFracMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
+            snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}/#it{p}_{T}^{trig}=%2.2f",
+                     mcPartType[imc].Data(),fConeSizes[icone], fPtFractions[ipt]);
+            fhPtFracIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
+            fhPtFracIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
+            fhPtFracIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+            outputContainer->Add(fhPtFracIsolatedMC[imc][icone][ipt]) ;
+            
+            snprintf(name , buffersize,"hSumPtMC%s_Cone_%d_Pt%d",mcPartName[imc].Data(),icone,ipt);
+            snprintf(title, buffersize,"Isolated %s #it{p}_{T} for #it{R}=%2.2f and #Sigma #it{p}_{T}^{in cone}=%2.2f",
+                     mcPartType[imc].Data(),fConeSizes[icone], fSumPtThresholds[ipt]);
+            fhSumPtIsolatedMC[imc][icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax);
+            fhSumPtIsolatedMC[imc][icone][ipt]->SetYTitle("#it{counts}");
+            fhSumPtIsolatedMC[imc][icone][ipt]->SetXTitle("#it{p}_{T}(GeV/#it{c})");
+            outputContainer->Add(fhSumPtIsolatedMC[imc][icone][ipt]) ;
+          }
         }//Histos with MC
       }//icone loop
     }//ipt loop
@@ -3170,86 +3067,129 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
     for (Int_t i = 0; i < 7 ; i++)
     {
       fhEIsoPileUp[i]   = new TH1F(Form("hEPileUp%s",pileUpName[i].Data()),
-                                Form("Number of isolated particles vs E for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f, pile-up event by %s",r,ptthre,ptfrac,pileUpName[i].Data()),
-                                nptbins,ptmin,ptmax); 
-      fhEIsoPileUp[i]->SetYTitle("dN / dE");
-      fhEIsoPileUp[i]->SetXTitle("E (GeV)");
-      outputContainer->Add(fhEIsoPileUp[i]) ; 
+                                   Form("Number of isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
+                                   nptbins,ptmin,ptmax);
+      fhEIsoPileUp[i]->SetYTitle("d#it{N} / d#it{E}");
+      fhEIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
+      outputContainer->Add(fhEIsoPileUp[i]) ;
       
       fhPtIsoPileUp[i]  = new TH1F(Form("hPtPileUp%s",pileUpName[i].Data()),
-                                Form("Number of isolated particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr}= %2.2f, pile-up event by %s ",r,ptthre,ptfrac,pileUpName[i].Data()),
-                                nptbins,ptmin,ptmax); 
-      fhPtIsoPileUp[i]->SetYTitle("dN / p_{T}");
-      fhPtIsoPileUp[i]->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhPtIsoPileUp[i]) ; 
+                                   Form("Number of isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
+                                   nptbins,ptmin,ptmax);
+      fhPtIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
+      fhPtIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhPtIsoPileUp[i]) ;
       
       fhENoIsoPileUp[i]   = new TH1F(Form("hENoIsoPileUp%s",pileUpName[i].Data()),
-                                  Form("Number of not isolated particles vs E for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr} = %2.2f, pile-up event by %s",r,ptthre,ptfrac,pileUpName[i].Data()),
-                                  nptbins,ptmin,ptmax); 
-      fhENoIsoPileUp[i]->SetYTitle("dN / dE");
-      fhENoIsoPileUp[i]->SetXTitle("E (GeV)");
-      outputContainer->Add(fhENoIsoPileUp[i]) ; 
+                                     Form("Number of not isolated particles vs E, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
+                                     nptbins,ptmin,ptmax);
+      fhENoIsoPileUp[i]->SetYTitle("d#it{N} / dE");
+      fhENoIsoPileUp[i]->SetXTitle("#it{E} (GeV)");
+      outputContainer->Add(fhENoIsoPileUp[i]) ;
       
       fhPtNoIsoPileUp[i]  = new TH1F(Form("hPtNoIsoPileUp%s",pileUpName[i].Data()),
-                                  Form("Number of not isolated particles vs p_{T} for R = %2.2f, p_{T}^{th} = %2.2f, p_{T}^{fr}= %2.2f, pile-up event by %s ",r,ptthre,ptfrac,pileUpName[i].Data()),
-                                  nptbins,ptmin,ptmax); 
-      fhPtNoIsoPileUp[i]->SetYTitle("dN / p_{T}");
-      fhPtNoIsoPileUp[i]->SetXTitle("p_{T} (GeV/c)");
-      outputContainer->Add(fhPtNoIsoPileUp[i]) ;     
+                                     Form("Number of not isolated particles vs #it{p}_{T}, %s, pile-up event by %s",parTitle.Data(),pileUpName[i].Data()),
+                                     nptbins,ptmin,ptmax);
+      fhPtNoIsoPileUp[i]->SetYTitle("d#it{N} / #it{p}_{T}");
+      fhPtNoIsoPileUp[i]->SetXTitle("#it{p}_{T} (GeV/#it{c})");
+      outputContainer->Add(fhPtNoIsoPileUp[i]) ;
     }
     
-    fhTimeENoCut  = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax); 
-    fhTimeENoCut->SetXTitle("E (GeV)");
-    fhTimeENoCut->SetYTitle("time (ns)");
-    outputContainer->Add(fhTimeENoCut);  
+    fhTimeENoCut  = new TH2F ("hTimeE_NoCut","time of cluster vs E of clusters, no cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
+    fhTimeENoCut->SetXTitle("#it{E} (GeV)");
+    fhTimeENoCut->SetYTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimeENoCut);
     
-    fhTimeESPD  = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax); 
-    fhTimeESPD->SetXTitle("E (GeV)");
-    fhTimeESPD->SetYTitle("time (ns)");
-    outputContainer->Add(fhTimeESPD);  
+    fhTimeESPD  = new TH2F ("hTimeE_SPD","time of cluster vs E of clusters, SPD cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
+    fhTimeESPD->SetXTitle("#it{E} (GeV)");
+    fhTimeESPD->SetYTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimeESPD);
     
-    fhTimeESPDMulti  = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax); 
-    fhTimeESPDMulti->SetXTitle("E (GeV)");
-    fhTimeESPDMulti->SetYTitle("time (ns)");
-    outputContainer->Add(fhTimeESPDMulti);  
+    fhTimeESPDMulti  = new TH2F ("hTimeE_SPDMulti","time of cluster vs E of clusters, SPD multi cut", nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
+    fhTimeESPDMulti->SetXTitle("#it{E} (GeV)");
+    fhTimeESPDMulti->SetYTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimeESPDMulti);
     
-    fhTimeNPileUpVertSPD  = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50); 
+    fhTimeNPileUpVertSPD  = new TH2F ("hTime_NPileUpVertSPD","time of cluster vs N pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
     fhTimeNPileUpVertSPD->SetYTitle("# vertex ");
-    fhTimeNPileUpVertSPD->SetXTitle("time (ns)");
-    outputContainer->Add(fhTimeNPileUpVertSPD);  
+    fhTimeNPileUpVertSPD->SetXTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimeNPileUpVertSPD);
     
-    fhTimeNPileUpVertTrack  = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 ); 
+    fhTimeNPileUpVertTrack  = new TH2F ("hTime_NPileUpVertTracks","time of cluster vs N pile-up Tracks vertex", ntimebins,timemin,timemax, 50,0,50 );
     fhTimeNPileUpVertTrack->SetYTitle("# vertex ");
-    fhTimeNPileUpVertTrack->SetXTitle("time (ns)");
-    outputContainer->Add(fhTimeNPileUpVertTrack);  
+    fhTimeNPileUpVertTrack->SetXTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimeNPileUpVertTrack);
     
-    fhTimeNPileUpVertContributors  = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50); 
+    fhTimeNPileUpVertContributors  = new TH2F ("hTime_NPileUpVertContributors","time of cluster vs N constributors to pile-up SPD vertex", ntimebins,timemin,timemax,50,0,50);
     fhTimeNPileUpVertContributors->SetYTitle("# vertex ");
-    fhTimeNPileUpVertContributors->SetXTitle("time (ns)");
-    outputContainer->Add(fhTimeNPileUpVertContributors);  
-    
-    fhTimePileUpMainVertexZDistance  = new TH2F ("hTime_PileUpMainVertexZDistance","time of cluster vs distance in Z pile-up SPD vertex - main SPD vertex",ntimebins,timemin,timemax,100,0,50); 
-    fhTimePileUpMainVertexZDistance->SetYTitle("distance Z (cm) ");
-    fhTimePileUpMainVertexZDistance->SetXTitle("time (ns)");
-    outputContainer->Add(fhTimePileUpMainVertexZDistance);  
-    
-    fhTimePileUpMainVertexZDiamond  = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50); 
-    fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance Z (cm) ");
-    fhTimePileUpMainVertexZDiamond->SetXTitle("time (ns)");
-    outputContainer->Add(fhTimePileUpMainVertexZDiamond);  
+    fhTimeNPileUpVertContributors->SetXTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimeNPileUpVertContributors);
+    
+    fhTimePileUpMainVertexZDistance  = new TH2F ("hTime_PileUpMainVertexZDistance","time of cluster vs distance in Z pile-up SPD vertex - main SPD vertex",ntimebins,timemin,timemax,100,0,50);
+    fhTimePileUpMainVertexZDistance->SetYTitle("distance #it{z} (cm) ");
+    fhTimePileUpMainVertexZDistance->SetXTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimePileUpMainVertexZDistance);
+    
+    fhTimePileUpMainVertexZDiamond  = new TH2F ("hTime_PileUpMainVertexZDiamond","time of cluster vs distance in Z pile-up SPD vertex - z diamond",ntimebins,timemin,timemax,100,0,50);
+    fhTimePileUpMainVertexZDiamond->SetYTitle("diamond distance #it{z} (cm) ");
+    fhTimePileUpMainVertexZDiamond->SetXTitle("#it{time} (ns)");
+    outputContainer->Add(fhTimePileUpMainVertexZDiamond);
   }
   
   return outputContainer ;
   
 }
 
+//____________________________________________________
+Int_t AliAnaParticleIsolation::GetMCIndex(Int_t mcTag)
+{
+  // Histogram index depending on origin of candidate
+  
+  if(!IsDataMC()) return -1;
+  
+  if     (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
+  {
+    return kmcPrompt;
+  }
+  else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation) ||
+          GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCISR))
+  {
+    return kmcFragment;
+  }
+  else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
+  {
+    return kmcPi0;
+  }
+  else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
+  {
+    return kmcPi0Decay;
+  }
+  else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
+  {
+    return kmcEtaDecay;
+  }
+  else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
+  {
+    return kmcOtherDecay;
+  }
+  else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))
+  {
+    return kmcElectron;
+  }
+  else // anything else
+  {
+    // careful can contain also other decays, to be checked.
+    return kmcHadron;
+  }
+}
+
 //__________________________________
 void AliAnaParticleIsolation::Init()
 {
   // Do some checks and init stuff
   
-  // In case of several cone and thresholds analysis, open the cuts for the filling of the 
-  // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD(). 
+  // In case of several cone and thresholds analysis, open the cuts for the filling of the
+  // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
   // The different cones, thresholds are tested for this list of tracks, clusters.
   if(fMakeSeveralIC)
   {
@@ -3258,6 +3198,10 @@ void AliAnaParticleIsolation::Init()
     GetIsolationCut()->SetPtFraction(100);
     GetIsolationCut()->SetConeSize(1);
   }
+  
+  if(!GetReader()->IsCTSSwitchedOn() && GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::kOnlyNeutral)
+    AliFatal("STOP!: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n");
+  
 }
 
 //____________________________________________
@@ -3266,54 +3210,191 @@ void AliAnaParticleIsolation::InitParameters()
   
   //Initialize the parameters of the analysis.
   SetInputAODName("PWG4Particle");
-  SetAODObjArrayName("IsolationCone");  
+  SetAODObjArrayName("IsolationCone");
   AddToHistogramsName("AnaIsolation_");
   
-  fCalorimeter = "PHOS" ;
+  fCalorimeter = "EMCAL" ;
+  fIsoDetector = "EMCAL" ;
+  
   fReMakeIC = kFALSE ;
   fMakeSeveralIC = kFALSE ;
   
+  fLeadingOnly = kTRUE;
+  fCheckLeadingWithNeutralClusters = kTRUE;
+  
+  fNDecayBits = 1;
+  fDecayBits[0] = AliNeutralMesonSelection::kPi0;
+  fDecayBits[1] = AliNeutralMesonSelection::kEta;
+  fDecayBits[2] = AliNeutralMesonSelection::kPi0Side;
+  fDecayBits[3] = AliNeutralMesonSelection::kEtaSide;
+  
+  fNBkgBin = 11;
+  fBkgBinLimit[ 0] = 00.0; fBkgBinLimit[ 1] = 00.2; fBkgBinLimit[ 2] = 00.3; fBkgBinLimit[ 3] = 00.4; fBkgBinLimit[ 4] = 00.5;
+  fBkgBinLimit[ 5] = 01.0; fBkgBinLimit[ 6] = 01.5; fBkgBinLimit[ 7] = 02.0; fBkgBinLimit[ 8] = 03.0; fBkgBinLimit[ 9] = 05.0;
+  fBkgBinLimit[10] = 10.0; fBkgBinLimit[11] = 100.;
+  for(Int_t ibin = 12; ibin < 20; ibin++) fBkgBinLimit[ibin] = 00.0;
+  
   //----------- Several IC-----------------
-  fNCones             = 5 ; 
-  fNPtThresFrac       = 5 ; 
+  fNCones             = 5 ;
+  fNPtThresFrac       = 5 ;
   fConeSizes      [0] = 0.1;     fConeSizes      [1] = 0.2;   fConeSizes      [2] = 0.3; fConeSizes      [3] = 0.4;  fConeSizes      [4] = 0.5;
-  fPtThresholds   [0] = 1.;      fPtThresholds   [1] = 2.;    fPtThresholds   [2] = 3.;  fPtThresholds   [3] = 4.;   fPtThresholds   [4] = 5.; 
-  fPtFractions    [0] = 0.05;    fPtFractions    [1] = 0.075; fPtFractions    [2] = 0.1; fPtFractions    [3] = 1.25; fPtFractions    [4] = 1.5; 
-  fSumPtThresholds[0] = 1.;      fSumPtThresholds[1] = 2.;    fSumPtThresholds[2] = 3.;  fSumPtThresholds[3] = 4.;   fSumPtThresholds[4] = 5.; 
+  fPtThresholds   [0] = 1.;      fPtThresholds   [1] = 2.;    fPtThresholds   [2] = 3.;  fPtThresholds   [3] = 4.;   fPtThresholds   [4] = 5.;
+  fPtFractions    [0] = 0.05;    fPtFractions    [1] = 0.075; fPtFractions    [2] = 0.1; fPtFractions    [3] = 1.25; fPtFractions    [4] = 1.5;
+  fSumPtThresholds[0] = 1.;      fSumPtThresholds[1] = 2.;    fSumPtThresholds[2] = 3.;  fSumPtThresholds[3] = 4.;   fSumPtThresholds[4] = 5.;
+  
+}
+
+//_________________________________________________________________________________________
+Bool_t AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle(Int_t & idLeading)
+{
+  // Check if the what of the selected isolation candidates is leading particle in the same hemisphere
+  // comparing with all the candidates, all the tracks or all the clusters.
+  
+  Double_t ptTrig      = GetMinPt();
+  Double_t phiTrig     = 0 ;
+  Int_t index          =-1 ;
+  AliAODPWG4ParticleCorrelation* pLeading = 0;
+  
+  // Loop on stored AOD particles, find leading trigger on the selected list, with at least min pT.
+  
+  for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast() ; iaod++)
+  {
+    AliAODPWG4ParticleCorrelation* particle =  (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
+    particle->SetLeadingParticle(kFALSE); // set it later
+    
+    // Vertex cut in case of mixing
+    if(GetMixedEvent())
+    {
+      Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
+      if(check ==  0) continue;
+      if(check == -1) return kFALSE; // not sure if it is correct.
+    }
+    
+    //check if it is low pt trigger particle
+    if((particle->Pt() < GetIsolationCut()->GetPtThreshold() ||
+        particle->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
+       !fMakeSeveralIC)
+    {
+      continue ; //trigger should not come from underlying event
+    }
+
+    // find the leading particles with highest momentum
+    if (particle->Pt() > ptTrig)
+    {
+      ptTrig   = particle->Pt() ;
+      phiTrig  = particle->Phi();
+      index    = iaod     ;
+      pLeading = particle ;
+    }
+  }// finish search of leading trigger particle on the AOD branch.
+  
+  if(index < 0) return kFALSE;
+  
+  idLeading = index;
+  
+  //printf("AOD leading pT %2.2f, ID %d\n", pLeading->Pt(),pLeading->GetCaloLabel(0));
+  
+  if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
+  
+  // Compare if it is the leading of all tracks
+  
+  TVector3 p3;
+  for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
+  {
+    AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
+    
+    if(track->GetID() == pLeading->GetTrackLabel(0) || track->GetID() == pLeading->GetTrackLabel(1) ||
+       track->GetID() == pLeading->GetTrackLabel(2) || track->GetID() == pLeading->GetTrackLabel(3)   ) continue ;
+    
+    Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
+    p3.SetXYZ(mom[0],mom[1],mom[2]);
+    Float_t pt   = p3.Pt();
+    Float_t phi  = p3.Phi() ;
+    if(phi < 0) phi+=TMath::TwoPi();
+    
+    //skip this event if near side associated particle pt larger than trigger
+    
+    Float_t deltaPhi = phiTrig-phi;
+    //
+    // Calculate deltaPhi shift so that for the particles on the opposite side
+    // it is defined between 90 and 270 degrees
+    // Shift [-360,-90]  to [0, 270]
+    // and [270,360] to [-90,0]
+    if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
+    if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
+
+    if(pt > ptTrig && deltaPhi < TMath::PiOver2())  return kFALSE;
+  
+  }// track loop
+  
+  // Compare if it is leading of all calorimeter clusters
+  
+  if(fCheckLeadingWithNeutralClusters)
+  {
+    // Select the calorimeter cluster list
+    TObjArray * nePl = 0x0;
+    if      (pLeading->GetDetector() == "PHOS" )
+      nePl = GetPHOSClusters();
+    else
+      nePl = GetEMCALClusters();
+    
+    if(!nePl) return kTRUE; // Do the selection just with the tracks if no calorimeter is available.
+    
+    TLorentzVector lv;
+    for(Int_t ipr = 0;ipr < nePl->GetEntriesFast() ; ipr ++ )
+    {
+      AliVCluster * cluster = (AliVCluster *) (nePl->At(ipr)) ;
+      
+      if(cluster->GetID() == pLeading->GetCaloLabel(0) || cluster->GetID() == pLeading->GetCaloLabel(1) ) continue ;
+      
+      cluster->GetMomentum(lv,GetVertex(0));
+      
+      Float_t pt   = lv.Pt();
+      Float_t phi  = lv.Phi() ;
+      if(phi < 0) phi+=TMath::TwoPi();
+      
+      if(IsTrackMatched(cluster,GetReader()->GetInputEvent())) continue ; // avoid charged clusters, already covered by tracks, or cluster merging with track.
+      
+      // skip this event if near side associated particle pt larger than trigger
+      // not really needed for calorimeter, unless DCal is included
+     
+      Float_t deltaPhi = phiTrig-phi;
+      if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
+      if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
+
+      if(pt > ptTrig && deltaPhi < TMath::PiOver2()) return kFALSE ;
+
+    }// cluster loop
+  } // check neutral clusters
+  
+  idLeading = index ;
+  pLeading->SetLeadingParticle(kTRUE);
   
-  //------------- Histograms settings -------
-  fHistoNPtSumBins = 100 ;
-  fHistoPtSumMax   = 50 ;
-  fHistoPtSumMin   = 0.  ;
+  if( GetDebug() > 1 )
+    printf("AliAnaParticleIsolation::IsTriggerTheNearSideEventLeadingParticle() - Particle AOD with index %d is leading with pT %2.2f\n",
+           idLeading, pLeading->Pt());
   
-  fHistoNPtInConeBins = 100 ;
-  fHistoPtInConeMax   = 50 ;
-  fHistoPtInConeMin   = 0.  ;
+  return kTRUE;
   
 }
 
 //__________________________________________________
-void  AliAnaParticleIsolation::MakeAnalysisFillAOD() 
+void  AliAnaParticleIsolation::MakeAnalysisFillAOD()
 {
-  //Do analysis and fill aods
-  //Search for the isolated photon in fCalorimeter with pt > GetMinPt()
+  // Do analysis and fill aods
+  // Search for the isolated photon in fCalorimeter with GetMinPt() < pt < GetMaxPt()
+  // and if the particle is leading in the near side (if requested)
   
   if(!GetInputAODBranch())
-  {
-    printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data());
-    abort();
-  }
+    AliFatal(Form("No input particles in AOD with name branch < %s >, STOP",GetInputAODName().Data()));
   
   if(strcmp(GetInputAODBranch()->GetClass()->GetName(), "AliAODPWG4ParticleCorrelation"))
-  {
-    printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName());
-    abort();
-  }
+    AliFatal(Form("Wrong type of AOD object, change AOD class name in input AOD: It should be <AliAODPWG4ParticleCorrelation> and not <%s> \n",GetInputAODBranch()->GetClass()->GetName()));
   
   Int_t n = 0, nfrac = 0;
   Bool_t  isolated  = kFALSE ;
-  Float_t coneptsum = 0 ;
-  TObjArray * pl    = 0x0; ; 
+  Float_t coneptsum = 0, coneptlead = 0;
+  TObjArray * pl    = 0x0; ;
   
   //Select the calorimeter for candidate isolation with neutral particles
   if      (fCalorimeter == "PHOS" )
@@ -3322,87 +3403,90 @@ void  AliAnaParticleIsolation::MakeAnalysisFillAOD()
     pl = GetEMCALClusters();
   
   //Loop on AOD branch, filled previously in AliAnaPhoton, find leading particle to do isolation only with it
-  Double_t ptLeading = 0. ;
-  Int_t    idLeading = -1 ;
   TLorentzVector mom ;
-  Int_t naod = GetInputAODBranch()->GetEntriesFast();
-  if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
+  Int_t idLeading = -1 ;
+  Int_t iaod0 = 0;
+  Int_t naod  = GetInputAODBranch()->GetEntriesFast();
+  
+  if(GetDebug() > 0)
+    printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Input aod branch entries %d\n", naod);
   
-  for(Int_t iaod = 0; iaod < naod; iaod++)
+  if(IsLeadingOnlyOn())
+  {
+    Bool_t leading = IsTriggerTheNearSideEventLeadingParticle(idLeading);
+    if(!leading)
+    {
+      if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - Not leading; End fill AODs \n");
+      return;
+    }
+    iaod0 = idLeading  ; // first entry in particle loop
+    naod  = idLeading+1; // last entry in particle loop
+  }
+  
+  // Check isolation of list of candidate particles or leading particle
+  
+  for(Int_t iaod = iaod0; iaod < naod; iaod++)
   {
     AliAODPWG4ParticleCorrelation * aodinput =  (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
-   
+
+    // Check isolation only of clusters in fiducial region
+    
+    if(IsFiducialCutOn())
+    {
+      Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
+      if(! in ) continue ;
+    }
+    
     //If too small or too large pt, skip
-    if(aodinput->Pt() < GetMinPt() || aodinput->Pt() > GetMaxPt() ) continue ; 
+    Float_t pt = aodinput->Pt();
+    if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
+
     
     //check if it is low pt trigger particle
-    if((aodinput->Pt() < GetIsolationCut()->GetPtThreshold() || 
-        aodinput->Pt() < GetIsolationCut()->GetSumPtThreshold()) && 
+    if( ( pt < GetIsolationCut()->GetPtThreshold() ||  pt < GetIsolationCut()->GetSumPtThreshold() ) &&
        !fMakeSeveralIC)
     {
       continue ; //trigger should not come from underlying event
     }
     
-    //vertex cut in case of mixing
-    Int_t check = CheckMixedEventVertex(aodinput->GetCaloLabel(0), aodinput->GetTrackLabel(0));
-    if(check ==  0) continue;
-    if(check == -1) return;
+    //After cuts, study isolation
+    n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; coneptlead = 0;
+    GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
+                                        GetReader(), GetCaloPID(),
+                                        kTRUE, aodinput, GetAODObjArrayName(),
+                                        n,nfrac,coneptsum,coneptlead,isolated);
     
-    //find the leading particles with highest momentum
-    if ( aodinput->Pt() > ptLeading ) 
+    if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
+
+    if(GetDebug() > 1)
     {
-      ptLeading = aodinput->Pt() ;
-      idLeading = iaod ;
+      if(isolated) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",iaod);
+      printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");
     }
-    
-    aodinput->SetLeadingParticle(kFALSE);
-    
-  }//finish searching for leading trigger particle
-  
-  // Check isolation of leading particle
-  if(idLeading < 0) return;
-  
-  AliAODPWG4ParticleCorrelation * aodinput =  (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(idLeading));
-  aodinput->SetLeadingParticle(kTRUE);
-  
-  // Check isolation only of clusters in fiducial region
-  if(IsFiducialCutOn())
-  {
-    Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodinput->Momentum(),aodinput->GetDetector()) ;
-    if(! in ) return ;
-  }
-  
-  //After cuts, study isolation
-  n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0;
-  GetIsolationCut()->MakeIsolationCut(GetCTSTracks(),pl,
-                                      GetReader(), GetCaloPID(),
-                                      kTRUE, aodinput, GetAODObjArrayName(), 
-                                      n,nfrac,coneptsum, isolated);
-  
-  if(!fMakeSeveralIC) aodinput->SetIsolated(isolated);
-    
-  if(GetDebug() > 1) 
-  {
-    if(isolated)printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() : Particle %d IS ISOLATED \n",idLeading);
-    printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs \n");  
-  }
+
+  } // particle isolation loop
   
 }
 
 //_________________________________________________________
-void  AliAnaParticleIsolation::MakeAnalysisFillHistograms() 
+void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
 {
-  //Do analysis and fill histograms
+  // Do analysis and fill histograms
+  
+  // In case of simulated data, fill acceptance histograms
+  // Not ready for multiple case analysis.
+  if(IsDataMC() && !fMakeSeveralIC) FillAcceptanceHistograms();
   
   //Loop on stored AOD
   Int_t naod = GetInputAODBranch()->GetEntriesFast();
-  if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
-    
+  if(GetDebug() > 0)
+    printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod);
+  
   for(Int_t iaod = 0; iaod < naod ; iaod++)
   {
     AliAODPWG4ParticleCorrelation* aod =  (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod));
     
-    if(!aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
+    if(IsLeadingOnlyOn() && !aod->IsLeadingParticle()) continue; // Try to isolate only leading cluster or track
     
     // Check isolation only of clusters in fiducial region
     if(IsFiducialCutOn())
@@ -3412,86 +3496,121 @@ void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
     }
     
     Float_t pt         = aod->Pt();
+    
     //If too small or too large pt, skip
     if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
     
-    Bool_t  isolated   = aod->IsIsolated();
-    Bool_t  decay      = aod->IsTagged();
-    Float_t energy     = aod->E();
-    Float_t phi        = aod->Phi();
-    Float_t eta        = aod->Eta();
-
-    // --- In case of redoing isolation from delta AOD ----
+    Int_t mcTag        = aod->GetTag() ;
+    Int_t mcIndex      = GetMCIndex(mcTag);
     
-    if     (fMakeSeveralIC) 
+    // --- In case of redoing isolation from delta AOD ----
+    // Not standard case, not used since its implementation
+    if(fMakeSeveralIC)
     {
       //Analysis of multiple IC at same time
-      MakeSeveralICAnalysis(aod);
+      MakeSeveralICAnalysis(aod,mcIndex);
       continue;
     }
-    else if(fReMakeIC)
+    
+    // --- In case of redoing isolation multiple cuts ----
+    
+    if(fReMakeIC)
     {
       //In case a more strict IC is needed in the produced AOD
-      isolated = kFALSE;
+      Bool_t  isolated = kFALSE;
       Int_t   n = 0, nfrac = 0;
-      Float_t coneptsum = 0 ;
-
+      Float_t coneptsum = 0, coneptlead = 0;
+      
       //Recover reference arrays with clusters and tracks
       TObjArray * refclusters = aod->GetObjArray(GetAODObjArrayName()+"Clusters");
       TObjArray * reftracks   = aod->GetObjArray(GetAODObjArrayName()+"Tracks");
+      
+      GetIsolationCut()->MakeIsolationCut(reftracks,   refclusters,
+                                          GetReader(), GetCaloPID(),
+                                          kFALSE, aod, "",
+                                          n,nfrac,coneptsum,coneptlead,isolated);
+    }
+    
+    Bool_t  isolated   = aod->IsIsolated();
+    Float_t energy     = aod->E();
+    Float_t phi        = aod->Phi();
+    Float_t eta        = aod->Eta();
 
-      GetIsolationCut()->MakeIsolationCut(reftracks,   refclusters, 
-                                          GetReader(), GetCaloPID(),
-                                          kFALSE, aod, "", 
-                                          n,nfrac,coneptsum, isolated);
-      
-      fhConeSumPt          ->Fill(pt,     coneptsum);
-      fhConeSumPtTrigEtaPhi->Fill(eta,phi,coneptsum);
-      
-      if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Energy Sum in Isolation Cone %2.2f\n", coneptsum);
+    Int_t   decayTag = 0;
+    if(fFillTaggedDecayHistograms)
+    {
+      decayTag = aod->GetBtag(); // temporary
+      if(decayTag < 0) decayTag = 0; // temporary
     }
-    else 
+    
+    if(GetDebug() > 0)
+      printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f, Isolated %d\n",
+              pt, eta, phi, isolated);
+    
+    //---------------------------------------------------------------
+    // Fill pt/sum pT distribution of particles in cone or in UE band
+    //---------------------------------------------------------------
+    
+    Float_t coneptLeadCluster= 0;
+    Float_t coneptLeadTrack  = 0;
+    Float_t coneptsumCluster = 0;
+    Float_t coneptsumTrack   = 0;
+    Float_t coneptsumCell    = 0;
+    Float_t etaBandptsumClusterNorm = 0;
+    Float_t etaBandptsumTrackNorm   = 0;
+    
+    CalculateTrackSignalInCone   (aod,coneptsumTrack  , coneptLeadTrack  );
+    CalculateCaloSignalInCone    (aod,coneptsumCluster, coneptLeadCluster);
+    if(fFillCellHistograms)
+      CalculateCaloCellSignalInCone(aod,coneptsumCell   );
+    
+    if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
     {
-      if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - pt %1.1f, eta %1.1f, phi %1.1f\n",pt, eta, phi);
-      
-      FillTrackMatchingShowerShapeControlHistograms(aod,GetReader(), GetCaloPID());
+      fhConeSumPtClustervsTrack ->Fill(coneptsumCluster, coneptsumTrack );
+      fhConePtLeadClustervsTrack->Fill(coneptLeadCluster,coneptLeadTrack);
 
-      //Fill pt/sum pT distribution of particles in cone or in UE band
-      Float_t coneptsumCluster = 0;
-      Float_t coneptsumTrack   = 0;
-      Float_t coneptsumCell    = 0;
-      
-      CalculateTrackSignalInCone   (aod,coneptsumTrack  );
-      CalculateCaloSignalInCone    (aod,coneptsumCluster);
-      CalculateCaloCellSignalInCone(aod,coneptsumCell   );
-      
-      if(GetIsolationCut()->GetParticleTypeInCone()==AliIsolationCut::kNeutralAndCharged)
+      if(coneptsumTrack  > 0) fhConeSumPtClusterTrackFrac ->Fill(pt, coneptsumCluster /coneptsumTrack );
+      if(coneptLeadTrack > 0) fhConePtLeadClusterTrackFrac->Fill(pt, coneptLeadCluster/coneptLeadTrack);
+
+      if(fFillCellHistograms)
       {
-        fhConeSumPtClustervsTrack     ->Fill(coneptsumCluster,coneptsumTrack);
         fhConeSumPtCellvsTrack        ->Fill(coneptsumCell,   coneptsumTrack);
         fhConeSumPtCellTrack          ->Fill(pt,     coneptsumTrack+coneptsumCell);
         fhConeSumPtCellTrackTrigEtaPhi->Fill(eta,phi,coneptsumTrack+coneptsumCell);
-      }  
-      
-      fhConeSumPt              ->Fill(pt,     coneptsumTrack+coneptsumCluster);
-      fhConeSumPtTrigEtaPhi    ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
-     
-      if(GetDebug() > 1)
-        printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f\n", iaod, coneptsumTrack+coneptsumCluster);
-
-      //normalize phi/eta band per area unit
-      CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack) ;
+      }
     }
     
-    Int_t mcTag = aod->GetTag() ;
-
+    fhConeSumPt              ->Fill(pt,     coneptsumTrack+coneptsumCluster);
+    fhConeSumPtTrigEtaPhi    ->Fill(eta,phi,coneptsumTrack+coneptsumCluster);
+    
+    Float_t coneptLead = coneptLeadTrack;
+    if(coneptLeadCluster > coneptLeadTrack) coneptLead = coneptLeadCluster;
+    fhConePtLead->Fill(pt, coneptLead );
+    
+    if(GetDebug() > 1)
+      printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d Energy Sum in Isolation Cone %2.2f, Leading pT in cone %2.2f\n",
+             iaod, coneptsumTrack+coneptsumCluster, coneptLead);
+    
+    //normalize phi/eta band per area unit
+    if(fFillUEBandSubtractHistograms)
+      CalculateNormalizeUEBandPerUnitArea(aod, coneptsumCluster, coneptsumCell, coneptsumTrack, etaBandptsumTrackNorm, etaBandptsumClusterNorm) ;
+    
+    //  printf("Histograms analysis : cluster pt = %f, etaBandTrack = %f, etaBandCluster = %f, isolation = %d\n",aod->Pt(),etaBandptsumTrackNorm,etaBandptsumClusterNorm,aod->IsIsolated());
+    
+    //---------------------------------------------------------------
+    // Fill Shower shape and track matching histograms
+    //---------------------------------------------------------------
+    
+    FillTrackMatchingShowerShapeControlHistograms(aod, coneptsumTrack+coneptsumCluster, coneptLead, mcIndex);
+    
+    //---------------------------------------------------------------
+    // Isolated/ Non isolated histograms
+    //---------------------------------------------------------------
+    
     if(isolated)
     {
-      if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
-      
-      // Fill histograms to undertand pile-up before other cuts applied
-      // Remember to relax time cuts in the reader
-      FillPileUpHistograms(aod->GetCaloLabel(0));
+      if(GetDebug() > 1)
+        printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d ISOLATED: fill histograms\n", iaod);
       
       fhEIso      ->Fill(energy);
       fhPtIso     ->Fill(pt);
@@ -3499,16 +3618,51 @@ void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
       fhEtaIso    ->Fill(pt,eta);
       fhEtaPhiIso ->Fill(eta,phi);
       
-      fhPtNLocMaxIso    ->Fill(pt,aod->GetFiducialArea()) ;
-      fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
-      fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
+      if(IsDataMC())
+      {
+        // For histograms in arrays, index in the array, corresponding to any particle origin
+        if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
+        {
+          fhPtIsoMC [kmcPhoton]->Fill(pt);
+          fhPhiIsoMC[kmcPhoton]->Fill(pt,phi);
+          fhEtaIsoMC[kmcPhoton]->Fill(pt,eta);
+        }
+        
+        fhPtIsoMC [mcIndex]->Fill(pt);
+        fhPhiIsoMC[mcIndex]->Fill(pt,phi);
+        fhEtaIsoMC[mcIndex]->Fill(pt,eta);
+      }//Histograms with MC
+      
+      // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
+      if(fFillTaggedDecayHistograms && decayTag > 0)
+      {
+        for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
+        {
+          if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
+          {
+            fhPtDecayIso       [ibit]->Fill(pt);
+            fhEtaPhiDecayIso   [ibit]->Fill(eta,phi);
+
+            if(IsDataMC())
+            {
+              if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
+                fhPtDecayIsoMC[ibit][kmcPhoton]->Fill(pt);
+              
+              fhPtDecayIsoMC[ibit][mcIndex]->Fill(pt);
+            }
+          } // bit ok
+        } // bit loop
+      } // decay histograms
+      
+      if(fFillNLMHistograms)
+        fhPtNLocMaxIso ->Fill(pt,aod->GetFiducialArea()) ; // remember to change method name
       
-      if(decay) 
+      if(fFillHighMultHistograms)
       {
-        fhPtDecayIso    ->Fill(pt);
-        fhEtaPhiDecayIso->Fill(eta,phi);
+        fhPtCentralityIso ->Fill(pt,GetEventCentrality()) ;
+        fhPtEventPlaneIso ->Fill(pt,GetEventPlaneAngle() ) ;
       }
-      
+
       if(fFillPileUpHistograms)
       {
         if(GetReader()->IsPileUpFromSPD())               { fhEIsoPileUp[0] ->Fill(energy) ; fhPtIsoPileUp[0]->Fill(pt) ; }
@@ -3518,75 +3672,53 @@ void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
         if(GetReader()->IsPileUpFromSPDAndNotEMCal())    { fhEIsoPileUp[4] ->Fill(energy) ; fhPtIsoPileUp[4]->Fill(pt) ; }
         if(GetReader()->IsPileUpFromEMCalAndNotSPD())    { fhEIsoPileUp[5] ->Fill(energy) ; fhPtIsoPileUp[5]->Fill(pt) ; }
         if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhEIsoPileUp[6] ->Fill(energy) ; fhPtIsoPileUp[6]->Fill(pt) ; }
-      }
-      
-      if(IsDataMC())
-      {
-        
-        if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
-        {
-          fhPtIsoMCPhoton  ->Fill(pt);
-        }        
         
-        if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))
-        {
-          fhPtIsoPrompt  ->Fill(pt);
-          fhPhiIsoPrompt ->Fill(pt,phi);
-          fhEtaIsoPrompt ->Fill(pt,eta);
-        }
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation))
-        {
-          fhPtIsoFragmentation  ->Fill(pt);
-          fhPhiIsoFragmentation ->Fill(pt,phi);
-          fhEtaIsoFragmentation ->Fill(pt,eta);
-        }
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))
-        {
-          fhPtIsoPi0  ->Fill(pt);
-          fhPhiIsoPi0 ->Fill(pt,phi);
-          fhEtaIsoPi0 ->Fill(pt,eta);
-        }        
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))
-        {
-          fhPtIsoPi0Decay  ->Fill(pt);
-          fhPhiIsoPi0Decay ->Fill(pt,phi);
-          fhEtaIsoPi0Decay ->Fill(pt,eta);
-        }
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))
-        {
-          fhPtIsoEtaDecay  ->Fill(pt);
-          fhPhiIsoEtaDecay ->Fill(pt,phi);
-          fhEtaIsoEtaDecay ->Fill(pt,eta);
-        }        
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))
-        {
-          fhPtIsoOtherDecay  ->Fill(pt);
-          fhPhiIsoOtherDecay ->Fill(pt,phi);
-          fhEtaIsoOtherDecay ->Fill(pt,eta);
-        }
-        //        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion))
-        //        {
-        //          fhPtIsoConversion  ->Fill(pt);
-        //          fhPhiIsoConversion ->Fill(pt,phi);
-        //          fhEtaIsoConversion ->Fill(pt,eta);
-        //        }
-        else if(!GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))// anything else but electrons
-        {
-          fhPtIsoHadron  ->Fill(pt);
-          fhPhiIsoHadron ->Fill(pt,phi);
-          fhEtaIsoHadron ->Fill(pt,eta);
-        }
-      }//Histograms with MC
-      
+        // Fill histograms to undertand pile-up before other cuts applied
+        // Remember to relax time cuts in the reader
+        FillPileUpHistograms(aod->GetCaloLabel(0));
+      }
+
     }//Isolated histograms
     else // NON isolated
     {
-      if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
+      if(GetDebug() > 1)
+        printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Particle %d NOT ISOLATED, fill histograms\n", iaod);
       
       fhENoIso        ->Fill(energy);
       fhPtNoIso       ->Fill(pt);
       fhEtaPhiNoIso   ->Fill(eta,phi);
-      fhPtNLocMaxNoIso->Fill(pt,aod->GetFiducialArea());
+      
+      if(IsDataMC())
+      {
+        if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton) )
+          fhPtNoIsoMC[kmcPhoton]->Fill(pt);
+        
+        fhPtNoIsoMC[mcIndex]->Fill(pt);
+      }
+      
+      // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
+      if(fFillTaggedDecayHistograms && decayTag > 0)
+      {
+        for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
+        {
+          if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
+          {
+            fhPtDecayNoIso[ibit]    ->Fill(pt);
+            fhEtaPhiDecayNoIso[ibit]->Fill(eta,phi);
+            
+            if(IsDataMC())
+            {
+              if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))
+                fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(pt);
+              
+              fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(pt);
+            }
+          } // bit ok
+        } // bit loop
+      } // decay histograms
+      
+      if(fFillNLMHistograms)
+        fhPtNLocMaxNoIso ->Fill(pt,aod->GetFiducialArea()); // remember to change method name
       
       if(fFillPileUpHistograms)
       {
@@ -3598,82 +3730,339 @@ void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
         if(GetReader()->IsPileUpFromEMCalAndNotSPD())     { fhENoIsoPileUp[5] ->Fill(energy) ; fhPtNoIsoPileUp[5]->Fill(pt) ; }
         if(GetReader()->IsPileUpFromNotSPDAndNotEMCal())  { fhENoIsoPileUp[6] ->Fill(energy) ; fhPtNoIsoPileUp[6]->Fill(pt) ; }
       }
+    } // non iso
+  }// aod loop
+
+}
+
+//______________________________________________________________________
+void AliAnaParticleIsolation::FillAcceptanceHistograms()
+{
+  // Fill acceptance histograms if MC data is available
+  // Only when particle is in the calorimeter. Rethink if CTS is used.
+  
+  if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - Start \n");
+  
+  //Double_t photonY   = -100 ;
+  Double_t photonE   = -1 ;
+  Double_t photonPt  = -1 ;
+  Double_t photonPhi =  100 ;
+  Double_t photonEta = -1 ;
+  
+  Int_t    pdg       =  0 ;
+  Int_t    status    =  0 ;
+  Int_t    tag       =  0 ;
+  Int_t    mcIndex   =  0 ;
+  Int_t    nprim     = 0;
+  
+  TParticle        * primStack = 0;
+  AliAODMCParticle * primAOD   = 0;
+  TLorentzVector lv;
+  
+  // Get the ESD MC particles container
+  AliStack * stack = 0;
+  if( GetReader()->ReadStack() )
+  {
+    stack = GetMCStack();
+    if(!stack ) return;
+    nprim = stack->GetNtrack();
+  }
+  
+  // Get the AOD MC particles container
+  TClonesArray * mcparticles = 0;
+  if( GetReader()->ReadAODMCParticles() )
+  {
+    mcparticles = GetReader()->GetAODMCParticles();
+    if( !mcparticles ) return;
+    nprim = mcparticles->GetEntriesFast();
+  }
+  
+  for(Int_t i=0 ; i < nprim; i++)
+  {
+    if(GetReader()->AcceptOnlyHIJINGLabels() && !GetReader()->IsHIJINGLabel(i)) continue ;
+    
+    if(GetReader()->ReadStack())
+    {
+      primStack = stack->Particle(i) ;
+      if(!primStack)
+      {
+        printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - ESD primaries pointer not available!!\n");
+        continue;
+      }
+      
+      pdg    = primStack->GetPdgCode();
+      status = primStack->GetStatusCode();
+      
+      if(primStack->Energy() == TMath::Abs(primStack->Pz()))  continue ; //Protection against floating point exception
+      
+      //printf("i %d, %s %d  %s %d \n",i, stack->Particle(i)->GetName(), stack->Particle(i)->GetPdgCode(),
+      //       prim->GetName(), prim->GetPdgCode());
+      
+      //photonY   = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
       
-      if(decay) 
+      //Photon kinematics
+      primStack->Momentum(lv);
+      
+    }
+    else
+    {
+      primAOD = (AliAODMCParticle *) mcparticles->At(i);
+      if(!primAOD)
       {
-        fhPtDecayNoIso    ->Fill(pt);
-        fhEtaPhiDecayNoIso->Fill(eta,phi);
+        printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - AOD primaries pointer not available!!\n");
+        continue;
       }
       
-      if(IsDataMC())
+      pdg    = primAOD->GetPdgCode();
+      status = primAOD->GetStatus();
+      
+      if(primAOD->E() == TMath::Abs(primAOD->Pz()))  continue ; //Protection against floating point exception
+      
+      //photonY   = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ;
+      
+      //Photon kinematics
+      lv.SetPxPyPzE(primAOD->Px(),primAOD->Py(),primAOD->Pz(),primAOD->E());
+    }
+    
+    // Select only photons in the final state
+    if(pdg != 22 ) continue ;
+    
+    // Consider only final state particles, but this depends on generator,
+    // status 1 is the usual one, in case of not being ok, leave the possibility
+    // to not consider this.
+    if(status != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
+    
+    // If too small or too large pt, skip, same cut as for data analysis
+    photonPt  = lv.Pt () ;
+    
+    if(photonPt < GetMinPt() || photonPt > GetMaxPt() ) continue ;
+    
+    photonE   = lv.E  () ;
+    photonEta = lv.Eta() ;
+    photonPhi = lv.Phi() ;
+    
+    if(photonPhi < 0) photonPhi+=TMath::TwoPi();
+    
+    // Check if photons hit the Calorimeter acceptance
+    if(IsRealCaloAcceptanceOn() && fIsoDetector!="CTS") // defined on base class
+    {
+      if(GetReader()->ReadStack()          &&
+         !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primStack)) continue ;
+      if(GetReader()->ReadAODMCParticles() &&
+         !GetCaloUtils()->IsMCParticleInCalorimeterAcceptance(fIsoDetector, primAOD  )) continue ;
+    }
+    
+    // Check same fidutial borders as in data analysis on top of real acceptance if real was requested.
+    if(!GetFiducialCut()->IsInFiducialCut(lv,fIsoDetector)) continue ;
+    
+    // Get tag of this particle photon from fragmentation, decay, prompt ...
+    // Set the origin of the photon.
+    tag = GetMCAnalysisUtils()->CheckOrigin(i,GetReader());
+    
+    if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
+    {
+      // A conversion photon from a hadron, skip this kind of photon
+      // printf("AliAnaPhoton::FillAcceptanceHistograms() - not a photon, weird!\n ");
+      // GetMCAnalysisUtils()->PrintMCTag(tag);
+      
+      continue;
+    }
+    
+    //
+    if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt) )
+    {
+      mcIndex = kmcPrimPrompt;
+    }
+    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation) )
+    {
+      mcIndex = kmcPrimFrag ;
+    }
+    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCISR))
+    {
+      mcIndex = kmcPrimISR;
+    }
+    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))
+    {
+      mcIndex = kmcPrimPi0Decay;
+    }
+    else if( (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) ||
+              GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)))
+    {
+      mcIndex = kmcPrimOtherDecay;
+    }
+    else
+    {
+      // Other decay but from non final state particle
+      mcIndex = kmcPrimOtherDecay;
+    }//Other origin
+    
+    // ////////////////////ISO MC/////////////////////////
+    Double_t sumPtInCone = 0; Double_t dR=0. ;
+    TParticle        * mcisopStack = 0;
+    AliAODMCParticle * mcisopAOD   = 0;
+    Int_t partInConeStatus = -1, partInConeMother = -1;
+    Double_t partInConePt = 0, partInConeEta = 0, partInConePhi = 0;
+    Int_t npart = 0;
+    for(Int_t ip = 0; ip < nprim ; ip++)
+    {
+      if(ip==i) continue;
+      
+      if( GetReader()->ReadStack() )
+      {
+        mcisopStack = static_cast<TParticle*>(stack->Particle(ip));
+        if( !mcisopStack ) continue;
+        partInConeStatus = mcisopStack->GetStatusCode();
+        partInConeMother = mcisopStack->GetMother(0);
+        partInConePt     = mcisopStack->Pt();
+        partInConeEta    = mcisopStack->Eta();
+        partInConePhi    = mcisopStack->Phi();
+      }
+      else
       {
-        if     (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPhoton))        fhPtNoIsoMCPhoton     ->Fill(pt);
-        if     (GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0))           fhPtNoIsoPi0          ->Fill(pt);
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay))      fhPtNoIsoPi0Decay     ->Fill(pt);
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay))      fhPtNoIsoEtaDecay     ->Fill(pt);
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay))    fhPtNoIsoOtherDecay   ->Fill(pt);
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt))        fhPtNoIsoPrompt       ->Fill(pt);
-        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation)) fhPtNoIsoFragmentation->Fill(pt);
-        //        else if(GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCConversion))    fhPtNoIsoConversion   ->Fill(pt);
-        else if(!GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron))     fhPtNoIsoHadron      ->Fill(pt);        
+        mcisopAOD   = (AliAODMCParticle *) mcparticles->At(ip);
+        if( !mcisopAOD )   continue;
+        partInConeStatus = mcisopAOD->GetStatus();
+        partInConeMother = mcisopAOD->GetMother();
+        partInConePt     = mcisopAOD->Pt();
+        partInConeEta    = mcisopAOD->Eta();
+        partInConePhi    = mcisopAOD->Phi();
       }
+      
+      // Consider only final state particles, but this depends on generator,
+      // status 1 is the usual one, in case of not being ok, leave the possibility
+      // to not consider this.
+      if( partInConeStatus != 1 && GetMCAnalysisUtils()->GetMCGenerator()!="" ) continue ;
+      
+      if( partInConeMother == i ) continue;
+      
+      if( partInConePt < GetReader()->GetCTSPtMin() ) continue;
+      // Careful!!!, cut for TPC tracks and calorimeter clusters in cone can be different
+      
+      // TVector3 vmcv(mcisop->Px(),mcisop->Py(), mcisop->Pz());
+      // if(vmcv.Perp()>1)
+      //   continue;
+      
+      //
+      // Add here Acceptance cut???, charged particles CTS fid cut, neutral Calo real acceptance.
+      //
+      
+      dR = GetIsolationCut()->Radius(photonEta, photonPhi, partInConeEta, partInConePhi);
+      
+      if(dR > GetIsolationCut()->GetConeSize())
+        continue;
+      
+      sumPtInCone += partInConePt;
+      if(partInConePt > GetIsolationCut()->GetPtThreshold() &&
+         partInConePt < GetIsolationCut()->GetPtThresholdMax()) npart++;
     }
-  }// aod loop
+    
+    ///////END ISO MC/////////////////////////
+    
+    // Fill the histograms, only those in the defined calorimeter acceptance
+    
+    fhEtaPrimMC[kmcPrimPhoton]->Fill(photonPt , photonEta) ;
+    fhPhiPrimMC[kmcPrimPhoton]->Fill(photonPt , photonPhi) ;
+    fhEPrimMC  [kmcPrimPhoton]->Fill(photonE) ;
+    
+    fhEtaPrimMC[mcIndex]->Fill(photonPt , photonEta) ;
+    fhPhiPrimMC[mcIndex]->Fill(photonPt , photonPhi) ;
+    fhEPrimMC  [mcIndex]->Fill(photonE ) ;
+    
+    // Isolated?
+    Bool_t isolated = kFALSE;
+    if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kSumPtIC   &&
+       (sumPtInCone < GetIsolationCut()->GetSumPtThreshold() ||
+        sumPtInCone > GetIsolationCut()->GetSumPtThresholdMax()))
+      isolated = kTRUE;
+    
+    if(GetIsolationCut()->GetICMethod() == AliIsolationCut::kPtThresIC &&
+       npart == 0)
+      isolated = kTRUE;
+    
+    if(isolated)
+    {
+      fhPtPrimMCiso [mcIndex]      ->Fill(photonPt) ;
+      fhPtPrimMCiso [kmcPrimPhoton]->Fill(photonPt) ;
+    }
+    
+  }//loop on primaries
+  
+  if(GetDebug() > 0) printf("AliAnaParticleIsolation::FillAcceptanceHistograms() - End \n");
   
 }
 
+
 //_____________________________________________________________________________________
-void  AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph) 
+void  AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelation* ph,
+                                                     Int_t mcIndex)
 {
   
   //Isolation Cut Analysis for both methods and different pt cuts and cones
-  Float_t ptC   = ph->Pt();    
+  Float_t ptC   = ph->Pt();
   Float_t etaC  = ph->Eta();
   Float_t phiC  = ph->Phi();
-  Int_t   tag   = ph->GetTag(); 
-  Bool_t  decay = ph->IsTagged();
-  
-  if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f\n",ptC);
+  Int_t   tag   = ph->GetTag();
+
+  Int_t   decayTag = 0;
+  if(fFillTaggedDecayHistograms)
+  {
+    decayTag = ph->GetBtag(); // temporary
+    if(decayTag < 0) decayTag = 0; // temporary
+  }
+
+  if(GetDebug() > 0)
+    printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f, decay tag %d\n",ptC, decayTag);
   
-  //Keep original setting used when filling AODs, reset at end of analysis  
+  //Keep original setting used when filling AODs, reset at end of analysis
   Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
   Float_t ptfracorg  = GetIsolationCut()->GetPtFraction();
+  Float_t ptsumcorg  = GetIsolationCut()->GetSumPtThreshold();
   Float_t rorg       = GetIsolationCut()->GetConeSize();
   
-  Float_t coneptsum = 0 ; 
+  Float_t coneptsum = 0, coneptlead = 0;
   Int_t   n    [10][10];//[fNCones][fNPtThresFrac];
   Int_t   nfrac[10][10];//[fNCones][fNPtThresFrac];
   Bool_t  isolated  = kFALSE;
-  Int_t   nCone     = 0;
-  Int_t   nFracCone = 0;
-  // fill hist with all particles before isolation criteria
+  
+  // Fill hist with all particles before isolation criteria
+  fhENoIso     ->Fill(ph->E());
   fhPtNoIso    ->Fill(ptC);
   fhEtaPhiNoIso->Fill(etaC,phiC);
   
   if(IsDataMC())
   {
-    if     (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))        fhPtNoIsoMCPhoton     ->Fill(ptC);
-    if     (GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0))           fhPtNoIsoPi0          ->Fill(ptC);
-    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))      fhPtNoIsoPi0Decay     ->Fill(ptC);
-    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay))      fhPtNoIsoEtaDecay     ->Fill(ptC);
-    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay))    fhPtNoIsoOtherDecay   ->Fill(ptC);
-    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt))        fhPtNoIsoPrompt       ->Fill(ptC);
-    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtNoIsoFragmentation->Fill(ptC);
-//    else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion))    fhPtNoIsoConversion   ->Fill(ptC);
-    else if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron))    fhPtNoIsoHadron      ->Fill(ptC);
+    if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
+      fhPtNoIsoMC[kmcPhoton]->Fill(ptC);
+    
+    fhPtNoIsoMC[mcIndex]->Fill(ptC);
   }
   
-  if(decay) 
+  // Candidates tagged as decay in another analysis (AliAnaPi0EbE)
+  if(fFillTaggedDecayHistograms && decayTag > 0)
   {
-    fhPtDecayNoIso    ->Fill(ptC);
-    fhEtaPhiDecayNoIso->Fill(etaC,phiC);
-  }
+    for(Int_t ibit = 0; ibit < fNDecayBits; ibit++)
+    {
+      if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[ibit]))
+      {
+        fhPtDecayNoIso[ibit]    ->Fill(ptC);
+        fhEtaPhiDecayNoIso[ibit]->Fill(etaC,phiC);
+        
+        if(IsDataMC())
+        {
+          if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
+            fhPtDecayNoIsoMC[ibit][kmcPhoton]->Fill(ptC);
+          
+          fhPtDecayNoIsoMC[ibit][mcIndex]->Fill(ptC);
+        }
+      } // bit ok
+    } // bit loop
+  } // decay histograms
+  
   //Get vertex for photon momentum calculation
   Double_t vertex[] = {0,0,0} ; //vertex ;
-  if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) 
-      GetReader()->GetVertex(vertex);
-
+  if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
+    GetReader()->GetVertex(vertex);
+  
   //Loop on cone sizes
   for(Int_t icone = 0; icone<fNCones; icone++)
   {
@@ -3682,30 +4071,22 @@ void  AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelati
     TObjArray * reftracks   = ph->GetObjArray(GetAODObjArrayName()+"Tracks");
     
     //If too small or too large pt, skip
-    if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ; 
-   //In case a more strict IC is needed in the produced AOD
-
-    nCone=0; nFracCone = 0; isolated = kFALSE; coneptsum = 0; 
-  
-  GetIsolationCut()->SetSumPtThreshold(100);
-  GetIsolationCut()->SetPtThreshold(100);
-  GetIsolationCut()->SetPtFraction(100);
-  GetIsolationCut()->SetConeSize(fConeSizes[icone]);
-  GetIsolationCut()->MakeIsolationCut(reftracks,   refclusters, 
-                                          GetReader(), GetCaloPID(),
-                                          kFALSE, ph, "", 
-                                     nCone,nFracCone,coneptsum, isolated);
-
-        
-    fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);  
+    if(ptC < GetMinPt() || ptC > GetMaxPt() ) continue ;
+    
+    //In case a more strict IC is needed in the produced AOD
+    
+    isolated = kFALSE; coneptsum = 0; coneptlead = 0;
+    
+    GetIsolationCut()->SetSumPtThreshold(100);
+    GetIsolationCut()->SetPtThreshold(100);
+    GetIsolationCut()->SetPtFraction(100);
+    GetIsolationCut()->SetConeSize(fConeSizes[icone]);
     
     // retreive pt tracks to fill histo vs. pt leading
     //Fill pt distribution of particles in cone
     //fhPtLeadingPt(),fhPerpSumPtLeadingPt(),fhPerpPtLeadingPt(),
     
-    //Tracks
-    coneptsum = 0;
+    // Tracks in perpendicular cones
     Double_t sumptPerp = 0. ;
     TObjArray * trackList   = GetCTSTracks() ;
     for(Int_t itrack=0; itrack < trackList->GetEntriesFast(); itrack++)
@@ -3733,39 +4114,60 @@ void  AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelati
       {
         fhPerpPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
         sumptPerp+=track->Pt();
-      }      
+      }
     }
     
     fhPerpSumPtLeadingPt[icone]->Fill(ptC,sumptPerp);
     
-    if(reftracks)
-    {  
+    // Tracks in isolation cone, pT distribution and sum
+    if(reftracks && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyNeutral)
+    {
       for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++)
       {
         AliVTrack* track = (AliVTrack *) reftracks->At(itrack);
-        fhPtLeadingPt[icone]->Fill(ptC,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py()));
-        coneptsum+=track->Pt();
+        
+        Float_t rad = GetIsolationCut()->Radius(etaC, phiC, track->Eta(), track->Phi());
+        
+        if(rad > fConeSizes[icone]) continue ;
+        
+        fhPtLeadingPt[icone]->Fill(ptC, track->Pt());
+        coneptsum += track->Pt();
       }
     }
     
-    //CaloClusters
-    if(refclusters)
-    {    
+    // Clusters in isolation cone, pT distribution and sum
+    if(refclusters && GetIsolationCut()->GetParticleTypeInCone()!= AliIsolationCut::kOnlyCharged)
+    {
       TLorentzVector mom ;
       for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++)
       {
         AliVCluster* calo = (AliVCluster *) refclusters->At(icalo);
+        
         calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line
         
+        Float_t rad = GetIsolationCut()->Radius(etaC, phiC, mom.Eta(), mom.Phi());
+        
+        if(rad > fConeSizes[icone]) continue ;
+        
         fhPtLeadingPt[icone]->Fill(ptC, mom.Pt());
-        coneptsum+=mom.Pt();
+        coneptsum += mom.Pt();
       }
     }
+    
+    fhSumPtLeadingPt[icone]->Fill(ptC,coneptsum);
+    
+    if(IsDataMC())
+    {
+      if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
+        fhSumPtLeadingPtMC[kmcPhoton][icone]->Fill(ptC,coneptsum) ;
+      
+      fhSumPtLeadingPtMC[mcIndex][icone]->Fill(ptC,coneptsum) ;
+    }
+    
     ///////////////////
-
-
-    //Loop on ptthresholds
-    for(Int_t ipt = 0; ipt<fNPtThresFrac ;ipt++)
+    
+    //Loop on pt thresholds
+    for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++)
     {
       n    [icone][ipt]=0;
       nfrac[icone][ipt]=0;
@@ -3776,131 +4178,154 @@ void  AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelati
       GetIsolationCut()->MakeIsolationCut(reftracks, refclusters,
                                           GetReader(), GetCaloPID(),
                                           kFALSE, ph, "",
-                                          n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
+                                          n[icone][ipt],nfrac[icone][ipt],
+                                          coneptsum, coneptlead, isolated);
       
-      if(!isolated) continue;
-      //Normal ptThreshold cut
+      // Normal pT threshold cut
       
-      if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres  %1.1f, sumptThresh  %1.1f, n %d, nfrac %d, coneptsum %2.2f, isolated %d\n",
-                                fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt],n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
-      if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
+      if(GetDebug() > 0)
+      {
+        printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres  %1.1f, sumptThresh  %1.1f\n",
+               fConeSizes[icone],fPtThresholds[ipt],fSumPtThresholds[ipt]);
+        printf("\t n %d, nfrac %d, coneptsum %2.2f\n",
+               n[icone][ipt],nfrac[icone][ipt],coneptsum);
+        
+        printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - pt %1.1f, eta %1.1f, phi %1.1f\n",ptC, etaC, phiC);
+      }
       
-      if(n[icone][ipt] == 0) 
+      if(n[icone][ipt] == 0)
       {
-        if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
-        fhPtThresIsolated[icone][ipt]->Fill(ptC);
+        if(GetDebug() > 0)
+          printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling pt threshold loop\n");
+        
+        fhPtThresIsolated [icone][ipt]->Fill(ptC);
         fhEtaPhiPtThresIso[icone][ipt]->Fill(etaC,phiC);
         
-        if(decay)
+        if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
         {
-          fhPtPtThresDecayIso[icone][ipt]->Fill(ptC);
-          //     fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
+          if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
+          {
+            fhPtPtThresDecayIso    [icone][ipt]->Fill(ptC);
+            fhEtaPhiPtThresDecayIso[icone][ipt]->Fill(etaC,phiC);
+          }
         }
         
         if(IsDataMC())
         {
-          if     ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt))        fhPtThresIsolatedPrompt[icone][ipt]       ->Fill(ptC) ;
-//          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion))    fhPtThresIsolatedConversion[icone][ipt]   ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtThresIsolatedFragmentation[icone][ipt]->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0))           fhPtThresIsolatedPi0[icone][ipt]           ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))      fhPtThresIsolatedPi0Decay[icone][ipt]     ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay))      fhPtThresIsolatedEtaDecay[icone][ipt]     ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay))    fhPtThresIsolatedOtherDecay[icone][ipt]   ->Fill(ptC) ;
-          else if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron))      fhPtThresIsolatedHadron[icone][ipt]      ->Fill(ptC) ;
+          if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton) )
+            fhPtThresIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
+          
+          fhPtThresIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
+          
         }
       }
       
       // pt in cone fraction
       if(nfrac[icone][ipt] == 0)
       {
-        if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
-        fhPtFracIsolated[icone][ipt]->Fill(ptC);
+        if(GetDebug() > 0)
+          printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling frac loop\n");
+        
+        fhPtFracIsolated [icone][ipt]->Fill(ptC);
         fhEtaPhiPtFracIso[icone][ipt]->Fill(etaC,phiC);
         
-        if(decay)
+        if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
         {
-          fhPtPtFracDecayIso[icone][ipt]->Fill(ptC);
-          fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
+          if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
+          {
+            fhPtPtFracDecayIso    [icone][ipt]->Fill(ptC);
+            fhEtaPhiPtFracDecayIso[icone][ipt]->Fill(etaC,phiC);
+          }
         }
         
         if(IsDataMC())
         {
-          if     ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt))        fhPtFracIsolatedPrompt[icone][ipt]       ->Fill(ptC) ;
-//          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion))    fhPtFracIsolatedConversion[icone][ipt]   ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtFracIsolatedFragmentation[icone][ipt]->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0))           fhPtFracIsolatedPi0[icone][ipt]          ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))      fhPtFracIsolatedPi0Decay[icone][ipt]     ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay))      fhPtFracIsolatedEtaDecay[icone][ipt]     ->Fill(ptC) ;
-          else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay))    fhPtFracIsolatedOtherDecay[icone][ipt]   ->Fill(ptC) ;
-          else if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron))      fhPtFracIsolatedHadron[icone][ipt]->Fill(ptC) ;
+          if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
+            fhPtFracIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
+          
+          fhPtFracIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
         }
       }
       
-      if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
+      if(GetDebug()>0)
+        printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - checking IC method : %i\n",GetIsolationCut()->GetICMethod());
       
       //Pt threshold on pt cand/ sum in cone histograms
-      if(coneptsum<fSumPtThresholds[ipt])
-      {//      if((GetIsolationCut()->GetICMethod())==1){//kSumPtIC){
-        if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
-        fhPtSumIsolated[icone][ipt]->Fill(ptC) ;
+      if(coneptsum < fSumPtThresholds[ipt])
+      {
+        if(GetDebug() > 0 )
+          printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling sum loop\n");
+        
+        fhSumPtIsolated [icone][ipt]->Fill(ptC) ;
         fhEtaPhiPtSumIso[icone][ipt]->Fill(etaC, phiC) ;
-        if(decay)
+        
+        if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
+        {
+          if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
+          {
+            fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
+            fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
+          }
+        }
+        
+        if(IsDataMC())
         {
-          fhPtPtSumDecayIso[icone][ipt]->Fill(ptC);
-          fhEtaPhiPtSumDecayIso[icone][ipt]->Fill(etaC, phiC) ;
+          if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton))
+            fhSumPtIsolatedMC[kmcPhoton][icone][ipt]->Fill(ptC) ;
+          
+          fhSumPtIsolatedMC[mcIndex][icone][ipt]->Fill(ptC) ;
         }
       }
       
-    // pt sum pt frac method
-//    if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
-
+      // pt sum pt frac method
+      //    if( ((fPtFractions[ipt]*ptC < fSumPtThresholds[ipt]) && (coneptsum < fSumPtThresholds[ipt])) || ((fPtFractions[ipt]*ptC > fSumPtThresholds[ipt]) && (coneptsum < fPtFractions[ipt]*ptC)) )
+      
       if(coneptsum < fPtFractions[ipt]*ptC)
-       {
-        if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
-        fhPtFracPtSumIso[icone][ipt]->Fill(ptC) ;
+      {
+        if(GetDebug() > 0)
+          printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling PtFrac PtSum loop\n");
+        
+        fhPtFracPtSumIso    [icone][ipt]->Fill(ptC) ;
         fhEtaPhiFracPtSumIso[icone][ipt]->Fill(etaC,phiC) ;
         
-        if(decay)
+        if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
         {
-          fhPtFracPtSumDecayIso[icone][ipt]->Fill(ptC);
-          fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
+          if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
+          {
+            fhPtFracPtSumDecayIso    [icone][ipt]->Fill(ptC);
+            fhEtaPhiFracPtSumDecayIso[icone][ipt]->Fill(etaC,phiC);
+          }
         }
       }
       
       // density method
       Float_t cellDensity = GetIsolationCut()->GetCellDensity( ph, GetReader());
-      if(coneptsum<fSumPtThresholds[ipt]*cellDensity)
-      {//(GetIsolationCut()->GetICMethod())==4){//kSumDensityIC) {
-        if(GetDebug()>0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
-        fhPtSumDensityIso[icone][ipt]->Fill(ptC) ;
+      if(coneptsum < fSumPtThresholds[ipt]*cellDensity)
+      {
+        if(GetDebug() > 0)
+          printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - filling density loop\n");
+        
+        fhPtSumDensityIso    [icone][ipt]->Fill(ptC) ;
         fhEtaPhiSumDensityIso[icone][ipt]->Fill(etaC,phiC) ;
         
-        if(decay)
+        if( fFillTaggedDecayHistograms && decayTag > 0 && fNDecayBits > 0)
         {
-          fhPtSumDensityDecayIso[icone][ipt]->Fill(ptC);
-          fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
+          if(GetNeutralMesonSelection()->CheckDecayBit(decayTag,fDecayBits[0]))
+          {
+            fhPtSumDensityDecayIso    [icone][ipt]->Fill(ptC);
+            fhEtaPhiSumDensityDecayIso[icone][ipt]->Fill(etaC, phiC);
+          }
         }
-        
       }
     }//pt thresh loop
     
-    if(IsDataMC())
-    {
-      if     ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPrompt))        fhPtSumIsolatedPrompt[icone]       ->Fill(ptC,coneptsum) ;
-//      else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion))    fhPtSumIsolatedConversion[icone]   ->Fill(ptC,coneptsum) ;
-      else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCFragmentation)) fhPtSumIsolatedFragmentation[icone]->Fill(ptC,coneptsum) ;
-      else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0))           fhPtSumIsolatedPi0[icone]          ->Fill(ptC,coneptsum) ;
-      else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay))      fhPtSumIsolatedPi0Decay[icone]     ->Fill(ptC,coneptsum) ;
-      else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay))      fhPtSumIsolatedEtaDecay[icone]     ->Fill(ptC,coneptsum) ;
-      else if( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay))    fhPtSumIsolatedOtherDecay[icone]   ->Fill(ptC,coneptsum) ;
-      else if(!GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron))      fhPtSumIsolatedHadron[icone]->Fill(ptC,coneptsum) ;
-    }
     
   }//cone size loop
   
   //Reset original parameters for AOD analysis
   GetIsolationCut()->SetPtThreshold(ptthresorg);
   GetIsolationCut()->SetPtFraction(ptfracorg);
+  GetIsolationCut()->SetSumPtThreshold(ptsumcorg);
   GetIsolationCut()->SetConeSize(rorg);
   
 }
@@ -3919,10 +4344,11 @@ void AliAnaParticleIsolation::Print(const Option_t * opt) const
   printf("ReMake Isolation          = %d \n",  fReMakeIC) ;
   printf("Make Several Isolation    = %d \n",  fMakeSeveralIC) ;
   printf("Calorimeter for isolation = %s \n",  fCalorimeter.Data()) ;
+  printf("Detector for candidate isolation = %s \n", fIsoDetector.Data()) ;
   
   if(fMakeSeveralIC)
   {
-    printf("N Cone Sizes       =     %d\n", fNCones) ; 
+    printf("N Cone Sizes       =     %d\n", fNCones) ;
     printf("Cone Sizes          =    \n") ;
     for(Int_t i = 0; i < fNCones; i++)
       printf("  %1.2f;",  fConeSizes[i]) ;
@@ -3946,10 +4372,7 @@ void AliAnaParticleIsolation::Print(const Option_t * opt) const
       printf("   %2.2f;",  fSumPtThresholds[i]) ;
     
     
-  }  
-  
-  printf("Histograms: %3.1f < pT sum < %3.1f,  Nbin = %d\n",    fHistoPtSumMin,    fHistoPtSumMax,    fHistoNPtSumBins   );
-  printf("Histograms: %3.1f < pT in cone < %3.1f, Nbin = %d\n", fHistoPtInConeMin, fHistoPtInConeMax, fHistoNPtInConeBins);
+  }
   
   printf("    \n") ;