1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\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 // AlidNdPtAnalysis class.
\r
18 // a. functionality:
\r
19 // - fills analysis control histograms
\r
20 // - fills generic correction matrices
\r
21 // - generates correction matrices
\r
24 // - generic correction matrices
\r
25 // - control histograms
\r
27 // Author: J.Otwinowski 04/11/2008
\r
28 //------------------------------------------------------------------------------
\r
32 #include "TCanvas.h"
\r
33 #include "THnSparse.h"
\r
35 #include "AliHeader.h"
\r
36 #include "AliGenEventHeader.h"
\r
37 #include "AliStack.h"
\r
38 #include "AliESDEvent.h"
\r
39 #include "AliMCEvent.h"
\r
40 #include "AliESDtrackCuts.h"
\r
41 #include "AliLog.h"
\r
42 #include "AliMultiplicity.h"
\r
43 #include "AliTracker.h"
\r
45 #include "AlidNdPtEventCuts.h"
\r
46 #include "AlidNdPtAcceptanceCuts.h"
\r
47 #include "AliPhysicsSelection.h"
\r
48 #include "AliTriggerAnalysis.h"
\r
50 #include "AliPWG0Helper.h"
\r
51 #include "AlidNdPtHelper.h"
\r
52 #include "AlidNdPtAnalysis.h"
\r
54 using namespace std;
\r
56 ClassImp(AlidNdPtAnalysis)
\r
58 //_____________________________________________________________________________
\r
59 AlidNdPtAnalysis::AlidNdPtAnalysis(): AlidNdPt(),
\r
61 fHistogramsOn(kFALSE),
\r
63 // event multiplicity correlation matrix
\r
64 fEventMultCorrelationMatrix(0),
\r
66 // rec. track pt vs true track pt correlation matrix
\r
67 fTrackPtCorrelationMatrix(0),
\r
69 // event level correction
\r
71 fGenSDEventMatrix(0),
\r
72 fGenDDEventMatrix(0),
\r
73 fGenNDEventMatrix(0),
\r
74 fGenNSDEventMatrix(0),
\r
76 fTriggerEventMatrix(0),
\r
77 fTriggerSDEventMatrix(0),
\r
78 fTriggerDDEventMatrix(0),
\r
79 fTriggerNDEventMatrix(0),
\r
80 fTriggerNSDEventMatrix(0),
\r
83 fRecSDEventMatrix(0),
\r
84 fRecDDEventMatrix(0),
\r
85 fRecNDEventMatrix(0),
\r
86 fRecNSDEventMatrix(0),
\r
89 // track-event level correction
\r
91 fGenTrackEventMatrix(0),
\r
92 fGenTrackSDEventMatrix(0),
\r
93 fGenTrackDDEventMatrix(0),
\r
94 fGenTrackNDEventMatrix(0),
\r
95 fGenTrackNSDEventMatrix(0),
\r
97 fTriggerTrackEventMatrix(0),
\r
98 fTriggerTrackSDEventMatrix(0),
\r
99 fTriggerTrackDDEventMatrix(0),
\r
100 fTriggerTrackNDEventMatrix(0),
\r
101 fTriggerTrackNSDEventMatrix(0),
\r
103 fRecTrackEventMatrix(0),
\r
104 fRecTrackSDEventMatrix(0),
\r
105 fRecTrackDDEventMatrix(0),
\r
106 fRecTrackNDEventMatrix(0),
\r
107 fRecTrackNSDEventMatrix(0),
\r
109 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
\r
110 fGenTrackMatrix(0),
\r
111 fGenPrimTrackMatrix(0),
\r
112 fRecPrimTrackMatrix(0),
\r
114 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
\r
115 fRecTrackMatrix(0),
\r
116 fRecSecTrackMatrix(0),
\r
118 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)
\r
119 fRecMultTrackMatrix(0),
\r
121 // event control histograms
\r
125 fRecMCEventHist1(0),
\r
126 fRecMCEventHist2(0),
\r
127 fRecMCEventHist3(0),
\r
129 // rec. pt and eta resolution w.r.t MC
\r
130 fRecMCTrackHist1(0),
\r
132 //multple reconstructed tracks
\r
133 fMCMultRecTrackHist1(0),
\r
135 // rec. track control histograms
\r
138 // default constructor
\r
139 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
140 fMCTrackHist1[i]=0;
\r
141 fMCPrimTrackHist1[i]=0;
\r
142 fMCPrimTrackHist2[i]=0;
\r
143 fMCSecTrackHist1[i]=0;
\r
144 fRecTrackHist1[i]=0;
\r
145 fRecTrackMultHist1[i]=0;
\r
150 //_____________________________________________________________________________
\r
151 AlidNdPtAnalysis::AlidNdPtAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,title),
\r
152 fAnalysisFolder(0),
\r
153 fHistogramsOn(kFALSE),
\r
155 // event multiplicity correlation matrix
\r
156 fEventMultCorrelationMatrix(0),
\r
158 // rec. track pt vs true track pt correlation matrix
\r
159 fTrackPtCorrelationMatrix(0),
\r
161 // event level correction
\r
162 fGenEventMatrix(0),
\r
163 fGenSDEventMatrix(0),
\r
164 fGenDDEventMatrix(0),
\r
165 fGenNDEventMatrix(0),
\r
166 fGenNSDEventMatrix(0),
\r
168 fTriggerEventMatrix(0),
\r
169 fTriggerSDEventMatrix(0),
\r
170 fTriggerDDEventMatrix(0),
\r
171 fTriggerNDEventMatrix(0),
\r
172 fTriggerNSDEventMatrix(0),
\r
174 fRecEventMatrix(0),
\r
175 fRecSDEventMatrix(0),
\r
176 fRecDDEventMatrix(0),
\r
177 fRecNDEventMatrix(0),
\r
178 fRecNSDEventMatrix(0),
\r
181 // track-event level correction
\r
183 fGenTrackEventMatrix(0),
\r
184 fGenTrackSDEventMatrix(0),
\r
185 fGenTrackDDEventMatrix(0),
\r
186 fGenTrackNDEventMatrix(0),
\r
187 fGenTrackNSDEventMatrix(0),
\r
189 fTriggerTrackEventMatrix(0),
\r
190 fTriggerTrackSDEventMatrix(0),
\r
191 fTriggerTrackDDEventMatrix(0),
\r
192 fTriggerTrackNDEventMatrix(0),
\r
193 fTriggerTrackNSDEventMatrix(0),
\r
195 fRecTrackEventMatrix(0),
\r
196 fRecTrackSDEventMatrix(0),
\r
197 fRecTrackDDEventMatrix(0),
\r
198 fRecTrackNDEventMatrix(0),
\r
199 fRecTrackNSDEventMatrix(0),
\r
201 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
\r
202 fGenTrackMatrix(0),
\r
203 fGenPrimTrackMatrix(0),
\r
204 fRecPrimTrackMatrix(0),
\r
206 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
\r
207 fRecTrackMatrix(0),
\r
208 fRecSecTrackMatrix(0),
\r
210 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)
\r
211 fRecMultTrackMatrix(0),
\r
213 // event control histograms
\r
217 fRecMCEventHist1(0),
\r
218 fRecMCEventHist2(0),
\r
219 fRecMCEventHist3(0),
\r
221 // rec. pt and eta resolution w.r.t MC
\r
222 fRecMCTrackHist1(0),
\r
224 //multple reconstructed tracks
\r
225 fMCMultRecTrackHist1(0),
\r
227 // rec. track control histograms
\r
233 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
234 fMCTrackHist1[i]=0;
\r
235 fMCPrimTrackHist1[i]=0;
\r
236 fMCPrimTrackHist2[i]=0;
\r
237 fMCSecTrackHist1[i]=0;
\r
238 fRecTrackHist1[i]=0;
\r
239 fRecTrackMultHist1[i]=0;
\r
245 //_____________________________________________________________________________
\r
246 AlidNdPtAnalysis::~AlidNdPtAnalysis() {
\r
250 if(fEventMultCorrelationMatrix) delete fEventMultCorrelationMatrix; fEventMultCorrelationMatrix=0;
\r
252 if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0;
\r
254 if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0;
\r
255 if(fGenSDEventMatrix) delete fGenSDEventMatrix; fGenSDEventMatrix=0;
\r
256 if(fGenDDEventMatrix) delete fGenDDEventMatrix; fGenDDEventMatrix=0;
\r
257 if(fGenNDEventMatrix) delete fGenNDEventMatrix; fGenNDEventMatrix=0;
\r
258 if(fGenNSDEventMatrix) delete fGenNSDEventMatrix; fGenNSDEventMatrix=0;
\r
260 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
\r
261 if(fTriggerSDEventMatrix) delete fTriggerSDEventMatrix; fTriggerSDEventMatrix=0;
\r
262 if(fTriggerDDEventMatrix) delete fTriggerDDEventMatrix; fTriggerDDEventMatrix=0;
\r
263 if(fTriggerNDEventMatrix) delete fTriggerNDEventMatrix; fTriggerNDEventMatrix=0;
\r
264 if(fTriggerNSDEventMatrix) delete fTriggerNSDEventMatrix; fTriggerNSDEventMatrix=0;
\r
266 if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0;
\r
267 if(fRecSDEventMatrix) delete fRecSDEventMatrix; fRecSDEventMatrix=0;
\r
268 if(fRecDDEventMatrix) delete fRecDDEventMatrix; fRecDDEventMatrix=0;
\r
269 if(fRecNDEventMatrix) delete fRecNDEventMatrix; fRecNDEventMatrix=0;
\r
270 if(fRecNSDEventMatrix) delete fRecNSDEventMatrix; fRecNSDEventMatrix=0;
\r
273 if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;
\r
274 if(fGenTrackSDEventMatrix) delete fGenTrackSDEventMatrix; fGenTrackSDEventMatrix=0;
\r
275 if(fGenTrackDDEventMatrix) delete fGenTrackDDEventMatrix; fGenTrackDDEventMatrix=0;
\r
276 if(fGenTrackNDEventMatrix) delete fGenTrackNDEventMatrix; fGenTrackNDEventMatrix=0;
\r
277 if(fGenTrackNSDEventMatrix) delete fGenTrackNSDEventMatrix; fGenTrackNSDEventMatrix=0;
\r
279 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
\r
280 if(fTriggerTrackSDEventMatrix) delete fTriggerTrackSDEventMatrix; fTriggerTrackSDEventMatrix=0;
\r
281 if(fTriggerTrackDDEventMatrix) delete fTriggerTrackDDEventMatrix; fTriggerTrackDDEventMatrix=0;
\r
282 if(fTriggerTrackNDEventMatrix) delete fTriggerTrackNDEventMatrix; fTriggerTrackNDEventMatrix=0;
\r
283 if(fTriggerTrackNSDEventMatrix) delete fTriggerTrackNSDEventMatrix; fTriggerTrackNSDEventMatrix=0;
\r
285 if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0;
\r
286 if(fRecTrackSDEventMatrix) delete fRecTrackSDEventMatrix; fRecTrackSDEventMatrix=0;
\r
287 if(fRecTrackDDEventMatrix) delete fRecTrackDDEventMatrix; fRecTrackDDEventMatrix=0;
\r
288 if(fRecTrackNDEventMatrix) delete fRecTrackNDEventMatrix; fRecTrackNDEventMatrix=0;
\r
289 if(fRecTrackNSDEventMatrix) delete fRecTrackNSDEventMatrix; fRecTrackNSDEventMatrix=0;
\r
292 if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0;
\r
293 if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0;
\r
294 if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0;
\r
296 if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0;
\r
297 if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0;
\r
299 if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0;
\r
301 // Control histograms
\r
303 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;
\r
304 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;
\r
305 if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0;
\r
306 if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0;
\r
307 if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0;
\r
308 if(fRecMCEventHist3) delete fRecMCEventHist3; fRecMCEventHist3=0;
\r
310 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
311 if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;
\r
312 if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;
\r
313 if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;
\r
314 if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;
\r
315 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;
\r
316 if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;
\r
318 if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0;
\r
319 if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0;
\r
320 if(fRecTrackHist2) delete fRecTrackHist2; fRecTrackHist2=0;
\r
322 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
\r
325 //_____________________________________________________________________________
\r
326 void AlidNdPtAnalysis::Init(){
\r
331 const Int_t multNbins = 27;
\r
332 const Int_t ptNbinsTrackEventCorr = 38;
\r
333 //const Int_t ptNbins = 56;
\r
334 const Int_t ptNbins = 55;
\r
335 const Int_t etaNbins = 30;
\r
336 const Int_t zvNbins = 12;
\r
338 Double_t binsMult[multNbins+1] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,
\r
339 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,
\r
340 19.5,20.5, 21.5, 22.5, 23.5, 24.5, 29.5, 149.5};
\r
342 Double_t binsPtTrackEventCorr[ptNbinsTrackEventCorr+1] = {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,6.0,10.0,16.0};
\r
344 Double_t binsPt[ptNbins+1] = {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};
\r
346 Double_t binsEta[etaNbins+1] = {-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
348 Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
\r
349 //Double_t binsMult[multNbins+1] = {0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,12.,14.,16.,18.,20.,30.,40.,50.,70.,90.,110.,150.};
\r
351 //Int_t binsTrackMatrix[3]={zvNbins,ptNbins,etaNbins};
\r
352 Int_t binsTrackEventCorrMatrix[3]={zvNbins,ptNbinsTrackEventCorr,etaNbins};
\r
355 // rec. vs MC correlation matrices
\r
357 Int_t binsMultTrueEventMatrix[2]={150,150};
\r
358 Double_t minMultTrueEventMatrix[2]={-0.5,-0.5};
\r
359 Double_t maxMultTrueEventMatrix[2]={149.5,149.5};
\r
360 fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","mult:true_mult",2,binsMultTrueEventMatrix,minMultTrueEventMatrix,maxMultTrueEventMatrix);
\r
361 fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("track multiplicity");
\r
362 fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity");
\r
363 fEventMultCorrelationMatrix->Sumw2();
\r
365 Int_t binsTrackPtCorrelationMatrix[3]={ptNbins,ptNbins,etaNbins};
\r
366 fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix);
\r
367 fTrackPtCorrelationMatrix->SetBinEdges(0,binsPt);
\r
368 fTrackPtCorrelationMatrix->SetBinEdges(1,binsPt);
\r
369 fTrackPtCorrelationMatrix->SetBinEdges(2,binsEta);
\r
370 fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
371 fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
372 fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta");
\r
373 fTrackPtCorrelationMatrix->Sumw2();
\r
376 // Efficiency and contamination correction matrices
\r
378 Int_t binsEventMatrix[2]={zvNbins,multNbins};
\r
379 Double_t minEventMatrix[2]={-25.,-0.5};
\r
380 Double_t maxEventMatrix[2]={25.,149.5};
\r
382 fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
383 fGenEventMatrix->SetBinEdges(0,binsZv);
\r
384 fGenEventMatrix->SetBinEdges(1,binsMult);
\r
385 fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
386 fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
387 fGenEventMatrix->Sumw2();
\r
389 fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
390 fGenSDEventMatrix->SetBinEdges(0,binsZv);
\r
391 fGenSDEventMatrix->SetBinEdges(1,binsMult);
\r
392 fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
393 fGenSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
394 fGenSDEventMatrix->Sumw2();
\r
396 fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
397 fGenDDEventMatrix->SetBinEdges(0,binsZv);
\r
398 fGenDDEventMatrix->SetBinEdges(1,binsMult);
\r
399 fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
400 fGenDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
401 fGenDDEventMatrix->Sumw2();
\r
403 fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
404 fGenNDEventMatrix->SetBinEdges(0,binsZv);
\r
405 fGenNDEventMatrix->SetBinEdges(1,binsMult);
\r
406 fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
407 fGenNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
408 fGenNDEventMatrix->Sumw2();
\r
410 fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
411 fGenNSDEventMatrix->SetBinEdges(0,binsZv);
\r
412 fGenNSDEventMatrix->SetBinEdges(1,binsMult);
\r
413 fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
414 fGenNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
415 fGenNSDEventMatrix->Sumw2();
\r
418 fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
419 fTriggerEventMatrix->SetBinEdges(0,binsZv);
\r
420 fTriggerEventMatrix->SetBinEdges(1,binsMult);
\r
421 fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
422 fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
423 fTriggerEventMatrix->Sumw2();
\r
425 fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
426 fTriggerSDEventMatrix->SetBinEdges(0,binsZv);
\r
427 fTriggerSDEventMatrix->SetBinEdges(1,binsMult);
\r
428 fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
429 fTriggerSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
430 fTriggerSDEventMatrix->Sumw2();
\r
432 fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
433 fTriggerDDEventMatrix->SetBinEdges(0,binsZv);
\r
434 fTriggerDDEventMatrix->SetBinEdges(1,binsMult);
\r
435 fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
436 fTriggerDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
437 fTriggerDDEventMatrix->Sumw2();
\r
439 fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
440 fTriggerNDEventMatrix->SetBinEdges(0,binsZv);
\r
441 fTriggerNDEventMatrix->SetBinEdges(1,binsMult);
\r
442 fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
443 fTriggerNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
444 fTriggerNDEventMatrix->Sumw2();
\r
446 fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
447 fTriggerNSDEventMatrix->SetBinEdges(0,binsZv);
\r
448 fTriggerNSDEventMatrix->SetBinEdges(1,binsMult);
\r
449 fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
450 fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
451 fTriggerNSDEventMatrix->Sumw2();
\r
454 fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
455 fRecEventMatrix->SetBinEdges(0,binsZv);
\r
456 fRecEventMatrix->SetBinEdges(1,binsMult);
\r
457 fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
458 fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
459 fRecEventMatrix->Sumw2();
\r
461 fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
462 fRecSDEventMatrix->SetBinEdges(0,binsZv);
\r
463 fRecSDEventMatrix->SetBinEdges(1,binsMult);
\r
464 fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
465 fRecSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
466 fRecSDEventMatrix->Sumw2();
\r
468 fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
469 fRecDDEventMatrix->SetBinEdges(0,binsZv);
\r
470 fRecDDEventMatrix->SetBinEdges(1,binsMult);
\r
471 fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
472 fRecDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
473 fRecDDEventMatrix->Sumw2();
\r
475 fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
476 fRecNDEventMatrix->SetBinEdges(0,binsZv);
\r
477 fRecNDEventMatrix->SetBinEdges(1,binsMult);
\r
478 fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
479 fRecNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
480 fRecNDEventMatrix->Sumw2();
\r
482 fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);
\r
483 fRecNSDEventMatrix->SetBinEdges(0,binsZv);
\r
484 fRecNSDEventMatrix->SetBinEdges(1,binsMult);
\r
485 fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
486 fRecNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
487 fRecNSDEventMatrix->Sumw2();
\r
490 // track to event corrections
\r
493 fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
494 fGenTrackEventMatrix->SetBinEdges(0,binsZv);
\r
495 fGenTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
496 fGenTrackEventMatrix->SetBinEdges(2,binsEta);
\r
497 fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
498 fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
499 fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
500 fGenTrackEventMatrix->Sumw2();
\r
502 fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
503 fGenTrackSDEventMatrix->SetBinEdges(0,binsZv);
\r
504 fGenTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
505 fGenTrackSDEventMatrix->SetBinEdges(2,binsEta);
\r
506 fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
507 fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
508 fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
509 fGenTrackSDEventMatrix->Sumw2();
\r
511 fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
512 fGenTrackDDEventMatrix->SetBinEdges(0,binsZv);
\r
513 fGenTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
514 fGenTrackDDEventMatrix->SetBinEdges(2,binsEta);
\r
515 fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
516 fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
517 fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
518 fGenTrackDDEventMatrix->Sumw2();
\r
520 fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
521 fGenTrackNDEventMatrix->SetBinEdges(0,binsZv);
\r
522 fGenTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
523 fGenTrackNDEventMatrix->SetBinEdges(2,binsEta);
\r
524 fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
525 fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
526 fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
527 fGenTrackNDEventMatrix->Sumw2();
\r
529 fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
530 fGenTrackNSDEventMatrix->SetBinEdges(0,binsZv);
\r
531 fGenTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
532 fGenTrackNSDEventMatrix->SetBinEdges(2,binsEta);
\r
533 fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
534 fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
535 fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
536 fGenTrackNSDEventMatrix->Sumw2();
\r
540 fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
541 fTriggerTrackEventMatrix->SetBinEdges(0,binsZv);
\r
542 fTriggerTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
543 fTriggerTrackEventMatrix->SetBinEdges(2,binsEta);
\r
544 fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
545 fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
546 fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
547 fTriggerTrackEventMatrix->Sumw2();
\r
549 fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
550 fTriggerTrackSDEventMatrix->SetBinEdges(0,binsZv);
\r
551 fTriggerTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
552 fTriggerTrackSDEventMatrix->SetBinEdges(2,binsEta);
\r
553 fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
554 fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
555 fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
556 fTriggerTrackSDEventMatrix->Sumw2();
\r
558 fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
559 fTriggerTrackDDEventMatrix->SetBinEdges(0,binsZv);
\r
560 fTriggerTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
561 fTriggerTrackDDEventMatrix->SetBinEdges(2,binsEta);
\r
562 fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
563 fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
564 fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
565 fTriggerTrackDDEventMatrix->Sumw2();
\r
567 fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
568 fTriggerTrackNDEventMatrix->SetBinEdges(0,binsZv);
\r
569 fTriggerTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
570 fTriggerTrackNDEventMatrix->SetBinEdges(2,binsEta);
\r
571 fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
572 fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
573 fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
574 fTriggerTrackNDEventMatrix->Sumw2();
\r
576 fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
577 fTriggerTrackNSDEventMatrix->SetBinEdges(0,binsZv);
\r
578 fTriggerTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
579 fTriggerTrackNSDEventMatrix->SetBinEdges(2,binsEta);
\r
580 fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
581 fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
582 fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
583 fTriggerTrackNSDEventMatrix->Sumw2();
\r
586 fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
587 fRecTrackEventMatrix->SetBinEdges(0,binsZv);
\r
588 fRecTrackEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
589 fRecTrackEventMatrix->SetBinEdges(2,binsEta);
\r
590 fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
591 fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
592 fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
593 fRecTrackEventMatrix->Sumw2();
\r
595 fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
596 fRecTrackSDEventMatrix->SetBinEdges(0,binsZv);
\r
597 fRecTrackSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
598 fRecTrackSDEventMatrix->SetBinEdges(2,binsEta);
\r
599 fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
600 fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
601 fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
602 fRecTrackSDEventMatrix->Sumw2();
\r
604 fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
605 fRecTrackDDEventMatrix->SetBinEdges(0,binsZv);
\r
606 fRecTrackDDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
607 fRecTrackDDEventMatrix->SetBinEdges(2,binsEta);
\r
608 fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
609 fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
610 fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
611 fRecTrackDDEventMatrix->Sumw2();
\r
613 fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
614 fRecTrackNDEventMatrix->SetBinEdges(0,binsZv);
\r
615 fRecTrackNDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
616 fRecTrackNDEventMatrix->SetBinEdges(2,binsEta);
\r
617 fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
618 fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
619 fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
620 fRecTrackNDEventMatrix->Sumw2();
\r
622 fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
623 fRecTrackNSDEventMatrix->SetBinEdges(0,binsZv);
\r
624 fRecTrackNSDEventMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
625 fRecTrackNSDEventMatrix->SetBinEdges(2,binsEta);
\r
626 fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
627 fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
628 fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
629 fRecTrackNSDEventMatrix->Sumw2();
\r
632 // tracks correction matrices
\r
634 //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
635 fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
636 fGenTrackMatrix->SetBinEdges(0,binsZv);
\r
637 //fGenTrackMatrix->SetBinEdges(1,binsPt);
\r
638 fGenTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
639 fGenTrackMatrix->SetBinEdges(2,binsEta);
\r
640 fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
641 fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
642 fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
643 fGenTrackMatrix->Sumw2();
\r
645 //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
646 fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
647 fGenPrimTrackMatrix->SetBinEdges(0,binsZv);
\r
648 //fGenPrimTrackMatrix->SetBinEdges(1,binsPt);
\r
649 fGenPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
650 fGenPrimTrackMatrix->SetBinEdges(2,binsEta);
\r
651 fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
652 fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
653 fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
654 fGenPrimTrackMatrix->Sumw2();
\r
656 //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
657 fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
658 fRecPrimTrackMatrix->SetBinEdges(0,binsZv);
\r
659 //fRecPrimTrackMatrix->SetBinEdges(1,binsPt);
\r
660 fRecPrimTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
661 fRecPrimTrackMatrix->SetBinEdges(2,binsEta);
\r
662 fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
663 fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
664 fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
665 fRecPrimTrackMatrix->Sumw2();
\r
668 //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
669 fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
670 fRecTrackMatrix->SetBinEdges(0,binsZv);
\r
671 //fRecTrackMatrix->SetBinEdges(1,binsPt);
\r
672 fRecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
673 fRecTrackMatrix->SetBinEdges(2,binsEta);
\r
674 fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
675 fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");
\r
676 fRecTrackMatrix->GetAxis(2)->SetTitle("Eta");
\r
677 fRecTrackMatrix->Sumw2();
\r
679 //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
680 fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
681 fRecSecTrackMatrix->SetBinEdges(0,binsZv);
\r
682 //fRecSecTrackMatrix->SetBinEdges(1,binsPt);
\r
683 fRecSecTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
684 fRecSecTrackMatrix->SetBinEdges(2,binsEta);
\r
685 fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
686 fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");
\r
687 fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta");
\r
688 fRecSecTrackMatrix->Sumw2();
\r
691 //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
692 fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
693 fRecMultTrackMatrix->SetBinEdges(0,binsZv);
\r
694 //fRecMultTrackMatrix->SetBinEdges(1,binsPt);
\r
695 fRecMultTrackMatrix->SetBinEdges(1,binsPtTrackEventCorr);
\r
696 fRecMultTrackMatrix->SetBinEdges(2,binsEta);
\r
697 fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
698 fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
699 fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
700 fRecMultTrackMatrix->Sumw2();
\r
703 // Control analysis histograms
\r
706 Int_t binsMCEventHist1[3]={100,100,140};
\r
707 Double_t minMCEventHist1[3]={-0.1,-0.1,-35.};
\r
708 Double_t maxMCEventHist1[3]={0.1,0.1,35.};
\r
709 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
\r
710 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
\r
711 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
\r
712 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
\r
713 fMCEventHist1->Sumw2();
\r
716 Int_t binsRecEventHist1[3]={100,100,140};
\r
717 Double_t minRecEventHist1[3]={-3.,-3.,-35.};
\r
718 Double_t maxRecEventHist1[3]={3.,3.,35.};
\r
720 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
\r
721 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
\r
722 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
\r
723 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
\r
724 fRecEventHist1->Sumw2();
\r
727 Int_t binsRecEventHist2[3]={zvNbins,150,150};
\r
728 Double_t minRecEventHist2[3]={-25.,-0.5,-0.5};
\r
729 Double_t maxRecEventHist2[3]={25.,149.5,149.5};
\r
731 fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:mult",3,binsRecEventHist2,minRecEventHist2,maxRecEventHist2);
\r
732 fRecEventHist2->SetBinEdges(0,binsZv);
\r
733 fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)");
\r
734 fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB");
\r
735 fRecEventHist2->GetAxis(2)->SetTitle("multiplicity");
\r
736 fRecEventHist2->Sumw2();
\r
739 Double_t kFact = 0.1;
\r
740 Int_t binsRecMCEventHist1[3]={100,100,100};
\r
741 Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact};
\r
742 Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact};
\r
744 fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1);
\r
745 fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
\r
746 fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)");
\r
747 fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)");
\r
748 fRecMCEventHist1->Sumw2();
\r
751 Int_t binsRecMCEventHist2[3]={100,100,150};
\r
752 Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0};
\r
753 Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50};
\r
755 fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:mult",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2);
\r
756 fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
\r
757 fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)");
\r
758 fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity");
\r
759 fRecMCEventHist2->Sumw2();
\r
761 Int_t binsRecMCEventHist3[2]={150,5};
\r
762 Double_t minRecMCEventHist3[2]={-0.5,0.0};
\r
763 Double_t maxRecMCEventHist3[2]={149.50,5.0};
\r
764 fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","mult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3);
\r
765 fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity");
\r
766 fRecMCEventHist3->GetAxis(1)->SetTitle("EventType");
\r
767 fRecMCEventHist3->Sumw2();
\r
772 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
\r
774 // THnSparse track histograms
\r
776 Int_t binsMCTrackHist1[3]= {ptNbins, etaNbins, 90};
\r
777 Double_t minMCTrackHist1[3]={0.,-1.,0.};
\r
778 Double_t maxMCTrackHist1[3]={10.,1.,2.*TMath::Pi()};
\r
779 sprintf(name,"fMCTrackHist1_%d",i);
\r
780 sprintf(title,"mcPt:mcEta:mcPhi");
\r
782 fMCTrackHist1[i] = new THnSparseF(name,title,3,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1);
\r
783 fMCTrackHist1[i]->SetBinEdges(0,binsPt);
\r
784 fMCTrackHist1[i]->SetBinEdges(1,binsEta);
\r
785 fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
786 fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
\r
787 fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");
\r
788 fMCTrackHist1[i]->Sumw2();
\r
790 Int_t binsMCPrimTrackHist1[5]= {ptNbins,etaNbins,6,20,4000};
\r
791 Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.};
\r
792 Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.};
\r
793 sprintf(name,"fMCPrimTrackHist1_%d",i);
\r
794 sprintf(title,"mcPt:mcEta:pid:mech:mother");
\r
796 fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);
\r
797 fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt);
\r
798 fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta);
\r
799 fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
800 fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
\r
801 fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid");
\r
802 fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech");
\r
803 fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");
\r
804 fMCPrimTrackHist1[i]->Sumw2();
\r
806 Int_t binsMCPrimTrackHist2[5]= {4000,20,4000};
\r
807 Double_t minMCPrimTrackHist2[5]={0.,0.,0.};
\r
808 Double_t maxMCPrimTrackHist2[5]={4000.,20.,4000.};
\r
809 sprintf(name,"fMCPrimTrackHist2_%d",i);
\r
810 sprintf(title,"pdg:mech:mother");
\r
812 fMCPrimTrackHist2[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);
\r
813 fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");
\r
814 fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");
\r
815 fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");
\r
816 fMCPrimTrackHist2[i]->Sumw2();
\r
818 Int_t binsMCSecTrackHist1[5]= {ptNbins,etaNbins,6,20,4000};
\r
819 Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.};
\r
820 Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.};
\r
821 sprintf(name,"fMCSecTrackHist1_%d",i);
\r
822 sprintf(title,"mcPt:mcEta:mcPhi:pid:mech:mother");
\r
824 fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1);
\r
825 fMCSecTrackHist1[i]->SetBinEdges(0,binsPt);
\r
826 fMCSecTrackHist1[i]->SetBinEdges(1,binsEta);
\r
827 fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
828 fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
\r
829 fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid");
\r
830 fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech");
\r
831 fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother");
\r
832 fMCSecTrackHist1[i]->Sumw2();
\r
838 Int_t binsRecTrackHist1[3]={ptNbins,etaNbins,90};
\r
839 Double_t minRecTrackHist1[3]={0.,-1.,0.};
\r
840 Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};
\r
841 sprintf(name,"fRecTrackHist1_%d",i);
\r
842 sprintf(title,"Pt:Eta:Phi");
\r
843 fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
\r
844 fRecTrackHist1[i]->SetBinEdges(0,binsPt);
\r
845 fRecTrackHist1[i]->SetBinEdges(1,binsEta);
\r
846 fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
\r
847 fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta");
\r
848 fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)");
\r
849 fRecTrackHist1[i]->Sumw2();
\r
852 Int_t binsRecTrackMultHist1[2]={ptNbins,150};
\r
853 Double_t minRecTrackMultHist1[2]={0.,-0.5};
\r
854 Double_t maxRecTrackMultHist1[2]={10.,149.5};
\r
855 sprintf(name,"fRecTrackMultHist_%d",i);
\r
856 sprintf(title,"Pt:Mult");
\r
857 fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1,minRecTrackMultHist1,maxRecTrackMultHist1);
\r
858 fRecTrackMultHist1[i]->SetBinEdges(0,binsPt);
\r
859 fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
860 fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
861 fRecTrackMultHist1[i]->Sumw2();
\r
864 Int_t binsRecMCTrackHist1[4] = {ptNbins,etaNbins,100,100};
\r
865 Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5};
\r
866 Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5};
\r
867 sprintf(name,"fRecMCTrackHist1");
\r
868 sprintf(title,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)");
\r
869 fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);
\r
870 fRecMCTrackHist1->SetBinEdges(0,binsPt);
\r
871 fRecMCTrackHist1->SetBinEdges(1,binsEta);
\r
872 fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
873 fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");
\r
874 fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");
\r
875 fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");
\r
877 Int_t binsMCMultRecTrackHist1[3] = {ptNbins,etaNbins,6};
\r
878 Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.};
\r
879 Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.};
\r
880 sprintf(name,"fMCMultRecTrackHist1");
\r
881 sprintf(title,"mcPt:mcEta:pid");
\r
882 fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);
\r
883 fMCMultRecTrackHist1->SetBinEdges(0,binsPt);
\r
884 fMCMultRecTrackHist1->SetBinEdges(1,binsEta);
\r
885 fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
886 fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");
\r
887 fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");
\r
889 //nClust:chi2PerClust:pt:eta:phi
\r
890 Int_t binsRecTrackHist2[5]={160,100,ptNbins,etaNbins,90};
\r
891 Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.};
\r
892 Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()};
\r
894 fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2);
\r
895 fRecTrackHist2->SetBinEdges(2,binsPt);
\r
896 fRecTrackHist2->SetBinEdges(3,binsEta);
\r
897 fRecTrackHist2->GetAxis(0)->SetTitle("nClust");
\r
898 fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust");
\r
899 fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
\r
900 fRecTrackHist2->GetAxis(3)->SetTitle("#eta");
\r
901 fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)");
\r
902 fRecTrackHist2->Sumw2();
\r
905 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");
\r
908 //_____________________________________________________________________________
\r
909 void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)
\r
912 // Process real and/or simulated events
\r
915 AliDebug(AliLog::kError, "esdEvent not available");
\r
919 // get selection cuts
\r
920 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
921 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
922 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
924 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
925 AliDebug(AliLog::kError, "cuts not available");
\r
929 // trigger selection
\r
930 Bool_t isEventTriggered = kTRUE;
\r
931 AliPhysicsSelection *trigSel = NULL;
\r
932 AliTriggerAnalysis *trigAna = NULL;
\r
934 if(evtCuts->IsTriggerRequired())
\r
937 trigSel = GetPhysicsTriggerSelection();
\r
939 printf("cannot get trigSel \n");
\r
946 trigSel->SetAnalyzeMC();
\r
948 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
950 // check V0 systematics (case1)
\r
951 // Initialization done in the macro
\r
952 trigAna = trigSel->GetTriggerAnalysis();
\r
956 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
957 //trigAna->SetV0AdcThr(15);
\r
959 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
960 //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered);
\r
961 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
963 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
965 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
966 //printf("V0AND %d \n",isEventTriggered);
\r
969 else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)
\r
971 // check V0 systematics (case2 only in MC)
\r
972 // Initialization done in the macro
\r
974 trigAna = trigSel->GetTriggerAnalysis();
\r
978 //trigAna->SetV0HwPars(0, 0, 125);
\r
979 //trigAna->SetV0AdcThr(0);
\r
981 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
982 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
984 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
986 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
987 //printf("V0AND %d \n",isEventTriggered);
\r
991 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
992 //printf("MB1 %d \n",isEventTriggered);
\r
994 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
996 trigAna = trigSel->GetTriggerAnalysis();
\r
1000 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1001 //printf("V0AND %d \n",isEventTriggered);
\r
1007 // 0-multiplicity bin for LHC background correction
\r
1009 if(GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1010 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ||
\r
1011 GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx
\r
1014 trigSel->SetBin0CallbackViaPointer(&IsBinZeroTrackSPDvtx);
\r
1016 trigSel->SetBin0CallbackViaPointer(&IsBinZeroSPDvtx);
\r
1019 if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)
\r
1021 // check V0 systematics (case1)
\r
1022 // Initialization done in the macro
\r
1023 trigAna = trigSel->GetTriggerAnalysis();
\r
1027 //trigAna->SetV0HwPars(15, 61.5, 86.5);
\r
1028 //trigAna->SetV0AdcThr(15);
\r
1030 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1031 //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1033 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1035 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1036 //printf("V0AND %d \n",isEventTriggered);
\r
1040 isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);
\r
1041 //printf("MB1 %d \n",isEventTriggered);
\r
1043 if(GetTrigger() == AliTriggerAnalysis::kV0AND)
\r
1045 trigAna = trigSel->GetTriggerAnalysis();
\r
1049 isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1050 //printf("V0AND %d \n",isEventTriggered);
\r
1056 // use MC information
\r
1057 AliHeader* header = 0;
\r
1058 AliGenEventHeader* genHeader = 0;
\r
1059 AliStack* stack = 0;
\r
1061 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;
\r
1063 Int_t multMCTrueTracks = 0;
\r
1068 AliDebug(AliLog::kError, "mcEvent not available");
\r
1071 // get MC event header
\r
1072 header = mcEvent->Header();
\r
1074 AliDebug(AliLog::kError, "Header not available");
\r
1077 // MC particle stack
\r
1078 stack = mcEvent->Stack();
\r
1080 AliDebug(AliLog::kError, "Stack not available");
\r
1083 // get event type (ND=0x1, DD=0x2, SD=0x4)
\r
1084 evtType = AliPWG0Helper::GetEventProcessType(header);
\r
1085 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));
\r
1088 genHeader = header->GenEventHeader();
\r
1090 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
\r
1093 genHeader->PrimaryVertex(vtxMC);
\r
1095 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
\r
1096 fMCEventHist1->Fill(vMCEventHist1);
\r
1098 // multipliticy of all MC primary tracks
\r
1099 // in Zv, pt and eta ranges)
\r
1100 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
\r
1104 // get reconstructed vertex
\r
1105 const AliESDVertex* vtxESD = 0;
\r
1106 Bool_t isRecVertex = kFALSE;
\r
1107 if(evtCuts->IsRecVertexRequired())
\r
1109 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();
\r
1110 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();
\r
1111 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints);
\r
1112 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);
\r
1115 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {
\r
1116 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");
\r
1117 isRecVertex = kTRUE;
\r
1120 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;
\r
1121 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
\r
1122 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
\r
1124 // vertex contributors
\r
1125 Int_t multMBTracks = 0;
\r
1126 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
\r
1128 if(vtxESD->GetStatus() && isRecVertex)
\r
1129 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);
\r
1131 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx ||
\r
1132 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid )
\r
1134 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1135 //if(mult && vtxESD->GetStatus() && isRecVertex)
\r
1137 if(mult && vtxESD->GetStatus() && isRecVertex)
\r
1138 multMBTracks = mult->GetNumberOfTracklets();
\r
1140 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1141 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt
\r
1142 || GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx
\r
1145 if(vtxESD->GetStatus() && isRecVertex)
\r
1146 multMBTracks = vtxESD->GetNContributors();
\r
1149 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
\r
1153 TObjArray *allChargedTracks=0;
\r
1154 Int_t multAll=0, multAcc=0, multRec=0;
\r
1155 Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;
\r
1157 // cosmics analysis
\r
1158 Int_t cosmicCount = 0;
\r
1160 Int_t highPtCount = 0;
\r
1162 // check event cuts
\r
1163 if(isEventOK && isEventTriggered)
\r
1165 // get all charged tracks
\r
1166 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
\r
1167 if(!allChargedTracks) return;
\r
1169 Int_t entries = allChargedTracks->GetEntries();
\r
1170 //printf("entries %d \n",entries);
\r
1172 labelsAll = new Int_t[entries];
\r
1173 labelsAcc = new Int_t[entries];
\r
1174 labelsRec = new Int_t[entries];
\r
1175 for(Int_t i=0; i<entries;++i)
\r
1177 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1178 if(!track) continue;
\r
1179 if(track->Charge()==0) continue;
\r
1181 // only postive charged
\r
1182 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1185 // only negative charged
\r
1186 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1190 // esd track selection
\r
1191 // ITS stand alone
\r
1192 if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx)
\r
1194 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;
\r
1195 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;
\r
1196 if(track->GetNcls(0)<4) continue;
\r
1197 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;
\r
1199 else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx)
\r
1202 // ITS and TPC stand alone tracks
\r
1204 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;
\r
1205 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;
\r
1206 if(track->GetNcls(0)<4) continue;
\r
1207 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;
\r
1209 // Check matching with TPC only track
\r
1210 Bool_t hasMatch = kFALSE;
\r
1211 for(Int_t j=0; j<entries;++j)
\r
1213 if(i==j) continue;
\r
1214 AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(j);
\r
1215 if(!track2) continue;
\r
1216 if(track2->Charge()==0) continue;
\r
1217 if (!track2->GetTPCInnerParam()) continue;
\r
1219 // check loose cuts for TPC tracks
\r
1220 if(!esdTrackCuts->AcceptTrack(track2)) continue;
\r
1222 AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam()));
\r
1223 if(!innerTPC) continue;
\r
1224 Double_t x2[3]; track2->GetXYZ(x2);
\r
1225 Double_t b2[3]; AliTracker::GetBxByBz(x2,b2);
\r
1226 Double_t dz[2],cov[3];
\r
1227 Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov);
\r
1228 if(!isPropOK && innerTPC) {delete innerTPC; continue;}
\r
1231 if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }
\r
1232 if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }
\r
1233 if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }
\r
1236 if(innerTPC) delete innerTPC;
\r
1239 if(!hasMatch) continue;
\r
1242 if(!esdTrackCuts->AcceptTrack(track))
\r
1247 if(GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) {
\r
1248 if(!AlidNdPtHelper::IsGoodImpPar(track)) continue;
\r
1253 Bool_t isOK = kFALSE;
\r
1254 Double_t x[3]; track->GetXYZ(x);
\r
1255 Double_t b[3]; AliTracker::GetBxByBz(x,b);
\r
1258 // if TPC-ITS hybrid tracking (kTPCITSHybrid)
\r
1259 // replace track parameters with TPC-ony track parameters
\r
1261 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ||
\r
1262 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1263 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1265 // Relate TPC-only tracks to Track or SPD vertex
\r
1266 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
\r
1267 if(!isOK) continue;
\r
1269 // replace esd track parameters with TPCinner
\r
1270 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));
\r
1271 if (!tpcTrack) return;
\r
1272 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());
\r
1274 if(tpcTrack) delete tpcTrack;
\r
1277 FillHistograms(track,stack,AlidNdPtHelper::kAllTracks);
\r
1278 labelsAll[multAll] = TMath::Abs(track->GetLabel());
\r
1281 //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks);
\r
1282 //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());
\r
1285 // check high-pt tracks
\r
1286 if(accCuts->AcceptTrack(track) && track->Pt() > 6.)
\r
1288 //printf(" high pt: pt %f \n",track->Pt());
\r
1292 // check cosmics tracks
\r
1293 if( GetParticleMode()==AlidNdPtHelper::kCosmic )
\r
1295 if(accCuts->AcceptTrack(track))
\r
1297 for(Int_t j=0; j<entries;++j)
\r
1299 AliESDtrack *track1 = (AliESDtrack*)allChargedTracks->At(j);
\r
1300 if(!track1) continue;
\r
1301 if(track1->Charge()==0) continue;
\r
1303 if( esdTrackCuts->AcceptTrack(track1) && accCuts->AcceptTrack(track1) )
\r
1305 if ( AlidNdPtHelper::IsCosmicTrack(track,track1) ) {
\r
1312 // if(!isCosmic) continue;
\r
1315 // update track parameters using vertex point
\r
1316 if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate) {
\r
1317 // update track parameters
\r
1318 AliExternalTrackParam cParam;
\r
1319 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam);
\r
1320 if(!isOK) continue;
\r
1321 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());
\r
1323 if(accCuts->AcceptTrack(track)) {
\r
1325 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks);
\r
1326 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1331 if(accCuts->AcceptTrack(track))
\r
1334 //if(track->GetKinkIndex(0) < 0) continue;
\r
1336 FillHistograms(track,stack,AlidNdPtHelper::kRecTracks);
\r
1337 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1341 if(!multMCTrueTracks && IsUseMCInfo())
\r
1343 Int_t label = TMath::Abs(track->GetLabel());
\r
1344 TParticle* particle = stack->Particle(label);
\r
1345 if(!particle) return;
\r
1347 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1348 if(!particle->GetPDG()) continue;
\r
1349 if((particle->GetPDG()->Charge()/3.) != 0 && multRec > 3)
\r
1351 printf("zero true mult event: %d \n", esdEvent->GetEventNumberInFile());
\r
1352 printf("mcVtx %f, label %d, prim %d, mcpt %f, mceta %f, mcphi %f \n", vtxMC[2], label, prim, particle->Pt(), particle->Eta(), particle->Phi());
\r
1353 printf("zv %f, multRec %d, pt %f, eta %f, phi %f \n", vtxESD->GetZv(), multRec, track->Pt(), track->Eta(), track->Phi());
\r
1361 //printf("COSMIC EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);
\r
1364 //printf("HIGH PT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);
\r
1367 //printf("HIGH MULT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec);
\r
1369 // fill track multiplicity histograms
\r
1370 FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);
\r
1372 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
\r
1373 fRecEventHist1->Fill(vRecEventHist1);
\r
1375 Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRec};
\r
1376 fRecEventHist2->Fill(vRecEventHist2);
\r
1379 if(IsUseMCInfo())
\r
1383 // multiplicity correlation matrix
\r
1385 // check multiplicity
\r
1386 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1387 Int_t trackletMult = 0;
\r
1389 for(Int_t i=0; i<mult->GetNumberOfTracklets(); i++) {
\r
1390 if( TMath::Abs(mult->GetEta(i)) < accCuts->GetMaxEta() )
\r
1394 Double_t vMultTrueEventMatrix[2] = { trackletMult,multMCTrueTracks };
\r
1396 Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };
\r
1398 if(isEventOK && isEventTriggered) {
\r
1399 if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted
\r
1400 fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix);
\r
1404 // event level corrections (zv,N_MB)
\r
1408 Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks};
\r
1409 fGenEventMatrix->Fill(vEventMatrix);
\r
1410 if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);
\r
1411 if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);
\r
1413 // single diffractive
\r
1414 if(evtType == AliPWG0Helper::kSD) {
\r
1415 fGenSDEventMatrix->Fill(vEventMatrix);
\r
1416 if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix);
\r
1417 if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix);
\r
1420 // double diffractive
\r
1421 if(evtType == AliPWG0Helper::kDD) {
\r
1422 fGenDDEventMatrix->Fill(vEventMatrix);
\r
1423 if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix);
\r
1424 if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix);
\r
1427 // non diffractive
\r
1428 if(evtType == AliPWG0Helper::kND) {
\r
1429 fGenNDEventMatrix->Fill(vEventMatrix);
\r
1430 if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix);
\r
1431 if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix);
\r
1434 // non single diffractive
\r
1435 if(evtType != AliPWG0Helper::kSD) {
\r
1436 fGenNSDEventMatrix->Fill(vEventMatrix);
\r
1437 if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix);
\r
1438 if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix);
\r
1442 // track-event level corrections (zv,pt,eta)
\r
1444 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
\r
1446 TParticle* particle = stack->Particle(iMc);
\r
1450 // only charged particles
\r
1451 if(!particle->GetPDG()) continue;
\r
1452 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1453 if ( TMath::Abs(charge) < 0.001 )
\r
1456 // only postive charged
\r
1457 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1460 // only negative charged
\r
1461 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1464 // physical primary
\r
1465 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1466 if(!prim) continue;
\r
1468 // checked accepted
\r
1469 if(accCuts->AcceptTrack(particle))
\r
1471 Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()};
\r
1472 fGenTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1474 if(evtType == AliPWG0Helper::kSD) {
\r
1475 fGenTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1477 if(evtType == AliPWG0Helper::kDD) {
\r
1478 fGenTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1480 if(evtType == AliPWG0Helper::kND) {
\r
1481 fGenTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1483 if(evtType != AliPWG0Helper::kSD) {
\r
1484 fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1488 if(!isEventTriggered) continue;
\r
1490 fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1491 if(evtType == AliPWG0Helper::kSD) {
\r
1492 fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1494 if(evtType == AliPWG0Helper::kDD) {
\r
1495 fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1497 if(evtType == AliPWG0Helper::kND) {
\r
1498 fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1500 if(evtType != AliPWG0Helper::kSD) {
\r
1501 fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1505 if(!isEventOK) continue;
\r
1507 fRecTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1508 if(evtType == AliPWG0Helper::kSD) {
\r
1509 fRecTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1511 if(evtType == AliPWG0Helper::kDD) {
\r
1512 fRecTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1514 if(evtType == AliPWG0Helper::kND) {
\r
1515 fRecTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1517 if(evtType != AliPWG0Helper::kSD) {
\r
1518 fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1524 // track-level corrections (zv,pt,eta)
\r
1526 if(isEventOK && isEventTriggered)
\r
1529 // fill MC and rec event control histograms
\r
1530 if(fHistogramsOn) {
\r
1531 Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]};
\r
1532 fRecMCEventHist1->Fill(vRecMCEventHist1);
\r
1534 Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks};
\r
1535 fRecMCEventHist2->Fill(vRecMCEventHist2);
\r
1537 Double_t vRecMCEventHist3[2] = {multRec,evtType};
\r
1538 fRecMCEventHist3->Fill(vRecMCEventHist3);
\r
1542 // MC histograms for track efficiency studies
\r
1544 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
\r
1546 TParticle* particle = stack->Particle(iMc);
\r
1550 Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()};
\r
1552 // all genertated primaries including neutral
\r
1553 if( iMc < stack->GetNprimary() ) {
\r
1554 //fGenTrackMatrix->Fill(vTrackMatrix);
\r
1557 // only charged particles
\r
1558 if(!particle->GetPDG()) continue;
\r
1559 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1560 if (TMath::Abs(charge) < 0.001)
\r
1563 // only postive charged
\r
1564 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1567 // only negative charged
\r
1568 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1571 // physical primary
\r
1572 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1575 if(accCuts->AcceptTrack(particle))
\r
1578 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) )
\r
1579 fGenPrimTrackMatrix->Fill(vTrackMatrix);
\r
1581 // fill control histograms
\r
1582 if(fHistogramsOn)
\r
1583 FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks);
\r
1585 // check multiple found tracks
\r
1586 Int_t multCount = 0;
\r
1587 for(Int_t iRec=0; iRec<multRec; ++iRec)
\r
1589 if(iMc == labelsRec[iRec])
\r
1594 fRecMultTrackMatrix->Fill(vTrackMatrix);
\r
1596 // fill control histogram
\r
1597 if(fHistogramsOn) {
\r
1598 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1599 Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid};
\r
1600 fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);
\r
1606 // check reconstructed
\r
1607 for(Int_t iRec=0; iRec<multRec; ++iRec)
\r
1609 if(iMc == labelsRec[iRec])
\r
1611 fRecTrackMatrix->Fill(vTrackMatrix);
\r
1613 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {
\r
1614 fRecPrimTrackMatrix->Fill(vTrackMatrix);
\r
1615 //AliESDtrack *track = esdEvent->GetTrack(iRec);
\r
1616 //if(track && track->GetKinkIndex(0) < 0)
\r
1617 // printf("prim kink \n");
\r
1620 if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);
\r
1622 // fill control histograms
\r
1623 if(fHistogramsOn)
\r
1624 FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks);
\r
1634 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
\r
1635 if(labelsAll) delete [] labelsAll; labelsAll = 0;
\r
1636 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;
\r
1637 if(labelsRec) delete [] labelsRec; labelsRec = 0;
\r
1639 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
\r
1640 //if(trigAna) delete trigAna;
\r
1644 //_____________________________________________________________________________
\r
1645 void AlidNdPtAnalysis::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
1646 // multiplicity histograms
\r
1648 if(!allChargedTracks) return;
\r
1649 if(!labelsAll) return;
\r
1650 if(!labelsAcc) return;
\r
1651 if(!labelsRec) return;
\r
1653 Int_t entries = allChargedTracks->GetEntries();
\r
1654 for(Int_t i=0; i<entries; ++i)
\r
1656 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1657 if(!track) continue;
\r
1658 if(track->Charge() == 0) continue;
\r
1660 Int_t label = TMath::Abs(track->GetLabel());
\r
1661 for(Int_t iAll=0; iAll<multAll; ++iAll) {
\r
1662 if(label == labelsAll[iAll]) {
\r
1663 Double_t v1[2] = {track->Pt(), multAll};
\r
1664 fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);
\r
1667 for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {
\r
1668 if(label == labelsAcc[iAcc]) {
\r
1669 Double_t v2[2] = {track->Pt(), multAcc};
\r
1670 fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);
\r
1673 for(Int_t iRec=0; iRec<multRec; ++iRec) {
\r
1674 if(label == labelsRec[iRec]) {
\r
1675 Double_t v3[2] = {track->Pt(), multRec};
\r
1676 fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);
\r
1682 //_____________________________________________________________________________
\r
1683 void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj)
\r
1686 // Fill ESD track and MC histograms
\r
1688 if(!esdTrack) return;
\r
1690 Float_t q = esdTrack->Charge();
\r
1691 if(TMath::Abs(q) < 0.001) return;
\r
1693 Float_t pt = esdTrack->Pt();
\r
1694 //Float_t qpt = esdTrack->Pt() * q;
\r
1695 Float_t eta = esdTrack->Eta();
\r
1696 Float_t phi = esdTrack->Phi();
\r
1698 Float_t dca[2], bCov[3];
\r
1699 esdTrack->GetImpactParameters(dca,bCov);
\r
1701 Int_t nClust = esdTrack->GetTPCclusters(0);
\r
1702 Float_t chi2PerCluster = 0.;
\r
1703 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);
\r
1706 // fill histograms
\r
1707 Double_t values[3] = {pt,eta,phi};
\r
1708 fRecTrackHist1[trackObj]->Fill(values);
\r
1711 Double_t values1[5] = {nClust,chi2PerCluster,pt,eta,phi};
\r
1712 if(trackObj == AlidNdPtHelper::kRecTracks)
\r
1715 fRecTrackHist2->Fill(values1);
\r
1720 // Fill rec vs MC information
\r
1722 if(!stack) return;
\r
1724 Int_t label = TMath::Abs(esdTrack->GetLabel());
\r
1725 //if(label == 0) return;
\r
1727 TParticle* particle = stack->Particle(label);
\r
1728 if(!particle) return;
\r
1730 //Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1731 //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1733 Int_t motherPdg = -1;
\r
1734 TParticle* mother = 0;
\r
1736 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1737 Int_t motherLabel = particle->GetMother(0);
\r
1738 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1739 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1740 //Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1742 if(!particle->GetPDG()) return;
\r
1743 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1744 if(TMath::Abs(gq)<0.001) return;
\r
1745 Float_t gpt = particle->Pt();
\r
1746 Float_t geta = particle->Eta();
\r
1747 //Float_t qgpt = particle->Pt() * gq;
\r
1748 //Float_t gphi = particle->Phi();
\r
1751 //printf("pt %f, gpt %f \n",pt,gpt);
\r
1752 if(gpt) dpt = (pt-gpt)/gpt;
\r
1753 Double_t deta = (eta-geta);
\r
1755 // fill histograms
\r
1756 if(trackObj == AlidNdPtHelper::kRecTracks)
\r
1758 Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta};
\r
1759 fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);
\r
1761 Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta};
\r
1762 fRecMCTrackHist1->Fill(vRecMCTrackHist1);
\r
1766 //_____________________________________________________________________________
\r
1767 void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj)
\r
1769 // Fill MC histograms
\r
1770 if(!stack) return;
\r
1772 TParticle* particle = stack->Particle(label);
\r
1773 if(!particle) return;
\r
1775 Int_t motherPdg = -1;
\r
1776 TParticle* mother = 0;
\r
1778 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1779 Int_t motherLabel = particle->GetMother(0);
\r
1780 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1781 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1782 Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1784 if(!particle->GetPDG()) return;
\r
1785 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1786 if(TMath::Abs(gq) < 0.001) return;
\r
1788 Float_t gpt = particle->Pt();
\r
1789 //Float_t qgpt = particle->Pt() * gq;
\r
1790 Float_t geta = particle->Eta();
\r
1791 Float_t gphi = particle->Phi();
\r
1792 //Float_t gpz = particle->Pz();
\r
1794 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1795 //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
\r
1797 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1799 //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);
\r
1800 //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);
\r
1805 Double_t vMCTrackHist1[3] = {gpt,geta,gphi};
\r
1806 fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);
\r
1808 Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};
\r
1809 Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg};
\r
1810 //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1812 fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1813 if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);
\r
1816 fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1821 //_____________________________________________________________________________
\r
1822 Long64_t AlidNdPtAnalysis::Merge(TCollection* const list)
\r
1824 // Merge list of objects (needed by PROOF)
\r
1829 if (list->IsEmpty())
\r
1832 TIterator* iter = list->MakeIterator();
\r
1836 TList *collPhysSelection = new TList;
\r
1838 // collection of generated histograms
\r
1841 while((obj = iter->Next()) != 0) {
\r
1842 AlidNdPtAnalysis* entry = dynamic_cast<AlidNdPtAnalysis*>(obj);
\r
1843 if (entry == 0) continue;
\r
1845 // physics selection
\r
1846 //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());
\r
1847 collPhysSelection->Add(entry->GetPhysicsTriggerSelection());
\r
1850 fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix);
\r
1851 fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);
\r
1854 fGenEventMatrix->Add(entry->fGenEventMatrix);
\r
1855 fGenSDEventMatrix->Add(entry->fGenSDEventMatrix);
\r
1856 fGenDDEventMatrix->Add(entry->fGenDDEventMatrix);
\r
1857 fGenNDEventMatrix->Add(entry->fGenNDEventMatrix);
\r
1858 fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix);
\r
1860 fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);
\r
1861 fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix);
\r
1862 fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix);
\r
1863 fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix);
\r
1864 fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix);
\r
1866 fRecEventMatrix->Add(entry->fRecEventMatrix);
\r
1867 fRecSDEventMatrix->Add(entry->fRecSDEventMatrix);
\r
1868 fRecDDEventMatrix->Add(entry->fRecDDEventMatrix);
\r
1869 fRecNDEventMatrix->Add(entry->fRecNDEventMatrix);
\r
1870 fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix);
\r
1873 fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);
\r
1874 fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix);
\r
1875 fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix);
\r
1876 fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix);
\r
1877 fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix);
\r
1879 fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);
\r
1880 fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix);
\r
1881 fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix);
\r
1882 fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix);
\r
1883 fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix);
\r
1885 fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);
\r
1886 fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix);
\r
1887 fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix);
\r
1888 fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix);
\r
1889 fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix);
\r
1892 fGenTrackMatrix->Add(entry->fGenTrackMatrix);
\r
1893 fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);
\r
1894 fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);
\r
1896 fRecTrackMatrix->Add(entry->fRecTrackMatrix);
\r
1897 fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);
\r
1899 fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);
\r
1902 // control analysis histograms
\r
1904 fMCEventHist1->Add(entry->fMCEventHist1);
\r
1905 fRecEventHist1->Add(entry->fRecEventHist1);
\r
1906 fRecEventHist2->Add(entry->fRecEventHist2);
\r
1907 fRecMCEventHist1->Add(entry->fRecMCEventHist1);
\r
1908 fRecMCEventHist2->Add(entry->fRecMCEventHist2);
\r
1909 fRecMCEventHist3->Add(entry->fRecMCEventHist3);
\r
1911 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
1912 fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);
\r
1914 fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);
\r
1915 fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);
\r
1916 fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);
\r
1918 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
\r
1919 fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);
\r
1921 fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);
\r
1922 fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);
\r
1923 fRecTrackHist2->Add(entry->fRecTrackHist2);
\r
1928 AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
\r
1929 trigSelection->Merge(collPhysSelection);
\r
1930 if(collPhysSelection) delete collPhysSelection;
\r
1935 //____________________________________________________________________
\r
1936 Bool_t AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) {
\r
1939 // for LHC background calculation
\r
1940 // return kTRUE if vertex not reconstructed or
\r
1941 // track multiplicity == 0
\r
1943 if(!esdEvent) return kFALSE;
\r
1946 const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();
\r
1947 if(!vertex) return kTRUE;
\r
1949 if(vertex->GetNContributors() < 1) {
\r
1951 vertex = esdEvent->GetPrimaryVertexSPD();
\r
1952 if(!vertex) return kTRUE;
\r
1954 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE;
\r
1955 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) )
\r
1961 //____________________________________________________________________
\r
1962 Bool_t AlidNdPtAnalysis::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) {
\r
1965 // for LHC background calculation
\r
1966 // return kTRUE if vertex not reconstructed or
\r
1967 // tracklet multiplicity == 0
\r
1969 if(!esdEvent) return kFALSE;
\r
1972 const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD();
\r
1973 if(!vertex) return kTRUE;
\r
1974 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE;
\r
1975 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE;
\r
1980 //_____________________________________________________________________________
\r
1981 void AlidNdPtAnalysis::Analyse()
\r
1983 // Analyse histograms
\r
1985 TH1::AddDirectory(kFALSE);
\r
1986 TH1 *h=0, *h1=0, *h2=0, *h2c = 0;
\r
1991 TObjArray *aFolderObj = new TObjArray;
\r
1994 // LHC backgraund in all and 0-bins
\r
1996 AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
\r
1997 trigSel->SaveHistograms("physics_selection");
\r
2000 // Reconstructed event vertex
\r
2002 h = fRecEventHist1->Projection(0);
\r
2004 aFolderObj->Add(h);
\r
2006 h = fRecEventHist1->Projection(1);
\r
2008 aFolderObj->Add(h);
\r
2010 h = fRecEventHist1->Projection(2);
\r
2012 aFolderObj->Add(h);
\r
2017 h = fRecEventHist2->Projection(1);
\r
2018 h->SetName("multMB");
\r
2019 aFolderObj->Add(h);
\r
2021 h = fRecEventHist2->Projection(2);
\r
2022 h->SetName("multiplicity");
\r
2023 aFolderObj->Add(h);
\r
2025 h2D = fRecEventHist2->Projection(0,1);
\r
2026 h2D->SetName("Zv_vs_multiplicity_MB");
\r
2027 aFolderObj->Add(h2D);
\r
2030 // reconstructed pt histograms
\r
2032 h = fRecTrackHist1[0]->Projection(0);
\r
2033 h->Scale(1.,"width");
\r
2034 h->SetName("pt_all_ch");
\r
2035 aFolderObj->Add(h);
\r
2037 h = fRecTrackHist1[1]->Projection(0);
\r
2038 h->Scale(1.,"width");
\r
2039 h->SetName("pt_acc");
\r
2040 aFolderObj->Add(h);
\r
2042 h = fRecTrackHist1[2]->Projection(0);
\r
2043 h->Scale(1.,"width");
\r
2044 h->SetName("pt_rec");
\r
2045 aFolderObj->Add(h);
\r
2048 // reconstructed eta histograms
\r
2050 h = fRecTrackHist1[0]->Projection(1);
\r
2051 h->SetName("eta_all_ch");
\r
2052 aFolderObj->Add(h);
\r
2054 h = fRecTrackHist1[1]->Projection(1);
\r
2055 h->SetName("eta_acc");
\r
2056 aFolderObj->Add(h);
\r
2058 h = fRecTrackHist1[2]->Projection(1);
\r
2059 h->SetName("eta_rec");
\r
2060 aFolderObj->Add(h);
\r
2063 // reconstructed phi histograms
\r
2065 h = fRecTrackHist1[0]->Projection(2);
\r
2066 h->SetName("phi_all_ch");
\r
2067 aFolderObj->Add(h);
\r
2069 h = fRecTrackHist1[1]->Projection(2);
\r
2070 h->SetName("phi_acc");
\r
2071 aFolderObj->Add(h);
\r
2073 h = fRecTrackHist1[2]->Projection(2);
\r
2074 h->SetName("phi_rec");
\r
2075 aFolderObj->Add(h);
\r
2078 // reconstructed eta:pt histograms
\r
2080 h2D = fRecTrackHist1[0]->Projection(1,0);
\r
2081 h2D->SetName("pt_eta_all_ch");
\r
2082 aFolderObj->Add(h2D);
\r
2084 h2D = fRecTrackHist1[1]->Projection(1,0);
\r
2085 h2D->SetName("pt_eta_acc");
\r
2086 aFolderObj->Add(h2D);
\r
2088 h2D = fRecTrackHist1[2]->Projection(1,0);
\r
2089 h2D->SetName("pt_eta_rec");
\r
2090 aFolderObj->Add(h2D);
\r
2093 // reconstructed phi:pt histograms
\r
2095 h2D = fRecTrackHist1[0]->Projection(2,0);
\r
2096 h2D->SetName("pt_phi_all_ch");
\r
2097 aFolderObj->Add(h2D);
\r
2099 h2D = fRecTrackHist1[1]->Projection(2,0);
\r
2100 h2D->SetName("pt_phi_acc");
\r
2101 aFolderObj->Add(h2D);
\r
2103 h2D = fRecTrackHist1[2]->Projection(2,0);
\r
2104 h2D->SetName("pt_phi_rec");
\r
2105 aFolderObj->Add(h2D);
\r
2108 // reconstructed phi:eta histograms
\r
2110 h2D = fRecTrackHist1[0]->Projection(2,1);
\r
2111 h2D->SetName("eta_phi_all_ch");
\r
2112 aFolderObj->Add(h2D);
\r
2114 h2D = fRecTrackHist1[1]->Projection(2,1);
\r
2115 h2D->SetName("eta_phi_acc");
\r
2116 aFolderObj->Add(h2D);
\r
2118 h2D = fRecTrackHist1[2]->Projection(2,1);
\r
2119 h2D->SetName("eta_phi_rec");
\r
2120 aFolderObj->Add(h2D);
\r
2123 // reconstructed nClust, chi2 vs pt, eta, phi
\r
2125 if(fHistogramsOn) {
\r
2127 h2D = fRecTrackHist2->Projection(0,1);
\r
2128 h2D->SetName("nClust_chi2_rec");
\r
2129 aFolderObj->Add(h2D);
\r
2131 h2D = fRecTrackHist2->Projection(0,2);
\r
2132 h2D->SetName("nClust_pt_rec");
\r
2133 aFolderObj->Add(h2D);
\r
2135 h2D = fRecTrackHist2->Projection(0,3);
\r
2136 h2D->SetName("nClust_eta_rec");
\r
2137 aFolderObj->Add(h2D);
\r
2139 h2D = fRecTrackHist2->Projection(0,4);
\r
2140 h2D->SetName("nClust_phi_rec");
\r
2141 aFolderObj->Add(h2D);
\r
2143 h2D = fRecTrackHist2->Projection(1,2);
\r
2144 h2D->SetName("chi2_pt_rec");
\r
2145 aFolderObj->Add(h2D);
\r
2147 h2D = fRecTrackHist2->Projection(1,3);
\r
2148 h2D->SetName("chi2_eta_rec");
\r
2149 aFolderObj->Add(h2D);
\r
2151 h2D = fRecTrackHist2->Projection(1,4);
\r
2152 h2D->SetName("chi2_phi_rec");
\r
2153 aFolderObj->Add(h2D);
\r
2158 // calculate corrections for empty events
\r
2159 // with multMB==0
\r
2163 // normalised zv to generate zv for triggered events
\r
2165 h = fRecEventHist2->Projection(0);
\r
2166 if( h->Integral() ) h->Scale(1./h->Integral());
\r
2167 h->SetName("zv_distribution_norm");
\r
2168 aFolderObj->Add(h);
\r
2173 if(IsUseMCInfo()) {
\r
2176 // Event vertex resolution
\r
2178 h2D = fRecMCEventHist2->Projection(0,2);
\r
2179 h2D->SetName("DeltaXv_vs_mult");
\r
2180 aFolderObj->Add(h2D);
\r
2182 h2D = fRecMCEventHist2->Projection(1,2);
\r
2183 h2D->SetName("DeltaZv_vs_mult");
\r
2184 aFolderObj->Add(h2D);
\r
2187 // normalised zv to get trigger/trigger+vertex event differences
\r
2188 // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)
\r
2190 fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);
\r
2191 h = fTriggerEventMatrix->Projection(0);
\r
2192 h2D = fTriggerEventMatrix->Projection(0,1);
\r
2193 if(h2D->Integral()) h->Scale(1./h2D->Integral());
\r
2195 h1 = fRecEventMatrix->Projection(0);
\r
2196 h2D = fRecEventMatrix->Projection(0,1);
\r
2197 if(h2D->Integral()) h1->Scale(1./h2D->Integral());
\r
2200 h->SetName("zv_empty_events_norm");
\r
2201 aFolderObj->Add(h);
\r
2203 fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());
\r
2206 // rec. vs true multiplicity correlation matrix
\r
2208 hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix");
\r
2209 aFolderObj->Add(hs);
\r
2212 // rec. vs true track pt correlation matrix
\r
2214 hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");
\r
2215 aFolderObj->Add(hs);
\r
2218 // trigger efficiency for INEL
\r
2220 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");
\r
2221 aFolderObj->Add(h);
\r
2224 // trigger efficiency for NSD
\r
2226 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix");
\r
2227 aFolderObj->Add(h);
\r
2230 // trigger bias correction (MB to ND)
\r
2232 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix");
\r
2233 aFolderObj->Add(hs);
\r
2235 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix");
\r
2236 aFolderObj->Add(h);
\r
2239 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix");
\r
2241 aFolderObj->Add(h);
\r
2244 // trigger bias correction (MB to NSD)
\r
2246 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix");
\r
2247 aFolderObj->Add(hs);
\r
2249 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D");
\r
2250 aFolderObj->Add(h2D);
\r
2252 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix");
\r
2253 aFolderObj->Add(h);
\r
2256 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix");
\r
2257 aFolderObj->Add(h);
\r
2261 // trigger bias correction (MB to INEL)
\r
2263 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");
\r
2264 aFolderObj->Add(hs);
\r
2266 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");
\r
2267 aFolderObj->Add(h);
\r
2269 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");
\r
2270 aFolderObj->Add(h2D);
\r
2273 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");
\r
2274 aFolderObj->Add(h);
\r
2278 // event vertex reconstruction correction (MB)
\r
2280 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");
\r
2281 aFolderObj->Add(hs);
\r
2283 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");
\r
2284 aFolderObj->Add(h2D);
\r
2287 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");
\r
2288 aFolderObj->Add(h);
\r
2291 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");
\r
2292 aFolderObj->Add(h);
\r
2295 // track-event trigger bias correction (MB to ND)
\r
2298 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
2299 aFolderObj->Add(hs);
\r
2301 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix");
\r
2302 aFolderObj->Add(h2D);
\r
2304 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix");
\r
2305 aFolderObj->Add(h2D);
\r
2307 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix");
\r
2308 aFolderObj->Add(h2D);
\r
2311 // track-event trigger bias correction (MB to NSD)
\r
2313 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
2314 aFolderObj->Add(hs);
\r
2316 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix");
\r
2317 aFolderObj->Add(h2D);
\r
2319 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix");
\r
2320 aFolderObj->Add(h2D);
\r
2322 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix");
\r
2323 aFolderObj->Add(h2D);
\r
2327 // track-event trigger bias correction (MB to INEL)
\r
2329 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
2330 aFolderObj->Add(hs);
\r
2332 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");
\r
2333 aFolderObj->Add(h2D);
\r
2335 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");
\r
2336 aFolderObj->Add(h2D);
\r
2338 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");
\r
2339 aFolderObj->Add(h2D);
\r
2343 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");
\r
2344 aFolderObj->Add(h);
\r
2348 // track-event vertex reconstruction correction (MB)
\r
2350 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");
\r
2351 aFolderObj->Add(hs);
\r
2353 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");
\r
2354 aFolderObj->Add(h2D);
\r
2356 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");
\r
2357 aFolderObj->Add(h2D);
\r
2359 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");
\r
2360 aFolderObj->Add(h2D);
\r
2364 h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");
\r
2365 aFolderObj->Add(h);
\r
2369 // track rec. efficiency correction
\r
2371 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");
\r
2372 aFolderObj->Add(hs);
\r
2374 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");
\r
2375 aFolderObj->Add(h2D);
\r
2377 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");
\r
2378 aFolderObj->Add(h2D);
\r
2380 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");
\r
2381 aFolderObj->Add(h2D);
\r
2384 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");
\r
2385 aFolderObj->Add(h);
\r
2387 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");
\r
2388 aFolderObj->Add(h);
\r
2392 h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");
\r
2393 aFolderObj->Add(h);
\r
2395 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");
\r
2396 aFolderObj->Add(h);
\r
2399 // secondary track contamination correction
\r
2401 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
\r
2402 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
\r
2403 aFolderObj->Add(hs);
\r
2405 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");
\r
2406 aFolderObj->Add(h2D);
\r
2408 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");
\r
2409 aFolderObj->Add(h2D);
\r
2411 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");
\r
2412 aFolderObj->Add(h2D);
\r
2414 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");
\r
2415 aFolderObj->Add(h);
\r
2418 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");
\r
2419 aFolderObj->Add(h);
\r
2421 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");
\r
2422 aFolderObj->Add(h);
\r
2425 // multiple track reconstruction correction
\r
2427 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
\r
2428 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
\r
2429 aFolderObj->Add(hs);
\r
2431 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");
\r
2432 aFolderObj->Add(h2D);
\r
2434 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");
\r
2435 aFolderObj->Add(h2D);
\r
2437 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");
\r
2438 aFolderObj->Add(h2D);
\r
2440 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");
\r
2441 aFolderObj->Add(h);
\r
2443 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");
\r
2444 aFolderObj->Add(h);
\r
2446 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");
\r
2447 aFolderObj->Add(h);
\r
2450 // Control histograms
\r
2453 if(fHistogramsOn) {
\r
2455 // Efficiency electrons, muons, pions, kaons, protons, all
\r
2456 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1);
\r
2457 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1);
\r
2458 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2459 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2460 h2c = (TH1D *)h2->Clone();
\r
2462 h2c->SetName("eff_pt_electrons");
\r
2463 aFolderObj->Add(h2c);
\r
2465 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2);
\r
2466 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2);
\r
2467 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2468 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2469 h2c = (TH1D *)h2->Clone();
\r
2471 h2c->SetName("eff_pt_muons");
\r
2472 aFolderObj->Add(h2c);
\r
2474 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3);
\r
2475 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3);
\r
2476 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2477 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2478 h2c = (TH1D *)h2->Clone();
\r
2480 h2c->SetName("eff_pt_pions");
\r
2481 aFolderObj->Add(h2c);
\r
2483 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4);
\r
2484 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4);
\r
2485 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2486 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2487 h2c = (TH1D *)h2->Clone();
\r
2489 h2c->SetName("eff_pt_kaons");
\r
2490 aFolderObj->Add(h2c);
\r
2492 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5);
\r
2493 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5);
\r
2494 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2495 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2496 h2c = (TH1D *)h2->Clone();
\r
2498 h2c->SetName("eff_pt_protons");
\r
2499 aFolderObj->Add(h2c);
\r
2501 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5);
\r
2502 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5);
\r
2503 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2504 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2505 h2c = (TH1D *)h2->Clone();
\r
2507 h2c->SetName("eff_pt_selected");
\r
2508 aFolderObj->Add(h2c);
\r
2510 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6);
\r
2511 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6);
\r
2512 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2513 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2514 h2c = (TH1D *)h2->Clone();
\r
2516 h2c->SetName("eff_pt_all");
\r
2517 aFolderObj->Add(h2c);
\r
2519 fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins());
\r
2520 fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());
\r
2523 // - rec, primaries, secondaries
\r
2524 // - primaries (pid)
\r
2525 // - secondaries (pid)
\r
2526 // - secondaries (mech)
\r
2527 // - secondaries (mother)
\r
2530 TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);
\r
2531 mcPtAccall->SetName("mc_pt_acc_all");
\r
2532 aFolderObj->Add(mcPtAccall);
\r
2534 TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);
\r
2535 mcPtAccprim->SetName("mc_pt_acc_prim");
\r
2536 aFolderObj->Add(mcPtAccprim);
\r
2538 TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);
\r
2539 mcPtRecall->SetName("mc_pt_rec_all");
\r
2540 aFolderObj->Add(mcPtRecall);
\r
2542 TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);
\r
2543 mcPtRecprim->SetName("mc_pt_rec_prim");
\r
2544 aFolderObj->Add(mcPtRecprim);
\r
2546 TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);
\r
2547 mcPtRecsec->SetName("mc_pt_rec_sec");
\r
2548 aFolderObj->Add(mcPtRecsec);
\r
2550 for(Int_t i = 0; i<6; i++)
\r
2552 sprintf(name,"mc_pt_rec_prim_pid_%d",i);
\r
2553 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2554 h = fMCPrimTrackHist1[2]->Projection(0);
\r
2556 aFolderObj->Add(h);
\r
2558 sprintf(name,"mc_pt_rec_sec_pid_%d",i);
\r
2559 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2560 h = fMCSecTrackHist1[2]->Projection(0);
\r
2562 aFolderObj->Add(h);
\r
2564 // production mechanisms for given pid
\r
2565 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2567 for(Int_t j=0; j<20; j++) {
\r
2571 sprintf(name,"mc_pt_rec_sec_pid_%d_decay",i);
\r
2572 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2573 h = fMCSecTrackHist1[2]->Projection(0);
\r
2575 aFolderObj->Add(h);
\r
2577 sprintf(name,"mc_eta_rec_sec_pid_%d_decay",i);
\r
2578 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2579 h = fMCSecTrackHist1[2]->Projection(1);
\r
2581 aFolderObj->Add(h);
\r
2583 sprintf(name,"mc_mother_rec_sec_pid_%d_decay",i);
\r
2584 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2585 h = fMCSecTrackHist1[2]->Projection(4);
\r
2587 aFolderObj->Add(h);
\r
2589 } else if (j == 5) {
\r
2592 sprintf(name,"mc_pt_rec_sec_pid_%d_conv",i);
\r
2593 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2594 h = fMCSecTrackHist1[2]->Projection(0);
\r
2596 aFolderObj->Add(h);
\r
2598 sprintf(name,"mc_eta_rec_sec_pid_%d_conv",i);
\r
2599 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2600 h = fMCSecTrackHist1[2]->Projection(1);
\r
2602 aFolderObj->Add(h);
\r
2604 sprintf(name,"mc_mother_rec_sec_pid_%d_conv",i);
\r
2605 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2606 h = fMCSecTrackHist1[2]->Projection(4);
\r
2608 aFolderObj->Add(h);
\r
2610 } else if (j == 13) {
\r
2613 sprintf(name,"mc_pt_rec_sec_pid_%d_mat",i);
\r
2614 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2615 h = fMCSecTrackHist1[2]->Projection(0);
\r
2617 aFolderObj->Add(h);
\r
2619 sprintf(name,"mc_eta_rec_sec_pid_%d_mat",i);
\r
2620 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2621 h = fMCSecTrackHist1[2]->Projection(1);
\r
2623 aFolderObj->Add(h);
\r
2625 sprintf(name,"mc_eta_mother_rec_sec_pid_%d_mat",i);
\r
2626 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2627 h = fMCSecTrackHist1[2]->Projection(4,1);
\r
2629 aFolderObj->Add(h);
\r
2631 sprintf(name,"mc_mother_rec_sec_pid_%d_mat",i);
\r
2632 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2633 h = fMCSecTrackHist1[2]->Projection(4);
\r
2635 aFolderObj->Add(h);
\r
2637 sprintf(name,"mc_pt_mother_rec_sec_pid_%d_mat",i);
\r
2638 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2639 h = fMCSecTrackHist1[2]->Projection(4,0);
\r
2641 aFolderObj->Add(h);
\r
2649 } // end fHistogramOn
\r
2652 // resolution histograms
\r
2653 // only for reconstructed tracks
\r
2657 TCanvas * c = new TCanvas("resol","resol");
\r
2661 fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79);
\r
2663 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
\r
2664 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2665 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2666 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
\r
2668 h->SetName("pt_resolution_vs_mcpt");
\r
2669 aFolderObj->Add(h);
\r
2671 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
\r
2672 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2673 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2674 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
\r
2676 h->SetName("dpt_mean_vs_mcpt");
\r
2677 aFolderObj->Add(h);
\r
2680 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
\r
2681 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2682 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2683 h->SetYTitle("(#eta-#eta_{mc}) resolution");
\r
2685 h->SetName("eta_resolution_vs_mcpt");
\r
2686 aFolderObj->Add(h);
\r
2688 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
\r
2689 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2690 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2691 h->SetYTitle("(#eta-mc#eta) mean");
\r
2693 h->SetName("deta_mean_vs_mcpt");
\r
2694 aFolderObj->Add(h);
\r
2697 fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins());
\r
2699 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
\r
2700 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2701 h->SetXTitle("#eta_{mc}");
\r
2702 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
\r
2704 h->SetName("pt_resolution_vs_mceta");
\r
2705 aFolderObj->Add(h);
\r
2707 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
\r
2708 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2709 h->SetXTitle("#eta_{mc}");
\r
2710 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
\r
2712 h->SetName("dpt_mean_vs_mceta");
\r
2713 aFolderObj->Add(h);
\r
2716 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
\r
2717 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2718 h->SetXTitle("#eta_{mc}");
\r
2719 h->SetYTitle("(#eta-#eta_{mc}) resolution");
\r
2721 h->SetName("eta_resolution_vs_mceta");
\r
2722 aFolderObj->Add(h);
\r
2724 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
\r
2725 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2726 h->SetXTitle("#eta_{mc}");
\r
2727 h->SetYTitle("(#eta-mc#eta) mean");
\r
2729 h->SetName("deta_mean_vs_mceta");
\r
2730 aFolderObj->Add(h);
\r
2732 fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins());
\r
2734 } // end use MC info
\r
2736 // export objects to analysis folder
\r
2737 fAnalysisFolder = ExportToFolder(aFolderObj);
\r
2739 // delete only TObjArray
\r
2740 if(aFolderObj) delete aFolderObj;
\r
2743 //_____________________________________________________________________________
\r
2744 TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * const array)
\r
2746 // recreate folder avery time and export objects to new one
\r
2748 AlidNdPtAnalysis * comp=this;
\r
2749 TFolder *folder = comp->GetAnalysisFolder();
\r
2751 TString name, title;
\r
2752 TFolder *newFolder = 0;
\r
2754 Int_t size = array->GetSize();
\r
2757 // get name and title from old folder
\r
2758 name = folder->GetName();
\r
2759 title = folder->GetTitle();
\r
2765 newFolder = CreateFolder(name.Data(),title.Data());
\r
2766 newFolder->SetOwner();
\r
2768 // add objects to folder
\r
2770 newFolder->Add(array->At(i));
\r
2778 //_____________________________________________________________________________
\r
2779 TFolder* AlidNdPtAnalysis::CreateFolder(TString name,TString title) {
\r
2780 // create folder for analysed histograms
\r
2782 TFolder *folder = 0;
\r
2783 folder = new TFolder(name.Data(),title.Data());
\r