1 #ifndef ALIANALYSISTASKESDFILTER_H
2 #define ALIANALYSISTASKESDFILTER_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
11 #include "AliAnalysisTaskSE.h"
12 #include "AliESDtrack.h"
13 #include "AliAODTrack.h"
14 #include "AliAODPid.h"
15 #include "AliESDpid.h"
17 class AliAnalysisFilter;
20 class AliMCEventHandler;
23 class AliESDtrackCuts;
25 class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
28 AliAnalysisTaskESDfilter();
29 AliAnalysisTaskESDfilter(const char* name);
30 virtual ~AliAnalysisTaskESDfilter();
31 // Implementation of interface methods
32 virtual void UserCreateOutputObjects();
34 virtual void LocalInit() {Init();}
35 virtual Bool_t Notify();
36 virtual void UserExec(Option_t *option);
37 virtual void Terminate(Option_t *option);
39 virtual void ConvertESDtoAOD();
41 virtual void SetTrackFilter (AliAnalysisFilter* trackF) {fTrackFilter = trackF;}
42 virtual void SetTPCOnlyFilterMask (UInt_t filterMask) {SetTPCConstrainedFilterMask(filterMask);}
44 virtual void SetTPCConstrainedFilterMask (UInt_t filterMask) {fTPCConstrainedFilterMask = filterMask;}
45 virtual void SetHybridFilterMaskTPCConstrainedGlobal(UInt_t filterMask) {fHybridFilterMaskTPCCG = filterMask;}
46 virtual void SetWriteHybridTPCConstrainedOnly(bool b){fWriteHybridTPCCOnly = b;}
48 virtual void SetGlobalConstrainedFilterMask (UInt_t filterMask) {fGlobalConstrainedFilterMask = filterMask;}
49 virtual void SetHybridFilterMaskGlobalConstrainedGlobal(UInt_t filterMask) {fHybridFilterMaskGCG = filterMask;}
50 virtual void SetWriteHybridGlobalConstrainedOnly(bool b){fWriteHybridGCOnly = b;}
53 virtual void SetKinkFilter (AliAnalysisFilter* KinkF) {fKinkFilter = KinkF;}
54 virtual void SetV0Filter (AliAnalysisFilter* V0F) {fV0Filter = V0F;}
55 virtual void SetCascadeFilter (AliAnalysisFilter* CascadeF) {fCascadeFilter = CascadeF;}
56 virtual void SetPthreshold (Double_t p) {fHighPthreshold = p;}
57 virtual void SetPshape (TF1 *func) {fPtshape = func;}
58 virtual void SetEnableFillAOD (Bool_t b) {fEnableFillAOD = b;}
60 virtual void SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid);
61 void SetDetectorRawSignals(AliAODPid *aodpid, AliESDtrack *track);
63 void SetV0Cuts(const Double_t cuts[7]) {for (Int_t icut = 0; icut<7; icut++) fV0Cuts[icut] = cuts[icut];}
65 void SetCascadeCuts(const Double_t cuts[8]) {for (Int_t icut = 0; icut<8; icut++) fCascadeCuts[icut] = cuts[icut];}
67 void GetV0Cuts(Double_t cuts[7]) const {for (Int_t icut = 0; icut<7; icut++) cuts[icut] = fV0Cuts[icut];}
69 void GetCascadeCuts(Double_t cuts[8]) const {for (Int_t icut = 0; icut<8; icut++) cuts[icut] = fCascadeCuts[icut];}
72 Bool_t AddMetadataToUserInfo();
73 void PrintTask(Option_t *option="all", Int_t indent=0) const;
75 void DisableVZERO() { fIsVZEROEnabled = kFALSE; }
76 void DisableTZERO() { fIsTZEROEnabled = kFALSE; }
77 void DisableZDC() { fIsZDCEnabled = kFALSE; }
78 void DisableCascades() { fAreCascadesEnabled = kFALSE; }
79 void DisableV0s() { fAreV0sEnabled = kFALSE; }
80 void DisableKinks() { fAreKinksEnabled = kFALSE; }
81 void DisableTracks() { fAreTracksEnabled = kFALSE; }
82 void DisablePmdClusters() { fArePmdClustersEnabled = kFALSE; }
83 void DisableCaloClusters() { fAreCaloClustersEnabled = kFALSE; }
84 void DisableCells() { fAreEMCALCellsEnabled = fArePHOSCellsEnabled = kFALSE; }
85 void DisableCaloTrigger(TString calo = "PHOS") { if (calo.Contains("EMCAL")) fAreEMCALTriggerEnabled = kFALSE; else fArePHOSTriggerEnabled = kFALSE; }
86 void DisableTracklets() { fAreTrackletsEnabled = kFALSE; }
87 void DisableHMPID() { fIsHMPIDEnabled = kFALSE; }
89 void EnableV0CascadeVerticesReco() { fIsV0CascadeRecoEnabled = kTRUE; }
91 void SetPropagateTrackToEMCal(Bool_t propagate) {fDoPropagateTrackToEMCal = propagate;}
95 AliAnalysisTaskESDfilter(const AliAnalysisTaskESDfilter&);
96 AliAnalysisTaskESDfilter& operator=(const AliAnalysisTaskESDfilter&);
97 void PrintMCInfo(AliStack *pStack,Int_t label); // for debugging
98 Double_t Chi2perNDF(AliESDtrack* track);
100 AliAODHeader* ConvertHeader(const AliESDEvent& esd);
101 void ConvertCascades(const AliESDEvent& esd);
102 void ConvertV0s(const AliESDEvent& esd);
103 void ConvertKinks(const AliESDEvent& esd);
104 void ConvertPrimaryVertices(const AliESDEvent& esd);
105 void ConvertTracks(const AliESDEvent& esd);
106 void ConvertPmdClusters(const AliESDEvent& esd);
107 void ConvertCaloClusters(const AliESDEvent& esd);
108 void ConvertEMCALCells(const AliESDEvent& esd);
109 void ConvertPHOSCells(const AliESDEvent& esd);
110 void ConvertCaloTrigger(TString calo, const AliESDEvent& esd);
111 void ConvertTracklets(const AliESDEvent& esd);
112 void ConvertTPCOnlyTracks(const AliESDEvent& esd);
113 void ConvertGlobalConstrainedTracks(const AliESDEvent& esd);
114 void ConvertVZERO(const AliESDEvent& esd);
115 void ConvertTZERO(const AliESDEvent& esd);
116 void ConvertZDC(const AliESDEvent& esd);
117 Int_t ConvertHMPID(const AliESDEvent& esd);
118 void PropagateTrackToEMCal(AliESDtrack *esdTrack);
120 TClonesArray& Tracks();
122 TClonesArray& Vertices();
123 TClonesArray& Cascades();
126 AliAnalysisFilter* fTrackFilter; // Track Filter
127 AliAnalysisFilter* fKinkFilter; // Kink Filter
128 AliAnalysisFilter* fV0Filter; // V0 Filter
129 AliAnalysisFilter* fCascadeFilter; // Cascade Filter
131 Double_t fHighPthreshold; // Pt threshold for detector signal setting
132 TF1 * fPtshape; // Pt spectrum distribution
133 Bool_t fEnableFillAOD; // value that decides if this task activates AOD filling
134 Bool_t* fUsedTrack; //! indices of used tracks
135 Bool_t* fUsedKink; //! indices of used kinks
136 Bool_t* fUsedV0; //! indices of used V0s
137 TRefArray* fAODTrackRefs; // array of track references
138 TRefArray* fAODV0VtxRefs; // array of v0 vertices references
139 TRefArray* fAODV0Refs ; // array of v0s references
140 AliMCEventHandler* fMChandler; // pointer to MC handler (if any)
141 Int_t fNumberOfTracks; // current number of tracks
142 Int_t fNumberOfPositiveTracks; // current number of positive tracks
143 Int_t fNumberOfV0s; // current number of v0s
144 Int_t fNumberOfVertices; // current number of vertices
145 Int_t fNumberOfCascades; // current number of cascades
146 Int_t fNumberOfKinks; // current number of kinks
147 Bool_t fOldESDformat; // is the ESD in old format ?
148 AliAODVertex* fPrimaryVertex; // pointer to primary vertex of the event
149 UInt_t fTPCConstrainedFilterMask; // Filter Mask used to select and store refitted TPC only tracks
150 UInt_t fHybridFilterMaskTPCCG; // Filter Mask used to mark global tracks as hybrid
151 Bool_t fWriteHybridTPCCOnly;// write only the complent tracks not all global constrained
153 UInt_t fGlobalConstrainedFilterMask; // Filter Mask used to select and store refitted TPC only tracks
154 UInt_t fHybridFilterMaskGCG; // Filter Mask used to mark global tracks as hybrid
155 Bool_t fWriteHybridGCOnly;// write only the complent tracks not all global constrained
157 Bool_t fIsVZEROEnabled; // whether or not to fill the vzero branch (true by default)
158 Bool_t fIsTZEROEnabled; // whether or not to fill the tzero branch (true by default)
159 Bool_t fIsZDCEnabled; // whether or not to fill the zdc branch (true by default)
160 Bool_t fIsHMPIDEnabled; // whether or not to fill the hmpid branch (true by default)
161 Bool_t fIsV0CascadeRecoEnabled; // whether or not to reconstruct again V0s and cascades (false by default)
162 Bool_t fAreCascadesEnabled; // whether or not to fill the cascades branch (true by default)
163 Bool_t fAreV0sEnabled; // whether or not to fill the v0 branch (true by default)
164 Bool_t fAreKinksEnabled; // whether or not to fill the kinks (true by default)
165 Bool_t fAreTracksEnabled; // whether or not to fill the (central) tracks branch (true by default)
166 Bool_t fArePmdClustersEnabled; // whether or not to fill the pmd clusters (true by default)
167 Bool_t fAreCaloClustersEnabled; // whether or not to fill the calo clusters (true by default)
168 Bool_t fAreEMCALCellsEnabled; // whether or not to fill the emcal cells (true by default)
169 Bool_t fArePHOSCellsEnabled; // whether or not to fill the phos cells (true by default)
170 Bool_t fAreEMCALTriggerEnabled; // whether or not to fill the emcal trigger (true by default)
171 Bool_t fArePHOSTriggerEnabled; // whether or not to fill the phos trigger (true by default)
172 Bool_t fAreTrackletsEnabled; // whether or not to fill the tracklets (true by default)
173 AliESDpid* fESDpid; // esd pid
174 Bool_t fIsPidOwner; // whether we own fESDpid
175 AliESDtrackCuts* fTPCaloneTrackCuts; // TPC stand-alone track cuts
176 Double_t fV0Cuts[7]; // Array to store the values for the different reco selections V0 related
177 Double_t fCascadeCuts[8]; // Array to store the values for the different reco selections cascades related
178 Bool_t fDoPropagateTrackToEMCal; // whether or not to propagate the tracks to EMCal surface (430cm) -- true by default
181 ClassDef(AliAnalysisTaskESDfilter, 16); // Analysis task for standard ESD filtering