]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtAnalysisPbPbAOD.cxx
-updated config (marcel)
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / ChargedHadrons / dNdPt / AlidNdPtAnalysisPbPbAOD.cxx
CommitLineData
d25bcbe6 1/**************************************************************************
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15//------------------------------------------------------------------------------
16// AlidNdPtAnalysisPbPbAOD class.
17//
18// Author: P. Luettig, 15.05.2013
72bb4ceb 19// last modified: 08.10.2013
d25bcbe6 20//------------------------------------------------------------------------------
21
22
23#include "AlidNdPtAnalysisPbPbAOD.h"
24
25
26using namespace std;
27
28ClassImp(AlidNdPtAnalysisPbPbAOD)
29
30// dummy constructor
31AlidNdPtAnalysisPbPbAOD::AlidNdPtAnalysisPbPbAOD() : AliAnalysisTaskSE(),
32fOutputList(0),
33// Histograms
34hPt(0),
35hMCPt(0),
36hnZvPtEtaCent(0),
37hnMCRecPrimZvPtEtaCent(0),
38hnMCGenZvPtEtaCent(0),
5747f2c6 39hnMCRecSecZvPtEtaCent(0),
d25bcbe6 40hEventStatistics(0),
41hEventStatisticsCentrality(0),
9db7eb94 42hMCEventStatisticsCentrality(0),
d25bcbe6 43hAllEventStatisticsCentrality(0),
fad9b70b 44hEventStatisticsCentralityTrigger(0),
d25bcbe6 45hnZvMultCent(0),
46hTriggerStatistics(0),
47hMCTrackPdgCode(0),
48hMCTrackStatusCode(0),
49hCharge(0),
50hMCCharge(0),
51hMCPdgPt(0),
52hMCHijingPrim(0),
5747f2c6 53hDCAPtAll(0),
54hDCAPtAccepted(0),
55hMCDCAPtSecondary(0),
56hMCDCAPtPrimary(0),
d25bcbe6 57//global
58bIsMonteCarlo(0),
59// event cut variables
60dCutMaxZVertex(10.),
61// track kinematic cut variables
62dCutPtMin(0.15),
63dCutPtMax(1000.),
64dCutEtaMin(-0.8),
65dCutEtaMax(0.8),
66// track quality cut variables
67bCutRequireTPCRefit(kTRUE),
68dCutMinNumberOfCrossedRows(120.),
69dCutMinRatioCrossedRowsOverFindableClustersTPC(0.8),
70dCutMaxChi2PerClusterTPC(4.),
71dCutMaxFractionSharedTPCClusters(0.4),
72dCutMaxDCAToVertexZ(3.0),
73dCutMaxDCAToVertexXY(3.0),
74bCutRequireITSRefit(kTRUE),
75dCutMaxChi2PerClusterITS(36.),
76dCutDCAToVertex2D(kFALSE),
77dCutRequireSigmaToVertex(kFALSE),
78dCutMaxDCAToVertexXYPtDepPar0(0.0182),
79dCutMaxDCAToVertexXYPtDepPar1(0.0350),
80dCutMaxDCAToVertexXYPtDepPar2(1.01),
81bCutAcceptKinkDaughters(kFALSE),
82dCutMaxChi2TPCConstrainedGlobal(36.),
83// binning for THnSparse
84fMultNbins(0),
85fPtNbins(0),
86fPtCorrNbins(0),
72bb4ceb 87fPtCheckNbins(0),
d25bcbe6 88fEtaNbins(0),
72bb4ceb 89fEtaCheckNbins(0),
d25bcbe6 90fZvNbins(0),
91fCentralityNbins(0),
72bb4ceb 92fPhiNbins(0),
d25bcbe6 93fBinsMult(0),
94fBinsPt(0),
95fBinsPtCorr(0),
72bb4ceb 96fBinsPtCheck(0),
d25bcbe6 97fBinsEta(0),
72bb4ceb 98fBinsEtaCheck(0),
d25bcbe6 99fBinsZv(0),
72bb4ceb 100fBinsCentrality(0),
101fBinsPhi(0)
d25bcbe6 102{
72bb4ceb 103 for(Int_t i = 0; i < cqMax; i++)
104 {
105 hCrossCheckAll[i] = 0;
106 hCrossCheckAcc[i] = 0;
107 }
d25bcbe6 108
109 fMultNbins = 0;
110 fPtNbins = 0;
111 fPtCorrNbins = 0;
72bb4ceb 112 fPtCheckNbins = 0;
d25bcbe6 113 fEtaNbins = 0;
114 fZvNbins = 0;
115 fCentralityNbins = 0;
116 fBinsMult = 0;
117 fBinsPt = 0;
118 fBinsPtCorr = 0;
119 fBinsEta = 0;
72bb4ceb 120 fBinsEtaCheck = 0;
d25bcbe6 121 fBinsZv = 0;
122 fBinsCentrality = 0;
72bb4ceb 123 fBinsPhi = 0;
d25bcbe6 124
125}
126
127AlidNdPtAnalysisPbPbAOD::AlidNdPtAnalysisPbPbAOD(const char *name) : AliAnalysisTaskSE(name),
128fOutputList(0),
129// Histograms
130hPt(0),
131hMCPt(0),
132hnZvPtEtaCent(0),
133hnMCRecPrimZvPtEtaCent(0),
134hnMCGenZvPtEtaCent(0),
5747f2c6 135hnMCRecSecZvPtEtaCent(0),
d25bcbe6 136hEventStatistics(0),
137hEventStatisticsCentrality(0),
9db7eb94 138hMCEventStatisticsCentrality(0),
d25bcbe6 139hAllEventStatisticsCentrality(0),
fad9b70b 140hEventStatisticsCentralityTrigger(0),
d25bcbe6 141hnZvMultCent(0),
142hTriggerStatistics(0),
143hMCTrackPdgCode(0),
144hMCTrackStatusCode(0),
145hCharge(0),
146hMCCharge(0),
147hMCPdgPt(0),
148hMCHijingPrim(0),
5747f2c6 149hDCAPtAll(0),
150hDCAPtAccepted(0),
151hMCDCAPtSecondary(0),
152hMCDCAPtPrimary(0),
d25bcbe6 153//global
154bIsMonteCarlo(0),
155// event cut variables
156dCutMaxZVertex(10.),
157// track kinematic cut variables
158dCutPtMin(0.15),
159dCutPtMax(200.),
160dCutEtaMin(-0.8),
161dCutEtaMax(0.8),
162// track quality cut variables
163bCutRequireTPCRefit(kTRUE),
164dCutMinNumberOfCrossedRows(120.),
165dCutMinRatioCrossedRowsOverFindableClustersTPC(0.8),
166dCutMaxChi2PerClusterTPC(4.),
167dCutMaxFractionSharedTPCClusters(0.4),
168dCutMaxDCAToVertexZ(3.0),
169dCutMaxDCAToVertexXY(3.0),
170bCutRequireITSRefit(kTRUE),
171dCutMaxChi2PerClusterITS(36.),
172dCutDCAToVertex2D(kFALSE),
173dCutRequireSigmaToVertex(kFALSE),
174dCutMaxDCAToVertexXYPtDepPar0(0.0182),
175dCutMaxDCAToVertexXYPtDepPar1(0.0350),
176dCutMaxDCAToVertexXYPtDepPar2(1.01),
177bCutAcceptKinkDaughters(kFALSE),
178dCutMaxChi2TPCConstrainedGlobal(36.),
179// binning for THnSparse
180fMultNbins(0),
181fPtNbins(0),
182fPtCorrNbins(0),
72bb4ceb 183fPtCheckNbins(0),
d25bcbe6 184fEtaNbins(0),
72bb4ceb 185fEtaCheckNbins(0),
d25bcbe6 186fZvNbins(0),
187fCentralityNbins(0),
72bb4ceb 188fPhiNbins(0),
d25bcbe6 189fBinsMult(0),
190fBinsPt(0),
191fBinsPtCorr(0),
72bb4ceb 192fBinsPtCheck(0),
d25bcbe6 193fBinsEta(0),
72bb4ceb 194fBinsEtaCheck(0),
d25bcbe6 195fBinsZv(0),
72bb4ceb 196fBinsCentrality(0),
197fBinsPhi(0)
d25bcbe6 198{
72bb4ceb 199
200 for(Int_t i = 0; i < cqMax; i++)
201 {
202 hCrossCheckAll[i] = 0;
203 hCrossCheckAcc[i] = 0;
204 }
205
d25bcbe6 206 fMultNbins = 0;
207 fPtNbins = 0;
208 fPtCorrNbins = 0;
72bb4ceb 209 fPtCheckNbins = 0;
d25bcbe6 210 fEtaNbins = 0;
72bb4ceb 211 fEtaCheckNbins = 0;
d25bcbe6 212 fZvNbins = 0;
213 fCentralityNbins = 0;
214 fBinsMult = 0;
215 fBinsPt = 0;
216 fBinsPtCorr = 0;
72bb4ceb 217 fBinsPtCheck = 0;
d25bcbe6 218 fBinsEta = 0;
72bb4ceb 219 fBinsEtaCheck = 0;
d25bcbe6 220 fBinsZv = 0;
221 fBinsCentrality = 0;
72bb4ceb 222 fBinsPhi = 0;
d25bcbe6 223
224 DefineOutput(1, TList::Class());
225}
226
227// destructor
228AlidNdPtAnalysisPbPbAOD::~AlidNdPtAnalysisPbPbAOD()
229{
9db7eb94 230
d25bcbe6 231 if(hnZvPtEtaCent) delete hnZvPtEtaCent; hnZvPtEtaCent = 0;
232 if(hPt) delete hPt; hPt = 0;
5747f2c6 233 if(hnMCRecPrimZvPtEtaCent) delete hnMCRecPrimZvPtEtaCent; hnMCRecPrimZvPtEtaCent = 0;
234 if(hnMCGenZvPtEtaCent) delete hnMCGenZvPtEtaCent; hnMCGenZvPtEtaCent = 0;
235 if(hnMCRecSecZvPtEtaCent) delete hnMCRecSecZvPtEtaCent; hnMCRecSecZvPtEtaCent = 0;
236 if(hMCPt) delete hMCPt; hMCPt = 0;
237 if(hEventStatistics) delete hEventStatistics; hEventStatistics = 0;
238 if(hEventStatisticsCentrality) delete hEventStatisticsCentrality; hEventStatisticsCentrality = 0;
9db7eb94 239 if(hMCEventStatisticsCentrality) delete hMCEventStatisticsCentrality; hMCEventStatisticsCentrality = 0;
5747f2c6 240 if(hAllEventStatisticsCentrality) delete hAllEventStatisticsCentrality; hAllEventStatisticsCentrality = 0;
9db7eb94 241 if(hEventStatisticsCentralityTrigger) delete hEventStatisticsCentralityTrigger; hEventStatisticsCentralityTrigger = 0;
5747f2c6 242 if(hnZvMultCent) delete hnZvMultCent; hnZvMultCent = 0;
243 if(hTriggerStatistics) delete hTriggerStatistics; hTriggerStatistics = 0;
244 if(hMCTrackPdgCode) delete hMCTrackPdgCode; hMCTrackPdgCode = 0;
245 if(hMCTrackStatusCode) delete hMCTrackStatusCode; hMCTrackStatusCode = 0;
246 if(hCharge) delete hCharge; hCharge = 0;
247 if(hMCCharge) delete hMCCharge; hMCCharge = 0;
248 if(hMCPdgPt) delete hMCPdgPt; hMCPdgPt = 0;
249 if(hMCHijingPrim) delete hMCHijingPrim; hMCHijingPrim = 0;
5747f2c6 250 if(hDCAPtAll) delete hDCAPtAll; hDCAPtAll = 0;
251 if(hDCAPtAccepted) delete hDCAPtAccepted; hDCAPtAccepted = 0;
252 if(hMCDCAPtSecondary) delete hMCDCAPtSecondary; hMCDCAPtSecondary = 0;
253 if(hMCDCAPtPrimary) delete hMCDCAPtPrimary; hMCDCAPtPrimary = 0;
9db7eb94 254 if(hMCDCAPtSecondary) delete hMCDCAPtSecondary; hMCDCAPtSecondary = 0;
255 if(hMCDCAPtPrimary) delete hMCDCAPtPrimary; hMCDCAPtPrimary = 0;
72bb4ceb 256
257 for(Int_t i = 0; i < cqMax; i++)
258 {
259 if(hCrossCheckAll[i]) delete hCrossCheckAll[i]; hCrossCheckAll[i] = 0;
260 if(hCrossCheckAcc[i]) delete hCrossCheckAcc[i]; hCrossCheckAcc[i] = 0;
261 }
262
d25bcbe6 263}
264
265void AlidNdPtAnalysisPbPbAOD::UserCreateOutputObjects()
266{
267 // create all output histograms here
268 OpenFile(1, "RECREATE");
269
270 fOutputList = new TList();
271 fOutputList->SetOwner();
272
273 //define default binning
274 Double_t binsMultDefault[48] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,19.5, 20.5, 30.5, 40.5 , 50.5 , 60.5 , 70.5 , 80.5 , 90.5 , 100.5,200.5, 300.5, 400.5, 500.5, 600.5, 700.5, 800.5, 900.5, 1000.5, 2000.5, 3000.5, 4000.5, 5000.5, 6000.5, 7000.5, 8000.5, 9000.5, 10000.5 };
275 Double_t binsPtDefault[82] = {0.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, 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 180.0, 200.0};
72bb4ceb 276 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, 200.0};
d25bcbe6 277 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};
278 Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
279 Double_t binsCentralityDefault[12] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.};
280
72bb4ceb 281 Double_t binsPhiDefault[37] = { 0, 0.174533, 0.349066, 0.523599, 0.698132, 0.872665, 1.0472, 1.22173, 1.39626, 1.5708, 1.74533, 1.91986, 2.0944, 2.26893, 2.44346, 2.61799, 2.79253, 2.96706, 3.14159, 3.31613, 3.49066, 3.66519, 3.83972, 4.01426, 4.18879, 4.36332, 4.53786, 4.71239, 4.88692, 5.06145, 5.23599, 5.41052, 5.58505, 5.75959, 5.93412, 6.10865, 2.*TMath::Pi()};
282
283 Double_t binsPtCheckDefault[20] = {0.,0.15,0.5,1.0,2.0,3.0,4.0, 5.0, 10.0, 13.0, 15.0, 20.0, 25.0, 30.0, 40.0, 50.0, 70.0, 100.0, 150.0, 200.0};
284 Double_t binsEtaCheckDefault[7] = {-1.0,-0.8,-0.4,0.,0.4,0.8,1.0};
285
d25bcbe6 286 // if no binning is set, use the default
287 if (!fBinsMult) { SetBinsMult(48,binsMultDefault); }
288 if (!fBinsPt) { SetBinsPt(82,binsPtDefault); }
289 if (!fBinsPtCorr) { SetBinsPtCorr(37,binsPtCorrDefault); }
72bb4ceb 290 if (!fBinsPtCheck) { SetBinsPtCheck(20,binsPtCheckDefault); }
d25bcbe6 291 if (!fBinsEta) { SetBinsEta(31,binsEtaDefault); }
72bb4ceb 292 if (!fBinsEtaCheck) { SetBinsEtaCheck(7,binsEtaCheckDefault); }
d25bcbe6 293 if (!fBinsZv) { SetBinsZv(13,binsZvDefault); }
294 if (!fBinsCentrality) { SetBinsCentrality(12,binsCentralityDefault); }
72bb4ceb 295 if (!fBinsPhi) { SetBinsPhi(37,binsPhiDefault); }
d25bcbe6 296
297 Int_t binsZvPtEtaCent[4]={fZvNbins-1,fPtNbins-1,fEtaNbins-1,fCentralityNbins-1};
298 Int_t binsZvMultCent[3]={fZvNbins-1,fMultNbins-1,fCentralityNbins-1};
299
300 // define Histograms
301 hnZvPtEtaCent = new THnSparseF("hnZvPtEtaCent","Zv:Pt:Eta:Centrality",4,binsZvPtEtaCent);
302 hnZvPtEtaCent->SetBinEdges(0,fBinsZv);
303 hnZvPtEtaCent->SetBinEdges(1,fBinsPt);
304 hnZvPtEtaCent->SetBinEdges(2,fBinsEta);
305 hnZvPtEtaCent->SetBinEdges(3,fBinsCentrality);
306 hnZvPtEtaCent->GetAxis(0)->SetTitle("Zv (cm)");
307 hnZvPtEtaCent->GetAxis(1)->SetTitle("Pt (GeV/c)");
308 hnZvPtEtaCent->GetAxis(2)->SetTitle("Eta");
309 hnZvPtEtaCent->GetAxis(3)->SetTitle("Centrality");
310 hnZvPtEtaCent->Sumw2();
311
312 hnMCRecPrimZvPtEtaCent = new THnSparseF("hnMCRecPrimZvPtEtaCent","mcZv:mcPt:mcEta:Centrality",4,binsZvPtEtaCent);
313 hnMCRecPrimZvPtEtaCent->SetBinEdges(0,fBinsZv);
314 hnMCRecPrimZvPtEtaCent->SetBinEdges(1,fBinsPt);
315 hnMCRecPrimZvPtEtaCent->SetBinEdges(2,fBinsEta);
316 hnMCRecPrimZvPtEtaCent->SetBinEdges(3,fBinsCentrality);
317 hnMCRecPrimZvPtEtaCent->GetAxis(0)->SetTitle("MC Zv (cm)");
318 hnMCRecPrimZvPtEtaCent->GetAxis(1)->SetTitle("MC Pt (GeV/c)");
319 hnMCRecPrimZvPtEtaCent->GetAxis(2)->SetTitle("MC Eta");
320 hnMCRecPrimZvPtEtaCent->GetAxis(3)->SetTitle("Centrality");
321 hnMCRecPrimZvPtEtaCent->Sumw2();
322
323 hnMCGenZvPtEtaCent = new THnSparseF("hnMCGenZvPtEtaCent","mcZv:mcPt:mcEta:Centrality",4,binsZvPtEtaCent);
324 hnMCGenZvPtEtaCent->SetBinEdges(0,fBinsZv);
325 hnMCGenZvPtEtaCent->SetBinEdges(1,fBinsPt);
326 hnMCGenZvPtEtaCent->SetBinEdges(2,fBinsEta);
327 hnMCGenZvPtEtaCent->SetBinEdges(3,fBinsCentrality);
328 hnMCGenZvPtEtaCent->GetAxis(0)->SetTitle("MC Zv (cm)");
329 hnMCGenZvPtEtaCent->GetAxis(1)->SetTitle("MC Pt (GeV/c)");
330 hnMCGenZvPtEtaCent->GetAxis(2)->SetTitle("MC Eta");
331 hnMCGenZvPtEtaCent->GetAxis(3)->SetTitle("Centrality");
332 hnMCGenZvPtEtaCent->Sumw2();
333
5747f2c6 334 hnMCRecSecZvPtEtaCent = new THnSparseF("hnMCRecSecZvPtEtaCent","mcZv:mcPt:mcEta:Centrality",4,binsZvPtEtaCent);
335 hnMCRecSecZvPtEtaCent->SetBinEdges(0,fBinsZv);
336 hnMCRecSecZvPtEtaCent->SetBinEdges(1,fBinsPt);
337 hnMCRecSecZvPtEtaCent->SetBinEdges(2,fBinsEta);
338 hnMCRecSecZvPtEtaCent->SetBinEdges(3,fBinsCentrality);
339 hnMCRecSecZvPtEtaCent->GetAxis(0)->SetTitle("MC Sec Zv (cm)");
340 hnMCRecSecZvPtEtaCent->GetAxis(1)->SetTitle("MC Sec Pt (GeV/c)");
341 hnMCRecSecZvPtEtaCent->GetAxis(2)->SetTitle("MC Sec Eta");
342 hnMCRecSecZvPtEtaCent->GetAxis(3)->SetTitle("Centrality");
343 hnMCRecSecZvPtEtaCent->Sumw2();
d25bcbe6 344
345 hPt = new TH1F("hPt","hPt",2000,0,200);
346 hPt->GetXaxis()->SetTitle("p_{T} (GeV/c)");
347 hPt->GetYaxis()->SetTitle("dN/dp_{T}");
348 hPt->Sumw2();
349
350 hMCPt = new TH1F("hMCPt","hMCPt",2000,0,200);
351 hMCPt->GetXaxis()->SetTitle("MC p_{T} (GeV/c)");
352 hMCPt->GetYaxis()->SetTitle("dN/dp_{T}");
353 hMCPt->Sumw2();
354
355 hEventStatistics = new TH1F("hEventStatistics","hEventStatistics",10,0,10);
356 hEventStatistics->GetYaxis()->SetTitle("number of events");
357 hEventStatistics->SetBit(TH1::kCanRebin);
358
359 hEventStatisticsCentrality = new TH1F("hEventStatisticsCentrality","hEventStatisticsCentrality",fCentralityNbins-1, fBinsCentrality);
360 hEventStatisticsCentrality->GetYaxis()->SetTitle("number of events");
361
9db7eb94 362 hMCEventStatisticsCentrality = new TH1F("hMCEventStatisticsCentrality","hMCEventStatisticsCentrality",fCentralityNbins-1, fBinsCentrality);
363 hMCEventStatisticsCentrality->GetYaxis()->SetTitle("number of MC events");
364
d25bcbe6 365 hAllEventStatisticsCentrality = new TH1F("hAllEventStatisticsCentrality","hAllEventStatisticsCentrality",fCentralityNbins-1, fBinsCentrality);
366 hAllEventStatisticsCentrality->GetYaxis()->SetTitle("number of events");
367
fad9b70b 368 hEventStatisticsCentralityTrigger = new TH2F("hEventStatisticsCentralityTrigger","hEventStatisticsCentralityTrigger;centrality;trigger",100,0,100,3,0,3);
369 hEventStatisticsCentralityTrigger->Sumw2();
370
d25bcbe6 371 hnZvMultCent = new THnSparseF("hnZvMultCent","Zv:mult:Centrality",3,binsZvMultCent);
372 hnZvMultCent->SetBinEdges(0,fBinsZv);
373 hnZvMultCent->SetBinEdges(1,fBinsMult);
374 hnZvMultCent->SetBinEdges(2,fBinsCentrality);
375 hnZvMultCent->GetAxis(0)->SetTitle("Zv (cm)");
376 hnZvMultCent->GetAxis(1)->SetTitle("N_{acc}");
377 hnZvMultCent->GetAxis(2)->SetTitle("Centrality");
378 hnZvMultCent->Sumw2();
379
380 hTriggerStatistics = new TH1F("hTriggerStatistics","hTriggerStatistics",10,0,10);
381 hTriggerStatistics->GetYaxis()->SetTitle("number of events");
382
383 hMCTrackPdgCode = new TH1F("hMCTrackPdgCode","hMCTrackPdgCode",100,0,10);
384 hMCTrackPdgCode->GetYaxis()->SetTitle("number of tracks");
385 hMCTrackPdgCode->SetBit(TH1::kCanRebin);
386
387 hMCTrackStatusCode = new TH1F("hMCTrackStatusCode","hMCTrackStatusCode",100,0,10);
388 hMCTrackStatusCode->GetYaxis()->SetTitle("number of tracks");
389 hMCTrackStatusCode->SetBit(TH1::kCanRebin);
390
391 hCharge = new TH1F("hCharge","hCharge",30, -5, 5);
392 hCharge->GetXaxis()->SetTitle("Charge");
393 hCharge->GetYaxis()->SetTitle("number of tracks");
394
395 hMCCharge = new TH1F("hMCCharge","hMCCharge",30, -5, 5);
396 hMCCharge->GetXaxis()->SetTitle("MC Charge");
397 hMCCharge->GetYaxis()->SetTitle("number of tracks");
398
399 hMCPdgPt = new TH2F("hMCPdgPt","hMCPdgPt",fPtNbins-1, fBinsPt, 100,0,100);
400 hMCPdgPt->GetYaxis()->SetTitle("particle");
401 hMCPdgPt->GetXaxis()->SetTitle("Pt (GeV/c)");
402
403 hMCHijingPrim = new TH1F("hMCHijingPrim","hMCHijingPrim",2,0,2);
404 hMCPdgPt->GetYaxis()->SetTitle("number of particles");
405
95f26ffa 406
95f26ffa 407
72bb4ceb 408 Int_t binsDCAxyDCAzPtEtaPhi[6] = { 200,200, fPtCheckNbins-1, fEtaCheckNbins-1, 18, fCentralityNbins-1};
9db7eb94 409 Double_t minDCAxyDCAzPtEtaPhi[6] = { -5, -5, 0, -1.5, 0., 0, };
410 Double_t maxDCAxyDCAzPtEtaPhi[6] = { 5., 5., 100, 1.5, 2.*TMath::Pi(), 100};
d25bcbe6 411
9db7eb94 412 hDCAPtAll = new THnSparseF("hDCAPtAll","hDCAPtAll",6, binsDCAxyDCAzPtEtaPhi, minDCAxyDCAzPtEtaPhi, maxDCAxyDCAzPtEtaPhi);
413 hDCAPtAccepted = new THnSparseF("hDCAPtAccepted","hDCAPtAccepted",6, binsDCAxyDCAzPtEtaPhi, minDCAxyDCAzPtEtaPhi, maxDCAxyDCAzPtEtaPhi);
414 hMCDCAPtSecondary = new THnSparseF("hMCDCAPtSecondary","hMCDCAPtSecondary",6, binsDCAxyDCAzPtEtaPhi, minDCAxyDCAzPtEtaPhi, maxDCAxyDCAzPtEtaPhi);
415 hMCDCAPtPrimary = new THnSparseF("hMCDCAPtPrimary","hMCDCAPtPrimary",6, binsDCAxyDCAzPtEtaPhi, minDCAxyDCAzPtEtaPhi, maxDCAxyDCAzPtEtaPhi);
d0483ba3 416
72bb4ceb 417 hDCAPtAll->SetBinEdges(2, fBinsPtCheck);
418 hDCAPtAccepted->SetBinEdges(2, fBinsPtCheck);
419 hMCDCAPtSecondary->SetBinEdges(2, fBinsPtCheck);
420 hMCDCAPtPrimary->SetBinEdges(2, fBinsPtCheck);
d25bcbe6 421
72bb4ceb 422 hDCAPtAll->SetBinEdges(3, fBinsEtaCheck);
423 hDCAPtAccepted->SetBinEdges(3, fBinsEtaCheck);
424 hMCDCAPtSecondary->SetBinEdges(3, fBinsEtaCheck);
425 hMCDCAPtPrimary->SetBinEdges(3, fBinsEtaCheck);
9db7eb94 426
427 hDCAPtAll->SetBinEdges(5, fBinsCentrality);
428 hDCAPtAccepted->SetBinEdges(5, fBinsCentrality);
429 hMCDCAPtSecondary->SetBinEdges(5, fBinsCentrality);
430 hMCDCAPtPrimary->SetBinEdges(5, fBinsCentrality);
431
fad9b70b 432 hDCAPtAll->Sumw2();
433 hDCAPtAccepted->Sumw2();
434 hMCDCAPtSecondary->Sumw2();
435 hMCDCAPtPrimary->Sumw2();
436
437 hDCAPtAll->GetAxis(0)->SetTitle("DCA_{xy} (cm)");
438 hDCAPtAll->GetAxis(1)->SetTitle("DCA_{z} (cm)");
439 hDCAPtAll->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
9db7eb94 440 hDCAPtAll->GetAxis(3)->SetTitle("#eta");
441 hDCAPtAll->GetAxis(4)->SetTitle("#phi");
442 hDCAPtAll->GetAxis(5)->SetTitle("Centrality");
fad9b70b 443
444 hDCAPtAccepted->GetAxis(0)->SetTitle("DCA_{xy} (cm)");
445 hDCAPtAccepted->GetAxis(1)->SetTitle("DCA_{z} (cm)");
446 hDCAPtAccepted->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
9db7eb94 447 hDCAPtAccepted->GetAxis(3)->SetTitle("#eta");
448 hDCAPtAccepted->GetAxis(4)->SetTitle("#phi");
449 hDCAPtAccepted->GetAxis(5)->SetTitle("Centrality");
fad9b70b 450
451 hMCDCAPtSecondary->GetAxis(0)->SetTitle("DCA_{xy} (cm)");
452 hMCDCAPtSecondary->GetAxis(1)->SetTitle("DCA_{z} (cm)");
453 hMCDCAPtSecondary->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
9db7eb94 454 hMCDCAPtSecondary->GetAxis(3)->SetTitle("#eta");
455 hMCDCAPtSecondary->GetAxis(4)->SetTitle("#phi");
456 hMCDCAPtSecondary->GetAxis(5)->SetTitle("Centrality");
fad9b70b 457
458 hMCDCAPtPrimary->GetAxis(0)->SetTitle("DCA_{xy} (cm)");
459 hMCDCAPtPrimary->GetAxis(1)->SetTitle("DCA_{z} (cm)");
460 hMCDCAPtPrimary->GetAxis(2)->SetTitle("p_{T} (GeV/c)");
9db7eb94 461 hMCDCAPtPrimary->GetAxis(3)->SetTitle("#eta");
462 hMCDCAPtPrimary->GetAxis(4)->SetTitle("#phi");
463 hMCDCAPtPrimary->GetAxis(5)->SetTitle("Centrality");
464
72bb4ceb 465
466 char cFullTempTitle[255];
467 char cTempTitleAxis0All[255];
468 char cTempTitleAxis0Acc[255];
469 // char cTempTitleAxis1[255];
470 char cFullTempName[255];
471 char cTempNameAxis0[255];
472 // char cTempNameAxis1[255];
473 const Int_t iNbinRowsClusters = 21;
474 // Double_t dBinsRowsClusters[iNbinRowsClusters] = {0, 7.95, 15.9, 23.85, 31.8, 39.75, 47.7, 55.65, 63.6, 71.55, 79.5, 87.45, 95.4, 103.35, 111.3, 119.25, 127.2, 135.15, 143.1, 151.05, 159.};
475
476 const Int_t iNbinChi = 51;
477 // Double_t dBinsChi[iNbinChi] = {0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6, 2.8, 3, 3.2, 3.4, 3.6, 3.8, 4, 4.2, 4.4, 4.6, 4.8, 5, 5.2, 5.4, 5.6, 5.8, 6, 6.2, 6.4, 6.6, 6.8, 7, 7.2, 7.4, 7.6, 7.8, 8, 8.2, 8.4, 8.6, 8.8, 9, 9.2, 9.4, 9.6, 9.8,10.};
478
479 Int_t iNbin = 0;
480 // Double_t *dBins = 0x0;
481 Double_t dBinMin = 0;
482 Double_t dBinMax = 0;
483
484 for(Int_t iCheckQuant = 0; iCheckQuant < cqMax; iCheckQuant++)
485 {
486 // iCheckQuant: 0 = CrossedRows, 1 = Nclusters, 2 = Chi^2/clusterTPC
487 if(iCheckQuant == cqCrossedRows)
488 {
489 sprintf(cTempTitleAxis0All, "NcrossedRows before Cut");
490 sprintf(cTempTitleAxis0Acc, "NcrossedRows after Cut");
491 sprintf(cTempNameAxis0, "CrossedRows");
492 iNbin = iNbinRowsClusters;
493 dBinMin = 0;
494 dBinMax = 159.;
495 }
496 else if(iCheckQuant == cqNcluster)
497 {
498 sprintf(cTempTitleAxis0All, "Nclusters before Cut");
499 sprintf(cTempTitleAxis0Acc, "Nclusters after Cut");
500 sprintf(cTempNameAxis0, "Clusters");
501 iNbin = iNbinRowsClusters;
502 dBinMin = 0;
503 dBinMax = 159.;
504 }
505 else if(iCheckQuant == cqChi)
506 {
507 sprintf(cTempTitleAxis0All, "#Chi^{2}/cluster before Cut");
508 sprintf(cTempTitleAxis0Acc, "#Chi^{2}/cluster after Cut");
509 sprintf(cTempNameAxis0, "Chi");
510 iNbin = iNbinChi;
511 dBinMin = 0;
512 dBinMax = 10.;
513 }
514
515 Int_t binsCheckPtEtaPhi[5] = { iNbin, fPtCheckNbins-1, fEtaCheckNbins-1, 18, fCentralityNbins-1};
516 Double_t minCheckPtEtaPhi[5] = { dBinMin, 0, -1.5, 0., 0, };
517 Double_t maxCheckPtEtaPhi[5] = { dBinMax, 100, 1.5, 2.*TMath::Pi(), 100};
518
519 sprintf(cFullTempName, "h%sPtEtaPhiAll",cTempNameAxis0);
520 sprintf(cFullTempTitle,"%s;%s;p_{T} (GeV/c);#eta;#phi;Centrality", cFullTempName, cTempTitleAxis0All);
521 hCrossCheckAll[iCheckQuant] = new THnF(cFullTempName, cFullTempTitle, 5, binsCheckPtEtaPhi, minCheckPtEtaPhi, maxCheckPtEtaPhi);
522 hCrossCheckAll[iCheckQuant]->SetBinEdges(1, fBinsPtCheck);
523 hCrossCheckAll[iCheckQuant]->SetBinEdges(2, fBinsEtaCheck);
524 hCrossCheckAll[iCheckQuant]->Sumw2();
525
526 sprintf(cFullTempName, "h%sPtEtaPhiAcc",cTempNameAxis0);
527 sprintf(cFullTempTitle,"%s;%s;p_{T} (GeV/c);#eta;#phi;Centrality", cFullTempName, cTempTitleAxis0Acc);
528 hCrossCheckAcc[iCheckQuant] = new THnF(cFullTempName, cFullTempTitle, 5, binsCheckPtEtaPhi, minCheckPtEtaPhi, maxCheckPtEtaPhi);
529 hCrossCheckAcc[iCheckQuant]->SetBinEdges(1, fBinsPtCheck);
530 hCrossCheckAcc[iCheckQuant]->SetBinEdges(2, fBinsEtaCheck);
531 hCrossCheckAcc[iCheckQuant]->Sumw2();
532 } // end iCheckQuant
fad9b70b 533
d25bcbe6 534 // Add Histos, Profiles etc to List
535 fOutputList->Add(hnZvPtEtaCent);
536 fOutputList->Add(hPt);
537 fOutputList->Add(hnMCRecPrimZvPtEtaCent);
538 fOutputList->Add(hnMCGenZvPtEtaCent);
5747f2c6 539 fOutputList->Add(hnMCRecSecZvPtEtaCent);
d25bcbe6 540 fOutputList->Add(hMCPt);
541 fOutputList->Add(hEventStatistics);
542 fOutputList->Add(hEventStatisticsCentrality);
9db7eb94 543 fOutputList->Add(hMCEventStatisticsCentrality);
d25bcbe6 544 fOutputList->Add(hAllEventStatisticsCentrality);
fad9b70b 545 fOutputList->Add(hEventStatisticsCentralityTrigger);
d25bcbe6 546 fOutputList->Add(hnZvMultCent);
547 fOutputList->Add(hTriggerStatistics);
548 fOutputList->Add(hMCTrackPdgCode);
549 fOutputList->Add(hMCTrackStatusCode);
550 fOutputList->Add(hCharge);
551 fOutputList->Add(hMCCharge);
552 fOutputList->Add(hMCPdgPt);
553 fOutputList->Add(hMCHijingPrim);
5747f2c6 554 fOutputList->Add(hDCAPtAll);
555 fOutputList->Add(hDCAPtAccepted);
556 fOutputList->Add(hMCDCAPtSecondary);
557 fOutputList->Add(hMCDCAPtPrimary);
72bb4ceb 558 for(Int_t i = 0; i < cqMax; i++)
559 {
560 fOutputList->Add(hCrossCheckAll[i]);
561 fOutputList->Add(hCrossCheckAcc[i]);
562 }
d25bcbe6 563
564 PostData(1, fOutputList);
565}
566
567void AlidNdPtAnalysisPbPbAOD::UserExec(Option_t *option)
568{
f856053f 569
d25bcbe6 570 // Main Loop
571 // called for each event
572 hEventStatistics->Fill("all events",1);
573
574 // set ZERO pointers:
575 AliInputEventHandler *inputHandler = NULL;
576 AliAODTrack *track = NULL;
577 AliAODMCParticle *mcPart = NULL;
578 AliAODMCHeader *mcHdr = NULL;
579 AliGenHijingEventHeader *genHijingHeader = NULL;
b3341d37 580 //AliGenPythiaEventHeader *genPythiaHeader = NULL;
d25bcbe6 581
582 Bool_t bIsEventSelectedMB = kFALSE;
583 Bool_t bIsEventSelectedSemi = kFALSE;
584 Bool_t bIsEventSelectedCentral = kFALSE;
585 Bool_t bIsEventSelected = kFALSE;
586 Bool_t bIsPrimary = kFALSE;
587 Bool_t bIsHijingParticle = kFALSE;
9db7eb94 588 Bool_t bMotherIsHijingParticle = kFALSE;
b3341d37 589 //Bool_t bIsPythiaParticle = kFALSE;
d25bcbe6 590 Bool_t bEventHasATrack = kFALSE;
591 Bool_t bEventHasATrackInRange = kFALSE;
592 Int_t nTriggerFired = 0;
593
594
595 Double_t dMCTrackZvPtEtaCent[4] = {0};
596 Double_t dTrackZvPtEtaCent[4] = {0};
597
b3341d37 598 Double_t dDCA[2] = {0};
599
d25bcbe6 600 Double_t dMCEventZv = -100;
601 Double_t dEventZv = -100;
602 Int_t iAcceptedMultiplicity = 0;
603
604 bIsMonteCarlo = kFALSE;
605
606 AliAODEvent *eventAOD = 0x0;
607 eventAOD = dynamic_cast<AliAODEvent*>( InputEvent() );
608 if (!eventAOD) {
609 AliWarning("ERROR: eventAOD not available \n");
610 return;
611 }
612
613 // check, which trigger has been fired
614 inputHandler = (AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
615 bIsEventSelectedMB = ( inputHandler->IsEventSelected() & AliVEvent::kMB);
616 bIsEventSelectedSemi = ( inputHandler->IsEventSelected() & AliVEvent::kSemiCentral);
617 bIsEventSelectedCentral = ( inputHandler->IsEventSelected() & AliVEvent::kCentral);
618
619 if(bIsEventSelectedMB || bIsEventSelectedSemi || bIsEventSelectedCentral) hTriggerStatistics->Fill("all triggered events",1);
620 if(bIsEventSelectedMB) { hTriggerStatistics->Fill("MB trigger",1); nTriggerFired++; }
621 if(bIsEventSelectedSemi) { hTriggerStatistics->Fill("SemiCentral trigger",1); nTriggerFired++; }
622 if(bIsEventSelectedCentral) { hTriggerStatistics->Fill("Central trigger",1); nTriggerFired++; }
623 if(nTriggerFired == 0) { hTriggerStatistics->Fill("No trigger",1); }
624
625 bIsEventSelected = ( inputHandler->IsEventSelected() & GetCollisionCandidates() );
626
627 // only take tracks of events, which are triggered
628 if(nTriggerFired == 0) { return; }
629
630 // if( !bIsEventSelected || nTriggerFired>1 ) return;
631
632 // hEventStatistics->Fill("events with only coll. cand.", 1);
633
634
635
636 // check if there is a stack, if yes, then do MC loop
637 TList *list = eventAOD->GetList();
638 TClonesArray *stack = 0x0;
639 stack = (TClonesArray*)list->FindObject(AliAODMCParticle::StdBranchName());
640
641 if( stack )
642 {
643 bIsMonteCarlo = kTRUE;
644
645 mcHdr = (AliAODMCHeader*)list->FindObject(AliAODMCHeader::StdBranchName());
646
647 genHijingHeader = GetHijingEventHeader(mcHdr);
648 // genPythiaHeader = GetPythiaEventHeader(mcHdr);
649
650 if(!genHijingHeader) { return; }
651
652 // if(!genPythiaHeader) { return; }
653
654 dMCEventZv = mcHdr->GetVtxZ();
655 dMCTrackZvPtEtaCent[0] = dMCEventZv;
656 hEventStatistics->Fill("MC all events",1);
657 }
658
659 AliCentrality* aCentrality = eventAOD->GetCentrality();
660 Double_t dCentrality = aCentrality->GetCentralityPercentile("V0M");
661
662 if( dCentrality < 0 ) return;
663 hEventStatistics->Fill("after centrality selection",1);
664
665
666
667 // start with MC truth analysis
668 if(bIsMonteCarlo)
669 {
670
671 if( dMCEventZv > dCutMaxZVertex ) { return; }
672
673 dMCTrackZvPtEtaCent[0] = dMCEventZv;
674
675 hEventStatistics->Fill("MC afterZv cut",1);
676
677 for(Int_t iMCtrack = 0; iMCtrack < stack->GetEntriesFast(); iMCtrack++)
678 {
679 mcPart =(AliAODMCParticle*)stack->At(iMCtrack);
680
681 // check for charge
682 if( !(IsMCTrackAccepted(mcPart)) ) continue;
683
684 if(!IsHijingParticle(mcPart, genHijingHeader)) { continue; }
685
686 if(mcPart->IsPhysicalPrimary() )
687 {
688 hMCHijingPrim->Fill("IsPhysicalPrimary",1);
689 }
690 else
691 {
692 hMCHijingPrim->Fill("NOT a primary",1);
693 continue;
694 }
695
d0483ba3 696
d25bcbe6 697 //
698 // ======================== fill histograms ========================
699 dMCTrackZvPtEtaCent[1] = mcPart->Pt();
700 dMCTrackZvPtEtaCent[2] = mcPart->Eta();
701 dMCTrackZvPtEtaCent[3] = dCentrality;
702
703 bEventHasATrack = kTRUE;
704
705 hnMCGenZvPtEtaCent->Fill(dMCTrackZvPtEtaCent);
706
707 if( (dMCTrackZvPtEtaCent[1] > dCutPtMin) &&
708 (dMCTrackZvPtEtaCent[1] < dCutPtMax) &&
709 (dMCTrackZvPtEtaCent[2] > dCutEtaMin) &&
710 (dMCTrackZvPtEtaCent[2] < dCutEtaMax) )
711 {
712 hMCPt->Fill(mcPart->Pt());
713 hMCCharge->Fill(mcPart->Charge()/3.);
714 bEventHasATrackInRange = kTRUE;
715 }
716
717 }
718 } // isMonteCarlo
719 if(bEventHasATrack) { hEventStatistics->Fill("MC events with tracks",1); }
9db7eb94 720 if(bEventHasATrackInRange)
721 {
722 hEventStatistics->Fill("MC events with tracks in range",1);
723 hMCEventStatisticsCentrality->Fill(dCentrality);
724 }
d25bcbe6 725 bEventHasATrack = kFALSE;
726 bEventHasATrackInRange = kFALSE;
727
728
729
730 // Loop over recontructed tracks
731
732 dEventZv = eventAOD->GetPrimaryVertex()->GetZ();
733 if( TMath::Abs(dEventZv) > dCutMaxZVertex ) return;
734
735 hAllEventStatisticsCentrality->Fill(dCentrality/*, nTriggerFired*/);
736
737 hEventStatistics->Fill("after Zv cut",1);
738
739 dTrackZvPtEtaCent[0] = dEventZv;
740
741 for(Int_t itrack = 0; itrack < eventAOD->GetNumberOfTracks(); itrack++)
742 {
743 track = eventAOD->GetTrack(itrack);
744 if(!track) continue;
745
746 mcPart = NULL;
747 dMCTrackZvPtEtaCent[1] = 0;
748 dMCTrackZvPtEtaCent[2] = 0;
749 dMCTrackZvPtEtaCent[3] = 0;
750
751 bIsPrimary = kFALSE;
752
b3341d37 753 GetDCA(track, eventAOD, dDCA);
754
9db7eb94 755 Double_t dDCAxyDCAzPt[5] = { dDCA[0], dDCA[1], track->Pt(), track->Eta(), track->Phi() };
d0483ba3 756
757 hDCAPtAll->Fill(dDCAxyDCAzPt);
758
72bb4ceb 759 if( !(IsTrackAccepted(track, dCentrality)) ) continue;
d25bcbe6 760
5747f2c6 761 dTrackZvPtEtaCent[1] = track->Pt();
762 dTrackZvPtEtaCent[2] = track->Eta();
763 dTrackZvPtEtaCent[3] = dCentrality;
764
d25bcbe6 765 if( bIsMonteCarlo )
766 {
767 mcPart = (AliAODMCParticle*)stack->At(TMath::Abs(track->GetLabel()));
768 if( !mcPart ) { continue; }
769
770 // check for charge
771 if( !(IsMCTrackAccepted(mcPart)) ) { continue; }
772
773 bIsHijingParticle = IsHijingParticle(mcPart, genHijingHeader);
774 // bIsPythiaParticle = IsPythiaParticle(mcPart, genPythiaHeader);
775
776 // if(!bIsHijingParticle) continue; // only take real tracks, not injected ones
777
778 bIsPrimary = mcPart->IsPhysicalPrimary();
779
780 dMCTrackZvPtEtaCent[1] = mcPart->Pt();
781 dMCTrackZvPtEtaCent[2] = mcPart->Eta();
782 dMCTrackZvPtEtaCent[3] = dCentrality;
783
784 if(bIsPrimary && bIsHijingParticle)
785 {
d0483ba3 786 hnMCRecPrimZvPtEtaCent->Fill(dMCTrackZvPtEtaCent);
787 hMCDCAPtPrimary->Fill(dDCAxyDCAzPt);
d25bcbe6 788 }
789
790 if(!bIsPrimary /*&& !bIsHijingParticle*/)
791 {
792 Int_t indexMoth = mcPart->GetMother();
793 if(indexMoth >= 0)
794 {
795 AliAODMCParticle* moth = (AliAODMCParticle*)stack->At(indexMoth);
9db7eb94 796 bMotherIsHijingParticle = IsHijingParticle(moth, genHijingHeader);
d25bcbe6 797
798 if(bMotherIsHijingParticle) // only store secondaries, which come from a not embedded signal!
799 {
800 hMCTrackStatusCode->Fill(Form("%d",mcPart->GetStatus()), 1);
801 if(TMath::Abs(mcPart->Eta()) < 0.8) { hMCPdgPt->Fill(mcPart->Pt(), Form("%s",GetParticleName(mcPart->GetPdgCode())), 1); }
802
d0483ba3 803 hnMCRecSecZvPtEtaCent->Fill(dMCTrackZvPtEtaCent);
804 hMCDCAPtSecondary->Fill(dDCAxyDCAzPt);
d25bcbe6 805 hMCTrackPdgCode->Fill(Form("%s_H%i_H%i",GetParticleName(moth->GetPdgCode()),bMotherIsHijingParticle, bIsHijingParticle), 1);
806 // delete moth;
807 }
808 }
809 }
810 } // end isMonteCarlo
811
812 // ======================== fill histograms ========================
813
9db7eb94 814 // only keep prim and sec from not embedded signal
815 Bool_t bKeepMCTrack = kFALSE;
816 if(bIsMonteCarlo)
817 {
818 if( (bIsHijingParticle && bIsPrimary) ^ (bMotherIsHijingParticle && !bIsPrimary) )
d0483ba3 819 {
9db7eb94 820 bKeepMCTrack = kTRUE;
821 }
822 else
823 {
824 continue;
d0483ba3 825 }
9db7eb94 826 }
827
828 bEventHasATrack = kTRUE;
829
830 hnZvPtEtaCent->Fill(dTrackZvPtEtaCent);
831 hDCAPtAccepted->Fill(dDCAxyDCAzPt);
832
833 if( (dTrackZvPtEtaCent[1] > dCutPtMin) &&
834 (dTrackZvPtEtaCent[1] < dCutPtMax) &&
835 (dTrackZvPtEtaCent[2] > dCutEtaMin) &&
836 (dTrackZvPtEtaCent[2] < dCutEtaMax) )
837 {
838 iAcceptedMultiplicity++;
839 bEventHasATrackInRange = kTRUE;
840 hPt->Fill(track->Pt());
841 hCharge->Fill(track->Charge());
842 }
d25bcbe6 843 } // end track loop
844
845 if(bEventHasATrack) { hEventStatistics->Fill("events with tracks",1); bEventHasATrack = kFALSE; }
846
847 if(bEventHasATrackInRange)
848 {
849 hEventStatistics->Fill("events with tracks in range",1);
850 hEventStatisticsCentrality->Fill(dCentrality);
851 bEventHasATrackInRange = kFALSE;
fad9b70b 852
853 if(bIsEventSelectedMB) hEventStatisticsCentralityTrigger->Fill(dCentrality, 0);
854 if(bIsEventSelectedSemi) hEventStatisticsCentralityTrigger->Fill(dCentrality, 1);
855 if(bIsEventSelectedCentral) hEventStatisticsCentralityTrigger->Fill(dCentrality, 2);
d25bcbe6 856 }
857
858 Double_t dEventZvMultCent[3] = {dEventZv, iAcceptedMultiplicity, dCentrality};
859 hnZvMultCent->Fill(dEventZvMultCent);
860
d25bcbe6 861 PostData(1, fOutputList);
862
863}
864
72bb4ceb 865Bool_t AlidNdPtAnalysisPbPbAOD::IsTrackAccepted(AliAODTrack *tr, Double_t dCentrality)
d25bcbe6 866{
867 if(!tr) return kFALSE;
868
869 if(tr->Charge()==0) { return kFALSE; }
870
d25bcbe6 871 Double_t dNClustersTPC = tr->GetTPCNcls();
872 Double_t dCrossedRowsTPC = tr->GetTPCClusterInfo(2,1);
9db7eb94 873 Double_t dChi2PerClusterTPC = (dNClustersTPC>0)?tr->Chi2perNDF()*(dNClustersTPC-5)/dNClustersTPC:-1.; // see AliDielectronVarManager.h
874
875 // hAllCrossedRowsTPC->Fill(dCrossedRowsTPC);
d25bcbe6 876
72bb4ceb 877 Double_t *dCheck = new Double_t[cqMax];
878 Double_t *dKine = new Double_t[kqMax];
879 dKine[0] = tr->Pt();
880 dKine[1] = tr->Eta();
881 dKine[2] = tr->Phi();
882
883 dCheck[0] = dCrossedRowsTPC;
884 dCheck[1] = dNClustersTPC;
885 dCheck[2] = dChi2PerClusterTPC;
886
887
888 FillDebugHisto(dCheck, dKine, dCentrality, kFALSE);
889
95f26ffa 890
9db7eb94 891 // filter bit 5
892 if(!(tr->TestFilterBit(AliAODTrack::kTrkGlobal)) ) { return kFALSE; }
95f26ffa 893
9db7eb94 894 // filter bit 4
895 // if(!(tr->TestFilterBit(AliAODTrack::kTrkGlobalNoDCA)) ) { return kFALSE; }
896
897 // hFilterCrossedRowsTPC->Fill(dCrossedRowsTPC);
95f26ffa 898
f856053f 899 if(dCrossedRowsTPC < GetCutMinNCrossedRowsTPC()) { return kFALSE; }
d0483ba3 900
72bb4ceb 901 // do a relativ cut in Nclusters, both time at 80% of mean
902// if(bIsMonteCarlo)
903// {
904// if(dNClustersTPC < 88) { return kFALSE; }
905// }
906// else
907// {
908// if(dNClustersTPC < 76) { return kFALSE; }
909// }
910
911
912 FillDebugHisto(dCheck, dKine, dCentrality, kTRUE);
913
9db7eb94 914
915 // hAccNclsTPC->Fill(dNClustersTPC);
916 // hAccCrossedRowsTPC->Fill(dCrossedRowsTPC);
d25bcbe6 917 // Double_t dFindableClustersTPC = tr->GetTPCNclsF();
918 // Double_t dChi2PerClusterTPC = (dNClustersTPC>0)?tr->Chi2perNDF()*(dNClustersTPC-5)/dNClustersTPC:-1.; // see AliDielectronVarManager.h
919 //
920 // Bool_t bIsFromKink = kFALSE;
921 // if(tr->GetProdVertex()->GetType() == AliAODVertex::kKink) bIsFromKink = kTRUE;
922 //
923 // // from AliAnalysisTaskPIDqa.cxx
924 // ULong_t uStatus = tr->GetStatus();
925 // Bool_t bHasRefitTPC = kFALSE;
926 // Bool_t bHasRefitITS = kFALSE;
927 //
928 // if ((uStatus & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) bHasRefitTPC = kTRUE;
929 // if ((uStatus & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) bHasRefitITS = kTRUE;
930 //
931 // // from AliDielectronVarManager.h
932 // Bool_t bHasHitInSPD = kFALSE;
933 // for (Int_t iC=0; iC<2; iC++)
934 // {
935 // if (((tr->GetITSClusterMap()) & (1<<(iC))) > 0) { bHasHitInSPD = kTRUE; }
936 // }
937 //
938 // Double_t dNClustersITS = tr->GetITSNcls();
939
940 // cuts to be done:
941 // TPC
942 // esdTrackCuts->SetMinNCrossedRowsTPC(70);
943 // esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
944 //
945 // esdTrackCuts->SetMaxChi2PerClusterTPC(4);
946 // esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
947 // esdTrackCuts->SetRequireTPCRefit(kTRUE);
948 // ITS
949 // esdTrackCuts->SetRequireITSRefit(kTRUE);
950 // esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
951 //
952 // esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1");
953 // esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
954 //
955 // esdTrackCuts->SetMaxDCAToVertexZ(2);
956 // esdTrackCuts->SetDCAToVertex2D(kFALSE);
957 // esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
958 //
959 // esdTrackCuts->SetMaxChi2PerClusterITS(36);
960
961
962 return kTRUE;
963}
964
72bb4ceb 965Bool_t AlidNdPtAnalysisPbPbAOD::FillDebugHisto(Double_t *dCrossCheckVar, Double_t *dKineVar, Double_t dCentrality, Bool_t bIsAccepted)
966{
967 if(bIsAccepted)
968 {
969 for(Int_t iCrossCheck = 0; iCrossCheck < cqMax; iCrossCheck++)
970 {
971 Double_t dFillIt[5] = {dCrossCheckVar[iCrossCheck], dKineVar[0], dKineVar[1], dKineVar[2], dCentrality};
972 hCrossCheckAcc[iCrossCheck]->Fill(dFillIt);
973 }
974 }
975 else
976 {
977 for(Int_t iCrossCheck = 0; iCrossCheck < cqMax; iCrossCheck++)
978 {
979 Double_t dFillIt[5] = {dCrossCheckVar[iCrossCheck], dKineVar[0], dKineVar[1], dKineVar[2], dCentrality};
980 hCrossCheckAll[iCrossCheck]->Fill(dFillIt);
981 }
982 }
983
984 return kTRUE;
985
986}
987
b3341d37 988Bool_t AlidNdPtAnalysisPbPbAOD::GetDCA(const AliAODTrack *track, AliAODEvent *evt, Double_t d0z0[2])
d0483ba3 989{
b3341d37 990 // function adapted from AliDielectronVarManager.h
d0483ba3 991
b3341d37 992 if(track->TestBit(AliAODTrack::kIsDCA)){
993 d0z0[0]=track->DCA();
994 d0z0[1]=track->ZAtDCA();
995 return kTRUE;
d0483ba3 996 }
997
998 Bool_t ok=kFALSE;
b3341d37 999 if(evt) {
d0483ba3 1000 Double_t covd0z0[3];
b3341d37 1001 //AliAODTrack copy(*track);
1002 AliExternalTrackParam etp; etp.CopyFromVTrack(track);
d0483ba3 1003
1004 Float_t xstart = etp.GetX();
b3341d37 1005 if(xstart>3.) {
d0483ba3 1006 d0z0[0]=-999.;
1007 d0z0[1]=-999.;
1008 //printf("This method can be used only for propagation inside the beam pipe \n");
b3341d37 1009 return kFALSE;
d0483ba3 1010 }
b3341d37 1011
1012
d0483ba3 1013 AliAODVertex *vtx =(AliAODVertex*)(evt->GetPrimaryVertex());
1014 Double_t fBzkG = evt->GetMagneticField(); // z componenent of field in kG
1015 ok = etp.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
b3341d37 1016 //ok = copy.PropagateToDCA(vtx,fBzkG,kVeryBig,d0z0,covd0z0);
d0483ba3 1017 }
1018 if(!ok){
1019 d0z0[0]=-999.;
1020 d0z0[1]=-999.;
d0483ba3 1021 }
b3341d37 1022 return ok;
d0483ba3 1023}
1024
b3341d37 1025
d25bcbe6 1026Bool_t AlidNdPtAnalysisPbPbAOD::IsMCTrackAccepted(AliAODMCParticle *part)
1027{
1028 if(!part) return kFALSE;
1029
1030 Double_t charge = part->Charge()/3.;
1031 if (TMath::Abs(charge) < 0.001) return kFALSE;
1032
1033 return kTRUE;
1034}
1035
1036const char * AlidNdPtAnalysisPbPbAOD::GetParticleName(Int_t pdg)
1037{
1038 TParticlePDG * p1 = TDatabasePDG::Instance()->GetParticle(pdg);
1039 if(p1) return p1->GetName();
1040 return Form("%d", pdg);
1041}
1042
1043AliGenHijingEventHeader* AlidNdPtAnalysisPbPbAOD::GetHijingEventHeader(AliAODMCHeader *header)
1044{
1045 //
1046 // inspired by PWGJE/AliPWG4HighPtSpectra.cxx
1047 //
1048
1049 if(!header) return 0x0;
1050 AliGenHijingEventHeader* hijingGenHeader = NULL;
1051
1052 TList* headerList = header->GetCocktailHeaders();
1053
1054 for(Int_t i = 0; i < headerList->GetEntries(); i++)
1055 {
1056 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(headerList->At(i));
1057 if(hijingGenHeader) break;
1058 }
1059
1060 if(!hijingGenHeader) return 0x0;
1061
1062 return hijingGenHeader;
1063}
1064
1065AliGenPythiaEventHeader* AlidNdPtAnalysisPbPbAOD::GetPythiaEventHeader(AliAODMCHeader *header)
1066{
1067 //
1068 // inspired by PWGJE/AliPWG4HighPtSpectra.cxx
1069 //
1070
1071 if(!header) return 0x0;
1072 AliGenPythiaEventHeader* PythiaGenHeader = NULL;
1073
1074 TList* headerList = header->GetCocktailHeaders();
1075
1076 for(Int_t i = 0; i < headerList->GetEntries(); i++)
1077 {
1078 PythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(headerList->At(i));
1079 if(PythiaGenHeader) break;
1080 }
1081
1082 if(!PythiaGenHeader) return 0x0;
1083
1084 return PythiaGenHeader;
1085}
1086
1087//________________________________________________________________________
1088Bool_t AlidNdPtAnalysisPbPbAOD::IsHijingParticle(const AliAODMCParticle *part, AliGenHijingEventHeader* hijingGenHeader){
1089
1090 // Check whether a particle is from Hijing or some injected
1091
1092 if(part->Label() > (hijingGenHeader->NProduced()-1)) return kFALSE;
1093 return kTRUE;
1094}
1095
1096//________________________________________________________________________
1097Bool_t AlidNdPtAnalysisPbPbAOD::IsPythiaParticle(const AliAODMCParticle *part, AliGenPythiaEventHeader* pythiaGenHeader){
1098
1099 // Check whether a particle is from Pythia or some injected
1100
1101 if(part->Label() > (pythiaGenHeader->NProduced()-1)) return kFALSE;
1102 return kTRUE;
b3341d37 1103}
1104
1105Double_t* AlidNdPtAnalysisPbPbAOD::GetArrayClone(Int_t n, Double_t* source)
1106{
1107 if (!source || n==0) return 0;
1108 Double_t* dest = new Double_t[n];
1109 for (Int_t i=0; i<n ; i++) { dest[i] = source[i]; }
1110 return dest;
d25bcbe6 1111}
1112
b3341d37 1113void AlidNdPtAnalysisPbPbAOD::Terminate(Option_t *)
1114{
1115
1116}
1117
1118