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