Merge branch 'master_patch'
[u/mrichter/AliRoot.git] / ANALYSIS / ESDfilter / AliAnalysisTaskESDfilter.h
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
17 class AliAnalysisFilter;
18 class AliStack;
19 class AliESDtrack;
20 class AliMCEventHandler;
21 class TRefArray;
22 class AliAODHeader;
23 class AliESDtrackCuts;
24
25 class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
26 {
27  public:
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];}
61   Bool_t AddMetadataToUserInfo();
62   void PrintTask(Option_t *option="all", Int_t indent=0) const;
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;}
77   void SetPropagateTrackToEMCal(Bool_t propagate) {fDoPropagateTrackToEMCal = propagate;}
78   void SetEMCalSurfaceDistance(Double_t d)        {fEMCalSurfaceDistance = d;}
79   void SetRefitVertexTracks(Int_t algo=6, Double_t* cuts=0);
80   
81 private:
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);
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);
97   void ConvertCaloTrigger(TString calo, const AliESDEvent& esd);
98   void ConvertTracklets(const AliESDEvent& esd);
99   void ConvertTPCOnlyTracks(const AliESDEvent& esd);
100   void ConvertGlobalConstrainedTracks(const AliESDEvent& esd);
101   void ConvertVZERO(const AliESDEvent& esd);
102   void ConvertTZERO(const AliESDEvent& esd);
103   void ConvertZDC(const AliESDEvent& esd);
104   Int_t ConvertHMPID(const AliESDEvent& esd);
105   void ConvertTRD(const AliESDEvent& esd);
106   void CopyCaloProps(AliESDtrack *esdt, AliAODTrack *aodt);
107
108   TClonesArray& Tracks();
109   TClonesArray& V0s();
110   TClonesArray& Vertices();
111   TClonesArray& Cascades();
112   
113   // Filtering
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
170   
171   ClassDef(AliAnalysisTaskESDfilter, 19); // Analysis task for standard ESD filtering
172 };
173
174 #endif