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 // last change: 2011-04-04 by M.Knichel
\r
29 //------------------------------------------------------------------------------
\r
33 #include "TCanvas.h"
\r
34 #include "THnSparse.h"
\r
36 #include "AliHeader.h"
\r
37 #include "AliInputEventHandler.h"
\r
38 #include "AliAnalysisManager.h"
\r
39 #include "AliGenEventHeader.h"
\r
40 #include "AliStack.h"
\r
41 #include "AliESDEvent.h"
\r
42 #include "AliMCEvent.h"
\r
43 #include "AliESDtrackCuts.h"
\r
44 #include "AliLog.h"
\r
45 #include "AliMultiplicity.h"
\r
46 #include "AliTracker.h"
\r
48 #include "AlidNdPtEventCuts.h"
\r
49 #include "AlidNdPtAcceptanceCuts.h"
\r
50 #include "AliPhysicsSelection.h"
\r
51 #include "AliTriggerAnalysis.h"
\r
53 #include "AliPWG0Helper.h"
\r
54 #include "AlidNdPtHelper.h"
\r
55 #include "AlidNdPtAnalysis.h"
\r
57 using namespace std;
\r
59 ClassImp(AlidNdPtAnalysis)
\r
61 //_____________________________________________________________________________
\r
62 AlidNdPtAnalysis::AlidNdPtAnalysis(): AlidNdPt(),
\r
64 fHistogramsOn(kFALSE),
\r
66 // event multiplicity correlation matrix
\r
67 fEventMultCorrelationMatrix(0),
\r
69 // rec. track pt vs true track pt correlation matrix
\r
70 fTrackPtCorrelationMatrix(0),
\r
72 // event level correction
\r
74 fGenSDEventMatrix(0),
\r
75 fGenDDEventMatrix(0),
\r
76 fGenNDEventMatrix(0),
\r
77 fGenNSDEventMatrix(0),
\r
79 fTriggerEventMatrix(0),
\r
80 fTriggerSDEventMatrix(0),
\r
81 fTriggerDDEventMatrix(0),
\r
82 fTriggerNDEventMatrix(0),
\r
83 fTriggerNSDEventMatrix(0),
\r
86 fRecSDEventMatrix(0),
\r
87 fRecDDEventMatrix(0),
\r
88 fRecNDEventMatrix(0),
\r
89 fRecNSDEventMatrix(0),
\r
92 // track-event level correction
\r
94 fGenTrackEventMatrix(0),
\r
95 fGenTrackSDEventMatrix(0),
\r
96 fGenTrackDDEventMatrix(0),
\r
97 fGenTrackNDEventMatrix(0),
\r
98 fGenTrackNSDEventMatrix(0),
\r
100 fTriggerTrackEventMatrix(0),
\r
101 fTriggerTrackSDEventMatrix(0),
\r
102 fTriggerTrackDDEventMatrix(0),
\r
103 fTriggerTrackNDEventMatrix(0),
\r
104 fTriggerTrackNSDEventMatrix(0),
\r
106 fRecTrackEventMatrix(0),
\r
107 fRecTrackSDEventMatrix(0),
\r
108 fRecTrackDDEventMatrix(0),
\r
109 fRecTrackNDEventMatrix(0),
\r
110 fRecTrackNSDEventMatrix(0),
\r
112 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
\r
113 fGenTrackMatrix(0),
\r
114 fGenPrimTrackMatrix(0),
\r
115 fRecPrimTrackMatrix(0),
\r
117 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
\r
118 fRecTrackMatrix(0),
\r
119 fRecSecTrackMatrix(0),
\r
121 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)
\r
122 fRecMultTrackMatrix(0),
\r
124 // event control histograms
\r
128 fRecMCEventHist1(0),
\r
129 fRecMCEventHist2(0),
\r
130 fRecMCEventHist3(0),
\r
132 // rec. pt and eta resolution w.r.t MC
\r
133 fRecMCTrackHist1(0),
\r
135 //multple reconstructed tracks
\r
136 fMCMultRecTrackHist1(0),
\r
138 // rec. track control histograms
\r
141 // Generic histograms to be corrected
\r
146 // Candle event histogram
\r
147 fRecCandleEventMatrix(0),
\r
163 // default constructor
\r
164 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
165 fMCTrackHist1[i]=0;
\r
166 fMCPrimTrackHist1[i]=0;
\r
167 fMCPrimTrackHist2[i]=0;
\r
168 fMCSecTrackHist1[i]=0;
\r
169 fRecTrackHist1[i]=0;
\r
170 fRecTrackMultHist1[i]=0;
\r
175 //_____________________________________________________________________________
\r
176 AlidNdPtAnalysis::AlidNdPtAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,title),
\r
177 fAnalysisFolder(0),
\r
178 fHistogramsOn(kFALSE),
\r
180 // event multiplicity correlation matrix
\r
181 fEventMultCorrelationMatrix(0),
\r
183 // rec. track pt vs true track pt correlation matrix
\r
184 fTrackPtCorrelationMatrix(0),
\r
186 // event level correction
\r
187 fGenEventMatrix(0),
\r
188 fGenSDEventMatrix(0),
\r
189 fGenDDEventMatrix(0),
\r
190 fGenNDEventMatrix(0),
\r
191 fGenNSDEventMatrix(0),
\r
193 fTriggerEventMatrix(0),
\r
194 fTriggerSDEventMatrix(0),
\r
195 fTriggerDDEventMatrix(0),
\r
196 fTriggerNDEventMatrix(0),
\r
197 fTriggerNSDEventMatrix(0),
\r
199 fRecEventMatrix(0),
\r
200 fRecSDEventMatrix(0),
\r
201 fRecDDEventMatrix(0),
\r
202 fRecNDEventMatrix(0),
\r
203 fRecNSDEventMatrix(0),
\r
206 // track-event level correction
\r
208 fGenTrackEventMatrix(0),
\r
209 fGenTrackSDEventMatrix(0),
\r
210 fGenTrackDDEventMatrix(0),
\r
211 fGenTrackNDEventMatrix(0),
\r
212 fGenTrackNSDEventMatrix(0),
\r
214 fTriggerTrackEventMatrix(0),
\r
215 fTriggerTrackSDEventMatrix(0),
\r
216 fTriggerTrackDDEventMatrix(0),
\r
217 fTriggerTrackNDEventMatrix(0),
\r
218 fTriggerTrackNSDEventMatrix(0),
\r
220 fRecTrackEventMatrix(0),
\r
221 fRecTrackSDEventMatrix(0),
\r
222 fRecTrackDDEventMatrix(0),
\r
223 fRecTrackNDEventMatrix(0),
\r
224 fRecTrackNSDEventMatrix(0),
\r
226 // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
\r
227 fGenTrackMatrix(0),
\r
228 fGenPrimTrackMatrix(0),
\r
229 fRecPrimTrackMatrix(0),
\r
231 // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
\r
232 fRecTrackMatrix(0),
\r
233 fRecSecTrackMatrix(0),
\r
235 // multiple rec. track contamination corrections (fRecMultTrackMatrix / fRecTrackMatrix)
\r
236 fRecMultTrackMatrix(0),
\r
238 // event control histograms
\r
242 fRecMCEventHist1(0),
\r
243 fRecMCEventHist2(0),
\r
244 fRecMCEventHist3(0),
\r
246 // rec. pt and eta resolution w.r.t MC
\r
247 fRecMCTrackHist1(0),
\r
249 //multple reconstructed tracks
\r
250 fMCMultRecTrackHist1(0),
\r
252 // rec. track control histograms
\r
255 // Generic histograms to be corrected
\r
260 // Candle event histogram
\r
261 fRecCandleEventMatrix(0),
\r
280 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
281 fMCTrackHist1[i]=0;
\r
282 fMCPrimTrackHist1[i]=0;
\r
283 fMCPrimTrackHist2[i]=0;
\r
284 fMCSecTrackHist1[i]=0;
\r
285 fRecTrackHist1[i]=0;
\r
286 fRecTrackMultHist1[i]=0;
\r
292 //_____________________________________________________________________________
\r
293 AlidNdPtAnalysis::~AlidNdPtAnalysis() {
\r
297 if(fEventMultCorrelationMatrix) delete fEventMultCorrelationMatrix; fEventMultCorrelationMatrix=0;
\r
299 if(fTrackPtCorrelationMatrix) delete fTrackPtCorrelationMatrix; fTrackPtCorrelationMatrix=0;
\r
301 if(fGenEventMatrix) delete fGenEventMatrix; fGenEventMatrix=0;
\r
302 if(fGenSDEventMatrix) delete fGenSDEventMatrix; fGenSDEventMatrix=0;
\r
303 if(fGenDDEventMatrix) delete fGenDDEventMatrix; fGenDDEventMatrix=0;
\r
304 if(fGenNDEventMatrix) delete fGenNDEventMatrix; fGenNDEventMatrix=0;
\r
305 if(fGenNSDEventMatrix) delete fGenNSDEventMatrix; fGenNSDEventMatrix=0;
\r
307 if(fTriggerEventMatrix) delete fTriggerEventMatrix; fTriggerEventMatrix=0;
\r
308 if(fTriggerSDEventMatrix) delete fTriggerSDEventMatrix; fTriggerSDEventMatrix=0;
\r
309 if(fTriggerDDEventMatrix) delete fTriggerDDEventMatrix; fTriggerDDEventMatrix=0;
\r
310 if(fTriggerNDEventMatrix) delete fTriggerNDEventMatrix; fTriggerNDEventMatrix=0;
\r
311 if(fTriggerNSDEventMatrix) delete fTriggerNSDEventMatrix; fTriggerNSDEventMatrix=0;
\r
313 if(fRecEventMatrix) delete fRecEventMatrix; fRecEventMatrix=0;
\r
314 if(fRecSDEventMatrix) delete fRecSDEventMatrix; fRecSDEventMatrix=0;
\r
315 if(fRecDDEventMatrix) delete fRecDDEventMatrix; fRecDDEventMatrix=0;
\r
316 if(fRecNDEventMatrix) delete fRecNDEventMatrix; fRecNDEventMatrix=0;
\r
317 if(fRecNSDEventMatrix) delete fRecNSDEventMatrix; fRecNSDEventMatrix=0;
\r
319 if(fRecCandleEventMatrix) delete fRecCandleEventMatrix; fRecCandleEventMatrix=0;
\r
321 if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;
\r
322 if(fGenTrackSDEventMatrix) delete fGenTrackSDEventMatrix; fGenTrackSDEventMatrix=0;
\r
323 if(fGenTrackDDEventMatrix) delete fGenTrackDDEventMatrix; fGenTrackDDEventMatrix=0;
\r
324 if(fGenTrackNDEventMatrix) delete fGenTrackNDEventMatrix; fGenTrackNDEventMatrix=0;
\r
325 if(fGenTrackNSDEventMatrix) delete fGenTrackNSDEventMatrix; fGenTrackNSDEventMatrix=0;
\r
327 if(fTriggerTrackEventMatrix) delete fTriggerTrackEventMatrix; fTriggerTrackEventMatrix=0;
\r
328 if(fTriggerTrackSDEventMatrix) delete fTriggerTrackSDEventMatrix; fTriggerTrackSDEventMatrix=0;
\r
329 if(fTriggerTrackDDEventMatrix) delete fTriggerTrackDDEventMatrix; fTriggerTrackDDEventMatrix=0;
\r
330 if(fTriggerTrackNDEventMatrix) delete fTriggerTrackNDEventMatrix; fTriggerTrackNDEventMatrix=0;
\r
331 if(fTriggerTrackNSDEventMatrix) delete fTriggerTrackNSDEventMatrix; fTriggerTrackNSDEventMatrix=0;
\r
333 if(fRecTrackEventMatrix) delete fRecTrackEventMatrix; fRecTrackEventMatrix=0;
\r
334 if(fRecTrackSDEventMatrix) delete fRecTrackSDEventMatrix; fRecTrackSDEventMatrix=0;
\r
335 if(fRecTrackDDEventMatrix) delete fRecTrackDDEventMatrix; fRecTrackDDEventMatrix=0;
\r
336 if(fRecTrackNDEventMatrix) delete fRecTrackNDEventMatrix; fRecTrackNDEventMatrix=0;
\r
337 if(fRecTrackNSDEventMatrix) delete fRecTrackNSDEventMatrix; fRecTrackNSDEventMatrix=0;
\r
340 if(fGenTrackMatrix) delete fGenTrackMatrix; fGenTrackMatrix=0;
\r
341 if(fGenPrimTrackMatrix) delete fGenPrimTrackMatrix; fGenPrimTrackMatrix=0;
\r
342 if(fRecPrimTrackMatrix) delete fRecPrimTrackMatrix; fRecPrimTrackMatrix=0;
\r
344 if(fRecTrackMatrix) delete fRecTrackMatrix; fRecTrackMatrix=0;
\r
345 if(fRecSecTrackMatrix) delete fRecSecTrackMatrix; fRecSecTrackMatrix=0;
\r
347 if(fRecMultTrackMatrix) delete fRecMultTrackMatrix; fRecMultTrackMatrix=0;
\r
349 // Control histograms
\r
351 if(fMCEventHist1) delete fMCEventHist1; fMCEventHist1=0;
\r
352 if(fRecEventHist1) delete fRecEventHist1; fRecEventHist1=0;
\r
353 if(fRecEventHist2) delete fRecEventHist2; fRecEventHist2=0;
\r
354 if(fRecMCEventHist1) delete fRecMCEventHist1; fRecMCEventHist1=0;
\r
355 if(fRecMCEventHist2) delete fRecMCEventHist2; fRecMCEventHist2=0;
\r
356 if(fRecMCEventHist3) delete fRecMCEventHist3; fRecMCEventHist3=0;
\r
358 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
359 if(fMCTrackHist1[i]) delete fMCTrackHist1[i]; fMCTrackHist1[i]=0;
\r
360 if(fMCPrimTrackHist1[i]) delete fMCPrimTrackHist1[i]; fMCPrimTrackHist1[i]=0;
\r
361 if(fMCPrimTrackHist2[i]) delete fMCPrimTrackHist2[i]; fMCPrimTrackHist2[i]=0;
\r
362 if(fMCSecTrackHist1[i]) delete fMCSecTrackHist1[i]; fMCSecTrackHist1[i]=0;
\r
363 if(fRecTrackHist1[i]) delete fRecTrackHist1[i]; fRecTrackHist1[i]=0;
\r
364 if(fRecTrackMultHist1[i]) delete fRecTrackMultHist1[i]; fRecTrackMultHist1[i]=0;
\r
366 if(fRecMCTrackHist1) delete fRecMCTrackHist1; fRecMCTrackHist1=0;
\r
367 if(fMCMultRecTrackHist1) delete fMCMultRecTrackHist1; fMCMultRecTrackHist1=0;
\r
368 if(fRecTrackHist2) delete fRecTrackHist2; fRecTrackHist2=0;
\r
371 if(fRecEventHist) delete fRecEventHist; fRecEventHist=0;
\r
372 if(fRecTrackHist) delete fRecTrackHist; fRecTrackHist=0;
\r
373 if(fEventCount) delete fEventCount; fEventCount=0;
\r
376 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
\r
378 if (fBinsMult) delete[] fBinsMult; fBinsMult=0;
\r
379 if (fBinsPt) delete[] fBinsPt; fBinsPt=0;
\r
380 if (fBinsPtCorr) delete[] fBinsPtCorr; fBinsPtCorr=0;
\r
381 if (fBinsEta) delete[] fBinsEta; fBinsEta=0;
\r
382 if (fBinsZv) delete[] fBinsMult; fBinsZv=0;
\r
385 //_____________________________________________________________________________
\r
386 void AlidNdPtAnalysis::Init()
\r
388 //define default binning
\r
389 Double_t binsMultDefault[28] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,
\r
390 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,
\r
391 19.5,20.5, 21.5, 22.5, 23.5, 24.5, 29.5, 149.5};
\r
392 Double_t binsPtDefault[69] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};
\r
393 Double_t binsPtCorrDefault[37] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,50.0};
\r
394 Double_t binsEtaDefault[31] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};
\r
395 Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
\r
397 // if no binning is set, use the default
\r
398 if (!fBinsMult) { SetBinsMult(27,binsMultDefault); }
\r
399 if (!fBinsPt) { SetBinsPt(68,binsPtDefault); }
\r
400 if (!fBinsPtCorr) { SetBinsPtCorr(36,binsPtCorrDefault); }
\r
401 if (!fBinsEta) { SetBinsEta(30,binsEtaDefault); }
\r
402 if (!fBinsZv) { SetBinsZv(12,binsZvDefault); }
\r
404 //Int_t binsTrackMatrix[3]={zvNbins,ptNbins,etaNbins};
\r
405 Int_t binsTrackEventCorrMatrix[3]={fZvNbins,fPtCorrNbins,fEtaNbins};
\r
408 // Generic histograms to be corrected
\r
410 Int_t binsEventHist[2]={fZvNbins,fMultNbins};
\r
411 //Double_t minEventHist[2]={-fBinsZv[0],fBinsMult[0]};
\r
412 //Double_t maxEventHist[2]={fBinsZv[fZvNbins],fBinsMult[fMultNbins]};
\r
414 fRecEventHist = new THnSparseF("fRecEventHist","Zv:multMB",2,binsEventHist); //,minEventHist,maxEventHist);
\r
415 fRecEventHist->SetBinEdges(0,fBinsZv);
\r
416 fRecEventHist->SetBinEdges(1,fBinsMult);
\r
417 fRecEventHist->GetAxis(0)->SetTitle("Zv (cm)");
\r
418 fRecEventHist->GetAxis(1)->SetTitle("multiplicity MB");
\r
419 fRecEventHist->Sumw2();
\r
422 Int_t binsTrackHist[4]={fZvNbins,fPtNbins,fEtaNbins,fMultNbins};
\r
423 // Double_t minTrackHist[4]={-25.,0.,-1.5,-0.5};
\r
424 // Double_t maxTrackHist[4]={25.,50.,1.5,149.5};
\r
426 fRecTrackHist = new THnSparseF("fRecTrackHist","Zv:pT:eta:multRec",4,binsTrackHist); //,minTrackHist,maxTrackHist);
\r
427 fRecTrackHist->SetBinEdges(0,fBinsZv);
\r
428 fRecTrackHist->SetBinEdges(1,fBinsPt);
\r
429 fRecTrackHist->SetBinEdges(2,fBinsEta);
\r
430 fRecTrackHist->SetBinEdges(3,fBinsMult);
\r
431 fRecTrackHist->GetAxis(0)->SetTitle("Zv (cm)");
\r
432 fRecTrackHist->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
\r
433 fRecTrackHist->GetAxis(2)->SetTitle("#eta");
\r
434 fRecTrackHist->GetAxis(3)->SetTitle("multiplicity MB");
\r
435 fRecTrackHist->Sumw2();
\r
438 // rec. vs MC correlation matrices
\r
440 Int_t binsMultTrueEventMatrix[3]={fMultNbins,fMultNbins,fMultNbins};
\r
441 // Double_t minMultTrueEventMatrix[3]={-0.5,-0.5,-0.5};
\r
442 // Double_t maxMultTrueEventMatrix[3]={149.5,149.5,149.5};
\r
443 fEventMultCorrelationMatrix = new THnSparseF("fEventMultCorrelationMatrix","mult:true_mult:multMB",3,binsMultTrueEventMatrix); //,minMultTrueEventMatrix,maxMultTrueEventMatrix);
\r
444 fEventMultCorrelationMatrix->SetBinEdges(0,fBinsMult);
\r
445 fEventMultCorrelationMatrix->SetBinEdges(1,fBinsMult);
\r
446 fEventMultCorrelationMatrix->SetBinEdges(2,fBinsMult);
\r
447 fEventMultCorrelationMatrix->GetAxis(0)->SetTitle("track multiplicity");
\r
448 fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity");
\r
449 fEventMultCorrelationMatrix->GetAxis(2)->SetTitle("MB multiplicity");
\r
450 fEventMultCorrelationMatrix->Sumw2();
\r
452 Int_t binsTrackPtCorrelationMatrix[3]={fPtCorrNbins,fPtCorrNbins,fEtaNbins};
\r
453 fTrackPtCorrelationMatrix = new THnSparseF("fTrackPtCorrelationMatrix","Pt:mcPt:mcEta",3,binsTrackPtCorrelationMatrix);
\r
454 fTrackPtCorrelationMatrix->SetBinEdges(0,fBinsPtCorr);
\r
455 fTrackPtCorrelationMatrix->SetBinEdges(1,fBinsPtCorr);
\r
456 fTrackPtCorrelationMatrix->SetBinEdges(2,fBinsEta);
\r
457 fTrackPtCorrelationMatrix->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
458 fTrackPtCorrelationMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
459 fTrackPtCorrelationMatrix->GetAxis(2)->SetTitle("mcEta");
\r
460 fTrackPtCorrelationMatrix->Sumw2();
\r
463 // Efficiency and contamination correction matrices
\r
465 Int_t binsEventMatrix[2]={fZvNbins,fMultNbins};
\r
466 // Double_t minEventMatrix[2]={-25.,-0.5};
\r
467 // Double_t maxEventMatrix[2]={25.,149.5};
\r
469 fGenEventMatrix = new THnSparseF("fGenEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
470 fGenEventMatrix->SetBinEdges(0,fBinsZv);
\r
471 fGenEventMatrix->SetBinEdges(1,fBinsMult);
\r
472 fGenEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
473 fGenEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
474 fGenEventMatrix->Sumw2();
\r
476 fGenSDEventMatrix = new THnSparseF("fGenSDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
477 fGenSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
478 fGenSDEventMatrix->SetBinEdges(1,fBinsMult);
\r
479 fGenSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
480 fGenSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
481 fGenSDEventMatrix->Sumw2();
\r
483 fGenDDEventMatrix = new THnSparseF("fGenDDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
484 fGenDDEventMatrix->SetBinEdges(0,fBinsZv);
\r
485 fGenDDEventMatrix->SetBinEdges(1,fBinsMult);
\r
486 fGenDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
487 fGenDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
488 fGenDDEventMatrix->Sumw2();
\r
490 fGenNDEventMatrix = new THnSparseF("fGenNDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
491 fGenNDEventMatrix->SetBinEdges(0,fBinsZv);
\r
492 fGenNDEventMatrix->SetBinEdges(1,fBinsMult);
\r
493 fGenNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
494 fGenNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
495 fGenNDEventMatrix->Sumw2();
\r
497 fGenNSDEventMatrix = new THnSparseF("fGenNSDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
498 fGenNSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
499 fGenNSDEventMatrix->SetBinEdges(1,fBinsMult);
\r
500 fGenNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
501 fGenNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
502 fGenNSDEventMatrix->Sumw2();
\r
505 fTriggerEventMatrix = new THnSparseF("fTriggerEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
506 fTriggerEventMatrix->SetBinEdges(0,fBinsZv);
\r
507 fTriggerEventMatrix->SetBinEdges(1,fBinsMult);
\r
508 fTriggerEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
509 fTriggerEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
510 fTriggerEventMatrix->Sumw2();
\r
512 fTriggerSDEventMatrix = new THnSparseF("fTriggerSDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
513 fTriggerSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
514 fTriggerSDEventMatrix->SetBinEdges(1,fBinsMult);
\r
515 fTriggerSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
516 fTriggerSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
517 fTriggerSDEventMatrix->Sumw2();
\r
519 fTriggerDDEventMatrix = new THnSparseF("fTriggerDDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
520 fTriggerDDEventMatrix->SetBinEdges(0,fBinsZv);
\r
521 fTriggerDDEventMatrix->SetBinEdges(1,fBinsMult);
\r
522 fTriggerDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
523 fTriggerDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
524 fTriggerDDEventMatrix->Sumw2();
\r
526 fTriggerNDEventMatrix = new THnSparseF("fTriggerNDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
527 fTriggerNDEventMatrix->SetBinEdges(0,fBinsZv);
\r
528 fTriggerNDEventMatrix->SetBinEdges(1,fBinsMult);
\r
529 fTriggerNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
530 fTriggerNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
531 fTriggerNDEventMatrix->Sumw2();
\r
533 fTriggerNSDEventMatrix = new THnSparseF("fTriggerNSDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
534 fTriggerNSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
535 fTriggerNSDEventMatrix->SetBinEdges(1,fBinsMult);
\r
536 fTriggerNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
537 fTriggerNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
538 fTriggerNSDEventMatrix->Sumw2();
\r
541 fRecEventMatrix = new THnSparseF("fRecEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
542 fRecEventMatrix->SetBinEdges(0,fBinsZv);
\r
543 fRecEventMatrix->SetBinEdges(1,fBinsMult);
\r
544 fRecEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
545 fRecEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
546 fRecEventMatrix->Sumw2();
\r
548 fRecSDEventMatrix = new THnSparseF("fRecSDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
549 fRecSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
550 fRecSDEventMatrix->SetBinEdges(1,fBinsMult);
\r
551 fRecSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
552 fRecSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
553 fRecSDEventMatrix->Sumw2();
\r
555 fRecDDEventMatrix = new THnSparseF("fRecDDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
556 fRecDDEventMatrix->SetBinEdges(0,fBinsZv);
\r
557 fRecDDEventMatrix->SetBinEdges(1,fBinsMult);
\r
558 fRecDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
559 fRecDDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
560 fRecDDEventMatrix->Sumw2();
\r
562 fRecNDEventMatrix = new THnSparseF("fRecNDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
563 fRecNDEventMatrix->SetBinEdges(0,fBinsZv);
\r
564 fRecNDEventMatrix->SetBinEdges(1,fBinsMult);
\r
565 fRecNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
566 fRecNDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
567 fRecNDEventMatrix->Sumw2();
\r
569 fRecNSDEventMatrix = new THnSparseF("fRecNSDEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
570 fRecNSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
571 fRecNSDEventMatrix->SetBinEdges(1,fBinsMult);
\r
572 fRecNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
573 fRecNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
574 fRecNSDEventMatrix->Sumw2();
\r
576 fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multMB",2,binsEventMatrix); //,minEventMatrix,maxEventMatrix);
\r
577 fRecCandleEventMatrix->SetBinEdges(0,fBinsZv);
\r
578 fRecCandleEventMatrix->SetBinEdges(1,fBinsMult);
\r
579 fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
580 fRecCandleEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");
\r
581 fRecCandleEventMatrix->Sumw2();
\r
584 // track to event corrections
\r
587 fGenTrackEventMatrix = new THnSparseF("fGenTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
588 fGenTrackEventMatrix->SetBinEdges(0,fBinsZv);
\r
589 fGenTrackEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
590 fGenTrackEventMatrix->SetBinEdges(2,fBinsEta);
\r
591 fGenTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
592 fGenTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
593 fGenTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
594 fGenTrackEventMatrix->Sumw2();
\r
596 fGenTrackSDEventMatrix = new THnSparseF("fGenTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
597 fGenTrackSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
598 fGenTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
599 fGenTrackSDEventMatrix->SetBinEdges(2,fBinsEta);
\r
600 fGenTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
601 fGenTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
602 fGenTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
603 fGenTrackSDEventMatrix->Sumw2();
\r
605 fGenTrackDDEventMatrix = new THnSparseF("fGenTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
606 fGenTrackDDEventMatrix->SetBinEdges(0,fBinsZv);
\r
607 fGenTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
608 fGenTrackDDEventMatrix->SetBinEdges(2,fBinsEta);
\r
609 fGenTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
610 fGenTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
611 fGenTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
612 fGenTrackDDEventMatrix->Sumw2();
\r
614 fGenTrackNDEventMatrix = new THnSparseF("fGenTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
615 fGenTrackNDEventMatrix->SetBinEdges(0,fBinsZv);
\r
616 fGenTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
617 fGenTrackNDEventMatrix->SetBinEdges(2,fBinsEta);
\r
618 fGenTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
619 fGenTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
620 fGenTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
621 fGenTrackNDEventMatrix->Sumw2();
\r
623 fGenTrackNSDEventMatrix = new THnSparseF("fGenTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
624 fGenTrackNSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
625 fGenTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
626 fGenTrackNSDEventMatrix->SetBinEdges(2,fBinsEta);
\r
627 fGenTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
628 fGenTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
629 fGenTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
630 fGenTrackNSDEventMatrix->Sumw2();
\r
634 fTriggerTrackEventMatrix = new THnSparseF("fTriggerTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
635 fTriggerTrackEventMatrix->SetBinEdges(0,fBinsZv);
\r
636 fTriggerTrackEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
637 fTriggerTrackEventMatrix->SetBinEdges(2,fBinsEta);
\r
638 fTriggerTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
639 fTriggerTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
640 fTriggerTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
641 fTriggerTrackEventMatrix->Sumw2();
\r
643 fTriggerTrackSDEventMatrix = new THnSparseF("fTriggerTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
644 fTriggerTrackSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
645 fTriggerTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
646 fTriggerTrackSDEventMatrix->SetBinEdges(2,fBinsEta);
\r
647 fTriggerTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
648 fTriggerTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
649 fTriggerTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
650 fTriggerTrackSDEventMatrix->Sumw2();
\r
652 fTriggerTrackDDEventMatrix = new THnSparseF("fTriggerTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
653 fTriggerTrackDDEventMatrix->SetBinEdges(0,fBinsZv);
\r
654 fTriggerTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
655 fTriggerTrackDDEventMatrix->SetBinEdges(2,fBinsEta);
\r
656 fTriggerTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
657 fTriggerTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
658 fTriggerTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
659 fTriggerTrackDDEventMatrix->Sumw2();
\r
661 fTriggerTrackNDEventMatrix = new THnSparseF("fTriggerTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
662 fTriggerTrackNDEventMatrix->SetBinEdges(0,fBinsZv);
\r
663 fTriggerTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
664 fTriggerTrackNDEventMatrix->SetBinEdges(2,fBinsEta);
\r
665 fTriggerTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
666 fTriggerTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
667 fTriggerTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
668 fTriggerTrackNDEventMatrix->Sumw2();
\r
670 fTriggerTrackNSDEventMatrix = new THnSparseF("fTriggerTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
671 fTriggerTrackNSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
672 fTriggerTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
673 fTriggerTrackNSDEventMatrix->SetBinEdges(2,fBinsEta);
\r
674 fTriggerTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
675 fTriggerTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
676 fTriggerTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
677 fTriggerTrackNSDEventMatrix->Sumw2();
\r
680 fRecTrackEventMatrix = new THnSparseF("fRecTrackEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
681 fRecTrackEventMatrix->SetBinEdges(0,fBinsZv);
\r
682 fRecTrackEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
683 fRecTrackEventMatrix->SetBinEdges(2,fBinsEta);
\r
684 fRecTrackEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
685 fRecTrackEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
686 fRecTrackEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
687 fRecTrackEventMatrix->Sumw2();
\r
689 fRecTrackSDEventMatrix = new THnSparseF("fRecTrackSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
690 fRecTrackSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
691 fRecTrackSDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
692 fRecTrackSDEventMatrix->SetBinEdges(2,fBinsEta);
\r
693 fRecTrackSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
694 fRecTrackSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
695 fRecTrackSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
696 fRecTrackSDEventMatrix->Sumw2();
\r
698 fRecTrackDDEventMatrix = new THnSparseF("fRecTrackDDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
699 fRecTrackDDEventMatrix->SetBinEdges(0,fBinsZv);
\r
700 fRecTrackDDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
701 fRecTrackDDEventMatrix->SetBinEdges(2,fBinsEta);
\r
702 fRecTrackDDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
703 fRecTrackDDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
704 fRecTrackDDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
705 fRecTrackDDEventMatrix->Sumw2();
\r
707 fRecTrackNDEventMatrix = new THnSparseF("fRecTrackNDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
708 fRecTrackNDEventMatrix->SetBinEdges(0,fBinsZv);
\r
709 fRecTrackNDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
710 fRecTrackNDEventMatrix->SetBinEdges(2,fBinsEta);
\r
711 fRecTrackNDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
712 fRecTrackNDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
713 fRecTrackNDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
714 fRecTrackNDEventMatrix->Sumw2();
\r
716 fRecTrackNSDEventMatrix = new THnSparseF("fRecTrackNSDEventMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
717 fRecTrackNSDEventMatrix->SetBinEdges(0,fBinsZv);
\r
718 fRecTrackNSDEventMatrix->SetBinEdges(1,fBinsPtCorr);
\r
719 fRecTrackNSDEventMatrix->SetBinEdges(2,fBinsEta);
\r
720 fRecTrackNSDEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
721 fRecTrackNSDEventMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
722 fRecTrackNSDEventMatrix->GetAxis(2)->SetTitle("mcEta");
\r
723 fRecTrackNSDEventMatrix->Sumw2();
\r
726 // tracks correction matrices
\r
728 //fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
729 fGenTrackMatrix = new THnSparseF("fGenTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
730 fGenTrackMatrix->SetBinEdges(0,fBinsZv);
\r
731 //fGenTrackMatrix->SetBinEdges(1,binsPt);
\r
732 fGenTrackMatrix->SetBinEdges(1,fBinsPtCorr);
\r
733 fGenTrackMatrix->SetBinEdges(2,fBinsEta);
\r
734 fGenTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
735 fGenTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
736 fGenTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
737 fGenTrackMatrix->Sumw2();
\r
739 //fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
740 fGenPrimTrackMatrix = new THnSparseF("fGenPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
741 fGenPrimTrackMatrix->SetBinEdges(0,fBinsZv);
\r
742 //fGenPrimTrackMatrix->SetBinEdges(1,binsPt);
\r
743 fGenPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr);
\r
744 fGenPrimTrackMatrix->SetBinEdges(2,fBinsEta);
\r
745 fGenPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
746 fGenPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
747 fGenPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
748 fGenPrimTrackMatrix->Sumw2();
\r
750 //fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
751 fRecPrimTrackMatrix = new THnSparseF("fRecPrimTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
752 fRecPrimTrackMatrix->SetBinEdges(0,fBinsZv);
\r
753 //fRecPrimTrackMatrix->SetBinEdges(1,binsPt);
\r
754 fRecPrimTrackMatrix->SetBinEdges(1,fBinsPtCorr);
\r
755 fRecPrimTrackMatrix->SetBinEdges(2,fBinsEta);
\r
756 fRecPrimTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
757 fRecPrimTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
758 fRecPrimTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
759 fRecPrimTrackMatrix->Sumw2();
\r
762 //fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
763 fRecTrackMatrix = new THnSparseF("fRecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
764 fRecTrackMatrix->SetBinEdges(0,fBinsZv);
\r
765 //fRecTrackMatrix->SetBinEdges(1,binsPt);
\r
766 fRecTrackMatrix->SetBinEdges(1,fBinsPtCorr);
\r
767 fRecTrackMatrix->SetBinEdges(2,fBinsEta);
\r
768 fRecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
769 fRecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");
\r
770 fRecTrackMatrix->GetAxis(2)->SetTitle("Eta");
\r
771 fRecTrackMatrix->Sumw2();
\r
773 //fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
774 fRecSecTrackMatrix = new THnSparseF("fRecSecTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
775 fRecSecTrackMatrix->SetBinEdges(0,fBinsZv);
\r
776 //fRecSecTrackMatrix->SetBinEdges(1,binsPt);
\r
777 fRecSecTrackMatrix->SetBinEdges(1,fBinsPtCorr);
\r
778 fRecSecTrackMatrix->SetBinEdges(2,fBinsEta);
\r
779 fRecSecTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
780 fRecSecTrackMatrix->GetAxis(1)->SetTitle("Pt (GeV/c)");
\r
781 fRecSecTrackMatrix->GetAxis(2)->SetTitle("Eta");
\r
782 fRecSecTrackMatrix->Sumw2();
\r
785 //fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackMatrix);
\r
786 fRecMultTrackMatrix = new THnSparseF("fRecMultTrackMatrix","mcZv:mcPt:mcEta",3,binsTrackEventCorrMatrix);
\r
787 fRecMultTrackMatrix->SetBinEdges(0,fBinsZv);
\r
788 //fRecMultTrackMatrix->SetBinEdges(1,binsPt);
\r
789 fRecMultTrackMatrix->SetBinEdges(1,fBinsPtCorr);
\r
790 fRecMultTrackMatrix->SetBinEdges(2,fBinsEta);
\r
791 fRecMultTrackMatrix->GetAxis(0)->SetTitle("mcZv (cm)");
\r
792 fRecMultTrackMatrix->GetAxis(1)->SetTitle("mcPt (GeV/c)");
\r
793 fRecMultTrackMatrix->GetAxis(2)->SetTitle("mcEta");
\r
794 fRecMultTrackMatrix->Sumw2();
\r
797 // Control analysis histograms
\r
800 Int_t binsMCEventHist1[3]={100,100,140};
\r
801 Double_t minMCEventHist1[3]={-0.1,-0.1,-35.};
\r
802 Double_t maxMCEventHist1[3]={0.1,0.1,35.};
\r
803 fMCEventHist1 = new THnSparseF("fMCEventHist1","mcXv:mcYv:mcZv",3,binsMCEventHist1,minMCEventHist1,maxMCEventHist1);
\r
804 fMCEventHist1->GetAxis(0)->SetTitle("mcXv (cm)");
\r
805 fMCEventHist1->GetAxis(1)->SetTitle("mcYv (cm)");
\r
806 fMCEventHist1->GetAxis(2)->SetTitle("mcZv (cm)");
\r
807 fMCEventHist1->Sumw2();
\r
810 Int_t binsRecEventHist1[3]={100,100,140};
\r
811 Double_t minRecEventHist1[3]={-3.,-3.,-35.};
\r
812 Double_t maxRecEventHist1[3]={3.,3.,35.};
\r
814 fRecEventHist1 = new THnSparseF("fRecEventHist1","Xv:Yv:Zv",3,binsRecEventHist1,minRecEventHist1,maxRecEventHist1);
\r
815 fRecEventHist1->GetAxis(0)->SetTitle("Xv (cm)");
\r
816 fRecEventHist1->GetAxis(1)->SetTitle("Yv (cm)");
\r
817 fRecEventHist1->GetAxis(2)->SetTitle("Zv (cm)");
\r
818 fRecEventHist1->Sumw2();
\r
821 Int_t binsRecEventHist2[3]={fZvNbins,fMultNbins,fMultNbins};
\r
822 // Double_t minRecEventHist2[3]={-25.,-0.5,-0.5};
\r
823 // Double_t maxRecEventHist2[3]={25.,149.5,149.5};
\r
825 fRecEventHist2 = new THnSparseF("fRecEventHist2","Zv:multMB:mult",3,binsRecEventHist2); //,minRecEventHist2,maxRecEventHist2);
\r
826 fRecEventHist2->SetBinEdges(0,fBinsZv);
\r
827 fRecEventHist2->SetBinEdges(1,fBinsMult);
\r
828 fRecEventHist2->SetBinEdges(2,fBinsMult);
\r
829 fRecEventHist2->GetAxis(0)->SetTitle("Zv (cm)");
\r
830 fRecEventHist2->GetAxis(1)->SetTitle("multiplicity MB");
\r
831 fRecEventHist2->GetAxis(2)->SetTitle("multiplicity");
\r
832 fRecEventHist2->Sumw2();
\r
835 Double_t kFact = 0.1;
\r
836 Int_t binsRecMCEventHist1[3]={100,100,100};
\r
837 Double_t minRecMCEventHist1[3]={-10.0*kFact,-10.0*kFact,-10.0*kFact};
\r
838 Double_t maxRecMCEventHist1[3]={10.0*kFact,10.0*kFact,10.0*kFact};
\r
840 fRecMCEventHist1 = new THnSparseF("fRecMCEventHist1","Xv-mcXv:Yv-mcYv:Zv-mcZv",3,binsRecMCEventHist1,minRecMCEventHist1,maxRecMCEventHist1);
\r
841 fRecMCEventHist1->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
\r
842 fRecMCEventHist1->GetAxis(1)->SetTitle("Yv-mcYv (cm)");
\r
843 fRecMCEventHist1->GetAxis(2)->SetTitle("Zv-mcZv (cm)");
\r
844 fRecMCEventHist1->Sumw2();
\r
847 Int_t binsRecMCEventHist2[3]={100,100,fMultNbins};
\r
848 Double_t minRecMCEventHist2[3]={-10.0*kFact,-10.0*kFact,0.0};
\r
849 Double_t maxRecMCEventHist2[3]={10.0*kFact,10.0*kFact,149.50};
\r
851 fRecMCEventHist2 = new THnSparseF("fRecMCEventHist2","Xv-mcXv:Zv-mcZv:mult",3,binsRecMCEventHist2,minRecMCEventHist2,maxRecMCEventHist2);
\r
852 fRecMCEventHist2->SetBinEdges(2,fBinsMult);
\r
853 fRecMCEventHist2->GetAxis(0)->SetTitle("Xv-mcXv (cm)");
\r
854 fRecMCEventHist2->GetAxis(1)->SetTitle("Zv-mcZv (cm)");
\r
855 fRecMCEventHist2->GetAxis(2)->SetTitle("multiplicity");
\r
856 fRecMCEventHist2->Sumw2();
\r
858 Int_t binsRecMCEventHist3[2]={fMultNbins,5};
\r
859 Double_t minRecMCEventHist3[2]={-0.5,0.0};
\r
860 Double_t maxRecMCEventHist3[2]={149.50,5.0};
\r
861 fRecMCEventHist3 = new THnSparseF("fRecMCEventHist3","mult:EventType (ND, DD, SD)",2,binsRecMCEventHist3,minRecMCEventHist3,maxRecMCEventHist3);
\r
862 fRecMCEventHist3->SetBinEdges(0,fBinsMult);
\r
863 fRecMCEventHist3->GetAxis(0)->SetTitle("multiplicity");
\r
864 fRecMCEventHist3->GetAxis(1)->SetTitle("EventType");
\r
865 fRecMCEventHist3->Sumw2();
\r
870 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++)
\r
872 // THnSparse track histograms
\r
874 Int_t binsMCTrackHist1[3]= {fPtCorrNbins, fEtaNbins, 90};
\r
875 Double_t minMCTrackHist1[3]={0.,-1.,0.};
\r
876 Double_t maxMCTrackHist1[3]={10.,1.,2.*TMath::Pi()};
\r
877 sprintf(name,"fMCTrackHist1_%d",i);
\r
878 sprintf(title,"mcPt:mcEta:mcPhi");
\r
880 fMCTrackHist1[i] = new THnSparseF(name,title,3,binsMCTrackHist1,minMCTrackHist1,maxMCTrackHist1);
\r
881 fMCTrackHist1[i]->SetBinEdges(0,fBinsPtCorr);
\r
882 fMCTrackHist1[i]->SetBinEdges(1,fBinsEta);
\r
883 fMCTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
884 fMCTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
\r
885 fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)");
\r
886 fMCTrackHist1[i]->Sumw2();
\r
888 Int_t binsMCPrimTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000};
\r
889 Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.};
\r
890 Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.};
\r
891 sprintf(name,"fMCPrimTrackHist1_%d",i);
\r
892 sprintf(title,"mcPt:mcEta:pid:mech:mother");
\r
894 fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1);
\r
895 fMCPrimTrackHist1[i]->SetBinEdges(0,fBinsPtCorr);
\r
896 fMCPrimTrackHist1[i]->SetBinEdges(1,fBinsEta);
\r
897 fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
898 fMCPrimTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
\r
899 fMCPrimTrackHist1[i]->GetAxis(2)->SetTitle("pid");
\r
900 fMCPrimTrackHist1[i]->GetAxis(3)->SetTitle("mech");
\r
901 fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother");
\r
902 fMCPrimTrackHist1[i]->Sumw2();
\r
904 Int_t binsMCPrimTrackHist2[3]= {4000,20,4000};
\r
905 Double_t minMCPrimTrackHist2[3]={0.,0.,0.};
\r
906 Double_t maxMCPrimTrackHist2[3]={4000.,20.,4000.};
\r
907 sprintf(name,"fMCPrimTrackHist2_%d",i);
\r
908 sprintf(title,"pdg:mech:mother");
\r
910 fMCPrimTrackHist2[i] = new THnSparseF(name,title,3,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2);
\r
911 fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg");
\r
912 fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech");
\r
913 fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother");
\r
914 fMCPrimTrackHist2[i]->Sumw2();
\r
916 Int_t binsMCSecTrackHist1[5]= {fPtCorrNbins,fEtaNbins,6,20,4000};
\r
917 Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.};
\r
918 Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.};
\r
919 sprintf(name,"fMCSecTrackHist1_%d",i);
\r
920 sprintf(title,"mcPt:mcEta:pid:mech:mother");
\r
922 fMCSecTrackHist1[i] = new THnSparseF(name,title,5,binsMCSecTrackHist1,minMCSecTrackHist1,maxMCSecTrackHist1);
\r
923 fMCSecTrackHist1[i]->SetBinEdges(0,fBinsPtCorr);
\r
924 fMCSecTrackHist1[i]->SetBinEdges(1,fBinsEta);
\r
925 fMCSecTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
926 fMCSecTrackHist1[i]->GetAxis(1)->SetTitle("mcEta");
\r
927 fMCSecTrackHist1[i]->GetAxis(2)->SetTitle("pid");
\r
928 fMCSecTrackHist1[i]->GetAxis(3)->SetTitle("mech");
\r
929 fMCSecTrackHist1[i]->GetAxis(4)->SetTitle("mother");
\r
930 fMCSecTrackHist1[i]->Sumw2();
\r
936 Int_t binsRecTrackHist1[3]={fPtNbins,fEtaNbins,90};
\r
937 Double_t minRecTrackHist1[3]={0.,-1.,0.};
\r
938 Double_t maxRecTrackHist1[3]={10.,1.,2.*TMath::Pi()};
\r
939 sprintf(name,"fRecTrackHist1_%d",i);
\r
940 sprintf(title,"Pt:Eta:Phi");
\r
941 fRecTrackHist1[i] = new THnSparseF(name,title,3,binsRecTrackHist1,minRecTrackHist1,maxRecTrackHist1);
\r
942 fRecTrackHist1[i]->SetBinEdges(0,fBinsPt);
\r
943 fRecTrackHist1[i]->SetBinEdges(1,fBinsEta);
\r
944 fRecTrackHist1[i]->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
\r
945 fRecTrackHist1[i]->GetAxis(1)->SetTitle("#eta");
\r
946 fRecTrackHist1[i]->GetAxis(2)->SetTitle("#phi (rad)");
\r
947 fRecTrackHist1[i]->Sumw2();
\r
950 Int_t binsRecTrackMultHist1[2]={fPtNbins,fMultNbins};
\r
951 // Double_t minRecTrackMultHist1[2]={0.,-0.5};
\r
952 // Double_t maxRecTrackMultHist1[2]={10.,149.5};
\r
953 sprintf(name,"fRecTrackMultHist_%d",i);
\r
954 sprintf(title,"Pt:Mult");
\r
955 fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1); //,minRecTrackMultHist1,maxRecTrackMultHist1);
\r
956 fRecTrackMultHist1[i]->SetBinEdges(0,fBinsPt);
\r
957 fRecTrackMultHist1[i]->SetBinEdges(1,fBinsMult);
\r
958 fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
959 fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
960 fRecTrackMultHist1[i]->Sumw2();
\r
963 Int_t binsRecMCTrackHist1[4] = {fPtCorrNbins,fEtaNbins,100,100};
\r
964 Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5};
\r
965 Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5};
\r
966 sprintf(name,"fRecMCTrackHist1");
\r
967 sprintf(title,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)");
\r
968 fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);
\r
969 fRecMCTrackHist1->SetBinEdges(0,fBinsPtCorr);
\r
970 fRecMCTrackHist1->SetBinEdges(1,fBinsEta);
\r
971 fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
972 fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");
\r
973 fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");
\r
974 fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");
\r
976 Int_t binsMCMultRecTrackHist1[3] = {fPtCorrNbins,fEtaNbins,6};
\r
977 Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.};
\r
978 Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.};
\r
979 sprintf(name,"fMCMultRecTrackHist1");
\r
980 sprintf(title,"mcPt:mcEta:pid");
\r
981 fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);
\r
982 fMCMultRecTrackHist1->SetBinEdges(0,fBinsPtCorr);
\r
983 fMCMultRecTrackHist1->SetBinEdges(1,fBinsEta);
\r
984 fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
985 fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");
\r
986 fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");
\r
988 //nClust:chi2PerClust:pt:eta:phi
\r
989 Int_t binsRecTrackHist2[5]={160,100,fPtNbins,fEtaNbins,90};
\r
990 Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.};
\r
991 Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()};
\r
993 fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2);
\r
994 fRecTrackHist2->SetBinEdges(2,fBinsPt);
\r
995 fRecTrackHist2->SetBinEdges(3,fBinsEta);
\r
996 fRecTrackHist2->GetAxis(0)->SetTitle("nClust");
\r
997 fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust");
\r
998 fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
\r
999 fRecTrackHist2->GetAxis(3)->SetTitle("#eta");
\r
1000 fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)");
\r
1001 fRecTrackHist2->Sumw2();
\r
1003 Int_t binsEventCount[3]={2,2,2};
\r
1004 Double_t minEventCount[3]={0,0,0};
\r
1005 Double_t maxEventCount[3]={2,2,2};
\r
1006 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount);
\r
1007 fEventCount->GetAxis(0)->SetTitle("trig");
\r
1008 fEventCount->GetAxis(1)->SetTitle("trig+vert");
\r
1009 fEventCount->GetAxis(2)->SetTitle("selected");
\r
1010 fEventCount->Sumw2();
\r
1013 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");
\r
1019 //_____________________________________________________________________________
\r
1020 void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)
\r
1022 // init if not done already
\r
1023 if (!fIsInit) { Init(); }
\r
1026 // Process real and/or simulated events
\r
1029 AliDebug(AliLog::kError, "esdEvent not available");
\r
1033 // get selection cuts
\r
1034 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
1035 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
1036 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
1038 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
1039 AliDebug(AliLog::kError, "cuts not available");
\r
1043 // trigger selection
\r
1044 Bool_t isEventTriggered = kTRUE;
\r
1045 AliPhysicsSelection *physicsSelection = NULL;
\r
1046 AliTriggerAnalysis* triggerAnalysis = NULL;
\r
1049 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
\r
1050 if (!inputHandler)
\r
1052 Printf("ERROR: Could not receive input handler");
\r
1056 if(evtCuts->IsTriggerRequired())
\r
1059 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
\r
1061 physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());
\r
1062 if(!physicsSelection) return;
\r
1063 //SetPhysicsTriggerSelection(physicsSelection);
\r
1065 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
\r
1066 // set trigger (V0AND)
\r
1067 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
\r
1068 if(!triggerAnalysis) return;
\r
1069 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1072 // calculate LHC background
\r
1073 if(!IsUseMCInfo())
\r
1076 // 0-multiplicity bin for LHC background correction
\r
1078 /* bin0 done in the train
\r
1079 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1080 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1081 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1082 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1083 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )
\r
1085 physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);
\r
1087 physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);
\r
1094 // use MC information
\r
1095 AliHeader* header = 0;
\r
1096 AliGenEventHeader* genHeader = 0;
\r
1097 AliStack* stack = 0;
\r
1099 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;
\r
1101 Int_t multMCTrueTracks = 0;
\r
1106 AliDebug(AliLog::kError, "mcEvent not available");
\r
1109 // get MC event header
\r
1110 header = mcEvent->Header();
\r
1112 AliDebug(AliLog::kError, "Header not available");
\r
1115 // MC particle stack
\r
1116 stack = mcEvent->Stack();
\r
1118 AliDebug(AliLog::kError, "Stack not available");
\r
1121 // get event type (ND=0x1, DD=0x2, SD=0x4)
\r
1122 evtType = AliPWG0Helper::GetEventProcessType(header);
\r
1123 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));
\r
1126 genHeader = header->GenEventHeader();
\r
1128 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
\r
1131 genHeader->PrimaryVertex(vtxMC);
\r
1133 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
\r
1134 fMCEventHist1->Fill(vMCEventHist1);
\r
1136 // multipliticy of all MC primary tracks
\r
1137 // in Zv, pt and eta ranges)
\r
1138 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
\r
1143 // get reconstructed vertex
\r
1144 const AliESDVertex* vtxESD = 0;
\r
1145 Bool_t isRecVertex = kFALSE;
\r
1146 if(evtCuts->IsRecVertexRequired())
\r
1148 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();
\r
1149 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();
\r
1150 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints);
\r
1151 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);
\r
1154 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {
\r
1155 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");
\r
1156 isRecVertex = kTRUE;
\r
1159 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;
\r
1160 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
\r
1161 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
\r
1163 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;
\r
1165 Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)};
\r
1166 fEventCount->Fill(vEventCount);
\r
1168 // vertex contributors
\r
1169 Int_t multMBTracks = 0;
\r
1170 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
\r
1172 if(vtxESD->GetStatus() && isRecVertex)
\r
1173 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);
\r
1175 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx ||
\r
1176 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate )
\r
1178 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1179 if(mult && vtxESD->GetStatus() && isRecVertex)
\r
1180 multMBTracks = mult->GetNumberOfTracklets();
\r
1182 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1183 GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ||
\r
1184 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1185 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1186 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1187 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ||
\r
1188 GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx ||
\r
1189 GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx
\r
1192 if(vtxESD->GetStatus() && isRecVertex)
\r
1193 multMBTracks = vtxESD->GetNContributors();
\r
1196 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
\r
1200 Bool_t isEventSelected = kTRUE;
\r
1201 if(evtCuts->IsEventSelectedRequired())
\r
1203 // select events with at least
\r
1204 // one prompt track in acceptance
\r
1205 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies
\r
1207 isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts);
\r
1208 //printf("isEventSelected %d \n", isEventSelected);
\r
1211 TObjArray *allChargedTracks=0;
\r
1212 Int_t multAll=0, multAcc=0, multRec=0;
\r
1213 Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;
\r
1216 // check event cuts
\r
1217 if(isEventOK && isEventTriggered && isEventSelected)
\r
1219 // get all charged tracks
\r
1220 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
\r
1221 if(!allChargedTracks) return;
\r
1223 Int_t entries = allChargedTracks->GetEntries();
\r
1224 //printf("entries %d \n",entries);
\r
1227 // calculate mult of reconstructed tracks
\r
1228 Int_t multRecTemp=0;
\r
1229 for(Int_t i=0; i<entries;++i)
\r
1231 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1232 if(!track) continue;
\r
1233 if(track->Charge()==0) continue;
\r
1236 // only postive charged
\r
1237 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1240 // only negative charged
\r
1241 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1244 if(esdTrackCuts->AcceptTrack(track))
\r
1246 if(accCuts->AcceptTrack(track)) multRecTemp++;
\r
1251 labelsAll = new Int_t[entries];
\r
1252 labelsAcc = new Int_t[entries];
\r
1253 labelsRec = new Int_t[entries];
\r
1254 for(Int_t i=0; i<entries;++i)
\r
1256 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1257 if(!track) continue;
\r
1258 if(track->Charge()==0) continue;
\r
1260 // only postive charged
\r
1261 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1264 // only negative charged
\r
1265 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1268 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecTemp);
\r
1269 labelsAll[multAll] = TMath::Abs(track->GetLabel());
\r
1272 //if(accCuts->AcceptTrack(track)) {
\r
1273 //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks);
\r
1274 //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());
\r
1278 // esd track selection
\r
1279 // ITS stand alone
\r
1280 if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx)
\r
1282 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;
\r
1283 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;
\r
1284 if(track->GetNcls(0)<4) continue;
\r
1285 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;
\r
1287 else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx)
\r
1290 // ITS and TPC stand alone tracks
\r
1292 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;
\r
1293 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;
\r
1294 if(track->GetNcls(0)<4) continue;
\r
1295 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;
\r
1297 // Check matching with TPC only track
\r
1298 Bool_t hasMatch = kFALSE;
\r
1299 for(Int_t j=0; j<entries;++j)
\r
1301 if(i==j) continue;
\r
1302 AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(j);
\r
1303 if(!track2) continue;
\r
1304 if(track2->Charge()==0) continue;
\r
1305 if (!track2->GetTPCInnerParam()) continue;
\r
1307 // check loose cuts for TPC tracks
\r
1308 if(!esdTrackCuts->AcceptTrack(track2)) continue;
\r
1310 AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam()));
\r
1311 if(!innerTPC) continue;
\r
1312 Double_t x2[3]; track2->GetXYZ(x2);
\r
1313 Double_t b2[3]; AliTracker::GetBxByBz(x2,b2);
\r
1314 Double_t dz[2],cov[3];
\r
1315 Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov);
\r
1316 if(!isPropOK && innerTPC) {delete innerTPC; continue;}
\r
1319 if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }
\r
1320 if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }
\r
1321 if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }
\r
1324 if(innerTPC) delete innerTPC;
\r
1327 if(!hasMatch) continue;
\r
1330 // check track cuts
\r
1332 if(!esdTrackCuts->AcceptTrack(track))
\r
1337 Bool_t isOK = kFALSE;
\r
1338 Double_t x[3]; track->GetXYZ(x);
\r
1339 Double_t b[3]; AliTracker::GetBxByBz(x,b);
\r
1342 // if TPC-ITS hybrid tracking (kTPCITSHybrid)
\r
1343 // replace track parameters with TPC-ony track parameters
\r
1345 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ||
\r
1346 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1347 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1349 // Relate TPC-only tracks to Track or SPD vertex
\r
1350 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
\r
1351 if(!isOK) continue;
\r
1353 // replace esd track parameters with TPCinner
\r
1354 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));
\r
1355 if (!tpcTrack) return;
\r
1356 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());
\r
1358 if(tpcTrack) delete tpcTrack;
\r
1362 // update track parameters using vertex point
\r
1363 if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate ||
\r
1364 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate )
\r
1366 // update track parameters
\r
1367 AliExternalTrackParam cParam;
\r
1368 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam);
\r
1369 if(!isOK) continue;
\r
1370 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());
\r
1372 if(accCuts->AcceptTrack(track)) {
\r
1373 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecTemp);
\r
1374 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1379 if(accCuts->AcceptTrack(track))
\r
1381 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecTemp);
\r
1382 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1389 // fill track multiplicity histograms
\r
1390 FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);
\r
1392 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
\r
1393 fRecEventHist1->Fill(vRecEventHist1);
\r
1395 Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRec};
\r
1396 fRecEventHist2->Fill(vRecEventHist2);
\r
1399 Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks};
\r
1400 fRecEventHist->Fill(vRecEventHist);
\r
1403 if(IsUseMCInfo())
\r
1405 if(!mcEvent) return;
\r
1407 if(evtCuts->IsEventSelectedRequired())
\r
1409 // select events with at least
\r
1410 // one MC primary track in acceptance
\r
1411 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies
\r
1413 Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);
\r
1414 //printf("isMCEventSelected %d \n", isMCEventSelected);
\r
1415 if(!isMCEventSelected) return;
\r
1418 Double_t vMultTrueEventMatrix[3] = { multRec, multMCTrueTracks, multMBTracks};
\r
1419 if(isEventOK && isEventTriggered) {
\r
1420 if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted
\r
1421 fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix);
\r
1425 // event level corrections (zv,N_MB)
\r
1429 Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks};
\r
1430 fGenEventMatrix->Fill(vEventMatrix);
\r
1431 if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);
\r
1432 if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);
\r
1434 // single diffractive
\r
1435 if(evtType == AliPWG0Helper::kSD) {
\r
1436 fGenSDEventMatrix->Fill(vEventMatrix);
\r
1437 if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix);
\r
1438 if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix);
\r
1441 // double diffractive
\r
1442 if(evtType == AliPWG0Helper::kDD) {
\r
1443 fGenDDEventMatrix->Fill(vEventMatrix);
\r
1444 if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix);
\r
1445 if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix);
\r
1448 // non diffractive
\r
1449 if(evtType == AliPWG0Helper::kND) {
\r
1450 fGenNDEventMatrix->Fill(vEventMatrix);
\r
1451 if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix);
\r
1452 if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix);
\r
1455 // non single diffractive
\r
1456 if(evtType != AliPWG0Helper::kSD) {
\r
1457 fGenNSDEventMatrix->Fill(vEventMatrix);
\r
1458 if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix);
\r
1459 if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix);
\r
1463 // track-event level corrections (zv,pt,eta)
\r
1465 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
\r
1467 TParticle* particle = stack->Particle(iMc);
\r
1471 // only charged particles
\r
1472 if(!particle->GetPDG()) continue;
\r
1473 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1474 if ( TMath::Abs(charge) < 0.001 )
\r
1477 // only postive charged
\r
1478 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1481 // only negative charged
\r
1482 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1485 // physical primary
\r
1486 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1487 if(!prim) continue;
\r
1489 // checked accepted
\r
1490 if(accCuts->AcceptTrack(particle))
\r
1492 Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()};
\r
1493 fGenTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1495 if(evtType == AliPWG0Helper::kSD) {
\r
1496 fGenTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1498 if(evtType == AliPWG0Helper::kDD) {
\r
1499 fGenTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1501 if(evtType == AliPWG0Helper::kND) {
\r
1502 fGenTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1504 if(evtType != AliPWG0Helper::kSD) {
\r
1505 fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1509 if(!isEventTriggered) continue;
\r
1511 fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1512 if(evtType == AliPWG0Helper::kSD) {
\r
1513 fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1515 if(evtType == AliPWG0Helper::kDD) {
\r
1516 fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1518 if(evtType == AliPWG0Helper::kND) {
\r
1519 fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1521 if(evtType != AliPWG0Helper::kSD) {
\r
1522 fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1526 if(!isEventOK) continue;
\r
1528 fRecTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1529 if(evtType == AliPWG0Helper::kSD) {
\r
1530 fRecTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1532 if(evtType == AliPWG0Helper::kDD) {
\r
1533 fRecTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1535 if(evtType == AliPWG0Helper::kND) {
\r
1536 fRecTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1538 if(evtType != AliPWG0Helper::kSD) {
\r
1539 fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1545 // track-level corrections (zv,pt,eta)
\r
1547 if(isEventOK && isEventTriggered)
\r
1550 // fill MC and rec event control histograms
\r
1551 if(fHistogramsOn) {
\r
1552 Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]};
\r
1553 fRecMCEventHist1->Fill(vRecMCEventHist1);
\r
1555 Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks};
\r
1556 fRecMCEventHist2->Fill(vRecMCEventHist2);
\r
1558 Double_t vRecMCEventHist3[2] = {multRec,evtType};
\r
1559 fRecMCEventHist3->Fill(vRecMCEventHist3);
\r
1563 // MC histograms for track efficiency studies
\r
1565 Int_t countRecCandle = 0;
\r
1566 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
\r
1568 TParticle* particle = stack->Particle(iMc);
\r
1572 Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()};
\r
1574 // all genertated primaries including neutral
\r
1575 //if( iMc < stack->GetNprimary() ) {
\r
1576 //fGenTrackMatrix->Fill(vTrackMatrix);
\r
1579 // only charged particles
\r
1580 if(!particle->GetPDG()) continue;
\r
1581 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1582 if (TMath::Abs(charge) < 0.001)
\r
1585 // only postive charged
\r
1586 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1589 // only negative charged
\r
1590 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1593 // physical primary
\r
1594 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1597 if(accCuts->AcceptTrack(particle))
\r
1600 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) )
\r
1601 fGenPrimTrackMatrix->Fill(vTrackMatrix);
\r
1603 // fill control histograms
\r
1604 if(fHistogramsOn)
\r
1605 FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks);
\r
1607 // check multiple found tracks
\r
1608 Int_t multCount = 0;
\r
1609 for(Int_t iRec=0; iRec<multRec; ++iRec)
\r
1611 if(iMc == labelsRec[iRec])
\r
1616 fRecMultTrackMatrix->Fill(vTrackMatrix);
\r
1618 // fill control histogram
\r
1619 if(fHistogramsOn) {
\r
1620 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1621 Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid};
\r
1622 fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);
\r
1628 // check reconstructed
\r
1629 for(Int_t iRec=0; iRec<multRec; ++iRec)
\r
1631 if(iMc == labelsRec[iRec])
\r
1633 fRecTrackMatrix->Fill(vTrackMatrix);
\r
1635 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {
\r
1636 fRecPrimTrackMatrix->Fill(vTrackMatrix);
\r
1637 //AliESDtrack *track = esdEvent->GetTrack(iRec);
\r
1638 //if(track && track->GetKinkIndex(0) < 0)
\r
1639 // printf("prim kink \n");
\r
1643 if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);
\r
1645 // fill control histograms
\r
1646 if(fHistogramsOn)
\r
1647 FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks);
\r
1655 if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix);
\r
1661 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
\r
1662 if(labelsAll) delete [] labelsAll; labelsAll = 0;
\r
1663 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;
\r
1664 if(labelsRec) delete [] labelsRec; labelsRec = 0;
\r
1666 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
\r
1667 //if(trigAna) delete trigAna;
\r
1671 //_____________________________________________________________________________
\r
1672 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
1673 // multiplicity histograms
\r
1675 if(!allChargedTracks) return;
\r
1676 if(!labelsAll) return;
\r
1677 if(!labelsAcc) return;
\r
1678 if(!labelsRec) return;
\r
1680 Int_t entries = allChargedTracks->GetEntries();
\r
1681 for(Int_t i=0; i<entries; ++i)
\r
1683 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1684 if(!track) continue;
\r
1685 if(track->Charge() == 0) continue;
\r
1687 Int_t label = TMath::Abs(track->GetLabel());
\r
1688 for(Int_t iAll=0; iAll<multAll; ++iAll) {
\r
1689 if(label == labelsAll[iAll]) {
\r
1690 Double_t v1[2] = {track->Pt(), multAll};
\r
1691 fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);
\r
1694 for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {
\r
1695 if(label == labelsAcc[iAcc]) {
\r
1696 Double_t v2[2] = {track->Pt(), multAcc};
\r
1697 fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);
\r
1700 for(Int_t iRec=0; iRec<multRec; ++iRec) {
\r
1701 if(label == labelsRec[iRec]) {
\r
1702 Double_t v3[2] = {track->Pt(), multRec};
\r
1703 fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);
\r
1709 //_____________________________________________________________________________
\r
1710 void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multMB)
\r
1713 // Fill ESD track and MC histograms
\r
1715 if(!esdTrack) return;
\r
1717 Float_t q = esdTrack->Charge();
\r
1718 if(TMath::Abs(q) < 0.001) return;
\r
1720 Float_t pt = esdTrack->Pt();
\r
1721 //Float_t qpt = esdTrack->Pt() * q;
\r
1722 Float_t eta = esdTrack->Eta();
\r
1723 Float_t phi = esdTrack->Phi();
\r
1725 Float_t dca[2], bCov[3];
\r
1726 esdTrack->GetImpactParameters(dca,bCov);
\r
1728 Int_t nClust = esdTrack->GetTPCclusters(0);
\r
1729 Float_t chi2PerCluster = 0.;
\r
1730 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);
\r
1733 // fill histograms
\r
1734 Double_t values1[3] = {pt,eta,phi};
\r
1735 fRecTrackHist1[trackObj]->Fill(values1);
\r
1737 Double_t values[4] = {zv, pt,eta, multMB};
\r
1738 if(trackObj == AlidNdPtHelper::kRecTracks) {
\r
1739 fRecTrackHist->Fill(values);
\r
1743 Double_t values2[5] = {nClust,chi2PerCluster,pt,eta,phi};
\r
1744 if(trackObj == AlidNdPtHelper::kRecTracks)
\r
1747 fRecTrackHist2->Fill(values2);
\r
1752 // Fill rec vs MC information
\r
1754 if(!stack) return;
\r
1756 Int_t label = TMath::Abs(esdTrack->GetLabel());
\r
1757 //if(label == 0) return;
\r
1759 if(label > stack->GetNtrack()) return;
\r
1760 TParticle* particle = stack->Particle(label);
\r
1761 if(!particle) return;
\r
1763 //Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1764 //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1766 Int_t motherPdg = -1;
\r
1767 TParticle* mother = 0;
\r
1769 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1770 Int_t motherLabel = particle->GetMother(0);
\r
1771 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1772 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1773 //Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1775 if(!particle->GetPDG()) return;
\r
1776 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1777 if(TMath::Abs(gq)<0.001) return;
\r
1778 Float_t gpt = particle->Pt();
\r
1779 Float_t geta = particle->Eta();
\r
1780 //Float_t qgpt = particle->Pt() * gq;
\r
1781 //Float_t gphi = particle->Phi();
\r
1784 //printf("pt %f, gpt %f \n",pt,gpt);
\r
1785 if(gpt) dpt = (pt-gpt)/gpt;
\r
1786 Double_t deta = (eta-geta);
\r
1788 // fill histograms
\r
1789 if(trackObj == AlidNdPtHelper::kRecTracks)
\r
1791 Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta};
\r
1792 fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);
\r
1794 Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta};
\r
1795 fRecMCTrackHist1->Fill(vRecMCTrackHist1);
\r
1799 //_____________________________________________________________________________
\r
1800 void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj)
\r
1802 // Fill MC histograms
\r
1803 if(!stack) return;
\r
1805 if(label > stack->GetNtrack()) return;
\r
1806 TParticle* particle = stack->Particle(label);
\r
1807 if(!particle) return;
\r
1809 Int_t motherPdg = -1;
\r
1810 TParticle* mother = 0;
\r
1812 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1813 Int_t motherLabel = particle->GetMother(0);
\r
1814 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1815 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1816 Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1818 if(!particle->GetPDG()) return;
\r
1819 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1820 if(TMath::Abs(gq) < 0.001) return;
\r
1822 Float_t gpt = particle->Pt();
\r
1823 //Float_t qgpt = particle->Pt() * gq;
\r
1824 Float_t geta = particle->Eta();
\r
1825 Float_t gphi = particle->Phi();
\r
1826 //Float_t gpz = particle->Pz();
\r
1828 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1829 //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
\r
1831 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1833 //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);
\r
1834 //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);
\r
1839 Double_t vMCTrackHist1[3] = {gpt,geta,gphi};
\r
1840 fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);
\r
1842 Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};
\r
1843 Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg};
\r
1844 //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1846 fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1847 if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);
\r
1850 fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1855 //_____________________________________________________________________________
\r
1856 Long64_t AlidNdPtAnalysis::Merge(TCollection* const list)
\r
1858 // init if not done already
\r
1859 if (!fIsInit) { Init(); }
\r
1861 // Merge list of objects (needed by PROOF)
\r
1866 if (list->IsEmpty())
\r
1869 TIterator* iter = list->MakeIterator();
\r
1873 //TList *collPhysSelection = new TList;
\r
1875 // collection of generated histograms
\r
1878 while((obj = iter->Next()) != 0) {
\r
1879 AlidNdPtAnalysis* entry = dynamic_cast<AlidNdPtAnalysis*>(obj);
\r
1880 if (entry == 0) continue;
\r
1882 // physics selection
\r
1883 //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());
\r
1884 //collPhysSelection->Add(entry->GetPhysicsTriggerSelection());
\r
1887 fRecEventHist->Add(entry->fRecEventHist);
\r
1888 fRecTrackHist->Add(entry->fRecTrackHist);
\r
1891 fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix);
\r
1892 fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);
\r
1895 fGenEventMatrix->Add(entry->fGenEventMatrix);
\r
1896 fGenSDEventMatrix->Add(entry->fGenSDEventMatrix);
\r
1897 fGenDDEventMatrix->Add(entry->fGenDDEventMatrix);
\r
1898 fGenNDEventMatrix->Add(entry->fGenNDEventMatrix);
\r
1899 fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix);
\r
1901 fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);
\r
1902 fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix);
\r
1903 fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix);
\r
1904 fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix);
\r
1905 fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix);
\r
1907 fRecEventMatrix->Add(entry->fRecEventMatrix);
\r
1908 fRecSDEventMatrix->Add(entry->fRecSDEventMatrix);
\r
1909 fRecDDEventMatrix->Add(entry->fRecDDEventMatrix);
\r
1910 fRecNDEventMatrix->Add(entry->fRecNDEventMatrix);
\r
1911 fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix);
\r
1913 fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix);
\r
1915 fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);
\r
1916 fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix);
\r
1917 fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix);
\r
1918 fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix);
\r
1919 fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix);
\r
1921 fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);
\r
1922 fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix);
\r
1923 fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix);
\r
1924 fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix);
\r
1925 fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix);
\r
1927 fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);
\r
1928 fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix);
\r
1929 fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix);
\r
1930 fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix);
\r
1931 fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix);
\r
1934 fGenTrackMatrix->Add(entry->fGenTrackMatrix);
\r
1935 fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);
\r
1936 fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);
\r
1938 fRecTrackMatrix->Add(entry->fRecTrackMatrix);
\r
1939 fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);
\r
1941 fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);
\r
1944 // control analysis histograms
\r
1946 fMCEventHist1->Add(entry->fMCEventHist1);
\r
1947 fRecEventHist1->Add(entry->fRecEventHist1);
\r
1948 fRecEventHist2->Add(entry->fRecEventHist2);
\r
1949 fRecMCEventHist1->Add(entry->fRecMCEventHist1);
\r
1950 fRecMCEventHist2->Add(entry->fRecMCEventHist2);
\r
1951 fRecMCEventHist3->Add(entry->fRecMCEventHist3);
\r
1953 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
1954 fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);
\r
1956 fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);
\r
1957 fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);
\r
1958 fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);
\r
1960 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
\r
1961 fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);
\r
1963 fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);
\r
1964 fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);
\r
1965 fRecTrackHist2->Add(entry->fRecTrackHist2);
\r
1966 fEventCount->Add(entry->fEventCount);
\r
1971 //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
\r
1972 //trigSelection->Merge(collPhysSelection);
\r
1973 //if(collPhysSelection) delete collPhysSelection;
\r
1978 //____________________________________________________________________
\r
1979 Bool_t AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) {
\r
1982 // for LHC background calculation
\r
1983 // return kTRUE if vertex not reconstructed or
\r
1984 // track multiplicity == 0
\r
1986 if(!esdEvent) return kFALSE;
\r
1989 const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();
\r
1990 if(!vertex) return kTRUE;
\r
1992 if(vertex->GetNContributors() < 1) {
\r
1994 vertex = esdEvent->GetPrimaryVertexSPD();
\r
1995 if(!vertex) return kTRUE;
\r
1997 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE;
\r
1998 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) )
\r
2004 //____________________________________________________________________
\r
2005 Bool_t AlidNdPtAnalysis::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) {
\r
2008 // for LHC background calculation
\r
2009 // return kTRUE if vertex not reconstructed or
\r
2010 // tracklet multiplicity == 0
\r
2012 if(!esdEvent) return kFALSE;
\r
2015 const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD();
\r
2016 if(!vertex) return kTRUE;
\r
2017 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE;
\r
2018 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE;
\r
2023 //_____________________________________________________________________________
\r
2024 void AlidNdPtAnalysis::Analyse()
\r
2026 // init if not done already
\r
2027 if (!fIsInit) { Init(); }
\r
2029 // Analyse histograms
\r
2031 TH1::AddDirectory(kFALSE);
\r
2032 TH1 *h=0, *h1=0, *h2=0, *h2c = 0;
\r
2037 TObjArray *aFolderObj = new TObjArray;
\r
2040 // LHC backgraund in all and 0-bins
\r
2042 //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
\r
2043 //trigSel->SaveHistograms("physics_selection");
\r
2046 // Reconstructed event vertex
\r
2048 h = fRecEventHist1->Projection(0);
\r
2050 aFolderObj->Add(h);
\r
2052 h = fRecEventHist1->Projection(1);
\r
2054 aFolderObj->Add(h);
\r
2056 h = fRecEventHist1->Projection(2);
\r
2058 aFolderObj->Add(h);
\r
2063 h = fRecEventHist2->Projection(1);
\r
2064 h->SetName("multMB");
\r
2065 aFolderObj->Add(h);
\r
2067 h = fRecEventHist2->Projection(2);
\r
2068 h->SetName("multiplicity");
\r
2069 aFolderObj->Add(h);
\r
2071 h2D = fRecEventHist2->Projection(0,1);
\r
2072 h2D->SetName("Zv_vs_multiplicity_MB");
\r
2073 aFolderObj->Add(h2D);
\r
2076 // reconstructed pt histograms
\r
2078 h = fRecTrackHist1[0]->Projection(0);
\r
2079 h->Scale(1.,"width");
\r
2080 h->SetName("pt_all_ch");
\r
2081 aFolderObj->Add(h);
\r
2083 h = fRecTrackHist1[1]->Projection(0);
\r
2084 h->Scale(1.,"width");
\r
2085 h->SetName("pt_acc");
\r
2086 aFolderObj->Add(h);
\r
2088 h = fRecTrackHist1[2]->Projection(0);
\r
2089 h->Scale(1.,"width");
\r
2090 h->SetName("pt_rec");
\r
2091 aFolderObj->Add(h);
\r
2094 // reconstructed eta histograms
\r
2096 h = fRecTrackHist1[0]->Projection(1);
\r
2097 h->SetName("eta_all_ch");
\r
2098 aFolderObj->Add(h);
\r
2100 h = fRecTrackHist1[1]->Projection(1);
\r
2101 h->SetName("eta_acc");
\r
2102 aFolderObj->Add(h);
\r
2104 h = fRecTrackHist1[2]->Projection(1);
\r
2105 h->SetName("eta_rec");
\r
2106 aFolderObj->Add(h);
\r
2109 // reconstructed phi histograms
\r
2111 h = fRecTrackHist1[0]->Projection(2);
\r
2112 h->SetName("phi_all_ch");
\r
2113 aFolderObj->Add(h);
\r
2115 h = fRecTrackHist1[1]->Projection(2);
\r
2116 h->SetName("phi_acc");
\r
2117 aFolderObj->Add(h);
\r
2119 h = fRecTrackHist1[2]->Projection(2);
\r
2120 h->SetName("phi_rec");
\r
2121 aFolderObj->Add(h);
\r
2124 // reconstructed eta:pt histograms
\r
2126 h2D = fRecTrackHist1[0]->Projection(1,0);
\r
2127 h2D->SetName("pt_eta_all_ch");
\r
2128 aFolderObj->Add(h2D);
\r
2130 h2D = fRecTrackHist1[1]->Projection(1,0);
\r
2131 h2D->SetName("pt_eta_acc");
\r
2132 aFolderObj->Add(h2D);
\r
2134 h2D = fRecTrackHist1[2]->Projection(1,0);
\r
2135 h2D->SetName("pt_eta_rec");
\r
2136 aFolderObj->Add(h2D);
\r
2139 // reconstructed phi:pt histograms
\r
2141 h2D = fRecTrackHist1[0]->Projection(2,0);
\r
2142 h2D->SetName("pt_phi_all_ch");
\r
2143 aFolderObj->Add(h2D);
\r
2145 h2D = fRecTrackHist1[1]->Projection(2,0);
\r
2146 h2D->SetName("pt_phi_acc");
\r
2147 aFolderObj->Add(h2D);
\r
2149 h2D = fRecTrackHist1[2]->Projection(2,0);
\r
2150 h2D->SetName("pt_phi_rec");
\r
2151 aFolderObj->Add(h2D);
\r
2154 // reconstructed phi:eta histograms
\r
2156 h2D = fRecTrackHist1[0]->Projection(2,1);
\r
2157 h2D->SetName("eta_phi_all_ch");
\r
2158 aFolderObj->Add(h2D);
\r
2160 h2D = fRecTrackHist1[1]->Projection(2,1);
\r
2161 h2D->SetName("eta_phi_acc");
\r
2162 aFolderObj->Add(h2D);
\r
2164 h2D = fRecTrackHist1[2]->Projection(2,1);
\r
2165 h2D->SetName("eta_phi_rec");
\r
2166 aFolderObj->Add(h2D);
\r
2169 // reconstructed nClust, chi2 vs pt, eta, phi
\r
2171 if(fHistogramsOn) {
\r
2173 h2D = fRecTrackHist2->Projection(0,1);
\r
2174 h2D->SetName("nClust_chi2_rec");
\r
2175 aFolderObj->Add(h2D);
\r
2177 h2D = fRecTrackHist2->Projection(0,2);
\r
2178 h2D->SetName("nClust_pt_rec");
\r
2179 aFolderObj->Add(h2D);
\r
2181 h2D = fRecTrackHist2->Projection(0,3);
\r
2182 h2D->SetName("nClust_eta_rec");
\r
2183 aFolderObj->Add(h2D);
\r
2185 h2D = fRecTrackHist2->Projection(0,4);
\r
2186 h2D->SetName("nClust_phi_rec");
\r
2187 aFolderObj->Add(h2D);
\r
2189 h2D = fRecTrackHist2->Projection(1,2);
\r
2190 h2D->SetName("chi2_pt_rec");
\r
2191 aFolderObj->Add(h2D);
\r
2193 h2D = fRecTrackHist2->Projection(1,3);
\r
2194 h2D->SetName("chi2_eta_rec");
\r
2195 aFolderObj->Add(h2D);
\r
2197 h2D = fRecTrackHist2->Projection(1,4);
\r
2198 h2D->SetName("chi2_phi_rec");
\r
2199 aFolderObj->Add(h2D);
\r
2204 // calculate corrections for empty events
\r
2205 // with multMB==0
\r
2209 // normalised zv to generate zv for triggered events
\r
2211 h = fRecEventHist2->Projection(0);
\r
2212 if( h->Integral() ) h->Scale(1./h->Integral());
\r
2213 h->SetName("zv_distribution_norm");
\r
2214 aFolderObj->Add(h);
\r
2219 if(IsUseMCInfo()) {
\r
2222 // Event vertex resolution
\r
2224 h2D = fRecMCEventHist2->Projection(0,2);
\r
2225 h2D->SetName("DeltaXv_vs_mult");
\r
2226 aFolderObj->Add(h2D);
\r
2228 h2D = fRecMCEventHist2->Projection(1,2);
\r
2229 h2D->SetName("DeltaZv_vs_mult");
\r
2230 aFolderObj->Add(h2D);
\r
2233 // normalised zv to get trigger/trigger+vertex event differences
\r
2234 // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)
\r
2236 fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);
\r
2237 h = fTriggerEventMatrix->Projection(0);
\r
2238 h2D = fTriggerEventMatrix->Projection(0,1);
\r
2239 if(h2D->Integral()) h->Scale(1./h2D->Integral());
\r
2241 h1 = fRecEventMatrix->Projection(0);
\r
2242 h2D = fRecEventMatrix->Projection(0,1);
\r
2243 if(h2D->Integral()) h1->Scale(1./h2D->Integral());
\r
2246 h->SetName("zv_empty_events_norm");
\r
2247 aFolderObj->Add(h);
\r
2249 fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());
\r
2252 // rec. vs true multiplicity correlation matrix
\r
2254 hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix");
\r
2255 aFolderObj->Add(hs);
\r
2258 // rec. vs true track pt correlation matrix
\r
2260 hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");
\r
2261 aFolderObj->Add(hs);
\r
2264 // trigger efficiency for INEL
\r
2266 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");
\r
2267 aFolderObj->Add(h);
\r
2270 // trigger efficiency for NSD
\r
2272 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix");
\r
2273 aFolderObj->Add(h);
\r
2276 // trigger bias correction (MB to ND)
\r
2278 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix");
\r
2279 aFolderObj->Add(hs);
\r
2281 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix");
\r
2282 aFolderObj->Add(h);
\r
2285 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix");
\r
2287 aFolderObj->Add(h);
\r
2290 // trigger bias correction (MB to NSD)
\r
2292 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix");
\r
2293 aFolderObj->Add(hs);
\r
2295 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D");
\r
2296 aFolderObj->Add(h2D);
\r
2298 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix");
\r
2299 aFolderObj->Add(h);
\r
2302 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix");
\r
2303 aFolderObj->Add(h);
\r
2307 // trigger bias correction (MB to INEL)
\r
2309 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");
\r
2310 aFolderObj->Add(hs);
\r
2312 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");
\r
2313 aFolderObj->Add(h2D);
\r
2315 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");
\r
2316 aFolderObj->Add(h);
\r
2318 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");
\r
2319 aFolderObj->Add(h);
\r
2323 // event vertex reconstruction correction (MB)
\r
2325 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");
\r
2326 aFolderObj->Add(hs);
\r
2328 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");
\r
2329 aFolderObj->Add(h2D);
\r
2332 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");
\r
2333 aFolderObj->Add(h);
\r
2336 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");
\r
2337 aFolderObj->Add(h);
\r
2340 // track-event trigger bias correction (MB to ND)
\r
2343 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
2344 aFolderObj->Add(hs);
\r
2346 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix");
\r
2347 aFolderObj->Add(h2D);
\r
2349 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix");
\r
2350 aFolderObj->Add(h2D);
\r
2352 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix");
\r
2353 aFolderObj->Add(h2D);
\r
2356 // track-event trigger bias correction (MB to NSD)
\r
2358 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
2359 aFolderObj->Add(hs);
\r
2361 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix");
\r
2362 aFolderObj->Add(h2D);
\r
2364 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix");
\r
2365 aFolderObj->Add(h2D);
\r
2367 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix");
\r
2368 aFolderObj->Add(h2D);
\r
2372 // track-event trigger bias correction (MB to INEL)
\r
2374 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
2375 aFolderObj->Add(hs);
\r
2377 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");
\r
2378 aFolderObj->Add(h2D);
\r
2380 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");
\r
2381 aFolderObj->Add(h2D);
\r
2383 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");
\r
2384 aFolderObj->Add(h2D);
\r
2388 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");
\r
2389 aFolderObj->Add(h);
\r
2393 // track-event vertex reconstruction correction (MB)
\r
2395 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");
\r
2396 aFolderObj->Add(hs);
\r
2398 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");
\r
2399 aFolderObj->Add(h2D);
\r
2401 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");
\r
2402 aFolderObj->Add(h2D);
\r
2404 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");
\r
2405 aFolderObj->Add(h2D);
\r
2409 h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");
\r
2410 aFolderObj->Add(h);
\r
2414 // track rec. efficiency correction
\r
2416 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");
\r
2417 aFolderObj->Add(hs);
\r
2419 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");
\r
2420 aFolderObj->Add(h2D);
\r
2422 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");
\r
2423 aFolderObj->Add(h2D);
\r
2425 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");
\r
2426 aFolderObj->Add(h2D);
\r
2429 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");
\r
2430 aFolderObj->Add(h);
\r
2432 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");
\r
2433 aFolderObj->Add(h);
\r
2437 h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");
\r
2438 aFolderObj->Add(h);
\r
2440 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");
\r
2441 aFolderObj->Add(h);
\r
2444 // secondary track contamination correction
\r
2446 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
\r
2447 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
\r
2448 aFolderObj->Add(hs);
\r
2450 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");
\r
2451 aFolderObj->Add(h2D);
\r
2453 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");
\r
2454 aFolderObj->Add(h2D);
\r
2456 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");
\r
2457 aFolderObj->Add(h2D);
\r
2459 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");
\r
2460 aFolderObj->Add(h);
\r
2463 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");
\r
2464 aFolderObj->Add(h);
\r
2466 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");
\r
2467 aFolderObj->Add(h);
\r
2470 // multiple track reconstruction correction
\r
2472 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
\r
2473 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
\r
2474 aFolderObj->Add(hs);
\r
2476 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");
\r
2477 aFolderObj->Add(h2D);
\r
2479 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");
\r
2480 aFolderObj->Add(h2D);
\r
2482 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");
\r
2483 aFolderObj->Add(h2D);
\r
2485 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");
\r
2486 aFolderObj->Add(h);
\r
2488 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");
\r
2489 aFolderObj->Add(h);
\r
2491 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");
\r
2492 aFolderObj->Add(h);
\r
2495 // Control histograms
\r
2498 if(fHistogramsOn) {
\r
2500 // Efficiency electrons, muons, pions, kaons, protons, all
\r
2501 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1);
\r
2502 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1);
\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_electrons");
\r
2508 aFolderObj->Add(h2c);
\r
2510 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2);
\r
2511 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2);
\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_muons");
\r
2517 aFolderObj->Add(h2c);
\r
2519 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3);
\r
2520 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3);
\r
2521 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2522 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2523 h2c = (TH1D *)h2->Clone();
\r
2525 h2c->SetName("eff_pt_pions");
\r
2526 aFolderObj->Add(h2c);
\r
2528 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4);
\r
2529 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4);
\r
2530 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2531 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2532 h2c = (TH1D *)h2->Clone();
\r
2534 h2c->SetName("eff_pt_kaons");
\r
2535 aFolderObj->Add(h2c);
\r
2537 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5);
\r
2538 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5);
\r
2539 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2540 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2541 h2c = (TH1D *)h2->Clone();
\r
2543 h2c->SetName("eff_pt_protons");
\r
2544 aFolderObj->Add(h2c);
\r
2546 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5);
\r
2547 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5);
\r
2548 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2549 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2550 h2c = (TH1D *)h2->Clone();
\r
2552 h2c->SetName("eff_pt_selected");
\r
2553 aFolderObj->Add(h2c);
\r
2555 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6);
\r
2556 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6);
\r
2557 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2558 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2559 h2c = (TH1D *)h2->Clone();
\r
2561 h2c->SetName("eff_pt_all");
\r
2562 aFolderObj->Add(h2c);
\r
2564 fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins());
\r
2565 fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());
\r
2568 // - rec, primaries, secondaries
\r
2569 // - primaries (pid)
\r
2570 // - secondaries (pid)
\r
2571 // - secondaries (mech)
\r
2572 // - secondaries (mother)
\r
2575 TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);
\r
2576 mcPtAccall->SetName("mc_pt_acc_all");
\r
2577 aFolderObj->Add(mcPtAccall);
\r
2579 TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);
\r
2580 mcPtAccprim->SetName("mc_pt_acc_prim");
\r
2581 aFolderObj->Add(mcPtAccprim);
\r
2583 TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);
\r
2584 mcPtRecall->SetName("mc_pt_rec_all");
\r
2585 aFolderObj->Add(mcPtRecall);
\r
2587 TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);
\r
2588 mcPtRecprim->SetName("mc_pt_rec_prim");
\r
2589 aFolderObj->Add(mcPtRecprim);
\r
2591 TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);
\r
2592 mcPtRecsec->SetName("mc_pt_rec_sec");
\r
2593 aFolderObj->Add(mcPtRecsec);
\r
2595 for(Int_t i = 0; i<6; i++)
\r
2597 sprintf(name,"mc_pt_rec_prim_pid_%d",i);
\r
2598 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2599 h = fMCPrimTrackHist1[2]->Projection(0);
\r
2601 aFolderObj->Add(h);
\r
2603 sprintf(name,"mc_pt_rec_sec_pid_%d",i);
\r
2604 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2605 h = fMCSecTrackHist1[2]->Projection(0);
\r
2607 aFolderObj->Add(h);
\r
2609 // production mechanisms for given pid
\r
2610 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2612 for(Int_t j=0; j<20; j++) {
\r
2616 sprintf(name,"mc_pt_rec_sec_pid_%d_decay",i);
\r
2617 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2618 h = fMCSecTrackHist1[2]->Projection(0);
\r
2620 aFolderObj->Add(h);
\r
2622 sprintf(name,"mc_eta_rec_sec_pid_%d_decay",i);
\r
2623 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2624 h = fMCSecTrackHist1[2]->Projection(1);
\r
2626 aFolderObj->Add(h);
\r
2628 sprintf(name,"mc_mother_rec_sec_pid_%d_decay",i);
\r
2629 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2630 h = fMCSecTrackHist1[2]->Projection(4);
\r
2632 aFolderObj->Add(h);
\r
2634 } else if (j == 5) {
\r
2637 sprintf(name,"mc_pt_rec_sec_pid_%d_conv",i);
\r
2638 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2639 h = fMCSecTrackHist1[2]->Projection(0);
\r
2641 aFolderObj->Add(h);
\r
2643 sprintf(name,"mc_eta_rec_sec_pid_%d_conv",i);
\r
2644 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2645 h = fMCSecTrackHist1[2]->Projection(1);
\r
2647 aFolderObj->Add(h);
\r
2649 sprintf(name,"mc_mother_rec_sec_pid_%d_conv",i);
\r
2650 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2651 h = fMCSecTrackHist1[2]->Projection(4);
\r
2653 aFolderObj->Add(h);
\r
2655 } else if (j == 13) {
\r
2658 sprintf(name,"mc_pt_rec_sec_pid_%d_mat",i);
\r
2659 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2660 h = fMCSecTrackHist1[2]->Projection(0);
\r
2662 aFolderObj->Add(h);
\r
2664 sprintf(name,"mc_eta_rec_sec_pid_%d_mat",i);
\r
2665 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2666 h = fMCSecTrackHist1[2]->Projection(1);
\r
2668 aFolderObj->Add(h);
\r
2670 sprintf(name,"mc_eta_mother_rec_sec_pid_%d_mat",i);
\r
2671 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2672 h = fMCSecTrackHist1[2]->Projection(4,1);
\r
2674 aFolderObj->Add(h);
\r
2676 sprintf(name,"mc_mother_rec_sec_pid_%d_mat",i);
\r
2677 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2678 h = fMCSecTrackHist1[2]->Projection(4);
\r
2680 aFolderObj->Add(h);
\r
2682 sprintf(name,"mc_pt_mother_rec_sec_pid_%d_mat",i);
\r
2683 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2684 h = fMCSecTrackHist1[2]->Projection(4,0);
\r
2686 aFolderObj->Add(h);
\r
2694 } // end fHistogramOn
\r
2697 // resolution histograms
\r
2698 // only for reconstructed tracks
\r
2702 TCanvas * c = new TCanvas("resol","resol");
\r
2706 fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79);
\r
2708 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
\r
2709 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2710 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2711 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
\r
2713 h->SetName("pt_resolution_vs_mcpt");
\r
2714 aFolderObj->Add(h);
\r
2716 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
\r
2717 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2718 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2719 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
\r
2721 h->SetName("dpt_mean_vs_mcpt");
\r
2722 aFolderObj->Add(h);
\r
2725 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
\r
2726 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2727 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2728 h->SetYTitle("(#eta-#eta_{mc}) resolution");
\r
2730 h->SetName("eta_resolution_vs_mcpt");
\r
2731 aFolderObj->Add(h);
\r
2733 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
\r
2734 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2735 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2736 h->SetYTitle("(#eta-mc#eta) mean");
\r
2738 h->SetName("deta_mean_vs_mcpt");
\r
2739 aFolderObj->Add(h);
\r
2742 fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins());
\r
2744 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
\r
2745 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2746 h->SetXTitle("#eta_{mc}");
\r
2747 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
\r
2749 h->SetName("pt_resolution_vs_mceta");
\r
2750 aFolderObj->Add(h);
\r
2752 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
\r
2753 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2754 h->SetXTitle("#eta_{mc}");
\r
2755 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
\r
2757 h->SetName("dpt_mean_vs_mceta");
\r
2758 aFolderObj->Add(h);
\r
2761 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
\r
2762 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2763 h->SetXTitle("#eta_{mc}");
\r
2764 h->SetYTitle("(#eta-#eta_{mc}) resolution");
\r
2766 h->SetName("eta_resolution_vs_mceta");
\r
2767 aFolderObj->Add(h);
\r
2769 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
\r
2770 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2771 h->SetXTitle("#eta_{mc}");
\r
2772 h->SetYTitle("(#eta-mc#eta) mean");
\r
2774 h->SetName("deta_mean_vs_mceta");
\r
2775 aFolderObj->Add(h);
\r
2777 fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins());
\r
2779 } // end use MC info
\r
2781 // export objects to analysis folder
\r
2782 fAnalysisFolder = ExportToFolder(aFolderObj);
\r
2784 // delete only TObjArray
\r
2785 if(aFolderObj) delete aFolderObj;
\r
2788 //_____________________________________________________________________________
\r
2789 TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * const array)
\r
2791 // recreate folder avery time and export objects to new one
\r
2793 AlidNdPtAnalysis * comp=this;
\r
2794 TFolder *folder = comp->GetAnalysisFolder();
\r
2796 TString name, title;
\r
2797 TFolder *newFolder = 0;
\r
2799 Int_t size = array->GetSize();
\r
2802 // get name and title from old folder
\r
2803 name = folder->GetName();
\r
2804 title = folder->GetTitle();
\r
2810 newFolder = CreateFolder(name.Data(),title.Data());
\r
2811 newFolder->SetOwner();
\r
2813 // add objects to folder
\r
2815 newFolder->Add(array->At(i));
\r
2823 //_____________________________________________________________________________
\r
2824 TFolder* AlidNdPtAnalysis::CreateFolder(TString name,TString title) {
\r
2825 // create folder for analysed histograms
\r
2827 TFolder *folder = 0;
\r
2828 folder = new TFolder(name.Data(),title.Data());
\r