ROOT logo
#ifndef ALIDNDPTTRACKDUMPTASK_H
#define ALIDNDPTTRACKDUMPTASK_H

//------------------------------------------------------------------------------
// Task to dump track information 
// TPC constrained and TP+ITS combined 
// for outliers analysis.
// 
// Author: J.Otwinowski 19/06/2011 
//------------------------------------------------------------------------------

class AliESDEvent;
class AliMCEvent;
class AlidNdPtEventCuts;
class AlidNdPtAcceptanceCuts;
class AliESDtrackCuts;
class AlidNdPt;
class AlidNdPtAnalysis;
class AlidNdPtCorrection;
class AliMagFMaps;
class AliESDEvent; 
class AliMCEvent; 
class AliKFParticle; 
class AliESDv0; 
class TList;
class TObjArray;
class TTree;
class TTreeSRedirector;

#include "AliTriggerAnalysis.h"
#include "AliAnalysisTaskSE.h"
#include "AlidNdPtHelper.h"

class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE {
 public:


  AlidNdPtTrackDumpTask(const char *name = "AlidNdPtTrackDumpTask");
  virtual ~AlidNdPtTrackDumpTask();
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *);
  virtual Bool_t Notify();
  virtual void   FinishTaskOutput();
  void SetUseMCInfo(Bool_t info)           { fUseMCInfo = info; }
  Bool_t IsUseMCInfo() const               { return fUseMCInfo; }
  void SetUseESDfriends(Bool_t friends)    { fUseESDfriends = friends; }
  Bool_t IsUseESDfriends() const              { return fUseESDfriends; }
  
  // Process events
  void ProcessAll(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
  void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
  void ProcessV0(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
  void ProcessdEdx(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
  void ProcessLaser(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
  void ProcessMCEff(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
  void ProcessCosmics(AliESDEvent *const esdEvent=0); 

  void SetEventCuts(AlidNdPtEventCuts* const cuts)              { fdNdPtEventCuts = cuts; }
  void SetAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts)    { fdNdPtAcceptanceCuts = cuts; }
  void SetRecAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts) { fdNdPtRecAcceptanceCuts = cuts; }
  void SetTrackCuts(AliESDtrackCuts* const cuts)                { fEsdTrackCuts = cuts; }
  void SetTrigger(const AliTriggerAnalysis::Trigger trigger)    { fTrigger = trigger; }
  void SetAnalysisMode(const AlidNdPtHelper::AnalysisMode mode) { fAnalysisMode = mode; }

  AlidNdPtEventCuts* GetEventCuts() const                       { return fdNdPtEventCuts; }
  AlidNdPtAcceptanceCuts* GetAcceptanceCuts() const             { return fdNdPtAcceptanceCuts; }
  AlidNdPtAcceptanceCuts* GetRecAcceptanceCuts() const          { return fdNdPtRecAcceptanceCuts; }  
  AliESDtrackCuts* GetTrackCuts() const                         { return fEsdTrackCuts; }
  AliTriggerAnalysis::Trigger GetTrigger() const                { return fTrigger; }
  AlidNdPtHelper::AnalysisMode GetAnalysisMode() const          { return fAnalysisMode; }

  TString GetCentralityEstimator() const {return fCentralityEstimator; }
  void SetCentralityEstimator(TString centEst="V0M") { fCentralityEstimator = centEst; }

  Bool_t IsFromConversion(const Int_t label, AliStack *const stack);
  Bool_t IsFromMaterial(const Int_t label, AliStack *const stack);
  Bool_t IsFromStrangeness(const Int_t label, AliStack *const stack);
  TParticle *GetMother(TParticle *const particle, AliStack *const stack);

  Bool_t ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3]);
  Bool_t ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3]);

  // v0s selection
  Int_t  GetKFParticle(AliESDv0 *const v0, AliESDEvent * const event, AliKFParticle & kfparticle);
  Bool_t IsV0Downscaled(AliESDv0 *const v0);
  Bool_t IsHighDeDxParticle(AliESDtrack * const track);

  void SetLowPtTrackDownscaligF(Double_t fact) { fLowPtTrackDownscaligF = fact; }
  void SetLowPtV0DownscaligF(Double_t fact)    { fLowPtV0DownscaligF = fact; }
  
  void   SetProcessCosmics(Bool_t flag) { fProcessCosmics = flag; }
  Bool_t GetProcessCosmics() { return fProcessCosmics; }

  void SetProcessAll(Bool_t proc) { fProcessAll = proc; }

 private:

  AliESDEvent *fESD;    //! ESD event
  AliMCEvent *fMC;      //! MC event
  AliESDfriend *fESDfriend; //! ESDfriend event
  TList* fOutput;       //! list send on output slot 0
  TIterator *fPitList;  //! iterator over the output objetcs  


  Bool_t fUseMCInfo;        // use MC information
  Bool_t fUseESDfriends;        // use esd friends

  AlidNdPtEventCuts      *fdNdPtEventCuts;      // event cuts
  AlidNdPtAcceptanceCuts *fdNdPtAcceptanceCuts; // acceptance cuts  
  AlidNdPtAcceptanceCuts *fdNdPtRecAcceptanceCuts; // additional recontruction acceptance cuts (not used for MC truth)
  AliESDtrackCuts *fEsdTrackCuts;          // esd track cuts
  AliTriggerAnalysis::Trigger fTrigger;    // trigger settings
  AlidNdPtHelper::AnalysisMode fAnalysisMode;   // analysis mode TPC only, TPC + ITS

  TTreeSRedirector* fTreeSRedirector;      //! temp tree to dump output

  TString fCentralityEstimator;     // use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC"

  Double_t fLowPtTrackDownscaligF; // low pT track downscaling factor
  Double_t fLowPtV0DownscaligF; // low pT V0 downscaling factor
  Double_t fProcessAll; // Calculate all track properties including MC
  
  Bool_t fProcessCosmics; // look for cosmic pairs from random trigger

  TTree* fTree1;       //! list send on output slot 0
  TTree* fTree2;       //! list send on output slot 0
  TTree* fTree3;       //! list send on output slot 0
  TTree* fTree4;       //! list send on output slot 0
  TTree* fTree5;       //! list send on output slot 0
  TTree* fTree6;       //! list send on output slot 0


  AlidNdPtTrackDumpTask(const AlidNdPtTrackDumpTask&); // not implemented
  AlidNdPtTrackDumpTask& operator=(const AlidNdPtTrackDumpTask&); // not implemented
  
  ClassDef(AlidNdPtTrackDumpTask, 2); // example of analysis
};

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