ROOT logo
#ifndef AliAnalysisTaskCFTree_h
#define AliAnalysisTaskCFTree_h

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

// Analysis task to produce trees of lightweight events
// evgeny.kryshen@cern.ch

#include "AliAnalysisTaskSE.h"
class TList;
class TH1I;
class TTree;
class TClonesArray;
class AliAnalysisFilter;
class AliVTrack;
class AliCFParticle;
class AliAnalysisUtils;

class AliAnalysisTaskCFTree : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskCFTree(const char* name="AliAnalysisTaskCFTree");
  virtual ~AliAnalysisTaskCFTree(){};
  virtual void UserCreateOutputObjects();
  virtual void UserExec(Option_t *option);

  void SetTrackFilter(AliAnalysisFilter* filter) { fTrackFilter = filter; }
  void SetHybridConstrainedMask(UInt_t mask)  { fHybridConstrainedMask = mask; }
  void SetTPConlyConstrainedMask(UInt_t mask) { fTPConlyConstrainedMask = mask; }
  // Event cut setters
  void SetEventSelectionBit(UInt_t val) { fSelectBit = val; }
  void SetZVertex(Float_t val)          { fZVertexCut = val; }
  // Track cut setters
  void SetTrackFilterBit(UInt_t val)    { fTrackFilterBit = val; }
  void SetTrackEtaCut(Float_t val)      { fTrackEtaCut = val; }
  void SetPtMin(Float_t val)            { fPtMin = val; } 
  void SetSharedClusterCut(Float_t val) { fSharedClusterCut = val;  }
  void SetCrossedRowsCut(Int_t val)     { fCrossedRowsCut = val; }
  void SetFoundFractionCut(Float_t val) { fFoundFractionCut = val;  }
  void SetDphiCut(Float_t val)          { fDphiCut = val; }
  // Switchers for additional data to be stored
  void SetStoreTracks(Bool_t val=kTRUE)      { fStoreTracks      = val; }
  void SetStoreTracklets(Bool_t val=kTRUE)   { fStoreTracklets   = val; }
  void SetStoreMuons(Bool_t val=kTRUE)       { fStoreMuons       = val; }
  void SetStoreMcTracks(Bool_t val=kTRUE)    { fStoreMcTracks    = val; }
  void SetStoreMcTracklets(Bool_t val=kTRUE) { fStoreMcTracklets = val; }
  void SetStoreMcMuons(Bool_t val=kTRUE)     { fStoreMcMuons     = val; }
  void SetStorePidInfo(Bool_t val=kTRUE)     { fStorePidInfo     = val; }

 protected:
  AliAnalysisTaskCFTree(const  AliAnalysisTaskCFTree &task);
  AliAnalysisTaskCFTree& operator=(const  AliAnalysisTaskCFTree &task);

  UInt_t GetFilterMap(AliVTrack* part);
  AliCFParticle* AddTrack(AliVTrack* track, UInt_t mask, UInt_t flag=0);

  AliAnalysisFilter* fTrackFilter; // track filter used in ESD analysis
  UInt_t fHybridConstrainedMask;       // Filter mask for hybrid constrained tracks (ESD analysis)
  UInt_t fTPConlyConstrainedMask;      // Filter mask for TPConly constrained tracks (ESD analysis)
  AliAnalysisUtils* fUtils;   //! analysis utils to detect pileup
  TList* fListOfHistos;       //! list of output histograms
  TH1I*  fEventStatistics;    //! cut-by-cut counter of events
  TTree* fTree;               //! output tree
  // Tree variables
  TClonesArray* fTracks;      //! tree var: selected AliCFParticles
  TClonesArray* fTracklets;   //! tree var: selected tracklets (stored if fStoreTracklets=kTRUE)
  TClonesArray* fMuons;       //! tree var: selected muons (stored if fStoreMuons=kTRUE)
  TClonesArray* fMcParticles; //! tree var: MC particles
  Float_t fField;             //  tree var: magnetic field value
  Float_t fCentrality[6];     //  tree var: centrality
  Float_t fVtxZ;              //  tree var: z-vertex
  Bool_t fVtxTPConly;         //  tree var: is vertex TPC only
  UInt_t fVtxContributors;    //  tree var: number of vertex contributors
  UInt_t fPeriod;             //  tree var: period
  UInt_t fOrbit;              //  tree var: orbit
  UShort_t fBc;               //  tree var: bunch crossing
  UInt_t fSelectMask;         //  tree var: physics selection mask
  Bool_t fIsPileupSPD;        //  tree var: is pileup from SPD flag
  Bool_t fIsPileupMV;         //  tree var: is pileup from MV flag

  // Event cuts
  UInt_t fSelectBit;          // event selection bit
  Float_t fZVertexCut;        // Z-vertex cut
  // Track cuts
  UInt_t fTrackFilterBit;     // track filter bits to be stored
  Float_t fTrackEtaCut;       // maximum abs(eta) cut
  Float_t fPtMin;             // minimum pt cut
  Float_t fSharedClusterCut;  // cut on shared clusters
  Int_t   fCrossedRowsCut;    // cut on crossed rows
  Float_t fFoundFractionCut;  // cut on crossed rows/findable clusters
  Float_t fDphiCut;           // cut on tracklet dphi
  //
  Bool_t fStoreTracks;        // if kTRUE - Barrel tracks will be stored as AliCFParticles
  Bool_t fStoreTracklets;     // if kTRUE - SPD tracklets will be stored as AliCFParticles
  Bool_t fStoreMuons;         // if kTRUE - muon tracks will be stored as AliCFParticles
  Bool_t fStoreMcTracks;      // if kTRUE - mc particles will be stored as AliCFParticles
  Bool_t fStoreMcTracklets;   // if kTRUE - Store Monte-Carlo info for tracklets
  Bool_t fStoreMcMuons;       // if kTRUE - Store Monte-Carlo info for muons
  Bool_t fStorePidInfo;       // if kTRUE - Store PID info for tracks
  ClassDef(AliAnalysisTaskCFTree,4);
};
#endif

 AliAnalysisTaskCFTree.h:1
 AliAnalysisTaskCFTree.h:2
 AliAnalysisTaskCFTree.h:3
 AliAnalysisTaskCFTree.h:4
 AliAnalysisTaskCFTree.h:5
 AliAnalysisTaskCFTree.h:6
 AliAnalysisTaskCFTree.h:7
 AliAnalysisTaskCFTree.h:8
 AliAnalysisTaskCFTree.h:9
 AliAnalysisTaskCFTree.h:10
 AliAnalysisTaskCFTree.h:11
 AliAnalysisTaskCFTree.h:12
 AliAnalysisTaskCFTree.h:13
 AliAnalysisTaskCFTree.h:14
 AliAnalysisTaskCFTree.h:15
 AliAnalysisTaskCFTree.h:16
 AliAnalysisTaskCFTree.h:17
 AliAnalysisTaskCFTree.h:18
 AliAnalysisTaskCFTree.h:19
 AliAnalysisTaskCFTree.h:20
 AliAnalysisTaskCFTree.h:21
 AliAnalysisTaskCFTree.h:22
 AliAnalysisTaskCFTree.h:23
 AliAnalysisTaskCFTree.h:24
 AliAnalysisTaskCFTree.h:25
 AliAnalysisTaskCFTree.h:26
 AliAnalysisTaskCFTree.h:27
 AliAnalysisTaskCFTree.h:28
 AliAnalysisTaskCFTree.h:29
 AliAnalysisTaskCFTree.h:30
 AliAnalysisTaskCFTree.h:31
 AliAnalysisTaskCFTree.h:32
 AliAnalysisTaskCFTree.h:33
 AliAnalysisTaskCFTree.h:34
 AliAnalysisTaskCFTree.h:35
 AliAnalysisTaskCFTree.h:36
 AliAnalysisTaskCFTree.h:37
 AliAnalysisTaskCFTree.h:38
 AliAnalysisTaskCFTree.h:39
 AliAnalysisTaskCFTree.h:40
 AliAnalysisTaskCFTree.h:41
 AliAnalysisTaskCFTree.h:42
 AliAnalysisTaskCFTree.h:43
 AliAnalysisTaskCFTree.h:44
 AliAnalysisTaskCFTree.h:45
 AliAnalysisTaskCFTree.h:46
 AliAnalysisTaskCFTree.h:47
 AliAnalysisTaskCFTree.h:48
 AliAnalysisTaskCFTree.h:49
 AliAnalysisTaskCFTree.h:50
 AliAnalysisTaskCFTree.h:51
 AliAnalysisTaskCFTree.h:52
 AliAnalysisTaskCFTree.h:53
 AliAnalysisTaskCFTree.h:54
 AliAnalysisTaskCFTree.h:55
 AliAnalysisTaskCFTree.h:56
 AliAnalysisTaskCFTree.h:57
 AliAnalysisTaskCFTree.h:58
 AliAnalysisTaskCFTree.h:59
 AliAnalysisTaskCFTree.h:60
 AliAnalysisTaskCFTree.h:61
 AliAnalysisTaskCFTree.h:62
 AliAnalysisTaskCFTree.h:63
 AliAnalysisTaskCFTree.h:64
 AliAnalysisTaskCFTree.h:65
 AliAnalysisTaskCFTree.h:66
 AliAnalysisTaskCFTree.h:67
 AliAnalysisTaskCFTree.h:68
 AliAnalysisTaskCFTree.h:69
 AliAnalysisTaskCFTree.h:70
 AliAnalysisTaskCFTree.h:71
 AliAnalysisTaskCFTree.h:72
 AliAnalysisTaskCFTree.h:73
 AliAnalysisTaskCFTree.h:74
 AliAnalysisTaskCFTree.h:75
 AliAnalysisTaskCFTree.h:76
 AliAnalysisTaskCFTree.h:77
 AliAnalysisTaskCFTree.h:78
 AliAnalysisTaskCFTree.h:79
 AliAnalysisTaskCFTree.h:80
 AliAnalysisTaskCFTree.h:81
 AliAnalysisTaskCFTree.h:82
 AliAnalysisTaskCFTree.h:83
 AliAnalysisTaskCFTree.h:84
 AliAnalysisTaskCFTree.h:85
 AliAnalysisTaskCFTree.h:86
 AliAnalysisTaskCFTree.h:87
 AliAnalysisTaskCFTree.h:88
 AliAnalysisTaskCFTree.h:89
 AliAnalysisTaskCFTree.h:90
 AliAnalysisTaskCFTree.h:91
 AliAnalysisTaskCFTree.h:92
 AliAnalysisTaskCFTree.h:93
 AliAnalysisTaskCFTree.h:94
 AliAnalysisTaskCFTree.h:95
 AliAnalysisTaskCFTree.h:96
 AliAnalysisTaskCFTree.h:97
 AliAnalysisTaskCFTree.h:98
 AliAnalysisTaskCFTree.h:99
 AliAnalysisTaskCFTree.h:100
 AliAnalysisTaskCFTree.h:101
 AliAnalysisTaskCFTree.h:102
 AliAnalysisTaskCFTree.h:103