]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/SPECTRA/PiKaPr/TOF/pPb502/macros/TrackingEff.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TOF / pPb502 / macros / TrackingEff.C
1 #include "CommonDefs.C"
2
3 const Char_t *destdir = "plots";
4
5 enum EHisto_t {
6   kPrimaryTracks,
7   kReconstructedTracks,
8   kNHistos
9 };
10 const Char_t *histoName[kNHistos] = {
11   "hPrimaryTracks",
12   "hReconstructedTracks"
13 };
14
15 enum EParam_t {
16   kCentrality,
17   kPt,
18   kEta,
19   kPhi,
20   kY,
21   kNParams
22 };
23
24 TrackingEff(const Char_t *filename, Int_t evMax = kMaxInt)
25 {
26
27   /* include path for ACLic */
28   gSystem->AddIncludePath("-I$ALICE_ROOT/include");
29   gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
30   /* load libraries */
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");
37  
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);
50
51   /* binning */
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;
58   /* THnSparse */
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]);
68       }
69
70   /* selected particle array */
71   AliAnalysisParticle *selParticle[1000000];
72   for (Int_t idx = 0; idx < 1000000; idx++)
73     selParticle[idx] = NULL;
74
75   /* filled slot array */
76   Int_t filledSlot[1000000];
77   Int_t nFilledSlots = 0;
78
79
80   /* loop over events */
81   Double_t param[kNParams];
82   Int_t part, charge;
83   for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
84     /* get event */
85     treein->GetEvent(iev);
86     if (iev % 1000 == 0) printf("iev = %d\n", iev);
87     /* check vertex */
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);
94
95     /*** ACCEPTED EVENT ***/
96     
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 */
101     nFilledSlots = 0;
102
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;
108
109       /* check rapidity */
110       if (analysisParticle->GetY() - rapidityShift > rapidityMaxCut ||
111           analysisParticle->GetY() - rapidityShift < rapidityMinCut)
112         continue;
113
114       /*** ACCEPTED PARTICLE ***/
115
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;
122
123       /* fill histo and slot */
124       hHisto[kPrimaryTracks][part][charge]->Fill(param);
125       selParticle[analysisParticle->GetLabel()] = analysisParticle;
126       filledSlot[nFilledSlots] = analysisParticle->GetLabel();
127       nFilledSlots++;
128       
129     }
130
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;
141
142       /*** ACCEPTED PARTICLE WITH RECONSTRUCTED TRACK ***/
143       
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;
150
151       /* fill reconstructed histo */
152       hHisto[kReconstructedTracks][part][charge]->Fill(param);
153       
154     }
155
156   }
157
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();
163   fileout->Close();
164
165   TString str = Form("TrackingEff.%s", filename);
166   TrackingEff_efficiencyPt(str.Data());
167   
168 }
169
170 //_____________________________________________________________________________-
171
172 TrackingEff_efficiencyPt(const Char_t *filename)
173 {
174
175   /* get data */
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++) {
182
183     /* INCLUSIVE */
184
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);
188
189     /* SINGLE PARTICLE */
190
191     for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
192       for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
193
194         /* get histo */
195         hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
196
197         /* MB projection */
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]);
202         
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]);
210         }
211       }
212     }
213   }    
214   
215   /* output */
216   TString str = filename;
217   str.Insert(str.Length() - TString(".root").Length(), ".efficiencyPt");
218   TFile *fileout = TFile::Open(str.Data(), "RECREATE");
219   
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];
223
224   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
225
226     if (ihisto == kPrimaryTracks) continue;
227
228     /* INCLUSIVE */
229
230     /* MB efficiency */
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();
239     
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();
250       
251       /* ratio wrt. MB */
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();
260     }
261     
262     /* SINGLE PARTICLE */
263
264     for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
265       for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
266
267         /* MB efficiency */
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();
276         
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();
287           
288           /* ratio wrt. MB */
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();
297         }
298         
299       }       
300     }
301   }
302   
303   fileout->Close();
304              
305   TrackingEff_trackingEfficiency(str.Data());
306 }
307
308 //_____________________________________________________________________________-
309
310 TrackingEff_efficiencyEta(const Char_t *filename)
311 {
312
313   /* get data */
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++) {
322         
323         /* get histo */
324         hHisto[ihisto][ipart][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
325         
326         /* MB projection */
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();
332         /* pt bins */
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();
339         }
340         
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();
348           /* pt bins */
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();
355           }
356         }
357       }
358   
359   /* output */
360   TString str = filename;
361   str.Insert(str.Length() - TString(".root").Length(), ".efficiencyEta");
362   TFile *fileout = TFile::Open(str.Data(), "RECREATE");
363   
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];
367   
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++) {
371         
372         if (ihisto == kPrimaryTracks) continue;
373         
374         /* MB efficiency */
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();
383         /* pt bins */
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();
393         }
394         
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();
405           
406           /* ratio wrt. MB */
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();
415         }
416         
417       }       
418   }
419   
420   fileout->Close();
421   
422 }
423
424 //_____________________________________________________________________________-
425
426 TrackingEff_centralityDependence(const Char_t *filename)
427 {
428
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};
431
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);
436
437   /* output */
438   TString str = filename;
439   str.Insert(str.Length() - TString(".root").Length(), ".centralityDependence");
440   TFile *fileout = TFile::Open(str.Data(), "RECREATE");
441
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;
449
450     /* INCLUSIVE */
451
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);
457     
458     for (Int_t icent = 0; icent < NcentralityBins; icent++) {
459       
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();
466       
467     }
468     hEfficiencyAllCentrality[ihisto]->Write();
469     
470     
471     /* SINGLE PARTICLE */
472     
473     for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++)
474       for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
475         
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]);
481         
482         for (Int_t icent = 0; icent < NcentralityBins; icent++) {
483          
484           hEfficiencyPt_ratioMB = (TH1D *)filein->Get(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
485
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();
492
493         }
494
495         hEfficiencyCentrality[ihisto][ipart][icharge]->Write();
496       }
497   }
498   
499   fileout->Close();
500 }
501
502 //_____________________________________________________________________________-
503
504 TrackingEff_centralityDependenceFit(const Char_t *filename, Int_t ihisto = kReconstructedTracks)
505 {
506
507   const Char_t *particleLabel[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};
508
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.);
513
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();
536     }
537   }
538   
539
540 }
541
542
543 //_____________________________________________________________________________-
544
545 TrackingEff_efficiencyPt_MB_plot(const Char_t *filename)
546 {
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);
553 }
554
555 TH1D *
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 = "")
557 {
558   
559   TCanvas *cCanvas1 = new TCanvas("cCanvas1");
560   TCanvas *cCanvas2 = new TCanvas("cCanvas2");
561   
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};
564
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.);
571
572   TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
573
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);
587   cCanvas1->cd();
588   hEfficiencyPt->DrawCopy();
589   fEff->DrawCopy("same");
590   fileout->cd();
591   hEfficiencyPt->Write("hEfficiencyPt");
592   fEff->Write("fEff");
593   
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]));
599   
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);
605   cCanvas2->cd();
606   hRatioPt->DrawCopy();
607   fileout->cd();
608   hRatioPt->Write("hRatioPt");
609
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]));
615   
616
617   fileout->Close();
618
619   //  hEfficiencyPt->Add(fEff, -1.);
620   return hEfficiencyPt;
621 }
622
623 //_____________________________________________________________________________-
624
625 TH1D *
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 = "")
627 {
628   
629   TCanvas *cCanvas1 = new TCanvas("cCanvas1");
630   TCanvas *cCanvas2 = new TCanvas("cCanvas2");
631   
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};
634   
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.);
642
643   TFile *fileout = TFile::Open(Form("%s/efficiencyPt_MB_all.root", destdir), "RECREATE");
644   
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);
658   cCanvas1->cd();
659   hEfficiencyPt->DrawCopy();
660   fEff->DrawCopy("same");
661   fileout->cd();
662   hEfficiencyPt->Write("hEfficiencyPt");
663   fEff->Write("fEff");
664
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));
670
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);
676   cCanvas2->cd();
677   hRatioPt->DrawCopy();
678   fileout->cd();
679   hRatioPt->Write("hRatioPt");
680
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));
686   
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);
694   
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);
704   
705   
706   TH1D *hEfficiencyPt_cent[NcentralityBins];
707   TH1D *hRatioPt_cent[NcentralityBins];
708   for (Int_t icent = 0; icent < NcentralityBins; icent++) {
709     
710   
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);
714     
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);
725     cCanvas1->cd();
726     hEfficiencyPt_cent[icent]->DrawCopy();
727     fEff->DrawCopy("same");
728     fileout->cd();
729     hEfficiencyPt_cent[icent]->Write(Form("hEfficiencyPt_cent%d", icent));
730     fEff->Write(Form("fEff_cent%d", icent));
731     
732     hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
733     hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
734     
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));
740     
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);
746     cCanvas2->cd();
747     hRatioPt_cent[icent]->DrawCopy();
748     fileout->cd();
749     hRatioPt_cent[icent]->Write(Form("hRatio_cent%d", icent));
750
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));
756
757     
758   }
759
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.);
766   
767   TCanvas *cCanvas3 = new TCanvas("cCanvas3");
768   hEfficiencyCent->DrawCopy();
769   fEffCent->DrawCopy("same");
770   fileout->cd();
771   hEfficiencyCent->Write("hEfficiencyCent");
772   fEffCent->Write("fEffCent");
773   
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));
779
780   TCanvas *cCanvas4 = new TCanvas("cCanvas4");
781
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);
787   cCanvas4->cd();
788   hRatioCent->DrawCopy();
789   fileout->cd();
790   hRatioCent->Write("hRatioCent");
791
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));
797   
798   fileout->Close();
799
800   //  hEfficiencyPt->Add(fEff, -1.);
801   return hEfficiencyCent;
802 }
803
804
805 //_____________________________________________________________________________-
806
807 TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename)
808 {
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);
815 }
816
817 TH1D *
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 = "")
819 {
820
821   TVirtualFitter::SetMaxIterations(1000000);
822
823   /* load HistoUtils */
824   gROOT->LoadMacro("HistoUtils.C");
825   
826   TCanvas *cCanvas1 = new TCanvas("cCanvas1");
827   TCanvas *cCanvas2 = new TCanvas("cCanvas2");
828   TCanvas *cCanvas5 = new TCanvas("cCanvas5");
829
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};
832
833   /* fit minimum-bias efficiency pt */
834
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();
843   Int_t scalePar = 0.;
844   TF1 *fEffCopy = new TF1(*fEff);
845
846   TFile *fileout = TFile::Open(Form("%s/efficiencyPt_centrality_%s_%s.root", destdir, AliPID::ParticleName(ipart), chargeName[icharge]), "RECREATE");
847
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]);
851
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));
856   }
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);
859
860   /* draw */
861   cCanvas1->cd();
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");
872
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");
883   cCanvas1->Update();
884
885   /* write */
886   fileout->cd();
887   pEfficiencyPt->Write("pEfficiencyPt");
888   hEfficiencyPt->Write("hEfficiencyPt");
889   fEff->Write("fEff");
890
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);
900   
901   TProfile *pEfficiencyPt_cent[NcentralityBins];
902   TH1D *hEfficiencyPt_cent[NcentralityBins];
903   TH1D *hRatioPt_cent[NcentralityBins];
904
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);
909     
910   gStyle->SetOptStat(1100);
911   for (Int_t icent = 0; icent < NcentralityBins; icent++) {
912
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]);
915     
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]);
921     
922     /* draw */
923     cCanvas1->cd();
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");
934     
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");
945     cCanvas1->Update();
946
947     fileout->cd();
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));
951
952     hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
953     hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
954
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]));
960
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);
966     cCanvas2->cd();
967     hRatioPt_cent[icent]->DrawCopy();
968     fileout->cd();
969     hRatioPt_cent[icent]->Write(Form("hRatioPt_cent%d", icent));
970     
971
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]));
977     
978   }
979
980   TCanvas *cCanvas3 = new TCanvas("cCanvas3");
981   hEfficiencyCent->DrawCopy();
982   fileout->cd();
983   hEfficiencyCent->Write("hEfficiencyCent");
984   
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]));
990
991   //  hEfficiencyPt->Add(fEff, -1.);
992   return hEfficiencyCent;
993 }
994
995 TrackingEff_trackingEfficiency(const Char_t *filename, Bool_t useGFcorrection =kTRUE)
996 {
997
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}"
1003   };
1004
1005   TFile *filein = TFile::Open(filename);
1006   if (useGFcorrection)
1007     TFile *fileout = TFile::Open("TOF_trackingEfficiency.root", "RECREATE");
1008   else
1009     TFile *fileout = TFile::Open("TOF_trackingEfficiency_noGF.root", "RECREATE");
1010   TH1D *hEff;
1011   TF1 *fGF;
1012   Char_t title[1024];
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++) {
1016         if (icent == -1)
1017           hEff = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_hReconstructedTracks_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
1018         else
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)
1023           hEff->Divide(fGF);
1024         if (icent == -1)
1025           sprintf(title, "%s (MB);p_{T} (GeV/c);tracking efficiency;", partLatex[ipart][icharge]);
1026         else
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);
1033         if (icent == -1)
1034           hEff->SetName(Form("hTrackingEff_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
1035         else
1036           hEff->SetName(Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
1037         fileout->cd();
1038         hEff->Write();
1039       }
1040
1041   fileout->Close();
1042 }
1043
1044 TF1 *
1045 TrackingEff_geantflukaCorrection(Int_t ipart, Int_t icharge)
1046 {
1047
1048   if (ipart == 3 && icharge == kNegative) {
1049     TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
1050     return f;
1051   }
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.);
1054   //  }
1055   else
1056     TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "TrackingPtGeantFlukaCorrectionNull(x)", 0., 5.);
1057
1058   return f;
1059 }
1060
1061 Double_t
1062 TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
1063 {
1064   return 1.;
1065 }
1066
1067 Double_t
1068 TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
1069 {
1070   return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
1071 }
1072
1073 Double_t
1074 TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
1075 {
1076   return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);
1077 }