]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/CaloTrackCorrelations/AliAnaParticleHadronCorrelation.h
change location of geometry.root file
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaParticleHadronCorrelation.h
index 31eda351d8a14d8316da5a9128d79b71f32ec44f..1ea7bd0af2c70402fbb7e21ac029cbb2d52bbcd6 100755 (executable)
@@ -18,9 +18,6 @@
 // 7. change the way of delta phi cut for UE study due to memory issue (reduce histograms)
 // 8. Add the possibility to request the absolute leading particle at the near side or not, set trigger bins, general clean-up (08/2011)
 
-// --- ROOT system ---
-//class TH3D;
-
 // --- Analysis system ---
 #include "AliAnaCaloTrackCorrBaseClass.h"
 class AliAODPWG4ParticleCorrelation ;
@@ -29,11 +26,11 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   
  public: 
   
-  AliAnaParticleHadronCorrelation() ; // default ctor
-  virtual ~AliAnaParticleHadronCorrelation() {;} //virtual dtor
+  AliAnaParticleHadronCorrelation() ;          // default ctor
+  virtual ~AliAnaParticleHadronCorrelation() ; // virtual dtor
   
   // General methods
-    
+      
   TObjString * GetAnalysisCuts();
   
   TList      * GetCreateOutputObjects();
@@ -48,70 +45,136 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   
   // Main analysis methods
   
+  Bool_t       GetDecayPhotonMomentum(const AliAODPWG4Particle* trigger, TLorentzVector & mom1,TLorentzVector & mom2);
+  
   Bool_t       MakeChargedCorrelation  (AliAODPWG4ParticleCorrelation * aodParticle, const TObjArray* pl, const Bool_t bFillHisto) ;
   
   Bool_t       MakeNeutralCorrelation  (AliAODPWG4ParticleCorrelation * aodParticle, const TObjArray* pl, const Bool_t bFillHisto) ;
   
-  void         MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation * aodParticle);
+  void         MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation * aodParticle) ;
+  
+  void         MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle) ;
+  
+  // Filling histogram methods
+  
+  void         FillChargedAngularCorrelationHistograms  (const Float_t ptAssoc,  const Float_t ptTrig,   const Int_t   assocBin,
+                                                         const Float_t phiAssoc, const Float_t phiTrig,  Float_t &     deltaPhi,
+                                                         const Float_t etaAssoc, const Float_t etaTrig,  
+                                                         const Bool_t  decay,    const Float_t hmpidSignal,const Int_t nTracks);
+  
+  void         FillChargedEventMixPool();
+  
+  Bool_t       FillChargedMCCorrelationHistograms       (const Float_t mcAssocPt,      Float_t mcAssocPhi, const Float_t mcAssocEta,
+                                                         const Float_t mcTrigPt, const Float_t mcTrigPhi,  const Float_t mcTrigEta  );
+
+  
+  void         FillChargedMomentumImbalanceHistograms   (const Float_t ptTrig,   const Float_t ptAssoc, 
+                                                         const Float_t xE,       const Float_t hbpXE, 
+                                                         const Float_t zT,       const Float_t hbpZT, 
+                                                         const Float_t pout,     const Float_t deltaPhi,
+                                                         const Int_t   nTracks,  const Int_t   charge,
+                                                         const Int_t   assocBin, const Bool_t  decay, const Int_t mcTag );
+  
+  void         FillChargedUnderlyingEventHistograms     (const Float_t ptTrig,   const Float_t ptAssoc, 
+                                                         const Float_t deltaPhi, const Int_t nTracks);
+  
+  void         FillChargedUnderlyingEventSidesHistograms(const Float_t ptTrig,   const Float_t ptAssoc, 
+                                                         const Float_t deltaPhi);
+  
+  void         FillDecayPhotonCorrelationHistograms     (const Float_t ptAssoc,     const Float_t phiAssoc, 
+                                                         const TLorentzVector mom1, const TLorentzVector mom2, 
+                                                         const Bool_t bChargedOrNeutral); 
+  
   
