]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/hfe/AliAnalysisTaskHFE.h
<Ntrk> values for more periods
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliAnalysisTaskHFE.h
CommitLineData
051db1cf 1/**************************************************************************\r
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3* *\r
4* Author: The ALICE Off-line Project. *\r
5* Contributors are mentioned in the code where appropriate. *\r
6* *\r
7* Permission to use, copy, modify and distribute this software and its *\r
8* documentation strictly for non-commercial purposes is hereby granted *\r
9* without fee, provided that the above copyright notice appears in all *\r
10* copies and that both the copyright notice and this permission notice *\r
11* appear in the supporting documentation. The authors make no claims *\r
12* about the suitability of this software for any purpose. It is *\r
13* provided "as is" without express or implied warranty. *\r
14**************************************************************************/\r
15//\r
16// Task for Heavy Flavour Electron Analysis\r
17// Fills a single-inclusive electron pt-spectrum\r
18// For further information see implementation file\r
19//\r
20#ifndef ALIANALYSISTASKHFE_H\r
21#define ALIANALYSISTASKHFE_H\r
22\r
23#ifndef ALIANALYSISTASKSE_H\r
24#include "AliAnalysisTaskSE.h"\r
25#endif\r
26\r
27#ifndef ROOT_TString\r
28#include <TString.h>\r
29#endif\r
30\r
31#ifndef ROOT_TBits\r
32#include <TBits.h>\r
33#endif\r
34\r
35class AliAnalysisUtils;\r
36class AliESDtrackCuts;\r
37class AliHFEcontainer;\r
38class AliHFEcollection;\r
39class AliHFEcuts;\r
40class AliHFEextraCuts;\r
41class AliHFEelecbackground;\r
42class AliHFENonPhotonicElectron;\r
43class AliHFEmcQA;\r
44class AliHFEpid;\r
45class AliHFEpidQAmanager;\r
46class AliHFEsecVtx;\r
47class AliHFEsignalCuts;\r
48class AliHFEvarManager;\r
49class AliHFEtaggedTrackAnalysis;\r
50class AliCFManager;\r
51class AliMCEvent;\r
52class AliOADBContainer;\r
53class AliAODMCHeader;\r
54class AliVEvent;\r
55class AliVParticle;\r
56class AliTriggerAnalysis;\r
57class TH1I; \r
58class TList;\r
59class TClonesArray;\r
60\r
61class AliAnalysisTaskHFE : public AliAnalysisTaskSE{\r
62 public:\r
63 enum{\r
64 kPIDqa = 0,\r
65 kMCqa =1 \r
66 };\r
67 enum{\r
68 kPriVtx = 0,\r
69 kSecVtx = 1,\r
70 kIsElecBackGround = 2,\r
71 kPostProcess = 3,\r
72 kDEstep = 4,\r
73 kTaggedTrackAnalysis = 5,\r
74 kNonPhotonicElectron = 6\r
75 };\r
76 enum CreationProcess_t{\r
77 kSignalCharm = 0,\r
78 kSignalBeauty = 1,\r
79 kGammaConv = 2,\r
80 kOther = 3\r
81 };\r
82 enum{\r
83 kBgPtBins = 44,\r
84 kElecBgSpecies = 6,\r
85 kCentBins = 11,\r
86 kBgLevels = 3\r
87 };\r
88 typedef enum{\r
89 kpp = 0,\r
90 kpPb = 1,\r
91 kPbPb = 2\r
92 } ECollisionSystem_t;\r
93\r
94 AliAnalysisTaskHFE();\r
95 AliAnalysisTaskHFE(const char * name);\r
96 AliAnalysisTaskHFE(const AliAnalysisTaskHFE &ref);\r
97 AliAnalysisTaskHFE& operator=(const AliAnalysisTaskHFE &ref);\r
98 virtual void Copy(TObject &o) const;\r
99 virtual ~AliAnalysisTaskHFE();\r
100\r
101 virtual void UserCreateOutputObjects();\r
102 virtual void UserExec(Option_t *);\r
103 virtual void Terminate(Option_t *);\r
104\r
105 virtual Bool_t IsEventInBinZero();\r
106\r
107 Bool_t IsQAOn(Int_t qaLevel) const { return TESTBIT(fQAlevel, qaLevel); };\r
108 Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };\r
109 Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };\r
110 Bool_t HasMCData() const { return TestBit(kHasMCdata); }\r
111 Bool_t Ispp() const { return fCollisionSystem.TestBitNumber(kpp); }\r
112 Bool_t IsPbPb() const { return fCollisionSystem.TestBitNumber(kPbPb); }\r
113 Bool_t IspPb() const { return fCollisionSystem.TestBitNumber(kpPb); }\r
114 Bool_t IsHeavyIon() const { return IsPbPb() || IspPb(); }\r
115 Bool_t GetPlugin(Int_t plug) const { return TESTBIT(fPlugins, plug); };\r
116\r
117 // Get Components for configuration\r
118 AliHFEvarManager *GetVarManager() const { return fVarManager; }\r
119 AliHFEpidQAmanager *GetPIDQAManager() const { return fPIDqa; }\r
120 AliHFEpid *GetPID() const { return fPID; }\r
121 AliHFENonPhotonicElectron *GetHFEBackgroundSubtraction() const { return fBackgroundSubtraction; }\r
122\r
123 void SetHFECuts(AliHFEcuts * const cuts) { fCuts = cuts; };\r
124 void SetTaggedTrackCuts(AliHFEcuts * const cuts) { fTaggedTrackCuts = cuts; }\r
125 void SetCleanTaggedTrack(Bool_t clean) { fCleanTaggedTrack = clean; };\r
126 void SetVariablesTRDTaggedTrack(Bool_t variablesTRD) { fVariablesTRDTaggedTrack = variablesTRD; };\r
127 void SetHFECutsPreselect(AliESDtrackCuts * const cuts) { fCutspreselect = cuts; };\r
128 void SetHFEElecBackGround(AliHFEelecbackground * const elecBackGround) { fElecBackGround = elecBackGround; };\r
129 void SetHFEBackgroundSubtraction(AliHFENonPhotonicElectron * const backgroundSubtraction) { fBackgroundSubtraction = backgroundSubtraction; };\r
130 void SetQAOn(Int_t qaLevel) { SETBIT(fQAlevel, qaLevel); };\r
131 void SwitchOnPlugin(Int_t plug);\r
132 void SetHasMCData(Bool_t hasMC = kTRUE) { SetBit(kHasMCdata, hasMC); };\r
133 void SetFillSignalOnly(Bool_t signalOnly) { fFillSignalOnly = signalOnly; }\r
134 \r
135 void SetFillNoCuts(Bool_t fillNoCuts) { fFillNoCuts = fillNoCuts; }\r
136 void SetApplyCutAOD(Bool_t applyCutAOD) { fApplyCutAOD = applyCutAOD; }\r
137 void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }\r
138 void SetRemoveFirstEventInChunk() {fRemoveFirstEvent = kTRUE;}\r
139 void SetPIDPreselect(AliHFEpid * const cuts) { fPIDpreselect = cuts; };\r
140 void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };\r
141 void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };\r
142 void SetTRDTrigger(Bool_t activateTRDTrigger, Int_t trdtrigger) {fTRDTrigger=activateTRDTrigger; fWhichTRDTrigger=trdtrigger;};\r
143 void SetCollisionSystem(ECollisionSystem_t system){\r
144 fCollisionSystem.Clear();\r
145 fCollisionSystem.SetBitNumber(system, kTRUE);\r
146 }\r
147 void SetppAnalysis(){\r
148 fCollisionSystem.SetBitNumber(kpPb, kFALSE); \r
149 fCollisionSystem.SetBitNumber(kPbPb, kFALSE); \r
150 fCollisionSystem.SetBitNumber(kpp, kTRUE); \r
151 }\r
152 void SetpPbAnalysis() {\r
153 fCollisionSystem.SetBitNumber(kpp, kFALSE); \r
154 fCollisionSystem.SetBitNumber(kPbPb, kFALSE); \r
155 fCollisionSystem.SetBitNumber(kpPb, kTRUE); \r
156 }\r
157 void SetPbPbAnalysis() { \r
158 fCollisionSystem.SetBitNumber(kpp, kFALSE); \r
159 fCollisionSystem.SetBitNumber(kpPb, kFALSE); \r
160 fCollisionSystem.SetBitNumber(kPbPb, kTRUE); \r
161 };\r
162 void SetCentralityEstimator(const char *estimator) { fCentralityEstimator = estimator; }\r
163 void SetPbPbUserCentralityLimit(Bool_t isPbPbUserBinning = kFALSE){fPbPbUserCentralityBinning = isPbPbUserBinning; };\r
164 void SetPbPbUserCentralityArray(Int_t icentr, Float_t valuecentr) {fCentralityLimits[icentr] = valuecentr;};\r
165 void SetPPMultiBinAnalysis(Bool_t isppMultiBin) { fisppMultiBin = isppMultiBin; };\r
166 void SetNonHFEsystematics(Bool_t isSystematics) {fisNonHFEsystematics = isSystematics; };\r
167 void SetRejectKinkMother(Bool_t rejectKinkMother = kFALSE) { fRejectKinkMother = rejectKinkMother; };\r
168 void SetBackGroundFactorsFunction(const TF1 * const backGroundFactorsFunction, Int_t centralitybin=0){ \r
169 fkBackGroundFactorArray[centralitybin]=backGroundFactorsFunction;\r
170 fBackGroundFactorApply=kTRUE;\r
171 SetBit(kBackgroundInitialized);\r
172 };\r
173 void SetElecBackGroundFactors(Int_t iPt, Int_t iType, Int_t iCent, Int_t iError, Double_t elecBackGroundFactor) {fElecBackgroundFactor[iError][iCent][iType][iPt] = elecBackGroundFactor; };\r
174 void SetBinLimits(Int_t iPt, Double_t momentum){fBinLimit[iPt] = momentum;};\r
175 void PrintStatus() const;\r
176 Bool_t ReadCentrality();\r
177 void RejectionPileUpVertexRangeEventCut(); \r
178 void SelectSpecialTrigger(const Char_t *trgclust, Int_t runMin = 0, Int_t runMax = 999999999); \r
179 void SetDebugStreaming() {SetBit(kTreeStream);};\r
180 Bool_t CheckTRDTrigger(AliESDEvent *ev);\r
8c07fb0d 181 void DrawTRDTrigger(AliESDEvent *ev);
051db1cf 182\r
183 private:\r
184 enum{\r
185 kHasMCdata = BIT(19),\r
186 kAODanalysis = BIT(20),\r
187 kBackgroundInitialized = BIT(21),\r
188 kTreeStream = BIT(22)\r
189 };\r
190\r
191 Bool_t FillProductionVertex(const AliVParticle * const track) const;\r
192 void MakeParticleContainer();\r
193 void MakeEventContainer();\r
194 void InitHistoITScluster();\r
195 void InitContaminationQA();\r
196 const Char_t *GetSpecialTrigger(Int_t run);\r
197 void ProcessMC();\r
198 void ProcessESD();\r
199 void ProcessAOD();\r
200 Int_t GetITSMultiplicity(AliVEvent *ev);\r
201 Bool_t PreSelectTrack(AliESDtrack *track) const;\r
202 Bool_t ProcessMCtrack(AliVParticle *track);\r
203 Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);\r
204 AliAODMCHeader *fAODMCHeader; // ! MC info AOD\r
205 TClonesArray *fAODArrayMCInfo; // ! MC info particle AOD\r
206 ULong_t fQAlevel; // QA level\r
207 UShort_t fPlugins; // Enabled Plugins\r
208 TBits fCollisionSystem; // Collision System;\r
209 Bool_t fFillSignalOnly; // Fill container only with MC Signal Tracks\r
210 Bool_t fFillNoCuts; // Fill container before any cut\r
211 Bool_t fApplyCutAOD; // Apply the analysis cut for AOD tracks\r
212 Bool_t fBackGroundFactorApply; // Apply Background Function Subtraction, MF: To be removed when transition to OADB container is finished\r
213 Bool_t fRemovePileUp; // Remove Pile Up\r
214 Bool_t fIdentifiedAsPileUp; // Identified as pile-up\r
215 Bool_t fIdentifiedAsOutInz; // Out Of Range in z\r
216 Bool_t fPassTheEventCut; // Pass The Event Cut\r
217 Bool_t fRejectKinkMother; // Reject Kink Mother\r
218 Bool_t fisppMultiBin; // pp Multiplicity Bin analysis\r
219 Bool_t fPbPbUserCentralityBinning; // PbPb user centrality binning\r
220 Bool_t fRemoveFirstEvent; // Remove first event from chunk\r
221 Bool_t fisNonHFEsystematics; // Non-HFE background systematics analysis\r
222 AliOADBContainer *fSpecialTrigger; // Special trigger selection\r
223 Int_t fCentralityF; // Centrality bin\r
224 Float_t fCentralityPercent; // Centrality percentile\r
225 TString fCentralityEstimator; // Centrality Estimator\r
226 Float_t fContributors; // Contributors\r
227 Double_t fWeightBackGround; // weight background function\r
228 Double_t fVz; // z position of the primary vertex\r
229 const TF1 *fkBackGroundFactorArray[12]; // Array of BackGround factors for each centrality bin, bin0 = min bias\r
230 Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins]; // Electron background factors\r
231 Double_t fBinLimit[kBgPtBins+1]; // Electron pt bin edges\r
232 Float_t fCentralityLimits[12]; // Limits for centrality bins\r
233 AliHFEcontainer *fContainer; //! The HFE container\r
234 AliHFEvarManager *fVarManager; // The var manager as the backbone of the analysis\r
235 AliHFEsignalCuts *fSignalCuts; //! MC true signal (electron coming from certain source) \r
236 AliCFManager *fCFM; //! Correction Framework Manager\r
237 AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation\r
238 AliHFEpid *fPID; // PID\r
239 AliHFEpidQAmanager *fPIDqa; // PID QA\r
240 AliHFEpid *fPIDpreselect; // PID oject for pre-selected tracks (without QA)\r
241 AliHFEcuts *fCuts; // Cut Collection\r
242 AliHFEcuts *fTaggedTrackCuts; // Cut Collection for V0 tagged tracks\r
243 Bool_t fCleanTaggedTrack; // Loose cleaning of the V0 tagged tracks electron\r
244 Bool_t fVariablesTRDTaggedTrack; // Take the variables at the TRD for the V0 tagged tracks electron\r
245 AliAnalysisUtils *fAnalysisUtils; // Utility object to remove the first event of a chunk from the analysis\r
246 AliESDtrackCuts *fCutspreselect; // Cut Collection for pre-selected tracks\r
247 AliHFEsecVtx *fSecVtx; //! Secondary Vertex Analysis\r
248 AliHFEelecbackground *fElecBackGround;//! Background analysis\r
249 AliHFEmcQA *fMCQA; //! MC QA\r
250 AliHFEtaggedTrackAnalysis *fTaggedTrackAnalysis; //!Analyse V0-tagged tracks\r
251 AliHFEextraCuts *fExtraCuts; //! temporary implementation for IP QA\r
252 AliHFENonPhotonicElectron *fBackgroundSubtraction; // Background subtraction\r
253 Bool_t fTRDTrigger; // Check if event is TRD triggered event\r
254 Int_t fWhichTRDTrigger; // Select type of TRD trigger\r
255 //-----------QA and output---------------\r
256 TList *fQA; //! QA histos for the cuts\r
257 TList *fOutput; //! Container for Task Output\r
258 TList *fHistMCQA; //! Output container for MC QA histograms \r
259 TList *fHistSECVTX; //! Output container for sec. vertexing results\r
260 TList *fHistELECBACKGROUND; //! Output container for electron background analysis\r
261 AliHFEcollection *fQACollection; //! Tasks own QA collection\r
262 //---------------------------------------\r
263\r
264 ClassDef(AliAnalysisTaskHFE, 2) // The electron Analysis Task\r
265};\r
266#endif\r
267\r