#ifndef AliEPSELECTIONTASK_H
#define AliEPSELECTIONTASK_H
#include "AliAnalysisTaskSE.h"
class TFile;
class TH1F;
class TH2F;
class TList;
class TString;
class TVector2;
class AliESDEvent;
class AliESDtrackCuts;
class AliESDtrack;
class AliEventplane;
class AliOADBContainer;
class AliVTrack;
class THnSparse;
class TProfile;
class AliEPSelectionTask : public AliAnalysisTaskSE {
public:
enum ResoMethod{kRandom,kEta,kCharge};
AliEPSelectionTask();
AliEPSelectionTask(const char *name);
virtual ~AliEPSelectionTask();
virtual void UserCreateOutputObjects();
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *option);
TVector2 GetQ(AliEventplane* EP, TObjArray* event);
void GetQsub(TVector2& Qsub1, TVector2& Qsub2, TObjArray* event,AliEventplane* EP);
Double_t GetWeight(TObject* track1);
Double_t GetPhiWeight(TObject* track1);
void Recenter(Int_t var, Double_t * values);
virtual void SetDebugLevel(Int_t level) {fDebug = level;}
void SetInput(const char* input) {fAnalysisInput = input;}
void SetUseMCRP() {fUseMCRP = kTRUE;}
void SetUsePhiWeight(Bool_t usephi = kTRUE){fUsePhiWeight = usephi;}
void SetUsePtWeight() {fUsePtWeight = kTRUE;}
void SetUseRecentering() {fUseRecentering = kTRUE;}
void SetSaveTrackContribution() {fSaveTrackContribution = kTRUE;}
void SetTrackType(TString tracktype);
void SetPhiDist();
void SetQvectorDist();
void SetPersonalESDtrackCuts(AliESDtrackCuts* trackcuts);
void SetPersonalAODtrackCuts(UInt_t filterbit = 1, Float_t etalow = -0.8, Float_t etaup = 0.8, Float_t ptlow = 0.15, Float_t ptup = 20., Int_t ntpc = 50);
void SetPersonalPhiDistribution(const char* filename, char* listname);
void SetEtaGap(Float_t etagap) {fEtaGap = etagap;}
void SetSubeventsSplitMethod(Int_t method) {fSplitMethod = method;}
private:
AliEPSelectionTask(const AliEPSelectionTask& ep);
AliEPSelectionTask& operator= (const AliEPSelectionTask& ep);
TObjArray* GetAODTracksAndMaxID(AliAODEvent* aod, Int_t& maxid);
void SetOADBandPeriod();
TH1F* SelectPhiDist(AliVTrack *track);
TObjArray* GetTracksForLHC11h(AliESDEvent* esd);
TString fAnalysisInput;
TString fTrackType;
TString fPeriod;
Double_t fCentrality;
Bool_t fUseMCRP;
Bool_t fUsePhiWeight;
Bool_t fUsePtWeight;
Bool_t fUseRecentering;
Bool_t fSaveTrackContribution;
Bool_t fUserphidist;
Bool_t fUsercuts;
Int_t fRunNumber;
UInt_t fAODfilterbit;
Float_t fEtaGap;
Int_t fSplitMethod;
AliESDtrackCuts* fESDtrackCuts;
AliOADBContainer* fEPContainer;
AliOADBContainer* fQxContainer;
AliOADBContainer* fQyContainer;
TH1F* fPhiDist[4];
THnSparse *fSparseDist;
TProfile* fQDist[2];
TH1F *fHruns;
TVector2* fQVector;
Double_t* fQContributionX;
Double_t* fQContributionY;
Double_t fEventplaneQ;
TVector2* fQsub1;
TVector2* fQsub2;
Double_t fQsubRes;
TList* fOutputList;
TH1F* fHOutEventplaneQ;
TH1F* fHOutPhi;
TH1F* fHOutPhiCorr;
TH2F* fHOutsub1sub2;
TH2F* fHOutNTEPRes;
TH2F* fHOutPTPsi;
TH2F* fHOutDiff;
TH2F* fHOutleadPTPsi;
ClassDef(AliEPSelectionTask,4);
};
#endif