ROOT logo
#ifndef AliAnalysisTaskLRC_H
#define AliAnalysisTaskLRC_H

// Analysis task for Long Range Correlation (LRC) analysis using TPC data
// This includes a TList of AliLRCProcess objects that are processing LRC analysis
// for a given eta-phi windows

// Author : Andrey Ivanov, Igor Altsybeev, St.Peterburg State University
// Email: Igor.Altsybeev.ch


#include <AliPIDResponse.h>
#include <AliPIDCombined.h>
#include <AliAnalysisTaskSE.h>

//#define kNumberOfParentParticleClassesInMC 8

//class AliLRCProcess;
class AliLRCBase;
class AliESDtrackCuts;
class TH1D;
class TH2D;
class TH1I;
class TRandom3;
class TParticle;
//class AliSimpleEvent;
class TTree;

class TStopwatch;
//enum en_AnalysisType
//{
//    en_AnalysisType_ESD = 0,
//    en_AnalysisType_AOD

//};

class AliAnalysisTaskLRC : public AliAnalysisTaskSE {

public:
    //Constructors
    AliAnalysisTaskLRC( const char *name = "AliAnalysisTaskLRC", Bool_t runKine = kFALSE );
    virtual ~AliAnalysisTaskLRC() {}

    //AliAnalysisTaskSE overloading

    virtual void   UserCreateOutputObjects();
    virtual void   UserExec(Option_t *option);
    //    virtual void   UserExecLoop( Double_t phiAdditional = 0 );//Option_t *option);
    virtual void   Terminate(Option_t *);
    //----------------------------------

    void AddLRCProcess(AliLRCBase *newProc); //Adds new AliLRCProcess to analysis task

    // Setters
    void SetMinNumberOfSPDtracklets( Int_t MinSPDtracklets );   //Sets  min number of SPD tracklets
    void SetMaxPtLimit(Double_t MaxPtLimit);   //Sets  Max Pt filter
    void SetMinPtLimit(Double_t MinPtLimit);   //Sets  Min Pt filter
    void SetKineLowPtCut(Double_t MinKineParticlePtLimit);   //Sets  Min Pt filter for kine particles
    void SetCheckForkVtx(Bool_t CheckForkVtx){fCheckForkVtx=CheckForkVtx;} // Accept only events with veretex
    void SetCheckForVtxPosition(Bool_t CheckForVtxPosition ){fCheckForVtxPosition=CheckForVtxPosition;} //Accept only events with veretex in slected range
    void SetTrackCuts(AliESDtrackCuts* const cuts)  { fEsdTrackCuts = cuts; }
    void SetAODtrackCutBit(UInt_t bit){ fAODtrackCutBit = bit;  } //AOD track cut bit
    void SetShowEventStats(Bool_t ShowEventStats)  {fShowEventStats= ShowEventStats;}
    void SetShowPerTrackStats(Bool_t ShowPerTrackStats) {fShowPerTrackStats=ShowPerTrackStats;}
    void SetVtxDiamond(Double_t Vx, Double_t Vy, Double_t Vz) {fVxMax = Vx;fVyMax =Vy;fVzMax = Vz;}
    void SetNchCuts(Int_t minNch, Int_t maxNch){fMinAcceptedTracksCut=minNch; fMaxAcceptedTracksCut=maxNch;}

    void SetNumberOfPhiSectors(Int_t nSectors){ fNumberOfPhiSectors = nSectors; }//fNeedToRotateSector = kTRUE; }
    void SetCentralityClass(Float_t minCentralityClass, Float_t maxCentralityClass ){ fMinCentralityClass = minCentralityClass; fMaxCentralityClass = maxCentralityClass; }
    
    void SetIonsAnalysis(Bool_t isIonsFlag ){ fIsIonsAnalysis = isIonsFlag; }
    void SetEtAnalysis(Bool_t isEtAnalysisFlag ){ fEtInsteadOfPt = isEtAnalysisFlag; }
    void SetUsePhiShufflingByHand(Bool_t usePhiShufflingByHand ){ fUsePhiShufflingByHand = usePhiShufflingByHand; }
    void SetUseToyEvents(Bool_t useToyEvents ){ fUseToyEvents = useToyEvents; }
    void SetNumberOfToyEvents(Int_t nEvents ){ fNumberOfToyEvents = nEvents; }
    void SetArtificialInefficiencyCoeff( Double_t artificialInefficiencyCoeff ) { fArtificialInefficiency = artificialInefficiencyCoeff; }   //Sets coeff for artificial inefficiency

