ROOT logo
#ifndef ALIANALYSISTASKFULLPPJET_H
#define ALIANALYSISTASKFULLPPJET_H

// **************************************
// Task used for the analysis of full pp jets
// In additional, functions needed for systematic
// uncertainties are also included
// *******************************************

#include <vector>

class TFormula;
class TH2F;
class TH1F;
class TF1;
class THnSparse;
class TRandom3;
class TObjArray;
class TClonesArray;
class TObject;
class TString;
class TProfile2D;
class AliAODEvent;
class AliESDEvent;
class AliMCEvent;
class AliStack;
class AliESDtrack;
class AliEMCALGeometry;
class AliEMCALRecoUtils;
class AliESDCaloCluster;
class AliFJWrapper;
class AliAODJet;
class TParticle;

#include "AliESDtrackCuts.h"
#include "AliAnalysisTaskSE.h"
#ifndef __CINT__
#include "fastjet/JetDefinition.hh"
#include "fastjet/PseudoJet.hh"
#else
namespace fastjet {
  class PseudoJet;
}
#endif
class AliAnalysisTaskFullppJet : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskFullppJet();
  AliAnalysisTaskFullppJet(const char *name);
  virtual ~AliAnalysisTaskFullppJet();

  Bool_t Notify();
  void UserCreateOutputObjects();
  void UserExec(Option_t *option);
  void Terminate(Option_t *);
  void PrintConfig();
  
  enum {kTPCOnlyVtx = 1<<3,
        kTrigger = 1<<4,
	kHighZ = 1<<5,
	kSuspicious =   1<<6,
	kGluon =   1<<9,
	kQuark =   1<<10,
	kLeadCh = 1<<11 };

  enum { kHybrid=0,
	 kTPCOnly=1,
	 kGlobal=2};

  void SetAnaType(Int_t ana)                      { fAnaType=ana;                   }
  void SetMCAna(Bool_t mc)                        { fIsMC=mc;                       }
  void SetPhySelForMC(Bool_t phy)                 { fPhySelForMC=phy;               }
  void SetChargedMC(Bool_t mc)                    { fChargedMC=mc;                  }
  void SetRejectSPDPileup(Bool_t re)              { fRejectPileup=re;               }
  void SetRejectExoticTrigger(Bool_t re)          { fRejectExoticTrigger=re;        }
  void SetCheckTriggerMask(Bool_t check)          { fCheckTriggerMask=check;        }
  void SetRunPeriod(char *p)                      { fPeriod=p;                      }
  void SetOfflineTrigger(Bool_t t)                { fOfflineTrigger=t;              }
  void SetXsec(Float_t Xsec)                      { fXsecScale=Xsec;                }
  void SetConstrainChargedInEMCal(Bool_t con)     { fConstrainChInEMCal=con;        }
  void SetRejectNK(Bool_t reject)                 { fRejectNK=reject;               }
  void SetRejectWD(Bool_t reject)                 { fRejectWD=reject;               }
  void SetVerbosity(Int_t v)                      { fVerbosity = v;                 }
  void SetTrackCutsType(Int_t type)               { fTrackCutsType = type;          }
  void SetEsdTrackCuts(AliESDtrackCuts *cuts)     { fEsdTrackCuts=cuts;             }
  void SetHybridTrackCuts1(AliESDtrackCuts *cuts) { fHybridTrackCuts1=cuts;         }
  void SetHybridTrackCuts2(AliESDtrackCuts *cuts) { fHybridTrackCuts2=cuts;         }
  void SetKinCutType(Int_t type)                  { fKinCutType = type;             }
  void SetZvtx(Double_t zvtx)                     { fZVtxMax = zvtx;                }
  void SetEtaMax(Double_t eta)                    { fTrkEtaMax = eta;               }
  void SetdEdxRange(Double_t min, Double_t max)   { fdEdxMin=min; fdEdxMax=max;     }
  void SetEoverPRange(Double_t min, Double_t max) { fEoverPMin=min; fEoverPMax=max; }
  void SetMatchType(Int_t type)                   { fMatchType=type;                }
  void SetRejectExoticCluster(Bool_t reject)      { fRejectExoticCluster=reject;    }
  void SetRemoveProblematicSM4(Bool_t remove)     { fRemoveBadChannel=remove;       }
  void SetUseGoodSM(Bool_t good)                  { fUseGoodSM=good;                }
  void SetStudySubEInHC(Bool_t study)             { fStudySubEInHC=study;           }
  void SetStudyMcOverSubE(Bool_t study)           { fStudyMcOverSubE=study;         }
  void SetRejectElectron(Bool_t reject)           { fElectronRejection=reject;      }
  void SetCorrectHadron(Bool_t correct)           { fHadronicCorrection=correct;    }
  void SetHCFraction(Float_t fraction)            { fFractionHC=fraction;           } 
  void SetHCLowerPtCutMIP(Double_t pt)            { fHCLowerPtCutMIP=pt;            }
  void SetNonStdBranch(char* name)                { fNonStdBranch=name;             }
  void SetNonStdFile(char* name)                  { fNonStdBranch=name;             }
  void SetAlgorithm(char *algo)                   { fAlgorithm=algo;                }
  void SetRadius(char *r)                         { fRadius=r;                      }
  void SetRecombinationScheme(Int_t scheme)       { fRecombinationScheme=scheme;    }
  void SetSpotGoodJet(Bool_t spot)                { fSpotGoodJet=spot;              }
  void SetFindChargedOnlyJet(Bool_t ch)           { fFindChargedOnlyJet=ch;         }
  void SetFindNeutralOnlyJet(Bool_t ne)           { fFindNeutralOnlyJet=ne;         }
  void SetCheckTrkEffCorr(Bool_t check)           { fCheckTrkEffCorr=check;         }
  void SetTrkEffCorrCutZ(Double_t zcut)           { fTrkEffCorrCutZ=zcut;           }    
  void SetSmearMC(Double_t smear)                 { fSmearMC=smear;                 }
  void SetRunUE(Bool_t run)                       { fRunUE=run;                     }
  void SetCheckTPCOnlyVtx(Bool_t check)           { fCheckTPCOnlyVtx=check;         }
  void SetRunSecondaries(Bool_t run)              { fRunSecondaries=run;            }

  //--------------------------------
  // Kinematic cut
  //--------------------------------
  void SetPtRange(Double_t minMB, Double_t maxMB, Double_t minHT, Double_t maxHT) 
  { fTrkPtMin[0]=minMB; fTrkPtMax[0]=maxMB; fTrkPtMin[1]=minHT; fTrkPtMax[1]=maxHT; }

  void SetEtRange(Double_t minMB, Double_t maxMB, Double_t minHT, Double_t maxHT)
  { fClsEtMin[0]=minMB; fClsEtMax[0]=maxMB; fClsEtMin[1]=minHT; fClsEtMax[1]=maxHT;  }

  //--------------------------------
  // Jet quality cut
  //--------------------------------
  void SetJetNEFCut(Double_t min, Double_t max)
  { fJetNEFMin=min; fJetNEFMax=max; }

  //---------------------------------
  // Systematic study
  //---------------------------------
  void SetSaveQAHistos(Bool_t save)                 { fSaveQAHistos=save;           }
  void SetSysJetTrigEff(Bool_t sys)                 { fSysJetTrigEff=sys;           }
  void SetVaryJetTrigEff(Double_t vary)             { fVaryJetTrigEff=vary;         }
  void SetSysTrkPtRes(Bool_t sys)                   { fSysTrkPtRes=sys;             }
  void SetVaryTrkPtRes(Double_t vary)               { fVaryTrkPtRes=vary;           }
  void SetSysTrkEff(Bool_t sys)                     { fSysTrkEff=sys;               }
  void SetVaryTrkEff(Double_t vary)                 { fVaryTrkEff=vary;             }
  void SetSysTrkClsMth(Bool_t sys)                  { fSysTrkClsMth=sys;            }
  void SetSysTrkClsCut(Double_t deta, Double_t dphi){ fCutdEta=deta; fCutdPhi=dphi; }
  void SetSysNonLinearity(Bool_t sys)               { fSysNonLinearity=sys;         }
  void SetSysClusterEScale(Bool_t sys)              { fSysClusterEScale=sys;        }
  void SetVaryClusterEScale(Double_t vary)          { fVaryClusterEScale=vary;      }
  void SetSysClusterERes(Bool_t sys)                { fSysClusterERes=sys;          }
  void SetVaryClusterERes(Double_t vary)            { fVaryClusterERes=vary;        }
  void SetSysClusterizer(Bool_t sys)                { fSysClusterizer=sys;          }
    

