1 #ifndef ALIDEDPTCORRECTION_H
2 #define ALIDEDPTCORRECTION_H
4 //------------------------------------------------------------------------------
5 // AlidNdPtCorrection class:
8 // - applies corrections on dNdPt spectra
9 // - fills corrected dNdPt histograms
10 // - fills correction control histograms
13 // - dNdPt spectra before and after correction procedure
14 // - control histograms
15 // - correction matrices (must be loaded)
17 // Author: J.Otwinowski 04/11/2008
18 //------------------------------------------------------------------------------
26 class AliESDtrackCuts;
27 class AliVertexerTracks;
30 class AliESDfriendTrack;
32 class AlidNdPtEventCuts;
33 class AlidNdPtAcceptanceCuts;
34 class AlidNdPtCorrection;
37 #include "THnSparse.h"
39 #include "AlidNdPtHelper.h"
41 class AlidNdPtCorrection : public AlidNdPt {
44 AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName="ala.root");
45 ~AlidNdPtCorrection();
51 virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
53 // Merge output objects (needed by PROOF)
54 virtual Long64_t Merge(TCollection* list);
56 // Analyse output histograms
57 virtual void Analyse();
59 // Export objects to folder
60 virtual TFolder *ExportToFolder(TObjArray * array=0);
62 // Get analysis folder
63 TFolder* GetCorrectionFolder() {return fCorrectionFolder;}
65 // Create folder for analysed histograms
66 TFolder *CreateFolder(TString folder = "folderdNdPtCorrection",TString title = "Analysed dNdPt 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);
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;
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;};
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;};
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];}
96 //THnSparseF *GetPtvsPt() {return fPtvsPt;}
97 //TProfile *GetPtvsPt() {return fPtvsPt;}
100 void SetEventMultCorrelationMatrix(THnSparseF *const matrix=0) {fEventMultCorrelationMatrix = matrix;}
101 THnSparseF *GetEventMultCorrelationMatrix() {return fEventMultCorrelationMatrix;}
104 void SetZvNorm(TH1D *const matrix=0) {fZvNorm = matrix;}
105 TH1D *GetZvNorm() {return fZvNorm;}
107 void SetZvEmptyEventsNorm(TH1D *const matrix=0) {fZvEmptyEventsNorm = matrix;}
108 TH1D *GetZvEmptyEventsNorm() {return fZvEmptyEventsNorm;}
111 void SetCorrEventMatrix(THnSparseF *const matrix=0) {fCorrEventMatrix = matrix;}
112 THnSparseF *GetCorrEventMatrix() {return fCorrEventMatrix;}
114 void SetCorrTriggerMBtoInelEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelEventMatrix = matrix;}
115 THnSparseF *GetCorrTriggerMBtoInelEventMatrix() {return fCorrTriggerMBtoInelEventMatrix;}
117 void SetCorrTriggerMBtoNDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDEventMatrix = matrix;}
118 THnSparseF *GetCorrTriggerMBtoNDEventMatrix() {return fCorrTriggerMBtoNDEventMatrix;}
120 void SetCorrTriggerMBtoNSDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDEventMatrix = matrix;}
121 THnSparseF *GetCorrTriggerMBtoNSDEventMatrix() {return fCorrTriggerMBtoNSDEventMatrix;}
124 void SetCorrTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTrackEventMatrix = matrix;}
125 THnSparseF *GetCorrTrackEventMatrix() {return fCorrTrackEventMatrix;}
127 void SetCorrTriggerMBtoInelTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelTrackEventMatrix = matrix;}
128 THnSparseF *GetCorrTriggerMBtoInelTrackEventMatrix() {return fCorrTriggerMBtoInelTrackEventMatrix;}
130 void SetCorrTriggerMBtoNDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDTrackEventMatrix = matrix;}
131 THnSparseF *GetCorrTriggerMBtoNDTrackEventMatrix() {return fCorrTriggerMBtoNDTrackEventMatrix;}
133 void SetCorrTriggerMBtoNSDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDTrackEventMatrix = matrix;}
134 THnSparseF *GetCorrTriggerMBtoNSDTrackEventMatrix() {return fCorrTriggerMBtoNSDTrackEventMatrix;}
136 void SetCorrTrackMatrix(THnSparseF *const matrix=0) {fCorrTrackMatrix = matrix;}
137 THnSparseF *GetCorrTrackMatrix() {return fCorrTrackMatrix;}
139 void SetContTrackMatrix(THnSparseF *const matrix=0) {fContTrackMatrix = matrix;}
140 THnSparseF *GetContTrackMatrix() {return fContTrackMatrix;}
142 void SetContMultTrackMatrix(THnSparseF *const matrix=0) {fContMultTrackMatrix = matrix;}
143 THnSparseF *GetContMultTrackMatrix() {return fContMultTrackMatrix;}
145 void SetCorrMatrixFileName(TString name="") { fCorrMatrixFileName = name; }
147 Int_t GetTrueMult(THnSparse *const hist=0, Int_t mult=0);
152 TFolder *fCorrectionFolder; // folder for analysed histograms
157 THnSparseF *fMCEventHist1; //-> mcXv:mcYv:mcZv
158 THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv
161 THnSparseF *fMCAllEventMultHist1; //-> mcZv:multiplicity
164 THnSparseF *fMCAllNDEventMultHist1; //-> mcZv:multiplicity
167 THnSparseF *fMCAllNSDEventMultHist1; //-> mcZv:multiplicity
169 // MC triggered events
170 THnSparseF *fMCTriggerMultHist1; //-> mcZv:multiplicity
172 // MC triggered and event vertex
173 THnSparseF *fMCEventMultHist1; //-> mcZv:multiplicity
179 // all mc primary tracks in acceptance (INEL)
180 THnSparseF *fMCAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
182 // all mc primary tracks in acceptance (ND events)
183 THnSparseF *fMCNDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
185 // all mc primary tracks in acceptance (NSD events)
186 THnSparseF *fMCNSDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
188 //all mc primary tracks in acceptance (triggered events)
189 THnSparseF *fMCTriggerPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
191 //mc primary tracks in acceptance (triggered and event vertex reconstructed)
192 THnSparseF *fMCEventPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
194 // pt vs pt to get proper pt bin (center of gravity)
195 // THnSparseF *fPtvsPt; //-> pt:pt
196 //TProfile *fPtvsPt; //-> pt profile
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
204 // corrected track histograms
205 // ([0]-not corrected,
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
215 // corrected event histograms
216 // [0]-not corrected,
218 // [2]=[1]+trigger MBtoInel,
219 // [3]=[1]+trigger MBtoND,
220 // [4]=[1]+trigger MBtoNSD
221 THnSparseF *fCorrRecEventHist1[5]; //-> mcZv:multMB
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
233 // correction matrices (histograms)
237 // event rec. track vs true track multiplicity correlation matrix
238 THnSparseF *fEventMultCorrelationMatrix; //-> mult:mult_true_tracks
240 // histograms needed for empty events corrections
241 TH1D *fZvNorm; //-> normalised reconstructed zv distribution
242 TH1D *fZvEmptyEventsNorm; //-> trigger/trigger+vertex empty event correction
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)
249 // event vertex corrections
250 THnSparseF *fCorrEventMatrix; //-> mcVz:mcPt:mcEta (fRecEventMatrix/fTriggerEventMatrix)
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)
257 // track-event vertex corrections
258 THnSparseF *fCorrTrackEventMatrix; //-> mcVz:mcPt:mcEta (fRecTrackEventMatrix/fTriggerTrackEventMatrix)
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)
265 TString fCorrMatrixFileName; // file with efficiency correction matrices
267 AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
268 AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
270 ClassDef(AlidNdPtCorrection,1);