+  void         FillNeutralAngularCorrelationHistograms  (const Float_t ptAssoc,  const Float_t ptTrig,
+                                                         const Float_t phiAssoc, const Float_t phiTrig,  Float_t &     deltaPhi,
+                                                         const Float_t etaAssoc, const Float_t etaTrig);
+  
+  void         FillNeutralEventMixPool();
+  
+  void         FillNeutralUnderlyingEventSidesHistograms(const Float_t ptTrig,   const Float_t ptAssoc, 
+                                                         const Float_t xE,       const Float_t hbpXE, 
+                                                         const Float_t zT,       const Float_t hbpZT, 
+                                                         const Float_t deltaPhi);  
   
   // Parameter setter and getter
   
-  Float_t      GetMinimumTriggerPt()     const { return fMinTriggerPt     ; }
+  Float_t      GetMinimumTriggerPt()       const { return fMinTriggerPt          ; }
   
-  Float_t      GetMaximumAssociatedPt()  const { return fMaxAssocPt       ; }
-  Float_t      GetMinimumAssociatedPt()  const { return fMinAssocPt       ; }
+  Float_t      GetMaximumAssociatedPt()    const { return fMaxAssocPt            ; }
+  Float_t      GetMinimumAssociatedPt()    const { return fMinAssocPt            ; }
   
-  Double_t     GetDeltaPhiMaxCut()       const { return fDeltaPhiMaxCut   ; }
-  Double_t     GetDeltaPhiMinCut()       const { return fDeltaPhiMinCut   ; }
+  Double_t     GetDeltaPhiMaxCut()         const { return fDeltaPhiMaxCut        ; }
+  Double_t     GetDeltaPhiMinCut()         const { return fDeltaPhiMinCut        ; }
   
-  Double_t     GetUeDeltaPhiMaxCut()     const { return fUeDeltaPhiMaxCut ; }
-  Double_t     GetUeDeltaPhiMinCut()     const { return fUeDeltaPhiMinCut ; }
+  Double_t     GetUeDeltaPhiMaxCut()       const { return fUeDeltaPhiMaxCut      ; }
+  Double_t     GetUeDeltaPhiMinCut()       const { return fUeDeltaPhiMinCut      ; }
   
-  void         SetMinimumTriggerPt(Float_t min){  fMinTriggerPt = min     ; }
+  void         SetMinimumTriggerPt(Float_t min)  { fMinTriggerPt = min           ; }
   
   void         SetAssociatedPtRange(Float_t min, Float_t max)
-    { fMaxAssocPt   = max ;          fMinAssocPt  = min          ; }
+                  { fMaxAssocPt   = max ;           fMinAssocPt  = min           ; }
   
   void         SetDeltaPhiCutRange(Double_t phimin, Double_t phimax)
-    { fDeltaPhiMaxCut   = phimax ;   fDeltaPhiMinCut   = phimin   ; }
+                  { fDeltaPhiMaxCut   = phimax ;    fDeltaPhiMinCut   = phimin   ; }
   
   void         SetUeDeltaPhiCutRange(Double_t uephimin, Double_t uephimax)
-    { fUeDeltaPhiMaxCut = uephimax;  fUeDeltaPhiMinCut = uephimin ; }
+                  { fUeDeltaPhiMaxCut = uephimax ;  fUeDeltaPhiMinCut = uephimin ; }
   
-  Bool_t       IsSeveralUEOn()           const { return fMakeSeveralUE    ; }
-  void         SwitchOnSeveralUECalculation()  { fMakeSeveralUE = kTRUE   ; }
-  void         SwitchOffSeveralUECalculation() { fMakeSeveralUE = kFALSE  ; }
+  Bool_t       IsSeveralUEOn()             const { return fMakeSeveralUE         ; }
+  void         SwitchOnSeveralUECalculation()    { fMakeSeveralUE      = kTRUE   ; }
+  void         SwitchOffSeveralUECalculation()   { fMakeSeveralUE      = kFALSE  ; }
 
   // Do trigger-neutral correlation
-  Bool_t       DoNeutralCorr()           const { return fNeutralCorr      ; }
-  void         SwitchOnNeutralCorr()           { fNeutralCorr = kTRUE     ; }
-  void         SwitchOffNeutralCorr()          { fNeutralCorr = kFALSE    ; }  
+  Bool_t       DoNeutralCorr()             const { return fNeutralCorr           ; }
+  void         SwitchOnNeutralCorr()             { fNeutralCorr      = kTRUE     ; }
+  void         SwitchOffNeutralCorr()            { fNeutralCorr      = kFALSE    ; }  
   
   // Taking the absolute leading as the trigger or not
