ROOT logo
#ifndef ALIANALYSISTASKESDFILTER_H
#define ALIANALYSISTASKESDFILTER_H
 
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

#include <TList.h> 
#include <TF1.h> 
#include "AliAnalysisTaskSE.h"
#include "AliESDtrack.h"
#include "AliAODTrack.h"
#include "AliAODPid.h"
#include "AliESDpid.h"

class AliAnalysisFilter;
class AliStack;
class AliESDtrack;
class AliMCEventHandler;
class TRefArray;
class AliAODHeader;
class AliESDtrackCuts;

class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
{
 public:
  AliAnalysisTaskESDfilter();
  AliAnalysisTaskESDfilter(const char* name);
  virtual ~AliAnalysisTaskESDfilter();
  // Implementation of interface methods
  virtual void   UserCreateOutputObjects();
  virtual void   Init();
  virtual void   LocalInit() {Init();}
  virtual Bool_t Notify();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *option);
  virtual void   ConvertESDtoAOD();

  // Setters
  virtual void SetTrackFilter   (AliAnalysisFilter*   trackF)                {fTrackFilter                 = trackF;}
  virtual void SetTPCOnlyFilterMask (UInt_t filterMask)                      {SetTPCConstrainedFilterMask(filterMask);}
  virtual void SetTPCConstrainedFilterMask (UInt_t filterMask)               {fTPCConstrainedFilterMask    = filterMask;}
  virtual void SetHybridFilterMaskTPCConstrainedGlobal(UInt_t filterMask)    {fHybridFilterMaskTPCCG       = filterMask;}
  virtual void SetWriteHybridTPCConstrainedOnly(bool b)                      {fWriteHybridTPCCOnly         = b;}
  virtual void SetGlobalConstrainedFilterMask (UInt_t filterMask)            {fGlobalConstrainedFilterMask = filterMask;}
  virtual void SetHybridFilterMaskGlobalConstrainedGlobal(UInt_t filterMask) {fHybridFilterMaskGCG         = filterMask;}
  virtual void SetWriteHybridGlobalConstrainedOnly(bool b)    {fWriteHybridGCOnly = b;}
  virtual void SetKinkFilter    (AliAnalysisFilter*    KinkF) {fKinkFilter        = KinkF;}
  virtual void SetV0Filter      (AliAnalysisFilter*      V0F) {fV0Filter          = V0F;}
  virtual void SetCascadeFilter (AliAnalysisFilter* CascadeF) {fCascadeFilter     = CascadeF;}
  virtual void SetPthreshold    (Double_t p)                  {fHighPthreshold    = p;}
  virtual void SetPshape        (TF1 *func)                   {fPtshape           = func;}
  virtual void SetEnableFillAOD (Bool_t b)                    {fEnableFillAOD     = b;}
  virtual void SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid);
  void SetDetectorRawSignals(AliAODPid *aodpid, AliESDtrack *track);
  void SetV0Cuts(const Double_t cuts[7]) {for (Int_t icut = 0; icut<7; icut++) fV0Cuts[icut] = cuts[icut];}
  void SetCascadeCuts(const Double_t cuts[8]) {for (Int_t icut = 0; icut<8; icut++) fCascadeCuts[icut] = cuts[icut];} 
  void GetV0Cuts(Double_t cuts[7]) const {for (Int_t icut = 0; icut<7; icut++) cuts[icut] = fV0Cuts[icut];}
  void GetCascadeCuts(Double_t cuts[8]) const {for (Int_t icut = 0; icut<8; icut++) cuts[icut] = fCascadeCuts[icut];}
  Bool_t AddMetadataToUserInfo();
  void PrintTask(Option_t *option="all", Int_t indent=0) const;
  void DisableVZERO()        {fIsVZEROEnabled = kFALSE;}
  void DisableTZERO()        {fIsTZEROEnabled = kFALSE;}
  void DisableZDC()          {fIsZDCEnabled   = kFALSE;}
  void DisableCascades()     {fAreCascadesEnabled = kFALSE;}
  void DisableV0s()          {fAreV0sEnabled = kFALSE;}
  void DisableKinks()        {fAreKinksEnabled = kFALSE;}
  void DisableTracks()       {fAreTracksEnabled = kFALSE;}
  void DisablePmdClusters()  {fArePmdClustersEnabled = kFALSE;}
  void DisableCaloClusters() {fAreCaloClustersEnabled = kFALSE;}
  void DisableCells()        {fAreEMCALCellsEnabled = fArePHOSCellsEnabled = kFALSE; }
  void DisableCaloTrigger(TString calo = "PHOS") {if (calo.Contains("EMCAL")) fAreEMCALTriggerEnabled = kFALSE; else fArePHOSTriggerEnabled = kFALSE;}
  void DisableTracklets()    {fAreTrackletsEnabled = kFALSE;}
  void DisableHMPID()        {fIsHMPIDEnabled = kFALSE;} 
  void EnableV0CascadeVerticesReco() {fIsV0CascadeRecoEnabled = kTRUE;}
  void SetPropagateTrackToEMCal(Bool_t propagate) {fDoPropagateTrackToEMCal = propagate;}
  void SetEMCalSurfaceDistance(Double_t d)        {fEMCalSurfaceDistance = d;}
  void SetRefitVertexTracks(Int_t algo=6, Double_t* cuts=0);
  
