#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 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:
kIsElecBackGround = 2,
kPostProcess = 3,
kDEstep = 4,
- kTaggedTrackAnalysis = 5
+ kTaggedTrackAnalysis = 5,
+ kNonPhotonicElectron = 6
};
enum CreationProcess_t{
kSignalCharm = 0,
kCentBins = 11,
kBgLevels = 3
};
+ typedef enum{
+ kpp = 0,
+ kpPb = 1,
+ kPbPb = 2
+ } ECollisionSystem_t;
AliAnalysisTaskHFE();
AliAnalysisTaskHFE(const char * name);
Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
Bool_t HasMCData() const { return TestBit(kHasMCdata); }
- Bool_t IsPbPb() const { return TestBit(kBeamType); }
+ 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() || IspPb(); }
Bool_t GetPlugin(Int_t plug) const { return TESTBIT(fPlugins, plug); };
// Get Components for configuration
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(AliHFEcuts * const cuts) { fCutspreselect = cuts; };
+ 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 SetUseFlagAOD(Bool_t useFlagAOD) { fUseFlagAOD = useFlagAOD; }
- void SetApplyCutAOD(Bool_t applyCutAOD) { fApplyCutAOD = applyCutAOD; }
- void SetFlags(ULong_t flags) { fFlags = flags; }
+ void SetApplyCutAOD(Bool_t applyCutAOD) { fApplyCutAOD = applyCutAOD; }
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 SetPbPbAnalysis(Bool_t isPbPb = kFALSE) { SetBit(kBeamType, isPbPb); };
+ 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; };
fBackGroundFactorApply=kTRUE;
SetBit(kBackgroundInitialized);
};
- void SetBackgroundFactorsFromOADB(AliOADBContainer *cont) { fHadronBackgroundOADB = cont; fBackGroundFactorApply = kTRUE; }
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;
void RejectionPileUpVertexRangeEventCut();
void SelectSpecialTrigger(const Char_t *trgclust, Int_t runMin = 0, Int_t runMax = 999999999);
void SetDebugStreaming() {SetBit(kTreeStream);};
-
+ Bool_t CheckTRDTrigger(AliESDEvent *ev);
+ void DrawTRDTrigger(AliESDEvent *ev);
+
private:
enum{
kHasMCdata = BIT(19),
kAODanalysis = BIT(20),
- kBeamType = BIT(21),
- kBackgroundInitialized = BIT(22),
- kTreeStream = BIT(23)
+ kBackgroundInitialized = BIT(21),
+ kTreeStream = BIT(22)
};
Bool_t FillProductionVertex(const AliVParticle * const track) const;
void MakeParticleContainer();
void MakeEventContainer();
- void InitPIDperformanceQA();
- void InitContaminationQA();
void InitHistoITScluster();
- Bool_t InitializeHadronBackground(Int_t run);
+ void InitContaminationQA();
const Char_t *GetSpecialTrigger(Int_t run);
void ProcessMC();
void ProcessESD();
Bool_t PreSelectTrack(AliESDtrack *track) const;
Bool_t ProcessMCtrack(AliVParticle *track);
Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);
+ AliAODMCHeader *fAODMCHeader; // ! MC info AOD
+ TClonesArray *fAODArrayMCInfo; // ! MC info particle AOD
ULong_t fQAlevel; // QA level
UShort_t fPlugins; // Enabled Plugins
+ TBits fCollisionSystem; // Collision System;
Bool_t fFillSignalOnly; // Fill container only with MC Signal Tracks
Bool_t fFillNoCuts; // Fill container before any cut
- Bool_t fUseFlagAOD; // Use the preselected AOD track
Bool_t fApplyCutAOD; // Apply the analysis cut for AOD tracks
- ULong_t fFlags; // reconstruction AOD status flags
Bool_t fBackGroundFactorApply; // Apply Background Function Subtraction, MF: To be removed when transition to OADB container is finished
Bool_t fRemovePileUp; // Remove Pile Up
Bool_t fIdentifiedAsPileUp; // Identified as pile-up
Bool_t fRejectKinkMother; // Reject Kink Mother
Bool_t fisppMultiBin; // pp Multiplicity Bin analysis
Bool_t fPbPbUserCentralityBinning; // PbPb user centrality binning
+ Bool_t fRemoveFirstEvent; // Remove first event from chunk
Bool_t fisNonHFEsystematics; // Non-HFE background systematics analysis
AliOADBContainer *fSpecialTrigger; // Special trigger selection
Int_t fCentralityF; // Centrality bin
Float_t fCentralityPercent; // Centrality percentile
+ TString fCentralityEstimator; // Centrality Estimator
Float_t fContributors; // Contributors
Double_t fWeightBackGround; // weight background function
Double_t fVz; // z position of the primary vertex
- AliOADBContainer *fHadronBackgroundOADB; // OADB Container for hadron contamination
const TF1 *fkBackGroundFactorArray[12]; // Array of BackGround factors for each centrality bin, bin0 = min bias
Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins]; // Electron background factors
Double_t fBinLimit[kBgPtBins+1]; // Electron pt bin edges
AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
AliHFEpid *fPID; // PID
AliHFEpidQAmanager *fPIDqa; // PID QA
+ AliTRDTriggerAnalysis *fTRDTriggerAnalysis; //! TRD Trigger Analysis
AliHFEpid *fPIDpreselect; // PID oject for pre-selected tracks (without QA)
AliHFEcuts *fCuts; // Cut Collection
AliHFEcuts *fTaggedTrackCuts; // Cut Collection for V0 tagged tracks
Bool_t fCleanTaggedTrack; // Loose cleaning of the V0 tagged tracks electron
Bool_t fVariablesTRDTaggedTrack; // Take the variables at the TRD for the V0 tagged tracks electron
- AliHFEcuts *fCutspreselect; // Cut Collection for pre-selected tracks
+ AliAnalysisUtils *fAnalysisUtils; // Utility object to remove the first event of a chunk from the analysis
+ AliESDtrackCuts *fCutspreselect; // Cut Collection for pre-selected tracks
AliHFEsecVtx *fSecVtx; //! Secondary Vertex Analysis
AliHFEelecbackground *fElecBackGround;//! Background analysis
AliHFEmcQA *fMCQA; //! MC QA
AliHFEtaggedTrackAnalysis *fTaggedTrackAnalysis; //!Analyse V0-tagged tracks
AliHFEextraCuts *fExtraCuts; //! temporary implementation for IP QA
-
+ AliHFENonPhotonicElectron *fBackgroundSubtraction; // Background subtraction
+ Bool_t fTRDTrigger; // Check if event is TRD triggered event
+ Int_t fWhichTRDTrigger; // Select type of TRD trigger
//-----------QA and output---------------
TList *fQA; //! QA histos for the cuts
TList *fOutput; //! Container for Task Output