    //void SetNumberOfPhiSectorsByHand( Int_t numberOfPhiSectorsByHand ) { fNumberOfPhiSectorsByHand = numberOfPhiSectorsByHand; }

    // Getters
    TList* GetListOfProcessors() { return &fLRCproc;} // Returns list of included
    AliESDtrackCuts* GetTrackCuts() const                         { return fEsdTrackCuts; }
    AliLRCBase * Proc(Int_t index);// Get Processor i

    void SetParticleTypeForTask( TString strF, TString strB );  //( char* strF, char* strB );
    //    void SetMCparticleClassForFillingLRC( TString strParticleType ) { fStrMCparticleClassForFillingLRC = strParticleType; }
    //    void SetEtaCutsForSpecMCanalysis( double etaMin, double etaMax  ) { fEtaMCanalysisCutMin = etaMin; fEtaMCanalysisCutMax = etaMax; }

    void SetV0ACMultThreshold( int minMult ) { fThresholdOnV0mult = minMult; }

    //    void SetIncludeEventTreeInOutput( Bool_t flag ) { fSetIncludeEventTreeInOutput = flag; }
    //    Bool_t GetIncludeEventTreeInOutput() { return fSetIncludeEventTreeInOutput; }

    //    void SetAnalysisType( en_AnalysisType analysisType ) { fAnalysisType = analysisType; }
    //    en_AnalysisType GetAnalysisType() { return fAnalysisType; }

    Double_t GetEventPlane(AliVEvent *event);


    //track cuts array stuff
    void AddTrackCutForBits(AliESDtrackCuts* const cuts, TString cutsName );
    void SetUseListCuts( Bool_t const useCutsList )  { fSwitchToListingCuts = useCutsList; }
    Int_t GetNumberOfTrackCutForBits() const                         { return fArrTrackCuts.GetEntries();/*fNumberOfCutsToRemember*/; }

    void SetAnalysisLevel(const char* analysisLevel) {  fAnalysisLevel = analysisLevel;}
    const char* GetAnalysisLevel() { return fAnalysisLevel.Data(); }

    void SetMCESD( Bool_t flagMCESD ) { fAnalyseMCESD = flagMCESD; }
    Bool_t GetMCESD() const { return fAnalyseMCESD; }

    void SetFlagWatchZDC( Bool_t flagWatchZDC) {  fFlagWatchZDC = flagWatchZDC;}
    void SetFlagWatchV0 ( Bool_t flagWatchV0 ) {  fFlagWatchV0  = flagWatchV0 ;}
    void SetFlagWatchFMD( Bool_t flagWatchFMD) {  fFlagWatchFMD = flagWatchFMD;}
    Bool_t GetFlagWatchZDC() {  return fFlagWatchZDC; }
    Bool_t GetFlagWatchV0 () {  return fFlagWatchV0 ; }
    Bool_t GetFlagWatchFMD() {  return fFlagWatchFMD; }

    void FillLRCProcessors( int nTracks, Double_t eventCentrality );
    void ProfilePhiByHand( int numberOfAcceptedTracksForLRC );
    void UseToyEvents();

    void SetEtaRegionForTests( Double_t etaRegionForTests ) {  fEtaRegionForTests = etaRegionForTests; }
    Double_t GetEtaRegionForTests() {  return fEtaRegionForTests; }

    void SetMultCutInEtaRegion( Double_t multCutInEtaRegion ) {  fMultCutInEtaRegion = multCutInEtaRegion; }
    Double_t GetMultCutInEtaRegion() {  return fMultCutInEtaRegion; }

    inline void FixAngleInTwoPi( Double_t &lPhi )
    {
        if ( lPhi > 2 * TMath::Pi() )
            lPhi -= 2 * TMath::Pi();
        else if ( lPhi < 0 )
            lPhi += 2 * TMath::Pi();
    }

