Completed changes needed because of previous commit
[u/mrichter/AliRoot.git] / PWGPP / AliAnalysisTaskFilteredTree.h
1 #ifndef ALIDNDPTTRACKDUMPTASK_H
2 #define ALIDNDPTTRACKDUMPTASK_H
3
4 //------------------------------------------------------------------------------
5 // Task to dump track information 
6 // TPC constrained and TPC+ITS combined 
7 // for outliers analysis.
8 // 
9 // Author: J.Otwinowski 19/06/2011 
10 //------------------------------------------------------------------------------
11
12 class AliESDEvent;
13 class AliMCEvent;
14 class AliFilteredTreeEventCuts;
15 class AliFilteredTreeAcceptanceCuts;
16 class AliESDtrackCuts;
17 class AliMagFMaps;
18 class AliESDEvent; 
19 class AliMCEvent; 
20 class AliKFParticle; 
21 class AliESDv0; 
22 class AliExternalTrackParam;
23 class AliESDtrack;
24 class AliESDfriendTrack;
25 class AliESDVertex;
26 class AliStack;
27 class TList;
28 class TObjArray;
29 class TTree;
30 class TTreeSRedirector;
31 class TParticle;
32 class TH3D;
33
34 #include "AliTriggerAnalysis.h"
35 #include "AliAnalysisTaskSE.h"
36
37 class AliAnalysisTaskFilteredTree : public AliAnalysisTaskSE {
38  public:
39
40   enum EAnalysisMode { kInvalidAnalysisMode=-1,
41                       kTPCITSAnalysisMode=0,
42                       kTPCAnalysisMode=1 };
43
44   AliAnalysisTaskFilteredTree(const char *name = "AliAnalysisTaskFilteredTree");
45   virtual ~AliAnalysisTaskFilteredTree();
46   
47   virtual void   UserCreateOutputObjects();
48   virtual void   UserExec(Option_t *option);
49   virtual void   Terminate(Option_t *);
50   virtual Bool_t Notify();
51   virtual void   FinishTaskOutput();
52   void SetUseMCInfo(Bool_t info)           { fUseMCInfo = info; }
53   Bool_t IsUseMCInfo() const               { return (fMC)?kTRUE:kFALSE; }
54   void SetUseESDfriends(Bool_t friends)    { fUseESDfriends = friends; }
55   Bool_t IsUseESDfriends() const              { return fUseESDfriends; }
56   
57   // Process events
58   void ProcessAll(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
59   void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
60   void ProcessV0(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
61   void ProcessdEdx(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
62   void ProcessLaser(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
63   void ProcessMCEff(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
64   void ProcessCosmics(AliESDEvent *const esdEvent=0, AliESDfriend* esdFriend=0); 
65
66   void ProcessITSTPCmatchOut(AliESDEvent *const esdEvent=0,  AliESDfriend *const esdFriend=0);
67   void ProcessTrackMatch(AliESDEvent *const esdEvent=0,  AliESDfriend *const esdFriend=0);
68
69   void SetEventCuts(AliFilteredTreeEventCuts* const cuts)              { fFilteredTreeEventCuts = cuts; }
70   void SetAcceptanceCuts(AliFilteredTreeAcceptanceCuts* const cuts)    { fFilteredTreeAcceptanceCuts = cuts; }
71   void SetRecAcceptanceCuts(AliFilteredTreeAcceptanceCuts* const cuts) { fFilteredTreeRecAcceptanceCuts = cuts; }
72   void SetTrackCuts(AliESDtrackCuts* const cuts)                { fEsdTrackCuts = cuts; }
73   void SetTrigger(const AliTriggerAnalysis::Trigger trigger)    { fTrigger = trigger; }
74   void SetAnalysisMode(EAnalysisMode mode) { fAnalysisMode = mode; }
75
76   AliFilteredTreeEventCuts* GetEventCuts() const                       { return fFilteredTreeEventCuts; }
77   AliFilteredTreeAcceptanceCuts* GetAcceptanceCuts() const             { return fFilteredTreeAcceptanceCuts; }
78   AliFilteredTreeAcceptanceCuts* GetRecAcceptanceCuts() const          { return fFilteredTreeRecAcceptanceCuts; }  
79   AliESDtrackCuts* GetTrackCuts() const                         { return fEsdTrackCuts; }
80   AliTriggerAnalysis::Trigger GetTrigger() const                { return fTrigger; }
81   EAnalysisMode GetAnalysisMode() const          { return fAnalysisMode; }
82
83   TString GetCentralityEstimator() const {return fCentralityEstimator; }
84   void SetCentralityEstimator(TString centEst="V0M") { fCentralityEstimator = centEst; }
85
86   Bool_t IsFromConversion(Int_t label, AliStack *const stack);
87   Bool_t IsFromMaterial(Int_t label, AliStack *const stack);
88   Bool_t IsFromStrangeness(Int_t label, AliStack *const stack);
89   TParticle *GetMother(TParticle *const particle, AliStack *const stack);
90
91   Bool_t ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3]);
92   Bool_t ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3]);
93
94   // v0s selection
95   Int_t  GetKFParticle(AliESDv0 *const v0, AliESDEvent * const event, AliKFParticle & kfparticle);
96   Bool_t IsV0Downscaled(AliESDv0 *const v0);
97   Bool_t IsHighDeDxParticle(AliESDtrack * const track);
98
99   void SetLowPtTrackDownscaligF(Double_t fact) { fLowPtTrackDownscaligF = fact; }
100   void SetLowPtV0DownscaligF(Double_t fact)    { fLowPtV0DownscaligF = fact; }
101   void SetFriendDownscaling(Double_t fact)    { fFriendDownscaling = fact; }
102   
103   void   SetProcessCosmics(Bool_t flag) { fProcessCosmics = flag; }
104   Bool_t GetProcessCosmics() { return fProcessCosmics; }
105   //
106   void   SetProcessProcessITSTPCmatchOut(Bool_t flag) { fProcessITSTPCmatchOut = flag; }
107   Bool_t GetProcessProcessITSTPCmatchOut() { return fProcessITSTPCmatchOut; }
108
109   
110   void SetProcessAll(Bool_t proc) { fProcessAll = proc; }
111   static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AliFilteredTreeEventCuts *const evtCuts, AliFilteredTreeAcceptanceCuts *const accCuts);
112
113   void SetFillTrees(Bool_t filltree) { fFillTree = filltree ;}
114   Bool_t GetFillTrees() { return fFillTree ;}
115
116   void FillHistograms(AliESDtrack* const ptrack, AliExternalTrackParam* const ptpcInnerC, Double_t centralityF, Double_t chi2TPCInnerC);
117
118  private:
119
120   AliESDEvent *fESD;    //! ESD event
121   AliMCEvent *fMC;      //! MC event
122   AliESDfriend *fESDfriend; //! ESDfriend event
123   TList* fOutput;       //! list send on output slot 0
124   TIterator *fPitList;  //! iterator over the output objetcs  
125
126   Bool_t fUseMCInfo;        // use MC information
127   Bool_t fUseESDfriends;    // use esd friends
128   Bool_t fReducePileUp;     // downscale the information for the pile-up TPC tracks
129   Bool_t fFillTree;         // do not fill trees
130
131   AliFilteredTreeEventCuts      *fFilteredTreeEventCuts;      // event cuts
132   AliFilteredTreeAcceptanceCuts *fFilteredTreeAcceptanceCuts; // acceptance cuts  
133   AliFilteredTreeAcceptanceCuts *fFilteredTreeRecAcceptanceCuts; // additional recontruction acceptance cuts (not used for MC truth)
134   AliESDtrackCuts *fEsdTrackCuts;          // esd track cuts
135   AliTriggerAnalysis::Trigger fTrigger;    // trigger settings
136   EAnalysisMode fAnalysisMode;   // analysis mode TPC only, TPC + ITS
137
138   TTreeSRedirector* fTreeSRedirector;      //! temp tree to dump output
139
140   TString fCentralityEstimator;     // use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC"
141
142   Double_t fLowPtTrackDownscaligF; // low pT track downscaling factor
143   Double_t fLowPtV0DownscaligF;    // low pT V0 downscaling factor
144   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)
145   Double_t fProcessAll; // Calculate all track properties including MC
146   
147   Bool_t fProcessCosmics; // look for cosmic pairs from random trigger
148   Bool_t fProcessITSTPCmatchOut;  // swittch to process ITS/TPC standalone tracks
149
150   TTree* fHighPtTree;       //! list send on output slot 0
151   TTree* fV0Tree;           //! list send on output slot 0
152   TTree* fdEdxTree;         //! list send on output slot 0
153   TTree* fLaserTree;        //! list send on output slot 0
154   TTree* fMCEffTree;        //! list send on output slot 0
155   TTree* fCosmicPairsTree;  //! list send on output slot 0
156
157   TH3D* fPtResPhiPtTPC;    //! sigma(pt)/pt vs Phi vs Pt for prim. TPC tracks
158   TH3D* fPtResPhiPtTPCc;   //! sigma(pt)/pt vs Phi vs Pt for prim. TPC contrained to vertex tracks
159   TH3D* fPtResPhiPtTPCITS; //! sigma(pt)/pt vs Phi vs Pt for prim. TPC+ITS tracks
160
161   TH3D* fPtResEtaPtTPC;    //! sigma(pt)/pt vs Eta vs Pt for prim. TPC tracks
162   TH3D* fPtResEtaPtTPCc;   //! sigma(pt)/pt vs Eta vs Pt for prim. TPC contrained to vertex tracks
163   TH3D* fPtResEtaPtTPCITS; //! sigma(pt)/pt vs Eta vs Pt for prim. TPC+ITS tracks
164
165   TH3D* fPtResCentPtTPC;    //! sigma(pt)/pt vs Cent vs Pt for prim. TPC tracks
166   TH3D* fPtResCentPtTPCc;   //! sigma(pt)/pt vs Cent vs Pt for prim. TPC contrained to vertex tracks
167   TH3D* fPtResCentPtTPCITS; //! sigma(pt)/pt vs Cent vs Pt for prim. TPC+ITS tracks
168   TObjString fCurrentFileName; // cached value of current file name
169   AliESDtrack* fDummyTrack; //! dummy track for tree init
170
171   AliAnalysisTaskFilteredTree(const AliAnalysisTaskFilteredTree&); // not implemented
172   AliAnalysisTaskFilteredTree& operator=(const AliAnalysisTaskFilteredTree&); // not implemented
173   ClassDef(AliAnalysisTaskFilteredTree, 1); // example of analysis
174 };
175
176 #endif