-  Bool_t       DoAbsoluteLeading()       const { return fMakeAbsoluteLeading   ; }
-  void         SwitchOnAbsoluteLeading()       { fMakeAbsoluteLeading = kTRUE  ; }
-  void         SwitchOffAbsoluteLeading()      { fMakeAbsoluteLeading = kFALSE ; }
+  Bool_t       DoAbsoluteLeading()         const { return fMakeAbsoluteLeading   ; }
+  void         SwitchOnAbsoluteLeading()         { fMakeAbsoluteLeading = kTRUE  ; }
+  void         SwitchOffAbsoluteLeading()        { fMakeAbsoluteLeading = kFALSE ; }
   
   // Taking the near side leading as the trigger or not
-  Bool_t       DoNearSideLeading()       const { return fMakeNearSideLeading   ; }
-  void         SwitchOnNearSideLeading()       { fMakeNearSideLeading = kTRUE  ; }
-  void         SwitchOffNearSideLeading()      { fMakeNearSideLeading = kFALSE ; }
+  Bool_t       DoNearSideLeading()         const { return fMakeNearSideLeading   ; }
+  void         SwitchOnNearSideLeading()         { fMakeNearSideLeading = kTRUE  ; }
+  void         SwitchOffNearSideLeading()        { fMakeNearSideLeading = kFALSE ; }
   
   // Do decay-hadron correlation if it is pi0 trigger
-  Bool_t       IsPi0Trigger()            const { return fPi0Trigger       ; }
-  void         SwitchOnDecayCorr()             { fPi0Trigger = kTRUE      ; }
-  void         SwitchOffDecayCorr()            { fPi0Trigger = kFALSE     ; }  
+  Bool_t       IsPi0Trigger()              const { return fPi0Trigger            ; }
+  void         SwitchOnPi0TriggerDecayCorr()     { fPi0Trigger          = kTRUE  ; }
+  void         SwitchOffPi0TriggerDecayCorr()    { fPi0Trigger          = kFALSE ; }  
+
+  Bool_t       IsDecayTrigger()            const { return fDecayTrigger          ; }
+  void         SwitchOnDecayTriggerDecayCorr()   { fDecayTrigger        = kTRUE  ; }
+  void         SwitchOffDecayTriggerDecayCorr()  { fDecayTrigger        = kFALSE ; }  
+
+  Bool_t       IsHMPIDCorrelation()        const { return fHMPIDCorrelation      ; }
+  void         SwitchOnHMPIDCorrelation()        { fHMPIDCorrelation    = kTRUE  ; }
+  void         SwitchOffHMPIDCorrelation()       { fHMPIDCorrelation    = kFALSE ; }  
   
-  Bool_t       OnlyIsolated()            const { return fSelectIsolated   ; }
-  void         SelectIsolated(Bool_t s)        { fSelectIsolated   = s    ; }
+  void         SwitchOnFillBradHistograms()      { fFillBradHisto       = kTRUE  ; }
+  void         SwitchOffFillBradHistograms()     { fFillBradHisto       = kFALSE ; }  
+    
+  Bool_t       OnlyIsolated()              const { return fSelectIsolated        ; }
+  void         SelectIsolated(Bool_t s)          { fSelectIsolated   = s         ; }
 
-  void         SetPi0AODBranchName(TString n)  { fPi0AODBranchName = n    ; }
+  void         SetPi0AODBranchName(TString n)    { fPi0AODBranchName = n         ; }
   
   void         SetNAssocPtBins(Int_t n) ;     
   void         SetAssocPtBinLimit(Int_t ibin, Float_t pt) ;
-                
+  
+  Bool_t       IsMixStoredInReaderOn()     const { return fUseMixStoredInReader  ; }
+  void         SwitchOnUseMixStoredInReader()    { fUseMixStoredInReader = kTRUE ; }
+  void         SwitchOffUseMixStoredInReader()   { fUseMixStoredInReader = kFALSE; }
+  
+  void         SetM02Cut(Float_t min=0, Float_t max=10)  { fM02MinCut   = min ; fM02MaxCut  = max ; }
+
+  void         SwitchOnCorrelationVzBin()        { fCorrelVzBin         = kTRUE  ; }
+  void         SwitchOffCorrelationVzBin()       { fCorrelVzBin         = kFALSE ; }  
+  
  private:
