ROOT logo
#ifndef AliCFSINGLETRACKEFFICIENCYTASK_H
#define AliCFSINGLETRACKEFFICIENCYTASK_H

#include "AliAnalysisTaskSE.h"
#include "AliSingleTrackEffCuts.h"

class TH1I;
class TParticle;
class AliStack;
class AliCFManager;
class AliAODTrack;
class AliESDtrack;
class AliESDtrackCuts;
class AliESDVertex;
class AliVVertex;
class AliVParticle;


class AliCFSingleTrackEfficiencyTask : public AliAnalysisTaskSE {

 public:

  enum {
    kStepMCGenCut         = 0, // selected generated particles, event selection
    kStepMCKineCut        = 1, // generated particles after acceptance cuts
    kStepMCAccpCut        = 2, // particles with a minimum number of clusters in detector (ESD only)
    kStepReconstructed    = 3, // reconstructed tracks
    kStepRecoKineCuts     = 4, // reconstructed tracks after acceptance
    kStepReconstructedMC  = 5, // tracks passing ESD+MC trackCuts (kine properties)
    kStepRecoQualityCuts  = 6, // tracks passing ESD+MC trackCuts (reco properties)
    kStepRecoPID          = 7  // tracks after PID criteria
  };

  AliCFSingleTrackEfficiencyTask();
  AliCFSingleTrackEfficiencyTask(const Char_t* name, AliESDtrackCuts *trackcuts, AliSingleTrackEffCuts * mccuts);
  AliCFSingleTrackEfficiencyTask(const AliCFSingleTrackEfficiencyTask& c);
  AliCFSingleTrackEfficiencyTask& operator= (const AliCFSingleTrackEfficiencyTask& c);
  virtual ~AliCFSingleTrackEfficiencyTask();

  // ANALYSIS FRAMEWORK STUFF to loop on data and fill output objects
  virtual void UserCreateOutputObjects();
  virtual void UserExec(Option_t *option);
  virtual void Terminate(Option_t *);
  virtual void Init();
  virtual void LocalInit() { Init(); }

  // CORRECTION FRAMEWORK RELATED FUNCTIONS
  void           SetCFManager(AliCFManager* io) { fCFManager = io; }   // global correction manager
  AliCFManager * GetCFManager() const { return fCFManager; }           // get corr manager
  void           SetQAList(TList* list) { fQAHistList = list; }        // set CF QA list (empty, not used, but needed)

  // Setters
  // analyze AOD:1 or ESD:0 data
  void SetReadAODData (Bool_t flag=kTRUE) { fReadAODData=flag; }
  // select track filter bit:1 or not:0 and set the bit
  void SetFilterBit (Bool_t flag=kTRUE) { fSetFilterBit=flag; }
  void SetFilterType (Int_t fbittype) { fbit=fbittype; }
  // select trigger event mask
  void SetTriggerMask(ULong64_t mask=0) { fTriggerMask=mask; }
  // set whether to evaluate centrality
  void SetUseCentrality(Bool_t flag, TString estimator=""){ fEvalCentrality=flag; fCentralityEstimator=estimator; }

  // Getters
  // analyze AOD:1 or ESD:0 data
  Bool_t IsReadAODData()   const { return fReadAODData; }
  // select trigger event mask
  ULong64_t GetTriggerMask() { return fTriggerMask; }
  // reconstructed track cuts
  AliESDtrackCuts *GetTrackCuts(){ return (AliESDtrackCuts*)fTrackCuts; } 
  // particle and event cuts 
  AliSingleTrackEffCuts *GetSingleTrackEffCuts() { return (AliSingleTrackEffCuts*)fMCCuts; }


 protected:

  // Check ESD generated particles
  void CheckESDMCParticles();
  // Check AOD generated particles
  void CheckAODMCParticles();
  // Check reconstructed particles
  void CheckReconstructedParticles();
  // Convert AOD track to an ESD track
  AliESDtrack* ConvertTrack(AliAODTrack *track);
  // Count the number of tracklets in given eta range
  Int_t GetNumberOfTrackletsInEtaRange(Double_t mineta, Double_t maxeta);
  // Evaluate the event centrality
  Double_t GetCentrality();

  Bool_t fReadAODData;       // flag for AOD/ESD input files
  AliCFManager *fCFManager;  // pointer to the CF manager slot 2
  TList *fQAHistList;        // list of QA histograms slot 3

  AliESDtrackCuts *fTrackCuts;    // track cuts (reconstructed level) slot 4
  AliSingleTrackEffCuts *fMCCuts; // particle cuts used slot 5
  ULong64_t fTriggerMask;         // event selection trigger mask

  Bool_t fSetFilterBit; // flag to decide if applying filter-bit selection to tracks
  Int_t  fbit;          // filter-bit selection to tracks

  Bool_t fEvalCentrality;        // flag to enable centrality determination
  TString fCentralityEstimator;  // centrality estimator

  TH1I  *fHistEventsProcessed;   //! histo for monitoring the number of events processed slot 1

  ClassDef(AliCFSingleTrackEfficiencyTask,2)
};

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