private:
  AliAnalysisTaskESDfilter(const AliAnalysisTaskESDfilter&);
  AliAnalysisTaskESDfilter& operator=(const AliAnalysisTaskESDfilter&);
  void PrintMCInfo(AliStack *pStack,Int_t label); // for debugging
  Double_t Chi2perNDF(AliESDtrack* track);
    
  AliAODHeader* ConvertHeader(const AliESDEvent& esd);
  void ConvertCascades(const AliESDEvent& esd);
  void ConvertV0s(const AliESDEvent& esd);
  void ConvertKinks(const AliESDEvent& esd);
  void ConvertPrimaryVertices(const AliESDEvent& esd);
  void ConvertTracks(const AliESDEvent& esd);
  void ConvertPmdClusters(const AliESDEvent& esd);
  void ConvertCaloClusters(const AliESDEvent& esd);
  void ConvertEMCALCells(const AliESDEvent& esd);
  void ConvertPHOSCells(const AliESDEvent& esd);
  void ConvertCaloTrigger(TString calo, const AliESDEvent& esd);
  void ConvertTracklets(const AliESDEvent& esd);
  void ConvertTPCOnlyTracks(const AliESDEvent& esd);
  void ConvertGlobalConstrainedTracks(const AliESDEvent& esd);
  void ConvertVZERO(const AliESDEvent& esd);
  void ConvertTZERO(const AliESDEvent& esd);
  void ConvertZDC(const AliESDEvent& esd);
  Int_t ConvertHMPID(const AliESDEvent& esd);
  void ConvertTRD(const AliESDEvent& esd);
  void CopyCaloProps(AliESDtrack *esdt, AliAODTrack *aodt);

  TClonesArray& Tracks();
  TClonesArray& V0s();
  TClonesArray& Vertices();
  TClonesArray& Cascades();
  
  // Filtering
  AliAnalysisFilter* fTrackFilter;                 // Track   Filter
  AliAnalysisFilter* fKinkFilter;                  // Kink    Filter
  AliAnalysisFilter* fV0Filter;                    // V0      Filter
  AliAnalysisFilter* fCascadeFilter;               // Cascade Filter
  Double_t           fHighPthreshold;              // Pt threshold for detector signal setting
  TF1 *              fPtshape;                     // Pt spectrum distribution
  Bool_t             fEnableFillAOD;               // value that decides if this task activates AOD filling
  Bool_t*            fUsedTrack;                   //! indices of used tracks
  UInt_t*            fUsedTrackCopy;               //! filterbits of tracks for which a copy was added to the AODs
  Bool_t*            fUsedKink;                    //! indices of used kinks
  Bool_t*            fUsedV0;                      //! indices of used V0s
  TRefArray*         fAODTrackRefs;                // array of track references
  TRefArray*         fAODV0VtxRefs;                // array of v0 vertices references
  TRefArray*         fAODV0Refs;                   // array of v0s references
  AliMCEventHandler* fMChandler;                   // pointer to MC handler (if any)
  Int_t              fNumberOfTracks;              // current number of tracks
  Int_t              fNumberOfPositiveTracks;      // current number of positive tracks
  Int_t              fNumberOfV0s;                 // current number of v0s
  Int_t              fNumberOfVertices;            // current number of vertices
  Int_t              fNumberOfCascades;            // current number of cascades
  Int_t              fNumberOfKinks;               // current number of kinks
  Bool_t             fOldESDformat;                // is the ESD in old format ?
  AliAODVertex*      fPrimaryVertex;               // pointer to primary vertex of the event
  UInt_t             fTPCConstrainedFilterMask;    // Filter Mask used to select and store refitted TPC only tracks
  UInt_t             fHybridFilterMaskTPCCG;       // Filter Mask used to mark global tracks as hybrid
  Bool_t             fWriteHybridTPCCOnly;         // write only the complent tracks not all global constrained
  UInt_t             fGlobalConstrainedFilterMask; // Filter Mask used to select and store refitted TPC only tracks
  UInt_t             fHybridFilterMaskGCG;         // Filter Mask used to mark global tracks as hybrid
  Bool_t             fWriteHybridGCOnly;           // write only the complent tracks not all global constrained
  Bool_t             fIsVZEROEnabled;              // whether or not to fill the vzero branch (true by default)
  Bool_t             fIsTZEROEnabled;              // whether or not to fill the tzero branch (true by default)
  Bool_t             fIsZDCEnabled;                // whether or not to fill the zdc branch (true by default)
  Bool_t             fIsHMPIDEnabled;              // whether or not to fill the hmpid branch (true by default) 
  Bool_t             fIsV0CascadeRecoEnabled;      // whether or not to reconstruct again V0s and cascades (false by default)
  Bool_t             fAreCascadesEnabled;          // whether or not to fill the cascades branch (true by default)
  Bool_t             fAreV0sEnabled;               // whether or not to fill the v0 branch (true by default)
  Bool_t             fAreKinksEnabled;             // whether or not to fill the kinks (true by default)
  Bool_t             fAreTracksEnabled;            // whether or not to fill the (central) tracks branch (true by default)
  Bool_t             fArePmdClustersEnabled;       // whether or not to fill the pmd clusters (true by default)
  Bool_t             fAreCaloClustersEnabled;      // whether or not to fill the calo clusters (true by default)
  Bool_t             fAreEMCALCellsEnabled;        // whether or not to fill the emcal cells (true by default)
  Bool_t             fArePHOSCellsEnabled;         // whether or not to fill the phos cells (true by default)
  Bool_t             fAreEMCALTriggerEnabled;      // whether or not to fill the emcal trigger (true by default)
  Bool_t             fArePHOSTriggerEnabled;       // whether or not to fill the phos trigger (true by default)
  Bool_t             fAreTrackletsEnabled;         // whether or not to fill the tracklets (true by default)
  Bool_t             fIsTRDEnabled;                // whether or not to fill on-line tracklets and tracks from TRD (true by default)
  AliESDpid*         fESDpid;                      // esd pid
  Bool_t             fIsPidOwner;                  // whether we own fESDpid
  AliESDtrackCuts*   fTPCaloneTrackCuts;           // TPC stand-alone track cuts
  Double_t           fV0Cuts[7];                   // Array to store the values for the different reco selections V0 related
  Double_t           fCascadeCuts[8];              // Array to store the values for the different reco selections cascades related
  Bool_t             fDoPropagateTrackToEMCal;     // whether or not to propagate the tracks to the EMCal surface -- true by default
  Double_t           fEMCalSurfaceDistance;        // EMCal surface distance from the center of the detector (r = 440 by default)
  Int_t              fRefitVertexTracks;           // request to refit the vertex if >=0 (algoID if cuts not supplied, otherwise ncuts)
  Int_t              fRefitVertexTracksNCuts;      // number of cut parameters
  Double_t*          fRefitVertexTracksCuts;       //[fRefitVertexTracksNCuts] optional cuts for vertex refit
  
  ClassDef(AliAnalysisTaskESDfilter, 19); // Analysis task for standard ESD filtering
};

