Major update of the HFE package (comments inside the code
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliAnalysisTaskHFE.h
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  *
14 **************************************************************************/
15 //
16 // Task for Heavy Flavour Electron Analysis
17 // Fills a single-inclusive electron pt-spectrum
18 // For further information see implementation file
19 //
20 #ifndef ALIANALYSISTASKHFE_H
21 #define ALIANALYSISTASKHFE_H
22
23 #ifndef ALIANALYSISTASKSE_H
24 #include "AliAnalysisTaskSE.h"
25 #endif
26
27 class AliHFEcontainer;
28 class AliHFEcollection;
29 class AliHFEcuts;
30 class AliHFEelecbackground;
31 class AliHFEmcQA;
32 class AliHFEpid;
33 class AliHFEpidQAmanager;
34 class AliHFEsecVtx;
35 class AliHFEsignalCuts;
36 class AliHFEvarManager;
37 class AliHFEtaggedTrackAnalysis;
38 class AliCFManager;
39 class AliVEvent;
40 class AliMCEvent;
41 class AliVParticle;
42 class AliTriggerAnalysis;
43 class TH1I; 
44 class TList;
45
46 class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
47   public:
48     enum{
49       kPIDqa = 0,
50       kMCqa =1 
51     };
52     enum{
53       kPriVtx = 0,
54       kSecVtx = 1,
55       kIsElecBackGround = 2,
56       kPostProcess = 3,
57       kDEstep = 4,
58       kTaggedTrackAnalysis = 5
59     };
60     enum CreationProcess_t{
61       kSignalCharm = 0,
62       kSignalBeauty = 1,
63       kGammaConv = 2,
64       kOther = 3
65     };
66     AliAnalysisTaskHFE();
67     AliAnalysisTaskHFE(const char * name);
68     AliAnalysisTaskHFE(const AliAnalysisTaskHFE &ref);
69     AliAnalysisTaskHFE& operator=(const AliAnalysisTaskHFE &ref);
70     virtual void Copy(TObject &o) const;
71     virtual ~AliAnalysisTaskHFE();
72
73     virtual void UserCreateOutputObjects();
74     virtual void UserExec(Option_t *);
75     virtual void Terminate(Option_t *);
76
77     virtual Bool_t IsEventInBinZero();
78
79     Bool_t IsQAOn(Int_t qaLevel) const { return TESTBIT(fQAlevel, qaLevel); };
80     Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
81     Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
82     Bool_t HasMCData() const { return TestBit(kHasMCdata); }
83     Bool_t GetPlugin(Int_t plug) const { return TESTBIT(fPlugins, plug); };
84
85     // Get Components for configuration
86     AliHFEvarManager *GetVarManager() const { return fVarManager; }
87     AliHFEpid *GetPID() const { return fPID; }
88
89     void SetHFECuts(AliHFEcuts * const cuts) { fCuts = cuts; };
90     void SetTaggedTrackCuts(AliHFEcuts * const cuts) { fTaggedTrackCuts = cuts; }
91     void SetHFECutsPreselect(AliHFEcuts * const cuts) { fCutspreselect = cuts; };
92     void SetHFEElecBackGround(AliHFEelecbackground * const elecBackGround) { fElecBackGround = elecBackGround; };
93     void SetQAOn(Int_t qaLevel) { SETBIT(fQAlevel, qaLevel); };
94     void SwitchOnPlugin(Int_t plug);
95     void SetHasMCData(Bool_t hasMC = kTRUE) { SetBit(kHasMCdata, hasMC); };
96     void SetFillSignalOnly(Bool_t signalOnly) { fFillSignalOnly = signalOnly; }
97     void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
98     void SetPIDPreselect(AliHFEpid * const cuts) { fPIDpreselect = cuts; };
99     void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
100     void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
101     void SetBackGroundFactorsFunction(TF1 * const backGroundFactorsFunction) { fBackGroundFactorsFunction = backGroundFactorsFunction; };
102     void PrintStatus() const;
103     void ReadCentrality();
104     void RejectionPileUpVertexRangeEventCut();  
105  
106   private:
107     enum{
108       kHasMCdata = BIT(19),
109       kAODanalysis = BIT(20)
110     };
111
112     Bool_t FillProductionVertex(const AliVParticle * const track) const;
113     void MakeParticleContainer();
114     void MakeEventContainer();
115     void InitPIDperformanceQA();
116     void ProcessMC();
117     void ProcessESD();
118     void ProcessAOD();
119     Bool_t PreSelectTrack(AliESDtrack *track) const;
120     Bool_t ProcessMCtrack(AliVParticle *track);
121     Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);
122     ULong_t fQAlevel;                     // QA level
123     UShort_t fPlugins;                    // Enabled Plugins
124     Bool_t fFillSignalOnly;               // Fill container only with MC Signal Tracks
125     Bool_t fRemovePileUp;                 // Remove Pile Up
126     Bool_t fIdentifiedAsPileUp;           // Identified as pile-up
127     Bool_t fIdentifiedAsOutInz;           // Out Of Range in z
128     Bool_t fPassTheEventCut;              // Pass The Event Cut
129     Float_t fCentralityF;                 // Centrality
130     TF1  *fBackGroundFactorsFunction;     // BackGround factors
131     AliHFEcontainer *fContainer;          //! The HFE container
132     AliHFEvarManager *fVarManager;        // The var manager as the backbone of the analysis
133     AliHFEsignalCuts *fSignalCuts;        //! MC true signal (electron coming from certain source) 
134     AliCFManager *fCFM;                   //! Correction Framework Manager
135     AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
136     AliHFEpid *fPID;                      // PID
137     AliHFEpidQAmanager *fPIDqa;           //! PID QA
138     AliHFEpid *fPIDpreselect;             // PID oject for pre-selected tracks (without QA)
139     AliHFEcuts *fCuts;                    // Cut Collection
140     AliHFEcuts *fTaggedTrackCuts;         // Cut Collection for V0 tagged tracks
141     AliHFEcuts *fCutspreselect;           // Cut Collection for pre-selected tracks
142     AliHFEsecVtx *fSecVtx;                //! Secondary Vertex Analysis
143     AliHFEelecbackground *fElecBackGround;//! Background analysis
144     AliHFEmcQA *fMCQA;                    //! MC QA
145     AliHFEtaggedTrackAnalysis *fTaggedTrackAnalysis;     //!Analyse V0-tagged tracks
146
147     //-----------QA and output---------------
148     TList *fQA;                           //! QA histos for the cuts
149     TList *fOutput;                       //! Container for Task Output
150     TList *fHistMCQA;                     //! Output container for MC QA histograms 
151     TList *fHistSECVTX;                   //! Output container for sec. vertexing results
152     TList *fHistELECBACKGROUND;           //! Output container for electron background analysis
153     AliHFEcollection *fQACollection;      //! Tasks own QA collection
154     //---------------------------------------
155
156     ClassDef(AliAnalysisTaskHFE, 2)       // The electron Analysis Task
157 };
158 #endif
159