#ifndef AliDhcTask_cxx
#define AliDhcTask_cxx
#include "AliAnalysisTaskSE.h"
#include "AliPool.h"
#include "PWG/muon/AliMuonTrackCuts.h"
class TFormula;
class TH1;
class TH2;
class TH3;
class THn;
class TAxis;
class TObjArray;
class TObject;
class TProfile2D;
class AliAODEvent;
class AliAODTrack;
class AliAnalysisUtils;
class AliESDEvent;
class AliESDMuonTrack;
class AliESDtrackCuts;
class AliEvtPoolManager;
class AliDhcTask : public AliAnalysisTaskSE {
public:
AliDhcTask();
AliDhcTask(const char *name, Bool_t def=kFALSE);
virtual ~AliDhcTask();
void SetAllTAHists(Bool_t b) { fAllTAHists = b; }
void SetAnaMode(Int_t iAna);
void SetCentBins(TAxis *bins) { fBCent=bins; }
void SetCentMethod(const char *name) { fCentMethod = name; }
void SetCentMixBins(TAxis *bins) { fMixBCent=bins; }
void SetCheckVertex(Bool_t b) { fCheckVertex = b; }
void SetClassName(const char *n) { fClassName = n; }
void SetDEtaDPhiBins(Int_t nbe, Int_t nbp) { fNBdeta=nbe; fNBdphi=nbp; }
void SetDoFillSame(Bool_t b) { fDoFillSame = b; }
void SetDoMassCut(Bool_t b) { fDoMassCut = b; }
void SetDoWeights(Bool_t b) { fDoWeights = b; }
void SetEtaMax(Double_t eta) { fEtaMax = eta; }
void SetEtaTRange(Double_t eL, Double_t eH) { fEtaTLo=eL; fEtaTHi=eH; }
void SetEtaARange(Double_t eL, Double_t eH) { fEtaALo=eL; fEtaAHi=eH; }
void SetFillMuons(Bool_t b) { fFillMuons = b; }
void SetHEffA(THnF *h) { fHEffA=h; }
void SetHEffT(THnF *h) { fHEffT=h; }
void SetMixInEtaT(Bool_t b) { fMixInEtaT = b; }
void SetMuonUtils(Bool_t b = kTRUE,
UInt_t mask = AliMuonTrackCuts::kMuEta | AliMuonTrackCuts::kMuThetaAbs | AliMuonTrackCuts::kMuPdca | AliMuonTrackCuts::kMuMatchApt ) {
fUseMuonUtils = b;
fMuonCutMask = mask;
}
void SetOmitFirstEv(Bool_t b) { fOmitFirstEv = b; }
void SetPoolSize(Int_t p) { fPoolSize = p; }
void SetPtABins(TAxis *bins) { fBPtA=bins; }
void SetPtRange(Double_t min, Double_t max) { fPtMin=min; fPtMax=max; }
void SetPtTACrit(Bool_t b) { fPtTACrit = b; }
void SetPtTBins(TAxis *bins) { fBPtT=bins; }
void SetRequireMuon(Bool_t b, Double_t l=0.5, Double_t h=4.0) {
fRequireMuon = b;
fReqPtLo = l;
fReqPtHi = h;
}
void SetTrackDepth(Int_t t) { fTrackDepth = t; }
void SetTracksName(const char *n) { fTracksName = n; }
void SetTriggerMatch(Bool_t b) { fTriggerMatch = b; }
void SetVerbosity(Int_t v) { fVerbosity = v; }
void SetZVtxBins(TAxis *bins) { fBZvtx=bins; }
void SetZVtxMixBins(TAxis *bins) { fMixBZvtx=bins; }
void SetZvtx(Double_t zvtx) { fZVtxMax = zvtx; }
void PrintDhcSettings();
enum eAnaMode {kHH=1, kMuH, kHMu, kMuMu, kPSide, kASide};
protected:
enum ePairingScheme {kSameEvt, kDiffEvt};
enum eDataType {kESD, kAOD};
void BookHistos();
void InitEventMixer();
void GetESDTracks(MiniEvent*);
void GetAODTracks(MiniEvent*);
Bool_t VertexOk() const;
Bool_t HasMuonESD();
Bool_t HasMuonAOD();
Bool_t IsGoodMUONtrack(AliESDMuonTrack &track);
Bool_t IsGoodMUONtrack(AliAODTrack &track);
Bool_t IsTrigger(Double_t eta, Double_t pt);
Bool_t IsAssociated(Double_t eta, Double_t pt);
Double_t DeltaPhi(Double_t phia, Double_t phib,
Double_t rangeMin = -TMath::Pi()/2,
Double_t rangeMax = 3*TMath::Pi()/2) const;
Int_t Correlate(const MiniEvent &arr1, const MiniEvent &arr2, Int_t pairing = kSameEvt);
void UserCreateOutputObjects();
void UserExec(Option_t *option);
void Terminate(Option_t *);
private:
Int_t fVerbosity;
Double_t fEtaMax;
Double_t fZVtxMax;
Double_t fPtMin;
Double_t fPtMax;
Int_t fTrackDepth;
Int_t fPoolSize;
TString fTracksName;
Bool_t fDoWeights;
Bool_t fFillMuons;
Bool_t fRequireMuon;
Double_t fReqPtLo;
Double_t fReqPtHi;
Bool_t fPtTACrit;
Bool_t fAllTAHists;
Bool_t fMixInEtaT;
Bool_t fUseMuonUtils;
UInt_t fMuonCutMask;
AliMuonTrackCuts *fMuonTrackCuts;
Double_t fEtaTLo;
Double_t fEtaTHi;
Double_t fEtaALo;
Double_t fEtaAHi;
Bool_t fOmitFirstEv;
Bool_t fDoFillSame;
Bool_t fDoMassCut;
Bool_t fCheckVertex;
TString fClassName;
TString fCentMethod;
Int_t fNBdeta;
Int_t fNBdphi;
Bool_t fTriggerMatch;
TAxis *fBPtT;
TAxis *fBPtA;
TAxis *fBCent;
TAxis *fBZvtx;
TAxis *fMixBCent;
TAxis *fMixBZvtx;
THnF *fHEffT;
THnF *fHEffA;
AliESDEvent *fESD;
AliAODEvent *fAOD;
TList *fOutputList;
TH2 *fHEvt;
TH2 *fHEvtWTr;
TH2 *fHTrk;
TH2 *fHPoolReady;
TH1 *fHPtAss;
TH1 *fHPtTrg;
TH1 *fHPtTrgEvt;
TH3 *fHPtTrgNorm1S;
TH3 *fHPtTrgNorm1M;
TH3 *fHPtTrgNorm2S;
TH3 *fHPtTrgNorm2M;
TH1 *fHCent;
TH1 *fHZvtx;
Int_t fNbins;
TH2 **fHSs;
TH2 **fHMs;
TH1 **fHPts;
TH1 **fHSMass;
TH1 **fHMMass;
TH3 *fHQATp;
TH3 *fHQAAp;
TH3 *fHQATpCorr;
TH3 *fHQAApCorr;
TH3 *fHQATm;
TH3 *fHQAAm;
TH3 *fHQATmCorr;
TH3 *fHQAAmCorr;
TH2 *fHPtCentT;
TH2 *fHPtCentA;
TFormula *fIndex;
Double_t fCentrality;
Double_t fZVertex;
AliESDtrackCuts *fEsdTPCOnly;
AliEvtPoolManager *fPoolMgr;
AliAnalysisUtils *fUtils;
AliDhcTask(const AliDhcTask&);
AliDhcTask &operator=(const AliDhcTask&);
ClassDef(AliDhcTask, 9)
};
#endif