#endif
 AliAnalysisTaskESDfilter.h:1
 AliAnalysisTaskESDfilter.h:2
 AliAnalysisTaskESDfilter.h:3
 AliAnalysisTaskESDfilter.h:4
 AliAnalysisTaskESDfilter.h:5
 AliAnalysisTaskESDfilter.h:6
 AliAnalysisTaskESDfilter.h:7
 AliAnalysisTaskESDfilter.h:8
 AliAnalysisTaskESDfilter.h:9
 AliAnalysisTaskESDfilter.h:10
 AliAnalysisTaskESDfilter.h:11
 AliAnalysisTaskESDfilter.h:12
 AliAnalysisTaskESDfilter.h:13
 AliAnalysisTaskESDfilter.h:14
 AliAnalysisTaskESDfilter.h:15
 AliAnalysisTaskESDfilter.h:16
 AliAnalysisTaskESDfilter.h:17
 AliAnalysisTaskESDfilter.h:18
 AliAnalysisTaskESDfilter.h:19
 AliAnalysisTaskESDfilter.h:20
 AliAnalysisTaskESDfilter.h:21
 AliAnalysisTaskESDfilter.h:22
 AliAnalysisTaskESDfilter.h:23
 AliAnalysisTaskESDfilter.h:24
 AliAnalysisTaskESDfilter.h:25
 AliAnalysisTaskESDfilter.h:26
 AliAnalysisTaskESDfilter.h:27
 AliAnalysisTaskESDfilter.h:28
 AliAnalysisTaskESDfilter.h:29
 AliAnalysisTaskESDfilter.h:30
 AliAnalysisTaskESDfilter.h:31
 AliAnalysisTaskESDfilter.h:32
 AliAnalysisTaskESDfilter.h:33
 AliAnalysisTaskESDfilter.h:34
 AliAnalysisTaskESDfilter.h:35
 AliAnalysisTaskESDfilter.h:36
 AliAnalysisTaskESDfilter.h:37
 AliAnalysisTaskESDfilter.h:38
 AliAnalysisTaskESDfilter.h:39
 AliAnalysisTaskESDfilter.h:40
 AliAnalysisTaskESDfilter.h:41
 AliAnalysisTaskESDfilter.h:42
 AliAnalysisTaskESDfilter.h:43
 AliAnalysisTaskESDfilter.h:44
 AliAnalysisTaskESDfilter.h:45
 AliAnalysisTaskESDfilter.h:46
 AliAnalysisTaskESDfilter.h:47
 AliAnalysisTaskESDfilter.h:48
 AliAnalysisTaskESDfilter.h:49
 AliAnalysisTaskESDfilter.h:50
 AliAnalysisTaskESDfilter.h:51
 AliAnalysisTaskESDfilter.h:52
 AliAnalysisTaskESDfilter.h:53
 AliAnalysisTaskESDfilter.h:54
 AliAnalysisTaskESDfilter.h:55
 AliAnalysisTaskESDfilter.h:56
 AliAnalysisTaskESDfilter.h:57
 AliAnalysisTaskESDfilter.h:58
 AliAnalysisTaskESDfilter.h:59
 AliAnalysisTaskESDfilter.h:60
 AliAnalysisTaskESDfilter.h:61
 AliAnalysisTaskESDfilter.h:62
 AliAnalysisTaskESDfilter.h:63
 AliAnalysisTaskESDfilter.h:64
 AliAnalysisTaskESDfilter.h:65
 AliAnalysisTaskESDfilter.h:66
 AliAnalysisTaskESDfilter.h:67
 AliAnalysisTaskESDfilter.h:68
 AliAnalysisTaskESDfilter.h:69
 AliAnalysisTaskESDfilter.h:70
 AliAnalysisTaskESDfilter.h:71
 AliAnalysisTaskESDfilter.h:72
 AliAnalysisTaskESDfilter.h:73
 AliAnalysisTaskESDfilter.h:74
 AliAnalysisTaskESDfilter.h:75
 AliAnalysisTaskESDfilter.h:76
 AliAnalysisTaskESDfilter.h:77
 AliAnalysisTaskESDfilter.h:78
 AliAnalysisTaskESDfilter.h:79
 AliAnalysisTaskESDfilter.h:80
 AliAnalysisTaskESDfilter.h:81
 AliAnalysisTaskESDfilter.h:82
 AliAnalysisTaskESDfilter.h:83
 AliAnalysisTaskESDfilter.h:84
 AliAnalysisTaskESDfilter.h:85
 AliAnalysisTaskESDfilter.h:86
 AliAnalysisTaskESDfilter.h:87
 AliAnalysisTaskESDfilter.h:88
 AliAnalysisTaskESDfilter.h:89
 AliAnalysisTaskESDfilter.h:90
 AliAnalysisTaskESDfilter.h:91
 AliAnalysisTaskESDfilter.h:92
 AliAnalysisTaskESDfilter.h:93
 AliAnalysisTaskESDfilter.h:94
 AliAnalysisTaskESDfilter.h:95
 AliAnalysisTaskESDfilter.h:96
 AliAnalysisTaskESDfilter.h:97
 AliAnalysisTaskESDfilter.h:98
 AliAnalysisTaskESDfilter.h:99
 AliAnalysisTaskESDfilter.h:100
 AliAnalysisTaskESDfilter.h:101
 AliAnalysisTaskESDfilter.h:102
 AliAnalysisTaskESDfilter.h:103
 AliAnalysisTaskESDfilter.h:104
 AliAnalysisTaskESDfilter.h:105
 AliAnalysisTaskESDfilter.h:106
 AliAnalysisTaskESDfilter.h:107
 AliAnalysisTaskESDfilter.h:108
 AliAnalysisTaskESDfilter.h:109
 AliAnalysisTaskESDfilter.h:110
 AliAnalysisTaskESDfilter.h:111
 AliAnalysisTaskESDfilter.h:112
 AliAnalysisTaskESDfilter.h:113
 AliAnalysisTaskESDfilter.h:114
 AliAnalysisTaskESDfilter.h:115
 AliAnalysisTaskESDfilter.h:116
 AliAnalysisTaskESDfilter.h:117
 AliAnalysisTaskESDfilter.h:118
 AliAnalysisTaskESDfilter.h:119
 AliAnalysisTaskESDfilter.h:120
 AliAnalysisTaskESDfilter.h:121
 AliAnalysisTaskESDfilter.h:122
 AliAnalysisTaskESDfilter.h:123
 AliAnalysisTaskESDfilter.h:124
 AliAnalysisTaskESDfilter.h:125
 AliAnalysisTaskESDfilter.h:126
 AliAnalysisTaskESDfilter.h:127
 AliAnalysisTaskESDfilter.h:128
 AliAnalysisTaskESDfilter.h:129
 AliAnalysisTaskESDfilter.h:130
 AliAnalysisTaskESDfilter.h:131
 AliAnalysisTaskESDfilter.h:132
 AliAnalysisTaskESDfilter.h:133
 AliAnalysisTaskESDfilter.h:134
 AliAnalysisTaskESDfilter.h:135
 AliAnalysisTaskESDfilter.h:136
 AliAnalysisTaskESDfilter.h:137
 AliAnalysisTaskESDfilter.h:138
 AliAnalysisTaskESDfilter.h:139
 AliAnalysisTaskESDfilter.h:140
 AliAnalysisTaskESDfilter.h:141
 AliAnalysisTaskESDfilter.h:142
 AliAnalysisTaskESDfilter.h:143
 AliAnalysisTaskESDfilter.h:144
 AliAnalysisTaskESDfilter.h:145
 AliAnalysisTaskESDfilter.h:146
 AliAnalysisTaskESDfilter.h:147
 AliAnalysisTaskESDfilter.h:148
 AliAnalysisTaskESDfilter.h:149
 AliAnalysisTaskESDfilter.h:150
 AliAnalysisTaskESDfilter.h:151
 AliAnalysisTaskESDfilter.h:152
 AliAnalysisTaskESDfilter.h:153
 AliAnalysisTaskESDfilter.h:154
 AliAnalysisTaskESDfilter.h:155
 AliAnalysisTaskESDfilter.h:156
 AliAnalysisTaskESDfilter.h:157
 AliAnalysisTaskESDfilter.h:158
 AliAnalysisTaskESDfilter.h:159
 AliAnalysisTaskESDfilter.h:160
 AliAnalysisTaskESDfilter.h:161
 AliAnalysisTaskESDfilter.h:162
 AliAnalysisTaskESDfilter.h:163
 AliAnalysisTaskESDfilter.h:164
 AliAnalysisTaskESDfilter.h:165
 AliAnalysisTaskESDfilter.h:166
 AliAnalysisTaskESDfilter.h:167
 AliAnalysisTaskESDfilter.h:168
 AliAnalysisTaskESDfilter.h:169
 AliAnalysisTaskESDfilter.h:170
 AliAnalysisTaskESDfilter.h:171
 AliAnalysisTaskESDfilter.h:172
 AliAnalysisTaskESDfilter.h:173
 AliAnalysisTaskESDfilter.h:174