protected:
  AliESDtrack  *GetAcceptTrack(AliESDtrack *esdtrack);
  Int_t        RunOfflineTrigger();
  Double_t     GetOfflineTriggerProbability(AliESDCaloCluster *cluster);
  Int_t        GetClusterSuperModule(AliESDCaloCluster *cluster);
  void         ProcessMC(const Int_t r=0);
  void         GetMCInfo();
  Bool_t       IsGoodMcPartilce(const AliVParticle* vParticle, const Int_t ipart);
  Int_t        GetParentParton(const Int_t ipart);
  Int_t        FindSpatialMatchedJet(fastjet::PseudoJet jet, AliFJWrapper *jetFinder, Double_t &dEta, Double_t &dPhi, Double_t maxR);
  Int_t        FindEnergyMatchedJet(AliFJWrapper *jetFinder1, const Int_t index1, AliFJWrapper *jetFinder2, const Double_t fraction=0.5);
  Bool_t       HasPrimaryVertex() const;
  Bool_t       IsPrimaryVertexOk() const;
  Bool_t       IsTPCOnlyVtx() const;
  Bool_t       IsLEDEvent() const;
  void         CheckExoticEvent();
  void         CheckEventTriggerBit();
  void         BookHistos();
  void         GetESDTrax();
  Bool_t       IsElectron(AliESDtrack *track, Double_t clsE) const;
  void         GetESDEMCalClusters();
  Bool_t       IsGoodCluster(AliESDCaloCluster *cluster);
  Double_t     SubtractClusterEnergy(AliESDCaloCluster *cluster, Double_t &eRes, Double_t &MIPE, Double_t &MCsubE);
  Double_t     GetClusterEnergyResolution(AliESDCaloCluster *cluster);
  void         FindDetJets(const Int_t s=0, const Int_t a=0, const Int_t r=0);
  void         FillAODJets(TClonesArray *fJetArray, AliFJWrapper *jetFinder, const Bool_t isTruth = 0);
  void         AnalyzeJets(AliFJWrapper *jetFinder, const Int_t type, const Int_t r);
  void         RunAnalyzeUE(AliFJWrapper *jetFinder, const Int_t type, const Bool_t isMCTruth);
  void         AnalyzeSecondaryContribution(AliFJWrapper *jetFinder, const Int_t r, const Int_t etaCut);
  void         AnalyzeSecondaryContributionViaMatching(AliFJWrapper *jetFinder, const Int_t r, const Int_t type, const Int_t etaCut);
  void         GetSecondaryPtFraction(TParticle *particle, Double_t &chPt, Double_t &reGenPt, Double_t &reRecPt);
  void         CheckTPCOnlyVtx(const UInt_t trigger);
  Bool_t       IsGoodJet(fastjet::PseudoJet jet, Double_t radius);
  Bool_t       IsGoodJet(AliAODJet *jet, Double_t radius);
  Double_t     GetLeadingZ(const Int_t jetIndex, AliFJWrapper *jetFinder);
  Double_t     GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz, const Double_t jetPx, const Double_t jetPy, const Double_t jetPz) const;
  Double_t     GetMeasuredJetPtResolution(const Int_t jetIndex, AliFJWrapper *jetFinder);
  Double_t     GetTrkEff(Double_t inPt);
  Double_t     GetJetMissPtDueToTrackingEfficiency(const Int_t jetIndex, AliFJWrapper *jetFinder, const Int_t radiusIndex);
  Double_t     GetExoticEnergyFraction(AliESDCaloCluster *cluster);
  Double_t     GetSmearedTrackPt(AliESDtrack *track);

  enum { kNBins = 20 };
  enum { kNRadii = 3 };

 private:
  Int_t             fVerbosity;                         //  Control output
  Int_t             fEDSFileCounter;                    //  Keep track of the ESD file inside a chain
  Int_t             fNTracksPerChunk;                   //  Number of tracks per ESD file; used for debugging
  Bool_t            fRejectPileup;                      //  Flag to reject SPD pileup events
  Bool_t            fRejectExoticTrigger;               //  Flag to reject events triggered by exotic clusters
  Int_t             fAnaType;                           //  0-local, 1-grid
  TString           fPeriod;                            //  Data period
  AliESDEvent       *fESD;                              //! ESD object
  AliAODEvent       *fAOD;                              //! AOD object 
  AliMCEvent        *fMC;                               //! MC object
  AliStack          *fStack;                            //! MC stack
  TObjArray         *fTrackArray;                       //! Array of input tracks
  TObjArray         *fClusterArray;                     //! Array of input clusters
  TArrayI           *fMcPartArray;                      //! Array of MC particles
  Bool_t            fIsMC;                              //  Flag of MC data
  Bool_t            fPhySelForMC;                       //  Flag to run physics selection in case of MC data
  Bool_t            fChargedMC;                         //  Flag to find only charged MC jets
  Float_t           fXsecScale;                         //  Corss section for each pT hard bin
  Double_t          fCentrality;                        //  V0M for current event
  Double_t          fZVtxMax;                           //  Max vertex z cut
  Int_t             fTriggerType;                       //  0-MB, 1-EMC
  Bool_t            fCheckTriggerMask;                  //  Flag to check the trigger mask for triggered events
  Bool_t            fIsTPCOnlyVtx;                      //  Flag of events with ONLY TPC vertex
  Bool_t            fIsExoticEvent3GeV;                 //  Flag of events with exotic cluster above 3 GeV
  Bool_t            fIsExoticEvent5GeV;                 //  Flag of events with exotic cluster above 5 GeV
  Bool_t            fIsEventTriggerBit;                 //  Flag of triggered events with valid trigger bit
  Bool_t            fOfflineTrigger;                    //  Run offline trigger
  TH2F              *fTriggerMask;                      //! Offline trigger mask
  TH1D              *fTriggerCurve[10];                 //! Trigger turn-on curves of EMCal clusters
  TF1               *fTriggerEfficiency[10];            //! Fit of trigger turn-on curves for EMCal clusters above 4-5 GeV
  AliEMCALGeometry  *fGeom;                             //! EMCal goemetry utility
  AliEMCALRecoUtils *fRecoUtil;                         //! Reco utility
  AliESDtrackCuts   *fEsdTrackCuts;                     //  Track cuts for good tracks
  AliESDtrackCuts   *fHybridTrackCuts1;                 //  Track cuts for tracks without SPD hit
  AliESDtrackCuts   *fHybridTrackCuts2;                 //  Track cuts for tracks witout SPD hit or ITS refit
  Int_t             fTrackCutsType;                     //  0-Global track, 1-TPCOnly track
  Int_t             fKinCutType;                        //  0-cut on track before jet finding, 1-cut on jet with high-pt tracks
  Double_t          fTrkEtaMax;                         //  Max |eta| cut
  Double_t          fTrkPtMin[2];                       //  Min pt cut
  Double_t          fTrkPtMax[2];                       //  Max pt cut
  Double_t          fdEdxMin;                           //  Min dE/dx cut
  Double_t          fdEdxMax;                           //  Max dE/dx cut
  Double_t          fEoverPMin;                         //  Min E/P cut
  Double_t          fEoverPMax;                         //  Max E/P cut
  Double_t          fClsEtMin[2];                       //  Min et cut
  Double_t          fClsEtMax[2];                       //  Max et cut
  Int_t             fMatchType;                         //  0-extrapolation, 1-extrapolation + MC label
  Bool_t            fRejectExoticCluster;               //  Flag to reject exotic cluster
  Bool_t            fRemoveBadChannel;                  //  Flag to remove problematic region in SM4
  Bool_t            fUseGoodSM;                         //  Flag to not use trigger bit in SM2,3,4,5
  Bool_t            fStudySubEInHC;                     //  If true, the hadronic correction will be ingored. For physics, it should be set to kFALSE
  Bool_t            fStudyMcOverSubE;                   //  Study the over-subtraction of hadronic correction in simualtion. 
  Bool_t            fElectronRejection;                 //  Switches on electron correction to avoid double counting of electrons 
  Bool_t            fHadronicCorrection;                //  switches on hadronic correction to avoid double counting of hadrons
  Float_t           fFractionHC;                        //  fraction of hadronic correction
  Double_t          fHCLowerPtCutMIP;                   //  Lower track pt cut for MIP correction    
  TF1               *fClusterEResolution;               //! Parameterization of cluster energy resolution from test beam results
  Double_t          fJetNEFMin;                         //  Min jet NEF cut
  Double_t          fJetNEFMax;                         //  Max jet NEF cut
  Bool_t            fSpotGoodJet;                       //  Good jet catching
  Bool_t            fFindChargedOnlyJet;                //  Find jets with TPC tracks
  Bool_t            fFindNeutralOnlyJet;                //  Find jets with EMCal clusters
  Bool_t            fCheckTrkEffCorr;                   //  Check the procedure of tracking efficiency correction
  Double_t          fTrkEffCorrCutZ;                    //  Cut on the tracks that are added back Z < 0.3
  TF1               *fTrkEffFunc[3];                    //! Fit function of tracking efficiency
  TH1F              *fhCorrTrkEffPtBin[2][kNRadii];     //! Number of tracks per jet pt bin, used to correct the tracking efficiency explicitly
  TH1F              *fhCorrTrkEffSample[2][kNRadii][kNBins];  //! Tracking efficiency estimated from simulation
  TRandom3          *fRandomGen;                        //! Random number generator
  Bool_t            fRunUE;                             //  Run analysis of underlying event
  Bool_t            fCheckTPCOnlyVtx;                   //  Check events with TPC only vertices
  Bool_t            fRunSecondaries;                    //  Run analysise for secondary particles
  TH2F              *fhSecondaryResponse[3];            //! Response matrix for secondary particles
  
  Bool_t            fSysJetTrigEff;                     //  Flag of systematic uncertainty of jet trigger efficiency
  Double_t          fVaryJetTrigEff;                    //  Variation of cluster E-scale for systematic uncertainty of jet trigger efficiency
  Bool_t            fSysTrkPtRes;                       //  Flag of systematic uncertainty of tracking momentum resolution
  Double_t          fVaryTrkPtRes;                      //  Variation of tracking momentum resolution
  Bool_t            fSysTrkEff;                         //  Flag of systematic uncertainty of tracking efficiency
  Double_t          fVaryTrkEff;                        //  Variation of tracking efficiency
  Bool_t            fSysTrkClsMth;                      //  Flag of systematic uncertainty of track-cluster matching
  Double_t          fCutdEta;                           //  Variation of dEta cut
  Double_t          fCutdPhi;                           //  Variation of dPhi cut
  Bool_t            fSysNonLinearity;                   //  Flag of systematic uncertainty of EMCal non-linearity
  TF1               *fNonLinear;                        //! Non-linearity correction functions for data
  Bool_t            fSysClusterEScale;                  //  Flag of systematic uncertainty of EMCal energy scale
  Double_t          fVaryClusterEScale;                 //  Variation of EMCal energy scale
  Bool_t            fSysClusterERes;                    //  Flag of systematic uncertainty of EMCal energy resolution
  Double_t          fVaryClusterERes;                   //  Variation of EMCal energy resolution
  Bool_t            fSysClusterizer;                    //  Flag of systematic uncertainty on clusterizer
  
  TString           fNonStdBranch;                      //  Non-std branch name for AOD jets
  TString           fNonStdFile;                        //  Name of optional file that the non-std branch is written to
  TString           fAlgorithm;                         //  name of algorithm
  TString           fRadius;                            //  Jet cone radius
  Int_t             fRecombinationScheme;               //  Recombination scheme of jet finding
  AliFJWrapper      *fDetJetFinder[3][2][kNRadii];      //! Jet finder
  TClonesArray      *fJetTCA[3][2][kNRadii];	        //! TCA of jets: in - akt - r
  Bool_t            fConstrainChInEMCal;                //  Constain charged particle to be in EMCal acceptance
  Bool_t            fRejectNK;                          //  Reject neutron and K_L
  Bool_t            fRejectWD;                          //  Reject primaries, mainly k^0_S,  that decay weakly
  Bool_t            fSmearMC;                           //  Flag of smearing tracking resolution in MC to match data. Obselete.
  TF1               *fTrkPtResData;                     //! Parameterazation of momentum resolution estimated from data
  AliFJWrapper      *fTrueJetFinder[kNRadii];           //! Jet finder for particle jets
  TClonesArray      *fMcTruthAntikt[kNRadii];           //! TCA of MC truth anti-kt jets

  TList             *fOutputList;                       //! Output list
  Bool_t            fSaveQAHistos;                      //  Flag of saving QA histograms
  TH1F              *fhJetEventCount;                   //! Event counts to keep track of rejection criteria
  TH1F              *fhJetEventStat;                    //! Event counts used for jet analysis
  TH1F              *fhEventStatTPCVtx;                 //! Event counts for TPC only vertices
  TH1F              *fhChunkQA;                         //! Check if the chunk is corrupted
  TH1F              *fVertexGenZ[2];                    //! Generated event vertex z
  TH1F              *fEventZ[2];                        //! reconstructed event vertex z
  TH1F              *fhNTrials[2];                      //! # of trials
  TH1F              *fhNMatchedTrack[2];                //! # of matched tracks per cluster
  TH2F              *fhSubEVsTrkPt[2][4];               //! Subtracted energy due to hadronic correction
  TH2F              *fhNeutralPtInJet[3][kNRadii];      //! pt of neutral constituents in jet
  TH2F              *fhTrigNeuPtInJet[3][kNRadii];      //! pt of neutral constituents in jet
  TH2F              *fhChargedPtInJet[3][kNRadii];      //! pt of charged constituents in jet
  TH2F              *fhLeadNePtInJet[3][kNRadii];       //! pt of leading neutral constituents in jet
  TH2F              *fhLeadChPtInJet[3][kNRadii];       //! pt of leading charged constituents in jet
  TH2F              *fhChLeadZVsJetPt[2][kNRadii];      //! Leading charged constituent Z vs jet pt
  TH3F              *fhJetPtVsZ[3][kNRadii];            //! Jet pt vs constituent Z vs constituent type
  TH3F              *fRelTrkCon[2][kNRadii];            //! Jet pt vs track pt contribution vs track class
  TH2F              *fhJetPtWithTrkThres[2][kNRadii];   //! pt of jets containing tracks above certian threshold
  TH2F              *fhJetPtWithClsThres[2][kNRadii];   //! pt of jets containing clusters above certian threshold
  TH2F              *fhJetPtVsLowPtCons[2][kNRadii][2]; //! Contribution of low pt particles to jet energy
  THnSparse         *fJetEnergyFraction[3][kNRadii];    //! Jet energy fraction
  THnSparse         *fJetNPartFraction[3][kNRadii];     //! Jet NPart fraction
  TH1F              *fJetCount[3][kNRadii];             //! pT distribution of pions detected 
  TH2F              *fhSubClsEVsJetPt[2][kNRadii][5];   //! f*subtracted cluster energy vs jet pt
  TH2F              *fhHCTrkPtClean[2][kNRadii][5];     //! Cleanly subtracted charged pt
  TH2F              *fhHCTrkPtAmbig[2][kNRadii][5];     //! Ambiguously subtracted charged pt
  TH2F              *fHCOverSubE[kNRadii][5];           //! Error made by hadronic correction assessed by using particle jet
  TH2F              *fHCOverSubEFrac[kNRadii][5];       //! Error made by hadronic correction assessed by using particle jet
  TH3F              *fhFcrossVsZleading[2][kNRadii];    //! Jet pt vs Fcross vs Zleading
  TH1F              *fhJetPtInExoticEvent[2][kNRadii];  //! Jet pt in exotic events
  TH2F              *fhUEJetPtVsSumPt[3][2][2];         //! Leading jet pt vs underlying event pt
  TH2F              *fhUEJetPtVsConsPt[3][2][2];        //! Leading jet pt vs constituent pt in underlying event
  TH1F              *fhUEJetPtNorm[3][2][2];            //! Leading jet normalization
  TH1F              *fhClsE[2];                         //! Cluster energy distribution
  TH3F              *fhJetInTPCOnlyVtx[2][kNRadii];     //! Jets in full TPC acceptance in events with TPC only vertex
  TH1F              *fhSysClusterE[2][2];               //! Cluster energy distribution before and after hadonic correction
  TH2F              *fhSysNCellVsClsE[2][2];            //! NCell vs cluster energy before and after hadonic correction

  // Secondaries
  TH2F              *fhNKFracVsJetPt[2][kNRadii];       //! Energy fraction lost due to missing neutron and K0L
  TH2F              *fhWeakFracVsJetPt[2][kNRadii];     //! Energy fraction lost due to weakly decaying particles
  TH2F              *fhJetResponseNK[2][kNRadii];       //! Jet response due to missing neutron and K0L using response matrix
  TH2F              *fhJetResponseWP[2][kNRadii];       //! Jet response due to missing weakly decayed particles using response matrix
  TH2F              *fhJetResolutionNK[2][kNRadii];     //! Jet resolution due to missing neutron and K0L using response matrix
  TH2F              *fhJetResolutionWP[2][kNRadii];     //! Jet resolution due to missing weakly decayed particles using response matrix
  TH2F              *fhJetResponseNKSM[2][kNRadii];     //! Jet response due to missing neutron and K0L via matching
  TH2F              *fhJetResponseWPSM[2][kNRadii];     //! Jet response due to missing weakly decayed particles via matching
  TH3F              *fhJetResolutionNKSM[2][kNRadii];   //! Jet resolution due to missing neutron and K0L via matching
  TH3F              *fhJetResolutionWPSM[2][kNRadii];   //! Jet resolution due to missing weakly decayed particles via matching

  AliAnalysisTaskFullppJet(const AliAnalysisTaskFullppJet&);            // not implemented
  AliAnalysisTaskFullppJet &operator=(const AliAnalysisTaskFullppJet&); // not implemented

  ClassDef(AliAnalysisTaskFullppJet, 3);
};

