removed duplications in AlidNdPtHelper and AliPWG0Helper and small changes
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtCorrection.h
1 #ifndef ALIDEDPTCORRECTION_H
2 #define ALIDEDPTCORRECTION_H
3
4 //------------------------------------------------------------------------------
5 // AlidNdPtCorrection class:
6 //
7 // a. functionality:
8 // - applies corrections on dNdPt spectra
9 // - fills corrected dNdPt histograms
10 // - fills correction control histograms 
11 //
12 // b. data members:
13 // - dNdPt spectra before and after correction procedure
14 // - control histograms
15 // - correction matrices (must be loaded)
16 // 
17 // Author: J.Otwinowski 04/11/2008 
18 //------------------------------------------------------------------------------
19
20
21 class TFolder;
22 class TObjArray;
23 class TString;
24
25 class AliESDtrackCuts;
26 class AliVertexerTracks;
27 class AliESD;
28 class AliESDfriend;
29 class AliESDfriendTrack;
30
31 class AlidNdPtEventCuts;
32 class AlidNdPtAcceptanceCuts;
33 class AlidNdPtCorrection;
34 class AlidNdPt;
35 class AlidNdPtHelper;
36
37 #include "THnSparse.h"
38 #include "AlidNdPt.h"
39
40 class AlidNdPtCorrection : public AlidNdPt {
41 public :
42   AlidNdPtCorrection(); 
43   AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName="ala.root");
44   ~AlidNdPtCorrection();
45
46   // Init data members
47   virtual void Init();
48
49   // Process events
50   virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
51
52   // Merge output objects (needed by PROOF) 
53   virtual Long64_t Merge(TCollection* list);
54
55   // Analyse output histograms 
56   virtual void Analyse();
57
58   // Export objects to folder
59   virtual TFolder *ExportToFolder(TObjArray * array=0);
60
61   // Get analysis folder
62   TFolder* GetCorrectionFolder() {return fCorrectionFolder;}
63
64   // Create folder for analysed histograms
65   TFolder *CreateFolder(TString folder = "folderdNdPtCorrection",TString title = "Analysed dNdPt histograms");
66
67   // Fill histograms
68   void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t multRec);
69   void FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj, Int_t multRec);
70   void FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBRec);
71
72   // Get correction factors
73   Double_t GetCorrFactZvPtEta(THnSparse *const hist=0, Double_t zv =0, Double_t pt=0, Double_t eta=0) const;
74   Double_t GetContFactZvPtEta(THnSparse *const hist=0, Double_t zv =0, Double_t pt=0, Double_t eta=0) const;
75   Double_t GetCorrFactZvMult(THnSparse *const hist=0, Double_t zv =0, Int_t mult=0) const;
76   Double_t GetContFactZvMult(THnSparse *const hist=0, Double_t zv =0, Int_t mult=0) const;
77
78   // Getters
79   THnSparseF *GetMCAllEventMultHist1() {return fMCAllEventMultHist1;}; 
80   THnSparseF *GetMCAllNDEventMultHist1() {return fMCAllNDEventMultHist1;}; 
81   THnSparseF *GetMCAllNSDEventMultHist1() {return fMCAllNSDEventMultHist1;}; 
82   THnSparseF *GetMCTriggerMultHist1() {return fMCTriggerMultHist1;}; 
83   THnSparseF *GetMCEventMultHist1() {return fMCEventMultHist1;}; 
84
85   THnSparseF *GetMCAllPrimTrackMultHist1() {return fMCAllPrimTrackMultHist1;}; 
86   THnSparseF *GetMCNDEventAllPrimTrackMultHist1() {return fMCNDEventAllPrimTrackMultHist1;}; 
87   THnSparseF *GetMCNSDEventAllPrimTrackMultHist1() {return fMCNSDEventAllPrimTrackMultHist1;}; 
88   THnSparseF *GetMCTriggerPrimTrackMultHist1() {return fMCTriggerPrimTrackMultHist1;}; 
89   THnSparseF *GetMCEventPrimTrackMultHist1() {return fMCEventPrimTrackMultHist1;}; 
90
91   THnSparseF *GetCorrRecTrackMultHist1(Int_t i) {return fCorrRecTrackMultHist1[i];}
92   THnSparseF *GetCorrRecEventHist1(Int_t i) {return fCorrRecEventHist1[i];}
93   THnSparseF *GetCorrRecEventHist2(Int_t i) {return fCorrRecEventHist2[i];}
94
95   THnSparseF *GetPtvsPt(Int_t i) {return fPtvsPt[i];}
96
97   // correlation matrix
98   void SetEventMultCorrelationMatrix(THnSparseF *const matrix=0) {fEventMultCorrelationMatrix = matrix;}
99   THnSparseF *GetEventMultCorrelationMatrix() {return fEventMultCorrelationMatrix;}
100
101   //
102   void SetZvNorm(TH1D *const matrix=0) {fZvNorm = matrix;}
103   TH1D *GetZvNorm() {return fZvNorm;}
104
105   void SetZvEmptyEventsNorm(TH1D *const matrix=0) {fZvEmptyEventsNorm = matrix;}
106   TH1D *GetZvEmptyEventsNorm() {return fZvEmptyEventsNorm;}
107
108   // 
109   void SetCorrEventMatrix(THnSparseF *const matrix=0) {fCorrEventMatrix = matrix;}
110   THnSparseF *GetCorrEventMatrix() {return fCorrEventMatrix;}
111
112   void SetCorrTriggerMBtoInelEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelEventMatrix = matrix;}
113   THnSparseF *GetCorrTriggerMBtoInelEventMatrix() {return fCorrTriggerMBtoInelEventMatrix;}
114
115   void SetCorrTriggerMBtoNDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDEventMatrix = matrix;}
116   THnSparseF *GetCorrTriggerMBtoNDEventMatrix() {return fCorrTriggerMBtoNDEventMatrix;}
117
118   void SetCorrTriggerMBtoNSDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDEventMatrix = matrix;}
119   THnSparseF *GetCorrTriggerMBtoNSDEventMatrix() {return fCorrTriggerMBtoNSDEventMatrix;}
120
121   // 
122   void SetCorrTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTrackEventMatrix = matrix;}
123   THnSparseF *GetCorrTrackEventMatrix() {return fCorrTrackEventMatrix;}
124
125   void SetCorrTriggerMBtoInelTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelTrackEventMatrix = matrix;}
126   THnSparseF *GetCorrTriggerMBtoInelTrackEventMatrix() {return fCorrTriggerMBtoInelTrackEventMatrix;}
127
128   void SetCorrTriggerMBtoNDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDTrackEventMatrix = matrix;}
129   THnSparseF *GetCorrTriggerMBtoNDTrackEventMatrix() {return fCorrTriggerMBtoNDTrackEventMatrix;}
130
131   void SetCorrTriggerMBtoNSDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDTrackEventMatrix = matrix;}
132   THnSparseF *GetCorrTriggerMBtoNSDTrackEventMatrix() {return fCorrTriggerMBtoNSDTrackEventMatrix;}
133
134   void SetCorrTrackMatrix(THnSparseF *const matrix=0) {fCorrTrackMatrix = matrix;}
135   THnSparseF *GetCorrTrackMatrix() {return fCorrTrackMatrix;}
136
137   void SetContTrackMatrix(THnSparseF *const matrix=0) {fContTrackMatrix = matrix;}
138   THnSparseF *GetContTrackMatrix() {return fContTrackMatrix;}
139
140   void SetContMultTrackMatrix(THnSparseF *const matrix=0) {fContMultTrackMatrix = matrix;}
141   THnSparseF *GetContMultTrackMatrix() {return fContMultTrackMatrix;}
142
143   void SetCorrMatrixFileName(TString name="")    { fCorrMatrixFileName = name; }
144
145   Int_t GetTrueMult(THnSparse *const hist=0, Int_t mult=0);
146
147 private:
148
149   // analysis folder 
150   TFolder *fCorrectionFolder; // folder for analysed histograms
151
152   //
153   // event histograms
154   //
155   THnSparseF *fMCEventHist1;  //-> mcXv:mcYv:mcZv
156   THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv
157
158   // all MC events
159   THnSparseF *fMCAllEventMultHist1; //-> mcZv:multiplicity
160
161   // all ND MC events
162   THnSparseF *fMCAllNDEventMultHist1; //-> mcZv:multiplicity
163
164   // all NSD MC events
165   THnSparseF *fMCAllNSDEventMultHist1; //-> mcZv:multiplicity
166
167   // MC triggered events
168   THnSparseF *fMCTriggerMultHist1; //-> mcZv:multiplicity
169
170   // MC triggered and event vertex
171   THnSparseF *fMCEventMultHist1; //-> mcZv:multiplicity
172
173   //
174   // track histograms
175   //
176   
177   // all mc primary tracks in acceptance (INEL)
178   THnSparseF *fMCAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
179
180   // all mc primary tracks in acceptance (ND events)
181   THnSparseF *fMCNDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
182
183   // all mc primary tracks in acceptance (NSD events)
184   THnSparseF *fMCNSDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
185
186   //all mc primary tracks in acceptance (triggered events)
187   THnSparseF *fMCTriggerPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
188
189   //mc primary tracks in acceptance (triggered and event vertex reconstructed)
190   THnSparseF *fMCEventPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
191
192
193   // track histograms 
194   // [0]=all charged tracks, 
195   // [1]=[0]+fiducual volume, 
196   // [2]=[1]+after esd track cuts 
197   THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:Eta:Phi
198
199   // corrected track histograms 
200   // ([0]-not corrected,
201   // [1]=track cont.,
202   // [2]=[1]+track eff.,
203   // [3]=[2]+multple track,
204   // [4]=[3]+event vertex,
205   // [5]=[4]+trigger MBtoInel,
206   // [6]=[4]+trigger MBtoND, 
207   // [7]=[4]+trigger MBToNSD)
208   THnSparseF *fCorrRecTrackMultHist1[8]; //-> Pt:Eta:mult corrected histograms 
209
210   // pt vs pt to get proper pt bin (center of gravity)
211   THnSparseF *fPtvsPt[8]; //-> pt:pt 
212
213   // corrected event histograms
214   // [0]-not corrected, 
215   // [1]=event vertex, 
216   // [2]=[1]+trigger MBtoInel, 
217   // [3]=[1]+trigger MBtoND, 
218   // [4]=[1]+trigger MBtoNSD 
219   THnSparseF *fCorrRecEventHist1[5]; //-> mcZv:multMB 
220
221
222   // corrected event histograms (empty events)
223   // [0]=not corrected,
224   // [1]=trigger/trigger+vertex correction,
225   // [2]=[1]+trigger MBtoInel,
226   // [3]=[1]+trigger MBtoND,
227   // [4]=[1]+trigger MBtoNSD
228   THnSparseF *fCorrRecEventHist2[5]; //-> mcZv:multMB
229
230
231   // 
232   // correction matrices (histograms)
233   // must be loaded
234   //
235
236   // event rec. track vs true track multiplicity correlation matrix 
237   THnSparseF *fEventMultCorrelationMatrix; //-> mult:mult_true_tracks
238
239   // histograms needed for empty events corrections
240   TH1D *fZvNorm; //-> normalised reconstructed zv distribution
241   TH1D *fZvEmptyEventsNorm; //-> trigger/trigger+vertex empty event correction
242
243   // trigger bias corrections
244   THnSparseF *fCorrTriggerMBtoInelEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenEventMatrix)
245   THnSparseF *fCorrTriggerMBtoNDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNDEventMatrix)
246   THnSparseF *fCorrTriggerMBtoNSDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNSDEventMatrix)
247
248   // event vertex corrections
249   THnSparseF *fCorrEventMatrix;  //-> mcVz:mcPt:mcEta   (fRecEventMatrix/fTriggerEventMatrix)
250
251   // track-event trigger bias corrections
252   THnSparseF *fCorrTriggerMBtoInelTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventMatrix)
253   THnSparseF *fCorrTriggerMBtoNDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNDMatrix)
254   THnSparseF *fCorrTriggerMBtoNSDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNSDMatrix)
255
256   // track-event vertex corrections
257   THnSparseF *fCorrTrackEventMatrix;  //-> mcVz:mcPt:mcEta   (fRecTrackEventMatrix/fTriggerTrackEventMatrix)
258
259   // track-level corrections
260   THnSparseF *fCorrTrackMatrix;  //-> mcVz:mcPt:mcEta (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
261   THnSparseF *fContTrackMatrix;  //-> mcVz:mcPt:mcEta (fRecSecTrackMatrix / fRecTrackMatrix)
262   THnSparseF *fContMultTrackMatrix; //-> mcVz:mcPt:mcEta (fRecMultTrackMatrix / fRecTrackMatrix)
263   
264   TString fCorrMatrixFileName; // file with efficiency correction matrices
265   
266   AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
267   AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
268
269   ClassDef(AlidNdPtCorrection,1);
270 };
271
272 #endif