]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysispPb.cxx
pileup rejection added M. Knichel
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / ChargedHadrons / dNdPt / AlidNdPtAnalysispPb.cxx
CommitLineData
5cc1aee2 1/**************************************************************************\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3 * *\r
4 * Author: The ALICE Off-line Project. *\r
5 * Contributors are mentioned in the code where appropriate. *\r
6 * *\r
7 * Permission to use, copy, modify and distribute this software and its *\r
8 * documentation strictly for non-commercial purposes is hereby granted *\r
9 * without fee, provided that the above copyright notice appears in all *\r
10 * copies and that both the copyright notice and this permission notice *\r
11 * appear in the supporting documentation. The authors make no claims *\r
12 * about the suitability of this software for any purpose. It is *\r
13 * provided "as is" without express or implied warranty. *\r
14 **************************************************************************/\r
15//------------------------------------------------------------------------------\r
16// AlidNdPtAnalysispPb class. \r
17// \r
18// a. functionality:\r
19// - fills analysis control histograms\r
20// - fills generic correction matrices \r
21// - generates correction matrices \r
22//\r
23// b. data members:\r
24// - generic correction matrices\r
25// - control histograms\r
26//\r
545628c3 27// last change: 2013-06-19 by M.Knichel\r
df1c0513 28//\r
29// meaning of different multiplicities:\r
30// multRec : number of reconstructed tracks, after AcceptanceCuts and TrackCuts\r
31// multRecMult : number of reconstructed tracks, after MultAcceptanceCuts and MultTrackCuts\r
32// multMB : number of contributers to vertex\r
33// multTrueMC : MC true mult, after MultAcceptanceCuts\r
34// mutlAll : number of ESD tracks\r
35// mutlAcc : number of ESD tracks after AcceptanceCuts\r
5cc1aee2 36//------------------------------------------------------------------------------\r
37\r
38#include "TH1.h"\r
39#include "TH2.h"\r
40#include "TCanvas.h"\r
41#include "THnSparse.h"\r
42\r
43#include "AliHeader.h" \r
44#include "AliInputEventHandler.h" \r
45#include "AliAnalysisManager.h" \r
46#include "AliGenEventHeader.h" \r
47#include "AliStack.h" \r
48#include "AliESDEvent.h" \r
49#include "AliMCEvent.h" \r
50#include "AliESDtrackCuts.h" \r
51#include "AliLog.h" \r
52#include "AliMultiplicity.h"\r
53#include "AliTracker.h"\r
54\r
55#include "AlidNdPtEventCuts.h"\r
56#include "AlidNdPtAcceptanceCuts.h"\r
57#include "AliPhysicsSelection.h"\r
58#include "AliTriggerAnalysis.h"\r
59#include "AliCentrality.h"\r
545628c3 60#include "AliAnalysisUtils.h"\r
5cc1aee2 61\r
62#include "AliPWG0Helper.h"\r
63#include "AlidNdPtHelper.h"\r
64#include "AlidNdPtAnalysispPb.h"\r
65\r
66using namespace std;\r
67\r
68ClassImp(AlidNdPtAnalysispPb)\r
69\r
70//_____________________________________________________________________________\r
71 AlidNdPtAnalysispPb::AlidNdPtAnalysispPb(): AlidNdPt(),\r
72 fAnalysisFolder(0),\r
73 fHistogramsOn(kFALSE),\r
74\r
75 // event multiplicity correlation matrix \r
76 fEventMultCorrelationMatrix(0),\r
77\r
78 // rec. track pt vs true track pt correlation matrix \r
79 fTrackPtCorrelationMatrix(0),\r
80\r
81 // event level correction\r
82 fGenEventMatrix(0),\r
83 fGenSDEventMatrix(0),\r
84 fGenDDEventMatrix(0),\r
85 fGenNDEventMatrix(0),\r
86 fGenNSDEventMatrix(0),\r
87\r
88 fTriggerEventMatrix(0),\r
89 fTriggerSDEventMatrix(0),\r
90 fTriggerDDEventMatrix(0),\r
91 fTriggerNDEventMatrix(0),\r
92 fTriggerNSDEventMatrix(0),\r
93\r
94 fRecEventMatrix(0),\r
95 fRecSDEventMatrix(0),\r
96 fRecDDEventMatrix(0),\r
97 fRecNDEventMatrix(0),\r
98 fRecNSDEventMatrix(0),\r
99\r
100 //\r
101 // track-event level correction \r
102 //\r
103 fGenTrackEventMatrix(0),\r
104 fGenTrackSDEventMatrix(0),\r
105 fGenTrackDDEventMatrix(0),\r
106 fGenTrackNDEventMatrix(0),\r
107 fGenTrackNSDEventMatrix(0),\r
108\r
109 fTriggerTrackEventMatrix(0),\r
110 fTriggerTrackSDEventMatrix(0),\r
111 fTriggerTrackDDEventMatrix(0),\r
112 fTriggerTrackNDEventMatrix(0),\r
113 fTriggerTrackNSDEventMatrix(0),\r
114\r
115 fRecTrackEventMatrix(0),\r
116 fRecTrackSDEventMatrix(0),\r
117 fRecTrackDDEventMatrix(0),\r
118 fRecTrackNDEventMatrix(0),\r
119 fRecTrackNSDEventMatrix(0),\r
120\r
121 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)\r
122 fGenTrackMatrix(0),\r
123 fGenPrimTrackMatrix(0),\r
124 fRecPrimTrackMatrix(0),\r
125\r
126 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)\r
127 fRecTrackMatrix(0),\r
128 fRecSecTrackMatrix(0),\r
129\r
130 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)\r
131 fRecMultTrackMatrix(0),\r
132\r
133 // event control histograms\r
134 fMCEventHist1(0),\r
135 fRecEventHist1(0),\r
136 fRecEventHist2(0),\r
137 fRecMCEventHist1(0),\r
138 fRecMCEventHist2(0),\r
139 fRecMCEventHist3(0),\r
140\r
141 // rec. pt and eta resolution w.r.t MC\r
142 fRecMCTrackHist1(0),\r
143\r
144 //multple reconstructed tracks\r
145 fMCMultRecTrackHist1(0), \r
146\r
147 // rec. track control histograms\r
148 fRecTrackHist2(0),\r
149\r
150 // Generic histograms to be corrected\r
151 fRecEventHist(0),\r
152 fRecTrackHist(0),\r
153 fEventCount(0),\r
154 fEventMultHist(0),\r
95a71a5c 155 fMCPrimTrackHist(0),\r
5cc1aee2 156\r
157 // Candle event histogram\r
158 fRecCandleEventMatrix(0),\r
159 \r
160 fCentralityEventHist(0),\r
161 fCentralityTrackHist(0), \r
162 fCentralityEstimatorsList(0),\r
163 fDimensionsCentralityEstimators(0),\r
164 fCentralityNbins(0),\r
165 fCentralityNedges(0),\r
166 fBinsCentrality(0), \r
167 fNVCentralityEvent(0),\r
168 fNVCentralityTrack(0),\r
169 fVCentralityEvent(0),\r
170 fVCentralityTrack(0),\r
171 \r
172 fMultNbins(0),\r
df1c0513 173 fMultNbinsTE(0),\r
5cc1aee2 174 fPtNbins(0),\r
175 fPtCorrNbins(0),\r
176 fEtaNbins(0),\r
177 fZvNbins(0),\r
178 fMultNedges(0),\r
df1c0513 179 fMultNedgesTE(0),\r
5cc1aee2 180 fPtNedges(0),\r
181 fPtCorrNedges(0),\r
182 fEtaNedges(0),\r
183 fZvNedges(0),\r
184 fBinsMult(0),\r
df1c0513 185 fBinsMultTE(0),\r
5cc1aee2 186 fBinsPt(0),\r
187 fBinsPtCorr(0),\r
188 fBinsEta(0),\r
189 fBinsZv(0),\r
df1c0513 190 \r
191 fRapidityShift(-4.65409416218532379e-01),\r
545628c3 192 fUtils(0),\r
193 fIs2013pA(kTRUE),\r
194 \r
5cc1aee2 195 fIsInit(kFALSE) \r
196 \r
197{\r
198 // default constructor\r
199 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
200 fMCTrackHist1[i]=0; \r
201 fMCPrimTrackHist1[i]=0; \r
202 fMCPrimTrackHist2[i]=0; \r
203 fMCSecTrackHist1[i]=0; \r
204 fRecTrackHist1[i]=0; \r
205 fRecTrackMultHist1[i]=0; \r
206 }\r
207 //Init();\r
208}\r
209\r
210//_____________________________________________________________________________\r
211AlidNdPtAnalysispPb::AlidNdPtAnalysispPb(Char_t* name, Char_t* title): AlidNdPt(name,title),\r
212 fAnalysisFolder(0),\r
213 fHistogramsOn(kFALSE),\r
214\r
215 // event multiplicity correlation matrix \r
216 fEventMultCorrelationMatrix(0),\r
217\r
218 // rec. track pt vs true track pt correlation matrix \r
219 fTrackPtCorrelationMatrix(0),\r
220\r
221 // event level correction\r
222 fGenEventMatrix(0),\r
223 fGenSDEventMatrix(0),\r
224 fGenDDEventMatrix(0),\r
225 fGenNDEventMatrix(0),\r
226 fGenNSDEventMatrix(0),\r
227\r
228 fTriggerEventMatrix(0),\r
229 fTriggerSDEventMatrix(0),\r
230 fTriggerDDEventMatrix(0),\r
231 fTriggerNDEventMatrix(0),\r
232 fTriggerNSDEventMatrix(0),\r
233\r
234 fRecEventMatrix(0),\r
235 fRecSDEventMatrix(0),\r
236 fRecDDEventMatrix(0),\r
237 fRecNDEventMatrix(0),\r
238 fRecNSDEventMatrix(0),\r
239\r
240 //\r
241 // track-event level correction \r
242 //\r
243 fGenTrackEventMatrix(0),\r
244 fGenTrackSDEventMatrix(0),\r
245 fGenTrackDDEventMatrix(0),\r
246 fGenTrackNDEventMatrix(0),\r
247 fGenTrackNSDEventMatrix(0),\r
248\r
249 fTriggerTrackEventMatrix(0),\r
250 fTriggerTrackSDEventMatrix(0),\r
251 fTriggerTrackDDEventMatrix(0),\r
252 fTriggerTrackNDEventMatrix(0),\r
253 fTriggerTrackNSDEventMatrix(0),\r
254\r
255 fRecTrackEventMatrix(0),\r
256 fRecTrackSDEventMatrix(0),\r
257 fRecTrackDDEventMatrix(0),\r
258 fRecTrackNDEventMatrix(0),\r
259 fRecTrackNSDEventMatrix(0),\r
260\r
261 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)\r
262 fGenTrackMatrix(0),\r
263 fGenPrimTrackMatrix(0),\r
264 fRecPrimTrackMatrix(0),\r
265\r
266 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)\r
267 fRecTrackMatrix(0),\r
268 fRecSecTrackMatrix(0),\r
269\r
270 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)\r
271 fRecMultTrackMatrix(0),\r
272\r
273 // event control histograms\r
274 fMCEventHist1(0),\r
275 fRecEventHist1(0),\r
276 fRecEventHist2(0),\r
277 fRecMCEventHist1(0),\r
278 fRecMCEventHist2(0),\r
279 fRecMCEventHist3(0),\r
280 \r
281 // rec. pt and eta resolution w.r.t MC\r
282 fRecMCTrackHist1(0),\r
283\r
284 //multple reconstructed tracks\r
285 fMCMultRecTrackHist1(0), \r
286\r
287 // rec. track control histograms\r
288 fRecTrackHist2(0),\r
289\r
290 // Generic histograms to be corrected\r
291 fRecEventHist(0),\r
292 fRecTrackHist(0),\r
293 fEventCount(0),\r
294 fEventMultHist(0),\r
95a71a5c 295 fMCPrimTrackHist(0),\r
5cc1aee2 296\r
297 // Candle event histogram\r
298 fRecCandleEventMatrix(0),\r
299 \r
300 fCentralityEventHist(0),\r
301 fCentralityTrackHist(0), \r
302 fCentralityEstimatorsList(0),\r
303 fDimensionsCentralityEstimators(0),\r
304 fCentralityNbins(0),\r
305 fCentralityNedges(0),\r
306 fBinsCentrality(0), \r
307 fNVCentralityEvent(0),\r
308 fNVCentralityTrack(0), \r
309 fVCentralityEvent(0),\r
310 fVCentralityTrack(0), \r
311 \r
312 fMultNbins(0),\r
df1c0513 313 fMultNbinsTE(0),\r
5cc1aee2 314 fPtNbins(0),\r
315 fPtCorrNbins(0),\r
316 fEtaNbins(0),\r
317 fZvNbins(0),\r
318 fMultNedges(0),\r
df1c0513 319 fMultNedgesTE(0),\r
5cc1aee2 320 fPtNedges(0),\r
321 fPtCorrNedges(0),\r
322 fEtaNedges(0),\r
323 fZvNedges(0),\r
324 fBinsMult(0),\r
df1c0513 325 fBinsMultTE(0),\r
5cc1aee2 326 fBinsPt(0),\r
327 fBinsPtCorr(0),\r
328 fBinsEta(0),\r
329 fBinsZv(0),\r
df1c0513 330 \r
331 fRapidityShift(-4.65409416218532379e-01),\r
545628c3 332 fUtils(0),\r
333 fIs2013pA(kTRUE),\r
5cc1aee2 334\r
335 fIsInit(kFALSE) \r
336 \r
337{\r
338 //\r
339 // constructor\r
340 //\r
341 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
342 fMCTrackHist1[i]=0; \r
343 fMCPrimTrackHist1[i]=0; \r
344 fMCPrimTrackHist2[i]=0; \r
345 fMCSecTrackHist1[i]=0; \r
346 fRecTrackHist1[i]=0; \r
347 fRecTrackMultHist1[i]=0; \r
348 }\r
349\r
350 //Init();\r
351}\r
352\r
353//_____________________________________________________________________________\r
354AlidNdPtAnalysispPb::~AlidNdPtAnalysispPb() {\r
355 //\r
356 // destructor\r
357 //\r
358 if(fEventMultCorrelationMatrix) delete fEventMultCorrelationMatrix; fEventMultCorrelationMatrix=0;\r
359 //\r
360 if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0;\r
361 //\r
362 if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0;\r
363 if(fGenSDEventMatrix) delete fGenSDEventMatrix; fGenSDEventMatrix=0;\r
364 if(fGenDDEventMatrix) delete fGenDDEventMatrix; fGenDDEventMatrix=0;\r
365 if(fGenNDEventMatrix) delete fGenNDEventMatrix; fGenNDEventMatrix=0;\r
366 if(fGenNSDEventMatrix) delete fGenNSDEventMatrix; fGenNSDEventMatrix=0;\r
367\r
368 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;\r
369 if(fTriggerSDEventMatrix) delete fTriggerSDEventMatrix; fTriggerSDEventMatrix=0;\r
370 if(fTriggerDDEventMatrix) delete fTriggerDDEventMatrix; fTriggerDDEventMatrix=0;\r
371 if(fTriggerNDEventMatrix) delete fTriggerNDEventMatrix; fTriggerNDEventMatrix=0;\r
372 if(fTriggerNSDEventMatrix) delete fTriggerNSDEventMatrix; fTriggerNSDEventMatrix=0;\r
373\r
374 if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0;\r
375 if(fRecSDEventMatrix) delete fRecSDEventMatrix; fRecSDEventMatrix=0;\r
376 if(fRecDDEventMatrix) delete fRecDDEventMatrix; fRecDDEventMatrix=0;\r
377 if(fRecNDEventMatrix) delete fRecNDEventMatrix; fRecNDEventMatrix=0;\r
378 if(fRecNSDEventMatrix) delete fRecNSDEventMatrix; fRecNSDEventMatrix=0;\r
379\r
380 if(fRecCandleEventMatrix) delete fRecCandleEventMatrix; fRecCandleEventMatrix=0;\r
381 //\r
382 if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;\r
383 if(fGenTrackSDEventMatrix) delete fGenTrackSDEventMatrix; fGenTrackSDEventMatrix=0;\r
384 if(fGenTrackDDEventMatrix) delete fGenTrackDDEventMatrix; fGenTrackDDEventMatrix=0;\r
385 if(fGenTrackNDEventMatrix) delete fGenTrackNDEventMatrix; fGenTrackNDEventMatrix=0;\r
386 if(fGenTrackNSDEventMatrix) delete fGenTrackNSDEventMatrix; fGenTrackNSDEventMatrix=0;\r
387\r
388 if(fTriggerTrackEventMatrix) delete fTriggerTrackEventMatrix; fTriggerTrackEventMatrix=0;\r
389 if(fTriggerTrackSDEventMatrix) delete fTriggerTrackSDEventMatrix; fTriggerTrackSDEventMatrix=0;\r
390 if(fTriggerTrackDDEventMatrix) delete fTriggerTrackDDEventMatrix; fTriggerTrackDDEventMatrix=0;\r
391 if(fTriggerTrackNDEventMatrix) delete fTriggerTrackNDEventMatrix; fTriggerTrackNDEventMatrix=0;\r
392 if(fTriggerTrackNSDEventMatrix) delete fTriggerTrackNSDEventMatrix; fTriggerTrackNSDEventMatrix=0;\r
393\r
394 if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0;\r
395 if(fRecTrackSDEventMatrix) delete fRecTrackSDEventMatrix; fRecTrackSDEventMatrix=0;\r
396 if(fRecTrackDDEventMatrix) delete fRecTrackDDEventMatrix; fRecTrackDDEventMatrix=0;\r
397 if(fRecTrackNDEventMatrix) delete fRecTrackNDEventMatrix; fRecTrackNDEventMatrix=0;\r
398 if(fRecTrackNSDEventMatrix) delete fRecTrackNSDEventMatrix; fRecTrackNSDEventMatrix=0;\r
399\r
400 //\r
401 if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0;\r
402 if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0;\r
403 if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0;\r
404 //\r
405 if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0;\r
406 if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0;\r
407 // \r
408 if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0;\r
409 //\r
410 // Control histograms\r
411 //\r
412 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;\r
413 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;\r
414 if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0;\r
415 if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0;\r
416 if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0;\r
417 if(fRecMCEventHist3) delete fRecMCEventHist3; fRecMCEventHist3=0;\r
418 //\r
419 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
420 if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;\r
421 if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;\r
422 if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;\r
423 if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;\r
424 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;\r
425 if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;\r
426 }\r
427 if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0;\r
428 if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0; \r
429 if(fRecTrackHist2) delete fRecTrackHist2; fRecTrackHist2=0; \r
430\r
431 //\r
432 if(fRecEventHist) delete fRecEventHist; fRecEventHist=0; \r
433 if(fRecTrackHist) delete fRecTrackHist; fRecTrackHist=0; \r
434 if(fEventCount) delete fEventCount; fEventCount=0;\r
435 if(fEventMultHist) delete fEventMultHist; fEventMultHist=0;\r
95a71a5c 436 if(fMCPrimTrackHist) delete fMCPrimTrackHist; fMCPrimTrackHist=0;\r
5cc1aee2 437\r
438 //\r
439 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
440 \r
441 if (fBinsMult) delete[] fBinsMult; fBinsMult=0;\r
442 if (fBinsPt) delete[] fBinsPt; fBinsPt=0;\r
443 if (fBinsPtCorr) delete[] fBinsPtCorr; fBinsPtCorr=0;\r
444 if (fBinsEta) delete[] fBinsEta; fBinsEta=0;\r
445 if (fBinsZv) delete[] fBinsMult; fBinsZv=0;\r
446 \r
447 if (fCentralityEstimatorsList) delete fCentralityEstimatorsList; fCentralityEstimatorsList=0; \r
448 if (fBinsCentrality) delete[] fBinsCentrality; fBinsCentrality=0;\r
449 if (fCentralityEventHist) delete fCentralityEventHist; fCentralityEventHist=0;\r
450 if (fCentralityTrackHist) delete fCentralityTrackHist; fCentralityTrackHist=0;\r
451 if (fVCentralityEvent) delete[] fVCentralityEvent; fVCentralityEvent=0;\r
452 if (fVCentralityTrack) delete[] fVCentralityTrack; fVCentralityTrack=0;\r
545628c3 453 \r
454 if (fUtils) delete fUtils; fUtils=0;\r
455 \r
5cc1aee2 456}\r
457\r
458\r
459//_____________________________________________________________________________\r
460void AlidNdPtAnalysispPb::SetCentralityEstimators(const char* estimators)\r
461{ \r
462 if (CanChangeBins()) {\r
463 if (fCentralityEstimatorsList) delete fCentralityEstimatorsList; fCentralityEstimatorsList=0;\r
464 TString estimatorsString(estimators);\r
465 fCentralityEstimatorsList = estimatorsString.Tokenize(" ,;:"); \r
466 fDimensionsCentralityEstimators = fCentralityEstimatorsList->GetEntries();\r
467 }\r
468}\r
469\r
470\r
471//_____________________________________________________________________________\r
472Bool_t AlidNdPtAnalysispPb::CanChangeBins()\r
473{\r
474 if (fIsInit) {\r
475 AliDebug(AliLog::kError, "Object AlidNdPtAnalysispPb already initialized. Cannot change."); \r
476 return kFALSE;\r
477 } \r
478 return kTRUE;\r
479}\r
480\r
481\r
482//_____________________________________________________________________________\r
483void AlidNdPtAnalysispPb::Init()\r
484{\r
485 //define default binning\r
df1c0513 486 Double_t binsMultDefault[15] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5, 9.5, 10.5, 20.5, 50.5, 150.5};\r
5cc1aee2 487 Double_t binsPtDefault[69] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};\r
488 Double_t binsPtCorrDefault[37] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,50.0}; \r
489 Double_t binsEtaDefault[31] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
490 Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
491 \r
492 Double_t binCentralityDefault[6] = {0.,20.,40.,60.,80.,100.};\r
493\r
494 // if no binning is set, use the default\r
df1c0513 495 if (!fBinsMult) { SetBinsMult(14,binsMultDefault); }\r
496 if (!fBinsMultTE) { SetBinsMultTE(14,binsMultDefault); }\r
5cc1aee2 497 if (!fBinsPt) { SetBinsPt(68,binsPtDefault); }\r
498 if (!fBinsPtCorr) { SetBinsPtCorr(36,binsPtCorrDefault); }\r
499 if (!fBinsEta) { SetBinsEta(30,binsEtaDefault); }\r
500 if (!fBinsZv) { SetBinsZv(12,binsZvDefault); } \r
501 if (!fBinsCentrality) { SetBinsCentrality(5,binCentralityDefault); } \r
df1c0513 502 \r
503 // Int_t binsTrackMatrix[3]={fZvNbins,fPtCorrNbins,fEtaNbins};\r
504 Int_t binsTrackEventCorrMatrix[4]={fZvNbins,fPtCorrNbins,fEtaNbins,fMultNbinsTE};\r
505 Int_t binsTrackEventCorrMatrixCent[4]={fZvNbins,fPtCorrNbins,fEtaNbins,fCentralityNbins};\r
5cc1aee2 506 \r
5cc1aee2 507\r
508 //\r
509 // Generic histograms to be corrected\r
510 //\r
511 Int_t binsEventHist[2]={fZvNbins,fMultNbins};\r
512 //Double_t minEventHist[2]={-fBinsZv[0],fBinsMult[0]}; \r
513 //Double_t maxEventHist[2]={fBinsZv[fZvNbins],fBinsMult[fMultNbins]}; \r
514\r
515 fRecEventHist = new THnSparseF("fRecEventHist","Zv:multMB",2,binsEventHist); //,minEventHist,maxEventHist);\r
516 fRecEventHist->SetBinEdges(0,fBinsZv);\r
517 fRecEventHist->SetBinEdges(1,fBinsMult);\r
518 fRecEventHist->GetAxis(0)->SetTitle("Zv (cm)");\r
519 fRecEventHist->GetAxis(1)->SetTitle("multiplicity MB");\r
520 fRecEventHist->Sumw2();\r
521\r
522 //\r
523 Int_t binsTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins};\r
524 // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; \r
525 // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; \r
526\r
df1c0513 527 fRecTrackHist = new THnSparseF("fRecTrackHist","Zv:pT:eta:multRecMult",4,binsTrackHist); //,minTrackHist,maxTrackHist);\r
5cc1aee2 528 fRecTrackHist->SetBinEdges(0,fBinsZv);\r
529 fRecTrackHist->SetBinEdges(1,fBinsPt);\r
530 fRecTrackHist->SetBinEdges(2,fBinsEta);\r
531 fRecTrackHist->SetBinEdges(3,fBinsMult);\r
532 fRecTrackHist->GetAxis(0)->SetTitle("Zv (cm)");\r
533 fRecTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)");\r
534 fRecTrackHist->GetAxis(2)->SetTitle("#eta");\r
df1c0513 535 fRecTrackHist->GetAxis(3)->SetTitle("multiplicity (multCuts)");\r
5cc1aee2 536 fRecTrackHist->Sumw2();\r
95a71a5c 537 \r
538 \r
539 Int_t binsMCPrimTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins};\r
540 // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5}; \r
541 // Double_t maxTrackHist[4]={25.,50.,1.5,149.5}; \r
5cc1aee2 542\r
df1c0513 543 fMCPrimTrackHist = new THnSparseF("fMCPrimTrackHist","Zv:mcpT:mceta:multTrueMC",4,binsMCPrimTrackHist); \r
95a71a5c 544 fMCPrimTrackHist->SetBinEdges(0,fBinsZv);\r
545 fMCPrimTrackHist->SetBinEdges(1,fBinsPt);\r
546 fMCPrimTrackHist->SetBinEdges(2,fBinsEta);\r
547 fMCPrimTrackHist->SetBinEdges(3,fBinsMult);\r
548 fMCPrimTrackHist->GetAxis(0)->SetTitle("Zv (cm)");\r
549 fMCPrimTrackHist->GetAxis(1)->SetTitle("MC p_{T} (GeV/c)");\r
550 fMCPrimTrackHist->GetAxis(2)->SetTitle("#eta (MC)");\r
551 fMCPrimTrackHist->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
552 fMCPrimTrackHist->Sumw2(); \r
553 \r
5cc1aee2 554 //\r
555 // rec. vs MC correlation matrices\r
556 //\r
557 Int_t binsMultTrueEventMatrix[3]={fMultNbins,fMultNbins,fMultNbins};\r
558// Double_t minMultTrueEventMatrix[3]={-0.5,-0.5,-0.5}; \r
559// Double_t maxMultTrueEventMatrix[3]={149.5,149.5,149.5}; \r
df1c0513 560 fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","multRecMult:multTrueMC:multMB",3,binsMultTrueEventMatrix); //,minMultTrueEventMatrix,maxMultTrueEventMatrix);\r
5cc1aee2 561 fEventMultCorrelationMatrix->SetBinEdges(0,fBinsMult);\r
562 fEventMultCorrelationMatrix->SetBinEdges(1,fBinsMult);\r
563 fEventMultCorrelationMatrix->SetBinEdges(2,fBinsMult);\r
df1c0513 564 fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("multiplicity (multCuts)");\r
565 fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 566 fEventMultCorrelationMatrix->GetAxis(2)->SetTitle("MB multiplicity");\r
567 fEventMultCorrelationMatrix->Sumw2();\r
568 \r
569 Int_t binsTrackPtCorrelationMatrix[3]={fPtCorrNbins,fPtCorrNbins,fEtaNbins};\r
570 fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix);\r
571 fTrackPtCorrelationMatrix->SetBinEdges(0,fBinsPtCorr);\r
572 fTrackPtCorrelationMatrix->SetBinEdges(1,fBinsPtCorr);\r
573 fTrackPtCorrelationMatrix->SetBinEdges(2,fBinsEta);\r
574 fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
575 fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
576 fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta");\r
577 fTrackPtCorrelationMatrix->Sumw2();\r
578\r
579 //\r
580 // Efficiency and contamination correction matrices\r
581 //\r
582 Int_t binsEventMatrix[2]={fZvNbins,fMultNbins};\r
df1c0513 583 Int_t binsEventMatrixCent[3]={fZvNbins,fMultNbins,fCentralityNbins}; \r
5cc1aee2 584// Double_t minEventMatrix[2]={-25.,-0.5}; \r
585// Double_t maxEventMatrix[2]={25.,149.5}; \r
586\r
df1c0513 587 fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 588 fGenEventMatrix->SetBinEdges(0,fBinsZv);\r
589 fGenEventMatrix->SetBinEdges(1,fBinsMult);\r
590 fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 591 fGenEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 592 fGenEventMatrix->Sumw2();\r
593 \r
df1c0513 594 fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 595 fGenSDEventMatrix->SetBinEdges(0,fBinsZv);\r
596 fGenSDEventMatrix->SetBinEdges(1,fBinsMult);\r
597 fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 598 fGenSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 599 fGenSDEventMatrix->Sumw2();\r
600 \r
df1c0513 601 fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 602 fGenDDEventMatrix->SetBinEdges(0,fBinsZv);\r
603 fGenDDEventMatrix->SetBinEdges(1,fBinsMult);\r
604 fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 605 fGenDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 606 fGenDDEventMatrix->Sumw2();\r
607 \r
df1c0513 608 fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 609 fGenNDEventMatrix->SetBinEdges(0,fBinsZv);\r
610 fGenNDEventMatrix->SetBinEdges(1,fBinsMult);\r
611 fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 612 fGenNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 613 fGenNDEventMatrix->Sumw2();\r
614\r
df1c0513 615 fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 616 fGenNSDEventMatrix->SetBinEdges(0,fBinsZv);\r
617 fGenNSDEventMatrix->SetBinEdges(1,fBinsMult);\r
618 fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 619 fGenNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 620 fGenNSDEventMatrix->Sumw2();\r
621\r
622 //\r
df1c0513 623 fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 624 fTriggerEventMatrix->SetBinEdges(0,fBinsZv);\r
625 fTriggerEventMatrix->SetBinEdges(1,fBinsMult);\r
626 fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 627 fTriggerEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 628 fTriggerEventMatrix->Sumw2();\r
629\r
df1c0513 630 fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 631 fTriggerSDEventMatrix->SetBinEdges(0,fBinsZv);\r
632 fTriggerSDEventMatrix->SetBinEdges(1,fBinsMult);\r
633 fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 634 fTriggerSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 635 fTriggerSDEventMatrix->Sumw2();\r
636 \r
df1c0513 637 fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 638 fTriggerDDEventMatrix->SetBinEdges(0,fBinsZv);\r
639 fTriggerDDEventMatrix->SetBinEdges(1,fBinsMult);\r
640 fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 641 fTriggerDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 642 fTriggerDDEventMatrix->Sumw2();\r
643 \r
df1c0513 644 fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 645 fTriggerNDEventMatrix->SetBinEdges(0,fBinsZv);\r
646 fTriggerNDEventMatrix->SetBinEdges(1,fBinsMult);\r
647 fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 648 fTriggerNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 649 fTriggerNDEventMatrix->Sumw2();\r
650 \r
df1c0513 651 fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 652 fTriggerNSDEventMatrix->SetBinEdges(0,fBinsZv);\r
653 fTriggerNSDEventMatrix->SetBinEdges(1,fBinsMult);\r
654 fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 655 fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 656 fTriggerNSDEventMatrix->Sumw2();\r
657 \r
658 //\r
df1c0513 659 fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multTrueMC:Cent",3,binsEventMatrixCent); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 660 fRecEventMatrix->SetBinEdges(0,fBinsZv);\r
661 fRecEventMatrix->SetBinEdges(1,fBinsMult);\r
df1c0513 662 fRecEventMatrix->SetBinEdges(2,fBinsCentrality); \r
5cc1aee2 663 fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 664 fRecEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
665 fRecEventMatrix->GetAxis(2)->SetTitle("Centrality");\r
5cc1aee2 666 fRecEventMatrix->Sumw2();\r
667\r
df1c0513 668 fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 669 fRecSDEventMatrix->SetBinEdges(0,fBinsZv);\r
670 fRecSDEventMatrix->SetBinEdges(1,fBinsMult);\r
671 fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 672 fRecSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 673 fRecSDEventMatrix->Sumw2();\r
674 \r
df1c0513 675 fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 676 fRecDDEventMatrix->SetBinEdges(0,fBinsZv);\r
677 fRecDDEventMatrix->SetBinEdges(1,fBinsMult);\r
678 fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 679 fRecDDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 680 fRecDDEventMatrix->Sumw2();\r
681 \r
df1c0513 682 fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 683 fRecNDEventMatrix->SetBinEdges(0,fBinsZv);\r
684 fRecNDEventMatrix->SetBinEdges(1,fBinsMult);\r
685 fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 686 fRecNDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 687 fRecNDEventMatrix->Sumw2();\r
688 \r
df1c0513 689 fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 690 fRecNSDEventMatrix->SetBinEdges(0,fBinsZv);\r
691 fRecNSDEventMatrix->SetBinEdges(1,fBinsMult);\r
692 fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 693 fRecNSDEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 694 fRecNSDEventMatrix->Sumw2();\r
695\r
df1c0513 696 fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multTrueMC",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);\r
5cc1aee2 697 fRecCandleEventMatrix->SetBinEdges(0,fBinsZv);\r
698 fRecCandleEventMatrix->SetBinEdges(1,fBinsMult);\r
699 fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
df1c0513 700 fRecCandleEventMatrix->GetAxis(1)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 701 fRecCandleEventMatrix->Sumw2();\r
702\r
703 // \r
704 // track to event corrections\r
705 //\r
706\r
df1c0513 707 fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 708 fGenTrackEventMatrix->SetBinEdges(0,fBinsZv);\r
709 fGenTrackEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
710 fGenTrackEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 711 fGenTrackEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 712 fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
713 fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
714 fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 715 fGenTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 716 fGenTrackEventMatrix->Sumw2();\r
717\r
df1c0513 718 fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 719 fGenTrackSDEventMatrix->SetBinEdges(0,fBinsZv);\r
720 fGenTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
721 fGenTrackSDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 722 fGenTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 723 fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
724 fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
725 fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 726 fGenTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 727 fGenTrackSDEventMatrix->Sumw2();\r
728\r
df1c0513 729 fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 730 fGenTrackDDEventMatrix->SetBinEdges(0,fBinsZv);\r
731 fGenTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
732 fGenTrackDDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 733 fGenTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 734 fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
735 fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
736 fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 737 fGenTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 738 fGenTrackDDEventMatrix->Sumw2();\r
739\r
df1c0513 740 fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 741 fGenTrackNDEventMatrix->SetBinEdges(0,fBinsZv);\r
742 fGenTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
743 fGenTrackNDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 744 fGenTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 745 fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
746 fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
747 fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 748 fGenTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 749 fGenTrackNDEventMatrix->Sumw2();\r
750\r
df1c0513 751 fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 752 fGenTrackNSDEventMatrix->SetBinEdges(0,fBinsZv);\r
753 fGenTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
754 fGenTrackNSDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 755 fGenTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 756 fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
757 fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
758 fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 759 fGenTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 760 fGenTrackNSDEventMatrix->Sumw2();\r
761\r
762\r
763 //\r
df1c0513 764 fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 765 fTriggerTrackEventMatrix->SetBinEdges(0,fBinsZv);\r
766 fTriggerTrackEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
767 fTriggerTrackEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 768 fTriggerTrackEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 769 fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
770 fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
771 fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 772 fTriggerTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 773 fTriggerTrackEventMatrix->Sumw2();\r
774\r
df1c0513 775 fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 776 fTriggerTrackSDEventMatrix->SetBinEdges(0,fBinsZv);\r
777 fTriggerTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
778 fTriggerTrackSDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 779 fTriggerTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 780 fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
781 fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
782 fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 783 fTriggerTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 784 fTriggerTrackSDEventMatrix->Sumw2();\r
785\r
df1c0513 786 fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 787 fTriggerTrackDDEventMatrix->SetBinEdges(0,fBinsZv);\r
788 fTriggerTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
789 fTriggerTrackDDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 790 fTriggerTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 791 fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
792 fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
793 fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 794 fTriggerTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 795 fTriggerTrackDDEventMatrix->Sumw2();\r
796\r
df1c0513 797 fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 798 fTriggerTrackNDEventMatrix->SetBinEdges(0,fBinsZv);\r
799 fTriggerTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
800 fTriggerTrackNDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 801 fTriggerTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 802 fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
803 fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
804 fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 805 fTriggerTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 806 fTriggerTrackNDEventMatrix->Sumw2();\r
807\r
df1c0513 808 fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 809 fTriggerTrackNSDEventMatrix->SetBinEdges(0,fBinsZv);\r
810 fTriggerTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
811 fTriggerTrackNSDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 812 fTriggerTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 813 fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
814 fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
815 fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 816 fTriggerTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 817 fTriggerTrackNSDEventMatrix->Sumw2();\r
818\r
df1c0513 819\r
5cc1aee2 820 //\r
df1c0513 821 fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 822 fRecTrackEventMatrix->SetBinEdges(0,fBinsZv);\r
823 fRecTrackEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
824 fRecTrackEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 825 fRecTrackEventMatrix->SetBinEdges(3,fBinsMultTE); \r
5cc1aee2 826 fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
827 fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
828 fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 829 fRecTrackEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 830 fRecTrackEventMatrix->Sumw2();\r
831\r
df1c0513 832\r
833 fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 834 fRecTrackSDEventMatrix->SetBinEdges(0,fBinsZv);\r
835 fRecTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
836 fRecTrackSDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 837 fRecTrackSDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 838 fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
839 fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
840 fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 841 fRecTrackSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 842 fRecTrackSDEventMatrix->Sumw2();\r
843\r
df1c0513 844 fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 845 fRecTrackDDEventMatrix->SetBinEdges(0,fBinsZv);\r
846 fRecTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
847 fRecTrackDDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 848 fRecTrackDDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 849 fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
850 fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
851 fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 852 fRecTrackDDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 853 fRecTrackDDEventMatrix->Sumw2();\r
854\r
df1c0513 855 fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 856 fRecTrackNDEventMatrix->SetBinEdges(0,fBinsZv);\r
857 fRecTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
858 fRecTrackNDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 859 fRecTrackNDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 860 fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
861 fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
862 fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 863 fRecTrackNDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 864 fRecTrackNDEventMatrix->Sumw2();\r
865\r
df1c0513 866 fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta:multTrueMC",4,binsTrackEventCorrMatrix);\r
5cc1aee2 867 fRecTrackNSDEventMatrix->SetBinEdges(0,fBinsZv);\r
868 fRecTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr);\r
869 fRecTrackNSDEventMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 870 fRecTrackNSDEventMatrix->SetBinEdges(3,fBinsMultTE);\r
5cc1aee2 871 fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
872 fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
873 fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 874 fRecTrackNSDEventMatrix->GetAxis(3)->SetTitle("true multiplicity (MC)");\r
5cc1aee2 875 fRecTrackNSDEventMatrix->Sumw2();\r
5cc1aee2 876 //\r
877 // tracks correction matrices\r
878 //\r
879 //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
880 fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
881 fGenTrackMatrix->SetBinEdges(0,fBinsZv);\r
882 //fGenTrackMatrix->SetBinEdges(1,binsPt);\r
883 fGenTrackMatrix->SetBinEdges(1,fBinsPtCorr);\r
884 fGenTrackMatrix->SetBinEdges(2,fBinsEta);\r
885 fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
886 fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
887 fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
888 fGenTrackMatrix->Sumw2();\r
889\r
890 //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
df1c0513 891 fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent);\r
5cc1aee2 892 fGenPrimTrackMatrix->SetBinEdges(0,fBinsZv);\r
893 //fGenPrimTrackMatrix->SetBinEdges(1,binsPt);\r
894 fGenPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr);\r
895 fGenPrimTrackMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 896 fGenPrimTrackMatrix->SetBinEdges(3,fBinsCentrality); \r
5cc1aee2 897 fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
898 fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
899 fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 900 fGenPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality");\r
5cc1aee2 901 fGenPrimTrackMatrix->Sumw2();\r
902\r
903 //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
df1c0513 904 fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent);\r
5cc1aee2 905 fRecPrimTrackMatrix->SetBinEdges(0,fBinsZv);\r
906 //fRecPrimTrackMatrix->SetBinEdges(1,binsPt);\r
907 fRecPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr);\r
908 fRecPrimTrackMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 909 fRecPrimTrackMatrix->SetBinEdges(3,fBinsCentrality); \r
5cc1aee2 910 fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
911 fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
912 fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
df1c0513 913 fRecPrimTrackMatrix->GetAxis(3)->SetTitle("Centrality"); \r
5cc1aee2 914 fRecPrimTrackMatrix->Sumw2();\r
915\r
916 //\r
917 //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
df1c0513 918 fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent);\r
5cc1aee2 919 fRecTrackMatrix->SetBinEdges(0,fBinsZv);\r
920 //fRecTrackMatrix->SetBinEdges(1,binsPt);\r
921 fRecTrackMatrix->SetBinEdges(1,fBinsPtCorr);\r
922 fRecTrackMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 923 fRecTrackMatrix->SetBinEdges(3,fBinsCentrality);\r
5cc1aee2 924 fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
925 fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");\r
926 fRecTrackMatrix->GetAxis(2)->SetTitle("Eta");\r
df1c0513 927 fRecTrackMatrix->GetAxis(3)->SetTitle("Centrality");\r
5cc1aee2 928 fRecTrackMatrix->Sumw2();\r
929\r
930 //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
df1c0513 931 fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta:Centrality",4,binsTrackEventCorrMatrixCent);\r
5cc1aee2 932 fRecSecTrackMatrix->SetBinEdges(0,fBinsZv);\r
933 //fRecSecTrackMatrix->SetBinEdges(1,binsPt);\r
934 fRecSecTrackMatrix->SetBinEdges(1,fBinsPtCorr);\r
935 fRecSecTrackMatrix->SetBinEdges(2,fBinsEta);\r
df1c0513 936 fRecSecTrackMatrix->SetBinEdges(3,fBinsCentrality); \r
5cc1aee2 937 fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
938 fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");\r
939 fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta");\r
df1c0513 940 fRecSecTrackMatrix->GetAxis(3)->SetTitle("Centrality"); \r
5cc1aee2 941 fRecSecTrackMatrix->Sumw2();\r
942\r
943 //\r
944 //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);\r
945 fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);\r
946 fRecMultTrackMatrix->SetBinEdges(0,fBinsZv);\r
947 //fRecMultTrackMatrix->SetBinEdges(1,binsPt);\r
948 fRecMultTrackMatrix->SetBinEdges(1,fBinsPtCorr);\r
949 fRecMultTrackMatrix->SetBinEdges(2,fBinsEta);\r
950 fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
951 fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");\r
952 fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta");\r
953 fRecMultTrackMatrix->Sumw2();\r
954\r
955 //\r
956 // Control analysis histograms\r
957 //\r
958\r
959 Int_t binsMCEventHist1[3]={100,100,140};\r
960 Double_t minMCEventHist1[3]={-0.1,-0.1,-35.}; \r
961 Double_t maxMCEventHist1[3]={0.1,0.1,35.}; \r
962 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);\r
963 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");\r
964 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");\r
965 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");\r
966 fMCEventHist1->Sumw2();\r
967\r
968 //\r
969 Int_t binsRecEventHist1[3]={100,100,140};\r
970 Double_t minRecEventHist1[3]={-3.,-3.,-35.}; \r
971 Double_t maxRecEventHist1[3]={3.,3.,35.}; \r
972 \r
973 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);\r
974 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");\r
975 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");\r
976 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");\r
977 fRecEventHist1->Sumw2();\r
978\r
979 //\r
980 Int_t binsRecEventHist2[3]={fZvNbins,fMultNbins,fMultNbins};\r
981// Double_t minRecEventHist2[3]={-25.,-0.5,-0.5}; \r
982// Double_t maxRecEventHist2[3]={25.,149.5,149.5}; \r
983 \r
df1c0513 984 fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:multRecMult",3,binsRecEventHist2); //,minRecEventHist2,maxRecEventHist2);\r
5cc1aee2 985 fRecEventHist2->SetBinEdges(0,fBinsZv);\r
986 fRecEventHist2->SetBinEdges(1,fBinsMult);\r
987 fRecEventHist2->SetBinEdges(2,fBinsMult);\r
988 fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)");\r
989 fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB");\r
df1c0513 990 fRecEventHist2->GetAxis(2)->SetTitle("multiplicity (multCuts)");\r
5cc1aee2 991 fRecEventHist2->Sumw2();\r
992\r
993 //\r
994 Double_t kFact = 0.1;\r
995 Int_t binsRecMCEventHist1[3]={100,100,100};\r
996 Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact}; \r
997 Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact}; \r
998 \r
999 fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1);\r
1000 fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)");\r
1001 fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)");\r
1002 fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)");\r
1003 fRecMCEventHist1->Sumw2();\r
1004\r
1005 //\r
1006 Int_t binsRecMCEventHist2[3]={100,100,fMultNbins};\r
1007 Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0}; \r
1008 Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50}; \r
1009\r
df1c0513 1010 fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:multMB",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2);\r
5cc1aee2 1011 fRecMCEventHist2->SetBinEdges(2,fBinsMult); \r
1012 fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)");\r
1013 fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)");\r
df1c0513 1014 fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity MB");\r
5cc1aee2 1015 fRecMCEventHist2->Sumw2();\r
1016\r
1017 Int_t binsRecMCEventHist3[2]={fMultNbins,5};\r
1018 Double_t minRecMCEventHist3[2]={-0.5,0.0}; \r
1019 Double_t maxRecMCEventHist3[2]={149.50,5.0}; \r
df1c0513 1020 fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","multRecMult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3);\r
5cc1aee2 1021 fRecMCEventHist3->SetBinEdges(0,fBinsMult); \r
df1c0513 1022 fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity (multCuts)");\r
5cc1aee2 1023 fRecMCEventHist3->GetAxis(1)->SetTitle("EventType");\r
1024 fRecMCEventHist3->Sumw2();\r
1025\r
1026 //\r
1027 char name[256];\r
1028 char title[256];\r
1029 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) \r
1030 {\r
1031 // THnSparse track histograms\r
1032 \r
1033 Int_t binsMCTrackHist1[3]= {fPtCorrNbins, fEtaNbins, 90};\r
1034 Double_t minMCTrackHist1[3]={0.,-1.,0.}; \r
1035 Double_t maxMCTrackHist1[3]={10.,1.,2.*TMath::Pi()}; \r
1036 snprintf(name,256,"fMCTrackHist1_%d",i);\r
1037 snprintf(title,256,"mcPt:mcEta:mcPhi");\r
1038 \r
1039 fMCTrackHist1[i] = new THnSparseF(name,title,3,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1);\r
1040 fMCTrackHist1[i]->SetBinEdges(0,fBinsPtCorr);\r
1041 fMCTrackHist1[i]->SetBinEdges(1,fBinsEta);\r
1042 fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
1043 fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");\r
1044 fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");\r
1045 fMCTrackHist1[i]->Sumw2();\r
1046\r
1047 Int_t binsMCPrimTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000};\r
1048 Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; \r
1049 Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; \r
1050 snprintf(name,256,"fMCPrimTrackHist1_%d",i);\r
1051 snprintf(title,256,"mcPt:mcEta:pid:mech:mother");\r
1052 \r
1053 fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);\r
1054 fMCPrimTrackHist1[i]->SetBinEdges(0,fBinsPtCorr);\r
1055 fMCPrimTrackHist1[i]->SetBinEdges(1,fBinsEta);\r
1056 fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
1057 fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");\r
1058 fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid");\r
1059 fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech");\r
1060 fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");\r
1061 fMCPrimTrackHist1[i]->Sumw2();\r
1062\r
1063 Int_t binsMCPrimTrackHist2[3]= {4000,20,4000};\r
1064 Double_t minMCPrimTrackHist2[3]={0.,0.,0.}; \r
1065 Double_t maxMCPrimTrackHist2[3]={4000.,20.,4000.}; \r
1066 snprintf(name,256,"fMCPrimTrackHist2_%d",i);\r
1067 snprintf(title,256,"pdg:mech:mother");\r
1068 \r
1069 fMCPrimTrackHist2[i] = new THnSparseF(name,title,3,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);\r
1070 fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");\r
1071 fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");\r
1072 fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");\r
1073 fMCPrimTrackHist2[i]->Sumw2();\r
1074\r
1075 Int_t binsMCSecTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000};\r
1076 Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; \r
1077 Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; \r
1078 snprintf(name,256,"fMCSecTrackHist1_%d",i);\r
1079 snprintf(title,256,"mcPt:mcEta:pid:mech:mother");\r
1080 \r
1081 fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1);\r
1082 fMCSecTrackHist1[i]->SetBinEdges(0,fBinsPtCorr);\r
1083 fMCSecTrackHist1[i]->SetBinEdges(1,fBinsEta);\r
1084 fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
1085 fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");\r
1086 fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid");\r
1087 fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech");\r
1088 fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother");\r
1089 fMCSecTrackHist1[i]->Sumw2();\r
1090\r
1091 //\r
1092\r
1093 // \r
1094 \r
1095 Int_t binsRecTrackHist1[3]={fPtNbins,fEtaNbins,90};\r
1096 Double_t minRecTrackHist1[3]={0.,-1.,0.}; \r
1097 Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};\r
1098 snprintf(name,256,"fRecTrackHist1_%d",i);\r
1099 snprintf(title,256,"Pt:Eta:Phi");\r
1100 fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);\r
1101 fRecTrackHist1[i]->SetBinEdges(0,fBinsPt);\r
1102 fRecTrackHist1[i]->SetBinEdges(1,fBinsEta);\r
1103 fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");\r
1104 fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta");\r
1105 fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)");\r
1106 fRecTrackHist1[i]->Sumw2();\r
1107\r
1108 // \r
1109 Int_t binsRecTrackMultHist1[2]={fPtNbins,fMultNbins};\r
1110 snprintf(name,256,"fRecTrackMultHist_%d",i);\r
1111 snprintf(title,256,"Pt:Mult");\r
1112 fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1); //,minRecTrackMultHist1,maxRecTrackMultHist1);\r
1113 fRecTrackMultHist1[i]->SetBinEdges(0,fBinsPt);\r
1114 fRecTrackMultHist1[i]->SetBinEdges(1,fBinsMult);\r
1115 fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");\r
1116 fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");\r
1117 fRecTrackMultHist1[i]->Sumw2();\r
1118 }\r
1119\r
1120 Int_t binsRecMCTrackHist1[4] = {fPtCorrNbins,fEtaNbins,100,100};\r
1121 Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5}; \r
1122 Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5}; \r
1123 snprintf(name,256,"fRecMCTrackHist1");\r
1124 snprintf(title,256,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)");\r
1125\r
1126 fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);\r
1127 fRecMCTrackHist1->SetBinEdges(0,fBinsPtCorr);\r
1128 fRecMCTrackHist1->SetBinEdges(1,fBinsEta);\r
1129 fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
1130 fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");\r
1131 fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");\r
1132 fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");\r
1133\r
1134 Int_t binsMCMultRecTrackHist1[3] = {fPtCorrNbins,fEtaNbins,6};\r
1135 Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.}; \r
1136 Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.}; \r
1137 snprintf(name,256,"fMCMultRecTrackHist1");\r
1138 snprintf(title,256,"mcPt:mcEta:pid");\r
1139 fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);\r
1140 fMCMultRecTrackHist1->SetBinEdges(0,fBinsPtCorr);\r
1141 fMCMultRecTrackHist1->SetBinEdges(1,fBinsEta);\r
1142 fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");\r
1143 fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");\r
1144 fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");\r
1145\r
1146 //nClust:chi2PerClust:pt:eta:phi\r
1147 Int_t binsRecTrackHist2[5]={160,100,fPtNbins,fEtaNbins,90};\r
1148 Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.};\r
1149 Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()};\r
1150\r
1151 fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2);\r
1152 fRecTrackHist2->SetBinEdges(2,fBinsPt);\r
1153 fRecTrackHist2->SetBinEdges(3,fBinsEta);\r
1154 fRecTrackHist2->GetAxis(0)->SetTitle("nClust");\r
1155 fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust");\r
1156 fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)");\r
1157 fRecTrackHist2->GetAxis(3)->SetTitle("#eta");\r
1158 fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)");\r
1159 fRecTrackHist2->Sumw2();\r
1160 \r
1161 Int_t binsEventCount[3]={2,2,2};\r
1162 Double_t minEventCount[3]={0,0,0}; \r
1163 Double_t maxEventCount[3]={2,2,2}; \r
1164 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount);\r
1165 fEventCount->GetAxis(0)->SetTitle("trig");\r
1166 fEventCount->GetAxis(1)->SetTitle("trig+vert");\r
1167 fEventCount->GetAxis(2)->SetTitle("selected");\r
1168 fEventCount->Sumw2();\r
1169 \r
1170 Int_t binsEventMultHist[3]={fMultNbins,fMultNbins,fMultNbins};\r
df1c0513 1171 fEventMultHist = new THnSparseF("fEventMultHist","multMB:multRecMult:multRec",3,binsEventMultHist);\r
5cc1aee2 1172 fEventMultHist->GetAxis(0)->SetTitle("multMB");\r
df1c0513 1173 fEventMultHist->GetAxis(1)->SetTitle("multRecMult");\r
5cc1aee2 1174 fEventMultHist->GetAxis(2)->SetTitle("multRec");\r
1175 fEventMultHist->SetBinEdges(0,fBinsMult);\r
1176 fEventMultHist->SetBinEdges(1,fBinsMult);\r
1177 fEventMultHist->SetBinEdges(2,fBinsMult);\r
1178 fEventMultHist->Sumw2();\r
1179 \r
1180 //\r
1181 // create histograms for centrality\r
1182 // (only if fDimensionsCentralityEstimators > 0)\r
1183 \r
bc1c2f31 1184// if (fDimensionsCentralityEstimators > 0) {\r
5cc1aee2 1185 \r
1186 // fCentralityEventHist\r
1187 //zv:multRec:multMB:cent[n]\r
1188 Int_t dimsCentralityEventHist = fDimensionsCentralityEstimators + 3;\r
1189 Int_t* binsCentralityEventHist = new Int_t[dimsCentralityEventHist];\r
df1c0513 1190 TString titleCentralityEventHist("zV:multRecMult:multMB");\r
5cc1aee2 1191 binsCentralityEventHist[0] = fZvNbins;\r
1192 binsCentralityEventHist[1] = fMultNbins;\r
1193 binsCentralityEventHist[2] = fMultNbins;\r
1194 for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { \r
1195 binsCentralityEventHist[i+2] = fCentralityNbins; \r
1196 titleCentralityEventHist += ":cent";\r
1197 titleCentralityEventHist += TString(GetCentralityEstimator(i));\r
1198 } \r
1199 fCentralityEventHist = new THnSparseF("fCentralityEventHist",titleCentralityEventHist.Data(),dimsCentralityEventHist,binsCentralityEventHist);\r
1200 fCentralityEventHist->SetBinEdges(0,fBinsZv);\r
1201 fCentralityEventHist->SetBinEdges(1,fBinsMult);\r
1202 fCentralityEventHist->SetBinEdges(2,fBinsMult);\r
1203 fCentralityEventHist->GetAxis(0)->SetTitle("Zv (cm)");\r
df1c0513 1204 fCentralityEventHist->GetAxis(1)->SetTitle("multRecMult");\r
5cc1aee2 1205 fCentralityEventHist->GetAxis(2)->SetTitle("multMB");\r
1206 for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { \r
1207 fCentralityEventHist->SetBinEdges(i+2,fBinsCentrality);\r
1208 TString axistitle(GetCentralityEstimator(i));\r
1209 axistitle += " Centrality";\r
1210 fCentralityEventHist->GetAxis(i+2)->SetTitle(axistitle);\r
1211 } \r
1212 fCentralityEventHist->Sumw2();\r
1213 \r
1214 // fCentralityTrackHist\r
1215 //zv:pt:eta:multRec:multMB:cent[n]\r
1216 Int_t dimsCentralityTrackHist = fDimensionsCentralityEstimators + 5;\r
1217 Int_t* binsCentralityTrackHist = new Int_t[dimsCentralityTrackHist];\r
df1c0513 1218 TString titleCentralityTrackHist("zV:pT:eta:multRecMult:multMB");\r
5cc1aee2 1219 binsCentralityTrackHist[0] = fZvNbins;\r
1220 binsCentralityTrackHist[1] = fPtNbins;\r
1221 binsCentralityTrackHist[2] = fEtaNbins;\r
1222 binsCentralityTrackHist[3] = fMultNbins;\r
1223 binsCentralityTrackHist[4] = fMultNbins;\r
1224 for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { \r
1225 binsCentralityTrackHist[i+4] = fCentralityNbins; \r
1226 titleCentralityTrackHist += ":cent";\r
1227 titleCentralityTrackHist += TString(GetCentralityEstimator(i));\r
1228 } \r
1229 fCentralityTrackHist = new THnSparseF("fCentralityTrackHist",titleCentralityTrackHist.Data(),dimsCentralityTrackHist,binsCentralityTrackHist);\r
1230 fCentralityTrackHist->SetBinEdges(0,fBinsZv);\r
1231 fCentralityTrackHist->SetBinEdges(1,fBinsPt);\r
1232 fCentralityTrackHist->SetBinEdges(2,fBinsEta);\r
1233 fCentralityTrackHist->SetBinEdges(3,fBinsMult);\r
1234 fCentralityTrackHist->SetBinEdges(4,fBinsMult); \r
1235 fCentralityTrackHist->GetAxis(0)->SetTitle("Zv (cm)");\r
1236 fCentralityTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)");\r
1237 fCentralityTrackHist->GetAxis(2)->SetTitle("#eta");\r
df1c0513 1238 fCentralityTrackHist->GetAxis(3)->SetTitle("multRecMult");\r
5cc1aee2 1239 fCentralityTrackHist->GetAxis(4)->SetTitle("multMB");\r
1240 for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) { \r
1241 fCentralityTrackHist->SetBinEdges(i+4,fBinsCentrality);\r
1242 TString axistitle(GetCentralityEstimator(i));\r
1243 axistitle += " Centrality";\r
1244 fCentralityTrackHist->GetAxis(i+4)->SetTitle(axistitle);\r
1245 } \r
1246 fCentralityTrackHist->Sumw2();\r
1247 \r
1248 fNVCentralityEvent = fDimensionsCentralityEstimators + 3;\r
1249 fNVCentralityTrack = fDimensionsCentralityEstimators + 5;\r
1250 fVCentralityEvent = new Double_t[fNVCentralityEvent];\r
1251 fVCentralityTrack = new Double_t[fNVCentralityTrack];\r
bc1c2f31 1252 // }\r
5cc1aee2 1253 \r
1254 // init folder\r
1255 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");\r
1256 \r
545628c3 1257 fUtils = new AliAnalysisUtils();\r
1258 \r
5cc1aee2 1259 // set init flag\r
1260 fIsInit = kTRUE;\r
1261}\r
1262\r
1263//_____________________________________________________________________________\r
1264void AlidNdPtAnalysispPb::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)\r
1265{\r
1266 // init if not done already\r
1267 if (!fIsInit) { Init(); }\r
1268 \r
bc1c2f31 1269 \r
5cc1aee2 1270 //\r
1271 // Process real and/or simulated events\r
1272 //\r
1273 if(!esdEvent) {\r
1274 AliDebug(AliLog::kError, "esdEvent not available");\r
1275 return;\r
1276 }\r
1277\r
1278 // get selection cuts\r
1279 AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
1280 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
1281 AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
df1c0513 1282 AlidNdPtAcceptanceCuts *multAccCuts = GetMultAcceptanceCuts(); \r
5cc1aee2 1283\r
1284 if(!evtCuts || !accCuts || !esdTrackCuts) {\r
1285 AliDebug(AliLog::kError, "cuts not available");\r
1286 return;\r
1287 }\r
1288\r
1289 // trigger selection\r
1290 Bool_t isEventTriggered = kTRUE;\r
1291 AliPhysicsSelection *physicsSelection = NULL;\r
1292 AliTriggerAnalysis* triggerAnalysis = NULL;\r
1293\r
1294 // \r
1295 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();\r
1296 if (!inputHandler)\r
1297 {\r
1298 Printf("ERROR: Could not receive input handler");\r
1299 return;\r
1300 }\r
1301\r
1302 if(evtCuts->IsTriggerRequired()) \r
1303 {\r
1304 // always MB\r
1305 //isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;\r
1306 isEventTriggered = inputHandler->IsEventSelected() & GetTriggerMask();\r
1307\r
1308 physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());\r
1309 if(!physicsSelection) return;\r
1310 //SetPhysicsTriggerSelection(physicsSelection);\r
1311\r
1312 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {\r
1313 // set trigger (V0AND)\r
1314 triggerAnalysis = physicsSelection->GetTriggerAnalysis();\r
1315 if(!triggerAnalysis) return;\r
1316 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
1317 }\r
1318\r
1319 // calculate LHC background\r
1320 if(!IsUseMCInfo()) \r
1321 { \r
1322 //\r
1323 // 0-multiplicity bin for LHC background correction\r
1324 //\r
1325 /* bin0 done in the train\r
1326 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
1327 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
1328 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
1329 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
1330 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) \r
1331 {\r
1332 physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysispPb::IsBinZeroTrackSPDvtx);\r
1333 } else {\r
1334 physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysispPb::IsBinZeroSPDvtx);\r
1335 }\r
1336 */\r
1337 }\r
1338 }\r
1339\r
1340\r
1341 // use MC information\r
1342 AliHeader* header = 0;\r
1343 AliGenEventHeader* genHeader = 0;\r
1344 AliStack* stack = 0;\r
1345 TArrayF vtxMC(3);\r
1346 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;\r
1347\r
1348 Int_t multMCTrueTracks = 0;\r
1349 if(IsUseMCInfo())\r
1350 {\r
1351 //\r
1352 if(!mcEvent) {\r
1353 AliDebug(AliLog::kError, "mcEvent not available");\r
1354 return;\r
1355 }\r
1356 // get MC event header\r
1357 header = mcEvent->Header();\r
1358 if (!header) {\r
1359 AliDebug(AliLog::kError, "Header not available");\r
1360 return;\r
1361 }\r
1362 // MC particle stack\r
1363 stack = mcEvent->Stack();\r
1364 if (!stack) {\r
1365 AliDebug(AliLog::kError, "Stack not available");\r
1366 return;\r
1367 }\r
1368 // get event type (ND=0x1, DD=0x2, SD=0x4)\r
1369 evtType = AlidNdPtHelper::GetEventProcessTypePA(header);\r
1370 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));\r
1371\r
1372 // get MC vertex\r
1373 genHeader = header->GenEventHeader();\r
1374 if (!genHeader) {\r
1375 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");\r
1376 return;\r
1377 }\r
1378 genHeader->PrimaryVertex(vtxMC);\r
1379\r
1380 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};\r
1381 fMCEventHist1->Fill(vMCEventHist1);\r
1382\r
1383 // multipliticy of all MC primary tracks\r
1384 // in Zv, pt and eta ranges)\r
df1c0513 1385 if (fRapidityShift == 0) {\r
1386 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts);\r
1387 } else {\r
1388 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,multAccCuts,fRapidityShift);\r
1389 }\r
5cc1aee2 1390\r
1391 } // end bUseMC\r
1392\r
1393\r
1394 // get reconstructed vertex \r
1395 const AliESDVertex* vtxESD = 0; \r
1396 Bool_t isRecVertex = kFALSE;\r
1397 /* the following lines have been commented out for same vertex as dNdEta analysis\r
1398 if(evtCuts->IsRecVertexRequired()) \r
1399 {\r
1400 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();\r
1401 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();\r
1402 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); \r
1403 if(!vtxESD) return;\r
1404 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);\r
1405 }\r
1406\r
1407 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {\r
1408 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");\r
1409 if(!vtxESD) return;\r
1410 isRecVertex = kTRUE;\r
1411 }\r
1412 if(!vtxESD) return;\r
1413 */\r
1414 // the following lines have been added for same vertex as dNdEta analysis\r
1415 vtxESD = esdEvent->GetPrimaryVertexTracks();\r
1416 if(!vtxESD || (vtxESD->GetNContributors()<1)) {\r
1417 // SPD vertex\r
1418 vtxESD = esdEvent->GetPrimaryVertexSPD();\r
1419 if (vtxESD->GetNContributors()>0) {\r
1420 TString vtxTyp = vtxESD->GetTitle();\r
1421 if ( !vtxTyp.Contains("vertexer: Z") || (vtxESD->GetDispersion()<0.04 && vtxESD->GetZRes()<0.25)) isRecVertex = kTRUE;\r
1422 } \r
1423 \r
1424 } else {\r
1425 isRecVertex = kTRUE;\r
1426 }\r
1427\r
1428 // the previous lines have been added for same vertex as dNdEta analysis\r
1429\r
545628c3 1430 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;\r
1431 \r
1432 Bool_t isEventSelected2013 = kTRUE;\r
1433 \r
1434 // selection and pileup rejection for 2013 p-A \r
1435 if (fIs2013pA) {\r
1436 if (fUtils->IsFirstEventInChunk(esdEvent)) { isEventSelected2013 = kFALSE; }\r
1437 if (!fUtils->IsVertexSelected2013pA(esdEvent)) { isEventSelected2013 = kFALSE; }\r
1438 if (fUtils->IsPileUpEvent(esdEvent)) { isEventSelected2013 = kFALSE; }\r
1439 }\r
1440 isEventOK = isEventOK && isEventSelected2013;\r
5cc1aee2 1441 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
1442 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
1443 \r
1444 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;\r
1445 \r
1446 Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)};\r
1447 fEventCount->Fill(vEventCount); \r
1448\r
1449 // vertex contributors\r
1450 Int_t multMBTracks = 0; \r
1451 if(GetAnalysisMode() == AlidNdPtHelper::kTPC) \r
1452 { \r
1453 if(vtxESD && vtxESD->GetStatus() && isRecVertex)\r
1454 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
1455 } \r
1456 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
1457 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate ) \r
1458 {\r
1459 const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
1460 if(mult && vtxESD && vtxESD->GetStatus() && isRecVertex)\r
1461 multMBTracks = mult->GetNumberOfTracklets();\r
1462 } \r
1463 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
1464 GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid || \r
1465 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
1466 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
1467 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
1468 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt || \r
1469 GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || \r
1470 GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx\r
1471 )\r
1472 {\r
1473 if(vtxESD && vtxESD->GetStatus() && isRecVertex)\r
1474 multMBTracks = vtxESD->GetNContributors();\r
1475 }\r
1476 else {\r
1477 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));\r
1478 return; \r
1479 }\r
1480\r
1481 Bool_t isEventSelected = kTRUE;\r
1482 if(evtCuts->IsEventSelectedRequired()) \r
1483 { \r
1484 // select events with at least \r
1485 // one prompt track in acceptance\r
1486 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
1487\r
1488 isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts);\r
1489 //printf("isEventSelected %d \n", isEventSelected);\r
1490 }\r
1491\r
1492 TObjArray *allChargedTracks=0;\r
1493 //Int_t multAll=0, multAcc=0, multRec=0;\r
1494 Int_t multAll=0, multRec=0;\r
1495 Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;\r
1496\r
1497\r
1498 // check event cuts\r
df1c0513 1499 Int_t multRecMult=0;\r
1500 Double_t centralityD = -1;\r
5cc1aee2 1501 if(isEventOK && isEventTriggered && isEventSelected)\r
1502 {\r
1503 // get all charged tracks\r
1504 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
1505 if(!allChargedTracks) return;\r
1506\r
1507 Int_t entries = allChargedTracks->GetEntries();\r
1508 //printf("entries %d \n",entries);\r
1509 \r
1510\r
df1c0513 1511 // calculate mult of reconstructed tracks \r
5cc1aee2 1512 for(Int_t i=0; i<entries;++i) \r
1513 {\r
1514 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1515 if(!track) continue;\r
1516 if(track->Charge()==0) continue;\r
1517\r
1518\r
1519 // only postive charged \r
1520 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
1521 continue;\r
1522 \r
1523 // only negative charged \r
1524 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
1525 continue;\r
1526\r
df1c0513 1527 if(GetMultTrackCuts()->AcceptTrack(track)) \r
5cc1aee2 1528 {\r
df1c0513 1529 if(GetMultAcceptanceCuts()->AcceptTrack(track)) { multRecMult++; }\r
5cc1aee2 1530 } \r
1531 }\r
1532 \r
1533 \r
1534 // fill fCentralityEventHist only if necessary\r
1535 // also filles event-related value for fCentralityTrackHist\r
1536 if (fDimensionsCentralityEstimators > 0) {\r
1537 fVCentralityEvent[0] = vtxESD->GetZv();\r
df1c0513 1538 fVCentralityEvent[1] = multRecMult;\r
5cc1aee2 1539 fVCentralityEvent[2] = multMBTracks;\r
1540 fVCentralityTrack[0] = vtxESD->GetZv();\r
df1c0513 1541 fVCentralityTrack[3] = multRecMult;\r
5cc1aee2 1542 fVCentralityTrack[4] = multMBTracks;\r
1543 for (Int_t i=1; i<=fDimensionsCentralityEstimators ; i++) {\r
1544 // centrality determination\r
1545 Float_t centralityF = -1.;\r
1546 AliCentrality *esdCentrality = esdEvent->GetCentrality();\r
1547 centralityF = esdCentrality->GetCentralityPercentile(GetCentralityEstimator(i)); \r
1548 fVCentralityEvent[i+2] = centralityF;\r
1549 fVCentralityTrack[i+4] = centralityF;\r
df1c0513 1550 if (1==i) { centralityD = centralityF; }\r
5cc1aee2 1551 }\r
1552 fCentralityEventHist->Fill(fVCentralityEvent);\r
1553 } \r
1554\r
1555\r
1556 labelsAll = new Int_t[entries];\r
1557 labelsAcc = new Int_t[entries];\r
1558 labelsRec = new Int_t[entries];\r
1559 for(Int_t i=0; i<entries;++i) \r
1560 {\r
1561 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
1562 if(!track) continue;\r
1563 if(track->Charge()==0) continue;\r
1564\r
1565 // only postive charged \r
1566 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
1567 continue;\r
1568 \r
1569 // only negative charged \r
1570 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0) \r
1571 continue;\r
1572\r
df1c0513 1573 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecMult); \r
5cc1aee2 1574 labelsAll[multAll] = TMath::Abs(track->GetLabel());\r
1575 multAll++;\r
1576 \r
1577 //if(accCuts->AcceptTrack(track)) { \r
1578 //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); \r
1579 //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());\r
1580 //multAcc++;\r
1581 //}\r
1582\r
1583 // esd track selection \r
1584 // ITS stand alone\r
1585 if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx) \r
1586 {\r
1587 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;\r
1588 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;\r
1589 if(track->GetNcls(0)<4) continue;\r
1590 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
1591 } \r
1592 else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx) \r
1593 {\r
1594 //\r
1595 // ITS and TPC stand alone tracks\r
1596 //\r
1597 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;\r
1598 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;\r
1599 if(track->GetNcls(0)<4) continue;\r
1600 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
1601\r
1602 // Check matching with TPC only track\r
1603 Bool_t hasMatch = kFALSE;\r
1604 for(Int_t j=0; j<entries;++j) \r
1605 {\r
1606 if(i==j) continue;\r
1607 AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(j);\r
1608 if(!track2) continue;\r
1609 if(track2->Charge()==0) continue;\r
1610 if (!track2->GetTPCInnerParam()) continue;\r
1611\r
1612 // check loose cuts for TPC tracks\r
1613 if(!esdTrackCuts->AcceptTrack(track2)) continue; \r
1614\r
1615 AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam()));\r
1616 if(!innerTPC) continue;\r
1617 Double_t x2[3]; track2->GetXYZ(x2);\r
1618 Double_t b2[3]; AliTracker::GetBxByBz(x2,b2);\r
1619 Double_t dz[2],cov[3];\r
1620 Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov);\r
1621 if(!isPropOK && innerTPC) {delete innerTPC; continue;}\r
1622\r
1623 // check matching\r
1624 if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }\r
1625 if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }\r
1626 if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }\r
1627\r
1628 hasMatch = kTRUE;\r
1629 if(innerTPC) delete innerTPC;\r
1630 }\r
1631\r
1632 if(!hasMatch) continue;\r
1633 }\r
1634 else {\r
1635 // check track cuts\r
1636 \r
1637 if(!esdTrackCuts->AcceptTrack(track)) \r
1638 continue;\r
1639 }\r
1640\r
1641 //\r
1642 Bool_t isOK = kFALSE;\r
1643 Double_t x[3]; track->GetXYZ(x);\r
1644 Double_t b[3]; AliTracker::GetBxByBz(x,b);\r
1645\r
1646 //\r
1647 // if TPC-ITS hybrid tracking (kTPCITSHybrid)\r
1648 // replace track parameters with TPC-ony track parameters\r
1649 //\r
1650 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || \r
1651 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
1652 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
1653 {\r
1654 // Relate TPC-only tracks to Track or SPD vertex\r
1655 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);\r
1656 if(!isOK) continue;\r
1657\r
1658 // replace esd track parameters with TPCinner\r
1659 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));\r
1660 if (tpcTrack) {\r
1661 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());\r
1662 }\r
1663 if(tpcTrack) delete tpcTrack; \r
1664 } \r
1665\r
1666\r
1667 // update track parameters using vertex point \r
1668 if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || \r
1669 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ) \r
1670 {\r
1671 // update track parameters\r
1672 AliExternalTrackParam cParam;\r
1673 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam);\r
1674 if(!isOK) continue;\r
1675 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());\r
1676\r
1677 if(accCuts->AcceptTrack(track)) {\r
df1c0513 1678 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); \r
5cc1aee2 1679 labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1680 multRec++;\r
1681 } \r
1682 }\r
1683 else {\r
1684 if(accCuts->AcceptTrack(track)) \r
1685 {\r
df1c0513 1686 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecMult); \r
5cc1aee2 1687 labelsRec[multRec] = TMath::Abs(track->GetLabel());\r
1688 multRec++;\r
1689 }\r
1690 }\r
1691 }\r
1692\r
1693\r
1694 // fill track multiplicity histograms\r
1695 // terribly slow\r
1696 // FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);\r
1697\r
1698 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};\r
1699 fRecEventHist1->Fill(vRecEventHist1);\r
1700\r
df1c0513 1701 Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRecMult};\r
5cc1aee2 1702 fRecEventHist2->Fill(vRecEventHist2);\r
1703\r
1704 // \r
df1c0513 1705 //Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks};\r
1706 Double_t vRecEventHist[3] = {vtxESD->GetZv(),multMBTracks,centralityD};\r
5cc1aee2 1707 fRecEventHist->Fill(vRecEventHist);\r
1708 \r
1709 // fill fEventMultHist for cross checks\r
df1c0513 1710 Double_t vEventMultHist[3] = {multMBTracks,multRecMult,multRec};\r
5cc1aee2 1711 fEventMultHist->Fill(vEventMultHist);\r
1712 } \r
1713\r
1714 if(IsUseMCInfo()) \r
1715 {\r
1716 if(mcEvent) {\r
1717\r
1718 if(evtCuts->IsEventSelectedRequired()) \r
1719 { \r
1720 // select events with at least \r
1721 // one MC primary track in acceptance\r
1722 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
1723\r
1724 Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);\r
1725 //printf("isMCEventSelected %d \n", isMCEventSelected);\r
1726 if(!isMCEventSelected) { \r
1727\r
1728 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
1729 if(labelsAll) delete [] labelsAll; labelsAll = 0;\r
1730 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;\r
1731 if(labelsRec) delete [] labelsRec; labelsRec = 0;\r
1732\r
1733 return; \r
1734 }\r
1735 }\r
1736\r
df1c0513 1737 Double_t vMultTrueEventMatrix[3] = { multRecMult, multMCTrueTracks, multMBTracks};\r
5cc1aee2 1738 if(isEventOK && isEventTriggered) { \r
1739 if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted\r
1740 fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix);\r
1741 }\r
1742\r
1743 // \r
1744 // event level corrections (zv,N_MB)\r
1745 //\r
1746\r
1747 // all inelastic\r
df1c0513 1748 //Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks};\r
1749 Double_t vEventMatrix[3] = {vtxMC[2],multMCTrueTracks,centralityD};\r
5cc1aee2 1750 fGenEventMatrix->Fill(vEventMatrix); \r
1751 if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);\r
1752 if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);\r
1753\r
1754 // single diffractive\r
1755 if(evtType == AliPWG0Helper::kSD) {\r
1756 fGenSDEventMatrix->Fill(vEventMatrix); \r
1757 if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix);\r
1758 if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix);\r
1759 }\r
1760\r
1761 // double diffractive\r
1762 if(evtType == AliPWG0Helper::kDD) {\r
1763 fGenDDEventMatrix->Fill(vEventMatrix); \r
1764 if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix);\r
1765 if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix);\r
1766 }\r
1767\r
1768 // non diffractive\r
1769 if(evtType == AliPWG0Helper::kND) {\r
1770 fGenNDEventMatrix->Fill(vEventMatrix); \r
1771 if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix);\r
1772 if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix);\r
1773 }\r
1774\r
1775 // non single diffractive\r
1776 if(evtType != AliPWG0Helper::kSD) {\r
1777 fGenNSDEventMatrix->Fill(vEventMatrix); \r
1778 if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix);\r
1779 if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix);\r
1780 }\r
1781\r
1782 //\r
1783 // track-event level corrections (zv,pt,eta)\r
1784 //\r
1785 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) \r
1786 {\r
1787 TParticle* particle = stack->Particle(iMc);\r
1788 if (!particle)\r
1789 continue;\r
1790\r
1791 // only charged particles\r
1792 if(!particle->GetPDG()) continue;\r
1793 Double_t charge = particle->GetPDG()->Charge()/3.;\r
1794 if ( TMath::Abs(charge) < 0.001 )\r
1795 continue;\r
1796\r
1797 // only postive charged \r
1798 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
1799 continue;\r
1800 \r
1801 // only negative charged \r
1802 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
1803 continue;\r
1804 \r
1805 // physical primary\r
1806 Bool_t prim = stack->IsPhysicalPrimary(iMc);\r
1807 if(!prim) continue;\r
1808\r
1809 // checked accepted\r
1810 if(accCuts->AcceptTrack(particle)) \r
1811 {\r
df1c0513 1812 //Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()}; \r
1813 Double_t vTrackEventMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; \r
5cc1aee2 1814 fGenTrackEventMatrix->Fill(vTrackEventMatrix);\r
1815\r
1816 if(evtType == AliPWG0Helper::kSD) {\r
1817 fGenTrackSDEventMatrix->Fill(vTrackEventMatrix);\r
1818 }\r
1819 if(evtType == AliPWG0Helper::kDD) {\r
1820 fGenTrackDDEventMatrix->Fill(vTrackEventMatrix);\r
1821 }\r
1822 if(evtType == AliPWG0Helper::kND) {\r
1823 fGenTrackNDEventMatrix->Fill(vTrackEventMatrix);\r
1824 }\r
1825 if(evtType != AliPWG0Helper::kSD) {\r
1826 fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix);\r
1827 }\r
1828\r
1829 //\r
1830 if(!isEventTriggered) continue; \r
1831\r
1832 fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);\r
1833 if(evtType == AliPWG0Helper::kSD) {\r
1834 fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix);\r
1835 }\r
1836 if(evtType == AliPWG0Helper::kDD) {\r
1837 fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix);\r
1838 }\r
1839 if(evtType == AliPWG0Helper::kND) {\r
1840 fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix);\r
1841 }\r
1842 if(evtType != AliPWG0Helper::kSD) {\r
1843 fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix);\r
1844 }\r
1845\r
1846 //\r
1847 if(!isEventOK) continue; \r
1848\r
1849 fRecTrackEventMatrix->Fill(vTrackEventMatrix);\r
1850 if(evtType == AliPWG0Helper::kSD) {\r
1851 fRecTrackSDEventMatrix->Fill(vTrackEventMatrix);\r
1852 }\r
1853 if(evtType == AliPWG0Helper::kDD) {\r
1854 fRecTrackDDEventMatrix->Fill(vTrackEventMatrix);\r
1855 }\r
1856 if(evtType == AliPWG0Helper::kND) {\r
1857 fRecTrackNDEventMatrix->Fill(vTrackEventMatrix);\r
1858 }\r
1859 if(evtType != AliPWG0Helper::kSD) {\r
1860 fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix);\r
1861 }\r
1862 }\r
1863 }\r
1864\r
1865 // \r
1866 // track-level corrections (zv,pt,eta)\r
1867 //\r
1868 if(isEventOK && isEventTriggered)\r
1869 {\r
1870\r
1871 // fill MC and rec event control histograms\r
1872 if(fHistogramsOn) {\r
1873 Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]};\r
1874 fRecMCEventHist1->Fill(vRecMCEventHist1);\r
1875\r
1876 Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks};\r
1877 fRecMCEventHist2->Fill(vRecMCEventHist2);\r
1878\r
1879 Double_t vRecMCEventHist3[2] = {multRec,evtType};\r
1880 fRecMCEventHist3->Fill(vRecMCEventHist3);\r
1881 }\r
1882\r
1883 //\r
1884 // MC histograms for track efficiency studies\r
1885 //\r
1886 Int_t countRecCandle = 0;\r
1887 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) \r
1888 {\r
1889 TParticle* particle = stack->Particle(iMc);\r
1890 if (!particle)\r
1891 continue;\r
1892\r
df1c0513 1893 //Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()}; .\r
1894 Double_t vTrackMatrix[4] = {vtxMC[2],particle->Pt(),particle->Eta(),centralityD}; \r
5cc1aee2 1895\r
1896 // all genertated primaries including neutral\r
1897 //if( iMc < stack->GetNprimary() ) {\r
1898 //fGenTrackMatrix->Fill(vTrackMatrix);\r
1899 //}\r
1900\r
1901 // only charged particles\r
1902 if(!particle->GetPDG()) continue;\r
1903 Double_t charge = particle->GetPDG()->Charge()/3.;\r
1904 if (TMath::Abs(charge) < 0.001)\r
1905 continue;\r
1906\r
1907 // only postive charged \r
1908 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.) \r
1909 continue;\r
1910 \r
1911 // only negative charged \r
1912 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.) \r
1913 continue;\r
1914 \r
1915 // physical primary\r
1916 Bool_t prim = stack->IsPhysicalPrimary(iMc);\r
1917\r
1918 // check accepted\r
1919 if(accCuts->AcceptTrack(particle)) \r
1920 {\r
1921\r
df1c0513 1922 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) { \r
5cc1aee2 1923 fGenPrimTrackMatrix->Fill(vTrackMatrix);\r
95a71a5c 1924 Double_t vMCPrimTrackHist[4] = {vtxMC[2],particle->Pt(),particle->Eta(),multMCTrueTracks}; \r
1925 fMCPrimTrackHist->Fill(vMCPrimTrackHist);\r
df1c0513 1926 }\r
5cc1aee2 1927 // fill control histograms\r
1928 if(fHistogramsOn) \r
1929 FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks); \r
1930\r
1931 // check multiple found tracks\r
1932 Int_t multCount = 0;\r
1933 for(Int_t iRec=0; iRec<multRec; ++iRec)\r
1934 {\r
1935 if(iMc == labelsRec[iRec]) \r
1936 {\r
1937 multCount++;\r
1938 if(multCount>1)\r
1939 { \r
1940 fRecMultTrackMatrix->Fill(vTrackMatrix);\r
1941\r
1942 // fill control histogram\r
1943 if(fHistogramsOn) {\r
1944 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
1945 Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid};\r
1946 fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);\r
1947 }\r
1948 }\r
1949 }\r
1950 }\r
1951\r
1952 // check reconstructed\r
1953 for(Int_t iRec=0; iRec<multRec; ++iRec)\r
1954 {\r
1955 if(iMc == labelsRec[iRec]) \r
1956 {\r
1957 fRecTrackMatrix->Fill(vTrackMatrix);\r
1958 \r
1959 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {\r
1960 fRecPrimTrackMatrix->Fill(vTrackMatrix);\r
1961 //AliESDtrack *track = esdEvent->GetTrack(iRec);\r
1962 //if(track && track->GetKinkIndex(0) < 0) \r
1963 // printf("prim kink \n");\r
1964 countRecCandle++;\r
1965 }\r
1966\r
1967 if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);\r
1968\r
1969 // fill control histograms\r
1970 if(fHistogramsOn) \r
1971 FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks); \r
1972 \r
1973 break;\r
1974 }\r
1975 }\r
1976 }\r
1977 }\r
1978\r
1979 if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix);\r
1980 }\r
1981 }\r
1982 }// end bUseMC\r
1983\r
1984 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
1985 if(labelsAll) delete [] labelsAll; labelsAll = 0;\r
1986 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;\r
1987 if(labelsRec) delete [] labelsRec; labelsRec = 0;\r
1988\r
1989 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;\r
1990 //if(trigAna) delete trigAna;\r
1991\r
1992}\r
1993\r
1994//_____________________________________________________________________________\r
1995void AlidNdPtAnalysispPb::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) {\r
1996 // multiplicity histograms\r
1997 \r
1998 if(!allChargedTracks) return;\r
1999 if(!labelsAll) return;\r
2000 if(!labelsAcc) return;\r
2001 if(!labelsRec) return;\r
2002\r
2003 Int_t entries = allChargedTracks->GetEntries();\r
2004 for(Int_t i=0; i<entries; ++i)\r
2005 {\r
2006 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);\r
2007 if(!track) continue;\r
2008 if(track->Charge() == 0) continue;\r
2009\r
2010 Int_t label = TMath::Abs(track->GetLabel());\r
2011 for(Int_t iAll=0; iAll<multAll; ++iAll) {\r
2012 if(label == labelsAll[iAll]) {\r
2013 Double_t v1[2] = {track->Pt(), multAll}; \r
2014 fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);\r
2015 }\r
2016 }\r
2017 for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {\r
2018 if(label == labelsAcc[iAcc]) {\r
2019 Double_t v2[2] = {track->Pt(), multAcc}; \r
2020 fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);\r
2021 }\r
2022 }\r
2023 for(Int_t iRec=0; iRec<multRec; ++iRec) {\r
2024 if(label == labelsRec[iRec]) {\r
2025 Double_t v3[2] = {track->Pt(), multRec}; \r
2026 fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);\r
2027 }\r
2028 }\r
2029 }\r
2030}\r
2031\r
2032//_____________________________________________________________________________\r
df1c0513 2033void AlidNdPtAnalysispPb::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multRecMult)\r
5cc1aee2 2034{\r
2035 //\r
2036 // Fill ESD track and MC histograms \r
2037 //\r
2038 if(!esdTrack) return;\r
2039\r
2040 Float_t q = esdTrack->Charge();\r
2041 if(TMath::Abs(q) < 0.001) return;\r
2042\r
2043 Float_t pt = esdTrack->Pt();\r
2044 //Float_t qpt = esdTrack->Pt() * q;\r
2045 Float_t eta = esdTrack->Eta();\r
2046 Float_t phi = esdTrack->Phi();\r
2047\r
2048 Float_t dca[2], bCov[3];\r
2049 esdTrack->GetImpactParameters(dca,bCov);\r
2050\r
2051 Int_t nClust = esdTrack->GetTPCclusters(0);\r
2052 Float_t chi2PerCluster = 0.;\r
2053 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);\r
2054\r
2055\r
2056 // fill histograms\r
2057 Double_t values1[3] = {pt,eta,phi}; \r
2058 fRecTrackHist1[trackObj]->Fill(values1);\r
2059\r
df1c0513 2060 Double_t values[4] = {zv, pt,eta, multRecMult}; \r
5cc1aee2 2061 if(trackObj == AlidNdPtHelper::kRecTracks) {\r
2062 fRecTrackHist->Fill(values);\r
2063 }\r
2064 \r
2065 //fill fCentralityTrackHist only if necessary\r
2066 if (fDimensionsCentralityEstimators > 0) {\r
2067 fVCentralityTrack[1] = pt;\r
2068 fVCentralityTrack[2] = eta;\r
2069 if(trackObj == AlidNdPtHelper::kRecTracks) {\r
2070 fCentralityTrackHist->Fill(fVCentralityTrack);\r
2071 }\r
2072 }\r
2073 \r
2074 /*\r
2075 Double_t values2[5] = {nClust,chi2PerCluster,pt,eta,phi}; \r
2076 if(trackObj == AlidNdPtHelper::kRecTracks) \r
2077 {\r
2078 if(fHistogramsOn)\r
2079 fRecTrackHist2->Fill(values2);\r
2080 }\r
2081 */\r
2082 \r
2083 //\r
2084 // Fill rec vs MC information\r
2085 //\r
2086 if(!stack) return;\r
2087\r
2088 Int_t label = TMath::Abs(esdTrack->GetLabel()); \r
2089 //if(label == 0) return;\r
2090\r
2091 if(label > stack->GetNtrack()) return;\r
2092 TParticle* particle = stack->Particle(label);\r
2093 if(!particle) return;\r
2094\r
2095 //Bool_t prim = stack->IsPhysicalPrimary(label);\r
2096 //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
2097\r
2098 Int_t motherPdg = -1;\r
2099 TParticle* mother = 0;\r
2100\r
2101 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
2102 Int_t motherLabel = particle->GetMother(0); \r
2103 if(motherLabel>0) mother = stack->Particle(motherLabel);\r
2104 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
2105 //Int_t mech = particle->GetUniqueID(); // production mechanism\r
2106\r
2107 if(!particle->GetPDG()) return;\r
2108 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
2109 if(TMath::Abs(gq)<0.001) return;\r
2110 Float_t gpt = particle->Pt();\r
2111 Float_t geta = particle->Eta();\r
2112 //Float_t qgpt = particle->Pt() * gq;\r
2113 //Float_t gphi = particle->Phi();\r
2114\r
2115 Double_t dpt=0;\r
2116 //printf("pt %f, gpt %f \n",pt,gpt);\r
2117 if(gpt) dpt = (pt-gpt)/gpt;\r
2118 Double_t deta = (eta-geta);\r
2119 \r
2120 // fill histograms\r
2121 if(trackObj == AlidNdPtHelper::kRecTracks) \r
2122 {\r
2123 Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta};\r
2124 fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);\r
2125\r
2126 Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta};\r
2127 fRecMCTrackHist1->Fill(vRecMCTrackHist1);\r
2128 }\r
2129}\r
2130\r
2131//_____________________________________________________________________________\r
2132void AlidNdPtAnalysispPb::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj)\r
2133{\r
2134 // Fill MC histograms\r
2135 if(!stack) return;\r
2136\r
2137 if(label > stack->GetNtrack()) return;\r
2138 TParticle* particle = stack->Particle(label);\r
2139 if(!particle) return;\r
2140\r
2141 Int_t motherPdg = -1;\r
2142 TParticle* mother = 0;\r
2143\r
2144 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);\r
2145 Int_t motherLabel = particle->GetMother(0); \r
2146 if(motherLabel>0) mother = stack->Particle(motherLabel);\r
2147 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
2148 Int_t mech = particle->GetUniqueID(); // production mechanism\r
2149\r
2150 if(!particle->GetPDG()) return;\r
2151 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
2152 if(TMath::Abs(gq) < 0.001) return;\r
2153\r
2154 Float_t gpt = particle->Pt();\r
2155 //Float_t qgpt = particle->Pt() * gq;\r
2156 Float_t geta = particle->Eta();\r
2157 Float_t gphi = particle->Phi();\r
2158 //Float_t gpz = particle->Pz();\r
2159\r
2160 Bool_t prim = stack->IsPhysicalPrimary(label);\r
2161 //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();\r
2162\r
2163 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);\r
2164\r
2165 //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);\r
2166 //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);\r
2167 \r
2168 //\r
2169 // fill histogram\r
2170 //\r
2171 Double_t vMCTrackHist1[3] = {gpt,geta,gphi};\r
2172 fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);\r
2173\r
2174 Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};\r
2175 Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg};\r
2176 //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
2177 if(prim) { \r
2178 fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
2179 if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);\r
2180 }\r
2181 else { \r
2182 fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);\r
2183 }\r
2184\r
2185}\r
2186\r
2187//_____________________________________________________________________________\r
2188Long64_t AlidNdPtAnalysispPb::Merge(TCollection* const list) \r
2189{\r
2190 // init if not done already\r
2191 if (!fIsInit) { Init(); }\r
2192 \r
2193 // Merge list of objects (needed by PROOF)\r
2194\r
2195 if (!list)\r
2196 return 0;\r
2197\r
2198 if (list->IsEmpty())\r
2199 return 1;\r
2200\r
2201 TIterator* iter = list->MakeIterator();\r
2202 TObject* obj = 0;\r
2203\r
2204 //\r
2205 //TList *collPhysSelection = new TList;\r
2206\r
2207 // collection of generated histograms\r
2208\r
2209 Int_t count=0;\r
2210 while((obj = iter->Next()) != 0) {\r
2211 AlidNdPtAnalysispPb* entry = dynamic_cast<AlidNdPtAnalysispPb*>(obj);\r
2212 if (entry == 0) continue; \r
2213\r
2214 // physics selection\r
2215 //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());\r
2216 //collPhysSelection->Add(entry->GetPhysicsTriggerSelection());\r
2217 \r
2218 //\r
2219 fRecEventHist->Add(entry->fRecEventHist);\r
2220 fRecTrackHist->Add(entry->fRecTrackHist);\r
2221 fEventCount->Add(entry->fEventCount);\r
2222 fEventMultHist->Add(entry->fEventMultHist);\r
bc1c2f31 2223 if (fDimensionsCentralityEstimators > 0) {\r
2224 fCentralityEventHist->Add(entry->fCentralityEventHist);\r
2225 fCentralityTrackHist->Add(entry->fCentralityTrackHist);\r
2226 }\r
5cc1aee2 2227\r
2228 //\r
2229 fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix);\r
2230 fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);\r
2231\r
2232 //\r
2233 fGenEventMatrix->Add(entry->fGenEventMatrix);\r
2234 fGenSDEventMatrix->Add(entry->fGenSDEventMatrix);\r
2235 fGenDDEventMatrix->Add(entry->fGenDDEventMatrix);\r
2236 fGenNDEventMatrix->Add(entry->fGenNDEventMatrix);\r
2237 fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix);\r
2238\r
2239 fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);\r
2240 fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix);\r
2241 fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix);\r
2242 fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix);\r
2243 fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix);\r
2244\r
2245 fRecEventMatrix->Add(entry->fRecEventMatrix);\r
2246 fRecSDEventMatrix->Add(entry->fRecSDEventMatrix);\r
2247 fRecDDEventMatrix->Add(entry->fRecDDEventMatrix);\r
2248 fRecNDEventMatrix->Add(entry->fRecNDEventMatrix);\r
2249 fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix);\r
2250\r
2251 fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix);\r
2252 //\r
2253 fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);\r
2254 fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix);\r
2255 fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix);\r
2256 fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix);\r
2257 fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix);\r
2258\r
2259 fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);\r
2260 fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix);\r
2261 fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix);\r
2262 fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix);\r
2263 fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix);\r
2264\r
2265 fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);\r
2266 fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix);\r
2267 fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix);\r
2268 fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix);\r
2269 fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix);\r
2270\r
2271 //\r
2272 fGenTrackMatrix->Add(entry->fGenTrackMatrix);\r
2273 fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);\r
2274 fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);\r
2275 //\r
2276 fRecTrackMatrix->Add(entry->fRecTrackMatrix);\r
2277 fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);\r
2278 //\r
2279 fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);\r
95a71a5c 2280 fMCPrimTrackHist->Add(entry->fMCPrimTrackHist);\r
5cc1aee2 2281\r
2282 //\r
2283 // control analysis histograms\r
2284 //\r
2285 fMCEventHist1->Add(entry->fMCEventHist1);\r
2286 fRecEventHist1->Add(entry->fRecEventHist1);\r
2287 fRecEventHist2->Add(entry->fRecEventHist2);\r
2288 fRecMCEventHist1->Add(entry->fRecMCEventHist1);\r
2289 fRecMCEventHist2->Add(entry->fRecMCEventHist2);\r
2290 fRecMCEventHist3->Add(entry->fRecMCEventHist3);\r
2291\r
2292 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {\r
2293 fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);\r
2294\r
2295 fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);\r
2296 fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);\r
2297 fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);\r
2298\r
2299 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);\r
2300 fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);\r
2301 }\r
2302 fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);\r
2303 fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);\r
2304 fRecTrackHist2->Add(entry->fRecTrackHist2);\r
2305 \r
2306\r
2307 count++;\r
2308 }\r
2309\r
2310 //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();\r
2311 //trigSelection->Merge(collPhysSelection);\r
2312 //if(collPhysSelection) delete collPhysSelection;\r
2313\r
2314return count;\r
2315}\r
2316\r
2317//____________________________________________________________________\r
2318Bool_t AlidNdPtAnalysispPb::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) {\r
2319//\r
2320// check 0-bin\r
2321// for LHC background calculation\r
2322// return kTRUE if vertex not reconstructed or\r
2323// track multiplicity == 0\r
2324//\r
2325if(!esdEvent) return kFALSE;\r
2326\r
2327 // check vertex\r
2328 const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();\r
2329 if(!vertex) return kTRUE;\r
2330\r
2331 if(vertex->GetNContributors() < 1) {\r
2332 // SPD vertex\r
2333 vertex = esdEvent->GetPrimaryVertexSPD();\r
2334 if(!vertex) return kTRUE;\r
2335 }\r
2336 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; \r
2337 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) ) \r
2338 return kTRUE;\r
2339 \r
2340return kFALSE;\r
2341}\r
2342\r
2343//____________________________________________________________________\r
2344Bool_t AlidNdPtAnalysispPb::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) {\r
2345//\r
2346// check 0-bin\r
2347// for LHC background calculation\r
2348// return kTRUE if vertex not reconstructed or\r
2349// tracklet multiplicity == 0\r
2350//\r
2351if(!esdEvent) return kFALSE;\r
2352\r
2353 // check vertex\r
2354 const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD();\r
2355 if(!vertex) return kTRUE;\r
2356 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE; \r
2357 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE;\r
2358 \r
2359return kFALSE;\r
2360}\r
2361\r
2362//_____________________________________________________________________________\r
2363void AlidNdPtAnalysispPb::Analyse() \r
2364{\r
2365 // init if not done already\r
2366 if (!fIsInit) { Init(); }\r
2367 \r
2368 // Analyse histograms\r
2369 //\r
2370 TH1::AddDirectory(kFALSE);\r
2371 TH1 *h=0, *h1=0, *h2=0, *h2c = 0; \r
2372 THnSparse *hs=0; \r
2373 TH2 *h2D=0; \r
2374\r
2375 char name[256];\r
2376 TObjArray *aFolderObj = new TObjArray;\r
2377 if(!aFolderObj) return;\r
2378 \r
2379 //\r
2380 // LHC backgraund in all and 0-bins\r
2381 //\r
2382 //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();\r
2383 //trigSel->SaveHistograms("physics_selection");\r
2384\r
2385 //\r
2386 // Reconstructed event vertex\r
2387 //\r
2388 h = fRecEventHist1->Projection(0);\r
2389 h->SetName("Xv");\r
2390 aFolderObj->Add(h);\r
2391\r
2392 h = fRecEventHist1->Projection(1);\r
2393 h->SetName("Yv");\r
2394 aFolderObj->Add(h);\r
2395\r
2396 h = fRecEventHist1->Projection(2);\r
2397 h->SetName("Zv");\r
2398 aFolderObj->Add(h);\r
2399\r
2400 //\r
2401 // multiplicity\r
2402 //\r
2403 h = fRecEventHist2->Projection(1);\r
2404 h->SetName("multMB");\r
2405 aFolderObj->Add(h);\r
2406\r
2407 h = fRecEventHist2->Projection(2);\r
2408 h->SetName("multiplicity");\r
2409 aFolderObj->Add(h);\r
2410\r
2411 h2D = fRecEventHist2->Projection(0,1); \r
2412 h2D->SetName("Zv_vs_multiplicity_MB");\r
2413 aFolderObj->Add(h2D);\r
2414\r
2415 //\r
2416 // reconstructed pt histograms\r
2417 //\r
2418 h = fRecTrackHist1[0]->Projection(0);\r
2419 h->Scale(1.,"width");\r
2420 h->SetName("pt_all_ch");\r
2421 aFolderObj->Add(h);\r
2422\r
2423 h = fRecTrackHist1[1]->Projection(0);\r
2424 h->Scale(1.,"width");\r
2425 h->SetName("pt_acc");\r
2426 aFolderObj->Add(h);\r
2427\r
2428 h = fRecTrackHist1[2]->Projection(0);\r
2429 h->Scale(1.,"width");\r
2430 h->SetName("pt_rec");\r
2431 aFolderObj->Add(h);\r
2432\r
2433 //\r
2434 // reconstructed eta histograms\r
2435 //\r
2436 h = fRecTrackHist1[0]->Projection(1);\r
2437 h->SetName("eta_all_ch");\r
2438 aFolderObj->Add(h);\r
2439\r
2440 h = fRecTrackHist1[1]->Projection(1);\r
2441 h->SetName("eta_acc");\r
2442 aFolderObj->Add(h);\r
2443\r
2444 h = fRecTrackHist1[2]->Projection(1);\r
2445 h->SetName("eta_rec");\r
2446 aFolderObj->Add(h);\r
2447\r
2448 //\r
2449 // reconstructed phi histograms\r
2450 //\r
2451 h = fRecTrackHist1[0]->Projection(2);\r
2452 h->SetName("phi_all_ch");\r
2453 aFolderObj->Add(h);\r
2454\r
2455 h = fRecTrackHist1[1]->Projection(2);\r
2456 h->SetName("phi_acc");\r
2457 aFolderObj->Add(h);\r
2458\r
2459 h = fRecTrackHist1[2]->Projection(2);\r
2460 h->SetName("phi_rec");\r
2461 aFolderObj->Add(h);\r
2462\r
2463 //\r
2464 // reconstructed eta:pt histograms\r
2465 //\r
2466 h2D = fRecTrackHist1[0]->Projection(1,0);\r
2467 h2D->SetName("pt_eta_all_ch");\r
2468 aFolderObj->Add(h2D);\r
2469\r
2470 h2D = fRecTrackHist1[1]->Projection(1,0);\r
2471 h2D->SetName("pt_eta_acc");\r
2472 aFolderObj->Add(h2D);\r
2473\r
2474 h2D = fRecTrackHist1[2]->Projection(1,0);\r
2475 h2D->SetName("pt_eta_rec");\r
2476 aFolderObj->Add(h2D);\r
2477\r
2478 //\r
2479 // reconstructed phi:pt histograms\r
2480 //\r
2481 h2D = fRecTrackHist1[0]->Projection(2,0);\r
2482 h2D->SetName("pt_phi_all_ch");\r
2483 aFolderObj->Add(h2D);\r
2484\r
2485 h2D = fRecTrackHist1[1]->Projection(2,0);\r
2486 h2D->SetName("pt_phi_acc");\r
2487 aFolderObj->Add(h2D);\r
2488\r
2489 h2D = fRecTrackHist1[2]->Projection(2,0);\r
2490 h2D->SetName("pt_phi_rec");\r
2491 aFolderObj->Add(h2D);\r
2492\r
2493 //\r
2494 // reconstructed phi:eta histograms\r
2495 //\r
2496 h2D = fRecTrackHist1[0]->Projection(2,1);\r
2497 h2D->SetName("eta_phi_all_ch");\r
2498 aFolderObj->Add(h2D);\r
2499\r
2500 h2D = fRecTrackHist1[1]->Projection(2,1);\r
2501 h2D->SetName("eta_phi_acc");\r
2502 aFolderObj->Add(h2D);\r
2503\r
2504 h2D = fRecTrackHist1[2]->Projection(2,1);\r
2505 h2D->SetName("eta_phi_rec");\r
2506 aFolderObj->Add(h2D);\r
2507\r
2508 //\r
2509 // reconstructed nClust, chi2 vs pt, eta, phi\r
2510 //\r
2511 if(fHistogramsOn) {\r
2512\r
2513 h2D = fRecTrackHist2->Projection(0,1);\r
2514 h2D->SetName("nClust_chi2_rec");\r
2515 aFolderObj->Add(h2D);\r
2516\r
2517 h2D = fRecTrackHist2->Projection(0,2);\r
2518 h2D->SetName("nClust_pt_rec");\r
2519 aFolderObj->Add(h2D);\r
2520\r
2521 h2D = fRecTrackHist2->Projection(0,3);\r
2522 h2D->SetName("nClust_eta_rec");\r
2523 aFolderObj->Add(h2D);\r
2524\r
2525 h2D = fRecTrackHist2->Projection(0,4);\r
2526 h2D->SetName("nClust_phi_rec");\r
2527 aFolderObj->Add(h2D);\r
2528\r
2529 h2D = fRecTrackHist2->Projection(1,2);\r
2530 h2D->SetName("chi2_pt_rec");\r
2531 aFolderObj->Add(h2D);\r
2532\r
2533 h2D = fRecTrackHist2->Projection(1,3);\r
2534 h2D->SetName("chi2_eta_rec");\r
2535 aFolderObj->Add(h2D);\r
2536\r
2537 h2D = fRecTrackHist2->Projection(1,4);\r
2538 h2D->SetName("chi2_phi_rec");\r
2539 aFolderObj->Add(h2D);\r
2540\r
2541 }\r
2542\r
2543 //\r
2544 // calculate corrections for empty events\r
2545 // with multMB==0 \r
2546 //\r
2547\r
2548 //\r
2549 // normalised zv to generate zv for triggered events\r
2550 //\r
2551 h = fRecEventHist2->Projection(0);\r
2552 if( h->Integral() ) h->Scale(1./h->Integral());\r
2553 h->SetName("zv_distribution_norm");\r
2554 aFolderObj->Add(h);\r
2555 \r
2556 //\r
2557 // MC available\r
2558 //\r
2559 if(IsUseMCInfo()) {\r
2560\r
2561 //\r
2562 // Event vertex resolution\r
2563 //\r
2564 h2D = fRecMCEventHist2->Projection(0,2);\r
2565 h2D->SetName("DeltaXv_vs_mult");\r
2566 aFolderObj->Add(h2D);\r
2567\r
2568 h2D = fRecMCEventHist2->Projection(1,2);\r
2569 h2D->SetName("DeltaZv_vs_mult");\r
2570 aFolderObj->Add(h2D);\r
2571\r
2572 //\r
2573 // normalised zv to get trigger/trigger+vertex event differences\r
2574 // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)\r
2575 //\r
2576 fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);\r
2577 h = fTriggerEventMatrix->Projection(0);\r
2578 h2D = fTriggerEventMatrix->Projection(0,1);\r
2579 if(h2D->Integral()) h->Scale(1./h2D->Integral());\r
2580\r
2581 h1 = fRecEventMatrix->Projection(0);\r
2582 h2D = fRecEventMatrix->Projection(0,1);\r
2583 if(h2D->Integral()) h1->Scale(1./h2D->Integral());\r
2584\r
2585 h->Divide(h1);\r
2586 h->SetName("zv_empty_events_norm");\r
2587 aFolderObj->Add(h);\r
2588 \r
2589 fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());\r
2590\r
2591 //\r
2592 // rec. vs true multiplicity correlation matrix\r
2593 //\r
2594 hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix");\r
2595 aFolderObj->Add(hs);\r
2596 \r
2597 //\r
2598 // rec. vs true track pt correlation matrix\r
2599 //\r
2600 hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");\r
2601 aFolderObj->Add(hs);\r
2602\r
2603 //\r
2604 // trigger efficiency for INEL\r
2605 //\r
2606 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");\r
2607 aFolderObj->Add(h);\r
2608\r
2609 //\r
2610 // trigger efficiency for NSD\r
2611 //\r
2612 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix");\r
2613 aFolderObj->Add(h);\r
2614\r
2615 //\r
2616 // trigger bias correction (MB to ND)\r
2617 //\r
2618 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix");\r
2619 aFolderObj->Add(hs);\r
2620\r
2621 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix");\r
2622 aFolderObj->Add(h);\r
2623\r
2624\r
2625 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix");\r
2626\r
2627 aFolderObj->Add(h);\r
2628\r
2629 //\r
2630 // trigger bias correction (MB to NSD)\r
2631 //\r
2632 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix");\r
2633 aFolderObj->Add(hs);\r
2634\r
2635 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D");\r
2636 aFolderObj->Add(h2D);\r
2637\r
2638 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix");\r
2639 aFolderObj->Add(h);\r
2640\r
2641\r
2642 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix");\r
2643 aFolderObj->Add(h);\r
2644\r
2645\r
2646 //\r
2647 // trigger bias correction (MB to INEL)\r
2648 //\r
2649 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");\r
2650 aFolderObj->Add(hs);\r
2651\r
2652 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");\r
2653 aFolderObj->Add(h2D);\r
2654\r
2655 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");\r
2656 aFolderObj->Add(h);\r
2657\r
2658 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");\r
2659 aFolderObj->Add(h);\r
2660\r
2661\r
2662 //\r
2663 // event vertex reconstruction correction (MB)\r
2664 //\r
2665 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");\r
2666 aFolderObj->Add(hs);\r
2667\r
2668 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");\r
2669 aFolderObj->Add(h2D);\r
2670\r
2671\r
2672 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");\r
2673 aFolderObj->Add(h);\r
2674\r
2675\r
2676 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");\r
2677 aFolderObj->Add(h);\r
2678\r
2679 //\r
2680 // track-event trigger bias correction (MB to ND)\r
2681 //\r
2682\r
2683 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix");\r
2684 aFolderObj->Add(hs);\r
2685\r
2686 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix");\r
2687 aFolderObj->Add(h2D);\r
2688\r
2689 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix");\r
2690 aFolderObj->Add(h2D);\r
2691\r
2692 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix");\r
2693 aFolderObj->Add(h2D);\r
2694\r
2695 //\r
2696 // track-event trigger bias correction (MB to NSD)\r
2697 //\r
2698 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix");\r
2699 aFolderObj->Add(hs);\r
2700\r
2701 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix");\r
2702 aFolderObj->Add(h2D);\r
2703\r
2704 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix");\r
2705 aFolderObj->Add(h2D);\r
2706\r
2707 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix");\r
2708 aFolderObj->Add(h2D);\r
2709\r
2710\r
2711 //\r
2712 // track-event trigger bias correction (MB to INEL)\r
2713 //\r
2714 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");\r
2715 aFolderObj->Add(hs);\r
2716\r
2717 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");\r
2718 aFolderObj->Add(h2D);\r
2719\r
2720 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");\r
2721 aFolderObj->Add(h2D);\r
2722\r
2723 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");\r
2724 aFolderObj->Add(h2D);\r
2725\r
2726 // efficiency\r
2727\r
2728 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");\r
2729 aFolderObj->Add(h);\r
2730\r
2731\r
2732 //\r
2733 // track-event vertex reconstruction correction (MB)\r
2734 //\r
2735 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");\r
2736 aFolderObj->Add(hs);\r
2737\r
2738 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");\r
2739 aFolderObj->Add(h2D);\r
2740\r
2741 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");\r
2742 aFolderObj->Add(h2D);\r
2743\r
2744 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");\r
2745 aFolderObj->Add(h2D);\r
2746 \r
2747 // efficiency\r
2748\r
2749 h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");\r
2750 aFolderObj->Add(h);\r
2751\r
2752\r
2753 //\r
2754 // track rec. efficiency correction\r
2755 //\r
2756 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");\r
2757 aFolderObj->Add(hs);\r
2758\r
2759 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");\r
2760 aFolderObj->Add(h2D);\r
2761\r
2762 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");\r
2763 aFolderObj->Add(h2D);\r
2764\r
2765 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");\r
2766 aFolderObj->Add(h2D);\r
2767\r
2768 \r
2769 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");\r
2770 aFolderObj->Add(h);\r
2771\r
2772 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");\r
2773 aFolderObj->Add(h);\r
2774\r
2775 // efficiency\r
2776\r
2777 h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");\r
2778 aFolderObj->Add(h);\r
2779\r
2780 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");\r
2781 aFolderObj->Add(h);\r
2782\r
2783 //\r
2784 // secondary track contamination correction\r
2785 //\r
2786 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");\r
2787 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");\r
2788 aFolderObj->Add(hs);\r
2789\r
2790 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");\r
2791 aFolderObj->Add(h2D);\r
2792\r
2793 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");\r
2794 aFolderObj->Add(h2D);\r
2795\r
2796 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");\r
2797 aFolderObj->Add(h2D);\r
2798\r
2799 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");\r
2800 aFolderObj->Add(h);\r
2801\r
2802\r
2803 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");\r
2804 aFolderObj->Add(h);\r
2805\r
2806 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");\r
2807 aFolderObj->Add(h);\r
2808\r
2809 //\r
2810 // multiple track reconstruction correction\r
2811 //\r
2812 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");\r
2813 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");\r
2814 aFolderObj->Add(hs);\r
2815\r
2816 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");\r
2817 aFolderObj->Add(h2D);\r
2818\r
2819 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");\r
2820 aFolderObj->Add(h2D);\r
2821\r
2822 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");\r
2823 aFolderObj->Add(h2D);\r
2824\r
2825 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");\r
2826 aFolderObj->Add(h);\r
2827\r
2828 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");\r
2829 aFolderObj->Add(h);\r
2830\r
2831 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");\r
2832 aFolderObj->Add(h);\r
2833\r
2834 //\r
2835 // Control histograms\r
2836 //\r
2837 \r
2838 if(fHistogramsOn) {\r
2839\r
2840 // Efficiency electrons, muons, pions, kaons, protons, all\r
2841 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1); \r
2842 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1); \r
2843 h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2844 h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2845 h2c = (TH1D *)h2->Clone();\r
2846 h2c->Divide(h1);\r
2847 h2c->SetName("eff_pt_electrons");\r
2848 aFolderObj->Add(h2c);\r
2849\r
2850 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2); \r
2851 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2); \r
2852 h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2853 h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2854 h2c = (TH1D *)h2->Clone();\r
2855 h2c->Divide(h1);\r
2856 h2c->SetName("eff_pt_muons");\r
2857 aFolderObj->Add(h2c);\r
2858\r
2859 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3); \r
2860 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3); \r
2861 h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2862 h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2863 h2c = (TH1D *)h2->Clone();\r
2864 h2c->Divide(h1);\r
2865 h2c->SetName("eff_pt_pions");\r
2866 aFolderObj->Add(h2c);\r
2867\r
2868 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4); \r
2869 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4); \r
2870 h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2871 h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2872 h2c = (TH1D *)h2->Clone();\r
2873 h2c->Divide(h1);\r
2874 h2c->SetName("eff_pt_kaons");\r
2875 aFolderObj->Add(h2c);\r
2876\r
2877 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5); \r
2878 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5); \r
2879 h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2880 h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2881 h2c = (TH1D *)h2->Clone();\r
2882 h2c->Divide(h1);\r
2883 h2c->SetName("eff_pt_protons");\r
2884 aFolderObj->Add(h2c);\r
2885\r
2886 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); \r
2887 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); \r
2888 h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2889 h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2890 h2c = (TH1D *)h2->Clone();\r
2891 h2c->Divide(h1);\r
2892 h2c->SetName("eff_pt_selected");\r
2893 aFolderObj->Add(h2c);\r
2894\r
2895 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); \r
2896 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); \r
2897 h1 = fMCPrimTrackHist1[1]->Projection(0);\r
2898 h2 = fMCPrimTrackHist1[2]->Projection(0);\r
2899 h2c = (TH1D *)h2->Clone();\r
2900 h2c->Divide(h1);\r
2901 h2c->SetName("eff_pt_all");\r
2902 aFolderObj->Add(h2c);\r
2903\r
2904 fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins()); \r
2905 fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());\r
2906\r
2907 // pt spetra\r
2908 // - rec, primaries, secondaries\r
2909 // - primaries (pid) \r
2910 // - secondaries (pid)\r
2911 // - secondaries (mech)\r
2912 // - secondaries (mother)\r
2913 //\r
2914\r
2915 TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);\r
2916 mcPtAccall->SetName("mc_pt_acc_all");\r
2917 aFolderObj->Add(mcPtAccall);\r
2918\r
2919 TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);\r
2920 mcPtAccprim->SetName("mc_pt_acc_prim");\r
2921 aFolderObj->Add(mcPtAccprim);\r
2922\r
2923 TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);\r
2924 mcPtRecall->SetName("mc_pt_rec_all");\r
2925 aFolderObj->Add(mcPtRecall);\r
2926\r
2927 TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);\r
2928 mcPtRecprim->SetName("mc_pt_rec_prim");\r
2929 aFolderObj->Add(mcPtRecprim);\r
2930\r
2931 TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);\r
2932 mcPtRecsec->SetName("mc_pt_rec_sec");\r
2933 aFolderObj->Add(mcPtRecsec);\r
2934\r
2935 for(Int_t i = 0; i<6; i++) \r
2936 { \r
2937 snprintf(name,256,"mc_pt_rec_prim_pid_%d",i); \r
2938 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);\r
2939 h = fMCPrimTrackHist1[2]->Projection(0);\r
2940 h->SetName(name);\r
2941 aFolderObj->Add(h);\r
2942\r
2943 snprintf(name,256,"mc_pt_rec_sec_pid_%d",i); \r
2944 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);\r
2945 h = fMCSecTrackHist1[2]->Projection(0);\r
2946 h->SetName(name);\r
2947 aFolderObj->Add(h);\r
2948\r
2949 // production mechanisms for given pid\r
2950 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);\r
2951\r
2952 for(Int_t j=0; j<20; j++) {\r
2953 if(j == 4) {\r
2954 // decay\r
2955 \r
2956 snprintf(name,256,"mc_pt_rec_sec_pid_%d_decay",i); \r
2957 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2958 h = fMCSecTrackHist1[2]->Projection(0);\r
2959 h->SetName(name);\r
2960 aFolderObj->Add(h);\r
2961\r
2962 snprintf(name,256,"mc_eta_rec_sec_pid_%d_decay",i); \r
2963 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2964 h = fMCSecTrackHist1[2]->Projection(1);\r
2965 h->SetName(name);\r
2966 aFolderObj->Add(h);\r
2967\r
2968 snprintf(name,256,"mc_mother_rec_sec_pid_%d_decay",i); \r
2969 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2970 h = fMCSecTrackHist1[2]->Projection(4);\r
2971 h->SetName(name);\r
2972 aFolderObj->Add(h);\r
2973\r
2974 } else if (j == 5) {\r
2975 // conversion\r
2976\r
2977 snprintf(name,256,"mc_pt_rec_sec_pid_%d_conv",i); \r
2978 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2979 h = fMCSecTrackHist1[2]->Projection(0);\r
2980 h->SetName(name);\r
2981 aFolderObj->Add(h);\r
2982\r
2983 snprintf(name,256,"mc_eta_rec_sec_pid_%d_conv",i); \r
2984 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2985 h = fMCSecTrackHist1[2]->Projection(1);\r
2986 h->SetName(name);\r
2987 aFolderObj->Add(h);\r
2988\r
2989 snprintf(name,256,"mc_mother_rec_sec_pid_%d_conv",i); \r
2990 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
2991 h = fMCSecTrackHist1[2]->Projection(4);\r
2992 h->SetName(name);\r
2993 aFolderObj->Add(h);\r
2994\r
2995 } else if (j == 13) {\r
2996 // mat\r
2997 \r
2998 snprintf(name,256,"mc_pt_rec_sec_pid_%d_mat",i); \r
2999 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
3000 h = fMCSecTrackHist1[2]->Projection(0);\r
3001 h->SetName(name);\r
3002 aFolderObj->Add(h);\r
3003\r
3004 snprintf(name,256,"mc_eta_rec_sec_pid_%d_mat",i); \r
3005 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
3006 h = fMCSecTrackHist1[2]->Projection(1);\r
3007 h->SetName(name);\r
3008 aFolderObj->Add(h);\r
3009\r
3010 snprintf(name,256,"mc_eta_mother_rec_sec_pid_%d_mat",i); \r
3011 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
3012 h = fMCSecTrackHist1[2]->Projection(4,1);\r
3013 h->SetName(name);\r
3014 aFolderObj->Add(h);\r
3015\r
3016 snprintf(name,256,"mc_mother_rec_sec_pid_%d_mat",i); \r
3017 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
3018 h = fMCSecTrackHist1[2]->Projection(4);\r
3019 h->SetName(name);\r
3020 aFolderObj->Add(h);\r
3021\r
3022 snprintf(name,256,"mc_pt_mother_rec_sec_pid_%d_mat",i); \r
3023 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);\r
3024 h = fMCSecTrackHist1[2]->Projection(4,0);\r
3025 h->SetName(name);\r
3026 aFolderObj->Add(h);\r
3027\r
3028 } else {\r
3029 continue;\r
3030 }\r
3031 }\r
3032\r
3033 }\r
3034 } // end fHistogramOn\r
3035\r
3036 //\r
3037 // resolution histograms\r
3038 // only for reconstructed tracks\r
3039 //\r
3040\r
3041 TH2F *h2F=0;\r
3042 TCanvas * c = new TCanvas("resol","resol");\r
3043 c->cd();\r
3044\r
3045 //\r
3046 fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79); \r
3047\r
3048 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);\r
3049 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
3050 h->SetXTitle("p_{tmc} (GeV/c)");\r
3051 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");\r
3052 h->Draw();\r
3053 h->SetName("pt_resolution_vs_mcpt");\r
3054 aFolderObj->Add(h);\r
3055\r
3056 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);\r
3057 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
3058 h->SetXTitle("p_{tmc} (GeV/c)");\r
3059 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");\r
3060 h->Draw();\r
3061 h->SetName("dpt_mean_vs_mcpt");\r
3062 aFolderObj->Add(h);\r
3063\r
3064 //\r
3065 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);\r
3066 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
3067 h->SetXTitle("p_{tmc} (GeV/c)");\r
3068 h->SetYTitle("(#eta-#eta_{mc}) resolution");\r
3069 h->Draw();\r
3070 h->SetName("eta_resolution_vs_mcpt");\r
3071 aFolderObj->Add(h);\r
3072\r
3073 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);\r
3074 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
3075 h->SetXTitle("p_{tmc} (GeV/c)");\r
3076 h->SetYTitle("(#eta-mc#eta) mean");\r
3077 h->Draw();\r
3078 h->SetName("deta_mean_vs_mcpt");\r
3079 aFolderObj->Add(h);\r
3080 \r
3081 // \r
3082 fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins()); \r
3083\r
3084 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);\r
3085 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
3086 h->SetXTitle("#eta_{mc}");\r
3087 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");\r
3088 h->Draw();\r
3089 h->SetName("pt_resolution_vs_mceta");\r
3090 aFolderObj->Add(h);\r
3091\r
3092 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);\r
3093 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
3094 h->SetXTitle("#eta_{mc}");\r
3095 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");\r
3096 h->Draw();\r
3097 h->SetName("dpt_mean_vs_mceta");\r
3098 aFolderObj->Add(h);\r
3099\r
3100 //\r
3101 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);\r
3102 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);\r
3103 h->SetXTitle("#eta_{mc}");\r
3104 h->SetYTitle("(#eta-#eta_{mc}) resolution");\r
3105 h->Draw();\r
3106 h->SetName("eta_resolution_vs_mceta");\r
3107 aFolderObj->Add(h);\r
3108\r
3109 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);\r
3110 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);\r
3111 h->SetXTitle("#eta_{mc}");\r
3112 h->SetYTitle("(#eta-mc#eta) mean");\r
3113 h->Draw();\r
3114 h->SetName("deta_mean_vs_mceta");\r
3115 aFolderObj->Add(h);\r
3116\r
3117 fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins()); \r
3118\r
3119 } // end use MC info\r
3120\r
3121 // export objects to analysis folder\r
3122 fAnalysisFolder = ExportToFolder(aFolderObj);\r
3123\r
3124 // delete only TObjArray\r
3125 if(aFolderObj) delete aFolderObj;\r
3126}\r
3127\r
3128//_____________________________________________________________________________\r
3129TFolder* AlidNdPtAnalysispPb::ExportToFolder(TObjArray * const array) \r
3130{\r
3131 // recreate folder avery time and export objects to new one\r
3132 //\r
3133 AlidNdPtAnalysispPb * comp=this;\r
3134 TFolder *folder = comp->GetAnalysisFolder();\r
3135\r
3136 TString name, title;\r
3137 TFolder *newFolder = 0;\r
3138 Int_t i = 0;\r
3139 Int_t size = array->GetSize();\r
3140\r
3141 if(folder) { \r
3142 // get name and title from old folder\r
3143 name = folder->GetName(); \r
3144 title = folder->GetTitle(); \r
3145\r
3146 // delete old one\r
3147 delete folder;\r
3148\r
3149 // create new one\r
3150 newFolder = CreateFolder(name.Data(),title.Data());\r
3151 newFolder->SetOwner();\r
3152\r
3153 // add objects to folder\r
3154 while(i < size) {\r
3155 newFolder->Add(array->At(i));\r
3156 i++;\r
3157 }\r
3158 }\r
3159\r
3160return newFolder;\r
3161}\r
3162\r
3163//_____________________________________________________________________________\r
3164TFolder* AlidNdPtAnalysispPb::CreateFolder(TString name,TString title) { \r
3165// create folder for analysed histograms\r
3166//\r
3167TFolder *folder = 0;\r
3168 folder = new TFolder(name.Data(),title.Data());\r
3169\r
3170 return folder;\r
3171}\r