#ifndef ALIANALYSISTASKHFE_H
#define ALIANALYSISTASKHFE_H
#ifndef ALIANALYSISTASKSE_H
#include "AliAnalysisTaskSE.h"
#endif
#ifndef ROOT_TString
#include <TString.h>
#endif
#ifndef ROOT_TBits
#include <TBits.h>
#endif
class AliAnalysisUtils;
class AliESDtrackCuts;
class AliHFEcontainer;
class AliHFEcollection;
class AliHFEcuts;
class AliHFEextraCuts;
class AliHFEelecbackground;
class AliHFENonPhotonicElectron;
class AliHFEmcQA;
class AliHFEpid;
class AliHFEpidQAmanager;
class AliHFEsecVtx;
class AliHFEsignalCuts;
class AliHFEvarManager;
class AliHFEtaggedTrackAnalysis;
class AliHFEV0taginfo;
class AliCFManager;
class AliMCEvent;
class AliOADBContainer;
class AliAODMCHeader;
class AliVEvent;
class AliVParticle;
class AliTriggerAnalysis;
class AliTRDTriggerAnalysis;
class TH1I;
class TList;
class TClonesArray;
class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
public:
enum{
kPIDqa = 0,
kMCqa =1
};
enum{
kPriVtx = 0,
kSecVtx = 1,
kIsElecBackGround = 2,
kPostProcess = 3,
kDEstep = 4,
kTaggedTrackAnalysis = 5,
kNonPhotonicElectron = 6,
kNonPhotonicElectronBeauty = 7
};
enum CreationProcess_t{
kSignalCharm = 0,
kSignalBeauty = 1,
kGammaConv = 2,
kOther = 3
};
enum{
kBgPtBins = 44,
kElecBgSpecies = 6,
kCentBins = 11,
kBgLevels = 3
};
typedef enum{
kpp = 0,
kpPb = 1,
kPbPb = 2
} ECollisionSystem_t;
AliAnalysisTaskHFE();
AliAnalysisTaskHFE(const char * name);
AliAnalysisTaskHFE(const AliAnalysisTaskHFE &ref);
AliAnalysisTaskHFE& operator=(const AliAnalysisTaskHFE &ref);
virtual void Copy(TObject &o) const;
virtual ~AliAnalysisTaskHFE();
virtual void UserCreateOutputObjects();
virtual void UserExec(Option_t *);
virtual void Terminate(Option_t *);
virtual Bool_t IsEventInBinZero();
Bool_t IsQAOn(Int_t qaLevel) const { return TESTBIT(fQAlevel, qaLevel); };
Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
Bool_t HasMCData() const { return TestBit(kHasMCdata); }
Bool_t Ispp() const { return fCollisionSystem.TestBitNumber(kpp); }
Bool_t IsPbPb() const { return fCollisionSystem.TestBitNumber(kPbPb); }
Bool_t IspPb() const { return fCollisionSystem.TestBitNumber(kpPb); }
Bool_t IsHeavyIon() const { return IsPbPb(); }
Bool_t GetPlugin(Int_t plug) const { return TESTBIT(fPlugins, plug); };
AliHFEvarManager *GetVarManager() const { return fVarManager; }
AliHFEpidQAmanager *GetPIDQAManager() const { return fPIDqa; }
AliHFEpid *GetPID() const { return fPID; }
AliHFENonPhotonicElectron *GetHFEBackgroundSubtraction() const { return fBackgroundSubtraction; }
void SetHFECuts(AliHFEcuts * const cuts) { fCuts = cuts; };
void SetTaggedTrackCuts(AliHFEcuts * const cuts) { fTaggedTrackCuts = cuts; }
void SetCleanTaggedTrack(Bool_t clean) { fCleanTaggedTrack = clean; };
void SetVariablesTRDTaggedTrack(Bool_t variablesTRD) { fVariablesTRDTaggedTrack = variablesTRD; };
void SetHFECutsPreselect(AliESDtrackCuts * const cuts) { fCutspreselect = cuts; };
void SetHFEElecBackGround(AliHFEelecbackground * const elecBackGround) { fElecBackGround = elecBackGround; };
void SetHFEBackgroundSubtraction(AliHFENonPhotonicElectron * const backgroundSubtraction) { fBackgroundSubtraction = backgroundSubtraction; };
void SetQAOn(Int_t qaLevel) { SETBIT(fQAlevel, qaLevel); };
void SwitchOnPlugin(Int_t plug);
void SetHasMCData(Bool_t hasMC = kTRUE) { SetBit(kHasMCdata, hasMC); };
void SetFillSignalOnly(Bool_t signalOnly) { fFillSignalOnly = signalOnly; }
void SetFillNoCuts(Bool_t fillNoCuts) { fFillNoCuts = fillNoCuts; }
void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
void SetRemoveFirstEventInChunk() {fRemoveFirstEvent = kTRUE;}
void SetPIDPreselect(AliHFEpid * const cuts) { fPIDpreselect = cuts; };
void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
void SetTRDTrigger(Bool_t activateTRDTrigger, Int_t trdtrigger) {fTRDTrigger=activateTRDTrigger; fWhichTRDTrigger=trdtrigger;};
void SetCollisionSystem(ECollisionSystem_t system){
fCollisionSystem.Clear();
fCollisionSystem.SetBitNumber(system, kTRUE);
}
void SetppAnalysis(){
fCollisionSystem.SetBitNumber(kpPb, kFALSE);
fCollisionSystem.SetBitNumber(kPbPb, kFALSE);
fCollisionSystem.SetBitNumber(kpp, kTRUE);
}
void SetpPbAnalysis() {
fCollisionSystem.SetBitNumber(kpp, kFALSE);
fCollisionSystem.SetBitNumber(kPbPb, kFALSE);
fCollisionSystem.SetBitNumber(kpPb, kTRUE);
}
void SetPbPbAnalysis() {
fCollisionSystem.SetBitNumber(kpp, kFALSE);
fCollisionSystem.SetBitNumber(kpPb, kFALSE);
fCollisionSystem.SetBitNumber(kPbPb, kTRUE);
};
void SetCentralityEstimator(const char *estimator) { fCentralityEstimator = estimator; }
void SetPbPbUserCentralityLimit(Bool_t isPbPbUserBinning = kFALSE){fPbPbUserCentralityBinning = isPbPbUserBinning; };
void SetPbPbUserCentralityArray(Int_t icentr, Float_t valuecentr) {fCentralityLimits[icentr] = valuecentr;};
void SetPPMultiBinAnalysis(Bool_t isppMultiBin) { fisppMultiBin = isppMultiBin; };
void SetNonHFEsystematics(Bool_t isSystematics) {fisNonHFEsystematics = isSystematics; };
void SetRejectKinkMother(Bool_t rejectKinkMother = kFALSE) { fRejectKinkMother = rejectKinkMother; };
void SetRejectMCFakeTracks(Bool_t rejectFakes = kTRUE) { fRejectMCFakeTracks = rejectFakes; };
void SetBackGroundFactorsFunction(const TF1 * const backGroundFactorsFunction, Int_t centralitybin=0){
fkBackGroundFactorArray[centralitybin]=backGroundFactorsFunction;
fBackGroundFactorApply=kTRUE;
SetBit(kBackgroundInitialized);
};
void SetElecBackGroundFactors(Int_t iPt, Int_t iType, Int_t iCent, Int_t iError, Double_t elecBackGroundFactor) {fElecBackgroundFactor[iError][iCent][iType][iPt] = elecBackGroundFactor; };
void SetBinLimits(Int_t iPt, Double_t momentum){fBinLimit[iPt] = momentum;};
void PrintStatus() const;
Bool_t ReadCentrality();
void RejectionPileUpVertexRangeEventCut();
void SelectSpecialTrigger(const Char_t *trgclust, Int_t runMin = 0, Int_t runMax = 999999999);
void SetDebugStreaming() {SetBit(kTreeStream);};
void SetWeightHist() {SetBit(kWeightHist);};
Bool_t CheckTRDTriggerESD(AliESDEvent *ev);
Bool_t CheckTRDTrigger(AliVEvent *ev);
void DrawTRDTrigger(AliESDEvent *ev);
void DrawTRDTriggerAnalysis(AliVEvent *ev);
private:
enum{
kHasMCdata = BIT(19),
kAODanalysis = BIT(20),
kBackgroundInitialized = BIT(21),
kTreeStream = BIT(22),
kWeightHist = BIT(23)
};
Bool_t FillProductionVertex(const AliVParticle * const track) const;
void MakeParticleContainer();
void MakeEventContainer();
void InitHistoITScluster();
void InitHistoRadius();
void InitContaminationQA();
const Char_t *GetSpecialTrigger(Int_t run);
void ProcessMC();
void ProcessESD();
void ProcessAOD();
Int_t GetITSMultiplicity(AliVEvent *ev);
Bool_t IsMCFakeTrack(const AliVTrack * const trk) const;
Bool_t PreSelectTrack(AliESDtrack *track) const;
Bool_t ProcessMCtrack(AliVParticle *track);
Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);
AliAODMCHeader *fAODMCHeader;
TClonesArray *fAODArrayMCInfo;
ULong_t fQAlevel;
UShort_t fPlugins;
TBits fCollisionSystem;
Bool_t fFillSignalOnly;
Bool_t fRejectMCFakeTracks;
Bool_t fFillNoCuts;
Bool_t fBackGroundFactorApply;
Bool_t fRemovePileUp;
Bool_t fIdentifiedAsPileUp;
Bool_t fIdentifiedAsOutInz;
Bool_t fPassTheEventCut;
Bool_t fRejectKinkMother;
Bool_t fisppMultiBin;
Bool_t fPbPbUserCentralityBinning;
Bool_t fRemoveFirstEvent;
Bool_t fisNonHFEsystematics;
AliOADBContainer *fSpecialTrigger;
Int_t fCentralityF;
Float_t fCentralityPercent;
TString fCentralityEstimator;
Float_t fContributors;
Double_t fWeightBackGround;
Double_t fVz;
const TF1 *fkBackGroundFactorArray[12];
Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins];
Double_t fBinLimit[kBgPtBins+1];
Float_t fCentralityLimits[12];
AliHFEcontainer *fContainer;
AliHFEvarManager *fVarManager;
AliHFEsignalCuts *fSignalCuts;
AliCFManager *fCFM;
AliTriggerAnalysis *fTriggerAnalysis;
AliHFEpid *fPID;
AliHFEpidQAmanager *fPIDqa;
AliTRDTriggerAnalysis *fTRDTriggerAnalysismb;
AliTRDTriggerAnalysis *fTRDTriggerAnalysistrg;
AliHFEpid *fPIDpreselect;
AliHFEcuts *fCuts;
AliHFEcuts *fTaggedTrackCuts;
Bool_t fCleanTaggedTrack;
Bool_t fVariablesTRDTaggedTrack;
AliAnalysisUtils *fAnalysisUtils;
AliESDtrackCuts *fCutspreselect;
AliHFEsecVtx *fSecVtx;
AliHFEelecbackground *fElecBackGround;
AliHFEmcQA *fMCQA;
AliHFEtaggedTrackAnalysis *fTaggedTrackAnalysis;
AliHFEextraCuts *fExtraCuts;
AliHFENonPhotonicElectron *fBackgroundSubtraction;
Bool_t fTRDTrigger;
Int_t fWhichTRDTrigger;
AliHFEV0taginfo *fV0Tagger;
TList *fQA;
TList *fOutput;
TList *fHistMCQA;
TList *fHistSECVTX;
TList *fHistELECBACKGROUND;
AliHFEcollection *fQACollection;
ClassDef(AliAnalysisTaskHFE, 2)
};
#endif