]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/hfe/AliAnalysisTaskHFE.h
add method to check if some cuts where on
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliAnalysisTaskHFE.h
index 3494e9cfa3750beaae524fe201553b78582a7251..e18b5c0c25a562f185d93160969ab09d357835ee 100644 (file)
 #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;
@@ -43,11 +50,14 @@ class AliHFEtaggedTrackAnalysis;
 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:
@@ -61,7 +71,8 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
       kIsElecBackGround = 2,
       kPostProcess = 3,
       kDEstep = 4,
-      kTaggedTrackAnalysis = 5
+      kTaggedTrackAnalysis = 5,
+      kNonPhotonicElectron = 6
     };
     enum CreationProcess_t{
       kSignalCharm = 0,
@@ -75,6 +86,11 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
       kCentBins = 11,
       kBgLevels = 3
     };
+    typedef enum{
+      kpp = 0,
+      kpPb = 1,
+      kPbPb = 2
+    } ECollisionSystem_t;
 
     AliAnalysisTaskHFE();
     AliAnalysisTaskHFE(const char * name);
@@ -93,34 +109,58 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
     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; };
@@ -131,7 +171,6 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
       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;
@@ -139,23 +178,22 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
     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();
@@ -164,13 +202,14 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
     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
@@ -179,14 +218,15 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
     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
@@ -198,18 +238,22 @@ class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
     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