automatically write MC info into the trees when MC available
[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 AliESDVertex;
25 class AliStack;
26 class TList;
27 class TObjArray;
28 class TTree;
29 class TTreeSRedirector;
30 class TParticle;
31
32 #include "AliTriggerAnalysis.h"
33 #include "AliAnalysisTaskSE.h"
34
35 class AliAnalysisTaskFilteredTree : public AliAnalysisTaskSE {
36  public:
37
38   enum EAnalysisMode { kInvalidAnalysisMode=-1,
39                       kTPCITSAnalysisMode=0,
40                       kTPCAnalysisMode=1 };
41
42   AliAnalysisTaskFilteredTree(const char *name = "AliAnalysisTaskFilteredTree");
43   virtual ~AliAnalysisTaskFilteredTree();
44   
45   virtual void   UserCreateOutputObjects();
46   virtual void   UserExec(Option_t *option);
47   virtual void   Terminate(Option_t *);
48   virtual Bool_t Notify();
49   virtual void   FinishTaskOutput();
50   void SetUseMCInfo(Bool_t info)           { fUseMCInfo = info; }
51   Bool_t IsUseMCInfo() const               { return (fMC)?kTRUE:kFALSE; }
52   void SetUseESDfriends(Bool_t friends)    { fUseESDfriends = friends; }
53   Bool_t IsUseESDfriends() const              { return fUseESDfriends; }
54   
55   // Process events
56   void ProcessAll(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
57   void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
58   void ProcessV0(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
59   void ProcessdEdx(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
60   void ProcessLaser(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
61   void ProcessMCEff(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
62   void ProcessCosmics(AliESDEvent *const esdEvent=0); 
63
64   void SetEventCuts(AliFilteredTreeEventCuts* const cuts)              { fFilteredTreeEventCuts = cuts; }
65   void SetAcceptanceCuts(AliFilteredTreeAcceptanceCuts* const cuts)    { fFilteredTreeAcceptanceCuts = cuts; }
66   void SetRecAcceptanceCuts(AliFilteredTreeAcceptanceCuts* const cuts) { fFilteredTreeRecAcceptanceCuts = cuts; }
67   void SetTrackCuts(AliESDtrackCuts* const cuts)                { fEsdTrackCuts = cuts; }
68   void SetTrigger(const AliTriggerAnalysis::Trigger trigger)    { fTrigger = trigger; }
69   void SetAnalysisMode(const EAnalysisMode mode) { fAnalysisMode = mode; }
70
71   AliFilteredTreeEventCuts* GetEventCuts() const                       { return fFilteredTreeEventCuts; }
72   AliFilteredTreeAcceptanceCuts* GetAcceptanceCuts() const             { return fFilteredTreeAcceptanceCuts; }
73   AliFilteredTreeAcceptanceCuts* GetRecAcceptanceCuts() const          { return fFilteredTreeRecAcceptanceCuts; }  
74   AliESDtrackCuts* GetTrackCuts() const                         { return fEsdTrackCuts; }
75   AliTriggerAnalysis::Trigger GetTrigger() const                { return fTrigger; }
76   EAnalysisMode GetAnalysisMode() const          { return fAnalysisMode; }
77
78   TString GetCentralityEstimator() const {return fCentralityEstimator; }
79   void SetCentralityEstimator(TString centEst="V0M") { fCentralityEstimator = centEst; }
80
81   Bool_t IsFromConversion(const Int_t label, AliStack *const stack);
82   Bool_t IsFromMaterial(const Int_t label, AliStack *const stack);
83   Bool_t IsFromStrangeness(const Int_t label, AliStack *const stack);
84   TParticle *GetMother(TParticle *const particle, AliStack *const stack);
85
86   Bool_t ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3]);
87   Bool_t ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3]);
88
89   // v0s selection
90   Int_t  GetKFParticle(AliESDv0 *const v0, AliESDEvent * const event, AliKFParticle & kfparticle);
91   Bool_t IsV0Downscaled(AliESDv0 *const v0);
92   Bool_t IsHighDeDxParticle(AliESDtrack * const track);
93
94   void SetLowPtTrackDownscaligF(Double_t fact) { fLowPtTrackDownscaligF = fact; }
95   void SetLowPtV0DownscaligF(Double_t fact)    { fLowPtV0DownscaligF = fact; }
96   
97   void   SetProcessCosmics(Bool_t flag) { fProcessCosmics = flag; }
98   Bool_t GetProcessCosmics() { return fProcessCosmics; }
99
100   void SetProcessAll(Bool_t proc) { fProcessAll = proc; }
101   static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AliFilteredTreeEventCuts *const evtCuts, AliFilteredTreeAcceptanceCuts *const accCuts);
102
103  private:
104
105   AliESDEvent *fESD;    //! ESD event
106   AliMCEvent *fMC;      //! MC event
107   AliESDfriend *fESDfriend; //! ESDfriend event
108   TList* fOutput;       //! list send on output slot 0
109   TIterator *fPitList;  //! iterator over the output objetcs  
110
111   Bool_t fUseMCInfo;        // use MC information
112   Bool_t fUseESDfriends;        // use esd friends
113   Bool_t fReducePileUp;        // downscale the information for the pile-up TPC tracks
114
115   AliFilteredTreeEventCuts      *fFilteredTreeEventCuts;      // event cuts
116   AliFilteredTreeAcceptanceCuts *fFilteredTreeAcceptanceCuts; // acceptance cuts  
117   AliFilteredTreeAcceptanceCuts *fFilteredTreeRecAcceptanceCuts; // additional recontruction acceptance cuts (not used for MC truth)
118   AliESDtrackCuts *fEsdTrackCuts;          // esd track cuts
119   AliTriggerAnalysis::Trigger fTrigger;    // trigger settings
120   EAnalysisMode fAnalysisMode;   // analysis mode TPC only, TPC + ITS
121
122   TTreeSRedirector* fTreeSRedirector;      //! temp tree to dump output
123
124   TString fCentralityEstimator;     // use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC"
125
126   Double_t fLowPtTrackDownscaligF; // low pT track downscaling factor
127   Double_t fLowPtV0DownscaligF; // low pT V0 downscaling factor
128   Double_t fProcessAll; // Calculate all track properties including MC
129   
130   Bool_t fProcessCosmics; // look for cosmic pairs from random trigger
131   
132   TTree* fHighPtTree;       //! list send on output slot 0
133   TTree* fV0Tree;           //! list send on output slot 0
134   TTree* fdEdxTree;         //! list send on output slot 0
135   TTree* fLaserTree;        //! list send on output slot 0
136   TTree* fMCEffTree;        //! list send on output slot 0
137   TTree* fCosmicPairsTree;  //! list send on output slot 0
138
139   AliAnalysisTaskFilteredTree(const AliAnalysisTaskFilteredTree&); // not implemented
140   AliAnalysisTaskFilteredTree& operator=(const AliAnalysisTaskFilteredTree&); // not implemented
141   
142   ClassDef(AliAnalysisTaskFilteredTree, 1); // example of analysis
143 };
144
145 #endif