ROOT logo
#ifndef ALIDNDPTTRACKDUMPTASK_H
#define ALIDNDPTTRACKDUMPTASK_H

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

class AliESDEvent;
class AliMCEvent;
class AliFilteredTreeEventCuts;
class AliFilteredTreeAcceptanceCuts;
class AliESDtrackCuts;
class AliMagFMaps;
class AliESDEvent; 
class AliMCEvent; 
class AliKFParticle; 
class AliESDv0; 
class AliExternalTrackParam;
class AliESDtrack;
class AliESDfriendTrack;
class AliESDVertex;
class AliStack;
class TList;
class TObjArray;
class TTree;
class TTreeSRedirector;
class TParticle;
class TH3D;

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

class AliAnalysisTaskFilteredTree : public AliAnalysisTaskSE {
 public:

  enum EAnalysisMode { kInvalidAnalysisMode=-1,
                      kTPCITSAnalysisMode=0,
                      kTPCAnalysisMode=1 };

  AliAnalysisTaskFilteredTree(const char *name = "AliAnalysisTaskFilteredTree");
  virtual ~AliAnalysisTaskFilteredTree();
  
  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 (fMC)?kTRUE:kFALSE; }
  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, AliESDfriend* esdFriend=0); 

  void ProcessITSTPCmatchOut(AliESDEvent *const esdEvent=0,  AliESDfriend *const esdFriend=0);
  void ProcessTrackMatch(AliESDEvent *const esdEvent=0,  AliESDfriend *const esdFriend=0);

  void SetEventCuts(AliFilteredTreeEventCuts* const cuts)              { fFilteredTreeEventCuts = cuts; }
  void SetAcceptanceCuts(AliFilteredTreeAcceptanceCuts* const cuts)    { fFilteredTreeAcceptanceCuts = cuts; }
  void SetRecAcceptanceCuts(AliFilteredTreeAcceptanceCuts* const cuts) { fFilteredTreeRecAcceptanceCuts = cuts; }
  void SetTrackCuts(AliESDtrackCuts* const cuts)                { fEsdTrackCuts = cuts; }
  void SetTrigger(const AliTriggerAnalysis::Trigger trigger)    { fTrigger = trigger; }
  void SetAnalysisMode(EAnalysisMode mode) { fAnalysisMode = mode; }

  AliFilteredTreeEventCuts* GetEventCuts() const                       { return fFilteredTreeEventCuts; }
  AliFilteredTreeAcceptanceCuts* GetAcceptanceCuts() const             { return fFilteredTreeAcceptanceCuts; }
  AliFilteredTreeAcceptanceCuts* GetRecAcceptanceCuts() const          { return fFilteredTreeRecAcceptanceCuts; }  
  AliESDtrackCuts* GetTrackCuts() const                         { return fEsdTrackCuts; }
  AliTriggerAnalysis::Trigger GetTrigger() const                { return fTrigger; }
  EAnalysisMode GetAnalysisMode() const          { return fAnalysisMode; }

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

  Bool_t IsFromConversion(Int_t label, AliStack *const stack);
  Bool_t IsFromMaterial(Int_t label, AliStack *const stack);
  Bool_t IsFromStrangeness(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 SetFriendDownscaling(Double_t fact)    { fFriendDownscaling = fact; }
  
  void   SetProcessCosmics(Bool_t flag) { fProcessCosmics = flag; }
  Bool_t GetProcessCosmics() { return fProcessCosmics; }
  //
  void   SetProcessProcessITSTPCmatchOut(Bool_t flag) { fProcessITSTPCmatchOut = flag; }
  Bool_t GetProcessProcessITSTPCmatchOut() { return fProcessITSTPCmatchOut; }

  
  void SetProcessAll(Bool_t proc) { fProcessAll = proc; }
  static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AliFilteredTreeEventCuts *const evtCuts, AliFilteredTreeAcceptanceCuts *const accCuts);

  void SetFillTrees(Bool_t filltree) { fFillTree = filltree ;}
  Bool_t GetFillTrees() { return fFillTree ;}

  void FillHistograms(AliESDtrack* const ptrack, AliExternalTrackParam* const ptpcInnerC, Double_t centralityF, Double_t chi2TPCInnerC);

 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
  Bool_t fReducePileUp;     // downscale the information for the pile-up TPC tracks
  Bool_t fFillTree;         // do not fill trees

  AliFilteredTreeEventCuts      *fFilteredTreeEventCuts;      // event cuts
  AliFilteredTreeAcceptanceCuts *fFilteredTreeAcceptanceCuts; // acceptance cuts  
  AliFilteredTreeAcceptanceCuts *fFilteredTreeRecAcceptanceCuts; // additional recontruction acceptance cuts (not used for MC truth)
  AliESDtrackCuts *fEsdTrackCuts;          // esd track cuts
  AliTriggerAnalysis::Trigger fTrigger;    // trigger settings
  EAnalysisMode 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 fFriendDownscaling;     // friend info downscaling )absolute value used), Modes>=1 downscaling in respect to the amount of tracks, Mode<=-1 (downscaling in respect to the data volume)
  Double_t fProcessAll; // Calculate all track properties including MC
  
  Bool_t fProcessCosmics; // look for cosmic pairs from random trigger
  Bool_t fProcessITSTPCmatchOut;  // swittch to process ITS/TPC standalone tracks

  TTree* fHighPtTree;       //! list send on output slot 0
  TTree* fV0Tree;           //! list send on output slot 0
  TTree* fdEdxTree;         //! list send on output slot 0
  TTree* fLaserTree;        //! list send on output slot 0
  TTree* fMCEffTree;        //! list send on output slot 0
  TTree* fCosmicPairsTree;  //! list send on output slot 0

  TH3D* fPtResPhiPtTPC;    //! sigma(pt)/pt vs Phi vs Pt for prim. TPC tracks
  TH3D* fPtResPhiPtTPCc;   //! sigma(pt)/pt vs Phi vs Pt for prim. TPC contrained to vertex tracks
  TH3D* fPtResPhiPtTPCITS; //! sigma(pt)/pt vs Phi vs Pt for prim. TPC+ITS tracks

  TH3D* fPtResEtaPtTPC;    //! sigma(pt)/pt vs Eta vs Pt for prim. TPC tracks
  TH3D* fPtResEtaPtTPCc;   //! sigma(pt)/pt vs Eta vs Pt for prim. TPC contrained to vertex tracks
  TH3D* fPtResEtaPtTPCITS; //! sigma(pt)/pt vs Eta vs Pt for prim. TPC+ITS tracks

  TH3D* fPtResCentPtTPC;    //! sigma(pt)/pt vs Cent vs Pt for prim. TPC tracks
  TH3D* fPtResCentPtTPCc;   //! sigma(pt)/pt vs Cent vs Pt for prim. TPC contrained to vertex tracks
  TH3D* fPtResCentPtTPCITS; //! sigma(pt)/pt vs Cent vs Pt for prim. TPC+ITS tracks
  TObjString fCurrentFileName; // cached value of current file name
  AliESDtrack* fDummyTrack; //! dummy track for tree init

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

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