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