]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/SPECTRA/PiKaPr/TOF/PbPb276/macros/TrackingEff.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TOF / PbPb276 / macros / TrackingEff.C
1 const Char_t *destdir = "plots";
2
3 enum EHisto_t {
4   kPrimaryTracks,
5   kReconstructedTracks,
6   kNHistos
7 };
8 const Char_t *histoName[kNHistos] = {
9   "hPrimaryTracks",
10   "hReconstructedTracks"
11 };
12
13 enum ECharge_t {
14   kPositive,
15   kNegative,
16   kNCharges
17 };
18 const Char_t *chargeName[kNCharges] = {
19   "positive",
20   "negative"
21 };
22
23 enum EParam_t {
24   kCentrality,
25   kPt,
26   kEta,
27   kPhi,
28   kNParams
29 };
30
31 const Int_t NcentralityBins = 10;
32 Double_t centralityBin[NcentralityBins + 1] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90.};
33
34 const Int_t NptBins = 46;
35 Double_t ptBin[NptBins + 1] = {0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0};
36
37 const Int_t NetaBins = 20;
38 Double_t etaMin = -1.;
39 Double_t etaMax = 1.;
40 Double_t etaStep = (etaMax - etaMin) / NetaBins;
41 Double_t etaBin[NetaBins + 1]; /* computed at run-time */
42
43 const Int_t NphiBins = 20;
44 Double_t phiMin = 0.;
45 Double_t phiMax = 2. * TMath::Pi();
46 Double_t phiStep = (phiMax - phiMin) / NphiBins;
47 Double_t phiBin[NphiBins + 1]; /* computed at run-time */
48
49 const Int_t NptsubBins = 4;
50 Double_t ptsubBin[NptsubBins + 1] = {0.2, 0.5, 1.0, 1.5, 5.0};
51 Int_t ptsubBinMin[NptsubBins] = {0, 6, 16, 21};
52 Int_t ptsubBinMax[NptsubBins] = {5, 15, 20, 45};
53
54 Int_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
68 Int_t particleColor[5] = {1, 1, 4, 8, 2};
69 Int_t chargeMarker[2] = {20, 25};
70
71 const Char_t *partChargeName[5][2] = {"", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"};
72
73
74 const Double_t kEpsilon = 0.001;
75
76 TrackingEff(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
214 TrackingEff_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
351 TrackingEff_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
467 TrackingEff_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
545 TrackingEff_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
586 TrackingEff_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
596 TH1D *
597 TrackingEff_efficiencyPt_MB_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t ipart, Int_t icharge, Int_t marker = 20, Int_t color = 2, Option_t *opt = "")
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
666 TH1D *
667 TrackingEff_efficiencyPt_centrality_all_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t marker = 20, Int_t color = 1, Option_t *opt = "")
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
848 TrackingEff_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
858 TH1D *
859 TrackingEff_efficiencyPt_centrality_plot(const Char_t *filename, Int_t ihisto = kReconstructedTracks, Int_t ipart, Int_t icharge, Int_t marker = 20, Int_t color = 2, Option_t *opt = "")
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
1036 TrackingEff_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
1076 TF1 *
1077 TrackingEff_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
1093 Double_t
1094 TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
1095 {
1096   return 1.;
1097 }
1098
1099 Double_t
1100 TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
1101 {
1102   return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
1103 }
1104
1105 Double_t
1106 TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
1107 {
1108   return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);
1109 }