1 const Char_t *destdir = "plots";
8 const Char_t *histoName[kNHistos] = {
10 "hReconstructedTracks"
18 const Char_t *chargeName[kNCharges] = {
31 const Int_t NcentralityBins = 10;
32 Double_t centralityBin[NcentralityBins + 1] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90.};
34 const Int_t NptBins = 46;
35 Double_t ptBin[NptBins + 1] = {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.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0};
37 const Int_t NetaBins = 20;
38 Double_t etaMin = -1.;
40 Double_t etaStep = (etaMax - etaMin) / NetaBins;
41 Double_t etaBin[NetaBins + 1]; /* computed at run-time */
43 const Int_t NphiBins = 20;
45 Double_t phiMax = 2. * TMath::Pi();
46 Double_t phiStep = (phiMax - phiMin) / NphiBins;
47 Double_t phiBin[NphiBins + 1]; /* computed at run-time */
49 const Int_t NptsubBins = 4;
50 Double_t ptsubBin[NptsubBins + 1] = {0.2, 0.5, 1.0, 1.5, 5.0};
51 Int_t ptsubBinMin[NptsubBins] = {0, 6, 16, 21};
52 Int_t ptsubBinMax[NptsubBins] = {5, 15, 20, 45};
54 Int_t multcentColor[10] = {
68 Int_t particleColor[5] = {1, 1, 4, 8, 2};
69 Int_t chargeMarker[2] = {20, 25};
71 const Char_t *partChargeName[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};
74 const Double_t kEpsilon = 0.001;
76 TrackingEff(const Char_t *filename, Int_t evMax = kMaxInt)
79 /* include path for ACLic */
80 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
81 gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
83 gSystem->Load("libANALYSIS");
84 gSystem->Load("libANALYSISalice");
85 /* build analysis task class */
86 gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
87 gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
88 gROOT->LoadMacro("AliAnalysisTrack.cxx+g");
90 /* open file, get tree and connect */
91 TFile *filein = TFile::Open(filename);
92 TTree *treein = (TTree *)filein->Get("aodTree");
93 printf("got \"aodTree\": %d entries\n", treein->GetEntries());
94 AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
95 TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
96 AliAnalysisTrack *analysisTrack = NULL;
97 TClonesArray *analysisParticleArray = new TClonesArray("AliAnalysisParticle");
98 AliAnalysisParticle *analysisParticle = NULL;
99 treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
100 treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);
101 treein->SetBranchAddress("AnalysisParticle", &analysisParticleArray);
104 for (Int_t ieta = 0; ieta < NetaBins + 1; ieta++)
105 etaBin[ieta] = etaMin + ieta * etaStep;
106 for (Int_t iphi = 0; iphi < NphiBins + 1; iphi++)
107 phiBin[iphi] = phiMin + iphi * phiStep;
109 Int_t NparamBins[kNParams] = {NcentralityBins, NptBins, NetaBins, NphiBins};
110 Double_t *paramBin[kNParams] = {centralityBin, ptBin, etaBin, phiBin};
111 THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
112 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
113 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
114 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
115 hHisto[ihisto][ipart][icharge] = new THnSparseF(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), "", kNParams, NparamBins);
116 for (Int_t iparam = 0; iparam < kNParams; iparam++)
117 hHisto[ihisto][ipart][icharge]->SetBinEdges(iparam, paramBin[iparam]);
120 /* selected particle array */
121 AliAnalysisParticle *selParticle[1000000];
122 for (Int_t idx = 0; idx < 1000000; idx++)
123 selParticle[idx] = NULL;
125 /* filled slot array */
126 Int_t filledSlot[1000000];
127 Int_t nFilledSlots = 0;
130 /* loop over events */
131 Double_t param[kNParams];
133 for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
135 treein->GetEvent(iev);
136 if (iev % 1000 == 0) printf("iev = %d\n", iev);
138 if (!analysisEvent->AcceptVertex()) continue;
139 /* check collision candidate */
140 if (!analysisEvent->IsCollisionCandidate()) continue;
141 /* check centrality quality */
142 if (analysisEvent->GetCentralityQuality() != 0.) continue;
143 param[kCentrality] = analysisEvent->GetCentralityPercentile(AliAnalysisEvent::kCentEst_V0M);
145 /*** ACCEPTED EVENT ***/
147 /* reset filled slots selected particle array */
148 for (Int_t islot = 0; islot < nFilledSlots; islot++)
149 selParticle[filledSlot[islot]] = NULL;
150 /* reset filled slots */
153 /* loop over primaries */
154 for (Int_t iprim = 0; iprim < analysisParticleArray->GetEntries(); iprim++) {
155 /* get and check particle */
156 analysisParticle = (AliAnalysisParticle *)analysisParticleArray->At(iprim);
157 if (!analysisParticle || analysisParticle->GetPID() == -1 || analysisParticle->GetLabel() < 0 || analysisParticle->GetSign() == 0.) continue;
159 /*** ACCEPTED PARTICLE ***/
161 /* get particle info */
162 part = analysisParticle->GetPID();
163 param[kPt] = analysisParticle->GetPt();
164 param[kEta] = analysisParticle->GetEta();
165 param[kPhi] = analysisParticle->GetPhi();
166 charge = analysisParticle->GetSign() > 0. ? kPositive : kNegative;
168 /* fill histo and slot */
169 hHisto[kPrimaryTracks][part][charge]->Fill(param);
170 selParticle[analysisParticle->GetLabel()] = analysisParticle;
171 filledSlot[nFilledSlots] = analysisParticle->GetLabel();
176 /* loop over tracks */
177 for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
178 /* get and check track */
179 analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
180 if (!analysisTrack) continue;
181 /* check accepted track */
182 if (!analysisTrack->AcceptTrack()) continue;
183 /* get corresponding particle */
184 analysisParticle = selParticle[TMath::Abs(analysisTrack->GetLabel())];
185 if (!analysisParticle) continue;
187 /*** ACCEPTED PARTICLE WITH RECONSTRUCTED TRACK ***/
189 /* get particle info */
190 part = analysisParticle->GetPID();
191 param[kPt] = analysisParticle->GetPt();
192 param[kEta] = analysisParticle->GetEta();
193 param[kPhi] = analysisParticle->GetPhi();
194 charge = analysisParticle->GetSign() > 0. ? kPositive : kNegative;
196 /* fill reconstructed histo */
197 hHisto[kReconstructedTracks][part][charge]->Fill(param);
203 TFile *fileout = TFile::Open(Form("TrackingEff.%s", filename), "RECREATE");
204 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
205 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
206 for (Int_t icharge = 0; icharge < kNCharges; icharge++)
207 hHisto[ihisto][ipart][icharge]->Write();
212 //_____________________________________________________________________________-
214 TrackingEff_efficiencyPt(const Char_t *filename)
218 TFile *filein = TFile::Open(filename);
219 THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
220 TH1D *hHistoPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hHistoPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
221 TH1D *hHistoAllPt_MB[kNHistos], *hHistoAllPt_centrality[NcentralityBins][kNHistos];
222 /* loop over histos */
223 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
227 hHistoAllPt_MB[ihisto] = new TH1D(Form("hHistoAllPt_MB_%s", histoName[ihisto]), "", NptBins, ptBin);
228 for (Int_t icent = 0; icent < NcentralityBins; icent++)
229 hHistoAllPt_centrality[icent][ihisto] = new TH1D(Form("hHistoAllPt_centrality%d_%s", icent, histoName[ihisto]), "", NptBins, ptBin);
231 /* SINGLE PARTICLE */
233 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
234 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
237 hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
240 hHistoPt_MB[ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kPt);
241 hHistoPt_MB[ihisto][ipart][icharge]->SetName(Form("hHistoPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
242 hHistoPt_MB[ihisto][ipart][icharge]->Sumw2();
243 hHistoAllPt_MB[ihisto]->Add(hHistoPt_MB[ihisto][ipart][icharge]);
245 /* centrality projection */
246 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
247 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
248 hHistoPt_centrality[icent][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kPt);
249 hHistoPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hHistoPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
250 hHistoPt_centrality[icent][ihisto][ipart][icharge]->Sumw2();
251 hHistoAllPt_centrality[icent][ihisto]->Add(hHistoPt_centrality[icent][ihisto][ipart][icharge]);
258 TString str = filename;
259 str.Insert(str.Length() - TString(".root").Length(), ".efficiencyPt");
260 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
262 /* efficiencies/fractions and write */
263 TH1D *hEfficiencyPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPt_ratioMB_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
264 TH1D *hEfficiencyAllPt_MB[kNHistos], *hEfficiencyAllPt_centrality[NcentralityBins][kNHistos], *hEfficiencyAllPt_ratioMB_centrality[NcentralityBins][kNHistos];
266 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
268 if (ihisto == kPrimaryTracks) continue;
273 hEfficiencyAllPt_MB[ihisto] = new TH1D(*hHistoAllPt_MB[ihisto]);
274 hEfficiencyAllPt_MB[ihisto]->SetName(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
275 hEfficiencyAllPt_MB[ihisto]->SetLineWidth(2);
276 hEfficiencyAllPt_MB[ihisto]->SetLineColor(1);
277 hEfficiencyAllPt_MB[ihisto]->SetMarkerStyle(20);
278 hEfficiencyAllPt_MB[ihisto]->SetMarkerColor(1);
279 hEfficiencyAllPt_MB[ihisto]->Divide(hEfficiencyAllPt_MB[ihisto], hHistoAllPt_MB[kPrimaryTracks], 1, 1, "B");
280 hEfficiencyAllPt_MB[ihisto]->Write();
282 /* multiplicity/centrality efficiency */
283 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
284 hEfficiencyAllPt_centrality[icent][ihisto] = new TH1D(*hHistoAllPt_centrality[icent][ihisto]);
285 hEfficiencyAllPt_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
286 hEfficiencyAllPt_centrality[icent][ihisto]->SetLineWidth(2);
287 hEfficiencyAllPt_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
288 hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerStyle(20);
289 hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
290 hEfficiencyAllPt_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_centrality[icent][ihisto], hHistoAllPt_centrality[icent][kPrimaryTracks], 1, 1, "B");
291 hEfficiencyAllPt_centrality[icent][ihisto]->Write();
294 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto] = new TH1D(*hEfficiencyAllPt_centrality[icent][ihisto]);
295 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_ratioMB_centrality%d_%s", icent, histoName[ihisto]));
296 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineWidth(2);
297 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
298 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerStyle(20);
299 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
300 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_MB[ihisto]);
301 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Write();
304 /* SINGLE PARTICLE */
306 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
307 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
310 hEfficiencyPt_MB[ihisto][ipart][icharge] = new TH1D(*hHistoPt_MB[ihisto][ipart][icharge]);
311 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
312 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetLineWidth(2);
313 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetLineColor(1);
314 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetMarkerStyle(20);
315 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetMarkerColor(1);
316 hEfficiencyPt_MB[ihisto][ipart][icharge]->Divide(hEfficiencyPt_MB[ihisto][ipart][icharge], hHistoPt_MB[kPrimaryTracks][ipart][icharge], 1, 1, "B");
317 hEfficiencyPt_MB[ihisto][ipart][icharge]->Write();
319 /* multiplicity/centrality efficiency */
320 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
321 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hHistoPt_centrality[icent][ihisto][ipart][icharge]);
322 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
323 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
324 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
325 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
326 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
327 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPt_centrality[icent][ihisto][ipart][icharge], hHistoPt_centrality[icent][kPrimaryTracks][ipart][icharge], 1, 1, "B");
328 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->Write();
331 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]);
332 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
333 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
334 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
335 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
336 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
337 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPt_MB[ihisto][ipart][icharge]);
338 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Write();
349 //_____________________________________________________________________________-
351 TrackingEff_efficiencyEta(const Char_t *filename)
355 TFile *filein = TFile::Open(filename);
356 THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
357 TH1D *hHistoEta_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hHistoEta_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
358 TH1D *hHistoEta_MB_pt[NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges], *hHistoEta_centrality_pt[NcentralityBins][NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges];
359 /* loop over histos */
360 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
361 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
362 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
365 hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
368 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(0, 0);
369 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
370 hHistoEta_MB[ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
371 hHistoEta_MB[ihisto][ipart][icharge]->SetName(Form("hHistoEta_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
372 hHistoEta_MB[ihisto][ipart][icharge]->Sumw2();
374 for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
375 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
376 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
377 hHistoEta_MB_pt[ipt][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
378 hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]->SetName(Form("hHistoEta_MB_pt%d_%s_%s_%s", ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
379 hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]->Sumw2();
382 /* centrality projection */
383 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
384 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(0, 0);
385 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
386 hHistoEta_centrality[icent][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
387 hHistoEta_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hHistoEta_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
388 hHistoEta_centrality[icent][ihisto][ipart][icharge]->Sumw2();
390 for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
391 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
392 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
393 hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
394 hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge]->SetName(Form("hHistoEta_centrality%d_pt%d_%s_%s_%s", icent, ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
395 hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge]->Sumw2();
401 TString str = filename;
402 str.Insert(str.Length() - TString(".root").Length(), ".efficiencyEta");
403 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
405 /* efficiencies/fractions and write */
406 TH1D *hEfficiencyEta_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_ratioMB_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
407 TH1D *hEfficiencyEta_MB_pt[NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_centrality_pt[NcentralityBins][NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_ratioMB_centrality_pt[NcentralityBins][NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges];
409 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
410 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
411 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
413 if (ihisto == kPrimaryTracks) continue;
416 hEfficiencyEta_MB[ihisto][ipart][icharge] = new TH1D(*hHistoEta_MB[ihisto][ipart][icharge]);
417 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
418 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetLineWidth(2);
419 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetLineColor(1);
420 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetMarkerStyle(20);
421 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetMarkerColor(1);
422 hEfficiencyEta_MB[ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB[ihisto][ipart][icharge], hHistoEta_MB[kPrimaryTracks][ipart][icharge], 1, 1, "B");
423 hEfficiencyEta_MB[ihisto][ipart][icharge]->Write();
425 for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
426 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge] = new TH1D(*hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]);
427 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_MB_pt%d_%s_%s_%s", ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
428 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetLineWidth(2);
429 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetLineColor(1);
430 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetMarkerStyle(20);
431 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetMarkerColor(1);
432 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge], hHistoEta_MB_pt[ipt][kPrimaryTracks][ipart][icharge], 1, 1, "B");
433 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->Write();
436 /* multiplicity/centrality efficiency */
437 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
438 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hHistoEta_centrality[icent][ihisto][ipart][icharge]);
439 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
440 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
441 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
442 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
443 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
444 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyEta_centrality[icent][ihisto][ipart][icharge], hHistoEta_centrality[icent][kPrimaryTracks][ipart][icharge], 1, 1, "B");
445 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->Write();
448 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]);
449 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
450 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
451 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
452 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
453 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
454 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB[ihisto][ipart][icharge]);
455 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->Write();
465 //_____________________________________________________________________________-
467 TrackingEff_centralityDependence(const Char_t *filename)
470 Double_t fitMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
471 Double_t fitMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
473 TF1 *pol0 = (TF1 *)gROOT->GetFunction("pol0");
474 TF1 *pol1 = (TF1 *)gROOT->GetFunction("pol1");
475 pol0->SetRange(0., 5.0);
476 TFile *filein = TFile::Open(filename);
479 TString str = filename;
480 str.Insert(str.Length() - TString(".root").Length(), ".centralityDependence");
481 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
483 TH1D *hEfficiencyPt_ratioMB;
484 TH1D *hEfficiencyCentrality[kNHistos][AliPID::kSPECIES][kNCharges];
485 TH1D *hChi2Centrality[kNHistos][AliPID::kSPECIES][kNCharges];
486 TH1D *hEfficiencyAllCentrality[kNHistos];
487 TH1F *hHistoEffRatio = new TH1F("hHistoEffRatio", "", 100, 0.5, 1.5);
488 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
489 if (ihisto == kPrimaryTracks) continue;
493 hEfficiencyAllCentrality[ihisto] = new TH1D(Form("hEfficiencyAllCentrality_ratioMB_%s", histoName[ihisto]), "", NcentralityBins, centralityBin);
494 hEfficiencyAllCentrality[ihisto]->SetLineWidth(2);
495 hEfficiencyAllCentrality[ihisto]->SetLineColor(1);
496 hEfficiencyAllCentrality[ihisto]->SetMarkerStyle(20);
497 hEfficiencyAllCentrality[ihisto]->SetMarkerColor(1);
499 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
501 hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyAllPt_ratioMB_centrality%d_%s", icent, histoName[ihisto]));
502 hEfficiencyPt_ratioMB->Fit(pol0, "q0", "", 0., 5.0);
503 hEfficiencyAllCentrality[ihisto]->SetBinContent(icent + 1, pol0->GetParameter(0));
504 hEfficiencyAllCentrality[ihisto]->SetBinError(icent + 1, pol0->GetParError(0));
505 hEfficiencyPt_ratioMB->Add(pol0, -1.);
506 hEfficiencyPt_ratioMB->Write();
509 hEfficiencyAllCentrality[ihisto]->Write();
512 /* SINGLE PARTICLE */
514 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++)
515 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
517 hEfficiencyCentrality[ihisto][ipart][icharge] = new TH1D(Form("hEfficiencyCentrality_ratioMB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), "", NcentralityBins, centralityBin);
518 hEfficiencyCentrality[ihisto][ipart][icharge]->SetLineWidth(2);
519 hEfficiencyCentrality[ihisto][ipart][icharge]->SetLineColor(particleColor[ipart]);
520 hEfficiencyCentrality[ihisto][ipart][icharge]->SetMarkerStyle(chargeMarker[icharge]);
521 hEfficiencyCentrality[ihisto][ipart][icharge]->SetMarkerColor(particleColor[ipart]);
523 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
525 hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
527 hEfficiencyPt_ratioMB->Fit(pol0, "q0", "", fitMin[ipart], fitMax[ipart]);
528 hEfficiencyCentrality[ihisto][ipart][icharge]->SetBinContent(icent + 1, pol0->GetParameter(0));
529 hEfficiencyCentrality[ihisto][ipart][icharge]->SetBinError(icent + 1, pol0->GetParError(0));
530 pol0->SetRange(fitMin[ipart], fitMax[ipart]);
531 hEfficiencyPt_ratioMB->Add(pol0, -1.);
532 hEfficiencyPt_ratioMB->Write();
536 hEfficiencyCentrality[ihisto][ipart][icharge]->Write();
543 //_____________________________________________________________________________-
545 TrackingEff_centralityDependenceFit(const Char_t *filename, Int_t ihisto = kReconstructedTracks)
548 const Char_t *particleLabel[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};
550 TF1 *fCentralityDependence = new TF1("fCentralityDependence", "[0] + [1] * (1. - TMath::Exp(-x / [2]))", 0., 90.);
551 fCentralityDependence->SetParameter(0, 0.98);
552 fCentralityDependence->SetParameter(1, 0.05);
553 fCentralityDependence->SetParameter(2, 50.);
555 TFile *filein = TFile::Open(filename);
556 TH1D *hEfficiencyAllCentrality;
557 TH1D *hEfficiencyCentrality[AliPID::kSPECIES][kNCharges];
558 hEfficiencyAllCentrality = (TH1D *)filein->Get(Form("hEfficiencyAllCentrality_ratioMB_%s", histoName[ihisto]));
559 TCanvas *cFit = new TCanvas("cFit");
560 hEfficiencyAllCentrality->Fit(fCentralityDependence);
561 hEfficiencyAllCentrality->SetMaximum(1.05);
562 hEfficiencyAllCentrality->SetMinimum(0.95);
563 TCanvas *cRatios = new TCanvas("cRatios");
564 cRatios->Divide(2, 3);
565 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
566 for (Int_t icharge = 0; icharge < 2; icharge++) {
567 cRatios->cd(icharge + 1 + 2 * (ipart - 2));
568 cRatios->cd(icharge + 1 + 2 * (ipart - 2))->SetGridx();
569 cRatios->cd(icharge + 1 + 2 * (ipart - 2))->SetGridy();
570 hEfficiencyCentrality[ipart][icharge] = (TH1D *)filein->Get(Form("hEfficiencyCentrality_ratioMB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
571 hEfficiencyCentrality[ipart][icharge]->Divide(fCentralityDependence);
572 hEfficiencyCentrality[ipart][icharge]->SetMaximum(1.05);
573 hEfficiencyCentrality[ipart][icharge]->SetMinimum(0.95);
574 hEfficiencyCentrality[ipart][icharge]->SetTitle(Form("%s;centrality percentile;efficiency ratio wrt. fitted centrality dependence", particleLabel[ipart][icharge]));
575 hEfficiencyCentrality[ipart][icharge]->SetStats(kFALSE);
576 hEfficiencyCentrality[ipart][icharge]->Draw();
584 //_____________________________________________________________________________-
586 TrackingEff_efficiencyPt_MB_plot(const Char_t *filename)
588 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 2, 0, 20, 4);
589 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 2, 1, 25, 4);
590 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 3, 0, 20, 8);
591 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 3, 1, 25, 8);
592 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 4, 0, 20, 2);
593 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 4, 1, 25, 2);
597 TrackingEff_efficiencyPt_MB_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t ipart, Int_t icharge, Int_t marker = 20, Int_t color = 2, Option_t *opt = "")
600 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
601 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
603 Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
604 Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
606 TF1 *fEff = new TF1("fEff", "[0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4]))", 0.5, 5.0);
607 fEff->SetParameter(0, 0.8);
608 fEff->SetParameter(1, -0.01);
609 fEff->SetParameter(2, 2.0);
610 fEff->SetParameter(3, 1.);
611 fEff->SetParameter(4, 2.);
613 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
615 TFile *filein = TFile::Open(filename);
616 TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
617 hEfficiencyPt->Fit(fEff, "0", "IME", 0.5, 5.0);
618 hEfficiencyPt->SetTitle(Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]));
619 hEfficiencyPt->SetMinimum(0.4);
620 hEfficiencyPt->SetMaximum(0.8);
621 hEfficiencyPt->SetMarkerStyle(marker);
622 hEfficiencyPt->SetMarkerColor(color);
623 hEfficiencyPt->SetMarkerSize(1.5);
624 hEfficiencyPt->SetLineWidth(2);
625 hEfficiencyPt->SetLineColor(color);
626 hEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
627 hEfficiencyPt->SetStats(kFALSE);
629 hEfficiencyPt->DrawCopy();
630 fEff->DrawCopy("same");
632 hEfficiencyPt->Write("hEfficiencyPt");
635 cCanvas1->SetGridx();
636 cCanvas1->SetGridy();
637 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
638 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
639 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
641 TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
642 hRatioPt->Divide(fEff);
643 hRatioPt->SetTitle(Form("%s;p_{T} (GeV/c);ratio wrt. fitted dependence;", partChargeName[ipart][icharge]));
644 hRatioPt->SetMinimum(0.9);
645 hRatioPt->SetMaximum(1.1);
647 hRatioPt->DrawCopy();
649 hRatioPt->Write("hRatioPt");
651 cCanvas2->SetGridx();
652 cCanvas2->SetGridy();
653 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
654 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
655 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
660 // hEfficiencyPt->Add(fEff, -1.);
661 return hEfficiencyPt;
664 //_____________________________________________________________________________-
667 TrackingEff_efficiencyPt_centrality_all_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t marker = 20, Int_t color = 1, Option_t *opt = "")
670 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
671 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
673 Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
674 Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
676 TF1 *fEff = new TF1("fEff", "[5] * ([0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4])))", 0.5, 5.0);
677 fEff->SetParameter(0, 0.8);
678 fEff->SetParameter(1, -0.01);
679 fEff->SetParameter(2, 2.0);
680 fEff->SetParameter(3, 1.);
681 fEff->SetParameter(4, 2.);
682 fEff->FixParameter(5, 1.);
684 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_all.root", destdir), "RECREATE");
686 TFile *filein = TFile::Open(filename);
687 TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
688 hEfficiencyPt->Fit(fEff, "0", "IME", 0.5, 5.0);
689 hEfficiencyPt->SetTitle("all particles;p_{T} (GeV/c);acceptance #times efficiency;");
690 hEfficiencyPt->SetMinimum(0.4);
691 hEfficiencyPt->SetMaximum(0.8);
692 hEfficiencyPt->SetMarkerStyle(marker);
693 hEfficiencyPt->SetMarkerColor(color);
694 hEfficiencyPt->SetMarkerSize(1.5);
695 hEfficiencyPt->SetLineWidth(2);
696 hEfficiencyPt->SetLineColor(color);
697 hEfficiencyPt->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
698 hEfficiencyPt->SetStats(kFALSE);
700 hEfficiencyPt->DrawCopy();
701 fEff->DrawCopy("same");
703 hEfficiencyPt->Write("hEfficiencyPt");
706 cCanvas1->SetGridx();
707 cCanvas1->SetGridy();
708 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.C", destdir));
709 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.png", destdir));
710 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.eps", destdir));
712 TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
713 hRatioPt->Divide(fEff);
714 hRatioPt->SetTitle("all particles;p_{T} (GeV/c);ratio wrt. fitted dependence;");
715 hRatioPt->SetMinimum(0.9);
716 hRatioPt->SetMaximum(1.1);
718 hRatioPt->DrawCopy();
720 hRatioPt->Write("hRatioPt");
722 cCanvas2->SetGridx();
723 cCanvas2->SetGridy();
724 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.C", destdir));
725 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.png", destdir));
726 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.eps", destdir));
728 /* fix efficiency shape and release scale factor */
729 fEff->FixParameter(0, fEff->GetParameter(0));
730 fEff->FixParameter(1, fEff->GetParameter(1));
731 fEff->FixParameter(2, fEff->GetParameter(2));
732 fEff->FixParameter(3, fEff->GetParameter(3));
733 fEff->FixParameter(4, fEff->GetParameter(4));
734 fEff->ReleaseParameter(5);
736 TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", "all particles;centrality percentile;acceptance x efficiency scale factor;", NcentralityBins, centralityBin);
737 hEfficiencyCent->SetMinimum(0.95);
738 hEfficiencyCent->SetMaximum(1.05);
739 hEfficiencyCent->SetMarkerStyle(marker);
740 hEfficiencyCent->SetMarkerColor(color);
741 hEfficiencyCent->SetMarkerSize(1.5);
742 hEfficiencyCent->SetLineWidth(2);
743 hEfficiencyCent->SetLineColor(color);
744 hEfficiencyCent->SetStats(kFALSE);
747 TH1D *hEfficiencyPt_cent[NcentralityBins];
748 TH1D *hRatioPt_cent[NcentralityBins];
749 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
752 hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
753 hEfficiencyPt_cent[icent]->Fit(fEff, "0", "IME", 1.0, 3.0);
754 hEfficiencyPt_cent[icent]->Fit(fEff, "", "IME", 0.5, 5.0);
756 hEfficiencyPt_cent[icent]->SetTitle(Form("all particles (%d-%d\%);p_{T} (GeV/c);acceptance #times efficiency;", (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
757 hEfficiencyPt_cent[icent]->SetMinimum(0.2);
758 hEfficiencyPt_cent[icent]->SetMaximum(0.8);
759 hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
760 hEfficiencyPt_cent[icent]->SetMarkerColor(color);
761 hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
762 hEfficiencyPt_cent[icent]->SetLineWidth(2);
763 hEfficiencyPt_cent[icent]->SetLineColor(color);
764 hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
765 hEfficiencyPt_cent[icent]->SetStats(kFALSE);
767 hEfficiencyPt_cent[icent]->DrawCopy();
768 fEff->DrawCopy("same");
770 hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
771 fEff->Write(Form("fEff_cent%d", icent));
773 hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
774 hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
776 cCanvas1->SetGridx();
777 cCanvas1->SetGridy();
778 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.C", destdir, icent));
779 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.png", destdir, icent));
780 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.eps", destdir, icent));
782 hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
783 hRatioPt_cent[icent]->Divide(fEff);
784 hRatioPt_cent[icent]->SetTitle(Form("all particles (%d-%d\%);p_{T} (GeV/c);ratio wrt. fitted dependence;", (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
785 hRatioPt_cent[icent]->SetMinimum(0.9);
786 hRatioPt_cent[icent]->SetMaximum(1.1);
788 hRatioPt_cent[icent]->DrawCopy();
790 hRatioPt_cent[icent]->Write(Form("hRatio_cent%d", icent));
792 cCanvas2->SetGridx();
793 cCanvas2->SetGridy();
794 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.C", destdir, icent));
795 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.png", destdir, icent));
796 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.eps", destdir, icent));
801 TF1 *fEffCent = new TF1("fEffCent", "[0] - [1] * TMath::Exp(-[2] * TMath::Power(x, [3]))", 0., 90.);
802 fEffCent->SetParameter(0, 1.02);
803 fEffCent->SetParameter(1, 0.04);
804 fEffCent->SetParameter(2, 0.001);
805 fEffCent->SetParameter(3, 2.);
806 hEfficiencyCent->Fit(fEffCent, "q0", "IME", 0., 90.);
808 TCanvas *cCanvas3 = new TCanvas("cCanvas3");
809 hEfficiencyCent->DrawCopy();
810 fEffCent->DrawCopy("same");
812 hEfficiencyCent->Write("hEfficiencyCent");
813 fEffCent->Write("fEffCent");
815 cCanvas3->SetGridx();
816 cCanvas3->SetGridy();
817 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.C", destdir));
818 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.png", destdir));
819 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.eps", destdir));
821 TCanvas *cCanvas4 = new TCanvas("cCanvas4");
823 TH1D *hRatioCent = new TH1D(*hEfficiencyCent);
824 hRatioCent->Divide(fEffCent);
825 hRatioCent->SetTitle(Form("all particles;centrality percentile;ratio wrt. fitted dependence;"));
826 hRatioCent->SetMinimum(0.95);
827 hRatioCent->SetMaximum(1.05);
829 hRatioCent->DrawCopy();
831 hRatioCent->Write("hRatioCent");
833 cCanvas4->SetGridx();
834 cCanvas4->SetGridy();
835 cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.C", destdir));
836 cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.png", destdir));
837 cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.eps", destdir));
841 // hEfficiencyPt->Add(fEff, -1.);
842 return hEfficiencyCent;
846 //_____________________________________________________________________________-
848 TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename)
850 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 2, 0, 20, 4);
851 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 2, 1, 25, 4);
852 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 3, 0, 20, 8);
853 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 3, 1, 25, 8);
854 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 4, 0, 20, 2);
855 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 4, 1, 25, 2);
859 TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t ipart, Int_t icharge, Int_t marker = 20, Int_t color = 2, Option_t *opt = "")
862 TVirtualFitter::SetMaxIterations(1000000);
864 /* load HistoUtils */
865 gROOT->LoadMacro("HistoUtils.C");
867 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
868 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
869 TCanvas *cCanvas5 = new TCanvas("cCanvas5");
871 Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
872 Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
874 /* fit minimum-bias efficiency pt */
876 TF1 *fEff = new TF1("fEff", "([0] * TMath::Exp(-TMath::Power([1] / x, [2])) + [3] * x) * TMath::Exp(TMath::Power([4] / x, [5]))", ptMin[ipart], ptMax[ipart]);
877 fEff->SetParameter(0, 0.5);
878 fEff->SetParameter(1, 0.1);
879 fEff->SetParameter(2, 2.);
880 fEff->SetParameter(3, 0.);
881 fEff->SetParameter(4, 0.001);
882 fEff->SetParameter(5, 1.);
883 Int_t nPars = fEff->GetNpar();
885 TF1 *fEffCopy = new TF1(*fEff);
887 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_centrality_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
889 TFile *filein = TFile::Open(filename);
890 TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
891 hEfficiencyPt->Fit(fEff, "0", "IMRE", ptMin[ipart], ptMax[ipart]);
893 /* build efficiency profile */
894 for (Int_t ipar = 0; ipar < nPars; ipar++) {
895 fEffCopy->SetParameter(ipar, fEff->GetParameter(ipar));
896 fEffCopy->SetParError(ipar, fEff->GetParError(ipar));
898 TProfile *pEfficiencyPt = new TProfile(Form("pEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]), NptBins, ptBin, "s");
899 HistoUtils_Function2Profile(fEffCopy, pEfficiencyPt);
903 pEfficiencyPt->SetMarkerStyle(marker);
904 pEfficiencyPt->SetMarkerColor(color);
905 pEfficiencyPt->SetMarkerSize(0);
906 pEfficiencyPt->SetLineWidth(2);
907 pEfficiencyPt->SetLineColor(color);
908 pEfficiencyPt->SetFillStyle(3001);
909 pEfficiencyPt->SetFillColor(color);
910 pEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
911 pEfficiencyPt->SetStats(kFALSE);
912 pEfficiencyPt->DrawCopy("E2");
914 hEfficiencyPt->SetTitle(Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]));
915 hEfficiencyPt->SetMarkerStyle(marker);
916 hEfficiencyPt->SetMarkerColor(color);
917 hEfficiencyPt->SetMarkerSize(1.5);
918 hEfficiencyPt->SetLineWidth(2);
919 hEfficiencyPt->SetLineColor(color);
920 hEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
921 hEfficiencyPt->SetStats(kFALSE);
922 hEfficiencyPt->DrawCopy("same");
923 fEff->DrawCopy("same");
928 pEfficiencyPt->Write("pEfficiencyPt");
929 hEfficiencyPt->Write("hEfficiencyPt");
932 TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", Form("%s;centrality percentile;acceptance x efficiency scale factor;", partChargeName[ipart][icharge]), NcentralityBins, centralityBin);
933 hEfficiencyCent->SetMinimum(0.9);
934 hEfficiencyCent->SetMaximum(1.1);
935 hEfficiencyCent->SetMarkerStyle(marker);
936 hEfficiencyCent->SetMarkerColor(color);
937 hEfficiencyCent->SetMarkerSize(1.5);
938 hEfficiencyCent->SetLineWidth(2);
939 hEfficiencyCent->SetLineColor(color);
940 hEfficiencyCent->SetStats(kFALSE);
942 TProfile *pEfficiencyPt_cent[NcentralityBins];
943 TH1D *hEfficiencyPt_cent[NcentralityBins];
944 TH1D *hRatioPt_cent[NcentralityBins];
946 /* fix efficiency shape and release scale factor */
947 for (Int_t ipar = 0; ipar < nPars; ipar++)
948 fEff->FixParameter(ipar, fEff->GetParameter(ipar));
949 fEff->ReleaseParameter(scalePar);
951 gStyle->SetOptStat(1100);
952 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
954 hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
955 hEfficiencyPt_cent[icent]->Fit(fEff, "", "IME", ptMin[ipart], ptMax[ipart]);
957 /* build efficiency profile */
958 fEffCopy->SetParameter(scalePar, fEff->GetParameter(scalePar));
959 fEffCopy->SetParError(scalePar, fEff->GetParError(scalePar));
960 pEfficiencyPt_cent[icent] = new TProfile(Form("pEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]), NptBins, ptBin, "s");
961 HistoUtils_Function2Profile(fEffCopy, pEfficiencyPt_cent[icent]);
965 pEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
966 pEfficiencyPt_cent[icent]->SetMarkerColor(color);
967 pEfficiencyPt_cent[icent]->SetMarkerSize(0);
968 pEfficiencyPt_cent[icent]->SetLineWidth(2);
969 pEfficiencyPt_cent[icent]->SetLineColor(color);
970 pEfficiencyPt_cent[icent]->SetFillStyle(3001);
971 pEfficiencyPt_cent[icent]->SetFillColor(color);
972 pEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
973 pEfficiencyPt_cent[icent]->SetStats(kFALSE);
974 pEfficiencyPt_cent[icent]->DrawCopy("E2");
976 hEfficiencyPt_cent[icent]->SetTitle(Form("%s (%d-%d\%);p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
977 hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
978 hEfficiencyPt_cent[icent]->SetMarkerColor(color);
979 hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
980 hEfficiencyPt_cent[icent]->SetLineWidth(2);
981 hEfficiencyPt_cent[icent]->SetLineColor(color);
982 hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
983 hEfficiencyPt_cent[icent]->SetStats(kFALSE);
984 hEfficiencyPt_cent[icent]->DrawCopy("same");
985 fEff->DrawCopy("same");
989 pEfficiencyPt_cent[icent]->Write(Form("pEfficiencyPt_cent%d", icent));
990 hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
991 fEff->Write(Form("fEff_cent%d", icent));
993 hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
994 hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
996 cCanvas1->SetGridx();
997 cCanvas1->SetGridy();
998 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.C", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
999 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.png", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1000 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.eps", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1002 hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
1003 hRatioPt_cent[icent]->Divide(fEff);
1004 hRatioPt_cent[icent]->SetTitle(Form("%s (%d-%d\%);p_{T} (GeV/c);ratio wrt. fitted dependence;", partChargeName[ipart][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]));
1005 hRatioPt_cent[icent]->SetMinimum(0.75);
1006 hRatioPt_cent[icent]->SetMaximum(1.25);
1008 hRatioPt_cent[icent]->DrawCopy();
1010 hRatioPt_cent[icent]->Write(Form("hRatioPt_cent%d", icent));
1013 cCanvas2->SetGridx();
1014 cCanvas2->SetGridy();
1015 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.C", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1016 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.png", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1017 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.eps", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1021 TCanvas *cCanvas3 = new TCanvas("cCanvas3");
1022 hEfficiencyCent->DrawCopy();
1024 hEfficiencyCent->Write("hEfficiencyCent");
1026 cCanvas3->SetGridx();
1027 cCanvas3->SetGridy();
1028 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
1029 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
1030 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
1032 // hEfficiencyPt->Add(fEff, -1.);
1033 return hEfficiencyCent;
1036 TrackingEff_trackingEfficiency(const Char_t *filename, Bool_t useGFcorrection =kTRUE)
1039 Int_t marker[2] = {20, 21};
1040 Int_t color[AliPID::kSPECIES] = {1, 1, 4, 8, 2};
1041 Char_t *partLatex[AliPID::kSPECIES][2] = {
1042 "", "", "#pi^{+}", "K^{+}", "p",
1043 "", "", "#pi^{-}", "K^{-}", "#bar{p}"
1046 TFile *filein = TFile::Open(filename);
1047 if (useGFcorrection)
1048 TFile *fileout = TFile::Open("TOF_trackingEfficiency.root", "RECREATE");
1050 TFile *fileout = TFile::Open("TOF_trackingEfficiency_noGF.root", "RECREATE");
1054 for (Int_t icent = 0; icent < NcentralityBins; icent++)
1055 for (Int_t icharge = 0; icharge < kNCharges; icharge++)
1056 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
1057 hEff = (TH1D *)filein->Get(Form("hEfficiencyPt_centrality%d_hReconstructedTracks_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1058 /* geant-fluka correction */
1059 fGF = TrackingEff_geantflukaCorrection(ipart, icharge);
1060 if (useGFcorrection)
1062 sprintf(title, "%s (%d-%d%%);p_{T} (GeV/c);tracking efficiency;", partLatex[ipart][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]);
1063 hEff->SetMarkerStyle(marker[icharge]);
1064 hEff->SetMarkerColor(color[ipart]);
1065 hEff->SetLineColor(1);
1066 hEff->SetLineWidth(1);
1067 hEff->SetTitle(title);
1068 hEff->SetName(Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1077 TrackingEff_geantflukaCorrection(Int_t ipart, Int_t icharge)
1080 if (ipart == 3 && icharge == kNegative) {
1081 TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
1084 else if (ipart == 4 && icharge == kNegative) {
1085 TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
1088 TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionNull(x)", 0., 5.);
1094 TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
1100 TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
1102 return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
1106 TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
1108 return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);