1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 // Task for Heavy Flavour Electron Analysis
17 // Fills a single-inclusive electron pt-spectrum
18 // For further information see implementation file
20 #ifndef ALIANALYSISTASKHFE_H
21 #define ALIANALYSISTASKHFE_H
23 #ifndef ALIANALYSISTASKSE_H
24 #include "AliAnalysisTaskSE.h"
35 class AliAnalysisUtils;
36 class AliESDtrackCuts;
37 class AliHFEcontainer;
38 class AliHFEcollection;
40 class AliHFEextraCuts;
41 class AliHFEelecbackground;
42 class AliHFENonPhotonicElectron;
45 class AliHFEpidQAmanager;
47 class AliHFEsignalCuts;
48 class AliHFEvarManager;
49 class AliHFEtaggedTrackAnalysis;
50 class AliHFEV0taginfo;
53 class AliOADBContainer;
57 class AliTriggerAnalysis;
58 class AliTRDTriggerAnalysis;
63 class AliAnalysisTaskHFE : public AliAnalysisTaskSE{
72 kIsElecBackGround = 2,
75 kTaggedTrackAnalysis = 5,
76 kNonPhotonicElectron = 6,
77 kNonPhotonicElectronBeauty = 7
79 enum CreationProcess_t{
98 AliAnalysisTaskHFE(const char * name);
99 AliAnalysisTaskHFE(const AliAnalysisTaskHFE &ref);
100 AliAnalysisTaskHFE& operator=(const AliAnalysisTaskHFE &ref);
101 virtual void Copy(TObject &o) const;
102 virtual ~AliAnalysisTaskHFE();
104 virtual void UserCreateOutputObjects();
105 virtual void UserExec(Option_t *);
106 virtual void Terminate(Option_t *);
108 virtual Bool_t IsEventInBinZero();
110 Bool_t IsQAOn(Int_t qaLevel) const { return TESTBIT(fQAlevel, qaLevel); };
111 Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
112 Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
113 Bool_t HasMCData() const { return TestBit(kHasMCdata); }
114 Bool_t Ispp() const { return fCollisionSystem.TestBitNumber(kpp); }
115 Bool_t IsPbPb() const { return fCollisionSystem.TestBitNumber(kPbPb); }
116 Bool_t IspPb() const { return fCollisionSystem.TestBitNumber(kpPb); }
117 Bool_t IsHeavyIon() const { return IsPbPb(); }
118 Bool_t GetPlugin(Int_t plug) const { return TESTBIT(fPlugins, plug); };
120 // Get Components for configuration
121 AliHFEvarManager *GetVarManager() const { return fVarManager; }
122 AliHFEpidQAmanager *GetPIDQAManager() const { return fPIDqa; }
123 AliHFEpid *GetPID() const { return fPID; }
124 AliHFENonPhotonicElectron *GetHFEBackgroundSubtraction() const { return fBackgroundSubtraction; }
126 void SetHFECuts(AliHFEcuts * const cuts) { fCuts = cuts; };
127 void SetTaggedTrackCuts(AliHFEcuts * const cuts) { fTaggedTrackCuts = cuts; }
128 void SetCleanTaggedTrack(Bool_t clean) { fCleanTaggedTrack = clean; };
129 void SetVariablesTRDTaggedTrack(Bool_t variablesTRD) { fVariablesTRDTaggedTrack = variablesTRD; };
130 void SetHFECutsPreselect(AliESDtrackCuts * const cuts) { fCutspreselect = cuts; };
131 void SetHFEElecBackGround(AliHFEelecbackground * const elecBackGround) { fElecBackGround = elecBackGround; };
132 void SetHFEBackgroundSubtraction(AliHFENonPhotonicElectron * const backgroundSubtraction) { fBackgroundSubtraction = backgroundSubtraction; };
133 void SetQAOn(Int_t qaLevel) { SETBIT(fQAlevel, qaLevel); };
134 void SwitchOnPlugin(Int_t plug);
135 void SetHasMCData(Bool_t hasMC = kTRUE) { SetBit(kHasMCdata, hasMC); };
136 void SetFillSignalOnly(Bool_t signalOnly) { fFillSignalOnly = signalOnly; }
138 void SetFillNoCuts(Bool_t fillNoCuts) { fFillNoCuts = fillNoCuts; }
139 void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
140 void SetRemoveFirstEventInChunk() {fRemoveFirstEvent = kTRUE;}
141 void SetPIDPreselect(AliHFEpid * const cuts) { fPIDpreselect = cuts; };
142 void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
143 void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
144 void SetTRDTrigger(Bool_t activateTRDTrigger, Int_t trdtrigger) {fTRDTrigger=activateTRDTrigger; fWhichTRDTrigger=trdtrigger;};
145 void SetCollisionSystem(ECollisionSystem_t system){
146 fCollisionSystem.Clear();
147 fCollisionSystem.SetBitNumber(system, kTRUE);
149 void SetppAnalysis(){
150 fCollisionSystem.SetBitNumber(kpPb, kFALSE);
151 fCollisionSystem.SetBitNumber(kPbPb, kFALSE);
152 fCollisionSystem.SetBitNumber(kpp, kTRUE);
154 void SetpPbAnalysis() {
155 fCollisionSystem.SetBitNumber(kpp, kFALSE);
156 fCollisionSystem.SetBitNumber(kPbPb, kFALSE);
157 fCollisionSystem.SetBitNumber(kpPb, kTRUE);
159 void SetPbPbAnalysis() {
160 fCollisionSystem.SetBitNumber(kpp, kFALSE);
161 fCollisionSystem.SetBitNumber(kpPb, kFALSE);
162 fCollisionSystem.SetBitNumber(kPbPb, kTRUE);
164 void SetCentralityEstimator(const char *estimator) { fCentralityEstimator = estimator; }
165 void SetPbPbUserCentralityLimit(Bool_t isPbPbUserBinning = kFALSE){fPbPbUserCentralityBinning = isPbPbUserBinning; };
166 void SetPbPbUserCentralityArray(Int_t icentr, Float_t valuecentr) {fCentralityLimits[icentr] = valuecentr;};
167 void SetPPMultiBinAnalysis(Bool_t isppMultiBin) { fisppMultiBin = isppMultiBin; };
168 void SetNonHFEsystematics(Bool_t isSystematics) {fisNonHFEsystematics = isSystematics; };
169 void SetRejectKinkMother(Bool_t rejectKinkMother = kFALSE) { fRejectKinkMother = rejectKinkMother; };
170 void SetRejectMCFakeTracks(Bool_t rejectFakes = kTRUE) { fRejectMCFakeTracks = rejectFakes; };
171 void SetBackGroundFactorsFunction(const TF1 * const backGroundFactorsFunction, Int_t centralitybin=0){
172 fkBackGroundFactorArray[centralitybin]=backGroundFactorsFunction;
173 fBackGroundFactorApply=kTRUE;
174 SetBit(kBackgroundInitialized);
176 void SetElecBackGroundFactors(Int_t iPt, Int_t iType, Int_t iCent, Int_t iError, Double_t elecBackGroundFactor) {fElecBackgroundFactor[iError][iCent][iType][iPt] = elecBackGroundFactor; };
177 void SetBinLimits(Int_t iPt, Double_t momentum){fBinLimit[iPt] = momentum;};
178 void PrintStatus() const;
179 Bool_t ReadCentrality();
180 void RejectionPileUpVertexRangeEventCut();
181 void SelectSpecialTrigger(const Char_t *trgclust, Int_t runMin = 0, Int_t runMax = 999999999);
182 void SetDebugStreaming() {SetBit(kTreeStream);};
183 Bool_t CheckTRDTriggerESD(AliESDEvent *ev);
184 Bool_t CheckTRDTrigger(AliVEvent *ev);
185 void DrawTRDTrigger(AliESDEvent *ev);
186 void DrawTRDTriggerAnalysis(AliVEvent *ev);
190 kHasMCdata = BIT(19),
191 kAODanalysis = BIT(20),
192 kBackgroundInitialized = BIT(21),
193 kTreeStream = BIT(22)
196 Bool_t FillProductionVertex(const AliVParticle * const track) const;
197 void MakeParticleContainer();
198 void MakeEventContainer();
199 void InitHistoITScluster();
200 void InitContaminationQA();
201 const Char_t *GetSpecialTrigger(Int_t run);
205 Int_t GetITSMultiplicity(AliVEvent *ev);
206 Bool_t IsMCFakeTrack(const AliVTrack * const trk) const;
207 Bool_t PreSelectTrack(AliESDtrack *track) const;
208 Bool_t ProcessMCtrack(AliVParticle *track);
209 Bool_t ProcessCutStep(Int_t cutStep, AliVParticle *track);
210 AliAODMCHeader *fAODMCHeader; // ! MC info AOD
211 TClonesArray *fAODArrayMCInfo; // ! MC info particle AOD
212 ULong_t fQAlevel; // QA level
213 UShort_t fPlugins; // Enabled Plugins
214 TBits fCollisionSystem; // Collision System;
215 Bool_t fFillSignalOnly; // Fill container only with MC Signal Tracks
216 Bool_t fRejectMCFakeTracks; // Reject fake tracks in MC using the sign of the Label
217 Bool_t fFillNoCuts; // Fill container before any cut
218 Bool_t fBackGroundFactorApply; // Apply Background Function Subtraction, MF: To be removed when transition to OADB container is finished
219 Bool_t fRemovePileUp; // Remove Pile Up
220 Bool_t fIdentifiedAsPileUp; // Identified as pile-up
221 Bool_t fIdentifiedAsOutInz; // Out Of Range in z
222 Bool_t fPassTheEventCut; // Pass The Event Cut
223 Bool_t fRejectKinkMother; // Reject Kink Mother
224 Bool_t fisppMultiBin; // pp Multiplicity Bin analysis
225 Bool_t fPbPbUserCentralityBinning; // PbPb user centrality binning
226 Bool_t fRemoveFirstEvent; // Remove first event from chunk
227 Bool_t fisNonHFEsystematics; // Non-HFE background systematics analysis
228 AliOADBContainer *fSpecialTrigger; // Special trigger selection
229 Int_t fCentralityF; // Centrality bin
230 Float_t fCentralityPercent; // Centrality percentile
231 TString fCentralityEstimator; // Centrality Estimator
232 Float_t fContributors; // Contributors
233 Double_t fWeightBackGround; // weight background function
234 Double_t fVz; // z position of the primary vertex
235 const TF1 *fkBackGroundFactorArray[12]; // Array of BackGround factors for each centrality bin, bin0 = min bias
236 Double_t fElecBackgroundFactor[kBgLevels][kCentBins][kElecBgSpecies][kBgPtBins]; // Electron background factors
237 Double_t fBinLimit[kBgPtBins+1]; // Electron pt bin edges
238 Float_t fCentralityLimits[12]; // Limits for centrality bins
239 AliHFEcontainer *fContainer; //! The HFE container
240 AliHFEvarManager *fVarManager; // The var manager as the backbone of the analysis
241 AliHFEsignalCuts *fSignalCuts; //! MC true signal (electron coming from certain source)
242 AliCFManager *fCFM; //! Correction Framework Manager
243 AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
244 AliHFEpid *fPID; // PID
245 AliHFEpidQAmanager *fPIDqa; // PID QA
246 AliTRDTriggerAnalysis *fTRDTriggerAnalysismb; //! TRD Trigger Analysis for mb analysis
247 AliTRDTriggerAnalysis *fTRDTriggerAnalysistrg; //! TRD Trigger Analysis for trg sample analysis
248 AliHFEpid *fPIDpreselect; // PID oject for pre-selected tracks (without QA)
249 AliHFEcuts *fCuts; // Cut Collection
250 AliHFEcuts *fTaggedTrackCuts; // Cut Collection for V0 tagged tracks
251 Bool_t fCleanTaggedTrack; // Loose cleaning of the V0 tagged tracks electron
252 Bool_t fVariablesTRDTaggedTrack; // Take the variables at the TRD for the V0 tagged tracks electron
253 AliAnalysisUtils *fAnalysisUtils; // Utility object to remove the first event of a chunk from the analysis
254 AliESDtrackCuts *fCutspreselect; // Cut Collection for pre-selected tracks
255 AliHFEsecVtx *fSecVtx; //! Secondary Vertex Analysis
256 AliHFEelecbackground *fElecBackGround;//! Background analysis
257 AliHFEmcQA *fMCQA; //! MC QA
258 AliHFEtaggedTrackAnalysis *fTaggedTrackAnalysis; //!Analyse V0-tagged tracks
259 AliHFEextraCuts *fExtraCuts; //! temporary implementation for IP QA
260 AliHFENonPhotonicElectron *fBackgroundSubtraction; // Background subtraction
261 Bool_t fTRDTrigger; // Check if event is TRD triggered event
262 Int_t fWhichTRDTrigger; // Select type of TRD trigger
264 AliHFEV0taginfo *fV0Tagger; // Tags v0 tracks per Event
266 //-----------QA and output---------------
267 TList *fQA; //! QA histos for the cuts
268 TList *fOutput; //! Container for Task Output
269 TList *fHistMCQA; //! Output container for MC QA histograms
270 TList *fHistSECVTX; //! Output container for sec. vertexing results
271 TList *fHistELECBACKGROUND; //! Output container for electron background analysis
272 AliHFEcollection *fQACollection; //! Tasks own QA collection
273 //---------------------------------------
275 ClassDef(AliAnalysisTaskHFE, 2) // The electron Analysis Task