+  
   Float_t      fMinTriggerPt ;                 // Minimum trigger hadron pt
   Float_t      fMaxAssocPt ;                   // Maximum associated hadron pt
   Float_t      fMinAssocPt ;                   // Minimum associated hadron pt
@@ -124,20 +187,47 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   TString      fPi0AODBranchName;              // Name of AOD branch with pi0, not trigger
   Bool_t       fNeutralCorr ;                  // switch the analysis with neutral particles
   Bool_t       fPi0Trigger ;                   // switch the analysis with decay photon from pi0 trigger
+  Bool_t       fDecayTrigger ;                 // switch the analysis with decay photon from photon trigger
   Bool_t       fMakeAbsoluteLeading ;          // requesting absolute leading triggers
   Bool_t       fMakeNearSideLeading ;          // requesting near side leading (+-90ยบ from trigger particle) triggers
   Int_t        fLeadingTriggerIndex ;          // Store here per event the trigger index, to avoid too many loops
-  
+  Bool_t       fHMPIDCorrelation    ;          // Correlate with particles on HMPID or its acceptance
+  Bool_t       fFillBradHisto ;                // DPhi histograms calculated differently
   Int_t        fNAssocPtBins ;                 // Number of associated pT bins under study
-  Float_t      fAssocPtBinLimit[10] ;          // Associated pT under study
+  Float_t      fAssocPtBinLimit[20] ;          // Associated pT under study
+  Bool_t       fCorrelVzBin ;                  // Fill one histogram per vz bin
+  
+  TList **     fListMixTrackEvents ;           //![GetNCentrBin()*GetNZvertBin()*GetNRPBin()] Containers for tracks in stored events for mixing
+  TList **     fListMixCaloEvents ;            //![GetNCentrBin()*GetNZvertBin()*GetNRPBin()] Containers for calo clusters in stored events for mixing
+
+  Bool_t       fUseMixStoredInReader;          // Signal if in the current event the pool was filled
+  
+  Float_t      fM02MaxCut   ;                  // Study photon clusters with l0 smaller than cut
+  Float_t      fM02MinCut   ;                  // Study photon clusters with l0 larger than cut
   
   //Histograms
 
   //leading particles 
+  TH1F *       fhPtInput;                      //! pT distribution of trigger particles before selection
+  TH1F *       fhPtFidCut;                     //! pT distribution of trigger particles before leading selection, after fiducial selection
   TH1F *       fhPtLeading;                    //! pT distribution of leading particles
+  TH2F *       fhPtLeadingVzBin;               //! pT distribution of leading particles vs vz bin
+  TH2F *       fhPtLeadingBin;                 //! pT distribution of leading particles, vs mixing bin
   TH2F *       fhPhiLeading;                   //! phi distribution vs pT of leading particles
   TH2F *       fhEtaLeading;                   //! eta distribution vs pT of leading particles
   
+  TH1F *       fhPtLeadingMC[6];               //! pT distribution of leading particles, check the origin of the cluster : decay photon (pi0, eta, other), merged photon (pi0), hadron, rest of photons (prompt, FSR, ISR)
+
+  TH2F *       fhPtLeadingCentrality;          //! pT distribution of leading particles vs centrality
+  TH2F *       fhPtLeadingEventPlane;          //! pT distribution of leading particles vs centrality
+  TH2F *       fhLeadingEventPlaneCentrality;  //! event plane vs centrality for leading particles
+  
+  TH1F *       fhPtLeadingMixed;               //! pT distribution of leading particles, used in mixing
+  TH2F *       fhPtLeadingMixedVzBin;          //! pT distribution of leading particles, used in mixing, vs vz bin
+  TH2F *       fhPtLeadingMixedBin;            //! pT distribution of leading particles vs mixing bin
+  TH2F *       fhPhiLeadingMixed;              //! phi distribution vs pT of leading particles, used in mixing
+  TH2F *       fhEtaLeadingMixed;              //! eta distribution vs pT of leading particles, used in mixing  
+
   //trigger-charged histograms
   TH2F *       fhDeltaPhiDeltaEtaCharged ;     //! differences of eta and phi between trigger and charged hadrons
   TH2F *       fhPhiCharged  ;                 //! Phi distribution of charged particles
