]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysispPb.h
Added distributions in phi, updated AddTask accordingly
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / ChargedHadrons / dNdPt / AlidNdPtAnalysispPb.h
CommitLineData
5cc1aee2 1#ifndef ALIDNDPTANALYSISPPB_H
2#define ALIDNDPTANALYSISPPB_H
3
4//------------------------------------------------------------------------------
5// AlidNdPtAnalysispPb class used for dNdPt analysis in p-Pb collisions
6// based on AlidNdPtAnalysis class
7//
8// Author: J.Otwinowski 04/11/2008
545628c3 9// last change: 2013-06-19 by M.Knichel
5cc1aee2 10//------------------------------------------------------------------------------
11
12class iostream;
13
14class TFile;
15class TCint;
16class TProfile;
17class TFolder;
18class TObjArray;
19class TString;
20class THnSparse;
21
22class AliESDtrackCuts;
23class AliVertexerTracks;
24class AliESD;
25class AliESDfriend;
26class AliESDfriendTrack;
27class AlidNdPtHelper;
545628c3 28class AliAnalysisUtils;
5cc1aee2 29
30#include "AlidNdPt.h"
31#include "TObjString.h"
32
33class AlidNdPtAnalysispPb : public AlidNdPt {
34public :
35 AlidNdPtAnalysispPb();
36 AlidNdPtAnalysispPb(Char_t* name, Char_t* title);
37 ~AlidNdPtAnalysispPb();
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* GetAnalysisFolder() const {return fAnalysisFolder;}
56
57 // Fill control histograms
c5e5fe8c 58 void SetHistogramsOn(Bool_t histOn=kTRUE) {fHistogramsOn = histOn;}
5cc1aee2 59 Bool_t IsHistogramsOn() const {return fHistogramsOn;}
60
61 // Define 0-multiplicity bin for LHC
62 // background calculation
63 static Bool_t IsBinZeroSPDvtx(const AliESDEvent* esdEvent);
64 static Bool_t IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent);
65
66 // Create folder for analysed histograms
67 TFolder *CreateFolder(TString folder = "folderdNdPtAnalysis",TString title = "Analysed dNdPt histograms");
68
69 // Set binning for Histograms (if not set default binning is used)
70 void SetBinsMult(Int_t nbins, Double_t* edges) { if (CanChangeBins()) { fMultNbins = nbins; fBinsMult = CloneArray(fMultNedges = nbins+1,edges); } }
df1c0513 71 void SetBinsMultTE(Int_t nbins, Double_t* edges) { if (CanChangeBins()) { fMultNbinsTE = nbins; fBinsMultTE = CloneArray(fMultNedgesTE = nbins+1,edges); } }
5cc1aee2 72 void SetBinsPt(Int_t nbins, Double_t* edges) { if (CanChangeBins()) { fPtNbins = nbins; fBinsPt = CloneArray(fPtNedges = nbins+1,edges); } }
73 void SetBinsPtCorr(Int_t nbins, Double_t* edges) { if (CanChangeBins()) { fPtCorrNbins = nbins; fBinsPtCorr = CloneArray(fPtCorrNedges = nbins+1,edges); } }
74 void SetBinsEta(Int_t nbins, Double_t* edges) { if (CanChangeBins()) { fEtaNbins = nbins; fBinsEta = CloneArray(fEtaNedges = nbins+1,edges); } }
75 void SetBinsZv(Int_t nbins, Double_t* edges) { if (CanChangeBins()) { fZvNbins = nbins; fBinsZv = CloneArray(fZvNedges = nbins+1,edges); } }
76
77 // Fill histograms
78 void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multMB);
79 void FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj);
80 void FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec);
81
82 // Getters
83 THnSparseF *GetEventMultCorrelationMatrix() const {return fEventMultCorrelationMatrix;}
84 THnSparseF *GetTrackPtCorrelationMatrix() const {return fTrackPtCorrelationMatrix;}
df1c0513 85
5cc1aee2 86
87 //NOTE: for now in p-Pb ND and NSD are the same, DD is empty!
88 //kNSD would have to be added to PWG0Helper, now kND is used to signal NSD!
89 THnSparseF *GetGenEventMatrix() const {return fGenEventMatrix;}
90 THnSparseF *GetGenSDEventMatrix() const {return fGenSDEventMatrix;}
91 THnSparseF *GetGenDDEventMatrix() const {return fGenDDEventMatrix;}
92 THnSparseF *GetGenNDEventMatrix() const {return fGenNDEventMatrix;}
93 THnSparseF *GetGenNSDEventMatrix() const {return fGenNSDEventMatrix;}
94
95 //NOTE: for now in p-Pb ND and NSD are the same, DD is empty!
96 THnSparseF *GetTriggerEventMatrix() const {return fTriggerEventMatrix;}
97 THnSparseF *GetTriggerSDEventMatrix() const {return fTriggerSDEventMatrix;}
98 THnSparseF *GetTriggerDDEventMatrix() const {return fTriggerDDEventMatrix;}
99 THnSparseF *GetTriggerNDEventMatrix() const {return fTriggerNDEventMatrix;}
100 THnSparseF *GetTriggerNSDEventMatrix() const {return fTriggerNSDEventMatrix;}
101
102 //NOTE: for now in p-Pb ND and NSD are the same, DD is empty!
103 THnSparseF *GetRecEventMatrix() const {return fRecEventMatrix;}
104 THnSparseF *GetRecSDEventMatrix() const {return fRecSDEventMatrix;}
105 THnSparseF *GetRecDDEventMatrix() const {return fRecDDEventMatrix;}
106 THnSparseF *GetRecNDEventMatrix() const {return fRecNDEventMatrix;}
107 THnSparseF *GetRecNSDEventMatrix() const {return fRecNSDEventMatrix;}
108
109 //
110 THnSparseF *GetRecCandleEventMatrix() const {return fRecCandleEventMatrix;}
111
112 //NOTE: for now in p-Pb ND and NSD are the same, DD is empty!
113 THnSparseF *GetGenTrackEventMatrix() const {return fGenTrackEventMatrix;}
114 THnSparseF *GetGenTrackSDEventMatrix() const {return fGenTrackSDEventMatrix;}
115 THnSparseF *GetGenTrackDDEventMatrix() const {return fGenTrackDDEventMatrix;}
116 THnSparseF *GetGenTrackNDEventMatrix() const {return fGenTrackNDEventMatrix;}
117 THnSparseF *GetGenTrackNSDEventMatrix() const {return fGenTrackNSDEventMatrix;}
118
119 //NOTE: for now in p-Pb ND and NSD are the same, DD is empty!
120 THnSparseF *GetTriggerTrackEventMatrix() const {return fTriggerTrackEventMatrix;}
121 THnSparseF *GetTriggerTrackSDEventMatrix() const {return fTriggerTrackSDEventMatrix;}
122 THnSparseF *GetTriggerTrackDDEventMatrix() const {return fTriggerTrackDDEventMatrix;}
123 THnSparseF *GetTriggerTrackNDEventMatrix() const {return fTriggerTrackNDEventMatrix;}
124 THnSparseF *GetTriggerTrackNSDEventMatrix() const {return fTriggerTrackNSDEventMatrix;}
125
126 //NOTE: for now in p-Pb ND and NSD are the same, DD is empty!
127 THnSparseF *GetRecTrackEventMatrix() const {return fRecTrackEventMatrix;}
128 THnSparseF *GetRecTrackSDEventMatrix() const {return fRecTrackSDEventMatrix;}
129 THnSparseF *GetRecTrackDDEventMatrix() const {return fRecTrackDDEventMatrix;}
130 THnSparseF *GetRecTrackNDEventMatrix() const {return fRecTrackNDEventMatrix;}
131 THnSparseF *GetRecTrackNSDEventMatrix() const {return fRecTrackNSDEventMatrix;}
132
133 //
134 THnSparseF *GetGenTrackMatrix() const {return fGenTrackMatrix;}
135 THnSparseF *GetGenPrimTrackMatrix() const {return fGenPrimTrackMatrix;}
136 THnSparseF *GetRecPrimTrackMatrix() const {return fRecPrimTrackMatrix;}
137
138 THnSparseF *GetRecTrackMatrix() const {return fRecTrackMatrix;}
139 THnSparseF *GetRecSecTrackMatrix() const {return fRecSecTrackMatrix;}
140 THnSparseF *GetRecMultTrackMatrix() const {return fRecMultTrackMatrix;}
141
142 //
143 // control histograms
144 //
145 THnSparseF *GetMCEventHist1() const {return fMCEventHist1;}
146 THnSparseF *GetRecEventHist1() const {return fRecEventHist1;}
147 THnSparseF *GetRecEventHist2() const {return fRecEventHist2;}
148 THnSparseF *GetRecMCEventHist1() const {return fRecMCEventHist1;}
149 THnSparseF *GetRecMCEventHist2() const {return fRecMCEventHist2;}
150 THnSparseF *GetRecMCEventHist3() const {return fRecMCEventHist3;}
151
152 THnSparseF *GetMCTrackHist1(Int_t i) const {return fMCTrackHist1[i];}
153 THnSparseF *GetMCPrimTrackHist1(Int_t i) const {return fMCPrimTrackHist1[i];}
154 THnSparseF *GetMCPrimTrackHist2(Int_t i) const {return fMCPrimTrackHist2[i];}
155 THnSparseF *GetMCSecTrackHist1(Int_t i) const {return fMCSecTrackHist1[i];}
156
157 THnSparseF *GetRecTrackHist1(Int_t i) const {return fRecTrackHist1[i];}
158 THnSparseF *GetRecTrackMultHist1(Int_t i) const {return fRecTrackMultHist1[i];}
159
160 THnSparseF *GetRecMCTrackHist1() const {return fRecMCTrackHist1;}
161 THnSparseF *GetMCMultRecTrackHist1() const {return fMCMultRecTrackHist1;}
162
163 THnSparseF *GetRecTrackHist2() const {return fRecTrackHist2;}
164 THnSparseF *GetEventCount() const {return fEventCount;}
165
166 //
167 // Generic histograms to be corrected
168 //
169 THnSparseF* GetRecEventHist() const {return fRecEventHist;}
170 THnSparseF* GetRecTrackHist() const {return fRecTrackHist;}
171 THnSparseF* GetEventMultHist() const {return fEventMultHist;}
95a71a5c 172 THnSparseF* GetMCPrimTrackHist() const {return fMCPrimTrackHist;}
173
5cc1aee2 174 //
175 // centrality histograms etc. getter+setter
176 //
177 THnSparseF* GetCentralityEventHist() const {return fCentralityEventHist;}
178 THnSparseF* GetCentralityTrackHist() const {return fCentralityTrackHist;}
179 const char* GetCentralityEstimator(Int_t i) {return ((i > 0) && (i <= fDimensionsCentralityEstimators)) ? ((TObjString*)fCentralityEstimatorsList->At(i-1))->GetName() : 0; }
180 Int_t GetNCentralityEstimators() {return fDimensionsCentralityEstimators;}
181 void SetBinsCentrality(Int_t nbins, Double_t* edges) { if (CanChangeBins()) { fCentralityNbins = nbins; fBinsCentrality = CloneArray(fCentralityNedges = nbins+1,edges); } }
182 void SetCentralityEstimators(const char* estimators);
df1c0513 183
184 //rapidity shift getter+setter
185 void SetRapidityShift(Double_t yShift) { fRapidityShift = yShift;}
186 Double_t GetRapidityShift() { return fRapidityShift; }
545628c3 187
188 void Set2013pA(Bool_t is2013 = kTRUE) { fIs2013pA = is2013; }
189 Double_t Get2013pA() { return fIs2013pA; }
190
5cc1aee2 191
192private:
193
194 // analysis folder
195 TFolder *fAnalysisFolder; // folder for analysed histograms
196 Bool_t fHistogramsOn; // switch on/off filling of control histograms
197
198 //
199 // correlation matrices (histograms)
200 //
201
202 // event rec. track vs true track multiplicity correlation matrix
df1c0513 203 THnSparseF *fEventMultCorrelationMatrix; //-> multRecMult:multTrueMC:multMB
5cc1aee2 204
205 // rec. track pt vs true track pt correlation matrix for given eta
206 THnSparseF *fTrackPtCorrelationMatrix; //-> Pt:mcPt:mcEta
207
208 //
209 // event level correction
210 //
211
212 // all genertated
df1c0513 213 THnSparseF *fGenEventMatrix; //-> mcZv:multTrueMC (inelastic)
214 THnSparseF *fGenSDEventMatrix; //-> mcZv:multTrueMC (single diffractive)
215 THnSparseF *fGenDDEventMatrix; //-> mcZv:multTrueMC (single diffractive)
216 THnSparseF *fGenNDEventMatrix; //-> mcZv:multTrueMC (non diffractive)
217 THnSparseF *fGenNSDEventMatrix; //-> mcZv:multTrueMC (non single diffractive)
5cc1aee2 218
219 // trigger bias corrections (fTriggerEventMatrix / fGenEventMatrix)
df1c0513 220 THnSparseF *fTriggerEventMatrix; //-> mcZv:multTrueMC
221 THnSparseF *fTriggerSDEventMatrix; //-> mcZv:multTrueMC
222 THnSparseF *fTriggerDDEventMatrix; //-> mcZv:multTrueMC
223 THnSparseF *fTriggerNDEventMatrix; //-> mcZv:multTrueMC
224 THnSparseF *fTriggerNSDEventMatrix; //-> mcZv:multTrueMC
5cc1aee2 225
226 // event vertex rec. eff correction (fRecEventMatrix / fTriggerEventMatrix)
df1c0513 227 THnSparseF *fRecEventMatrix; //-> mcZv:multTrueMC:Centrality
228 THnSparseF *fRecSDEventMatrix; //-> mcZv:multTrueMC
229 THnSparseF *fRecDDEventMatrix; //-> mcZv:multTrueMC
230 THnSparseF *fRecNDEventMatrix; //-> mcZv:multTrueMC
231 THnSparseF *fRecNSDEventMatrix; //-> mcZv:multTrueMC
5cc1aee2 232
233 //
df1c0513 234 // track-event level correction
5cc1aee2 235 //
236
df1c0513 237 THnSparseF *fGenTrackEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
238 THnSparseF *fGenTrackSDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
239 THnSparseF *fGenTrackDDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
240 THnSparseF *fGenTrackNDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
241 THnSparseF *fGenTrackNSDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
5cc1aee2 242
243 // trigger bias corrections (fTriggerTrackEventMatrix / fGenTrackEventMatrix)
df1c0513 244 THnSparseF *fTriggerTrackEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
245 THnSparseF *fTriggerTrackSDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
246 THnSparseF *fTriggerTrackDDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
247 THnSparseF *fTriggerTrackNDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
248 THnSparseF *fTriggerTrackNSDEventMatrix; //-> mcZv:mcPt:mcEta:multTrueMC
5cc1aee2 249
250 // event vertex rec. corrections (fRecTrackEventMatrix / fTriggerTrackEventMatrix)
df1c0513 251 THnSparseF *fRecTrackEventMatrix; //-> mcZv:Pt:mcEta:multTrueMC
252 THnSparseF *fRecTrackSDEventMatrix; //-> mcZv:Pt:mcEta:multTrueMC
253 THnSparseF *fRecTrackDDEventMatrix; //-> mcZv:Pt:mcEta:multTrueMC
254 THnSparseF *fRecTrackNDEventMatrix; //-> mcZv:Pt:mcEta:multTrueMC
255 THnSparseF *fRecTrackNSDEventMatrix; //-> mcZv:Pt:mcEta:multTrueMC
5cc1aee2 256
257 //
258 // track level correction
259 //
260
261 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
262 THnSparseF *fGenTrackMatrix; //-> mcZv:mcPt:mcEta
df1c0513 263 THnSparseF *fGenPrimTrackMatrix; //-> mcZv:mcPt:mcEta:Centrality
264 THnSparseF *fRecPrimTrackMatrix; //-> mcZv:mcPt:mcEta:Centrality
5cc1aee2 265
266 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
df1c0513 267 THnSparseF *fRecTrackMatrix; //-> mcZv:mcPt:mcEta:Centrality
268 THnSparseF *fRecSecTrackMatrix; //-> mcZv:mcPt:mcEta:Centrality
5cc1aee2 269
270 // multiple rec. track corrections (fRecMultTrackMatrix / fRecTrackMatrix)
271 THnSparseF *fRecMultTrackMatrix; //-> mcZv:Pt:mcEta
272
273 //
274 // ESD and MC control analysis histograms
275 //
276
277 // THnSparse event histograms
278 THnSparseF *fMCEventHist1; //-> mcXv:mcYv:mcZv
279 THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv
df1c0513 280 THnSparseF *fRecEventHist2; //-> Zv:multMB:multRecMult
5cc1aee2 281 THnSparseF *fRecMCEventHist1; //-> Xv-mcXv:Yv-mcYv:Zv-mcZv
df1c0513 282 THnSparseF *fRecMCEventHist2; //-> Xv-mcXv:Zv-mcZv:multMB
283 THnSparseF *fRecMCEventHist3; //-> multRec:EventType (ND, DD, SD)
5cc1aee2 284
285 // THnSparse track histograms
286 // [0] - after charged track selection, [1] - after acceptance cuts, [2] - after esd track cuts
287
288 THnSparseF *fMCTrackHist1[AlidNdPtHelper::kCutSteps]; //-> mcPt:mcEta:mcPhi
289 THnSparseF *fMCPrimTrackHist1[AlidNdPtHelper::kCutSteps]; //-> mcPt:mcEta:pid:mech:mother
290 THnSparseF *fMCPrimTrackHist2[AlidNdPtHelper::kCutSteps]; //-> pdg:mech:mother
291 THnSparseF *fMCSecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> mcPt:mcEta:pid:mech:mother
292
293 THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:Eta:Phi
294 THnSparseF *fRecTrackMultHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:mult
295
296 THnSparseF *fRecMCTrackHist1; //-> mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)
297
298 //multple reconstructed tracks
299 THnSparseF *fMCMultRecTrackHist1; //-> mcPt:mcEta:pid
300
301 // track control histograms
302 THnSparseF *fRecTrackHist2; //-> nclust:chi2:Pt:Eta:Phi
303
304 //
305 // Generic histograms to be corrected
306 //
307 THnSparseF *fRecEventHist; //-> Zv:multMB
df1c0513 308 THnSparseF *fRecTrackHist; //-> Zv:pT:eta:multRecMult
5cc1aee2 309 THnSparseF *fEventCount; //-> trig, trig + vertex, selected event
df1c0513 310 THnSparseF *fEventMultHist; // event multiplicities multMB:multRecMult:multRec
311 THnSparseF *fMCPrimTrackHist; //-> Zv:mcpT:mceta:multTrueMC
5cc1aee2 312
313 //
314 // candle events track corrections
315 //
316 THnSparseF *fRecCandleEventMatrix; // Zv:multMB
317
318 // centrality test histograms
df1c0513 319 THnSparseF *fCentralityEventHist; // rec event hist with centrality zv:multRecMult:multMB:cent:...
320 THnSparseF *fCentralityTrackHist; // rec track hist with centrality zv:pt:eta:multRecMult:multMB:cent:...
5cc1aee2 321 TObjArray *fCentralityEstimatorsList; // TObjArray with TObjStrings containing cent. estimators
322 Int_t fDimensionsCentralityEstimators; // number of centrality estimators: if 0 hists are not filled
323 Int_t fCentralityNbins; // number of centrality bins (common for all estimators)
324 Int_t fCentralityNedges; // fCentralityNbins+1 uses for streaming dynamic array
325 Double_t *fBinsCentrality; //[fCentralityNedges]
326
bc1c2f31 327 Int_t fNVCentralityEvent; //
328 Int_t fNVCentralityTrack; //
5cc1aee2 329 Double_t *fVCentralityEvent; //[fNVCentralityEvent]
330 Double_t *fVCentralityTrack; //[fNVCentralityTrack]
331
332 //binning for THNsparse
333 Int_t fMultNbins;
df1c0513 334 Int_t fMultNbinsTE;
5cc1aee2 335 Int_t fPtNbins;
336 Int_t fPtCorrNbins;
337 Int_t fEtaNbins;
338 Int_t fZvNbins;
339 Int_t fMultNedges; // fMultNbins+1 uses for streaming dynamic array
df1c0513 340 Int_t fMultNedgesTE; // fMultNbinsTE+1 uses for streaming dynamic array
5cc1aee2 341 Int_t fPtNedges; // fPtNbins+1 uses for streaming dynamic array
342 Int_t fPtCorrNedges; // fCentralityNbins+1 uses for streaming dynamic array
343 Int_t fEtaNedges; // fEtaNbins+1 uses for streaming dynamic array
344 Int_t fZvNedges; // fZvNbins+1 uses for streaming dynamic array
345 Double_t *fBinsMult; //[fMultNedges]
df1c0513 346 Double_t *fBinsMultTE; //[fMultNedgesTE]
5cc1aee2 347 Double_t *fBinsPt; //[fPtNedges]
348 Double_t *fBinsPtCorr; //[fPtCorrNedges]
349 Double_t *fBinsEta; //[fEtaNedges]
350 Double_t *fBinsZv; //[fZvNedges]
351
df1c0513 352 Double_t fRapidityShift; //y shift CMS vs. LAB
545628c3 353 AliAnalysisUtils* fUtils;
354 Bool_t fIs2013pA;
df1c0513 355
5cc1aee2 356 Bool_t fIsInit;
545628c3 357
5cc1aee2 358 // generic function to change binning
359 Bool_t CanChangeBins();
360
361 AlidNdPtAnalysispPb(const AlidNdPtAnalysispPb&); // not implemented
362 AlidNdPtAnalysispPb& operator=(const AlidNdPtAnalysispPb&); // not implemented
363
545628c3 364 ClassDef(AlidNdPtAnalysispPb,6);
5cc1aee2 365};
366
367#endif