1 #ifndef ALIDNDPTCORRECTION_H
2 #define ALIDNDPTCORRECTION_H
4 //------------------------------------------------------------------------------
5 // AlidNdPtCorrection class to correct and
6 // normalised dNdPt spectra.
8 // Author: J.Otwinowski 04/11/2008
9 //------------------------------------------------------------------------------
19 class AliESDtrackCuts;
20 class AliVertexerTracks;
23 class AliESDfriendTrack;
25 class AlidNdPtEventCuts;
26 class AlidNdPtAcceptanceCuts;
27 class AlidNdPtCorrection;
33 class AlidNdPtCorrection : public AlidNdPt {
36 AlidNdPtCorrection(Char_t* name, Char_t* title, TString corrMatrixFileName="ala.root");
37 ~AlidNdPtCorrection();
43 virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);
45 // Merge output objects (needed by PROOF)
46 virtual Long64_t Merge(TCollection* const list);
48 // Analyse output histograms
49 virtual void Analyse();
51 // Export objects to folder
52 virtual TFolder *ExportToFolder(TObjArray * const array=0);
54 // Get analysis folder
55 TFolder* GetCorrectionFolder() const {return fCorrectionFolder;}
57 // Create folder for analysed histograms
58 TFolder *CreateFolder(TString folder = "folderdNdPtCorrection",TString title = "Analysed dNdPt 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;
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;
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;};
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;};
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;};
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;};
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;};
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];}
109 THnSparseF *GetCorrRecEventHist1(Int_t i) const {return fCorrRecEventHist1[i];}
110 THnSparseF *GetCorrRecEventHist2(Int_t i) const {return fCorrRecEventHist2[i];}
113 // correlation matrix
114 void SetEventMultCorrelationMatrix(THnSparseF *const matrix=0) {fEventMultCorrelationMatrix = matrix;}
115 THnSparseF *GetEventMultCorrelationMatrix() const {return fEventMultCorrelationMatrix;}
118 void SetZvNorm(TH1D *const matrix=0) {fZvNorm = matrix;}
119 TH1D *GetZvNorm() const {return fZvNorm;}
121 void SetZvEmptyEventsNorm(TH1D *const matrix=0) {fZvEmptyEventsNorm = matrix;}
122 TH1D *GetZvEmptyEventsNorm() const {return fZvEmptyEventsNorm;}
125 void SetCorrEventMatrix(THnSparseF *const matrix=0) {fCorrEventMatrix = matrix;}
126 THnSparseF *GetCorrEventMatrix() const {return fCorrEventMatrix;}
128 void SetCorrTriggerMBtoInelEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelEventMatrix = matrix;}
129 THnSparseF *GetCorrTriggerMBtoInelEventMatrix() const {return fCorrTriggerMBtoInelEventMatrix;}
131 void SetCorrTriggerMBtoNDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDEventMatrix = matrix;}
132 THnSparseF *GetCorrTriggerMBtoNDEventMatrix() const {return fCorrTriggerMBtoNDEventMatrix;}
134 void SetCorrTriggerMBtoNSDEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDEventMatrix = matrix;}
135 THnSparseF *GetCorrTriggerMBtoNSDEventMatrix() const {return fCorrTriggerMBtoNSDEventMatrix;}
138 void SetCorrTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTrackEventMatrix = matrix;}
139 THnSparseF *GetCorrTrackEventMatrix() const {return fCorrTrackEventMatrix;}
141 void SetCorrTriggerMBtoInelTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoInelTrackEventMatrix = matrix;}
142 THnSparseF *GetCorrTriggerMBtoInelTrackEventMatrix() const {return fCorrTriggerMBtoInelTrackEventMatrix;}
144 void SetCorrTriggerMBtoNDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNDTrackEventMatrix = matrix;}
145 THnSparseF *GetCorrTriggerMBtoNDTrackEventMatrix() const {return fCorrTriggerMBtoNDTrackEventMatrix;}
147 void SetCorrTriggerMBtoNSDTrackEventMatrix(THnSparseF *const matrix=0) {fCorrTriggerMBtoNSDTrackEventMatrix = matrix;}
148 THnSparseF *GetCorrTriggerMBtoNSDTrackEventMatrix() const {return fCorrTriggerMBtoNSDTrackEventMatrix;}
150 void SetCorrTrackMatrix(THnSparseF *const matrix=0) {fCorrTrackMatrix = matrix;}
151 THnSparseF *GetCorrTrackMatrix() const {return fCorrTrackMatrix;}
153 void SetCorrHighPtTrackMatrix(THnSparseF *const matrix=0) {fCorrHighPtTrackMatrix = matrix;}
154 THnSparseF *GetCorrHighPtTrackMatrix() const {return fCorrHighPtTrackMatrix;}
156 void SetContTrackMatrix(THnSparseF *const matrix=0) {fContTrackMatrix = matrix;}
157 THnSparseF *GetContTrackMatrix() const {return fContTrackMatrix;}
159 void SetContMultTrackMatrix(THnSparseF *const matrix=0) {fContMultTrackMatrix = matrix;}
160 THnSparseF *GetContMultTrackMatrix() const {return fContMultTrackMatrix;}
162 void SetCorrMatrixFileName(TString name="") { fCorrMatrixFileName = name; }
164 Int_t GetTrueMult(THnSparse *const hist=0, Int_t mult=0) const;
169 TFolder *fCorrectionFolder; // folder for analysed histograms
174 THnSparseF *fMCEventHist1; //-> mcXv:mcYv:mcZv
175 THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv
178 THnSparseF *fMCAllEventMultHist1; //-> mcZv:multiplicity
181 THnSparseF *fMCAllNDEventMultHist1; //-> mcZv:multiplicity
184 THnSparseF *fMCAllNSDEventMultHist1; //-> mcZv:multiplicity
186 // MC triggered events
187 THnSparseF *fMCTriggerMultHist1; //-> mcZv:multiplicity
189 // MC triggered and event vertex
190 THnSparseF *fMCEventMultHist1; //-> mcZv:multiplicity
196 // all mc primary tracks in acceptance (INEL)
197 THnSparseF *fMCAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
199 // all mc primary tracks in acceptance (ND events)
200 THnSparseF *fMCNDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
202 // all mc primary tracks in acceptance (NSD events)
203 THnSparseF *fMCNSDEventAllPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
205 // all mc primary tracks in acceptance (triggered events)
206 THnSparseF *fMCTriggerPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
208 // mc primary tracks in acceptance (triggered and event vertex reconstructed)
209 THnSparseF *fMCEventPrimTrackMultHist1; //-> mcPt:mcEta:multiplicity
213 // all mc primary tracks in acceptance (INEL)
214 THnSparseF *fMCAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
216 // all mc primary tracks in acceptance (ND events)
217 THnSparseF *fMCNDEventAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
219 // all mc primary tracks in acceptance (NSD events)
220 THnSparseF *fMCNSDEventAllPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
222 // all mc primary tracks in acceptance (triggered events)
223 THnSparseF *fMCTriggerPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
225 // mc primary tracks in acceptance (triggered and event vertex reconstructed)
226 THnSparseF *fMCEventPrimTrackTrueMultHist1; //-> mcPt:mcEta:true multiplicity
229 // mc <pt> from the event
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
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
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
253 // corrected track histograms
254 // ([0]-not corrected,
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
265 // <pt> vs multiplicity from the event
266 THnSparseF *fCorrRecTrackMeanPtMultHist1[8]; //-> <Pt>:mult corrected histograms
267 THnSparseF *fCorrRecTrackMeanPtTrueMultHist1[8]; //-> <Pt>:trueMult corrected histograms
269 THnSparseF *fCorrRecTrackPt1[8]; //-> Pt corrected histograms in the event (helper histograms)
271 // corrected event histograms
272 // [0]-not corrected,
274 // [2]=[1]+trigger MBtoInel,
275 // [3]=[1]+trigger MBtoND,
276 // [4]=[1]+trigger MBtoNSD
277 THnSparseF *fCorrRecEventHist1[5]; //-> mcZv:multMB
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
290 // correction matrices (histograms)
294 // event rec. track vs true track multiplicity correlation matrix
295 THnSparseF *fEventMultCorrelationMatrix; //-> mult:mult_true_tracks
297 // histograms needed for empty events corrections
298 TH1D *fZvNorm; //-> normalised reconstructed zv distribution
299 TH1D *fZvEmptyEventsNorm; //-> trigger/trigger+vertex empty event correction
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)
306 // event vertex corrections
307 THnSparseF *fCorrEventMatrix; //-> mcVz:mcPt:mcEta (fRecEventMatrix/fTriggerEventMatrix)
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)
314 // track-event vertex corrections
315 THnSparseF *fCorrTrackEventMatrix; //-> mcVz:mcPt:mcEta (fRecTrackEventMatrix/fTriggerTrackEventMatrix)
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)
323 TString fCorrMatrixFileName; // file with efficiency correction matrices
325 // deta, dphi, pt1 for cosmics
326 THnSparseF *fCosmicsHisto; //-> deta:dphi:pt
328 AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
329 AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
331 ClassDef(AlidNdPtCorrection,1);