Merge branch 'master_patch'
[u/mrichter/AliRoot.git] / ANALYSIS / ESDfilter / AliAnalysisTaskESDfilter.h
CommitLineData
c7ef1c47 1#ifndef ALIANALYSISTASKESDFILTER_H
2#define ALIANALYSISTASKESDFILTER_H
3
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7/* $Id$ */
8
9#include <TList.h>
10#include <TF1.h>
11#include "AliAnalysisTaskSE.h"
12#include "AliESDtrack.h"
13#include "AliAODTrack.h"
14#include "AliAODPid.h"
15#include "AliESDpid.h"
16
17class AliAnalysisFilter;
18class AliStack;
19class AliESDtrack;
20class AliMCEventHandler;
21class TRefArray;
22class AliAODHeader;
2f5ee3b7 23class AliESDtrackCuts;
c7ef1c47 24
25class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
26{
27 public:
5059e451 28 AliAnalysisTaskESDfilter();
29 AliAnalysisTaskESDfilter(const char* name);
30 virtual ~AliAnalysisTaskESDfilter();
31 // Implementation of interface methods
32 virtual void UserCreateOutputObjects();
33 virtual void Init();
34 virtual void LocalInit() {Init();}
35 virtual Bool_t Notify();
36 virtual void UserExec(Option_t *option);
37 virtual void Terminate(Option_t *option);
38 virtual void ConvertESDtoAOD();
39
40 // Setters
41 virtual void SetTrackFilter (AliAnalysisFilter* trackF) {fTrackFilter = trackF;}
42 virtual void SetTPCOnlyFilterMask (UInt_t filterMask) {SetTPCConstrainedFilterMask(filterMask);}
43 virtual void SetTPCConstrainedFilterMask (UInt_t filterMask) {fTPCConstrainedFilterMask = filterMask;}
44 virtual void SetHybridFilterMaskTPCConstrainedGlobal(UInt_t filterMask) {fHybridFilterMaskTPCCG = filterMask;}
45 virtual void SetWriteHybridTPCConstrainedOnly(bool b) {fWriteHybridTPCCOnly = b;}
46 virtual void SetGlobalConstrainedFilterMask (UInt_t filterMask) {fGlobalConstrainedFilterMask = filterMask;}
47 virtual void SetHybridFilterMaskGlobalConstrainedGlobal(UInt_t filterMask) {fHybridFilterMaskGCG = filterMask;}
48 virtual void SetWriteHybridGlobalConstrainedOnly(bool b) {fWriteHybridGCOnly = b;}
49 virtual void SetKinkFilter (AliAnalysisFilter* KinkF) {fKinkFilter = KinkF;}
50 virtual void SetV0Filter (AliAnalysisFilter* V0F) {fV0Filter = V0F;}
51 virtual void SetCascadeFilter (AliAnalysisFilter* CascadeF) {fCascadeFilter = CascadeF;}
52 virtual void SetPthreshold (Double_t p) {fHighPthreshold = p;}
53 virtual void SetPshape (TF1 *func) {fPtshape = func;}
54 virtual void SetEnableFillAOD (Bool_t b) {fEnableFillAOD = b;}
55 virtual void SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid);
56 void SetDetectorRawSignals(AliAODPid *aodpid, AliESDtrack *track);
57 void SetV0Cuts(const Double_t cuts[7]) {for (Int_t icut = 0; icut<7; icut++) fV0Cuts[icut] = cuts[icut];}
58 void SetCascadeCuts(const Double_t cuts[8]) {for (Int_t icut = 0; icut<8; icut++) fCascadeCuts[icut] = cuts[icut];}
59 void GetV0Cuts(Double_t cuts[7]) const {for (Int_t icut = 0; icut<7; icut++) cuts[icut] = fV0Cuts[icut];}
60 void GetCascadeCuts(Double_t cuts[8]) const {for (Int_t icut = 0; icut<8; icut++) cuts[icut] = fCascadeCuts[icut];}
dc893135 61 Bool_t AddMetadataToUserInfo();
c7ef1c47 62 void PrintTask(Option_t *option="all", Int_t indent=0) const;
5059e451 63 void DisableVZERO() {fIsVZEROEnabled = kFALSE;}
64 void DisableTZERO() {fIsTZEROEnabled = kFALSE;}
65 void DisableZDC() {fIsZDCEnabled = kFALSE;}
66 void DisableCascades() {fAreCascadesEnabled = kFALSE;}
67 void DisableV0s() {fAreV0sEnabled = kFALSE;}
68 void DisableKinks() {fAreKinksEnabled = kFALSE;}
69 void DisableTracks() {fAreTracksEnabled = kFALSE;}
70 void DisablePmdClusters() {fArePmdClustersEnabled = kFALSE;}
71 void DisableCaloClusters() {fAreCaloClustersEnabled = kFALSE;}
72 void DisableCells() {fAreEMCALCellsEnabled = fArePHOSCellsEnabled = kFALSE; }
73 void DisableCaloTrigger(TString calo = "PHOS") {if (calo.Contains("EMCAL")) fAreEMCALTriggerEnabled = kFALSE; else fArePHOSTriggerEnabled = kFALSE;}
74 void DisableTracklets() {fAreTrackletsEnabled = kFALSE;}
75 void DisableHMPID() {fIsHMPIDEnabled = kFALSE;}
76 void EnableV0CascadeVerticesReco() {fIsV0CascadeRecoEnabled = kTRUE;}
ed15417e 77 void SetPropagateTrackToEMCal(Bool_t propagate) {fDoPropagateTrackToEMCal = propagate;}
5059e451 78 void SetEMCalSurfaceDistance(Double_t d) {fEMCalSurfaceDistance = d;}
db47bd9e 79 void SetRefitVertexTracks(Int_t algo=6, Double_t* cuts=0);
c7ef1c47 80
81private:
5059e451 82 AliAnalysisTaskESDfilter(const AliAnalysisTaskESDfilter&);
83 AliAnalysisTaskESDfilter& operator=(const AliAnalysisTaskESDfilter&);
84 void PrintMCInfo(AliStack *pStack,Int_t label); // for debugging
85 Double_t Chi2perNDF(AliESDtrack* track);
c7ef1c47 86
87 AliAODHeader* ConvertHeader(const AliESDEvent& esd);
88 void ConvertCascades(const AliESDEvent& esd);
89 void ConvertV0s(const AliESDEvent& esd);
90 void ConvertKinks(const AliESDEvent& esd);
91 void ConvertPrimaryVertices(const AliESDEvent& esd);
92 void ConvertTracks(const AliESDEvent& esd);
93 void ConvertPmdClusters(const AliESDEvent& esd);
94 void ConvertCaloClusters(const AliESDEvent& esd);
95 void ConvertEMCALCells(const AliESDEvent& esd);
96 void ConvertPHOSCells(const AliESDEvent& esd);
720f7306 97 void ConvertCaloTrigger(TString calo, const AliESDEvent& esd);
c7ef1c47 98 void ConvertTracklets(const AliESDEvent& esd);
99 void ConvertTPCOnlyTracks(const AliESDEvent& esd);
67abcce9 100 void ConvertGlobalConstrainedTracks(const AliESDEvent& esd);
c7ef1c47 101 void ConvertVZERO(const AliESDEvent& esd);
a1f96974 102 void ConvertTZERO(const AliESDEvent& esd);
8c87d22c 103 void ConvertZDC(const AliESDEvent& esd);
08b38f3f 104 Int_t ConvertHMPID(const AliESDEvent& esd);
b2b65de9 105 void ConvertTRD(const AliESDEvent& esd);
63825dc4 106 void CopyCaloProps(AliESDtrack *esdt, AliAODTrack *aodt);
37b92631 107
c7ef1c47 108 TClonesArray& Tracks();
109 TClonesArray& V0s();
110 TClonesArray& Vertices();
111 TClonesArray& Cascades();
112
113 // Filtering
5059e451 114 AliAnalysisFilter* fTrackFilter; // Track Filter
115 AliAnalysisFilter* fKinkFilter; // Kink Filter
116 AliAnalysisFilter* fV0Filter; // V0 Filter
117 AliAnalysisFilter* fCascadeFilter; // Cascade Filter
118 Double_t fHighPthreshold; // Pt threshold for detector signal setting
119 TF1 * fPtshape; // Pt spectrum distribution
120 Bool_t fEnableFillAOD; // value that decides if this task activates AOD filling
121 Bool_t* fUsedTrack; //! indices of used tracks
122 UInt_t* fUsedTrackCopy; //! filterbits of tracks for which a copy was added to the AODs
123 Bool_t* fUsedKink; //! indices of used kinks
124 Bool_t* fUsedV0; //! indices of used V0s
125 TRefArray* fAODTrackRefs; // array of track references
126 TRefArray* fAODV0VtxRefs; // array of v0 vertices references
127 TRefArray* fAODV0Refs; // array of v0s references
128 AliMCEventHandler* fMChandler; // pointer to MC handler (if any)
129 Int_t fNumberOfTracks; // current number of tracks
130 Int_t fNumberOfPositiveTracks; // current number of positive tracks
131 Int_t fNumberOfV0s; // current number of v0s
132 Int_t fNumberOfVertices; // current number of vertices
133 Int_t fNumberOfCascades; // current number of cascades
134 Int_t fNumberOfKinks; // current number of kinks
135 Bool_t fOldESDformat; // is the ESD in old format ?
136 AliAODVertex* fPrimaryVertex; // pointer to primary vertex of the event
137 UInt_t fTPCConstrainedFilterMask; // Filter Mask used to select and store refitted TPC only tracks
138 UInt_t fHybridFilterMaskTPCCG; // Filter Mask used to mark global tracks as hybrid
139 Bool_t fWriteHybridTPCCOnly; // write only the complent tracks not all global constrained
140 UInt_t fGlobalConstrainedFilterMask; // Filter Mask used to select and store refitted TPC only tracks
141 UInt_t fHybridFilterMaskGCG; // Filter Mask used to mark global tracks as hybrid
142 Bool_t fWriteHybridGCOnly; // write only the complent tracks not all global constrained
143 Bool_t fIsVZEROEnabled; // whether or not to fill the vzero branch (true by default)
144 Bool_t fIsTZEROEnabled; // whether or not to fill the tzero branch (true by default)
145 Bool_t fIsZDCEnabled; // whether or not to fill the zdc branch (true by default)
146 Bool_t fIsHMPIDEnabled; // whether or not to fill the hmpid branch (true by default)
147 Bool_t fIsV0CascadeRecoEnabled; // whether or not to reconstruct again V0s and cascades (false by default)
148 Bool_t fAreCascadesEnabled; // whether or not to fill the cascades branch (true by default)
149 Bool_t fAreV0sEnabled; // whether or not to fill the v0 branch (true by default)
150 Bool_t fAreKinksEnabled; // whether or not to fill the kinks (true by default)
151 Bool_t fAreTracksEnabled; // whether or not to fill the (central) tracks branch (true by default)
152 Bool_t fArePmdClustersEnabled; // whether or not to fill the pmd clusters (true by default)
153 Bool_t fAreCaloClustersEnabled; // whether or not to fill the calo clusters (true by default)
154 Bool_t fAreEMCALCellsEnabled; // whether or not to fill the emcal cells (true by default)
155 Bool_t fArePHOSCellsEnabled; // whether or not to fill the phos cells (true by default)
156 Bool_t fAreEMCALTriggerEnabled; // whether or not to fill the emcal trigger (true by default)
157 Bool_t fArePHOSTriggerEnabled; // whether or not to fill the phos trigger (true by default)
158 Bool_t fAreTrackletsEnabled; // whether or not to fill the tracklets (true by default)
159 Bool_t fIsTRDEnabled; // whether or not to fill on-line tracklets and tracks from TRD (true by default)
160 AliESDpid* fESDpid; // esd pid
161 Bool_t fIsPidOwner; // whether we own fESDpid
162 AliESDtrackCuts* fTPCaloneTrackCuts; // TPC stand-alone track cuts
163 Double_t fV0Cuts[7]; // Array to store the values for the different reco selections V0 related
164 Double_t fCascadeCuts[8]; // Array to store the values for the different reco selections cascades related
165 Bool_t fDoPropagateTrackToEMCal; // whether or not to propagate the tracks to the EMCal surface -- true by default
166 Double_t fEMCalSurfaceDistance; // EMCal surface distance from the center of the detector (r = 440 by default)
167 Int_t fRefitVertexTracks; // request to refit the vertex if >=0 (algoID if cuts not supplied, otherwise ncuts)
168 Int_t fRefitVertexTracksNCuts; // number of cut parameters
169 Double_t* fRefitVertexTracksCuts; //[fRefitVertexTracksNCuts] optional cuts for vertex refit
b8d29a28 170
ca77219c 171 ClassDef(AliAnalysisTaskESDfilter, 19); // Analysis task for standard ESD filtering
c7ef1c47 172};
b8d29a28 173
c7ef1c47 174#endif