1 #include "CommonDefs.C"
3 const Char_t *destdir = "plots";
10 const Char_t *histoName[kNHistos] = {
12 "hReconstructedTracks"
24 TrackingEff(const Char_t *filename, Int_t evMax = kMaxInt)
27 /* include path for ACLic */
28 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
29 gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
31 gSystem->Load("libANALYSIS");
32 gSystem->Load("libANALYSISalice");
33 /* build analysis task class */
34 gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
35 gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
36 gROOT->LoadMacro("AliAnalysisTrack.cxx+g");
38 /* open file, get tree and connect */
39 TFile *filein = TFile::Open(filename);
40 TTree *treein = (TTree *)filein->Get("aodTree");
41 printf("got \"aodTree\": %d entries\n", treein->GetEntries());
42 AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
43 TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
44 AliAnalysisTrack *analysisTrack = NULL;
45 TClonesArray *analysisParticleArray = new TClonesArray("AliAnalysisParticle");
46 AliAnalysisParticle *analysisParticle = NULL;
47 treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
48 treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);
49 treein->SetBranchAddress("AnalysisParticle", &analysisParticleArray);
52 for (Int_t iy = 0; iy < NyBins + 1; iy++)
53 yBin[iy] = yMin + iy * yStep;
54 for (Int_t ieta = 0; ieta < NetaBins + 1; ieta++)
55 etaBin[ieta] = etaMin + ieta * etaStep;
56 for (Int_t iphi = 0; iphi < NphiBins + 1; iphi++)
57 phiBin[iphi] = phiMin + iphi * phiStep;
59 Int_t NparamBins[kNParams] = {NcentralityBins, NptBins, NetaBins, NphiBins, NyBins};
60 Double_t *paramBin[kNParams] = {centralityBin, ptBin, etaBin, phiBin, yBin};
61 THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
62 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
63 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
64 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
65 hHisto[ihisto][ipart][icharge] = new THnSparseF(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), "", kNParams, NparamBins);
66 for (Int_t iparam = 0; iparam < kNParams; iparam++)
67 hHisto[ihisto][ipart][icharge]->SetBinEdges(iparam, paramBin[iparam]);
70 /* selected particle array */
71 AliAnalysisParticle *selParticle[1000000];
72 for (Int_t idx = 0; idx < 1000000; idx++)
73 selParticle[idx] = NULL;
75 /* filled slot array */
76 Int_t filledSlot[1000000];
77 Int_t nFilledSlots = 0;
80 /* loop over events */
81 Double_t param[kNParams];
83 for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
85 treein->GetEvent(iev);
86 if (iev % 1000 == 0) printf("iev = %d\n", iev);
88 if (!analysisEvent->AcceptVertex()) continue;
89 /* check collision candidate */
90 if (!analysisEvent->IsCollisionCandidate()) continue;
91 /* check centrality quality */
92 if (analysisEvent->GetCentralityQuality() != 0.) continue;
93 param[kCentrality] = analysisEvent->GetCentralityPercentile(centralityEstimator);
95 /*** ACCEPTED EVENT ***/
97 /* reset filled slots selected particle array */
98 for (Int_t islot = 0; islot < nFilledSlots; islot++)
99 selParticle[filledSlot[islot]] = NULL;
100 /* reset filled slots */
103 /* loop over primaries */
104 for (Int_t iprim = 0; iprim < analysisParticleArray->GetEntries(); iprim++) {
105 /* get and check particle */
106 analysisParticle = (AliAnalysisParticle *)analysisParticleArray->At(iprim);
107 if (!analysisParticle || analysisParticle->GetPID() == -1 || analysisParticle->GetLabel() < 0 || analysisParticle->GetSign() == 0.) continue;
110 if (analysisParticle->GetY() - rapidityShift > rapidityMaxCut ||
111 analysisParticle->GetY() - rapidityShift < rapidityMinCut)
114 /*** ACCEPTED PARTICLE ***/
116 /* get particle info */
117 part = analysisParticle->GetPID();
118 param[kPt] = analysisParticle->GetPt();
119 param[kEta] = analysisParticle->GetEta();
120 param[kPhi] = analysisParticle->GetPhi();
121 charge = analysisParticle->GetSign() > 0. ? kPositive : kNegative;
123 /* fill histo and slot */
124 hHisto[kPrimaryTracks][part][charge]->Fill(param);
125 selParticle[analysisParticle->GetLabel()] = analysisParticle;
126 filledSlot[nFilledSlots] = analysisParticle->GetLabel();
131 /* loop over tracks */
132 for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
133 /* get and check track */
134 analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
135 if (!analysisTrack) continue;
136 /* check accepted track */
137 if (!analysisTrack->AcceptTrack()) continue;
138 /* get corresponding particle */
139 analysisParticle = selParticle[TMath::Abs(analysisTrack->GetLabel())];
140 if (!analysisParticle) continue;
142 /*** ACCEPTED PARTICLE WITH RECONSTRUCTED TRACK ***/
144 /* get particle info */
145 part = analysisParticle->GetPID();
146 param[kPt] = analysisParticle->GetPt();
147 param[kEta] = analysisParticle->GetEta();
148 param[kPhi] = analysisParticle->GetPhi();
149 charge = analysisParticle->GetSign() > 0. ? kPositive : kNegative;
151 /* fill reconstructed histo */
152 hHisto[kReconstructedTracks][part][charge]->Fill(param);
158 TFile *fileout = TFile::Open(Form("TrackingEff.%s", filename), "RECREATE");
159 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
160 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
161 for (Int_t icharge = 0; icharge < kNCharges; icharge++)
162 hHisto[ihisto][ipart][icharge]->Write();
165 TString str = Form("TrackingEff.%s", filename);
166 TrackingEff_efficiencyPt(str.Data());
170 //_____________________________________________________________________________-
172 TrackingEff_efficiencyPt(const Char_t *filename)
176 TFile *filein = TFile::Open(filename);
177 THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
178 TH1D *hHistoPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hHistoPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
179 TH1D *hHistoAllPt_MB[kNHistos], *hHistoAllPt_centrality[NcentralityBins][kNHistos];
180 /* loop over histos */
181 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
185 hHistoAllPt_MB[ihisto] = new TH1D(Form("hHistoAllPt_MB_%s", histoName[ihisto]), "", NptBins, ptBin);
186 for (Int_t icent = 0; icent < NcentralityBins; icent++)
187 hHistoAllPt_centrality[icent][ihisto] = new TH1D(Form("hHistoAllPt_centrality%d_%s", icent, histoName[ihisto]), "", NptBins, ptBin);
189 /* SINGLE PARTICLE */
191 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
192 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
195 hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
198 hHistoPt_MB[ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kPt);
199 hHistoPt_MB[ihisto][ipart][icharge]->SetName(Form("hHistoPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
200 hHistoPt_MB[ihisto][ipart][icharge]->Sumw2();
201 hHistoAllPt_MB[ihisto]->Add(hHistoPt_MB[ihisto][ipart][icharge]);
203 /* centrality projection */
204 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
205 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
206 hHistoPt_centrality[icent][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kPt);
207 hHistoPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hHistoPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
208 hHistoPt_centrality[icent][ihisto][ipart][icharge]->Sumw2();
209 hHistoAllPt_centrality[icent][ihisto]->Add(hHistoPt_centrality[icent][ihisto][ipart][icharge]);
216 TString str = filename;
217 str.Insert(str.Length() - TString(".root").Length(), ".efficiencyPt");
218 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
220 /* efficiencies/fractions and write */
221 TH1D *hEfficiencyPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPt_ratioMB_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
222 TH1D *hEfficiencyAllPt_MB[kNHistos], *hEfficiencyAllPt_centrality[NcentralityBins][kNHistos], *hEfficiencyAllPt_ratioMB_centrality[NcentralityBins][kNHistos];
224 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
226 if (ihisto == kPrimaryTracks) continue;
231 hEfficiencyAllPt_MB[ihisto] = new TH1D(*hHistoAllPt_MB[ihisto]);
232 hEfficiencyAllPt_MB[ihisto]->SetName(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
233 hEfficiencyAllPt_MB[ihisto]->SetLineWidth(2);
234 hEfficiencyAllPt_MB[ihisto]->SetLineColor(1);
235 hEfficiencyAllPt_MB[ihisto]->SetMarkerStyle(20);
236 hEfficiencyAllPt_MB[ihisto]->SetMarkerColor(1);
237 hEfficiencyAllPt_MB[ihisto]->Divide(hEfficiencyAllPt_MB[ihisto], hHistoAllPt_MB[kPrimaryTracks], 1, 1, "B");
238 hEfficiencyAllPt_MB[ihisto]->Write();
240 /* multiplicity/centrality efficiency */
241 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
242 hEfficiencyAllPt_centrality[icent][ihisto] = new TH1D(*hHistoAllPt_centrality[icent][ihisto]);
243 hEfficiencyAllPt_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
244 hEfficiencyAllPt_centrality[icent][ihisto]->SetLineWidth(2);
245 hEfficiencyAllPt_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
246 hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerStyle(20);
247 hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
248 hEfficiencyAllPt_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_centrality[icent][ihisto], hHistoAllPt_centrality[icent][kPrimaryTracks], 1, 1, "B");
249 hEfficiencyAllPt_centrality[icent][ihisto]->Write();
252 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto] = new TH1D(*hEfficiencyAllPt_centrality[icent][ihisto]);
253 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_ratioMB_centrality%d_%s", icent, histoName[ihisto]));
254 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineWidth(2);
255 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
256 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerStyle(20);
257 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
258 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_MB[ihisto]);
259 hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Write();
262 /* SINGLE PARTICLE */
264 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
265 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
268 hEfficiencyPt_MB[ihisto][ipart][icharge] = new TH1D(*hHistoPt_MB[ihisto][ipart][icharge]);
269 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
270 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetLineWidth(2);
271 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetLineColor(1);
272 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetMarkerStyle(20);
273 hEfficiencyPt_MB[ihisto][ipart][icharge]->SetMarkerColor(1);
274 hEfficiencyPt_MB[ihisto][ipart][icharge]->Divide(hEfficiencyPt_MB[ihisto][ipart][icharge], hHistoPt_MB[kPrimaryTracks][ipart][icharge], 1, 1, "B");
275 hEfficiencyPt_MB[ihisto][ipart][icharge]->Write();
277 /* multiplicity/centrality efficiency */
278 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
279 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hHistoPt_centrality[icent][ihisto][ipart][icharge]);
280 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
281 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
282 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
283 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
284 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
285 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPt_centrality[icent][ihisto][ipart][icharge], hHistoPt_centrality[icent][kPrimaryTracks][ipart][icharge], 1, 1, "B");
286 hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]->Write();
289 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hEfficiencyPt_centrality[icent][ihisto][ipart][icharge]);
290 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
291 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
292 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
293 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
294 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
295 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPt_MB[ihisto][ipart][icharge]);
296 hEfficiencyPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Write();
305 TrackingEff_trackingEfficiency(str.Data());
308 //_____________________________________________________________________________-
310 TrackingEff_efficiencyEta(const Char_t *filename)
314 TFile *filein = TFile::Open(filename);
315 THnSparseF *hHisto[kNHistos][AliPID::kSPECIES][kNCharges];
316 TH1D *hHistoEta_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hHistoEta_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
317 TH1D *hHistoEta_MB_pt[NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges], *hHistoEta_centrality_pt[NcentralityBins][NptsubBins][kNHistos][AliPID::kSPECIES][kNCharges];
318 /* loop over histos */
319 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
320 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
321 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
324 hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
327 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(0, 0);
328 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
329 hHistoEta_MB[ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
330 hHistoEta_MB[ihisto][ipart][icharge]->SetName(Form("hHistoEta_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
331 hHistoEta_MB[ihisto][ipart][icharge]->Sumw2();
333 for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
334 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
335 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
336 hHistoEta_MB_pt[ipt][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
337 hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]->SetName(Form("hHistoEta_MB_pt%d_%s_%s_%s", ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
338 hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]->Sumw2();
341 /* centrality projection */
342 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
343 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(0, 0);
344 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
345 hHistoEta_centrality[icent][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
346 hHistoEta_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hHistoEta_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
347 hHistoEta_centrality[icent][ihisto][ipart][icharge]->Sumw2();
349 for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
350 hHisto[ihisto][ipart][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
351 hHisto[ihisto][ipart][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
352 hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge] = hHisto[ihisto][ipart][icharge]->Projection(kEta);
353 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]));
354 hHistoEta_centrality_pt[icent][ipt][ihisto][ipart][icharge]->Sumw2();
360 TString str = filename;
361 str.Insert(str.Length() - TString(".root").Length(), ".efficiencyEta");
362 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
364 /* efficiencies/fractions and write */
365 TH1D *hEfficiencyEta_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyEta_ratioMB_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
366 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];
368 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
369 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
370 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
372 if (ihisto == kPrimaryTracks) continue;
375 hEfficiencyEta_MB[ihisto][ipart][icharge] = new TH1D(*hHistoEta_MB[ihisto][ipart][icharge]);
376 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
377 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetLineWidth(2);
378 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetLineColor(1);
379 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetMarkerStyle(20);
380 hEfficiencyEta_MB[ihisto][ipart][icharge]->SetMarkerColor(1);
381 hEfficiencyEta_MB[ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB[ihisto][ipart][icharge], hHistoEta_MB[kPrimaryTracks][ipart][icharge], 1, 1, "B");
382 hEfficiencyEta_MB[ihisto][ipart][icharge]->Write();
384 for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
385 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge] = new TH1D(*hHistoEta_MB_pt[ipt][ihisto][ipart][icharge]);
386 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_MB_pt%d_%s_%s_%s", ipt, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
387 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetLineWidth(2);
388 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetLineColor(1);
389 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetMarkerStyle(20);
390 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->SetMarkerColor(1);
391 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");
392 hEfficiencyEta_MB_pt[ipt][ihisto][ipart][icharge]->Write();
395 /* multiplicity/centrality efficiency */
396 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
397 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hHistoEta_centrality[icent][ihisto][ipart][icharge]);
398 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
399 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
400 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
401 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
402 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
403 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyEta_centrality[icent][ihisto][ipart][icharge], hHistoEta_centrality[icent][kPrimaryTracks][ipart][icharge], 1, 1, "B");
404 hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]->Write();
407 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hEfficiencyEta_centrality[icent][ihisto][ipart][icharge]);
408 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyEta_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
409 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
410 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
411 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
412 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
413 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyEta_MB[ihisto][ipart][icharge]);
414 hEfficiencyEta_ratioMB_centrality[icent][ihisto][ipart][icharge]->Write();
424 //_____________________________________________________________________________-
426 TrackingEff_centralityDependence(const Char_t *filename)
429 Double_t fitMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
430 Double_t fitMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
432 TF1 *pol0 = (TF1 *)gROOT->GetFunction("pol0");
433 TF1 *pol1 = (TF1 *)gROOT->GetFunction("pol1");
434 pol0->SetRange(0., 5.0);
435 TFile *filein = TFile::Open(filename);
438 TString str = filename;
439 str.Insert(str.Length() - TString(".root").Length(), ".centralityDependence");
440 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
442 TH1D *hEfficiencyPt_ratioMB;
443 TH1D *hEfficiencyCentrality[kNHistos][AliPID::kSPECIES][kNCharges];
444 TH1D *hChi2Centrality[kNHistos][AliPID::kSPECIES][kNCharges];
445 TH1D *hEfficiencyAllCentrality[kNHistos];
446 TH1F *hHistoEffRatio = new TH1F("hHistoEffRatio", "", 100, 0.5, 1.5);
447 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
448 if (ihisto == kPrimaryTracks) continue;
452 hEfficiencyAllCentrality[ihisto] = new TH1D(Form("hEfficiencyAllCentrality_ratioMB_%s", histoName[ihisto]), "", NcentralityBins, centralityBin);
453 hEfficiencyAllCentrality[ihisto]->SetLineWidth(2);
454 hEfficiencyAllCentrality[ihisto]->SetLineColor(1);
455 hEfficiencyAllCentrality[ihisto]->SetMarkerStyle(20);
456 hEfficiencyAllCentrality[ihisto]->SetMarkerColor(1);
458 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
460 hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyAllPt_ratioMB_centrality%d_%s", icent, histoName[ihisto]));
461 hEfficiencyPt_ratioMB->Fit(pol0, "q0", "", 0., 5.0);
462 hEfficiencyAllCentrality[ihisto]->SetBinContent(icent + 1, pol0->GetParameter(0));
463 hEfficiencyAllCentrality[ihisto]->SetBinError(icent + 1, pol0->GetParError(0));
464 hEfficiencyPt_ratioMB->Add(pol0, -1.);
465 hEfficiencyPt_ratioMB->Write();
468 hEfficiencyAllCentrality[ihisto]->Write();
471 /* SINGLE PARTICLE */
473 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++)
474 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
476 hEfficiencyCentrality[ihisto][ipart][icharge] = new TH1D(Form("hEfficiencyCentrality_ratioMB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), "", NcentralityBins, centralityBin);
477 hEfficiencyCentrality[ihisto][ipart][icharge]->SetLineWidth(2);
478 hEfficiencyCentrality[ihisto][ipart][icharge]->SetLineColor(particleColor[ipart]);
479 hEfficiencyCentrality[ihisto][ipart][icharge]->SetMarkerStyle(chargeMarker[icharge]);
480 hEfficiencyCentrality[ihisto][ipart][icharge]->SetMarkerColor(particleColor[ipart]);
482 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
484 hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
486 hEfficiencyPt_ratioMB->Fit(pol0, "q0", "", fitMin[ipart], fitMax[ipart]);
487 hEfficiencyCentrality[ihisto][ipart][icharge]->SetBinContent(icent + 1, pol0->GetParameter(0));
488 hEfficiencyCentrality[ihisto][ipart][icharge]->SetBinError(icent + 1, pol0->GetParError(0));
489 pol0->SetRange(fitMin[ipart], fitMax[ipart]);
490 hEfficiencyPt_ratioMB->Add(pol0, -1.);
491 hEfficiencyPt_ratioMB->Write();
495 hEfficiencyCentrality[ihisto][ipart][icharge]->Write();
502 //_____________________________________________________________________________-
504 TrackingEff_centralityDependenceFit(const Char_t *filename, Int_t ihisto = kReconstructedTracks)
507 const Char_t *particleLabel[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};
509 TF1 *fCentralityDependence = new TF1("fCentralityDependence", "[0] + [1] * (1. - TMath::Exp(-x / [2]))", 0., 90.);
510 fCentralityDependence->SetParameter(0, 0.98);
511 fCentralityDependence->SetParameter(1, 0.05);
512 fCentralityDependence->SetParameter(2, 50.);
514 TFile *filein = TFile::Open(filename);
515 TH1D *hEfficiencyAllCentrality;
516 TH1D *hEfficiencyCentrality[AliPID::kSPECIES][kNCharges];
517 hEfficiencyAllCentrality = (TH1D *)filein->Get(Form("hEfficiencyAllCentrality_ratioMB_%s", histoName[ihisto]));
518 TCanvas *cFit = new TCanvas("cFit");
519 hEfficiencyAllCentrality->Fit(fCentralityDependence);
520 hEfficiencyAllCentrality->SetMaximum(1.05);
521 hEfficiencyAllCentrality->SetMinimum(0.95);
522 TCanvas *cRatios = new TCanvas("cRatios");
523 cRatios->Divide(2, 3);
524 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
525 for (Int_t icharge = 0; icharge < 2; icharge++) {
526 cRatios->cd(icharge + 1 + 2 * (ipart - 2));
527 cRatios->cd(icharge + 1 + 2 * (ipart - 2))->SetGridx();
528 cRatios->cd(icharge + 1 + 2 * (ipart - 2))->SetGridy();
529 hEfficiencyCentrality[ipart][icharge] = (TH1D *)filein->Get(Form("hEfficiencyCentrality_ratioMB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
530 hEfficiencyCentrality[ipart][icharge]->Divide(fCentralityDependence);
531 hEfficiencyCentrality[ipart][icharge]->SetMaximum(1.05);
532 hEfficiencyCentrality[ipart][icharge]->SetMinimum(0.95);
533 hEfficiencyCentrality[ipart][icharge]->SetTitle(Form("%s;centrality percentile;efficiency ratio wrt. fitted centrality dependence", particleLabel[ipart][icharge]));
534 hEfficiencyCentrality[ipart][icharge]->SetStats(kFALSE);
535 hEfficiencyCentrality[ipart][icharge]->Draw();
543 //_____________________________________________________________________________-
545 TrackingEff_efficiencyPt_MB_plot(const Char_t *filename)
547 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 2, 0, 20, 4);
548 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 2, 1, 25, 4);
549 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 3, 0, 20, 8);
550 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 3, 1, 25, 8);
551 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 4, 0, 20, 2);
552 TrackingEff_efficiencyPt_MB_plot(filename, kReconstructedTracks, 4, 1, 25, 2);
556 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 = "")
559 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
560 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
562 Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
563 Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
565 TF1 *fEff = new TF1("fEff", "[0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4]))", 0.5, 5.0);
566 fEff->SetParameter(0, 0.8);
567 fEff->SetParameter(1, -0.01);
568 fEff->SetParameter(2, 2.0);
569 fEff->SetParameter(3, 1.);
570 fEff->SetParameter(4, 2.);
572 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
574 TFile *filein = TFile::Open(filename);
575 TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
576 hEfficiencyPt->Fit(fEff, "0", "IME", 0.5, 5.0);
577 hEfficiencyPt->SetTitle(Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]));
578 hEfficiencyPt->SetMinimum(0.4);
579 hEfficiencyPt->SetMaximum(0.8);
580 hEfficiencyPt->SetMarkerStyle(marker);
581 hEfficiencyPt->SetMarkerColor(color);
582 hEfficiencyPt->SetMarkerSize(1.5);
583 hEfficiencyPt->SetLineWidth(2);
584 hEfficiencyPt->SetLineColor(color);
585 hEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
586 hEfficiencyPt->SetStats(kFALSE);
588 hEfficiencyPt->DrawCopy();
589 fEff->DrawCopy("same");
591 hEfficiencyPt->Write("hEfficiencyPt");
594 cCanvas1->SetGridx();
595 cCanvas1->SetGridy();
596 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
597 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
598 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
600 TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
601 hRatioPt->Divide(fEff);
602 hRatioPt->SetTitle(Form("%s;p_{T} (GeV/c);ratio wrt. fitted dependence;", partChargeName[ipart][icharge]));
603 hRatioPt->SetMinimum(0.9);
604 hRatioPt->SetMaximum(1.1);
606 hRatioPt->DrawCopy();
608 hRatioPt->Write("hRatioPt");
610 cCanvas2->SetGridx();
611 cCanvas2->SetGridy();
612 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
613 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
614 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
619 // hEfficiencyPt->Add(fEff, -1.);
620 return hEfficiencyPt;
623 //_____________________________________________________________________________-
626 TrackingEff_efficiencyPt_centrality_all_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t marker = 20, Int_t color = 1, Option_t *opt = "")
629 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
630 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
632 Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
633 Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
635 TF1 *fEff = new TF1("fEff", "[5] * ([0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4])))", 0.5, 5.0);
636 fEff->SetParameter(0, 0.8);
637 fEff->SetParameter(1, -0.01);
638 fEff->SetParameter(2, 2.0);
639 fEff->SetParameter(3, 1.);
640 fEff->SetParameter(4, 2.);
641 fEff->FixParameter(5, 1.);
643 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_all.root", destdir), "RECREATE");
645 TFile *filein = TFile::Open(filename);
646 TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
647 hEfficiencyPt->Fit(fEff, "0", "IME", 0.5, 5.0);
648 hEfficiencyPt->SetTitle("all particles;p_{T} (GeV/c);acceptance #times efficiency;");
649 hEfficiencyPt->SetMinimum(0.4);
650 hEfficiencyPt->SetMaximum(0.8);
651 hEfficiencyPt->SetMarkerStyle(marker);
652 hEfficiencyPt->SetMarkerColor(color);
653 hEfficiencyPt->SetMarkerSize(1.5);
654 hEfficiencyPt->SetLineWidth(2);
655 hEfficiencyPt->SetLineColor(color);
656 hEfficiencyPt->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
657 hEfficiencyPt->SetStats(kFALSE);
659 hEfficiencyPt->DrawCopy();
660 fEff->DrawCopy("same");
662 hEfficiencyPt->Write("hEfficiencyPt");
665 cCanvas1->SetGridx();
666 cCanvas1->SetGridy();
667 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.C", destdir));
668 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.png", destdir));
669 cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.eps", destdir));
671 TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
672 hRatioPt->Divide(fEff);
673 hRatioPt->SetTitle("all particles;p_{T} (GeV/c);ratio wrt. fitted dependence;");
674 hRatioPt->SetMinimum(0.9);
675 hRatioPt->SetMaximum(1.1);
677 hRatioPt->DrawCopy();
679 hRatioPt->Write("hRatioPt");
681 cCanvas2->SetGridx();
682 cCanvas2->SetGridy();
683 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.C", destdir));
684 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.png", destdir));
685 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.eps", destdir));
687 /* fix efficiency shape and release scale factor */
688 fEff->FixParameter(0, fEff->GetParameter(0));
689 fEff->FixParameter(1, fEff->GetParameter(1));
690 fEff->FixParameter(2, fEff->GetParameter(2));
691 fEff->FixParameter(3, fEff->GetParameter(3));
692 fEff->FixParameter(4, fEff->GetParameter(4));
693 fEff->ReleaseParameter(5);
695 TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", "all particles;centrality percentile;acceptance x efficiency scale factor;", NcentralityBins, centralityBin);
696 hEfficiencyCent->SetMinimum(0.95);
697 hEfficiencyCent->SetMaximum(1.05);
698 hEfficiencyCent->SetMarkerStyle(marker);
699 hEfficiencyCent->SetMarkerColor(color);
700 hEfficiencyCent->SetMarkerSize(1.5);
701 hEfficiencyCent->SetLineWidth(2);
702 hEfficiencyCent->SetLineColor(color);
703 hEfficiencyCent->SetStats(kFALSE);
706 TH1D *hEfficiencyPt_cent[NcentralityBins];
707 TH1D *hRatioPt_cent[NcentralityBins];
708 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
711 hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
712 hEfficiencyPt_cent[icent]->Fit(fEff, "0", "IME", 1.0, 3.0);
713 hEfficiencyPt_cent[icent]->Fit(fEff, "", "IME", 0.5, 5.0);
715 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]));
716 hEfficiencyPt_cent[icent]->SetMinimum(0.2);
717 hEfficiencyPt_cent[icent]->SetMaximum(0.8);
718 hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
719 hEfficiencyPt_cent[icent]->SetMarkerColor(color);
720 hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
721 hEfficiencyPt_cent[icent]->SetLineWidth(2);
722 hEfficiencyPt_cent[icent]->SetLineColor(color);
723 hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
724 hEfficiencyPt_cent[icent]->SetStats(kFALSE);
726 hEfficiencyPt_cent[icent]->DrawCopy();
727 fEff->DrawCopy("same");
729 hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
730 fEff->Write(Form("fEff_cent%d", icent));
732 hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
733 hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
735 cCanvas1->SetGridx();
736 cCanvas1->SetGridy();
737 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.C", destdir, icent));
738 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.png", destdir, icent));
739 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.eps", destdir, icent));
741 hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
742 hRatioPt_cent[icent]->Divide(fEff);
743 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]));
744 hRatioPt_cent[icent]->SetMinimum(0.9);
745 hRatioPt_cent[icent]->SetMaximum(1.1);
747 hRatioPt_cent[icent]->DrawCopy();
749 hRatioPt_cent[icent]->Write(Form("hRatio_cent%d", icent));
751 cCanvas2->SetGridx();
752 cCanvas2->SetGridy();
753 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.C", destdir, icent));
754 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.png", destdir, icent));
755 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.eps", destdir, icent));
760 TF1 *fEffCent = new TF1("fEffCent", "[0] - [1] * TMath::Exp(-[2] * TMath::Power(x, [3]))", 0., 90.);
761 fEffCent->SetParameter(0, 1.02);
762 fEffCent->SetParameter(1, 0.04);
763 fEffCent->SetParameter(2, 0.001);
764 fEffCent->SetParameter(3, 2.);
765 hEfficiencyCent->Fit(fEffCent, "q0", "IME", 0., 90.);
767 TCanvas *cCanvas3 = new TCanvas("cCanvas3");
768 hEfficiencyCent->DrawCopy();
769 fEffCent->DrawCopy("same");
771 hEfficiencyCent->Write("hEfficiencyCent");
772 fEffCent->Write("fEffCent");
774 cCanvas3->SetGridx();
775 cCanvas3->SetGridy();
776 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.C", destdir));
777 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.png", destdir));
778 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.eps", destdir));
780 TCanvas *cCanvas4 = new TCanvas("cCanvas4");
782 TH1D *hRatioCent = new TH1D(*hEfficiencyCent);
783 hRatioCent->Divide(fEffCent);
784 hRatioCent->SetTitle(Form("all particles;centrality percentile;ratio wrt. fitted dependence;"));
785 hRatioCent->SetMinimum(0.95);
786 hRatioCent->SetMaximum(1.05);
788 hRatioCent->DrawCopy();
790 hRatioCent->Write("hRatioCent");
792 cCanvas4->SetGridx();
793 cCanvas4->SetGridy();
794 cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.C", destdir));
795 cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.png", destdir));
796 cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.eps", destdir));
800 // hEfficiencyPt->Add(fEff, -1.);
801 return hEfficiencyCent;
805 //_____________________________________________________________________________-
807 TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename)
809 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 2, 0, 20, 4);
810 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 2, 1, 25, 4);
811 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 3, 0, 20, 8);
812 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 3, 1, 25, 8);
813 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 4, 0, 20, 2);
814 TrackingEff_efficiencyPt_centrality_plot(filename, kReconstructedTracks, 4, 1, 25, 2);
818 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 = "")
821 TVirtualFitter::SetMaxIterations(1000000);
823 /* load HistoUtils */
824 gROOT->LoadMacro("HistoUtils.C");
826 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
827 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
828 TCanvas *cCanvas5 = new TCanvas("cCanvas5");
830 Double_t ptMin[AliPID::kSPECIES] = {0.5, 0.5, 0.5, 0.5, 0.5};
831 Double_t ptMax[AliPID::kSPECIES] = {3.0, 3.0, 3.0, 3.0, 5.0};
833 /* fit minimum-bias efficiency pt */
835 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]);
836 fEff->SetParameter(0, 0.5);
837 fEff->SetParameter(1, 0.1);
838 fEff->SetParameter(2, 2.);
839 fEff->SetParameter(3, 0.);
840 fEff->SetParameter(4, 0.001);
841 fEff->SetParameter(5, 1.);
842 Int_t nPars = fEff->GetNpar();
844 TF1 *fEffCopy = new TF1(*fEff);
846 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_centrality_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
848 TFile *filein = TFile::Open(filename);
849 TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
850 hEfficiencyPt->Fit(fEff, "0", "IMRE", ptMin[ipart], ptMax[ipart]);
852 /* build efficiency profile */
853 for (Int_t ipar = 0; ipar < nPars; ipar++) {
854 fEffCopy->SetParameter(ipar, fEff->GetParameter(ipar));
855 fEffCopy->SetParError(ipar, fEff->GetParError(ipar));
857 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");
858 HistoUtils_Function2Profile(fEffCopy, pEfficiencyPt);
862 pEfficiencyPt->SetMarkerStyle(marker);
863 pEfficiencyPt->SetMarkerColor(color);
864 pEfficiencyPt->SetMarkerSize(0);
865 pEfficiencyPt->SetLineWidth(2);
866 pEfficiencyPt->SetLineColor(color);
867 pEfficiencyPt->SetFillStyle(3001);
868 pEfficiencyPt->SetFillColor(color);
869 pEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
870 pEfficiencyPt->SetStats(kFALSE);
871 pEfficiencyPt->DrawCopy("E2");
873 hEfficiencyPt->SetTitle(Form("%s;p_{T} (GeV/c);acceptance #times efficiency;", partChargeName[ipart][icharge]));
874 hEfficiencyPt->SetMarkerStyle(marker);
875 hEfficiencyPt->SetMarkerColor(color);
876 hEfficiencyPt->SetMarkerSize(1.5);
877 hEfficiencyPt->SetLineWidth(2);
878 hEfficiencyPt->SetLineColor(color);
879 hEfficiencyPt->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
880 hEfficiencyPt->SetStats(kFALSE);
881 hEfficiencyPt->DrawCopy("same");
882 fEff->DrawCopy("same");
887 pEfficiencyPt->Write("pEfficiencyPt");
888 hEfficiencyPt->Write("hEfficiencyPt");
891 TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", Form("%s;centrality percentile;acceptance x efficiency scale factor;", partChargeName[ipart][icharge]), NcentralityBins, centralityBin);
892 hEfficiencyCent->SetMinimum(0.9);
893 hEfficiencyCent->SetMaximum(1.1);
894 hEfficiencyCent->SetMarkerStyle(marker);
895 hEfficiencyCent->SetMarkerColor(color);
896 hEfficiencyCent->SetMarkerSize(1.5);
897 hEfficiencyCent->SetLineWidth(2);
898 hEfficiencyCent->SetLineColor(color);
899 hEfficiencyCent->SetStats(kFALSE);
901 TProfile *pEfficiencyPt_cent[NcentralityBins];
902 TH1D *hEfficiencyPt_cent[NcentralityBins];
903 TH1D *hRatioPt_cent[NcentralityBins];
905 /* fix efficiency shape and release scale factor */
906 for (Int_t ipar = 0; ipar < nPars; ipar++)
907 fEff->FixParameter(ipar, fEff->GetParameter(ipar));
908 fEff->ReleaseParameter(scalePar);
910 gStyle->SetOptStat(1100);
911 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
913 hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
914 hEfficiencyPt_cent[icent]->Fit(fEff, "", "IME", ptMin[ipart], ptMax[ipart]);
916 /* build efficiency profile */
917 fEffCopy->SetParameter(scalePar, fEff->GetParameter(scalePar));
918 fEffCopy->SetParError(scalePar, fEff->GetParError(scalePar));
919 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");
920 HistoUtils_Function2Profile(fEffCopy, pEfficiencyPt_cent[icent]);
924 pEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
925 pEfficiencyPt_cent[icent]->SetMarkerColor(color);
926 pEfficiencyPt_cent[icent]->SetMarkerSize(0);
927 pEfficiencyPt_cent[icent]->SetLineWidth(2);
928 pEfficiencyPt_cent[icent]->SetLineColor(color);
929 pEfficiencyPt_cent[icent]->SetFillStyle(3001);
930 pEfficiencyPt_cent[icent]->SetFillColor(color);
931 pEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
932 pEfficiencyPt_cent[icent]->SetStats(kFALSE);
933 pEfficiencyPt_cent[icent]->DrawCopy("E2");
935 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]));
936 hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
937 hEfficiencyPt_cent[icent]->SetMarkerColor(color);
938 hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
939 hEfficiencyPt_cent[icent]->SetLineWidth(2);
940 hEfficiencyPt_cent[icent]->SetLineColor(color);
941 hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(ptMin[ipart] + 0.001, ptMax[ipart] - 0.001);
942 hEfficiencyPt_cent[icent]->SetStats(kFALSE);
943 hEfficiencyPt_cent[icent]->DrawCopy("same");
944 fEff->DrawCopy("same");
948 pEfficiencyPt_cent[icent]->Write(Form("pEfficiencyPt_cent%d", icent));
949 hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
950 fEff->Write(Form("fEff_cent%d", icent));
952 hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
953 hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
955 cCanvas1->SetGridx();
956 cCanvas1->SetGridy();
957 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.C", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
958 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.png", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
959 cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_%s_%s.eps", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
961 hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
962 hRatioPt_cent[icent]->Divide(fEff);
963 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]));
964 hRatioPt_cent[icent]->SetMinimum(0.75);
965 hRatioPt_cent[icent]->SetMaximum(1.25);
967 hRatioPt_cent[icent]->DrawCopy();
969 hRatioPt_cent[icent]->Write(Form("hRatioPt_cent%d", icent));
972 cCanvas2->SetGridx();
973 cCanvas2->SetGridy();
974 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.C", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
975 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.png", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
976 cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_%s_%s.eps", destdir, icent, AliPID::ParticleName(ipart), chargeName[icharge]));
980 TCanvas *cCanvas3 = new TCanvas("cCanvas3");
981 hEfficiencyCent->DrawCopy();
983 hEfficiencyCent->Write("hEfficiencyCent");
985 cCanvas3->SetGridx();
986 cCanvas3->SetGridy();
987 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.C", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
988 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.png", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
989 cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_%s_%s.eps", destdir, AliPID::ParticleName(ipart), chargeName[icharge]));
991 // hEfficiencyPt->Add(fEff, -1.);
992 return hEfficiencyCent;
995 TrackingEff_trackingEfficiency(const Char_t *filename, Bool_t useGFcorrection =kTRUE)
998 Int_t marker[2] = {20, 21};
999 Int_t color[AliPID::kSPECIES] = {1, 1, 4, 8, 2};
1000 Char_t *partLatex[AliPID::kSPECIES][2] = {
1001 "", "", "#pi^{+}", "K^{+}", "p",
1002 "", "", "#pi^{-}", "K^{-}", "#bar{p}"
1005 TFile *filein = TFile::Open(filename);
1006 if (useGFcorrection)
1007 TFile *fileout = TFile::Open("TOF_trackingEfficiency.root", "RECREATE");
1009 TFile *fileout = TFile::Open("TOF_trackingEfficiency_noGF.root", "RECREATE");
1013 for (Int_t icent = -1; icent < NcentralityBins; icent++)
1014 for (Int_t icharge = 0; icharge < kNCharges; icharge++)
1015 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
1017 hEff = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_hReconstructedTracks_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
1019 hEff = (TH1D *)filein->Get(Form("hEfficiencyPt_centrality%d_hReconstructedTracks_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1020 /* geant-fluka correction */
1021 fGF = TrackingEff_geantflukaCorrection(ipart, icharge);
1022 if (useGFcorrection)
1025 sprintf(title, "%s (MB);p_{T} (GeV/c);tracking efficiency;", partLatex[ipart][icharge]);
1027 sprintf(title, "%s (%d-%d%%);p_{T} (GeV/c);tracking efficiency;", partLatex[ipart][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1]);
1028 hEff->SetMarkerStyle(marker[icharge]);
1029 hEff->SetMarkerColor(color[ipart]);
1030 hEff->SetLineColor(1);
1031 hEff->SetLineWidth(1);
1032 hEff->SetTitle(title);
1034 hEff->SetName(Form("hTrackingEff_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
1036 hEff->SetName(Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1045 TrackingEff_geantflukaCorrection(Int_t ipart, Int_t icharge)
1048 if (ipart == 3 && icharge == kNegative) {
1049 TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
1052 // else if (ipart == 4 && icharge == kNegative) {
1053 // TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
1056 TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionNull(x)", 0., 5.);
1062 TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
1068 TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
1070 return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
1074 TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
1076 return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);