end-of-line normalization
[u/mrichter/AliRoot.git] / PWGPP / TPC / AliPerformanceObject.h
1 #ifndef ALIPERFORMANCEOBJECT_H
2 #define ALIPERFORMANCEOBJECT_H
3
4 //------------------------------------------------------------------------------
5 // Base class to keep information from comparison of 
6 // reconstructed and MC particle tracks.   
7 // 
8 // Author: J.Otwinowski 04/14/2008 
9 // Changes by M.Knichel 15/10/2010
10 //------------------------------------------------------------------------------
11
12 #include "TNamed.h"
13 #include "TFolder.h"
14 #include "THnSparse.h"
15
16 class TTree;
17 class AliMCEvent;
18 class AliESDEvent;
19 class AliRecInfoCuts;
20 class AliMCInfoCuts;
21 class AliESDfriend;
22 class AliESDVertex;
23
24 class AliPerformanceObject : public TNamed {
25 public :
26   AliPerformanceObject(); 
27   AliPerformanceObject(const char* name="AliPerformanceObject", const char* title="AliPerformanceObject", Int_t run=-1, Bool_t highMult=kFALSE); 
28   virtual ~AliPerformanceObject();
29
30   // Init data members
31   // call once before event loop
32   virtual void Init() = 0;
33   
34   // init for high multiplicity (PbPb) 
35   // to be called instead of Init()
36   virtual void InitHighMult();
37   
38   // Execute analysis
39   // call in the event loop 
40   virtual void Exec(AliMCEvent* const infoMC=0, AliESDEvent* const infoRC=0, AliESDfriend* const infoFriend=0, const Bool_t bUseMC=kFALSE, const Bool_t bUseESDfriend=kFALSE) = 0;
41
42   // Merge output objects (needed by PROOF) 
43   virtual Long64_t Merge(TCollection* const list=0) = 0;
44
45   // project to 1d,2d,3d
46   // is called from FinishTaskOuput() in AliPerformanceTask
47   virtual void Analyse() = 0;
48
49   // Get output folder for analysed histograms
50   virtual TFolder* GetAnalysisFolder() const = 0;
51   
52   // create a summary stored in a ttree 
53   // has to be implented
54   virtual TTree* CreateSummary() { return 0; }
55   
56   // project to 1d,2d,3d
57   // is called from Terminate() in AliPerformanceTask
58   // final spectra calculation
59   virtual void AnalyseFinal() { ; }
60
61   // 
62   virtual void SetAliRecInfoCuts(AliRecInfoCuts* const cuts=0) = 0;
63   virtual void SetAliMCInfoCuts(AliMCInfoCuts* const cuts=0) = 0; 
64
65   // set and get analysisMode
66   void SetAnalysisMode(const Int_t analysisMode=0) {fAnalysisMode = analysisMode;} 
67   Int_t GetAnalysisMode() const {return fAnalysisMode;}
68
69   // set and get hpt generator 
70   void SetHptGenerator(const Bool_t hptGenerator=kFALSE) {fHptGenerator = hptGenerator;}
71   Bool_t IsHptGenerator() const {return fHptGenerator;}
72
73   // draw all histograms from the folder
74   void PrintHisto(Bool_t logz = kTRUE, const Char_t * outFileName = "PerformanceQAHisto.ps"); 
75
76   // create log axis 
77   Double_t *CreateLogAxis(Int_t nbins, Double_t xmin, Double_t xmax); 
78
79   // trigger class selection
80   void SetTriggerClass(const Char_t *triggerClass) { fTriggerClass = triggerClass; }
81   const Char_t* GetTriggerClass() const { return fTriggerClass; }
82
83   // use track vertex
84   void SetUseTrackVertex(Bool_t trackVtx = kTRUE) { fUseTrackVertex = trackVtx; }
85   Bool_t IsUseTrackVertex() { return fUseTrackVertex; }
86   
87   Bool_t IsHighMultiplicity() { return fHighMultiplicity; }  
88   
89   // merging of thnsparse
90   Bool_t GetMergeTHnSparseObj() { return fMergeTHnSparseObj; }
91   void SetMergeTHnSparseObj(Bool_t merge) {fMergeTHnSparseObj = merge; }  
92   
93   void SetRunNumber(Int_t run) { fRunNumber = run; }
94   Int_t GetRunNumber() const { return fRunNumber; }
95
96   // use kink daughters
97   void SetUseKinkDaughters(Bool_t kinkDaughters = kTRUE) { fUseKinkDaughters = kinkDaughters; }
98   Bool_t IsUseKinkDaughters() { return fUseKinkDaughters; }
99
100   // Centrality bin to be used
101   void  SetUseCentralityBin(Int_t bin) { fUseCentralityBin = bin; }
102   Int_t GetUseCentralityBin()          { return fUseCentralityBin; }
103
104   // use tof bunch crossing
105   void SetUseTOFBunchCrossing(Bool_t tofBunching = kTRUE) { fUseTOFBunchCrossing = tofBunching; }
106   Bool_t IsUseTOFBunchCrossing() { return fUseTOFBunchCrossing; }
107
108 protected: 
109
110   void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, TString* selString = 0);
111   void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, Int_t yDim, TString* selString = 0);
112   void AddProjection(TObjArray* aFolderObj, TString nameSparse, THnSparse *hSparse, Int_t xDim, Int_t yDim, Int_t zDim, TString* selString = 0);
113
114   // merge THnSparse
115   Bool_t fMergeTHnSparseObj;
116   
117   // analysis mode
118   Int_t fAnalysisMode;  // 0-TPC, 1-TPCITS, 2-Constrained, 3-TPC inner wall, 4-TPC outer wall
119
120   Int_t fRunNumber;
121
122   // hpt generator
123   Bool_t fHptGenerator; // hpt event generator
124
125   // trigger class
126   const Char_t * fTriggerClass;
127
128   // use track vertex
129   Bool_t fUseTrackVertex; // use track vertex
130   
131   // PbPb mode?
132   Bool_t fHighMultiplicity; // flag to switch between pp and PbPb  
133
134   Bool_t fUseKinkDaughters; // use kink daughthers, default is yes
135
136   Int_t  fUseCentralityBin;  // centrality bin to be used 
137
138   Bool_t fUseTOFBunchCrossing; // use TOFBunchCrossing, default is yes
139
140   AliPerformanceObject(const AliPerformanceObject&); // not implemented
141   AliPerformanceObject& operator=(const AliPerformanceObject&); // not implemented
142
143   ClassDef(AliPerformanceObject,7);
144 };
145
146 #endif