Update of the HFE package
[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 #ifndef ROOT_TString
28 #include <TString.h>
29 #endif
30
31 class AliHFEcontainer;
32 class AliHFEcollection;
33 class AliHFEcuts;
34 class AliHFEelecbackground;
35 class AliHFEmcQA;
36 class AliHFEpid;
37 class AliHFEpidQAmanager;
38 class AliHFEsecVtx;
39 class AliHFEsignalCuts;
40 class AliHFEvarManager;
41 class AliHFEtaggedTrackAnalysis;
42 class AliCFManager;
43 class AliVEvent;
44 class AliMCEvent;
45 class AliVParticle;
46 class AliTriggerAnalysis;
47 class TH1I; 
48 class TList;
49
50 class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
51   public:
52     enum{
53       kPIDqa = 0,
54       kMCqa =1 
55     };
56     enum{
57       kPriVtx = 0,
58       kSecVtx = 1,
59       kIsElecBackGround = 2,
60       kPostProcess = 3,
61       kDEstep = 4,
62       kTaggedTrackAnalysis = 5
63     };
64     enum CreationProcess_t{
65       kSignalCharm = 0,
66       kSignalBeauty = 1,
67       kGammaConv = 2,
68       kOther = 3
69     };
70     enum{
71       kBgPtBins = 44,
72       kElecBgSpecies = 6
73     };
74
75     AliAnalysisTaskHFE();
76     AliAnalysisTaskHFE(const char * name);
77     AliAnalysisTaskHFE(const AliAnalysisTaskHFE &ref);
78     AliAnalysisTaskHFE& operator=(const AliAnalysisTaskHFE &ref);
79     virtual void Copy(TObject &o) const;
80     virtual ~AliAnalysisTaskHFE();
81
82     virtual void UserCreateOutputObjects();
83     virtual void UserExec(Option_t *);
84     virtual void Terminate(Option_t *);
85
86     virtual Bool_t IsEventInBinZero();
87
88     Bool_t IsQAOn(Int_t qaLevel) const { return TESTBIT(fQAlevel, qaLevel); };
89     Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
90     Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
91     Bool_t HasMCData() const { return TestBit(kHasMCdata); }
92     Bool_t IsPbPb() const { return TestBit(kBeamType); }
93     Bool_t GetPlugin(Int_t plug) const { return TESTBIT(fPlugins, plug); };
94
95     // Get Components for configuration
96     AliHFEvarManager *GetVarManager() const { return fVarManager; }
97     AliHFEpidQAmanager *GetPIDQAManager() const { return fPIDqa; }
98     AliHFEpid *GetPID() const { return fPID; }
99
100     void SetHFECuts(AliHFEcuts * const cuts) { fCuts = cuts; };
101     void SetTaggedTrackCuts(AliHFEcuts * const cuts) { fTaggedTrackCuts = cuts; }
102     void SetCleanTaggedTrack(Bool_t clean) { fCleanTaggedTrack = clean; };
103     void SetVariablesTRDTaggedTrack(Bool_t variablesTRD) { fVariablesTRDTaggedTrack = variablesTRD; };
104     void SetHFECutsPreselect(AliHFEcuts * const cuts) { fCutspreselect = cuts; };
105     void SetHFEElecBackGround(AliHFEelecbackground * const elecBackGround) { fElecBackGround = elecBackGround; };
106     void SetQAOn(Int_t qaLevel) { SETBIT(fQAlevel, qaLevel); };
107     void SwitchOnPlugin(Int_t plug);
108     void SetHasMCData(Bool_t hasMC = kTRUE) { SetBit(kHasMCdata, hasMC); };
109     void SetFillSignalOnly(Bool_t signalOnly) { fFillSignalOnly = signalOnly; }
110     void SetFillNoCuts(Bool_t fillNoCuts) { fFillNoCuts = fillNoCuts; }
111     void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
112     void SetPIDPreselect(AliHFEpid * const cuts) { fPIDpreselect = cuts; };
113     void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
114     void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
115     void SetPbPbAnalysis(Bool_t isPbPb = kFALSE) { SetBit(kBeamType, isPbPb); };
116     void SetRejectKinkMother(Bool_t rejectKinkMother = kFALSE) { fRejectKinkMother = rejectKinkMother; };
117     void SetBackGroundFactorsFunction(TF1 * const backGroundFactorsFunction, Int_t centralitybin=0)
118     {  fBackGroundFactorArray[centralitybin]=backGroundFactorsFunction;
119        fBackGroundFactorApply=kTRUE;};
120     void SetElecBackGroundFactors(Int_t iPt, Int_t iType, Double_t elecBackGroundFactor) {fElecBackgroundFactor[iType][iPt] = elecBackGroundFactor; };
121     void SetBinLimits(Int_t iPt, Double_t momentum){fBinLimit[iPt] = momentum;};
122     void PrintStatus() const;
123     Bool_t ReadCentrality();
124     void RejectionPileUpVertexRangeEventCut();  
125     void SelectSpecialTrigger(const Char_t *trgclust){ fHasSpecialTriggerSelection = kTRUE; fSpecialTrigger = trgclust; }
126  
127   private:
128     enum{
129       kHasMCdata = BIT(19),
130       kAODanalysis = BIT(20),
131       kBeamType = BIT(21)
132     };
133
134     Bool_t FillProductionVertex(const AliVParticle * const track) const;
135     void MakeParticleContainer();
136     void MakeEventContainer();
137     void InitPIDperformanceQA();
138     void InitContaminationQA();
139     void ProcessMC();
140     void ProcessESD();
141     void ProcessAOD();
142     Int_t GetITSMultiplicity(AliVEvent *ev);
143     Bool_t PreSelectTrack(AliESDtrack *track) const;
144     Bool_t ProcessMCtrack(AliVParticle *track);
145     Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);
146     ULong_t fQAlevel;                     // QA level
147     UShort_t fPlugins;                    // Enabled Plugins
148     Bool_t fFillSignalOnly;               // Fill container only with MC Signal Tracks
149     Bool_t fFillNoCuts;                   // Fill container before any cut
150     Bool_t fBackGroundFactorApply;        // Apply Background Function Subtraction
151     Bool_t fRemovePileUp;                 // Remove Pile Up
152     Bool_t fIdentifiedAsPileUp;           // Identified as pile-up
153     Bool_t fIdentifiedAsOutInz;           // Out Of Range in z
154     Bool_t fPassTheEventCut;              // Pass The Event Cut
155     Bool_t fHasSpecialTriggerSelection;   // Select special triggered events
156     Bool_t fRejectKinkMother;             // Reject Kink Mother
157     TString fSpecialTrigger;              // Special trigger selection
158     Int_t   fCentralityF;                 // Centrality
159     Float_t fContributors;                // Contributors
160     Double_t fWeightBackGround;            // weight background function
161     Double_t fVz;                         // z position of the primary vertex
162     TF1  *fBackGroundFactorArray[12];     // Array of BackGround factors for each centrality bin, bin0 = min bias
163     Double_t fElecBackgroundFactor[kElecBgSpecies][kBgPtBins];     // Electron background factors
164     Double_t fBinLimit[kBgPtBins+1];      // Electron pt bin edges
165     AliHFEcontainer *fContainer;          //! The HFE container
166     AliHFEvarManager *fVarManager;        // The var manager as the backbone of the analysis
167     AliHFEsignalCuts *fSignalCuts;        //! MC true signal (electron coming from certain source) 
168     AliCFManager *fCFM;                   //! Correction Framework Manager
169     AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
170     AliHFEpid *fPID;                      // PID
171     AliHFEpidQAmanager *fPIDqa;           // PID QA
172     AliHFEpid *fPIDpreselect;             // PID oject for pre-selected tracks (without QA)
173     AliHFEcuts *fCuts;                    // Cut Collection
174     AliHFEcuts *fTaggedTrackCuts;         // Cut Collection for V0 tagged tracks
175     Bool_t fCleanTaggedTrack;             // Loose cleaning of the V0 tagged tracks electron
176     Bool_t fVariablesTRDTaggedTrack;      // Take the variables at the TRD for the V0 tagged tracks electron
177     AliHFEcuts *fCutspreselect;           // Cut Collection for pre-selected tracks
178     AliHFEsecVtx *fSecVtx;                //! Secondary Vertex Analysis
179     AliHFEelecbackground *fElecBackGround;//! Background analysis
180     AliHFEmcQA *fMCQA;                    //! MC QA
181     AliHFEtaggedTrackAnalysis *fTaggedTrackAnalysis;     //!Analyse V0-tagged tracks
182
183     //-----------QA and output---------------
184     TList *fQA;                           //! QA histos for the cuts
185     TList *fOutput;                       //! Container for Task Output
186     TList *fHistMCQA;                     //! Output container for MC QA histograms 
187     TList *fHistSECVTX;                   //! Output container for sec. vertexing results
188     TList *fHistELECBACKGROUND;           //! Output container for electron background analysis
189     AliHFEcollection *fQACollection;      //! Tasks own QA collection
190     //---------------------------------------
191
192     ClassDef(AliAnalysisTaskHFE, 2)       // The electron Analysis Task
193 };
194 #endif
195