]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/PiKaPr/TOF/PbPb276/macros/TrackingEff.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TOF / PbPb276 / macros / TrackingEff.C
CommitLineData
48a73d39 1const Char_t *destdir = "plots";
2
3enum EHisto_t {
4 kPrimaryTracks,
5 kReconstructedTracks,
6 kNHistos
7};
8const Char_t *histoName[kNHistos] = {
9 "hPrimaryTracks",
10 "hReconstructedTracks"
11};
12
13enum ECharge_t {
14 kPositive,
15 kNegative,
16 kNCharges
17};
18const Char_t *chargeName[kNCharges] = {
19 "positive",
20 "negative"
21};
22
23enum EParam_t {
24 kCentrality,
25 kPt,
26 kEta,
27 kPhi,
28 kNParams
29};
30
31const Int_t NcentralityBins = 10;
32Double_t centralityBin[NcentralityBins + 1] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90.};
33
34const Int_t NptBins = 46;
35Double_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};
36
37const Int_t NetaBins = 20;
38Double_t etaMin = -1.;
39Double_t etaMax = 1.;
40Double_t etaStep = (etaMax - etaMin) / NetaBins;
41Double_t etaBin[NetaBins + 1]; /* computed at run-time */
42
43const Int_t NphiBins = 20;
44Double_t phiMin = 0.;
45Double_t phiMax = 2. * TMath::Pi();
46Double_t phiStep = (phiMax - phiMin) / NphiBins;
47Double_t phiBin[NphiBins + 1]; /* computed at run-time */
48
49const Int_t NptsubBins = 4;
50Double_t ptsubBin[NptsubBins + 1] = {0.2, 0.5, 1.0, 1.5, 5.0};
51Int_t ptsubBinMin[NptsubBins] = {0, 6, 16, 21};
52Int_t ptsubBinMax[NptsubBins] = {5, 15, 20, 45};
53
54Int_t multcentColor[10] = {
55 kRed,
56 kOrange+1,
57 kOrange,
58 kYellow,
59 kYellow+1,
60 kGreen,
61 kGreen+1,
62 kCyan+1,
63 kBlue,
64 kMagenta,
65 // kMagenta+1
66};
67
68Int_t particleColor[5] = {1, 1, 4, 8, 2};
69Int_t chargeMarker[2] = {20, 25};
70
71const Char_t *partChargeName[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};
72
73
74const Double_t kEpsilon = 0.001;
75
76TrackingEff(const Char_t *filename, Int_t evMax = kMaxInt)
77{
78
79 /* include path for ACLic */
80 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
81 gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
82 /* load libraries */
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");
89
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);
102
103 /* binning */
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;
108 /* THnSparse */
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]);
118 }
119
120 /* selected particle array */
121 AliAnalysisParticle *selParticle[1000000];
122 for (Int_t idx = 0; idx < 1000000; idx++)
123 selParticle[idx] = NULL;
124
125 /* filled slot array */
126 Int_t filledSlot[1000000];
127 Int_t nFilledSlots = 0;
128
129
130 /* loop over events */
131 Double_t param[kNParams];
132 Int_t part, charge;
133 for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
134 /* get event */
135 treein->GetEvent(iev);
136 if (iev % 1000 == 0) printf("iev = %d\n", iev);
137 /* check vertex */
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);
144
145 /*** ACCEPTED EVENT ***/
146
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 */
151 nFilledSlots = 0;
152
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;
158
159 /*** ACCEPTED PARTICLE ***/
160
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;
167
168 /* fill histo and slot */
169 hHisto[kPrimaryTracks][part][charge]->Fill(param);
170 selParticle[analysisParticle->GetLabel()] = analysisParticle;
171 filledSlot[nFilledSlots] = analysisParticle->GetLabel();
172 nFilledSlots++;
173
174 }
175
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;
186
187 /*** ACCEPTED PARTICLE WITH RECONSTRUCTED TRACK ***/
188
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;
195
196 /* fill reconstructed histo */
197 hHisto[kReconstructedTracks][part][charge]->Fill(param);
198
199 }
200
201 }
202
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();
208 fileout->Close();
209
210}
211
212//_____________________________________________________________________________-
213
214TrackingEff_efficiencyPt(const Char_t *filename)
215{
216
217 /* get data */
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++) {
224
225 /* INCLUSIVE */
226
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);
230
231 /* SINGLE PARTICLE */
232
233 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
234 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
235
236 /* get histo */
237 hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
238
239 /* MB projection */
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]);
244
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]);
252 }
253 }
254 }
255 }
256
257 /* output */
258 TString str = filename;
259 str.Insert(str.Length() - TString(".root").Length(), ".efficiencyPt");
260 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
261
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];
265
266 for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
267
268 if (ihisto == kPrimaryTracks) continue;
269
270 /* INCLUSIVE */
271
272 /* MB efficiency */
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();
281
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();
292
293 /* ratio wrt. MB */
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();
302 }
303
304 /* SINGLE PARTICLE */
305
306 for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
307 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
308
309 /* MB efficiency */
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();
318
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();
329
330 /* ratio wrt. MB */
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();
339 }
340
341 }
342 }
343 }
344
345 fileout->Close();
346
347}
348
349//_____________________________________________________________________________-
350
351TrackingEff_efficiencyEta(const Char_t *filename)
352{
353
354 /* get data */
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++) {
363
364 /* get histo */
365 hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
366
367 /* MB projection */
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();
373 /* pt bins */
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();
380 }
381
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();
389 /* pt bins */
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();
396 }
397 }
398 }
399
400 /* output */
401 TString str = filename;
402 str.Insert(str.Length() - TString(".root").Length(), ".efficiencyEta");
403 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
404
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];
408
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++) {
412
413 if (ihisto == kPrimaryTracks) continue;
414
415 /* MB efficiency */
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();
424 /* pt bins */
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();
434 }
435
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();
446
447 /* ratio wrt. MB */
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();
456 }
457
458 }
459 }
460
461 fileout->Close();
462
463}
464
465//_____________________________________________________________________________-
466
467TrackingEff_centralityDependence(const Char_t *filename)
468{
469
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};
472
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);
477
478 /* output */
479 TString str = filename;
480 str.Insert(str.Length() - TString(".root").Length(), ".centralityDependence");
481 TFile *fileout = TFile::Open(str.Data(), "RECREATE");
482
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;
490
491 /* INCLUSIVE */
492
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);
498
499 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
500
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();
507
508 }
509 hEfficiencyAllCentrality[ihisto]->Write();
510
511
512 /* SINGLE PARTICLE */
513
514 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++)
515 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
516
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]);
522
523 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
524
525 hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
526
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();
533
534 }
535
536 hEfficiencyCentrality[ihisto][ipart][icharge]->Write();
537 }
538 }
539
540 fileout->Close();
541}
542
543//_____________________________________________________________________________-
544
545TrackingEff_centralityDependenceFit(const Char_t *filename, Int_t ihisto = kReconstructedTracks)
546{
547
548 const Char_t *particleLabel[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};
549
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.);
554
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();
577 }
578 }
579
580
581}
582
583
584//_____________________________________________________________________________-
585
586TrackingEff_efficiencyPt_MB_plot(const Char_t *filename)
587{
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);
594}
595
596TH1D *
597TrackingEff_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 = "")
598{
599
600 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
601 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
602
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};
605
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.);
612
613 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
614
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);
628 cCanvas1->cd();
629 hEfficiencyPt->DrawCopy();
630 fEff->DrawCopy("same");
631 fileout->cd();
632 hEfficiencyPt->Write("hEfficiencyPt");
633 fEff->Write("fEff");
634
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]));
640
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);
646 cCanvas2->cd();
647 hRatioPt->DrawCopy();
648 fileout->cd();
649 hRatioPt->Write("hRatioPt");
650
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]));
656
657
658 fileout->Close();
659
660 // hEfficiencyPt->Add(fEff, -1.);
661 return hEfficiencyPt;
662}
663
664//_____________________________________________________________________________-
665
666TH1D *
667TrackingEff_efficiencyPt_centrality_all_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t marker = 20, Int_t color = 1, Option_t *opt = "")
668{
669
670 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
671 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
672
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};
675
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.);
683
684 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_all.root", destdir), "RECREATE");
685
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);
699 cCanvas1->cd();
700 hEfficiencyPt->DrawCopy();
701 fEff->DrawCopy("same");
702 fileout->cd();
703 hEfficiencyPt->Write("hEfficiencyPt");
704 fEff->Write("fEff");
705
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));
711
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);
717 cCanvas2->cd();
718 hRatioPt->DrawCopy();
719 fileout->cd();
720 hRatioPt->Write("hRatioPt");
721
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));
727
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);
735
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);
745
746
747 TH1D *hEfficiencyPt_cent[NcentralityBins];
748 TH1D *hRatioPt_cent[NcentralityBins];
749 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
750
751
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);
755
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);
766 cCanvas1->cd();
767 hEfficiencyPt_cent[icent]->DrawCopy();
768 fEff->DrawCopy("same");
769 fileout->cd();
770 hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
771 fEff->Write(Form("fEff_cent%d", icent));
772
773 hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
774 hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
775
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));
781
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);
787 cCanvas2->cd();
788 hRatioPt_cent[icent]->DrawCopy();
789 fileout->cd();
790 hRatioPt_cent[icent]->Write(Form("hRatio_cent%d", icent));
791
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));
797
798
799 }
800
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.);
807
808 TCanvas *cCanvas3 = new TCanvas("cCanvas3");
809 hEfficiencyCent->DrawCopy();
810 fEffCent->DrawCopy("same");
811 fileout->cd();
812 hEfficiencyCent->Write("hEfficiencyCent");
813 fEffCent->Write("fEffCent");
814
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));
820
821 TCanvas *cCanvas4 = new TCanvas("cCanvas4");
822
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);
828 cCanvas4->cd();
829 hRatioCent->DrawCopy();
830 fileout->cd();
831 hRatioCent->Write("hRatioCent");
832
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));
838
839 fileout->Close();
840
841 // hEfficiencyPt->Add(fEff, -1.);
842 return hEfficiencyCent;
843}
844
845
846//_____________________________________________________________________________-
847
848TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename)
849{
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);
856}
857
858TH1D *
859TrackingEff_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 = "")
860{
861
862 TVirtualFitter::SetMaxIterations(1000000);
863
864 /* load HistoUtils */
865 gROOT->LoadMacro("HistoUtils.C");
866
867 TCanvas *cCanvas1 = new TCanvas("cCanvas1");
868 TCanvas *cCanvas2 = new TCanvas("cCanvas2");
869 TCanvas *cCanvas5 = new TCanvas("cCanvas5");
870
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};
873
874 /* fit minimum-bias efficiency pt */
875
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();
884 Int_t scalePar = 0.;
885 TF1 *fEffCopy = new TF1(*fEff);
886
887 TFile *fileout = TFile::Open(Form("%s/efficiencyPt_centrality_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
888
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]);
892
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));
897 }
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);
900
901 /* draw */
902 cCanvas1->cd();
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");
913
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");
924 cCanvas1->Update();
925
926 /* write */
927 fileout->cd();
928 pEfficiencyPt->Write("pEfficiencyPt");
929 hEfficiencyPt->Write("hEfficiencyPt");
930 fEff->Write("fEff");
931
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);
941
942 TProfile *pEfficiencyPt_cent[NcentralityBins];
943 TH1D *hEfficiencyPt_cent[NcentralityBins];
944 TH1D *hRatioPt_cent[NcentralityBins];
945
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);
950
951 gStyle->SetOptStat(1100);
952 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
953
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]);
956
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]);
962
963 /* draw */
964 cCanvas1->cd();
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");
975
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");
986 cCanvas1->Update();
987
988 fileout->cd();
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));
992
993 hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
994 hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
995
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]));
1001
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);
1007 cCanvas2->cd();
1008 hRatioPt_cent[icent]->DrawCopy();
1009 fileout->cd();
1010 hRatioPt_cent[icent]->Write(Form("hRatioPt_cent%d", icent));
1011
1012
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]));
1018
1019 }
1020
1021 TCanvas *cCanvas3 = new TCanvas("cCanvas3");
1022 hEfficiencyCent->DrawCopy();
1023 fileout->cd();
1024 hEfficiencyCent->Write("hEfficiencyCent");
1025
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]));
1031
1032 // hEfficiencyPt->Add(fEff, -1.);
1033 return hEfficiencyCent;
1034}
1035
1036TrackingEff_trackingEfficiency(const Char_t *filename, Bool_t useGFcorrection =kTRUE)
1037{
1038
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}"
1044 };
1045
1046 TFile *filein = TFile::Open(filename);
1047 if (useGFcorrection)
1048 TFile *fileout = TFile::Open("TOF_trackingEfficiency.root", "RECREATE");
1049 else
1050 TFile *fileout = TFile::Open("TOF_trackingEfficiency_noGF.root", "RECREATE");
1051 TH1D *hEff;
1052 TF1 *fGF;
1053 Char_t title[1024];
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)
1061 hEff->Divide(fGF);
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]));
1069 fileout->cd();
1070 hEff->Write();
1071 }
1072
1073 fileout->Close();
1074}
1075
1076TF1 *
1077TrackingEff_geantflukaCorrection(Int_t ipart, Int_t icharge)
1078{
1079
1080 if (ipart == 3 && icharge == kNegative) {
1081 TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
1082 return f;
1083 }
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.);
1086 }
1087 else
1088 TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionNull(x)", 0., 5.);
1089
1090 return f;
1091}
1092
1093Double_t
1094TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
1095{
1096 return 1.;
1097}
1098
1099Double_t
1100TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
1101{
1102 return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
1103}
1104
1105Double_t
1106TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
1107{
1108 return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);
1109}