@@ -146,6 +236,7 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   TH2F *       fhDeltaEtaCharged  ;            //! Difference of charged particle eta and trigger particle  eta as function of  trigger particle pT
   TH2F *       fhDeltaPhiChargedPt  ;          //! Difference of charged particle phi and trigger particle  phi as function of charged particle pT
   TH2F *       fhDeltaPhiUeChargedPt ;         //! Difference of charged particle from underlying events phi and trigger particle  phi as function of charged particle pT
+  TH1F *       fhUePart;                       //! UE particles distribution vs pt trig
   TH2F *       fhXECharged  ;                  //! Trigger particle -charged hadron momentum imbalance histogram
   TH2F *       fhXEUeCharged  ;                //! Trigger particle -underlying charged hadron momentum imbalance histogram  
   TH2F *       fhXEPosCharged  ;               //! Trigger particle -positive charged hadron momentum imbalance histogram
@@ -159,11 +250,21 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   TH2F *       fhPtHbpZTCharged  ;             //! Trigger particle -charged hadron momentum HBP histogram
   TH2F *       fhPtHbpZTUeCharged  ;           //! Trigger particle -underlying charged hadron momentum HBP histogram  
  
+  TH2F *       fhXEChargedMC[6]  ;             //! Trigger particle -charged hadron momentum imbalance histogram, check the origin of the cluster : decay photon (pi0, eta, other), merged photon (pi0), hadron, rest of photons (prompt, FSR, ISR)
+  
   //if several UE calculation is on, most useful for jet-jet events contribution
   TH2F *       fhDeltaPhiUeLeftCharged  ;      //! Difference of charged particle from underlying events phi and trigger particle  phi as function of charged particle pT
   TH2F *       fhDeltaPhiUeRightCharged  ;     //! Difference of charged particle from underlying events phi and trigger particle  phi 
+  TH2F *       fhDeltaPhiUeLeftUpCharged;      //! Difference of charged particle from underlying events phi and trigger particle  phi 
+  TH2F *       fhDeltaPhiUeRightUpCharged;     //! Difference of charged particle from underlying events phi and trigger particle  phi 
+  TH2F *       fhDeltaPhiUeLeftDownCharged;    //! Difference of charged particle from underlying events phi and trigger particle  phi 
+  TH2F *       fhDeltaPhiUeRightDownCharged;   //! Difference of charged particle from underlying events phi and trigger particle  phi 
   TH2F *       fhXEUeLeftCharged  ;            //! Trigger particle -underlying charged hadron momentum imbalance histogram 
   TH2F *       fhXEUeRightCharged ;            //! Trigger particle -underlying charged hadron momentum imbalance histogram  
+  TH2F *       fhXEUeLeftUpCharged  ;            //! Trigger particle -underlying charged hadron momentum imbalance histogram 
+  TH2F *       fhXEUeRightUpCharged ;            //! Trigger particle -underlying charged hadron momentum imbalance histogram  
+  TH2F *       fhXEUeLeftDownCharged  ;            //! Trigger particle -underlying charged hadron momentum imbalance histogram 
+  TH2F *       fhXEUeRightDownCharged ;            //! Trigger particle -underlying charged hadron momentum imbalance histogram  
   TH2F *       fhPtHbpXEUeLeftCharged  ;       //! Trigger particle -underlying charged hadron momentum HBP histogram 
   TH2F *       fhPtHbpXEUeRightCharged  ;      //! Trigger particle -underlying charged hadron momentum HBP histogram  
   TH2F *       fhZTUeLeftCharged  ;            //! Trigger particle -underlying charged hadron momentum imbalance histogram 
@@ -178,22 +279,22 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   //if different multiplicity analysis asked
   TH2F **      fhTrigDeltaPhiCharged ;         //![GetMultiBin()] differences of phi between trigger and charged hadrons
   TH2F **      fhTrigDeltaEtaCharged ;         //![GetMultiBin()] differences of eta between trigger and charged hadrons
-  TH2F **      fhTrigXECorr  ;                   //![GetMultiBin()] Trigger particle -charged hadron momentum imbalance histogram
-  TH2F **      fhTrigXEUeCorr  ;                 //![GetMultiBin()] Trigger particle -UE charged hadron momentum imbalance histogram
-  TH2F **      fhTrigZTCorr  ;                   //![GetMultiBin()] Trigger particle -charged hadron momentum imbalance histogram
-  TH2F **      fhTrigZTUeCorr  ;                 //![GetMultiBin()] Trigger particle -UE charged hadron momentum imbalance histogram
+  TH2F **      fhTrigXECorr  ;                 //![GetMultiBin()] Trigger particle -charged hadron momentum imbalance histogram
+  TH2F **      fhTrigXEUeCorr  ;               //![GetMultiBin()] Trigger particle -UE charged hadron momentum imbalance histogram
+  TH2F **      fhTrigZTCorr  ;                 //![GetMultiBin()] Trigger particle -charged hadron momentum imbalance histogram
+  TH2F **      fhTrigZTUeCorr  ;               //![GetMultiBin()] Trigger particle -UE charged hadron momentum imbalance histogram
   
