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 snprintf(name,256,"fMCTrackHist1_%d",i);
\r
878 snprintf(title,256,"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 snprintf(name,256,"fMCPrimTrackHist1_%d",i);
\r
892 snprintf(title,256,"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 snprintf(name,256,"fMCPrimTrackHist2_%d",i);
\r
908 snprintf(title,256,"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 snprintf(name,256,"fMCSecTrackHist1_%d",i);
\r
920 snprintf(title,256,"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 snprintf(name,256,"fRecTrackHist1_%d",i);
\r
940 snprintf(title,256,"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 snprintf(name,256,"fRecTrackMultHist_%d",i);
\r
952 snprintf(title,256,"Pt:Mult");
\r
953 fRecTrackMultHist1[i] = new THnSparseF(name,title,2,binsRecTrackMultHist1); //,minRecTrackMultHist1,maxRecTrackMultHist1);
\r
954 fRecTrackMultHist1[i]->SetBinEdges(0,fBinsPt);
\r
955 fRecTrackMultHist1[i]->SetBinEdges(1,fBinsMult);
\r
956 fRecTrackMultHist1[i]->GetAxis(0)->SetTitle("Pt (GeV/c)");
\r
957 fRecTrackMultHist1[i]->GetAxis(1)->SetTitle("multiplicity");
\r
958 fRecTrackMultHist1[i]->Sumw2();
\r
961 Int_t binsRecMCTrackHist1[4] = {fPtCorrNbins,fEtaNbins,100,100};
\r
962 Double_t minRecMCTrackHist1[4]={0.,-1.,-0.5,-0.5};
\r
963 Double_t maxRecMCTrackHist1[4]={20.,1.,0.5,0.5};
\r
964 snprintf(name,256,"fRecMCTrackHist1");
\r
965 snprintf(title,256,"mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta)");
\r
967 fRecMCTrackHist1 = new THnSparseF(name,title,4,binsRecMCTrackHist1,minRecMCTrackHist1,maxRecMCTrackHist1);
\r
968 fRecMCTrackHist1->SetBinEdges(0,fBinsPtCorr);
\r
969 fRecMCTrackHist1->SetBinEdges(1,fBinsEta);
\r
970 fRecMCTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
971 fRecMCTrackHist1->GetAxis(1)->SetTitle("mcEta");
\r
972 fRecMCTrackHist1->GetAxis(2)->SetTitle("(Pt-mcPt)/mcPt");
\r
973 fRecMCTrackHist1->GetAxis(3)->SetTitle("Eta-mcEta");
\r
975 Int_t binsMCMultRecTrackHist1[3] = {fPtCorrNbins,fEtaNbins,6};
\r
976 Double_t minMCMultRecTrackHist1[3]={0.,-1.,0.};
\r
977 Double_t maxMCMultRecTrackHist1[3]={20.,1.,6.};
\r
978 snprintf(name,256,"fMCMultRecTrackHist1");
\r
979 snprintf(title,256,"mcPt:mcEta:pid");
\r
980 fMCMultRecTrackHist1 = new THnSparseF(name,title,3,binsMCMultRecTrackHist1,minMCMultRecTrackHist1,maxMCMultRecTrackHist1);
\r
981 fMCMultRecTrackHist1->SetBinEdges(0,fBinsPtCorr);
\r
982 fMCMultRecTrackHist1->SetBinEdges(1,fBinsEta);
\r
983 fMCMultRecTrackHist1->GetAxis(0)->SetTitle("mcPt (GeV/c)");
\r
984 fMCMultRecTrackHist1->GetAxis(1)->SetTitle("mcEta");
\r
985 fMCMultRecTrackHist1->GetAxis(2)->SetTitle("pid");
\r
987 //nClust:chi2PerClust:pt:eta:phi
\r
988 Int_t binsRecTrackHist2[5]={160,100,fPtNbins,fEtaNbins,90};
\r
989 Double_t minRecTrackHist2[5]={0., 0., 0, -1.5, 0.};
\r
990 Double_t maxRecRecTrackHist2[5]={160.,10., 16, 1.5, 2.*TMath::Pi()};
\r
992 fRecTrackHist2 = new THnSparseF("fRecTrackHist2","nClust:chi2PerClust:pt:eta:phi",5,binsRecTrackHist2,minRecTrackHist2,maxRecRecTrackHist2);
\r
993 fRecTrackHist2->SetBinEdges(2,fBinsPt);
\r
994 fRecTrackHist2->SetBinEdges(3,fBinsEta);
\r
995 fRecTrackHist2->GetAxis(0)->SetTitle("nClust");
\r
996 fRecTrackHist2->GetAxis(1)->SetTitle("chi2PerClust");
\r
997 fRecTrackHist2->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
\r
998 fRecTrackHist2->GetAxis(3)->SetTitle("#eta");
\r
999 fRecTrackHist2->GetAxis(4)->SetTitle("#phi (rad)");
\r
1000 fRecTrackHist2->Sumw2();
\r
1002 Int_t binsEventCount[3]={2,2,2};
\r
1003 Double_t minEventCount[3]={0,0,0};
\r
1004 Double_t maxEventCount[3]={2,2,2};
\r
1005 fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount);
\r
1006 fEventCount->GetAxis(0)->SetTitle("trig");
\r
1007 fEventCount->GetAxis(1)->SetTitle("trig+vert");
\r
1008 fEventCount->GetAxis(2)->SetTitle("selected");
\r
1009 fEventCount->Sumw2();
\r
1012 fAnalysisFolder = CreateFolder("folderdNdPt","Analysis dNdPt Folder");
\r
1018 //_____________________________________________________________________________
\r
1019 void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mcEvent)
\r
1021 // init if not done already
\r
1022 if (!fIsInit) { Init(); }
\r
1025 // Process real and/or simulated events
\r
1028 AliDebug(AliLog::kError, "esdEvent not available");
\r
1032 // get selection cuts
\r
1033 AlidNdPtEventCuts *evtCuts = GetEventCuts();
\r
1034 AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts();
\r
1035 AliESDtrackCuts *esdTrackCuts = GetTrackCuts();
\r
1037 if(!evtCuts || !accCuts || !esdTrackCuts) {
\r
1038 AliDebug(AliLog::kError, "cuts not available");
\r
1042 // trigger selection
\r
1043 Bool_t isEventTriggered = kTRUE;
\r
1044 AliPhysicsSelection *physicsSelection = NULL;
\r
1045 AliTriggerAnalysis* triggerAnalysis = NULL;
\r
1048 AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
\r
1049 if (!inputHandler)
\r
1051 Printf("ERROR: Could not receive input handler");
\r
1055 if(evtCuts->IsTriggerRequired())
\r
1058 isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;
\r
1060 physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());
\r
1061 if(!physicsSelection) return;
\r
1062 //SetPhysicsTriggerSelection(physicsSelection);
\r
1064 if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {
\r
1065 // set trigger (V0AND)
\r
1066 triggerAnalysis = physicsSelection->GetTriggerAnalysis();
\r
1067 if(!triggerAnalysis) return;
\r
1068 isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());
\r
1071 // calculate LHC background
\r
1072 if(!IsUseMCInfo())
\r
1075 // 0-multiplicity bin for LHC background correction
\r
1077 /* bin0 done in the train
\r
1078 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1079 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1080 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1081 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1082 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )
\r
1084 physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);
\r
1086 physicsSelection->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);
\r
1093 // use MC information
\r
1094 AliHeader* header = 0;
\r
1095 AliGenEventHeader* genHeader = 0;
\r
1096 AliStack* stack = 0;
\r
1098 AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;
\r
1100 Int_t multMCTrueTracks = 0;
\r
1105 AliDebug(AliLog::kError, "mcEvent not available");
\r
1108 // get MC event header
\r
1109 header = mcEvent->Header();
\r
1111 AliDebug(AliLog::kError, "Header not available");
\r
1114 // MC particle stack
\r
1115 stack = mcEvent->Stack();
\r
1117 AliDebug(AliLog::kError, "Stack not available");
\r
1120 // get event type (ND=0x1, DD=0x2, SD=0x4)
\r
1121 evtType = AliPWG0Helper::GetEventProcessType(header);
\r
1122 AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));
\r
1125 genHeader = header->GenEventHeader();
\r
1127 AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");
\r
1130 genHeader->PrimaryVertex(vtxMC);
\r
1132 Double_t vMCEventHist1[3]={vtxMC[0],vtxMC[1],vtxMC[2]};
\r
1133 fMCEventHist1->Fill(vMCEventHist1);
\r
1135 // multipliticy of all MC primary tracks
\r
1136 // in Zv, pt and eta ranges)
\r
1137 multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
\r
1142 // get reconstructed vertex
\r
1143 const AliESDVertex* vtxESD = 0;
\r
1144 Bool_t isRecVertex = kFALSE;
\r
1145 if(evtCuts->IsRecVertexRequired())
\r
1147 Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();
\r
1148 Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();
\r
1149 vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints);
\r
1150 isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);
\r
1153 if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {
\r
1154 vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");
\r
1155 isRecVertex = kTRUE;
\r
1158 Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;
\r
1159 //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
\r
1160 //printf("GetAnalysisMode() %d \n",GetAnalysisMode());
\r
1162 Bool_t isTrigAndVertex = isEventTriggered && isEventOK;
\r
1164 Double_t vEventCount[3] = { (isEventTriggered && kTRUE) , isTrigAndVertex, isTrigAndVertex && (TMath::Abs(vtxESD->GetZv()) < 10.)};
\r
1165 fEventCount->Fill(vEventCount);
\r
1167 // vertex contributors
\r
1168 Int_t multMBTracks = 0;
\r
1169 if(GetAnalysisMode() == AlidNdPtHelper::kTPC)
\r
1171 if(vtxESD->GetStatus() && isRecVertex)
\r
1172 multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);
\r
1174 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx ||
\r
1175 GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate )
\r
1177 const AliMultiplicity* mult = esdEvent->GetMultiplicity();
\r
1178 if(mult && vtxESD->GetStatus() && isRecVertex)
\r
1179 multMBTracks = mult->GetNumberOfTracklets();
\r
1181 else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||
\r
1182 GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ||
\r
1183 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx ||
\r
1184 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate ||
\r
1185 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1186 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ||
\r
1187 GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx ||
\r
1188 GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx
\r
1191 if(vtxESD->GetStatus() && isRecVertex)
\r
1192 multMBTracks = vtxESD->GetNContributors();
\r
1195 AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));
\r
1199 Bool_t isEventSelected = kTRUE;
\r
1200 if(evtCuts->IsEventSelectedRequired())
\r
1202 // select events with at least
\r
1203 // one prompt track in acceptance
\r
1204 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies
\r
1206 isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts);
\r
1207 //printf("isEventSelected %d \n", isEventSelected);
\r
1210 TObjArray *allChargedTracks=0;
\r
1211 Int_t multAll=0, multAcc=0, multRec=0;
\r
1212 Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;
\r
1215 // check event cuts
\r
1216 if(isEventOK && isEventTriggered && isEventSelected)
\r
1218 // get all charged tracks
\r
1219 allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());
\r
1220 if(!allChargedTracks) return;
\r
1222 Int_t entries = allChargedTracks->GetEntries();
\r
1223 //printf("entries %d \n",entries);
\r
1226 // calculate mult of reconstructed tracks
\r
1227 Int_t multRecTemp=0;
\r
1228 for(Int_t i=0; i<entries;++i)
\r
1230 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1231 if(!track) continue;
\r
1232 if(track->Charge()==0) continue;
\r
1235 // only postive charged
\r
1236 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1239 // only negative charged
\r
1240 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1243 if(esdTrackCuts->AcceptTrack(track))
\r
1245 if(accCuts->AcceptTrack(track)) multRecTemp++;
\r
1250 labelsAll = new Int_t[entries];
\r
1251 labelsAcc = new Int_t[entries];
\r
1252 labelsRec = new Int_t[entries];
\r
1253 for(Int_t i=0; i<entries;++i)
\r
1255 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1256 if(!track) continue;
\r
1257 if(track->Charge()==0) continue;
\r
1259 // only postive charged
\r
1260 if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0)
\r
1263 // only negative charged
\r
1264 if(GetParticleMode() == AlidNdPtHelper::kMinus && track->Charge() > 0)
\r
1267 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kAllTracks, multRecTemp);
\r
1268 labelsAll[multAll] = TMath::Abs(track->GetLabel());
\r
1271 //if(accCuts->AcceptTrack(track)) {
\r
1272 //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks);
\r
1273 //labelsAcc[multAcc] = TMath::Abs(track->GetLabel());
\r
1277 // esd track selection
\r
1278 // ITS stand alone
\r
1279 if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTrackSPDvtx)
\r
1281 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;
\r
1282 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;
\r
1283 if(track->GetNcls(0)<4) continue;
\r
1284 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;
\r
1286 else if(GetAnalysisMode() == AlidNdPtHelper::kITSStandAloneTPCTrackSPDvtx)
\r
1289 // ITS and TPC stand alone tracks
\r
1291 if(!(track->GetStatus() & AliESDtrack::kITSpureSA)) continue;
\r
1292 if(!(track->GetStatus() & AliESDtrack::kITSrefit)) continue;
\r
1293 if(track->GetNcls(0)<4) continue;
\r
1294 if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;
\r
1296 // Check matching with TPC only track
\r
1297 Bool_t hasMatch = kFALSE;
\r
1298 for(Int_t j=0; j<entries;++j)
\r
1300 if(i==j) continue;
\r
1301 AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(j);
\r
1302 if(!track2) continue;
\r
1303 if(track2->Charge()==0) continue;
\r
1304 if (!track2->GetTPCInnerParam()) continue;
\r
1306 // check loose cuts for TPC tracks
\r
1307 if(!esdTrackCuts->AcceptTrack(track2)) continue;
\r
1309 AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(track2->GetTPCInnerParam()));
\r
1310 if(!innerTPC) continue;
\r
1311 Double_t x2[3]; track2->GetXYZ(x2);
\r
1312 Double_t b2[3]; AliTracker::GetBxByBz(x2,b2);
\r
1313 Double_t dz[2],cov[3];
\r
1314 Bool_t isPropOK = innerTPC->PropagateToDCABxByBz(vtxESD,b2,kVeryBig,dz,cov);
\r
1315 if(!isPropOK && innerTPC) {delete innerTPC; continue;}
\r
1318 if (TMath::Abs(track->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }
\r
1319 if (TMath::Abs(track->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }
\r
1320 if (TMath::Abs(track->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }
\r
1323 if(innerTPC) delete innerTPC;
\r
1326 if(!hasMatch) continue;
\r
1329 // check track cuts
\r
1331 if(!esdTrackCuts->AcceptTrack(track))
\r
1336 Bool_t isOK = kFALSE;
\r
1337 Double_t x[3]; track->GetXYZ(x);
\r
1338 Double_t b[3]; AliTracker::GetBxByBz(x,b);
\r
1341 // if TPC-ITS hybrid tracking (kTPCITSHybrid)
\r
1342 // replace track parameters with TPC-ony track parameters
\r
1344 if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ||
\r
1345 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx ||
\r
1346 GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)
\r
1348 // Relate TPC-only tracks to Track or SPD vertex
\r
1349 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
\r
1350 if(!isOK) continue;
\r
1352 // replace esd track parameters with TPCinner
\r
1353 AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam()));
\r
1354 if (!tpcTrack) return;
\r
1355 track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance());
\r
1357 if(tpcTrack) delete tpcTrack;
\r
1361 // update track parameters using vertex point
\r
1362 if( GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate ||
\r
1363 GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate )
\r
1365 // update track parameters
\r
1366 AliExternalTrackParam cParam;
\r
1367 isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig, &cParam);
\r
1368 if(!isOK) continue;
\r
1369 track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());
\r
1371 if(accCuts->AcceptTrack(track)) {
\r
1372 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecTemp);
\r
1373 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1378 if(accCuts->AcceptTrack(track))
\r
1380 FillHistograms(track,stack,vtxESD->GetZv(),AlidNdPtHelper::kRecTracks,multRecTemp);
\r
1381 labelsRec[multRec] = TMath::Abs(track->GetLabel());
\r
1388 // fill track multiplicity histograms
\r
1389 FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec);
\r
1391 Double_t vRecEventHist1[3] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv()};
\r
1392 fRecEventHist1->Fill(vRecEventHist1);
\r
1394 Double_t vRecEventHist2[3] = {vtxESD->GetZv(),multMBTracks,multRec};
\r
1395 fRecEventHist2->Fill(vRecEventHist2);
\r
1398 Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks};
\r
1399 fRecEventHist->Fill(vRecEventHist);
\r
1402 if(IsUseMCInfo())
\r
1404 if(!mcEvent) return;
\r
1406 if(evtCuts->IsEventSelectedRequired())
\r
1408 // select events with at least
\r
1409 // one MC primary track in acceptance
\r
1410 // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies
\r
1412 Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);
\r
1413 //printf("isMCEventSelected %d \n", isMCEventSelected);
\r
1414 if(!isMCEventSelected) return;
\r
1417 Double_t vMultTrueEventMatrix[3] = { multRec, multMCTrueTracks, multMBTracks};
\r
1418 if(isEventOK && isEventTriggered) {
\r
1419 if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted
\r
1420 fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix);
\r
1424 // event level corrections (zv,N_MB)
\r
1428 Double_t vEventMatrix[2] = {vtxMC[2],multMBTracks};
\r
1429 fGenEventMatrix->Fill(vEventMatrix);
\r
1430 if(isEventTriggered) fTriggerEventMatrix->Fill(vEventMatrix);
\r
1431 if(isEventOK && isEventTriggered) fRecEventMatrix->Fill(vEventMatrix);
\r
1433 // single diffractive
\r
1434 if(evtType == AliPWG0Helper::kSD) {
\r
1435 fGenSDEventMatrix->Fill(vEventMatrix);
\r
1436 if(isEventTriggered) fTriggerSDEventMatrix->Fill(vEventMatrix);
\r
1437 if(isEventOK && isEventTriggered) fRecSDEventMatrix->Fill(vEventMatrix);
\r
1440 // double diffractive
\r
1441 if(evtType == AliPWG0Helper::kDD) {
\r
1442 fGenDDEventMatrix->Fill(vEventMatrix);
\r
1443 if(isEventTriggered) fTriggerDDEventMatrix->Fill(vEventMatrix);
\r
1444 if(isEventOK && isEventTriggered) fRecDDEventMatrix->Fill(vEventMatrix);
\r
1447 // non diffractive
\r
1448 if(evtType == AliPWG0Helper::kND) {
\r
1449 fGenNDEventMatrix->Fill(vEventMatrix);
\r
1450 if(isEventTriggered) fTriggerNDEventMatrix->Fill(vEventMatrix);
\r
1451 if(isEventOK && isEventTriggered) fRecNDEventMatrix->Fill(vEventMatrix);
\r
1454 // non single diffractive
\r
1455 if(evtType != AliPWG0Helper::kSD) {
\r
1456 fGenNSDEventMatrix->Fill(vEventMatrix);
\r
1457 if(isEventTriggered) fTriggerNSDEventMatrix->Fill(vEventMatrix);
\r
1458 if(isEventOK && isEventTriggered) fRecNSDEventMatrix->Fill(vEventMatrix);
\r
1462 // track-event level corrections (zv,pt,eta)
\r
1464 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
\r
1466 TParticle* particle = stack->Particle(iMc);
\r
1470 // only charged particles
\r
1471 if(!particle->GetPDG()) continue;
\r
1472 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1473 if ( TMath::Abs(charge) < 0.001 )
\r
1476 // only postive charged
\r
1477 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1480 // only negative charged
\r
1481 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1484 // physical primary
\r
1485 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1486 if(!prim) continue;
\r
1488 // checked accepted
\r
1489 if(accCuts->AcceptTrack(particle))
\r
1491 Double_t vTrackEventMatrix[3] = {vtxMC[2], particle->Pt(), particle->Eta()};
\r
1492 fGenTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1494 if(evtType == AliPWG0Helper::kSD) {
\r
1495 fGenTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1497 if(evtType == AliPWG0Helper::kDD) {
\r
1498 fGenTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1500 if(evtType == AliPWG0Helper::kND) {
\r
1501 fGenTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1503 if(evtType != AliPWG0Helper::kSD) {
\r
1504 fGenTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1508 if(!isEventTriggered) continue;
\r
1510 fTriggerTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1511 if(evtType == AliPWG0Helper::kSD) {
\r
1512 fTriggerTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1514 if(evtType == AliPWG0Helper::kDD) {
\r
1515 fTriggerTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1517 if(evtType == AliPWG0Helper::kND) {
\r
1518 fTriggerTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1520 if(evtType != AliPWG0Helper::kSD) {
\r
1521 fTriggerTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1525 if(!isEventOK) continue;
\r
1527 fRecTrackEventMatrix->Fill(vTrackEventMatrix);
\r
1528 if(evtType == AliPWG0Helper::kSD) {
\r
1529 fRecTrackSDEventMatrix->Fill(vTrackEventMatrix);
\r
1531 if(evtType == AliPWG0Helper::kDD) {
\r
1532 fRecTrackDDEventMatrix->Fill(vTrackEventMatrix);
\r
1534 if(evtType == AliPWG0Helper::kND) {
\r
1535 fRecTrackNDEventMatrix->Fill(vTrackEventMatrix);
\r
1537 if(evtType != AliPWG0Helper::kSD) {
\r
1538 fRecTrackNSDEventMatrix->Fill(vTrackEventMatrix);
\r
1544 // track-level corrections (zv,pt,eta)
\r
1546 if(isEventOK && isEventTriggered)
\r
1549 // fill MC and rec event control histograms
\r
1550 if(fHistogramsOn) {
\r
1551 Double_t vRecMCEventHist1[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2]};
\r
1552 fRecMCEventHist1->Fill(vRecMCEventHist1);
\r
1554 Double_t vRecMCEventHist2[3] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetZv()-vtxMC[2],multMBTracks};
\r
1555 fRecMCEventHist2->Fill(vRecMCEventHist2);
\r
1557 Double_t vRecMCEventHist3[2] = {multRec,evtType};
\r
1558 fRecMCEventHist3->Fill(vRecMCEventHist3);
\r
1562 // MC histograms for track efficiency studies
\r
1564 Int_t countRecCandle = 0;
\r
1565 for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
\r
1567 TParticle* particle = stack->Particle(iMc);
\r
1571 Double_t vTrackMatrix[3] = {vtxMC[2],particle->Pt(),particle->Eta()};
\r
1573 // all genertated primaries including neutral
\r
1574 //if( iMc < stack->GetNprimary() ) {
\r
1575 //fGenTrackMatrix->Fill(vTrackMatrix);
\r
1578 // only charged particles
\r
1579 if(!particle->GetPDG()) continue;
\r
1580 Double_t charge = particle->GetPDG()->Charge()/3.;
\r
1581 if (TMath::Abs(charge) < 0.001)
\r
1584 // only postive charged
\r
1585 if(GetParticleMode() == AlidNdPtHelper::kPlus && charge < 0.)
\r
1588 // only negative charged
\r
1589 if(GetParticleMode() == AlidNdPtHelper::kMinus && charge > 0.)
\r
1592 // physical primary
\r
1593 Bool_t prim = stack->IsPhysicalPrimary(iMc);
\r
1596 if(accCuts->AcceptTrack(particle))
\r
1599 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) )
\r
1600 fGenPrimTrackMatrix->Fill(vTrackMatrix);
\r
1602 // fill control histograms
\r
1603 if(fHistogramsOn)
\r
1604 FillHistograms(stack,iMc,AlidNdPtHelper::kAccTracks);
\r
1606 // check multiple found tracks
\r
1607 Int_t multCount = 0;
\r
1608 for(Int_t iRec=0; iRec<multRec; ++iRec)
\r
1610 if(iMc == labelsRec[iRec])
\r
1615 fRecMultTrackMatrix->Fill(vTrackMatrix);
\r
1617 // fill control histogram
\r
1618 if(fHistogramsOn) {
\r
1619 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1620 Double_t vMCMultRecTrackHist1[3] = {particle->Pt(), particle->Eta(), pid};
\r
1621 fMCMultRecTrackHist1->Fill(vMCMultRecTrackHist1);
\r
1627 // check reconstructed
\r
1628 for(Int_t iRec=0; iRec<multRec; ++iRec)
\r
1630 if(iMc == labelsRec[iRec])
\r
1632 fRecTrackMatrix->Fill(vTrackMatrix);
\r
1634 if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {
\r
1635 fRecPrimTrackMatrix->Fill(vTrackMatrix);
\r
1636 //AliESDtrack *track = esdEvent->GetTrack(iRec);
\r
1637 //if(track && track->GetKinkIndex(0) < 0)
\r
1638 // printf("prim kink \n");
\r
1642 if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);
\r
1644 // fill control histograms
\r
1645 if(fHistogramsOn)
\r
1646 FillHistograms(stack,iMc,AlidNdPtHelper::kRecTracks);
\r
1654 if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix);
\r
1660 if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;
\r
1661 if(labelsAll) delete [] labelsAll; labelsAll = 0;
\r
1662 if(labelsAcc) delete [] labelsAcc; labelsAcc = 0;
\r
1663 if(labelsRec) delete [] labelsRec; labelsRec = 0;
\r
1665 if(!evtCuts->IsRecVertexRequired() && vtxESD != NULL) delete vtxESD;
\r
1666 //if(trigAna) delete trigAna;
\r
1670 //_____________________________________________________________________________
\r
1671 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
1672 // multiplicity histograms
\r
1674 if(!allChargedTracks) return;
\r
1675 if(!labelsAll) return;
\r
1676 if(!labelsAcc) return;
\r
1677 if(!labelsRec) return;
\r
1679 Int_t entries = allChargedTracks->GetEntries();
\r
1680 for(Int_t i=0; i<entries; ++i)
\r
1682 AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i);
\r
1683 if(!track) continue;
\r
1684 if(track->Charge() == 0) continue;
\r
1686 Int_t label = TMath::Abs(track->GetLabel());
\r
1687 for(Int_t iAll=0; iAll<multAll; ++iAll) {
\r
1688 if(label == labelsAll[iAll]) {
\r
1689 Double_t v1[2] = {track->Pt(), multAll};
\r
1690 fRecTrackMultHist1[AlidNdPtHelper::kAllTracks]->Fill(v1);
\r
1693 for(Int_t iAcc=0; iAcc<multAcc; ++iAcc) {
\r
1694 if(label == labelsAcc[iAcc]) {
\r
1695 Double_t v2[2] = {track->Pt(), multAcc};
\r
1696 fRecTrackMultHist1[AlidNdPtHelper::kAccTracks]->Fill(v2);
\r
1699 for(Int_t iRec=0; iRec<multRec; ++iRec) {
\r
1700 if(label == labelsRec[iRec]) {
\r
1701 Double_t v3[2] = {track->Pt(), multRec};
\r
1702 fRecTrackMultHist1[AlidNdPtHelper::kRecTracks]->Fill(v3);
\r
1708 //_____________________________________________________________________________
\r
1709 void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Double_t zv, AlidNdPtHelper::TrackObject trackObj, Int_t multMB)
\r
1712 // Fill ESD track and MC histograms
\r
1714 if(!esdTrack) return;
\r
1716 Float_t q = esdTrack->Charge();
\r
1717 if(TMath::Abs(q) < 0.001) return;
\r
1719 Float_t pt = esdTrack->Pt();
\r
1720 //Float_t qpt = esdTrack->Pt() * q;
\r
1721 Float_t eta = esdTrack->Eta();
\r
1722 Float_t phi = esdTrack->Phi();
\r
1724 Float_t dca[2], bCov[3];
\r
1725 esdTrack->GetImpactParameters(dca,bCov);
\r
1727 Int_t nClust = esdTrack->GetTPCclusters(0);
\r
1728 Float_t chi2PerCluster = 0.;
\r
1729 if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust);
\r
1732 // fill histograms
\r
1733 Double_t values1[3] = {pt,eta,phi};
\r
1734 fRecTrackHist1[trackObj]->Fill(values1);
\r
1736 Double_t values[4] = {zv, pt,eta, multMB};
\r
1737 if(trackObj == AlidNdPtHelper::kRecTracks) {
\r
1738 fRecTrackHist->Fill(values);
\r
1742 Double_t values2[5] = {nClust,chi2PerCluster,pt,eta,phi};
\r
1743 if(trackObj == AlidNdPtHelper::kRecTracks)
\r
1746 fRecTrackHist2->Fill(values2);
\r
1751 // Fill rec vs MC information
\r
1753 if(!stack) return;
\r
1755 Int_t label = TMath::Abs(esdTrack->GetLabel());
\r
1756 //if(label == 0) return;
\r
1758 if(label > stack->GetNtrack()) return;
\r
1759 TParticle* particle = stack->Particle(label);
\r
1760 if(!particle) return;
\r
1762 //Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1763 //Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1765 Int_t motherPdg = -1;
\r
1766 TParticle* mother = 0;
\r
1768 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1769 Int_t motherLabel = particle->GetMother(0);
\r
1770 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1771 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1772 //Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1774 if(!particle->GetPDG()) return;
\r
1775 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1776 if(TMath::Abs(gq)<0.001) return;
\r
1777 Float_t gpt = particle->Pt();
\r
1778 Float_t geta = particle->Eta();
\r
1779 //Float_t qgpt = particle->Pt() * gq;
\r
1780 //Float_t gphi = particle->Phi();
\r
1783 //printf("pt %f, gpt %f \n",pt,gpt);
\r
1784 if(gpt) dpt = (pt-gpt)/gpt;
\r
1785 Double_t deta = (eta-geta);
\r
1787 // fill histograms
\r
1788 if(trackObj == AlidNdPtHelper::kRecTracks)
\r
1790 Double_t vTrackPtCorrelationMatrix[3]={pt,gpt,geta};
\r
1791 fTrackPtCorrelationMatrix->Fill(vTrackPtCorrelationMatrix);
\r
1793 Double_t vRecMCTrackHist1[4]={gpt,geta,dpt,deta};
\r
1794 fRecMCTrackHist1->Fill(vRecMCTrackHist1);
\r
1798 //_____________________________________________________________________________
\r
1799 void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj)
\r
1801 // Fill MC histograms
\r
1802 if(!stack) return;
\r
1804 if(label > stack->GetNtrack()) return;
\r
1805 TParticle* particle = stack->Particle(label);
\r
1806 if(!particle) return;
\r
1808 Int_t motherPdg = -1;
\r
1809 TParticle* mother = 0;
\r
1811 //TParticle* prim_mother = AlidNdPtHelper::FindPrimaryMother(stack,label);
\r
1812 Int_t motherLabel = particle->GetMother(0);
\r
1813 if(motherLabel>0) mother = stack->Particle(motherLabel);
\r
1814 if(mother) motherPdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only
\r
1815 Int_t mech = particle->GetUniqueID(); // production mechanism
\r
1817 if(!particle->GetPDG()) return;
\r
1818 Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3
\r
1819 if(TMath::Abs(gq) < 0.001) return;
\r
1821 Float_t gpt = particle->Pt();
\r
1822 //Float_t qgpt = particle->Pt() * gq;
\r
1823 Float_t geta = particle->Eta();
\r
1824 Float_t gphi = particle->Phi();
\r
1825 //Float_t gpz = particle->Pz();
\r
1827 Bool_t prim = stack->IsPhysicalPrimary(label);
\r
1828 //Float_t vx = particle->Vx(); Float_t vy = particle->Vy(); Float_t vz = particle->Vz();
\r
1830 Int_t pid = AlidNdPtHelper::ConvertPdgToPid(particle);
\r
1832 //if(prim&&pid==5) printf("pdgcode %d, production mech %d \n",particle->GetPdgCode(),mech);
\r
1833 //if(!prim) printf("motherPdg %d, particle %d, production mech %d\n",motherPdg, particle->GetPdgCode(),mech);
\r
1838 Double_t vMCTrackHist1[3] = {gpt,geta,gphi};
\r
1839 fMCTrackHist1[trackObj]->Fill(vMCTrackHist1);
\r
1841 Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg};
\r
1842 Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg};
\r
1843 //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1845 fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1846 if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2);
\r
1849 fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1);
\r
1854 //_____________________________________________________________________________
\r
1855 Long64_t AlidNdPtAnalysis::Merge(TCollection* const list)
\r
1857 // init if not done already
\r
1858 if (!fIsInit) { Init(); }
\r
1860 // Merge list of objects (needed by PROOF)
\r
1865 if (list->IsEmpty())
\r
1868 TIterator* iter = list->MakeIterator();
\r
1872 //TList *collPhysSelection = new TList;
\r
1874 // collection of generated histograms
\r
1877 while((obj = iter->Next()) != 0) {
\r
1878 AlidNdPtAnalysis* entry = dynamic_cast<AlidNdPtAnalysis*>(obj);
\r
1879 if (entry == 0) continue;
\r
1881 // physics selection
\r
1882 //printf("entry->GetPhysicsTriggerSelection() %p \n", entry->GetPhysicsTriggerSelection());
\r
1883 //collPhysSelection->Add(entry->GetPhysicsTriggerSelection());
\r
1886 fRecEventHist->Add(entry->fRecEventHist);
\r
1887 fRecTrackHist->Add(entry->fRecTrackHist);
\r
1890 fEventMultCorrelationMatrix->Add(entry->fEventMultCorrelationMatrix);
\r
1891 fTrackPtCorrelationMatrix->Add(entry->fTrackPtCorrelationMatrix);
\r
1894 fGenEventMatrix->Add(entry->fGenEventMatrix);
\r
1895 fGenSDEventMatrix->Add(entry->fGenSDEventMatrix);
\r
1896 fGenDDEventMatrix->Add(entry->fGenDDEventMatrix);
\r
1897 fGenNDEventMatrix->Add(entry->fGenNDEventMatrix);
\r
1898 fGenNSDEventMatrix->Add(entry->fGenNSDEventMatrix);
\r
1900 fTriggerEventMatrix->Add(entry->fTriggerEventMatrix);
\r
1901 fTriggerSDEventMatrix->Add(entry->fTriggerSDEventMatrix);
\r
1902 fTriggerDDEventMatrix->Add(entry->fTriggerDDEventMatrix);
\r
1903 fTriggerNDEventMatrix->Add(entry->fTriggerNDEventMatrix);
\r
1904 fTriggerNSDEventMatrix->Add(entry->fTriggerNSDEventMatrix);
\r
1906 fRecEventMatrix->Add(entry->fRecEventMatrix);
\r
1907 fRecSDEventMatrix->Add(entry->fRecSDEventMatrix);
\r
1908 fRecDDEventMatrix->Add(entry->fRecDDEventMatrix);
\r
1909 fRecNDEventMatrix->Add(entry->fRecNDEventMatrix);
\r
1910 fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix);
\r
1912 fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix);
\r
1914 fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);
\r
1915 fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix);
\r
1916 fGenTrackDDEventMatrix->Add(entry->fGenTrackDDEventMatrix);
\r
1917 fGenTrackNDEventMatrix->Add(entry->fGenTrackNDEventMatrix);
\r
1918 fGenTrackNSDEventMatrix->Add(entry->fGenTrackNSDEventMatrix);
\r
1920 fTriggerTrackEventMatrix->Add(entry->fTriggerTrackEventMatrix);
\r
1921 fTriggerTrackSDEventMatrix->Add(entry->fTriggerTrackSDEventMatrix);
\r
1922 fTriggerTrackDDEventMatrix->Add(entry->fTriggerTrackDDEventMatrix);
\r
1923 fTriggerTrackNDEventMatrix->Add(entry->fTriggerTrackNDEventMatrix);
\r
1924 fTriggerTrackNSDEventMatrix->Add(entry->fTriggerTrackNSDEventMatrix);
\r
1926 fRecTrackEventMatrix->Add(entry->fRecTrackEventMatrix);
\r
1927 fRecTrackSDEventMatrix->Add(entry->fRecTrackSDEventMatrix);
\r
1928 fRecTrackDDEventMatrix->Add(entry->fRecTrackDDEventMatrix);
\r
1929 fRecTrackNDEventMatrix->Add(entry->fRecTrackNDEventMatrix);
\r
1930 fRecTrackNSDEventMatrix->Add(entry->fRecTrackNSDEventMatrix);
\r
1933 fGenTrackMatrix->Add(entry->fGenTrackMatrix);
\r
1934 fGenPrimTrackMatrix->Add(entry->fGenPrimTrackMatrix);
\r
1935 fRecPrimTrackMatrix->Add(entry->fRecPrimTrackMatrix);
\r
1937 fRecTrackMatrix->Add(entry->fRecTrackMatrix);
\r
1938 fRecSecTrackMatrix->Add(entry->fRecSecTrackMatrix);
\r
1940 fRecMultTrackMatrix->Add(entry->fRecMultTrackMatrix);
\r
1943 // control analysis histograms
\r
1945 fMCEventHist1->Add(entry->fMCEventHist1);
\r
1946 fRecEventHist1->Add(entry->fRecEventHist1);
\r
1947 fRecEventHist2->Add(entry->fRecEventHist2);
\r
1948 fRecMCEventHist1->Add(entry->fRecMCEventHist1);
\r
1949 fRecMCEventHist2->Add(entry->fRecMCEventHist2);
\r
1950 fRecMCEventHist3->Add(entry->fRecMCEventHist3);
\r
1952 for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) {
\r
1953 fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]);
\r
1955 fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]);
\r
1956 fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]);
\r
1957 fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]);
\r
1959 fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]);
\r
1960 fRecTrackMultHist1[i]->Add(entry->fRecTrackMultHist1[i]);
\r
1962 fRecMCTrackHist1->Add(entry->fRecMCTrackHist1);
\r
1963 fMCMultRecTrackHist1->Add(entry->fMCMultRecTrackHist1);
\r
1964 fRecTrackHist2->Add(entry->fRecTrackHist2);
\r
1965 fEventCount->Add(entry->fEventCount);
\r
1970 //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection();
\r
1971 //trigSelection->Merge(collPhysSelection);
\r
1972 //if(collPhysSelection) delete collPhysSelection;
\r
1977 //____________________________________________________________________
\r
1978 Bool_t AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(const AliESDEvent* esdEvent) {
\r
1981 // for LHC background calculation
\r
1982 // return kTRUE if vertex not reconstructed or
\r
1983 // track multiplicity == 0
\r
1985 if(!esdEvent) return kFALSE;
\r
1988 const AliESDVertex *vertex = esdEvent->GetPrimaryVertexTracks();
\r
1989 if(!vertex) return kTRUE;
\r
1991 if(vertex->GetNContributors() < 1) {
\r
1993 vertex = esdEvent->GetPrimaryVertexSPD();
\r
1994 if(!vertex) return kTRUE;
\r
1996 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE;
\r
1997 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCITSHybridTrackSPDvtx) )
\r
2003 //____________________________________________________________________
\r
2004 Bool_t AlidNdPtAnalysis::IsBinZeroSPDvtx(const AliESDEvent* esdEvent) {
\r
2007 // for LHC background calculation
\r
2008 // return kTRUE if vertex not reconstructed or
\r
2009 // tracklet multiplicity == 0
\r
2011 if(!esdEvent) return kFALSE;
\r
2014 const AliESDVertex* vertex = esdEvent->GetPrimaryVertexSPD();
\r
2015 if(!vertex) return kTRUE;
\r
2016 if(TMath::Abs(vertex->GetZv()) > 15.0) return kTRUE;
\r
2017 if( !AlidNdPtHelper::TestRecVertex(vertex, esdEvent->GetPrimaryVertexSPD(), AlidNdPtHelper::kTPCSPDvtx) ) return kTRUE;
\r
2022 //_____________________________________________________________________________
\r
2023 void AlidNdPtAnalysis::Analyse()
\r
2025 // init if not done already
\r
2026 if (!fIsInit) { Init(); }
\r
2028 // Analyse histograms
\r
2030 TH1::AddDirectory(kFALSE);
\r
2031 TH1 *h=0, *h1=0, *h2=0, *h2c = 0;
\r
2036 TObjArray *aFolderObj = new TObjArray;
\r
2039 // LHC backgraund in all and 0-bins
\r
2041 //AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection();
\r
2042 //trigSel->SaveHistograms("physics_selection");
\r
2045 // Reconstructed event vertex
\r
2047 h = fRecEventHist1->Projection(0);
\r
2049 aFolderObj->Add(h);
\r
2051 h = fRecEventHist1->Projection(1);
\r
2053 aFolderObj->Add(h);
\r
2055 h = fRecEventHist1->Projection(2);
\r
2057 aFolderObj->Add(h);
\r
2062 h = fRecEventHist2->Projection(1);
\r
2063 h->SetName("multMB");
\r
2064 aFolderObj->Add(h);
\r
2066 h = fRecEventHist2->Projection(2);
\r
2067 h->SetName("multiplicity");
\r
2068 aFolderObj->Add(h);
\r
2070 h2D = fRecEventHist2->Projection(0,1);
\r
2071 h2D->SetName("Zv_vs_multiplicity_MB");
\r
2072 aFolderObj->Add(h2D);
\r
2075 // reconstructed pt histograms
\r
2077 h = fRecTrackHist1[0]->Projection(0);
\r
2078 h->Scale(1.,"width");
\r
2079 h->SetName("pt_all_ch");
\r
2080 aFolderObj->Add(h);
\r
2082 h = fRecTrackHist1[1]->Projection(0);
\r
2083 h->Scale(1.,"width");
\r
2084 h->SetName("pt_acc");
\r
2085 aFolderObj->Add(h);
\r
2087 h = fRecTrackHist1[2]->Projection(0);
\r
2088 h->Scale(1.,"width");
\r
2089 h->SetName("pt_rec");
\r
2090 aFolderObj->Add(h);
\r
2093 // reconstructed eta histograms
\r
2095 h = fRecTrackHist1[0]->Projection(1);
\r
2096 h->SetName("eta_all_ch");
\r
2097 aFolderObj->Add(h);
\r
2099 h = fRecTrackHist1[1]->Projection(1);
\r
2100 h->SetName("eta_acc");
\r
2101 aFolderObj->Add(h);
\r
2103 h = fRecTrackHist1[2]->Projection(1);
\r
2104 h->SetName("eta_rec");
\r
2105 aFolderObj->Add(h);
\r
2108 // reconstructed phi histograms
\r
2110 h = fRecTrackHist1[0]->Projection(2);
\r
2111 h->SetName("phi_all_ch");
\r
2112 aFolderObj->Add(h);
\r
2114 h = fRecTrackHist1[1]->Projection(2);
\r
2115 h->SetName("phi_acc");
\r
2116 aFolderObj->Add(h);
\r
2118 h = fRecTrackHist1[2]->Projection(2);
\r
2119 h->SetName("phi_rec");
\r
2120 aFolderObj->Add(h);
\r
2123 // reconstructed eta:pt histograms
\r
2125 h2D = fRecTrackHist1[0]->Projection(1,0);
\r
2126 h2D->SetName("pt_eta_all_ch");
\r
2127 aFolderObj->Add(h2D);
\r
2129 h2D = fRecTrackHist1[1]->Projection(1,0);
\r
2130 h2D->SetName("pt_eta_acc");
\r
2131 aFolderObj->Add(h2D);
\r
2133 h2D = fRecTrackHist1[2]->Projection(1,0);
\r
2134 h2D->SetName("pt_eta_rec");
\r
2135 aFolderObj->Add(h2D);
\r
2138 // reconstructed phi:pt histograms
\r
2140 h2D = fRecTrackHist1[0]->Projection(2,0);
\r
2141 h2D->SetName("pt_phi_all_ch");
\r
2142 aFolderObj->Add(h2D);
\r
2144 h2D = fRecTrackHist1[1]->Projection(2,0);
\r
2145 h2D->SetName("pt_phi_acc");
\r
2146 aFolderObj->Add(h2D);
\r
2148 h2D = fRecTrackHist1[2]->Projection(2,0);
\r
2149 h2D->SetName("pt_phi_rec");
\r
2150 aFolderObj->Add(h2D);
\r
2153 // reconstructed phi:eta histograms
\r
2155 h2D = fRecTrackHist1[0]->Projection(2,1);
\r
2156 h2D->SetName("eta_phi_all_ch");
\r
2157 aFolderObj->Add(h2D);
\r
2159 h2D = fRecTrackHist1[1]->Projection(2,1);
\r
2160 h2D->SetName("eta_phi_acc");
\r
2161 aFolderObj->Add(h2D);
\r
2163 h2D = fRecTrackHist1[2]->Projection(2,1);
\r
2164 h2D->SetName("eta_phi_rec");
\r
2165 aFolderObj->Add(h2D);
\r
2168 // reconstructed nClust, chi2 vs pt, eta, phi
\r
2170 if(fHistogramsOn) {
\r
2172 h2D = fRecTrackHist2->Projection(0,1);
\r
2173 h2D->SetName("nClust_chi2_rec");
\r
2174 aFolderObj->Add(h2D);
\r
2176 h2D = fRecTrackHist2->Projection(0,2);
\r
2177 h2D->SetName("nClust_pt_rec");
\r
2178 aFolderObj->Add(h2D);
\r
2180 h2D = fRecTrackHist2->Projection(0,3);
\r
2181 h2D->SetName("nClust_eta_rec");
\r
2182 aFolderObj->Add(h2D);
\r
2184 h2D = fRecTrackHist2->Projection(0,4);
\r
2185 h2D->SetName("nClust_phi_rec");
\r
2186 aFolderObj->Add(h2D);
\r
2188 h2D = fRecTrackHist2->Projection(1,2);
\r
2189 h2D->SetName("chi2_pt_rec");
\r
2190 aFolderObj->Add(h2D);
\r
2192 h2D = fRecTrackHist2->Projection(1,3);
\r
2193 h2D->SetName("chi2_eta_rec");
\r
2194 aFolderObj->Add(h2D);
\r
2196 h2D = fRecTrackHist2->Projection(1,4);
\r
2197 h2D->SetName("chi2_phi_rec");
\r
2198 aFolderObj->Add(h2D);
\r
2203 // calculate corrections for empty events
\r
2204 // with multMB==0
\r
2208 // normalised zv to generate zv for triggered events
\r
2210 h = fRecEventHist2->Projection(0);
\r
2211 if( h->Integral() ) h->Scale(1./h->Integral());
\r
2212 h->SetName("zv_distribution_norm");
\r
2213 aFolderObj->Add(h);
\r
2218 if(IsUseMCInfo()) {
\r
2221 // Event vertex resolution
\r
2223 h2D = fRecMCEventHist2->Projection(0,2);
\r
2224 h2D->SetName("DeltaXv_vs_mult");
\r
2225 aFolderObj->Add(h2D);
\r
2227 h2D = fRecMCEventHist2->Projection(1,2);
\r
2228 h2D->SetName("DeltaZv_vs_mult");
\r
2229 aFolderObj->Add(h2D);
\r
2232 // normalised zv to get trigger/trigger+vertex event differences
\r
2233 // F(zv) = E_trig(zv,0)/Int(E_trig(zv,0) / Sum(E_trigvtx(zv,n))/Sum(Int(E_trigvtx(zv,n))dzv)
\r
2235 fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0.,0.);
\r
2236 h = fTriggerEventMatrix->Projection(0);
\r
2237 h2D = fTriggerEventMatrix->Projection(0,1);
\r
2238 if(h2D->Integral()) h->Scale(1./h2D->Integral());
\r
2240 h1 = fRecEventMatrix->Projection(0);
\r
2241 h2D = fRecEventMatrix->Projection(0,1);
\r
2242 if(h2D->Integral()) h1->Scale(1./h2D->Integral());
\r
2245 h->SetName("zv_empty_events_norm");
\r
2246 aFolderObj->Add(h);
\r
2248 fTriggerEventMatrix->GetAxis(1)->SetRange(1,fTriggerEventMatrix->GetAxis(1)->GetNbins());
\r
2251 // rec. vs true multiplicity correlation matrix
\r
2253 hs = (THnSparse*)fEventMultCorrelationMatrix->Clone("event_mult_correlation_matrix");
\r
2254 aFolderObj->Add(hs);
\r
2257 // rec. vs true track pt correlation matrix
\r
2259 hs = (THnSparse*)fTrackPtCorrelationMatrix->Clone("track_pt_correlation_matrix");
\r
2260 aFolderObj->Add(hs);
\r
2263 // trigger efficiency for INEL
\r
2265 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fGenEventMatrix->Projection(0),"zv_trig_INEL_eff_matrix");
\r
2266 aFolderObj->Add(h);
\r
2269 // trigger efficiency for NSD
\r
2271 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerNSDEventMatrix->Projection(0),fGenNSDEventMatrix->Projection(0),"zv_trig_NSD_eff_matrix");
\r
2272 aFolderObj->Add(h);
\r
2275 // trigger bias correction (MB to ND)
\r
2277 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoND_corr_matrix");
\r
2278 aFolderObj->Add(hs);
\r
2280 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoND_corr_matrix");
\r
2281 aFolderObj->Add(h);
\r
2284 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoND_corr_matrix");
\r
2286 aFolderObj->Add(h);
\r
2289 // trigger bias correction (MB to NSD)
\r
2291 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoNSD_corr_matrix");
\r
2292 aFolderObj->Add(hs);
\r
2294 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoNSD_corr_matrix_2D");
\r
2295 aFolderObj->Add(h2D);
\r
2297 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoNSD_corr_matrix");
\r
2298 aFolderObj->Add(h);
\r
2301 h = AlidNdPtHelper::GenerateCorrMatrix(fGenNSDEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoNSD_corr_matrix");
\r
2302 aFolderObj->Add(h);
\r
2306 // trigger bias correction (MB to INEL)
\r
2308 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix,fTriggerEventMatrix,"zv_mult_trig_MBtoInel_corr_matrix");
\r
2309 aFolderObj->Add(hs);
\r
2311 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0,1),fTriggerEventMatrix->Projection(0,1),"zv_mult_trig_MBtoInel_corr_matrix_2D");
\r
2312 aFolderObj->Add(h2D);
\r
2314 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(0),fTriggerEventMatrix->Projection(0),"zv_trig_MBtoInel_corr_matrix");
\r
2315 aFolderObj->Add(h);
\r
2317 h = AlidNdPtHelper::GenerateCorrMatrix(fGenEventMatrix->Projection(1),fTriggerEventMatrix->Projection(1),"mult_trig_MBtoInel_corr_matrix");
\r
2318 aFolderObj->Add(h);
\r
2322 // event vertex reconstruction correction (MB)
\r
2324 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix,fRecEventMatrix,"zv_mult_event_corr_matrix");
\r
2325 aFolderObj->Add(hs);
\r
2327 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0,1),fRecEventMatrix->Projection(0,1),"zv_mult_event_corr_matrix_2D");
\r
2328 aFolderObj->Add(h2D);
\r
2331 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(1),fRecEventMatrix->Projection(1),"mult_event_corr_matrix");
\r
2332 aFolderObj->Add(h);
\r
2335 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerEventMatrix->Projection(0),fRecEventMatrix->Projection(0),"zv_event_corr_matrix");
\r
2336 aFolderObj->Add(h);
\r
2339 // track-event trigger bias correction (MB to ND)
\r
2342 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoND_corr_matrix");
\r
2343 aFolderObj->Add(hs);
\r
2345 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoND_corr_matrix");
\r
2346 aFolderObj->Add(h2D);
\r
2348 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoND_corr_matrix");
\r
2349 aFolderObj->Add(h2D);
\r
2351 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoND_corr_matrix");
\r
2352 aFolderObj->Add(h2D);
\r
2355 // track-event trigger bias correction (MB to NSD)
\r
2357 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoNSD_corr_matrix");
\r
2358 aFolderObj->Add(hs);
\r
2360 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoNSD_corr_matrix");
\r
2361 aFolderObj->Add(h2D);
\r
2363 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoNSD_corr_matrix");
\r
2364 aFolderObj->Add(h2D);
\r
2366 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackNSDEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoNSD_corr_matrix");
\r
2367 aFolderObj->Add(h2D);
\r
2371 // track-event trigger bias correction (MB to INEL)
\r
2373 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix,fTriggerTrackEventMatrix,"zv_pt_eta_track_trig_MBtoInel_corr_matrix");
\r
2374 aFolderObj->Add(hs);
\r
2376 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,2),fTriggerTrackEventMatrix->Projection(1,2),"eta_pt_track_trig_MBtoInel_corr_matrix");
\r
2377 aFolderObj->Add(h2D);
\r
2379 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(1,0),fTriggerTrackEventMatrix->Projection(1,0),"pt_zv_track_trig_MBtoInel_corr_matrix");
\r
2380 aFolderObj->Add(h2D);
\r
2382 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenTrackEventMatrix->Projection(2,0),fTriggerTrackEventMatrix->Projection(2,0),"zv_eta_track_trig_MBtoInel_corr_matrix");
\r
2383 aFolderObj->Add(h2D);
\r
2387 h = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1),fGenTrackEventMatrix->Projection(1),"pt_track_trig_MBtoInel_eff_matrix");
\r
2388 aFolderObj->Add(h);
\r
2392 // track-event vertex reconstruction correction (MB)
\r
2394 hs = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix,fRecTrackEventMatrix,"zv_pt_eta_track_event_corr_matrix");
\r
2395 aFolderObj->Add(hs);
\r
2397 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,2),fRecTrackEventMatrix->Projection(1,2),"eta_pt_track_event_corr_matrix");
\r
2398 aFolderObj->Add(h2D);
\r
2400 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(1,0),fRecTrackEventMatrix->Projection(1,0),"pt_zv_track_event_corr_matrix");
\r
2401 aFolderObj->Add(h2D);
\r
2403 h2D = AlidNdPtHelper::GenerateCorrMatrix(fTriggerTrackEventMatrix->Projection(2,0),fRecTrackEventMatrix->Projection(2,0),"zv_eta_track_event_corr_matrix");
\r
2404 aFolderObj->Add(h2D);
\r
2408 h = AlidNdPtHelper::GenerateCorrMatrix(fRecTrackEventMatrix->Projection(1),fTriggerTrackEventMatrix->Projection(1),"pt_track_event_eff_matrix");
\r
2409 aFolderObj->Add(h);
\r
2413 // track rec. efficiency correction
\r
2415 hs = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix,fRecPrimTrackMatrix,"zv_pt_eta_track_corr_matrix");
\r
2416 aFolderObj->Add(hs);
\r
2418 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,2),fRecPrimTrackMatrix->Projection(1,2),"eta_pt_track_corr_matrix");
\r
2419 aFolderObj->Add(h2D);
\r
2421 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1,0),fRecPrimTrackMatrix->Projection(1,0),"pt_zv_track_corr_matrix");
\r
2422 aFolderObj->Add(h2D);
\r
2424 h2D = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2,0),fRecPrimTrackMatrix->Projection(2,0),"zv_eta_track_corr_matrix");
\r
2425 aFolderObj->Add(h2D);
\r
2428 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(0),fRecPrimTrackMatrix->Projection(0),"zv_track_corr_matrix");
\r
2429 aFolderObj->Add(h);
\r
2431 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(1),fRecPrimTrackMatrix->Projection(1),"pt_track_corr_matrix");
\r
2432 aFolderObj->Add(h);
\r
2436 h = AlidNdPtHelper::GenerateCorrMatrix(fRecPrimTrackMatrix->Projection(1), fGenPrimTrackMatrix->Projection(1),"pt_track_eff_matrix");
\r
2437 aFolderObj->Add(h);
\r
2439 h = AlidNdPtHelper::GenerateCorrMatrix(fGenPrimTrackMatrix->Projection(2),fRecPrimTrackMatrix->Projection(2),"eta_track_corr_matrix");
\r
2440 aFolderObj->Add(h);
\r
2443 // secondary track contamination correction
\r
2445 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
\r
2446 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix,fRecTrackMatrix,"zv_pt_eta_track_cont_matrix");
\r
2447 aFolderObj->Add(hs);
\r
2449 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_track_cont_matrix");
\r
2450 aFolderObj->Add(h2D);
\r
2452 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_track_cont_matrix");
\r
2453 aFolderObj->Add(h2D);
\r
2455 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_track_cont_matrix");
\r
2456 aFolderObj->Add(h2D);
\r
2458 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_track_cont_matrix");
\r
2459 aFolderObj->Add(h);
\r
2462 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_track_cont_matrix");
\r
2463 aFolderObj->Add(h);
\r
2465 h = AlidNdPtHelper::GenerateCorrMatrix(fRecSecTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_track_cont_matrix");
\r
2466 aFolderObj->Add(h);
\r
2469 // multiple track reconstruction correction
\r
2471 //hs = AlidNdPtHelper::GenerateContCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
\r
2472 hs = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix,fRecTrackMatrix,"zv_pt_eta_mult_track_cont_matrix");
\r
2473 aFolderObj->Add(hs);
\r
2475 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,2),fRecTrackMatrix->Projection(1,2),"eta_pt_mult_track_cont_matrix");
\r
2476 aFolderObj->Add(h2D);
\r
2478 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1,0),fRecTrackMatrix->Projection(1,0),"pt_zv_mult_track_cont_matrix");
\r
2479 aFolderObj->Add(h2D);
\r
2481 h2D = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2,0),fRecTrackMatrix->Projection(2,0),"zv_eta_mult_track_cont_matrix");
\r
2482 aFolderObj->Add(h2D);
\r
2484 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(0),fRecTrackMatrix->Projection(0),"zv_mult_track_cont_matrix");
\r
2485 aFolderObj->Add(h);
\r
2487 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(1),fRecTrackMatrix->Projection(1),"pt_mult_track_cont_matrix");
\r
2488 aFolderObj->Add(h);
\r
2490 h = AlidNdPtHelper::GenerateCorrMatrix(fRecMultTrackMatrix->Projection(2),fRecTrackMatrix->Projection(2),"eta_mult_track_cont_matrix");
\r
2491 aFolderObj->Add(h);
\r
2494 // Control histograms
\r
2497 if(fHistogramsOn) {
\r
2499 // Efficiency electrons, muons, pions, kaons, protons, all
\r
2500 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,1);
\r
2501 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,1);
\r
2502 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2503 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2504 h2c = (TH1D *)h2->Clone();
\r
2506 h2c->SetName("eff_pt_electrons");
\r
2507 aFolderObj->Add(h2c);
\r
2509 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(2,2);
\r
2510 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(2,2);
\r
2511 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2512 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2513 h2c = (TH1D *)h2->Clone();
\r
2515 h2c->SetName("eff_pt_muons");
\r
2516 aFolderObj->Add(h2c);
\r
2518 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(3,3);
\r
2519 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(3,3);
\r
2520 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2521 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2522 h2c = (TH1D *)h2->Clone();
\r
2524 h2c->SetName("eff_pt_pions");
\r
2525 aFolderObj->Add(h2c);
\r
2527 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(4,4);
\r
2528 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(4,4);
\r
2529 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2530 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2531 h2c = (TH1D *)h2->Clone();
\r
2533 h2c->SetName("eff_pt_kaons");
\r
2534 aFolderObj->Add(h2c);
\r
2536 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(5,5);
\r
2537 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(5,5);
\r
2538 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2539 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2540 h2c = (TH1D *)h2->Clone();
\r
2542 h2c->SetName("eff_pt_protons");
\r
2543 aFolderObj->Add(h2c);
\r
2545 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5);
\r
2546 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5);
\r
2547 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2548 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2549 h2c = (TH1D *)h2->Clone();
\r
2551 h2c->SetName("eff_pt_selected");
\r
2552 aFolderObj->Add(h2c);
\r
2554 fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6);
\r
2555 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6);
\r
2556 h1 = fMCPrimTrackHist1[1]->Projection(0);
\r
2557 h2 = fMCPrimTrackHist1[2]->Projection(0);
\r
2558 h2c = (TH1D *)h2->Clone();
\r
2560 h2c->SetName("eff_pt_all");
\r
2561 aFolderObj->Add(h2c);
\r
2563 fMCPrimTrackHist1[1]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[1]->GetAxis(1)->GetNbins());
\r
2564 fMCPrimTrackHist1[2]->GetAxis(1)->SetRange(1,fMCPrimTrackHist1[2]->GetAxis(1)->GetNbins());
\r
2567 // - rec, primaries, secondaries
\r
2568 // - primaries (pid)
\r
2569 // - secondaries (pid)
\r
2570 // - secondaries (mech)
\r
2571 // - secondaries (mother)
\r
2574 TH1D *mcPtAccall = fMCTrackHist1[1]->Projection(0);
\r
2575 mcPtAccall->SetName("mc_pt_acc_all");
\r
2576 aFolderObj->Add(mcPtAccall);
\r
2578 TH1D *mcPtAccprim = fMCPrimTrackHist1[1]->Projection(0);
\r
2579 mcPtAccprim->SetName("mc_pt_acc_prim");
\r
2580 aFolderObj->Add(mcPtAccprim);
\r
2582 TH1D *mcPtRecall = fMCTrackHist1[2]->Projection(0);
\r
2583 mcPtRecall->SetName("mc_pt_rec_all");
\r
2584 aFolderObj->Add(mcPtRecall);
\r
2586 TH1D *mcPtRecprim = fMCPrimTrackHist1[2]->Projection(0);
\r
2587 mcPtRecprim->SetName("mc_pt_rec_prim");
\r
2588 aFolderObj->Add(mcPtRecprim);
\r
2590 TH1D *mcPtRecsec = fMCSecTrackHist1[2]->Projection(0);
\r
2591 mcPtRecsec->SetName("mc_pt_rec_sec");
\r
2592 aFolderObj->Add(mcPtRecsec);
\r
2594 for(Int_t i = 0; i<6; i++)
\r
2596 snprintf(name,256,"mc_pt_rec_prim_pid_%d",i);
\r
2597 fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2598 h = fMCPrimTrackHist1[2]->Projection(0);
\r
2600 aFolderObj->Add(h);
\r
2602 snprintf(name,256,"mc_pt_rec_sec_pid_%d",i);
\r
2603 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2604 h = fMCSecTrackHist1[2]->Projection(0);
\r
2606 aFolderObj->Add(h);
\r
2608 // production mechanisms for given pid
\r
2609 fMCSecTrackHist1[2]->GetAxis(2)->SetRange(i+1,i+1);
\r
2611 for(Int_t j=0; j<20; j++) {
\r
2615 snprintf(name,256,"mc_pt_rec_sec_pid_%d_decay",i);
\r
2616 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2617 h = fMCSecTrackHist1[2]->Projection(0);
\r
2619 aFolderObj->Add(h);
\r
2621 snprintf(name,256,"mc_eta_rec_sec_pid_%d_decay",i);
\r
2622 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2623 h = fMCSecTrackHist1[2]->Projection(1);
\r
2625 aFolderObj->Add(h);
\r
2627 snprintf(name,256,"mc_mother_rec_sec_pid_%d_decay",i);
\r
2628 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2629 h = fMCSecTrackHist1[2]->Projection(4);
\r
2631 aFolderObj->Add(h);
\r
2633 } else if (j == 5) {
\r
2636 snprintf(name,256,"mc_pt_rec_sec_pid_%d_conv",i);
\r
2637 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2638 h = fMCSecTrackHist1[2]->Projection(0);
\r
2640 aFolderObj->Add(h);
\r
2642 snprintf(name,256,"mc_eta_rec_sec_pid_%d_conv",i);
\r
2643 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2644 h = fMCSecTrackHist1[2]->Projection(1);
\r
2646 aFolderObj->Add(h);
\r
2648 snprintf(name,256,"mc_mother_rec_sec_pid_%d_conv",i);
\r
2649 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2650 h = fMCSecTrackHist1[2]->Projection(4);
\r
2652 aFolderObj->Add(h);
\r
2654 } else if (j == 13) {
\r
2657 snprintf(name,256,"mc_pt_rec_sec_pid_%d_mat",i);
\r
2658 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2659 h = fMCSecTrackHist1[2]->Projection(0);
\r
2661 aFolderObj->Add(h);
\r
2663 snprintf(name,256,"mc_eta_rec_sec_pid_%d_mat",i);
\r
2664 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2665 h = fMCSecTrackHist1[2]->Projection(1);
\r
2667 aFolderObj->Add(h);
\r
2669 snprintf(name,256,"mc_eta_mother_rec_sec_pid_%d_mat",i);
\r
2670 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2671 h = fMCSecTrackHist1[2]->Projection(4,1);
\r
2673 aFolderObj->Add(h);
\r
2675 snprintf(name,256,"mc_mother_rec_sec_pid_%d_mat",i);
\r
2676 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2677 h = fMCSecTrackHist1[2]->Projection(4);
\r
2679 aFolderObj->Add(h);
\r
2681 snprintf(name,256,"mc_pt_mother_rec_sec_pid_%d_mat",i);
\r
2682 fMCSecTrackHist1[2]->GetAxis(3)->SetRange(j+1,j+1);
\r
2683 h = fMCSecTrackHist1[2]->Projection(4,0);
\r
2685 aFolderObj->Add(h);
\r
2693 } // end fHistogramOn
\r
2696 // resolution histograms
\r
2697 // only for reconstructed tracks
\r
2701 TCanvas * c = new TCanvas("resol","resol");
\r
2705 fRecMCTrackHist1->GetAxis(1)->SetRangeUser(-0.8,0.79);
\r
2707 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
\r
2708 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2709 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2710 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
\r
2712 h->SetName("pt_resolution_vs_mcpt");
\r
2713 aFolderObj->Add(h);
\r
2715 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,0);
\r
2716 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2717 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2718 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
\r
2720 h->SetName("dpt_mean_vs_mcpt");
\r
2721 aFolderObj->Add(h);
\r
2724 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
\r
2725 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2726 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2727 h->SetYTitle("(#eta-#eta_{mc}) resolution");
\r
2729 h->SetName("eta_resolution_vs_mcpt");
\r
2730 aFolderObj->Add(h);
\r
2732 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,0);
\r
2733 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2734 h->SetXTitle("p_{tmc} (GeV/c)");
\r
2735 h->SetYTitle("(#eta-mc#eta) mean");
\r
2737 h->SetName("deta_mean_vs_mcpt");
\r
2738 aFolderObj->Add(h);
\r
2741 fRecMCTrackHist1->GetAxis(1)->SetRange(1,fRecMCTrackHist1->GetAxis(1)->GetNbins());
\r
2743 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
\r
2744 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2745 h->SetXTitle("#eta_{mc}");
\r
2746 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} resolution");
\r
2748 h->SetName("pt_resolution_vs_mceta");
\r
2749 aFolderObj->Add(h);
\r
2751 h2F = (TH2F*)fRecMCTrackHist1->Projection(2,1);
\r
2752 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2753 h->SetXTitle("#eta_{mc}");
\r
2754 h->SetYTitle("(p_{t}-p_{tmc})/p_{tmc} mean");
\r
2756 h->SetName("dpt_mean_vs_mceta");
\r
2757 aFolderObj->Add(h);
\r
2760 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
\r
2761 h = AlidNdPtHelper::MakeResol(h2F,1,0,kTRUE,10);
\r
2762 h->SetXTitle("#eta_{mc}");
\r
2763 h->SetYTitle("(#eta-#eta_{mc}) resolution");
\r
2765 h->SetName("eta_resolution_vs_mceta");
\r
2766 aFolderObj->Add(h);
\r
2768 h2F = (TH2F*)fRecMCTrackHist1->Projection(3,1);
\r
2769 h = AlidNdPtHelper::MakeResol(h2F,1,1,kTRUE,10);
\r
2770 h->SetXTitle("#eta_{mc}");
\r
2771 h->SetYTitle("(#eta-mc#eta) mean");
\r
2773 h->SetName("deta_mean_vs_mceta");
\r
2774 aFolderObj->Add(h);
\r
2776 fRecMCTrackHist1->GetAxis(0)->SetRange(1,fRecMCTrackHist1->GetAxis(0)->GetNbins());
\r
2778 } // end use MC info
\r
2780 // export objects to analysis folder
\r
2781 fAnalysisFolder = ExportToFolder(aFolderObj);
\r
2783 // delete only TObjArray
\r
2784 if(aFolderObj) delete aFolderObj;
\r
2787 //_____________________________________________________________________________
\r
2788 TFolder* AlidNdPtAnalysis::ExportToFolder(TObjArray * const array)
\r
2790 // recreate folder avery time and export objects to new one
\r
2792 AlidNdPtAnalysis * comp=this;
\r
2793 TFolder *folder = comp->GetAnalysisFolder();
\r
2795 TString name, title;
\r
2796 TFolder *newFolder = 0;
\r
2798 Int_t size = array->GetSize();
\r
2801 // get name and title from old folder
\r
2802 name = folder->GetName();
\r
2803 title = folder->GetTitle();
\r
2809 newFolder = CreateFolder(name.Data(),title.Data());
\r
2810 newFolder->SetOwner();
\r
2812 // add objects to folder
\r
2814 newFolder->Add(array->At(i));
\r
2822 //_____________________________________________________________________________
\r
2823 TFolder* AlidNdPtAnalysis::CreateFolder(TString name,TString title) {
\r
2824 // create folder for analysed histograms
\r
2826 TFolder *folder = 0;
\r
2827 folder = new TFolder(name.Data(),title.Data());
\r