]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/ESDfilter/AliAnalysisTaskESDfilter.h
Added possibilit to revertex before refiltering
[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
39     virtual void ConvertESDtoAOD();
40     // Setters
41     virtual void SetTrackFilter   (AliAnalysisFilter*   trackF) {fTrackFilter    =   trackF;}
42     virtual void SetTPCOnlyFilterMask (UInt_t filterMask)       {SetTPCConstrainedFilterMask(filterMask);}
43
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;}
47
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;}
51
52
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;}
59
60     virtual void SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid);
61     void SetDetectorRawSignals(AliAODPid *aodpid, AliESDtrack *track);
62
63     void SetV0Cuts(const Double_t cuts[7]) {for (Int_t icut = 0; icut<7; icut++) fV0Cuts[icut] = cuts[icut];}
64
65     void SetCascadeCuts(const Double_t cuts[8]) {for (Int_t icut = 0; icut<8; icut++) fCascadeCuts[icut] = cuts[icut];} 
66
67     void GetV0Cuts(Double_t cuts[7]) const {for (Int_t icut = 0; icut<7; icut++) cuts[icut] = fV0Cuts[icut];}
68
69     void GetCascadeCuts(Double_t cuts[8]) const {for (Int_t icut = 0; icut<8; icut++) cuts[icut] = fCascadeCuts[icut];}
70
71
72   Bool_t AddMetadataToUserInfo();
73   void PrintTask(Option_t *option="all", Int_t indent=0) const;
74   
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; } 
88
89   void EnableV0CascadeVerticesReco() { fIsV0CascadeRecoEnabled = kTRUE; }
90
91   void SetPropagateTrackToEMCal(Bool_t propagate) {fDoPropagateTrackToEMCal = propagate;}
92   void SetEMCalSurfaceDistance(Double_t d) {fEMCalSurfaceDistance = d;}
93
94   void SetRefitVertexTracks(Int_t algo=6, Double_t* cuts=0);
95   
96 private:
97     AliAnalysisTaskESDfilter(const AliAnalysisTaskESDfilter&);
98     AliAnalysisTaskESDfilter& operator=(const AliAnalysisTaskESDfilter&);
99     void PrintMCInfo(AliStack *pStack,Int_t label); // for debugging
100     Double_t Chi2perNDF(AliESDtrack* track);
101     
102   AliAODHeader* ConvertHeader(const AliESDEvent& esd);
103   void ConvertCascades(const AliESDEvent& esd);
104   void ConvertV0s(const AliESDEvent& esd);
105   void ConvertKinks(const AliESDEvent& esd);
106   void ConvertPrimaryVertices(const AliESDEvent& esd);
107   void ConvertTracks(const AliESDEvent& esd);
108   void ConvertPmdClusters(const AliESDEvent& esd);
109   void ConvertCaloClusters(const AliESDEvent& esd);
110   void ConvertEMCALCells(const AliESDEvent& esd);
111   void ConvertPHOSCells(const AliESDEvent& esd);
112   void ConvertCaloTrigger(TString calo, const AliESDEvent& esd);
113   void ConvertTracklets(const AliESDEvent& esd);
114   void ConvertTPCOnlyTracks(const AliESDEvent& esd);
115   void ConvertGlobalConstrainedTracks(const AliESDEvent& esd);
116   void ConvertVZERO(const AliESDEvent& esd);
117   void ConvertTZERO(const AliESDEvent& esd);
118   void ConvertZDC(const AliESDEvent& esd);
119   Int_t ConvertHMPID(const AliESDEvent& esd);
120   void ConvertTRD(const AliESDEvent& esd);
121   void CopyCaloProps(AliESDtrack *esdt, AliAODTrack *aodt);
122
123   TClonesArray& Tracks();
124   TClonesArray& V0s();
125   TClonesArray& Vertices();
126   TClonesArray& Cascades();
127   
128   // Filtering
129   AliAnalysisFilter* fTrackFilter;      //  Track   Filter
130   AliAnalysisFilter* fKinkFilter;       //  Kink    Filter
131   AliAnalysisFilter* fV0Filter;         //  V0      Filter
132   AliAnalysisFilter* fCascadeFilter;    //  Cascade Filter
133   // PID
134   Double_t     fHighPthreshold;    //  Pt threshold for detector signal setting
135   TF1 *        fPtshape;           //  Pt spectrum distribution
136   Bool_t       fEnableFillAOD;     //  value that decides if this task activates AOD filling
137   Bool_t* fUsedTrack; //! indices of used tracks
138   UInt_t* fUsedTrackCopy; //! filterbits of tracks for which a copy was added to the AODs
139   Bool_t* fUsedKink; //! indices of used kinks
140   Bool_t* fUsedV0; //! indices of used V0s
141   TRefArray* fAODTrackRefs; // array of track references
142   TRefArray* fAODV0VtxRefs; // array of v0 vertices references
143   TRefArray* fAODV0Refs ; // array of v0s references
144   AliMCEventHandler* fMChandler; // pointer to MC handler (if any)
145   Int_t fNumberOfTracks; // current number of tracks
146   Int_t fNumberOfPositiveTracks; // current number of positive tracks
147   Int_t fNumberOfV0s; // current number of v0s
148   Int_t fNumberOfVertices; // current number of vertices
149   Int_t fNumberOfCascades; // current number of cascades
150   Int_t fNumberOfKinks; // current number of kinks
151   Bool_t fOldESDformat; // is the ESD in old format ?
152   AliAODVertex* fPrimaryVertex; // pointer to primary vertex of the event
153   UInt_t fTPCConstrainedFilterMask;      //  Filter Mask used to select and store refitted TPC only tracks
154   UInt_t fHybridFilterMaskTPCCG; //  Filter Mask used to mark global tracks as hybrid
155   Bool_t fWriteHybridTPCCOnly;// write only the complent tracks not all global constrained
156
157   UInt_t fGlobalConstrainedFilterMask; //  Filter Mask used to select and store refitted TPC only tracks
158   UInt_t fHybridFilterMaskGCG;  //  Filter Mask used to mark global tracks as hybrid
159   Bool_t fWriteHybridGCOnly;// write only the complent tracks not all global constrained
160
161   Bool_t fIsVZEROEnabled; // whether or not to fill the vzero branch (true by default)
162   Bool_t fIsTZEROEnabled; // whether or not to fill the tzero branch (true by default)
163   Bool_t fIsZDCEnabled; // whether or not to fill the zdc branch (true by default)
164   Bool_t fIsHMPIDEnabled; // whether or not to fill the hmpid branch (true by default) 
165   Bool_t fIsV0CascadeRecoEnabled; // whether or not to reconstruct again V0s and cascades (false by default)
166   Bool_t fAreCascadesEnabled; // whether or not to fill the cascades branch (true by default)
167   Bool_t fAreV0sEnabled; // whether or not to fill the v0 branch (true by default)
168   Bool_t fAreKinksEnabled; // whether or not to fill the kinks (true by default)
169   Bool_t fAreTracksEnabled; // whether or not to fill the (central) tracks branch (true by default)
170   Bool_t fArePmdClustersEnabled; // whether or not to fill the pmd clusters (true by default)
171   Bool_t fAreCaloClustersEnabled; // whether or not to fill the calo clusters (true by default)
172   Bool_t fAreEMCALCellsEnabled; // whether or not to fill the emcal cells (true by default)
173   Bool_t fArePHOSCellsEnabled; // whether or not to fill the phos cells (true by default)
174   Bool_t fAreEMCALTriggerEnabled; // whether or not to fill the emcal trigger (true by default)
175   Bool_t fArePHOSTriggerEnabled; // whether or not to fill the phos trigger (true by default)
176   Bool_t fAreTrackletsEnabled; // whether or not to fill the tracklets (true by default)
177   Bool_t fIsTRDEnabled; // whether or not to fill on-line tracklets and tracks from TRD (true by default)
178   AliESDpid* fESDpid; // esd pid
179   Bool_t fIsPidOwner; // whether we own fESDpid
180   AliESDtrackCuts* fTPCaloneTrackCuts; // TPC stand-alone track cuts
181   Double_t        fV0Cuts[7];       // Array to store the values for the different reco selections V0 related
182   Double_t        fCascadeCuts[8];  // Array to store the values for the different reco selections cascades related
183   Bool_t fDoPropagateTrackToEMCal;  // whether or not to propagate the tracks to the EMCal surface -- true by default
184   Double_t fEMCalSurfaceDistance;   // EMCal surface distance from the center of the detector (r = 440 by default)
185   //
186   Int_t     fRefitVertexTracks;      // request to refit the vertex if >=0 (algoID if cuts not supplied, otherwise ncuts)
187   Double_t* fRefitVertexTracksCuts;  // optional cuts for vertex refit
188   
189   ClassDef(AliAnalysisTaskESDfilter, 18); // Analysis task for standard ESD filtering
190 };
191
192 #endif