#endif
 AliAnalysisTaskFullppJet.h:1
 AliAnalysisTaskFullppJet.h:2
 AliAnalysisTaskFullppJet.h:3
 AliAnalysisTaskFullppJet.h:4
 AliAnalysisTaskFullppJet.h:5
 AliAnalysisTaskFullppJet.h:6
 AliAnalysisTaskFullppJet.h:7
 AliAnalysisTaskFullppJet.h:8
 AliAnalysisTaskFullppJet.h:9
 AliAnalysisTaskFullppJet.h:10
 AliAnalysisTaskFullppJet.h:11
 AliAnalysisTaskFullppJet.h:12
 AliAnalysisTaskFullppJet.h:13
 AliAnalysisTaskFullppJet.h:14
 AliAnalysisTaskFullppJet.h:15
 AliAnalysisTaskFullppJet.h:16
 AliAnalysisTaskFullppJet.h:17
 AliAnalysisTaskFullppJet.h:18
 AliAnalysisTaskFullppJet.h:19
 AliAnalysisTaskFullppJet.h:20
 AliAnalysisTaskFullppJet.h:21
 AliAnalysisTaskFullppJet.h:22
 AliAnalysisTaskFullppJet.h:23
 AliAnalysisTaskFullppJet.h:24
 AliAnalysisTaskFullppJet.h:25
 AliAnalysisTaskFullppJet.h:26
 AliAnalysisTaskFullppJet.h:27
 AliAnalysisTaskFullppJet.h:28
 AliAnalysisTaskFullppJet.h:29
 AliAnalysisTaskFullppJet.h:30
 AliAnalysisTaskFullppJet.h:31
 AliAnalysisTaskFullppJet.h:32
 AliAnalysisTaskFullppJet.h:33
 AliAnalysisTaskFullppJet.h:34
 AliAnalysisTaskFullppJet.h:35
 AliAnalysisTaskFullppJet.h:36
 AliAnalysisTaskFullppJet.h:37
 AliAnalysisTaskFullppJet.h:38
 AliAnalysisTaskFullppJet.h:39
 AliAnalysisTaskFullppJet.h:40
 AliAnalysisTaskFullppJet.h:41
 AliAnalysisTaskFullppJet.h:42
 AliAnalysisTaskFullppJet.h:43
 AliAnalysisTaskFullppJet.h:44
 AliAnalysisTaskFullppJet.h:45
 AliAnalysisTaskFullppJet.h:46
 AliAnalysisTaskFullppJet.h:47
 AliAnalysisTaskFullppJet.h:48
 AliAnalysisTaskFullppJet.h:49
 AliAnalysisTaskFullppJet.h:50
 AliAnalysisTaskFullppJet.h:51
 AliAnalysisTaskFullppJet.h:52
 AliAnalysisTaskFullppJet.h:53
 AliAnalysisTaskFullppJet.h:54
 AliAnalysisTaskFullppJet.h:55
 AliAnalysisTaskFullppJet.h:56
 AliAnalysisTaskFullppJet.h:57
 AliAnalysisTaskFullppJet.h:58
 AliAnalysisTaskFullppJet.h:59
 AliAnalysisTaskFullppJet.h:60
 AliAnalysisTaskFullppJet.h:61
 AliAnalysisTaskFullppJet.h:62
 AliAnalysisTaskFullppJet.h:63
 AliAnalysisTaskFullppJet.h:64
 AliAnalysisTaskFullppJet.h:65
 AliAnalysisTaskFullppJet.h:66
 AliAnalysisTaskFullppJet.h:67
 AliAnalysisTaskFullppJet.h:68
 AliAnalysisTaskFullppJet.h:69
 AliAnalysisTaskFullppJet.h:70
 AliAnalysisTaskFullppJet.h:71
 AliAnalysisTaskFullppJet.h:72
 AliAnalysisTaskFullppJet.h:73
 AliAnalysisTaskFullppJet.h:74
 AliAnalysisTaskFullppJet.h:75
 AliAnalysisTaskFullppJet.h:76
 AliAnalysisTaskFullppJet.h:77
 AliAnalysisTaskFullppJet.h:78
 AliAnalysisTaskFullppJet.h:79
 AliAnalysisTaskFullppJet.h:80
 AliAnalysisTaskFullppJet.h:81
 AliAnalysisTaskFullppJet.h:82
 AliAnalysisTaskFullppJet.h:83
 AliAnalysisTaskFullppJet.h:84
 AliAnalysisTaskFullppJet.h:85
 AliAnalysisTaskFullppJet.h:86
 AliAnalysisTaskFullppJet.h:87
 AliAnalysisTaskFullppJet.h:88
 AliAnalysisTaskFullppJet.h:89
 AliAnalysisTaskFullppJet.h:90
 AliAnalysisTaskFullppJet.h:91
 AliAnalysisTaskFullppJet.h:92
 AliAnalysisTaskFullppJet.h:93
 AliAnalysisTaskFullppJet.h:94
 AliAnalysisTaskFullppJet.h:95
 AliAnalysisTaskFullppJet.h:96
 AliAnalysisTaskFullppJet.h:97
 AliAnalysisTaskFullppJet.h:98
 AliAnalysisTaskFullppJet.h:99
 AliAnalysisTaskFullppJet.h:100
 AliAnalysisTaskFullppJet.h:101
 AliAnalysisTaskFullppJet.h:102
 AliAnalysisTaskFullppJet.h:103
 AliAnalysisTaskFullppJet.h:104
 AliAnalysisTaskFullppJet.h:105
 AliAnalysisTaskFullppJet.h:106
 AliAnalysisTaskFullppJet.h:107
 AliAnalysisTaskFullppJet.h:108
 AliAnalysisTaskFullppJet.h:109
 AliAnalysisTaskFullppJet.h:110
 AliAnalysisTaskFullppJet.h:111
 AliAnalysisTaskFullppJet.h:112
 AliAnalysisTaskFullppJet.h:113
 AliAnalysisTaskFullppJet.h:114
 AliAnalysisTaskFullppJet.h:115
 AliAnalysisTaskFullppJet.h:116
 AliAnalysisTaskFullppJet.h:117
 AliAnalysisTaskFullppJet.h:118
 AliAnalysisTaskFullppJet.h:119
 AliAnalysisTaskFullppJet.h:120
 AliAnalysisTaskFullppJet.h:121
 AliAnalysisTaskFullppJet.h:122
 AliAnalysisTaskFullppJet.h:123
 AliAnalysisTaskFullppJet.h:124
 AliAnalysisTaskFullppJet.h:125
 AliAnalysisTaskFullppJet.h:126
 AliAnalysisTaskFullppJet.h:127
 AliAnalysisTaskFullppJet.h:128
 AliAnalysisTaskFullppJet.h:129
 AliAnalysisTaskFullppJet.h:130
 AliAnalysisTaskFullppJet.h:131
 AliAnalysisTaskFullppJet.h:132
 AliAnalysisTaskFullppJet.h:133
 AliAnalysisTaskFullppJet.h:134
 AliAnalysisTaskFullppJet.h:135
 AliAnalysisTaskFullppJet.h:136
 AliAnalysisTaskFullppJet.h:137
 AliAnalysisTaskFullppJet.h:138
 AliAnalysisTaskFullppJet.h:139
 AliAnalysisTaskFullppJet.h:140
 AliAnalysisTaskFullppJet.h:141
 AliAnalysisTaskFullppJet.h:142
 AliAnalysisTaskFullppJet.h:143
 AliAnalysisTaskFullppJet.h:144
 AliAnalysisTaskFullppJet.h:145
 AliAnalysisTaskFullppJet.h:146
 AliAnalysisTaskFullppJet.h:147
 AliAnalysisTaskFullppJet.h:148
 AliAnalysisTaskFullppJet.h:149
 AliAnalysisTaskFullppJet.h:150
 AliAnalysisTaskFullppJet.h:151
 AliAnalysisTaskFullppJet.h:152
 AliAnalysisTaskFullppJet.h:153
 AliAnalysisTaskFullppJet.h:154
 AliAnalysisTaskFullppJet.h:155
 AliAnalysisTaskFullppJet.h:156
 AliAnalysisTaskFullppJet.h:157
 AliAnalysisTaskFullppJet.h:158
 AliAnalysisTaskFullppJet.h:159
 AliAnalysisTaskFullppJet.h:160
 AliAnalysisTaskFullppJet.h:161
 AliAnalysisTaskFullppJet.h:162
 AliAnalysisTaskFullppJet.h:163
 AliAnalysisTaskFullppJet.h:164
 AliAnalysisTaskFullppJet.h:165
 AliAnalysisTaskFullppJet.h:166
 AliAnalysisTaskFullppJet.h:167
 AliAnalysisTaskFullppJet.h:168
 AliAnalysisTaskFullppJet.h:169
 AliAnalysisTaskFullppJet.h:170
 AliAnalysisTaskFullppJet.h:171
 AliAnalysisTaskFullppJet.h:172
 AliAnalysisTaskFullppJet.h:173
 AliAnalysisTaskFullppJet.h:174
 AliAnalysisTaskFullppJet.h:175
 AliAnalysisTaskFullppJet.h:176
 AliAnalysisTaskFullppJet.h:177
 AliAnalysisTaskFullppJet.h:178
 AliAnalysisTaskFullppJet.h:179
 AliAnalysisTaskFullppJet.h:180
 AliAnalysisTaskFullppJet.h:181
 AliAnalysisTaskFullppJet.h:182
 AliAnalysisTaskFullppJet.h:183
 AliAnalysisTaskFullppJet.h:184
 AliAnalysisTaskFullppJet.h:185
 AliAnalysisTaskFullppJet.h:186
 AliAnalysisTaskFullppJet.h:187
 AliAnalysisTaskFullppJet.h:188
 AliAnalysisTaskFullppJet.h:189
 AliAnalysisTaskFullppJet.h:190
 AliAnalysisTaskFullppJet.h:191
 AliAnalysisTaskFullppJet.h:192
 AliAnalysisTaskFullppJet.h:193
 AliAnalysisTaskFullppJet.h:194
 AliAnalysisTaskFullppJet.h:195
 AliAnalysisTaskFullppJet.h:196
 AliAnalysisTaskFullppJet.h:197
 AliAnalysisTaskFullppJet.h:198
 AliAnalysisTaskFullppJet.h:199
 AliAnalysisTaskFullppJet.h:200
 AliAnalysisTaskFullppJet.h:201
 AliAnalysisTaskFullppJet.h:202
 AliAnalysisTaskFullppJet.h:203
 AliAnalysisTaskFullppJet.h:204
 AliAnalysisTaskFullppJet.h:205
 AliAnalysisTaskFullppJet.h:206
 AliAnalysisTaskFullppJet.h:207
 AliAnalysisTaskFullppJet.h:208
 AliAnalysisTaskFullppJet.h:209
 AliAnalysisTaskFullppJet.h:210
 AliAnalysisTaskFullppJet.h:211
 AliAnalysisTaskFullppJet.h:212
 AliAnalysisTaskFullppJet.h:213
 AliAnalysisTaskFullppJet.h:214
 AliAnalysisTaskFullppJet.h:215
 AliAnalysisTaskFullppJet.h:216
 AliAnalysisTaskFullppJet.h:217
 AliAnalysisTaskFullppJet.h:218
 AliAnalysisTaskFullppJet.h:219
 AliAnalysisTaskFullppJet.h:220
 AliAnalysisTaskFullppJet.h:221
 AliAnalysisTaskFullppJet.h:222
 AliAnalysisTaskFullppJet.h:223
 AliAnalysisTaskFullppJet.h:224
 AliAnalysisTaskFullppJet.h:225
 AliAnalysisTaskFullppJet.h:226
 AliAnalysisTaskFullppJet.h:227
 AliAnalysisTaskFullppJet.h:228
 AliAnalysisTaskFullppJet.h:229
 AliAnalysisTaskFullppJet.h:230
 AliAnalysisTaskFullppJet.h:231
 AliAnalysisTaskFullppJet.h:232
 AliAnalysisTaskFullppJet.h:233
 AliAnalysisTaskFullppJet.h:234
 AliAnalysisTaskFullppJet.h:235
 AliAnalysisTaskFullppJet.h:236
 AliAnalysisTaskFullppJet.h:237
 AliAnalysisTaskFullppJet.h:238
 AliAnalysisTaskFullppJet.h:239
 AliAnalysisTaskFullppJet.h:240
 AliAnalysisTaskFullppJet.h:241
 AliAnalysisTaskFullppJet.h:242
 AliAnalysisTaskFullppJet.h:243
 AliAnalysisTaskFullppJet.h:244
 AliAnalysisTaskFullppJet.h:245
 AliAnalysisTaskFullppJet.h:246
 AliAnalysisTaskFullppJet.h:247
 AliAnalysisTaskFullppJet.h:248
 AliAnalysisTaskFullppJet.h:249
 AliAnalysisTaskFullppJet.h:250
 AliAnalysisTaskFullppJet.h:251
 AliAnalysisTaskFullppJet.h:252
 AliAnalysisTaskFullppJet.h:253
 AliAnalysisTaskFullppJet.h:254
 AliAnalysisTaskFullppJet.h:255
 AliAnalysisTaskFullppJet.h:256
 AliAnalysisTaskFullppJet.h:257
 AliAnalysisTaskFullppJet.h:258
 AliAnalysisTaskFullppJet.h:259
 AliAnalysisTaskFullppJet.h:260
 AliAnalysisTaskFullppJet.h:261
 AliAnalysisTaskFullppJet.h:262
 AliAnalysisTaskFullppJet.h:263
 AliAnalysisTaskFullppJet.h:264
 AliAnalysisTaskFullppJet.h:265
 AliAnalysisTaskFullppJet.h:266
 AliAnalysisTaskFullppJet.h:267
 AliAnalysisTaskFullppJet.h:268
 AliAnalysisTaskFullppJet.h:269
 AliAnalysisTaskFullppJet.h:270
 AliAnalysisTaskFullppJet.h:271
 AliAnalysisTaskFullppJet.h:272
 AliAnalysisTaskFullppJet.h:273
 AliAnalysisTaskFullppJet.h:274
 AliAnalysisTaskFullppJet.h:275
 AliAnalysisTaskFullppJet.h:276
 AliAnalysisTaskFullppJet.h:277
 AliAnalysisTaskFullppJet.h:278
 AliAnalysisTaskFullppJet.h:279
 AliAnalysisTaskFullppJet.h:280
 AliAnalysisTaskFullppJet.h:281
 AliAnalysisTaskFullppJet.h:282
 AliAnalysisTaskFullppJet.h:283
 AliAnalysisTaskFullppJet.h:284
 AliAnalysisTaskFullppJet.h:285
 AliAnalysisTaskFullppJet.h:286
 AliAnalysisTaskFullppJet.h:287
 AliAnalysisTaskFullppJet.h:288
 AliAnalysisTaskFullppJet.h:289
 AliAnalysisTaskFullppJet.h:290
 AliAnalysisTaskFullppJet.h:291
 AliAnalysisTaskFullppJet.h:292
 AliAnalysisTaskFullppJet.h:293
 AliAnalysisTaskFullppJet.h:294
 AliAnalysisTaskFullppJet.h:295
 AliAnalysisTaskFullppJet.h:296
 AliAnalysisTaskFullppJet.h:297
 AliAnalysisTaskFullppJet.h:298
 AliAnalysisTaskFullppJet.h:299
 AliAnalysisTaskFullppJet.h:300
 AliAnalysisTaskFullppJet.h:301
 AliAnalysisTaskFullppJet.h:302
 AliAnalysisTaskFullppJet.h:303
 AliAnalysisTaskFullppJet.h:304
 AliAnalysisTaskFullppJet.h:305
 AliAnalysisTaskFullppJet.h:306
 AliAnalysisTaskFullppJet.h:307
 AliAnalysisTaskFullppJet.h:308
 AliAnalysisTaskFullppJet.h:309
 AliAnalysisTaskFullppJet.h:310
 AliAnalysisTaskFullppJet.h:311
 AliAnalysisTaskFullppJet.h:312
 AliAnalysisTaskFullppJet.h:313
 AliAnalysisTaskFullppJet.h:314
 AliAnalysisTaskFullppJet.h:315
 AliAnalysisTaskFullppJet.h:316
 AliAnalysisTaskFullppJet.h:317
 AliAnalysisTaskFullppJet.h:318
 AliAnalysisTaskFullppJet.h:319
 AliAnalysisTaskFullppJet.h:320
 AliAnalysisTaskFullppJet.h:321
 AliAnalysisTaskFullppJet.h:322
 AliAnalysisTaskFullppJet.h:323
 AliAnalysisTaskFullppJet.h:324
 AliAnalysisTaskFullppJet.h:325
 AliAnalysisTaskFullppJet.h:326
 AliAnalysisTaskFullppJet.h:327
 AliAnalysisTaskFullppJet.h:328
 AliAnalysisTaskFullppJet.h:329
 AliAnalysisTaskFullppJet.h:330
 AliAnalysisTaskFullppJet.h:331
 AliAnalysisTaskFullppJet.h:332
 AliAnalysisTaskFullppJet.h:333
 AliAnalysisTaskFullppJet.h:334
 AliAnalysisTaskFullppJet.h:335
 AliAnalysisTaskFullppJet.h:336
 AliAnalysisTaskFullppJet.h:337
 AliAnalysisTaskFullppJet.h:338
 AliAnalysisTaskFullppJet.h:339
 AliAnalysisTaskFullppJet.h:340
 AliAnalysisTaskFullppJet.h:341
 AliAnalysisTaskFullppJet.h:342
 AliAnalysisTaskFullppJet.h:343
 AliAnalysisTaskFullppJet.h:344
 AliAnalysisTaskFullppJet.h:345
 AliAnalysisTaskFullppJet.h:346
 AliAnalysisTaskFullppJet.h:347
 AliAnalysisTaskFullppJet.h:348
 AliAnalysisTaskFullppJet.h:349
 AliAnalysisTaskFullppJet.h:350
 AliAnalysisTaskFullppJet.h:351
 AliAnalysisTaskFullppJet.h:352
 AliAnalysisTaskFullppJet.h:353
 AliAnalysisTaskFullppJet.h:354
 AliAnalysisTaskFullppJet.h:355
 AliAnalysisTaskFullppJet.h:356
 AliAnalysisTaskFullppJet.h:357
 AliAnalysisTaskFullppJet.h:358
 AliAnalysisTaskFullppJet.h:359
 AliAnalysisTaskFullppJet.h:360
 AliAnalysisTaskFullppJet.h:361