]>
Commit | Line | Data |
---|---|---|
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 *GetMCAllEventMultHist1() const {return fMCAllEventMultHist1;}; | |
73 | THnSparseF *GetMCAllNDEventMultHist1() const {return fMCAllNDEventMultHist1;}; | |
74 | THnSparseF *GetMCAllNSDEventMultHist1() const {return fMCAllNSDEventMultHist1;}; | |
75 | THnSparseF *GetMCTriggerMultHist1() const {return fMCTriggerMultHist1;}; | |
76 | THnSparseF *GetMCEventMultHist1() const {return fMCEventMultHist1;}; | |
77 | ||
78 | THnSparseF *GetMCAllPrimTrackMultHist1() const {return fMCAllPrimTrackMultHist1;}; | |
79 | THnSparseF *GetMCNDEventAllPrimTrackMultHist1() const {return fMCNDEventAllPrimTrackMultHist1;}; | |
80 | THnSparseF *GetMCNSDEventAllPrimTrackMultHist1() const {return fMCNSDEventAllPrimTrackMultHist1;}; | |
81 | THnSparseF *GetMCTriggerPrimTrackMultHist1() const {return fMCTriggerPrimTrackMultHist1;}; | |
82 | THnSparseF *GetMCEventPrimTrackMultHist1() const {return fMCEventPrimTrackMultHist1;}; | |
83 | ||
84 | THnSparseF *GetMCAllPrimTrackTrueMultHist1() const {return fMCAllPrimTrackTrueMultHist1;}; | |
85 | THnSparseF *GetMCNDEventAllPrimTrackTrueMultHist1() const {return fMCNDEventAllPrimTrackTrueMultHist1;}; | |
86 | THnSparseF *GetMCNSDEventAllPrimTrackTrueMultHist1() const {return fMCNSDEventAllPrimTrackTrueMultHist1;}; | |
87 | THnSparseF *GetMCTriggerPrimTrackTrueMultHist1() const {return fMCTriggerPrimTrackTrueMultHist1;}; | |
88 | THnSparseF *GetMCEventPrimTrackTrueMultHist1() const {return fMCEventPrimTrackTrueMultHist1;}; | |
89 | ||
90 | ||
91 | THnSparseF *GetMCAllPrimTrackMeanPtMult1() const {return fMCAllPrimTrackMeanPtMult1;}; | |
92 | THnSparseF *GetMCNDEventAllPrimTrackMeanPtMult1() const {return fMCNDEventAllPrimTrackMeanPtMult1;}; | |
93 | THnSparseF *GetMCNSDEventAllPrimTrackMeanPtMult1() const {return fMCNSDEventAllPrimTrackMeanPtMult1;}; | |
94 | THnSparseF *GetMCTriggerPrimTrackMeanPtMult1() const {return fMCTriggerPrimTrackMeanPtMult1;}; | |
95 | THnSparseF *GetMCEventPrimTrackMeanPtMult1() const {return fMCEventPrimTrackMeanPtMult1;}; | |
96 | ||
97 | THnSparseF *GetMCAllPrimTrackMeanPtTrueMult1() const {return fMCAllPrimTrackMeanPtTrueMult1;}; | |
98 | THnSparseF *GetMCNDEventAllPrimTrackMeanPtTrueMult1() const {return fMCNDEventAllPrimTrackMeanPtTrueMult1;}; | |
99 | THnSparseF *GetMCNSDEventAllPrimTrackMeanPtTrueMult1() const {return fMCNSDEventAllPrimTrackMeanPtTrueMult1;}; | |
100 | THnSparseF *GetMCTriggerPrimTrackMeanPtTrueMult1() const {return fMCTriggerPrimTrackMeanPtTrueMult1;}; | |
101 | THnSparseF *GetMCEventPrimTrackMeanPtTrueMult1() const {return fMCEventPrimTrackMeanPtTrueMult1;}; | |
102 | ||
103 | THnSparseF *GetCorrRecTrackMultHist1(Int_t i) const {return fCorrRecTrackMultHist1[i];} | |
104 | THnSparseF *GetCorrRecTrackTrueMultHist1(Int_t i) const {return fCorrRecTrackTrueMultHist1[i];} | |
105 | THnSparseF *GetCorrRecTrackMeanPtMultHist1(Int_t i) const {return fCorrRecTrackMeanPtMultHist1[i];} | |
106 | THnSparseF *GetCorrRecTrackMeanPtTrueMultHist1(Int_t i) const {return fCorrRecTrackMeanPtTrueMultHist1[i];} | |
107 | THnSparseF *GetCorrRecTrackPt1(Int_t i) const {return fCorrRecTrackPt1[i];} | |
108 | ||
109 | THnSparseF *GetCorrRecEventHist1(Int_t i) const {return fCorrRecEventHist1[i];} | |
110 | THnSparseF *GetCorrRecEventHist2(Int_t i) const {return fCorrRecEventHist2[i];} | |
111 | ||
112 | ||
113 | // correlation matrix | |
114 | void SetEventMultCorrelationMatrix(THnSparseF *const matrix=0) {fEventMultCorrelationMatrix = matrix;} | |
115 | THnSparseF *GetEventMultCorrelationMatrix() const {return fEventMultCorrelationMatrix;} | |
116 | ||
117 | // | |
118 | void SetZvNorm(TH1D *const matrix=0) {fZvNorm = matrix;} | |
119 | TH1D *GetZvNorm() const {return fZvNorm;} | |
120 | ||
121 | void SetZvEmptyEventsNorm(TH1D *const matrix=0) {fZvEmptyEventsNorm = matrix;} | |
122 | TH1D *GetZvEmptyEventsNorm() const {return fZvEmptyEventsNorm;} | |
123 | ||
124 | // | |
125 | void SetCorrEventMatrix(THnSparseF *const matrix=0) {fCorrEventMatrix = matrix;} | |
126 | THnSparseF *GetCorrEventMatrix() const {return fCorrEventMatrix;} | |
127 | ||
128 | void SetCorrTriggerMBtoInelEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelEventMatrix = matrix;} | |
129 | THnSparseF *GetCorrTriggerMBtoInelEventMatrix() const {return fCorrTriggerMBtoInelEventMatrix;} | |
130 | ||
131 | void SetCorrTriggerMBtoNDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDEventMatrix = matrix;} | |
132 | THnSparseF *GetCorrTriggerMBtoNDEventMatrix() const {return fCorrTriggerMBtoNDEventMatrix;} | |
133 | ||
134 | void SetCorrTriggerMBtoNSDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDEventMatrix = matrix;} | |
135 | THnSparseF *GetCorrTriggerMBtoNSDEventMatrix() const {return fCorrTriggerMBtoNSDEventMatrix;} | |
136 | ||
137 | // | |
138 | void SetCorrTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTrackEventMatrix = matrix;} | |
139 | THnSparseF *GetCorrTrackEventMatrix() const {return fCorrTrackEventMatrix;} | |
140 | ||
141 | void SetCorrTriggerMBtoInelTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelTrackEventMatrix = matrix;} | |
142 | THnSparseF *GetCorrTriggerMBtoInelTrackEventMatrix() const {return fCorrTriggerMBtoInelTrackEventMatrix;} | |
143 | ||
144 | void SetCorrTriggerMBtoNDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDTrackEventMatrix = matrix;} | |
145 | THnSparseF *GetCorrTriggerMBtoNDTrackEventMatrix() const {return fCorrTriggerMBtoNDTrackEventMatrix;} | |
146 | ||
147 | void SetCorrTriggerMBtoNSDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDTrackEventMatrix = matrix;} | |
148 | THnSparseF *GetCorrTriggerMBtoNSDTrackEventMatrix() const {return fCorrTriggerMBtoNSDTrackEventMatrix;} | |
149 | ||
150 | void SetCorrTrackMatrix(THnSparseF *const matrix=0) {fCorrTrackMatrix = matrix;} | |
151 | THnSparseF *GetCorrTrackMatrix() const {return fCorrTrackMatrix;} | |
152 | ||
153 | void SetCorrHighPtTrackMatrix(THnSparseF *const matrix=0) {fCorrHighPtTrackMatrix = matrix;} | |
154 | THnSparseF *GetCorrHighPtTrackMatrix() const {return fCorrHighPtTrackMatrix;} | |
155 | ||
156 | void SetContTrackMatrix(THnSparseF *const matrix=0) {fContTrackMatrix = matrix;} | |
157 | THnSparseF *GetContTrackMatrix() const {return fContTrackMatrix;} | |
158 | ||
159 | void SetContMultTrackMatrix(THnSparseF *const matrix=0) {fContMultTrackMatrix = matrix;} | |
160 | THnSparseF *GetContMultTrackMatrix() const {return fContMultTrackMatrix;} | |
161 | ||
162 | void SetCorrMatrixFileName(TString name="") { fCorrMatrixFileName = name; } | |
163 | ||
164 | Int_t GetTrueMult(THnSparse *const hist=0, Int_t mult=0) const; | |
165 | ||
166 | private: | |
167 | ||
168 | // analysis folder | |
169 | TFolder *fCorrectionFolder; // folder for analysed histograms | |
170 | ||
171 | // | |
172 | // event histograms | |
173 | // | |
174 | THnSparseF *fMCEventHist1; //-> mcXv:mcYv:mcZv | |
175 | THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv | |
176 | ||
177 | // all MC events | |
178 | THnSparseF *fMCAllEventMultHist1; //-> mcZv:multiplicity | |
179 | ||
180 | // all ND MC events | |
181 | THnSparseF *fMCAllNDEventMultHist1; //-> mcZv:multiplicity | |
182 | ||
183 | // all NSD MC events | |
184 | THnSparseF *fMCAllNSDEventMultHist1; //-> mcZv:multiplicity | |
185 | ||
186 | // MC triggered events | |
187 | THnSparseF *fMCTriggerMultHist1; //-> mcZv:multiplicity | |
188 | ||
189 | // MC triggered and event vertex | |
190 | THnSparseF *fMCEventMultHist1; //-> mcZv:multiplicity | |
191 | ||
192 | // | |
193 | // track histograms | |
194 | // | |
195 | ||
196 | // all mc primary tracks in acceptance (INEL) | |
197 | THnSparseF *fMCAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity | |
198 | ||
199 | // all mc primary tracks in acceptance (ND events) | |
200 | THnSparseF *fMCNDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity | |
201 | ||
202 | // all mc primary tracks in acceptance (NSD events) | |
203 | THnSparseF *fMCNSDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity | |
204 | ||
205 | // all mc primary tracks in acceptance (triggered events) | |
206 | THnSparseF *fMCTriggerPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity | |
207 | ||
208 | // mc primary tracks in acceptance (triggered and event vertex reconstructed) | |
209 | THnSparseF *fMCEventPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity | |
210 | ||
211 | // true multiplicity | |
212 | ||
213 | // all mc primary tracks in acceptance (INEL) | |
214 | THnSparseF *fMCAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity | |
215 | ||
216 | // all mc primary tracks in acceptance (ND events) | |
217 | THnSparseF *fMCNDEventAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity | |
218 | ||
219 | // all mc primary tracks in acceptance (NSD events) | |
220 | THnSparseF *fMCNSDEventAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity | |
221 | ||
222 | // all mc primary tracks in acceptance (triggered events) | |
223 | THnSparseF *fMCTriggerPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity | |
224 | ||
225 | // mc primary tracks in acceptance (triggered and event vertex reconstructed) | |
226 | THnSparseF *fMCEventPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity | |
227 | ||
228 | // | |
229 | // mc <pt> from the event | |
230 | // | |
231 | ||
232 | THnSparseF *fMCAllPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity | |
233 | THnSparseF *fMCNDEventAllPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity | |
234 | THnSparseF *fMCNSDEventAllPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity | |
235 | THnSparseF *fMCTriggerPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity | |
236 | THnSparseF *fMCEventPrimTrackMeanPtMult1; //-> <mcPt>:multiplicity | |
237 | ||
238 | // true multiplicity | |
239 | ||
240 | THnSparseF *fMCAllPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity | |
241 | THnSparseF *fMCNDEventAllPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity | |
242 | THnSparseF *fMCNSDEventAllPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity | |
243 | THnSparseF *fMCTriggerPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity | |
244 | THnSparseF *fMCEventPrimTrackMeanPtTrueMult1; //-> <mcPt>:true multiplicity | |
245 | ||
246 | ||
247 | // track histograms | |
248 | // [0]=all charged tracks, | |
249 | // [1]=[0]+fiducual volume, | |
250 | // [2]=[1]+after esd track cuts | |
251 | THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:Eta:Phi | |
252 | ||
253 | // corrected track histograms | |
254 | // ([0]-not corrected, | |
255 | // [1]=track cont., | |
256 | // [2]=[1]+track eff., | |
257 | // [3]=[2]+multple track, | |
258 | // [4]=[3]+event vertex, | |
259 | // [5]=[4]+trigger MBtoInel, | |
260 | // [6]=[4]+trigger MBtoND, | |
261 | // [7]=[4]+trigger MBToNSD) | |
262 | THnSparseF *fCorrRecTrackMultHist1[8]; //-> Pt:Eta:mult corrected histograms | |
263 | THnSparseF *fCorrRecTrackTrueMultHist1[8]; //-> Pt:Eta:trueMult corrected histograms | |
264 | ||
265 | // <pt> vs multiplicity from the event | |
266 | THnSparseF *fCorrRecTrackMeanPtMultHist1[8]; //-> <Pt>:mult corrected histograms | |
267 | THnSparseF *fCorrRecTrackMeanPtTrueMultHist1[8]; //-> <Pt>:trueMult corrected histograms | |
268 | ||
269 | THnSparseF *fCorrRecTrackPt1[8]; //-> Pt corrected histograms in the event (helper histograms) | |
270 | ||
271 | // corrected event histograms | |
272 | // [0]-not corrected, | |
273 | // [1]=event vertex, | |
274 | // [2]=[1]+trigger MBtoInel, | |
275 | // [3]=[1]+trigger MBtoND, | |
276 | // [4]=[1]+trigger MBtoNSD | |
277 | THnSparseF *fCorrRecEventHist1[5]; //-> mcZv:multMB | |
278 | ||
279 | ||
280 | // corrected event histograms (empty events) | |
281 | // [0]=not corrected, | |
282 | // [1]=trigger/trigger+vertex correction, | |
283 | // [2]=[1]+trigger MBtoInel, | |
284 | // [3]=[1]+trigger MBtoND, | |
285 | // [4]=[1]+trigger MBtoNSD | |
286 | THnSparseF *fCorrRecEventHist2[5]; //-> mcZv:multMB | |
287 | ||
288 | ||
289 | // | |
290 | // correction matrices (histograms) | |
291 | // must be loaded | |
292 | // | |
293 | ||
294 | // event rec. track vs true track multiplicity correlation matrix | |
295 | THnSparseF *fEventMultCorrelationMatrix; //-> mult:mult_true_tracks | |
296 | ||
297 | // histograms needed for empty events corrections | |
298 | TH1D *fZvNorm; //-> normalised reconstructed zv distribution | |
299 | TH1D *fZvEmptyEventsNorm; //-> trigger/trigger+vertex empty event correction | |
300 | ||
301 | // trigger bias corrections | |
302 | THnSparseF *fCorrTriggerMBtoInelEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenEventMatrix) | |
303 | THnSparseF *fCorrTriggerMBtoNDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNDEventMatrix) | |
304 | THnSparseF *fCorrTriggerMBtoNSDEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerEventMatrix / fGenNSDEventMatrix) | |
305 | ||
306 | // event vertex corrections | |
307 | THnSparseF *fCorrEventMatrix; //-> mcVz:mcPt:mcEta (fRecEventMatrix/fTriggerEventMatrix) | |
308 | ||
309 | // track-event trigger bias corrections | |
310 | THnSparseF *fCorrTriggerMBtoInelTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventMatrix) | |
311 | THnSparseF *fCorrTriggerMBtoNDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNDMatrix) | |
312 | THnSparseF *fCorrTriggerMBtoNSDTrackEventMatrix; //-> mcVz:mcPt:mcEta (fTriggerTrackEventMatrix / fGenTrackEventNSDMatrix) | |
313 | ||
314 | // track-event vertex corrections | |
315 | THnSparseF *fCorrTrackEventMatrix; //-> mcVz:mcPt:mcEta (fRecTrackEventMatrix/fTriggerTrackEventMatrix) | |
316 | ||
317 | // track-level corrections | |
318 | THnSparseF *fCorrTrackMatrix; //-> mcVz:mcPt:mcEta (fRecPrimTrackMatrix / fGenPrimTrackMatrix) | |
319 | THnSparseF *fCorrHighPtTrackMatrix; //-> mcVz:mcPt:mcEta (fRecPrimTrackMatrix / fGenPrimTrackMatrix high pt tracks) | |
320 | THnSparseF *fContTrackMatrix; //-> mcVz:mcPt:mcEta (fRecSecTrackMatrix / fRecTrackMatrix) | |
321 | THnSparseF *fContMultTrackMatrix; //-> mcVz:mcPt:mcEta (fRecMultTrackMatrix / fRecTrackMatrix) | |
322 | ||
323 | TString fCorrMatrixFileName; // file with efficiency correction matrices | |
324 | ||
325 | // deta, dphi, pt1 for cosmics | |
326 | THnSparseF *fCosmicsHisto; //-> deta:dphi:pt | |
327 | ||
328 | AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented | |
329 | AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented | |
330 | ||
331 | ClassDef(AlidNdPtCorrection,1); | |
332 | }; | |
333 | ||
334 | #endif |