-  TH2F *       fhAssocPt ;                     //! Trigger pT vs associated pT 
   TH2F *       fhAssocPtBkg;                   //! Trigger pT vs associated pT for background
-  TH2F **      fhDeltaPhiAssocPtBin;           //![fNAssocPtBins] Trigger pT vs dPhi for different associated pt bins
-  TH2F **      fhDeltaPhiAssocPtBinHMPID;      //![fNAssocPtBins] Trigger pT vs dPhi for different associated pt bins, track with HMPID  
-  TH2F **      fhDeltaPhiAssocPtBinHMPIDAcc;   //![fNAssocPtBins] Trigger pT vs dPhi for different associated pt bins, track with HMPIDAcc  
-  TH2F **      fhDeltaPhiBradAssocPtBin;       //![fNAssocPtBins] Trigger pT vs dPhi Brad (?) for different associated pt bins
+  TH2F **      fhDeltaPhiDeltaEtaAssocPtBin;   //![fNAssocPtBins*GetNZvertBin()] Difference of charged particle phi and trigger particle  phi as function eta difference, for different associated bins
+  TH2F **      fhDeltaPhiAssocPtBin;           //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs dPhi for different associated pt bins
+  TH2F **      fhDeltaPhiAssocPtBinDEta08;     //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs dPhi for different associated pt bins for Delta eta > 0.8
+  TH2F **      fhDeltaPhiAssocPtBinDEta0 ;     //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs dPhi for different associated pt bins for Delta eta = 0
+  TH2F **      fhDeltaPhiAssocPtBinHMPID;      //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs dPhi for different associated pt bins, track with HMPID  
+  TH2F **      fhDeltaPhiAssocPtBinHMPIDAcc;   //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs dPhi for different associated pt bins, track with HMPIDAcc  
+  TH2F **      fhDeltaPhiBradAssocPtBin;       //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs dPhi Brad (?) for different associated pt bins
   TH2F *       fhDeltaPhiBrad;                 //! Trigger pT vs dPhi Brad (?) for different associated pt bins
-  TH2F **      fhXEAssocPtBin ;                //![fNAssocPtBins] Trigger pT vs xE for different associated pt bins
-  TH2F *       fhXE ;                          //! Trigger pT vs xE for different associated pt bins
-  TH2F **      fhZTAssocPtBin ;                //![fNAssocPtBins] Trigger pT vs zT for different associated pt bins
-  TH2F *       fhZT ;                          //! Trigger pT vs zT for different associated pt bins
+  TH2F **      fhXEAssocPtBin ;                //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs xE for different associated pt bins
+  TH2F **      fhZTAssocPtBin ;                //![fNAssocPtBins*GetNZvertBin()] Trigger pT vs zT for different associated pt bins
 
   //trigger-neutral histograms
   TH2F *       fhDeltaPhiDeltaEtaNeutral ;     //! differences of eta and phi between trigger and neutral hadrons (pi0)
@@ -205,12 +306,12 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   TH2F *       fhDeltaPhiUeNeutralPt ;         //! Difference of neutral particle phi and trigger particle  phi as function of neutral particle particle pT  
   TH2F *       fhXENeutral  ;                  //! Trigger particle - neutral hadron momentum imbalance histogram 
   TH2F *       fhXEUeNeutral  ;                //! Trigger particle - neutral hadron momentum imbalance histogram 
-  TH2F *       fhPtHbpXENeutral  ;             //! Trigger particle -neutral particle momentum HBP histogram
-  TH2F *       fhPtHbpXEUeNeutral  ;           //! Trigger particle -underlying neutral hadron momentum HBP histogram  
+  TH2F *       fhPtHbpXENeutral  ;             //! Trigger particle - neutral particle momentum HBP histogram
+  TH2F *       fhPtHbpXEUeNeutral  ;           //! Trigger particle - underlying neutral hadron momentum HBP histogram  
   TH2F *       fhZTNeutral  ;                  //! Trigger particle - neutral hadron momentum imbalance histogram 
   TH2F *       fhZTUeNeutral  ;                //! Trigger particle - neutral hadron momentum imbalance histogram 
