Fix in AliTrackerBase::PropagateTo... routines: length integral was not correctly...
[u/mrichter/AliRoot.git] / PWGUD / dNdPt / AlidNdPtCorrection.h
1 #ifndef ALIDNDPTCORRECTION_H
2 #define ALIDNDPTCORRECTION_H
3
4 //------------------------------------------------------------------------------
5 // AlidNdPtCorrection class to correct and
6 // normalised dNdPt spectra. 
7 //
8 // Author: J.Otwinowski 04/11/2008 
9 //------------------------------------------------------------------------------
10
11 class iostream;
12 class TFile;
13 class TCint;
14 class TFolder;
15 class TObjArray;
16 class TString;
17 class THnSparse;
18
19 class AliESDtrackCuts;
20 class AliVertexerTracks;
21 class AliESD;
22 class AliESDfriend;
23 class AliESDfriendTrack;
24
25 class AlidNdPtEventCuts;
26 class AlidNdPtAcceptanceCuts;
27 class AlidNdPtCorrection;
28 class AlidNdPt;
29 class AlidNdPtHelper;
30
31 #include "AlidNdPt.h"
32
33 class AlidNdPtCorrection : public AlidNdPt {
34 public :
35   AlidNdPtCorrection(); 
36   AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName="ala.root");
37   ~AlidNdPtCorrection();
38
39   // Init data members
40   virtual void Init();
41
42   // Process events
43   virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
44
45   // Merge output objects (needed by PROOF) 
46   virtual Long64_t Merge(TCollection* const list);
47
48   // Analyse output histograms 
49   virtual void Analyse();
50
51   // Export objects to folder
52   virtual TFolder *ExportToFolder(TObjArray * const array=0);
53
54   // Get analysis folder
55   TFolder* GetCorrectionFolder() const {return fCorrectionFolder;}
56
57   // Create folder for analysed histograms
58   TFolder *CreateFolder(TString folder = "folderdNdPtCorrection",TString title = "Analysed dNdPt histograms");
59
60   // Fill histograms
61   void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj, Double_t zv, Int_t multRec, Int_t trueMult) const;
62   void FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj, Int_t multRec) const;
63   void FillHistograms(AlidNdPtHelper::EventObject eventObj, Double_t zv, Int_t multMBRec) const;
64
65   // Get correction factors
66   Double_t GetCorrFactZvPtEta(THnSparse *const hist=0, Double_t zv =0, Double_t pt=0, Double_t eta=0) const;
67   Double_t GetContFactZvPtEta(THnSparse *const hist=0, Double_t zv =0, Double_t pt=0, Double_t eta=0) const;
68   Double_t GetCorrFactZvMult(THnSparse *const hist=0, Double_t zv =0, Int_t mult=0) const;
69   Double_t GetContFactZvMult(THnSparse *const hist=0, Double_t zv =0, Int_t mult=0) const;
70
71   // Getters
72   THnSparseF *GetMCEventHist1() const { return fMCEventHist1;};
73   THnSparseF *GetRecEventHist1() const { return fRecEventHist1;};
74   THnSparseF *GetRecEventMultHist1() const { return fRecEventMultHist1;};
75
76   THnSparseF *GetMCAllEventMultHist1() const {return fMCAllEventMultHist1;}; 
77   THnSparseF *GetMCAllNDEventMultHist1() const {return fMCAllNDEventMultHist1;}; 
78   THnSparseF *GetMCAllNSDEventMultHist1() const {return fMCAllNSDEventMultHist1;}; 
79   THnSparseF *GetMCTriggerMultHist1() const {return fMCTriggerMultHist1;}; 
80   THnSparseF *GetMCEventMultHist1() const {return fMCEventMultHist1;}; 
81
82   THnSparseF *GetMCAllPrimTrackMultHist1() const {return fMCAllPrimTrackMultHist1;}; 
83   THnSparseF *GetMCNDEventAllPrimTrackMultHist1() const {return fMCNDEventAllPrimTrackMultHist1;}; 
84   THnSparseF *GetMCNSDEventAllPrimTrackMultHist1() const {return fMCNSDEventAllPrimTrackMultHist1;}; 
85   THnSparseF *GetMCTriggerPrimTrackMultHist1() const {return fMCTriggerPrimTrackMultHist1;}; 
86   THnSparseF *GetMCEventPrimTrackMultHist1() const {return fMCEventPrimTrackMultHist1;}; 
87
88   THnSparseF *GetMCAllPrimTrackTrueMultHist1() const {return fMCAllPrimTrackTrueMultHist1;}; 
89   THnSparseF *GetMCNDEventAllPrimTrackTrueMultHist1() const {return fMCNDEventAllPrimTrackTrueMultHist1;}; 
90   THnSparseF *GetMCNSDEventAllPrimTrackTrueMultHist1() const {return fMCNSDEventAllPrimTrackTrueMultHist1;}; 
91   THnSparseF *GetMCTriggerPrimTrackTrueMultHist1() const {return fMCTriggerPrimTrackTrueMultHist1;}; 
92   THnSparseF *GetMCEventPrimTrackTrueMultHist1() const {return fMCEventPrimTrackTrueMultHist1;}; 
93
94   THnSparseF *GetMCAllPrimTrackTrueMultHist2() const {return fMCAllPrimTrackTrueMultHist2;}; 
95   THnSparseF *GetMCNDEventAllPrimTrackTrueMultHist2() const {return fMCNDEventAllPrimTrackTrueMultHist2;}; 
96   THnSparseF *GetMCNSDEventAllPrimTrackTrueMultHist2() const {return fMCNSDEventAllPrimTrackTrueMultHist2;}; 
97   THnSparseF *GetMCTriggerPrimTrackTrueMultHist2() const {return fMCTriggerPrimTrackTrueMultHist2;}; 
98   THnSparseF *GetMCEventPrimTrackTrueMultHist2() const {return fMCEventPrimTrackTrueMultHist2;}; 
99
100   THnSparseF *GetMCAllPrimTrackMeanPtMult1() const {return fMCAllPrimTrackMeanPtMult1;}; 
101   THnSparseF *GetMCNDEventAllPrimTrackMeanPtMult1() const {return fMCNDEventAllPrimTrackMeanPtMult1;}; 
102   THnSparseF *GetMCNSDEventAllPrimTrackMeanPtMult1() const {return fMCNSDEventAllPrimTrackMeanPtMult1;}; 
103   THnSparseF *GetMCTriggerPrimTrackMeanPtMult1() const {return fMCTriggerPrimTrackMeanPtMult1;}; 
104   THnSparseF *GetMCEventPrimTrackMeanPtMult1() const {return fMCEventPrimTrackMeanPtMult1;}; 
105
106   THnSparseF *GetMCAllPrimTrackMeanPtTrueMult1() const {return fMCAllPrimTrackMeanPtTrueMult1;}; 
107   THnSparseF *GetMCNDEventAllPrimTrackMeanPtTrueMult1() const {return fMCNDEventAllPrimTrackMeanPtTrueMult1;}; 
108   THnSparseF *GetMCNSDEventAllPrimTrackMeanPtTrueMult1() const {return fMCNSDEventAllPrimTrackMeanPtTrueMult1;}; 
109   THnSparseF *GetMCTriggerPrimTrackMeanPtTrueMult1() const {return fMCTriggerPrimTrackMeanPtTrueMult1;}; 
110   THnSparseF *GetMCEventPrimTrackMeanPtTrueMult1() const {return fMCEventPrimTrackMeanPtTrueMult1;};
111
112   THnSparseF *GetCorrRecTrackMultHist1(Int_t i) const {return fCorrRecTrackMultHist1[i];}
113   THnSparseF *GetCorrRecTrackTrueMultHist1(Int_t i) const {return fCorrRecTrackTrueMultHist1[i];}
114   THnSparseF *GetCorrRecTrackTrueMultHist2(Int_t i) const {return fCorrRecTrackTrueMultHist2[i];}
115   THnSparseF *GetCorrRecTrackMeanPtMultHist1(Int_t i) const {return fCorrRecTrackMeanPtMultHist1[i];}
116   THnSparseF *GetCorrRecTrackMeanPtTrueMultHist1(Int_t i) const {return fCorrRecTrackMeanPtTrueMultHist1[i];}
117   THnSparseF *GetCorrRecTrackPt1(Int_t i) const {return fCorrRecTrackPt1[i];}
118
119   THnSparseF *GetCorrRecEventHist1(Int_t i) const {return fCorrRecEventHist1[i];}
120   THnSparseF *GetCorrRecEventHist2(Int_t i) const {return fCorrRecEventHist2[i];}
121
122   THnSparseF *GetEventCount()   const {return fEventCount;}
123
124   // correlation matrix
125   void SetEventMultCorrelationMatrix(THnSparseF *const matrix=0) {fEventMultCorrelationMatrix = matrix;}
126   THnSparseF *GetEventMultCorrelationMatrix() const {return fEventMultCorrelationMatrix;}
127
128   //
129   void SetZvNorm(TH1D *const matrix=0) {fZvNorm = matrix;}
130   TH1D *GetZvNorm() const {return fZvNorm;}
131
132   void SetZvEmptyEventsNorm(TH1D *const matrix=0) {fZvEmptyEventsNorm = matrix;}
133   TH1D *GetZvEmptyEventsNorm() const {return fZvEmptyEventsNorm;}
134
135   void SetLHCBin0Background(TH1D *const matrix=0) {fLHCBin0Background = matrix;}
136   TH1D *GetLHCBin0Background() const {return fLHCBin0Background;}
137   // 
138   void SetCorrEventMatrix(THnSparseF *const matrix=0) {fCorrEventMatrix = matrix;}
139   THnSparseF *GetCorrEventMatrix() const {return fCorrEventMatrix;}
140
141   void SetCorrTriggerMBtoInelEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelEventMatrix = matrix;}
142   THnSparseF *GetCorrTriggerMBtoInelEventMatrix() const {return fCorrTriggerMBtoInelEventMatrix;}
143
144   void SetCorrTriggerMBtoNDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDEventMatrix = matrix;}
145   THnSparseF *GetCorrTriggerMBtoNDEventMatrix() const {return fCorrTriggerMBtoNDEventMatrix;}
146
147   void SetCorrTriggerMBtoNSDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDEventMatrix = matrix;}
148   THnSparseF *GetCorrTriggerMBtoNSDEventMatrix() const {return fCorrTriggerMBtoNSDEventMatrix;}
149
150   // 
151   void SetCorrTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTrackEventMatrix = matrix;}
152   THnSparseF *GetCorrTrackEventMatrix() const {return fCorrTrackEventMatrix;}
153
154   void SetCorrTriggerMBtoInelTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelTrackEventMatrix = matrix;}
155   THnSparseF *GetCorrTriggerMBtoInelTrackEventMatrix() const {return fCorrTriggerMBtoInelTrackEventMatrix;}
156
157   void SetCorrTriggerMBtoNDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDTrackEventMatrix = matrix;}
158   THnSparseF *GetCorrTriggerMBtoNDTrackEventMatrix() const {return fCorrTriggerMBtoNDTrackEventMatrix;}
159
160   void SetCorrTriggerMBtoNSDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDTrackEventMatrix = matrix;}
161   THnSparseF *GetCorrTriggerMBtoNSDTrackEventMatrix() const {return fCorrTriggerMBtoNSDTrackEventMatrix;}
162
163   void SetCorrTrackMatrix(THnSparseF *const matrix=0) {fCorrTrackMatrix = matrix;}
164   THnSparseF *GetCorrTrackMatrix() const {return fCorrTrackMatrix;}
165
166   void SetCorrHighPtTrackMatrix(THnSparseF *const matrix=0) {fCorrHighPtTrackMatrix = matrix;}
167   THnSparseF *GetCorrHighPtTrackMatrix() const {return fCorrHighPtTrackMatrix;}
168
169   void SetContTrackMatrix(THnSparseF *const matrix=0) {fContTrackMatrix = matrix;}
170   THnSparseF *GetContTrackMatrix() const {return fContTrackMatrix;}
171
172   void SetContMultTrackMatrix(THnSparseF *const matrix=0) {fContMultTrackMatrix = matrix;}
173   THnSparseF *GetContMultTrackMatrix() const {return fContMultTrackMatrix;}
174
175   void SetCorrMatrixFileName(TString name="")    { fCorrMatrixFileName = name; }
176
177   Int_t GetTrueMult(THnSparse *const hist=0, Int_t mult=0) const;
178
179 private:
180
181   // analysis folder 
182   TFolder *fCorrectionFolder; // folder for analysed histograms
183
184   //
185   // event histograms
186   //
187   THnSparseF *fMCEventHist1;  //-> mcXv:mcYv:mcZv
188   THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv
189   THnSparseF *fRecEventMultHist1; //-> track multiplicity:tracklet multiplicity
190
191   // all MC events
192   THnSparseF *fMCAllEventMultHist1; //-> mcZv:multiplicity
193
194   // all ND MC events
195   THnSparseF *fMCAllNDEventMultHist1; //-> mcZv:multiplicity
196
197   // all NSD MC events
198   THnSparseF *fMCAllNSDEventMultHist1; //-> mcZv:multiplicity
199
200   // MC triggered events
201   THnSparseF *fMCTriggerMultHist1; //-> mcZv:multiplicity
202
203   // MC triggered and event vertex
204   THnSparseF *fMCEventMultHist1; //-> mcZv:multiplicity
205
206   //
207   // track histograms
208   //
209   
210   // all mc primary tracks in acceptance (INEL)
211   THnSparseF *fMCAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
212
213   // all mc primary tracks in acceptance (ND events)
214   THnSparseF *fMCNDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
215
216   // all mc primary tracks in acceptance (NSD events)
217   THnSparseF *fMCNSDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
218
219   // all mc primary tracks in acceptance (triggered events)
220   THnSparseF *fMCTriggerPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
221
222   // mc primary tracks in acceptance (triggered and event vertex reconstructed)
223   THnSparseF *fMCEventPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
224
225   // true multiplicity 
226   THnSparseF *fMCAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
227   THnSparseF *fMCNDEventAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
228   THnSparseF *fMCNSDEventAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
229   THnSparseF *fMCTriggerPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
230   THnSparseF *fMCEventPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
231
232   // mcPT multiplicity vs true multiplicity 
233   THnSparseF *fMCAllPrimTrackTrueMultHist2; //-> mcPt:multiplicity:true multiplicity
234   THnSparseF *fMCNDEventAllPrimTrackTrueMultHist2; //-> mcPt:multiplicity:true multiplicity
235   THnSparseF *fMCNSDEventAllPrimTrackTrueMultHist2; //-> mcPt:multiplicity:true multiplicity
236   THnSparseF *fMCTriggerPrimTrackTrueMultHist2; //-> mcPt:multiplicity:true multiplicity
237   THnSparseF *fMCEventPrimTrackTrueMultHist2; //-> mcPt:multiplicity:true multiplicity
238
239
240   //
241   // mc <pt> from the event
242   //
243
244   THnSparseF *fMCAllPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity
245   THnSparseF *fMCNDEventAllPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity
246   THnSparseF *fMCNSDEventAllPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity
247   THnSparseF *fMCTriggerPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity
248   THnSparseF *fMCEventPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity
249
250   // true multiplicity 
251
252   THnSparseF *fMCAllPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity
253   THnSparseF *fMCNDEventAllPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity
254   THnSparseF *fMCNSDEventAllPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity
255   THnSparseF *fMCTriggerPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity
256   THnSparseF *fMCEventPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity
257
258
259   // track histograms 
260   // [0]=all charged tracks, 
261   // [1]=[0]+fiducual volume, 
262   // [2]=[1]+after esd track cuts 
263   THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:Eta:Phi
264
265   // corrected track histograms 
266   // ([0]-not corrected,
267   // [1]=track cont.,
268   // [2]=[1]+track eff.,
269   // [3]=[2]+multple track,
270   // [4]=[3]+event vertex,
271   // [5]=[4]+trigger MBtoInel,
272   // [6]=[4]+trigger MBtoND, 
273   // [7]=[4]+trigger MBToNSD)
274   THnSparseF *fCorrRecTrackMultHist1[8]; //-> Pt:Eta:mult corrected histograms 
275   THnSparseF *fCorrRecTrackTrueMultHist1[8]; //-> Pt:Eta:trueMult corrected histograms
276   THnSparseF *fCorrRecTrackTrueMultHist2[8]; //-> Pt:mult:trueMult corrected histograms
277
278   // <pt> vs multiplicity from the event
279   THnSparseF *fCorrRecTrackMeanPtMultHist1[8]; //-> <Pt>:mult corrected histograms
280   THnSparseF *fCorrRecTrackMeanPtTrueMultHist1[8]; //-> <Pt>:trueMult corrected histograms
281
282   THnSparseF *fCorrRecTrackPt1[8]; //-> Pt corrected histograms in the event (helper histograms)
283
284   // corrected event histograms
285   // [0]-not corrected, 
286   // [1]=event vertex, 
287   // [2]=[1]+trigger MBtoInel, 
288   // [3]=[1]+trigger MBtoND, 
289   // [4]=[1]+trigger MBtoNSD 
290   THnSparseF *fCorrRecEventHist1[5]; //-> mcZv:multMB 
291
292
293   // corrected event histograms (empty events)
294   // [0]=not corrected,
295   // [1]=trigger/trigger+vertex correction,
296   // [2]=[1]+trigger MBtoInel,
297   // [3]=[1]+trigger MBtoND,
298   // [4]=[1]+trigger MBtoNSD
299   THnSparseF *fCorrRecEventHist2[5]; //-> mcZv:multMB
300
301
302   // 
303   // correction matrices (histograms)
304   // must be loaded
305   //
306
307   // event rec. track vs true track multiplicity correlation matrix 
308   THnSparseF *fEventMultCorrelationMatrix; //-> mult:mult_true_tracks
309
310   // histograms needed for empty events corrections
311   TH1D *fZvNorm; //-> normalised reconstructed zv distribution
312   TH1D *fZvEmptyEventsNorm; //-> trigger/trigger+vertex empty event correction
313
314   // LHC background correction in 0-bin
315   TH1D *fLHCBin0Background; //-> good / accepted in the 0-bin
316
317   // trigger bias corrections
318   THnSparseF *fCorrTriggerMBtoInelEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenEventMatrix)
319   THnSparseF *fCorrTriggerMBtoNDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNDEventMatrix)
320   THnSparseF *fCorrTriggerMBtoNSDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNSDEventMatrix)
321
322   // event vertex corrections
323   THnSparseF *fCorrEventMatrix;  //-> mcVz:mcPt:mcEta   (fRecEventMatrix/fTriggerEventMatrix)
324
325   // track-event trigger bias corrections
326   THnSparseF *fCorrTriggerMBtoInelTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventMatrix)
327   THnSparseF *fCorrTriggerMBtoNDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNDMatrix)
328   THnSparseF *fCorrTriggerMBtoNSDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNSDMatrix)
329
330   // track-event vertex corrections
331   THnSparseF *fCorrTrackEventMatrix;  //-> mcVz:mcPt:mcEta   (fRecTrackEventMatrix/fTriggerTrackEventMatrix)
332
333   // track-level corrections
334   THnSparseF *fCorrTrackMatrix;  //-> mcVz:mcPt:mcEta (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
335   THnSparseF *fCorrHighPtTrackMatrix;  //-> mcVz:mcPt:mcEta (fRecPrimTrackMatrix / fGenPrimTrackMatrix high pt tracks)
336   THnSparseF *fContTrackMatrix;  //-> mcVz:mcPt:mcEta (fRecSecTrackMatrix / fRecTrackMatrix)
337   THnSparseF *fContMultTrackMatrix; //-> mcVz:mcPt:mcEta (fRecMultTrackMatrix / fRecTrackMatrix)
338   
339   TString fCorrMatrixFileName; // file with efficiency correction matrices
340
341   //  deta, dphi, pt1 for cosmics
342   THnSparseF *fCosmicsHisto; //-> deta:dphi:pt
343   
344   THnSparseF *fEventCount; //-> trig, trig + vertex, selected event
345
346   AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
347   AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
348
349   ClassDef(AlidNdPtCorrection,3);
350 };
351
352 #endif