    void SetFlagSuppressAddingSomeHistos( Bool_t flagSuppressAddingSomeHistos ) {  fFlagSuppressAddingSomeHistos = flagSuppressAddingSomeHistos; }

    enum enTaskObjectParameters { kMaxParticlesNumber = 15000, kMaxLRCprocArrayPointers = 10000 }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid)

protected:
    void SetParticleTypeToProcessors( int windowId, TString strPid );
    
    Int_t fNumberOfPhiSectors; // n of phi rotations
    Bool_t fFlagSuppressAddingSomeHistos; //flag to include in output list some histos or not include
    //    AliLRCBase *fLRCprocArrayPointers[kMaxLRCprocArrayPointers];

    // Track cuts
    TString fAnalysisLevel; //ESD, AOD or MC
    AliESDtrackCuts *fEsdTrackCuts;               // esd track cuts
    UInt_t fAODtrackCutBit;//track cut bit from track selection (only used for AODs)

    // Array with different track cuts to remember in simple event Tree
    TObjArray fArrTrackCuts;    //AliESDtrackCuts*  [100];     // Arr with different track cuts
    TString  fArrCutsNames[100];     // Arr with names of different track cuts
    TH1I    *fHistCutsNamesBins;        //!  tracks passed different cut sets in histogram bins
    Bool_t fSwitchToListingCuts;      // switch to remember cuts desicions and not to drop track by fTrackCuts


    //    en_AnalysisType fAnalysisType; // type of analysis

    //SPD tracklets cut
    Int_t fMinNumberOfSPDtracklets;   //Minimum number of SPD tracklets in ESD event

    // Acceptance cuts
    Double_t fMaxPtLimit;  //Max Pt filter
    Double_t fMinPtLimit;  // Min Pt filter
    Double_t fKineLowPtCut;  // Min Pt for Kine tracks

    // Nch cuts
    Int_t fMinAcceptedTracksCut;   //Minimum number of accepted tracks in event
    Int_t fMaxAcceptedTracksCut;   //Maximum number of accepted tracks in event

    // Vtx cuts
    Bool_t fCheckForkVtx;		// Check for vertex
    Bool_t fCheckForVtxPosition;  // Check if vertex position in range
    Double_t fVxMax;	// X vrtx max
    Double_t fVyMax;	// Y vrtx max
    Double_t fVzMax;	// Z vrtx max


    TList fLRCproc;       //  AliLRCProcess objects list
    TList* fOutList;      //! Task Output data container

    Bool_t fRunKine;      // ESD/AOD  - KINE switch
    Bool_t fAnalyseMCESD;     // MCESD switch
    Bool_t fShowEventStats; //  Allows per event debug output (trigger Nch, cuts etc)
    Bool_t fShowPerTrackStats; // Allows per track debug output


    Double_t fEtaRegionForTests; //eta region to tests
    Double_t fMultCutInEtaRegion;	// cut on mult in eta region

    // QA histos

    TH1I *fHistEventCutStats;  //! Event cut statistics
    TH1I *fHistTrackCutStats;  //! Track cut statistics
    TH1I *fHistAODTrackStats;  //! AOD track bits statistics


    TH1D *fHistVx;  //! Vx hist
    TH1D *fHistVy;  //! Vy hist
    TH1D *fHistVz;  //! Vz hist

    TH1D *fHistVxMCrecoDiff;  //! Vx hist MC-reco diff
    TH1D *fHistVyMCrecoDiff;  //! Vy hist MC-reco diff
    TH1D *fHistVzMCrecoDiff;  //! Vz hist MC-reco diff

    TH1I *fHistVertexNconributors;  //! vertex contributors number
    TH1I *fHistNumberOfPileupVerticesTracks;  //! number of pileup verteces in event (ESD or AOD) by tracks
    TH1I *fHistNumberOfPileupVerticesSPD;  //! number of pileup verteces in event (ESD or AOD) by SPD

    TH2F *fHistEventPlane; //event plane distribution


    TH1F *fHistPt; //! Overal Pt spectrum
    TH1F *fHistEta; //! Overal Eta spectrum
    TH1F *fHistEtaAODpure; //! Overal Eta spectrum aod pure before cuts
    TH1F *fHistPhi; //! Overal Phi spectrum
    TH2D *fHistEtaPhi;       //! 2D plot for checking acceptance
    TH1F *fHistPhiLRCrotationsCheck; //! Overal Phi spectrum for LRC rotations
    TH1F *fHistPhiArtificialProfilingCheck; //! hist for the check of profiled phi
    TH1F *fHistPhiArtificialProfilingCheckWrtEvPlane; //! hist for the check of profiled phi wrt event plane
    TH1F *fHistPhiArtificialEvPlane; //! hist artificial event plane

    TH2D *fHistEtaVsZvCoverage; //! Statistics on tracks Zv and Eta for all tracks
    TH2D *fHistEtaVsZvCoverageAccepted; //!  Statistics on tracks Zv and Eta for accepted tracks

    TH1D *fHistMultBeforeCuts;   //! Histo: Number of tracks before applying cuts
    TH1D *fHistAcceptedMult;   //! Number of accepted tracks histo
    TH1D *fHistAcceptedTracks;   //! Number of tracks accepted for filling LRC processors, histo
    TH1D *fHistMultiplicityInEtaRegion; //! Number of tracks in |eta| region
    TH1D *fHistMultiplicityInEtaRegionAfterPtCuts; //! Number of tracks in |eta| region after Pt Cuts
    TH2D *fHist2DMultiplicityMCESDInEtaRegion; //! Number of tracks in |eta| region (MC vs ESD)
    TH1D *fHistAcceptedTracksAfterPtCuts;   //! Number of tracks accepted for filling LRC processors, histo
    TH1D *fHistAcceptedTPCtracks;   //! Number of accepted tracks with TPC inner param
    TH1D *fHistClustersTPC;   //! Number of TPC clusters distribution
    TH1D *fHistClustersTPCafterCuts;   //! Number of TPC clusters distribution after cuts
    TH1D *fHistCrossedRowsTPC;   //! Number of TPC crossed rows
    TH1D *fHistCrossedRowsTPCafterCuts;   //! Number of TPC crossed rows after cuts
    

    TH1D *fHistClustersITS;   //! Number of ITS clusters distribution
    TH1D *fHistTrackletsITS;   //! Number of ITS tracklets distribution
    TH2D *fHist2DClustersTPCvsPt;   //! Number of TPC clusters vs Pt distribution (to see the dependence!)
    TH2D *fHist2DClustersTPCvsEta;   //! Number of TPC clusters vs Eta distribution (to see the dependence!)

    TH2D *fHist2DAcceptedTracksPtvsEta;   //! rejected tracks pt vs eta

    TH1D *fHistMClabels;   //! MC labels
    TH1D *fHistRejectedTracksCharge;   //! Charge of rejected tracks
    TH1D *fHistTracksCharge;   //! Charge of accepted tracks (zero is filled only for MC truth)

    //netcharge study
    TH1D *fHistPtPlus;   //! pt distr for +
    TH1D *fHistPtMinus;   //! pt distr for -
    TH1D *fHistNetChargeVsPt;   //! Net charge vs pt of accepted tracks
    TH1D *fHistChargePlusVsPtTmp;    //! Net charge vs pt of accepted tracks +
    TH1D *fHistChargeMinusVsPtTmp;   //! Net charge vs pt of accepted tracks -
    TH2D *fHist2DNetChargeVsPt;      //! Net charge vs pt of accepted tracks 2D
    TH2D *fHist2DNetChargeVsPtCorrectedOnEventMean;              //! Net charge vs pt of accepted tracks 2D shifted by mean
    TH2D *fHist2DNetChargeVsPtCorrectedOnEventMeanNormOnNch;     //! Net charge vs pt of accepted tracks 2D norm on nCh

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

    TH1D *fHistProbabilitiesPID;  //!hist of esd pid prob-s
    //Double_t *fProbabilitiesPID;	//! array of esd pid prob-s
    TH1D *fHistESDtrackMass;  //!hist of esd particle masses
    TH1D *fHistProbabilityPion;  //!hist of pion probability
    TH1D *fHistProbabilityKaon;  //!hist of kaon probability
    TH1D *fHistProbabilityProton;  //!hist of proton probability
    TH1D *fHistParticlesDistr;  //!hist of particles distr
    TH1D *fHistParticlesDistrBeforeCuts;  //!hist of particles distr



    TH1D *fHistCentralityPercentile;        //! centrality class
    TH1D *fHistCentralityClass10;           //! centrality class by 10
    TH1D *fHistCentralityClass5;            //! centrality class by 5


    //ZDC stuff
    TH1D *fHistZDCenergy[5];     //! ZDC energy for diff mult conditions
    TH1D *fHistZDCparticipants;             //! ZDC participants

    //V0 stuff
    TH1D *fHistV0multiplicity;     //! V0 mult
    TH1D *fHistV0Amultiplicity;     //! V0 A mult
    TH1D *fHistV0Cmultiplicity;     //! V0 C mult
    TH2D *fHist2DV0ACmultiplicity;     //! V0 A-C mult
    //TH1D *fHistV0spectra;     //! V0 particle masses
    TH2D *fHist2DTracksAcceptedVsV0multiplicity;     //! V0 mult Vs N tracks Accepted

    TH1D *fHistV0AmultiplicityRing[4];     //! V0 A mult in rings
    TH1D *fHistV0CmultiplicityRing[4];     //! V0 C mult in rings
    TH2D *fHist2DV0ACmultiplicityRing[4];     //! V0 A-C mult in rings
    TH2D *fHist2DTracksAcceptedVsV0AmultiplicityRing[4];     //! V0A mult Rings Vs N tracks Accepted
    TH2D *fHist2DTracksAcceptedVsV0CmultiplicityRing[4];     //! V0C mult Rings Vs N tracks Accepted

    TH1D *fHistV0cells         ;     //! V0 cells
    TH1D *fHistV0Acells        ;     //! V0 A cells
    TH1D *fHistV0Ccells        ;     //! V0 C cells
    TH2D *fHist2DV0ACcells     ;     //! V0 A-C cells

    Int_t fThresholdOnV0mult; //min V0AC mult to analyse this event (default is 0)


    //centrality class
    Float_t fMinCentralityClass;    // min bound on centrality percentile
    Float_t fMaxCentralityClass;    // max bound on centrality percentile


    Bool_t fIsIonsAnalysis; //Ions analysis flag
    Bool_t fEtInsteadOfPt; //pass the Et instead of Pt to LRC processors

    Bool_t fUsePhiShufflingByHand; //flag for manual suffling of tracks phi
    Bool_t fUseToyEvents; //flag for manual suffling of tracks phi
    Int_t fNumberOfToyEvents; //number of toy events

    Int_t fTmpCounter; //! TMP

    const AliPIDResponse *fPIDResponse;     //! PID response object
    AliPIDCombined       *fPIDCombined;     //! combined PID object
    TH1F *fPriors[AliPID::kSPECIES];           //! priors
    TH2D *fPriorsUsed[AliPID::kSPECIES];       //! priors used
    TH2D *fProbTPCTOF[AliPID::kSPECIES];       //! combined probabilities vs mom TPC-TOF
    TH2D *fProbAllDets[AliPID::kSPECIES];       //! combined probabilities ALL dets vs mom

    TH1D *fHistPidMaxProbability;  //!hist of max probabilities for arrays PID species
    TH1D *fHistPidPureMaxProbability;  //!hist of max probabilities for arrays PID species (when detId is TPC+TOF)

    TString fStrPIDforFwd;		//PID name for FWD win
    TString fStrPIDforBwd;		//PID name for BWD win
    Bool_t fPIDsensingFlag; 		//flag that we sense PID in processors


    int fMultForZDCstudy[5]; //! threshold multiplicities for ZDC study

    //artificial inefficiency (27.09.12)
    Double_t fArtificialInefficiency;	// inefficiency by hand in [0,1], default is 0
    TH2D *fHistNumberOfDroppedByHandTracks;   //! Number of tracks which were dropped by hand vs N of accepted tracks
    TRandom3 *fRand; //random generator for some uses

    //phi artificial gaps
    Double_t fPhiArtificialGapBegin;    // inefficiency in phi - gap position edge begins
    Double_t fPhiArtificialGapEnd;      // inefficiency in phi - gap position edge ends

    //flags for inclusion of detectors info:
    Bool_t fFlagWatchZDC;   //study ZDC issues
    Bool_t fFlagWatchV0;    //study V0 issues
    Bool_t fFlagWatchFMD;   //study FMD issues


    TStopwatch *fAnalysisTimer;


    //arrays with data for LRC processors
    Double_t fArrayTracksPt[kMaxParticlesNumber];
    Double_t fArrayTracksEta[kMaxParticlesNumber];
    Double_t fArrayTracksPhi[kMaxParticlesNumber];
    Short_t fArrayTracksCharge[kMaxParticlesNumber];
    Int_t fArrayTracksPID[kMaxParticlesNumber];


    //test MC particles
    //    TH1D *fHistMCvertexRdeltaFromParent;  //!MC R hist
    //    TH1F *fHistMCparentsStat;  //! MC parent ratios for different partile classes
    //    TH1F *fHistMCparentsEta[kNumberOfParentParticleClassesInMC];  //! MC parents eta distributions for different particle classes
    //    TH1F *fHistMCchildsEta[kNumberOfParentParticleClassesInMC];  //! MC childs eta distributions for different partile classes
    //    TH1F *fHistMCdeltaEtaChildParent[kNumberOfParentParticleClassesInMC];  //! MC delta eta b/n parent and child
    //    TH1F *fHistMCdeltaPhiChildParent[kNumberOfParentParticleClassesInMC];  //! MC delta phi b/n parent and child
    //    TH2D *fHist2DMCchildrenPhiChildParent[kNumberOfParentParticleClassesInMC];  //! MC delta b/n parent and child in eta-phi

    //    TH1F *fHistMCNumberOfChildren[kNumberOfParentParticleClassesInMC]; //! Number of children for fathers in MC (for different father classes)
    //    TH1D *fHistMCchildrenEtaDeviationsFromAverage[kNumberOfParentParticleClassesInMC];  //! MC delta b/n av. eta and each child's eta for each father (for different father classes)
    //    TH1D *fHistMCchildrenPhiDeviationsFromAverage[kNumberOfParentParticleClassesInMC];  //! MC delta b/n av. phi and each child's phi for each father (for different father classes)
    //    TH2D *fHist2DMCchildrenPhiDeviationsFromAverage[kNumberOfParentParticleClassesInMC];  //! MC delta b/n av. eta-phi and each child's eta and phi for each father (for different father classes)

    //    TString fStrMCparticleClassForFillingLRC; // name of particle class for LRC filling (default is All)
    //    Double_t fEtaMCanalysisCutMin; // spec MC analysis: cut on eta
    //    Double_t fEtaMCanalysisCutMax; // spec MC analysis: cut on eta

    //    TH1F *fHistMCparentDeepness;  //! MC deepness of parent tree from "physical primary" children
    //    TH1F *fHistMCparentsInitialStat;  //! MC initial papa particle class distr

    //    TH1F *fHistMCEtaInitialQuark;  //! MC eta distr of "initial" quarks
    //    TH1F *fHistMCEtaInitialGluon;  //! MC eta distr of "initial" gluons
    //    TH1F *fHistMCEtaInitialProton;  //! MC eta distr of "initial" protons

    //    TH1F *fHistMCnumberInitialQuarksInEvent;  //! MC initial quarks number distr
    //    TH1F *fHistMCnumberInitialGluonsInEvent;  //! MC initial gluons number distr
    //    TH1F *fHistMCnumberInitialProtonInEvent;  //! MC initial proton number distr (check that there are 2)

    //    TH1F *fHistMCnumberChildrenFromInitialQuarksInEvent;  //! MC children number from initial quarks distr
    //    TH1F *fHistMCnumberChildrenFromInitialGluonsInEvent;  //! MC children number from initial gluons distr
    //    TH1F *fHistMCnumberChildrenFromInitialProtonInEvent;  //! MC children number from initial proton distr (check that there are 2)


    // 4.01.2012: MyTree stuff
    //    AliSimpleEvent *fSimpleEvent;   // instance of simple event to be filled in analysis loop
    //    Int_t fNsimpleEvents;
    //    TTree *fEventTree;              //! event tree to write into output file
    //    Bool_t fSetIncludeEventTreeInOutput;    // flag to use event tree or not

    ClassDef(AliAnalysisTaskLRC, 11 );
};

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