-  TH2F *       fhPtHbpZTNeutral  ;             //! Trigger particle -neutral particle momentum HBP histogram
-  TH2F *       fhPtHbpZTUeNeutral  ;           //! Trigger particle -underlying neutral hadron momentum HBP histogram  
+  TH2F *       fhPtHbpZTNeutral  ;             //! Trigger particle - neutral particle momentum HBP histogram
+  TH2F *       fhPtHbpZTUeNeutral  ;           //! Trigger particle - underlying neutral hadron momentum HBP histogram  
   
   //if several UE calculation is on, most useful for jet-jet events contribution
   TH2F *       fhDeltaPhiUeLeftNeutral  ;      //! Difference of charged particle from underlying events phi and trigger particle  phi as function of neutral particle pT
@@ -228,31 +329,58 @@ class AliAnaParticleHadronCorrelation : public AliAnaCaloTrackCorrBaseClass {
   TH2F *       fhPtPi0DecayRatio ;             //! for pi0 pt and ratio of decay photon pt
   TH2F *       fhDeltaPhiDecayCharged  ;       //! Difference of charged particle phi and decay trigger
   TH2F *       fhXEDecayCharged ;              //! Trigger particle (decay from pi0)-charged hadron momentum imbalance histogram    
-  TH2F *       fhZTDecayCharged ;              //! Trigger particle (decay from pi0)-charged hadron momentum imbalance histogram    
+  TH2F *       fhZTDecayCharged ;              //! Trigger particle (decay from pi0)-charged hadron momentum imbalance histogram   
+
   TH2F *       fhDeltaPhiDecayNeutral  ;       //! Difference of neutral particle phi and decay trigger
   TH2F *       fhXEDecayNeutral ;              //! Trigger particle (decay from pi0)-neutral hadron momentum imbalance histogram  
   TH2F *       fhZTDecayNeutral ;              //! Trigger particle (decay from pi0)-neutral hadron momentum imbalance histogram  
 
+  TH2F **      fhDeltaPhiDecayChargedAssocPtBin;//![fNAssocPtBins*GetNZvertBin()] Tagged as decay Trigger pT vs dPhi for different associated pt bins
+  TH2F **      fhXEDecayChargedAssocPtBin ;     //![fNAssocPtBins*GetNZvertBin()] Tagged as decay Trigger pT vs xE for different associated pt bins
+  TH2F **      fhZTDecayChargedAssocPtBin ;     //![fNAssocPtBins*GetNZvertBin()] Tagged as decay Trigger pT vs xE for different associated pt bins  
+  
   //if the data is MC, fill MC information
   TH2F *       fh2phiLeadingParticle;          //! #phi resolution for triggers
-  TH1F *       fhMCLeadingCount;               //! add explanation
-  TH2F *       fhMCEtaCharged;                 //! add explanation
-  TH2F *       fhMCPhiCharged;                 //! add explanation
-  TH2F *       fhMCDeltaEtaCharged;            //! add explanation
-  TH2F *       fhMCDeltaPhiCharged;            //! add explanation
-  TH2F *       fhMCDeltaPhiDeltaEtaCharged;    //! add explanation
-  TH2F *       fhMCDeltaPhiChargedPt;          //! add explanation
-  TH2F *       fhMCPtXECharged;                //! add explanation
-  TH2F *       fhMCPtHbpXECharged;             //! add explanation
-  TH2F *       fhMCPtZTCharged;                //! add explanation
-  TH2F *       fhMCPtHbpZTCharged;             //! add explanation
-  TH2F *       fhMCPtTrigPout ;                //! add explanation
-  TH2F *       fhMCPtAssocDeltaPhi  ;          //! Pout =associated pt*sin(delta phi) distribution
+  TH1F *       fhMCPtLeading;                  //! MC pure pT distribution of leading particles
+  TH2F *       fhMCPhiLeading;                 //! MC pure Phi distribution of leading particles
+  TH2F *       fhMCEtaLeading;                 //! MC pure Eta distribution of leading particles
+  TH2F *       fhMCEtaCharged;                 //! MC pure particles charged primary pt vs eta (both associated) 
+  TH2F *       fhMCPhiCharged;                 //! MC pure particles charged primary pt vs phi (both associated) 
+  TH2F *       fhMCDeltaEtaCharged;            //! MC pure particles charged trigger primary pt vs delta eta (associated-trigger) 
+  TH2F *       fhMCDeltaPhiCharged;            //! MC pure particles charged trigger primary pt vs delta phi (associated-trigger) 
+  TH2F *       fhMCDeltaPhiDeltaEtaCharged;    //! MC pure particles charged associated primary pt vs delta phi (associated-trigger), in away side 
+  TH2F *       fhMCDeltaPhiChargedPt;          //! MC pure particles charged delta phi vs delta eta (associated-trigger) 
+  TH2F *       fhMCPtXECharged;                //! MC pure particles charged trigger primary pt vs xE
+  TH2F *       fhMCPtXEUeCharged;              //! MC pure particles charged trigger primary pt vs xE (underlying event)
+  TH2F *       fhMCPtHbpXECharged;             //! MC pure particles charged trigger primary pt vs ln(1/xE)
+  TH2F *       fhMCPtHbpXEUeCharged;           //! MC pure particles charged trigger primary pt vs ln(1/xE) (underlying event)
+  TH1F *       fhMCUePart;                     //! MC pure UE particles distribution vs pt trig
+  TH2F *       fhMCPtZTCharged;                //! MC pure particles charged trigger primary pt vs zT
+  TH2F *       fhMCPtHbpZTCharged;             //! MC pure particles charged trigger primary pt vs ln(1/zT)
+  TH2F *       fhMCPtTrigPout ;                //! MC pure particles charged trigger primary pt vs pOut
+  TH2F *       fhMCPtAssocDeltaPhi  ;          //! MC pure particles charged associated primary pt vs delta phi (associated-trigger) 
 
+  // Mixing
+  TH1I *       fhNEventsTrigger;               //! number of analyzed triggered events
+  TH1F *       fhNtracksAll;                   //! total number of tracks 
+  TH1F *       fhNtracksTrigger;               //! total number of tracks in triggered events 
+  TH1F *       fhNtracksMB;                    //! total number of tracks in MB events
+  TH2F *       fhMixDeltaPhiCharged  ;         //! Difference of charged particle phi and trigger particle  phi as function of  trigger particle pT
+  TH2F *       fhMixDeltaPhiDeltaEtaCharged  ; //! Difference of charged particle phi and trigger particle  phi as function eta difference
+  TH2F *       fhMixXECharged;                 //! xE for mixed event
+  TH2F *       fhMixHbpXECharged;              //! ln(1/xE) for mixed event
+  TH2F **      fhMixDeltaPhiChargedAssocPtBin; //![fNAssocPtBins*GetNZvertBin()] Difference of charged particle phi and trigger particle  phi as function of  trigger particle pT, for different associated bins
+  TH2F **      fhMixDeltaPhiChargedAssocPtBinDEta08;   //![fNAssocPtBins*GetNZvertBin()] Difference of charged particle phi and trigger particle  phi as function of  trigger particle pT, for different associated bins, delta eta > 0.8
+  TH2F **      fhMixDeltaPhiChargedAssocPtBinDEta0;    //![fNAssocPtBins*GetNZvertBin()] Difference of charged particle phi and trigger particle  phi as function of  trigger particle pT, for different associated bins, delta eta = 0
+  TH2F **      fhMixDeltaPhiDeltaEtaChargedAssocPtBin; //![fNAssocPtBins*GetNZvertBin()] Difference of charged particle phi and trigger particle  phi as function eta difference, for different associated bins
+
+  TH1I *       fhEventBin;                     //! Number of real  events in a particular bin (cen,vz,rp)
+  TH1I *       fhEventMixBin;                  //! Number of mixed events in a particular bin (cen,vz,rp)
+  
   AliAnaParticleHadronCorrelation(              const AliAnaParticleHadronCorrelation & ph) ; // cpy ctor
   AliAnaParticleHadronCorrelation & operator = (const AliAnaParticleHadronCorrelation & ph) ; // cpy assignment
        
-  ClassDef(AliAnaParticleHadronCorrelation,11)
+  ClassDef(AliAnaParticleHadronCorrelation,24)
 } ;