]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/SPECTRA/PiKaPr/TOF/pPb502/macros/TOFmatchEff.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TOF / pPb502 / macros / TOFmatchEff.C
1 #include "CommonDefs.C"
2
3 enum EHisto_t {
4   kAcceptedTracks,
5   kMatchedTracks,
6   kMismatchedTracks,
7   kUncorrelatedTracks,
8   kMatchedCorrelatedTracks,
9   kMatchedGoodTracks,
10   kNHistos
11 };
12 const Char_t *histoName[kNHistos] = {
13   "hAcceptedTracks",
14   "hMatchedTracks",
15   "hMismatchedTracks",
16   "hUncorrelatedTracks",
17   "hMatchedCorrelatedTracks",
18   "hMatchedGoodTracks"
19 };
20
21 enum EParam_t {
22   kCentrality,
23   kPt,
24   kEta,
25   kPhi,
26   kNParams
27 };
28
29 #define USEHISTOPID 0
30
31 TOFmatchEff(const Char_t *filename, Int_t evMax = kMaxInt)
32 {
33   
34   /* include path for ACLic */
35   gSystem->AddIncludePath("-I$ALICE_ROOT/include");
36   gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
37   /* load libraries */
38   gSystem->Load("libANALYSIS");
39   gSystem->Load("libANALYSISalice");
40   /* build analysis task class */
41   gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
42   gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
43   gROOT->LoadMacro("AliAnalysisTrack.cxx+g");
44  
45   /* open file, get tree and connect */
46   TFile *filein = TFile::Open(filename);
47   TTree *treein = (TTree *)filein->Get("aodTree");
48   printf("got \"aodTree\": %d entries\n", treein->GetEntries());
49   AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
50   TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
51   AliAnalysisTrack *analysisTrack = NULL;
52   treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
53   treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);
54
55   /* open enabled flag map */
56   TH1F *hEnabledFlag = NULL;
57   if (enabledChannelsFileName) {
58     TFile *enabledfile = TFile::Open(enabledChannelsFileName);
59     hEnabledFlag = (TH1F *)enabledfile->Get("hEnabledFlag");
60   }
61
62   /* binning */
63   for (Int_t ieta = 0; ieta < NetaBins + 1; ieta++)
64     etaBin[ieta] = etaMin + ieta * etaStep;
65   for (Int_t iphi = 0; iphi < NphiBins + 1; iphi++)
66     phiBin[iphi] = phiMin + iphi * phiStep;
67   /* THnSparse */
68   Int_t NparamBins[kNParams] = {NcentralityBins, NptBins, NetaBins, NphiBins};
69   Double_t *paramBin[kNParams] = {centralityBin, ptBin, etaBin, phiBin};
70   THnSparseF *hHisto[kNHistos][kNCharges];
71   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
72     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
73       hHisto[ihisto][icharge] = new THnSparseF(Form("hHisto_%s_%s", histoName[ihisto], chargeName[icharge]), "", kNParams, NparamBins);
74       for (Int_t iparam = 0; iparam < kNParams; iparam++)
75         hHisto[ihisto][icharge]->SetBinEdges(iparam, paramBin[iparam]);
76     }
77 #if USEHISTOPID
78   TH2F *hHistoPID[kNHistos][AliPID::kSPECIES][kNCharges];
79   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
80     for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
81       for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
82
83
84
85         hHistoPID[ihisto][ipart][icharge] = new TH2F(Form("hHistoPID_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]), "", NcentralityBins, centralityBin, NptBins, ptBin);
86       }
87 #endif
88   /* histos */
89   TH2F *hFEAMap = new TH2F("hFEAMap", "", 72, 0., 18., 91, 0., 91.);
90
91   /* start stopwatch */
92   TStopwatch timer;
93   timer.Start();
94   
95   /* loop over events */
96   Double_t param[kNParams];
97   Int_t charge;
98   Int_t index, sector, sectorStrip, padx, fea;
99   Float_t hitmapx, hitmapy;
100   AliTOFcalibHisto calib;
101   calib.LoadCalibHisto();
102   for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
103     /* get event */
104     treein->GetEvent(iev);
105     if (iev % 10000 == 0) printf("iev = %d\n", iev);
106     /* check vertex */
107     if (!analysisEvent->AcceptEvent(acceptEventType)) continue;
108
109     /*** ACCEPTED EVENT ***/
110
111     /* get centrality */
112     param[kCentrality] = analysisEvent->GetCentralityPercentile(centralityEstimator);
113     
114     /* loop over tracks */
115     for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
116       /* get track */
117       analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
118       if (!analysisTrack) continue;
119       /* check accepted track */
120       if (!analysisTrack->AcceptTrack()) continue;
121
122       /*** ACCEPTED TRACK ***/
123       
124       /* get track info */
125       param[kPt] = analysisTrack->GetPt();
126       param[kEta] = analysisTrack->GetEta();
127       param[kPhi] = analysisTrack->GetPhi();
128       charge = analysisTrack->GetSign() > 0. ? kPositive : kNegative;
129       index = analysisTrack->GetTOFIndex();
130       
131       /* fill accepted tracks histos */
132       hHisto[kAcceptedTracks][charge]->Fill(param);
133 #if USEHISTOPID
134       for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
135         
136         if (analysisTrack->GetY(AliPID::ParticleMass(ipart)) - rapidityShift > rapidityMaxCut || 
137             analysisTrack->GetY(AliPID::ParticleMass(ipart)) - rapidityShift < rapidityMinCut) continue;
138
139         hHistoPID[kAcceptedTracks][ipart][charge]->Fill(param[kCentrality], param[kPt]);
140       }
141 #endif
142
143       /* check TOF PID */
144       if (!analysisTrack->HasTOFPID(hEnabledFlag)) continue;
145
146       /*** ACCEPTED TRACK WITH TOF SIGNAL ***/
147
148       /* fill FEA map */
149       sector = calib.GetCalibMap(AliTOFcalibHisto::kSector, index);
150       sectorStrip = calib.GetCalibMap(AliTOFcalibHisto::kSectorStrip, index);
151       padx = calib.GetCalibMap(AliTOFcalibHisto::kPadX, index);
152       fea = padx / 12;
153       hitmapx = sector + ((Double_t)(3 - fea) + 0.5) / 4.;
154       hitmapy = sectorStrip;
155       hFEAMap->Fill(hitmapx, hitmapy);
156       
157       /* fill matched tracks histos */
158       hHisto[kMatchedTracks][charge]->Fill(param);
159       if (!analysisTrack->IsMismatchMC()) {
160         hHisto[kMatchedGoodTracks][charge]->Fill(param);
161         hHisto[kMatchedCorrelatedTracks][charge]->Fill(param);
162       }
163       else {
164         hHisto[kMismatchedTracks][charge]->Fill(param);
165         if (!analysisTrack->IsUncorrelatedMismatchMC())
166           hHisto[kMatchedCorrelatedTracks][charge]->Fill(param);
167         else
168           hHisto[kUncorrelatedTracks][charge]->Fill(param);
169       }
170 #if USEHISTOPID
171       for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
172         if (analysisTrack->GetY(AliPID::ParticleMass(ipart)) - rapidityShift > rapidityMaxCut || 
173             analysisTrack->GetY(AliPID::ParticleMass(ipart)) - rapidityShift < rapidityMinCut) continue;
174         hHistoPID[kMatchedTracks][ipart][charge]->Fill(param[kCentrality], param[kPt]);
175         if (!analysisTrack->IsMismatchMC()) {
176           hHistoPID[kMatchedGoodTracks][ipart][charge]->Fill(param);
177           hHistoPID[kMatchedCorrelatedTracks][ipart][charge]->Fill(param);
178         }
179         else {
180           hHistoPID[kMismatchedTracks][ipart][charge]->Fill(param);
181           if (!analysisTrack->IsUncorrelatedMismatchMC())
182             hHistoPID[kMatchedCorrelatedTracks][ipart][charge]->Fill(param);
183           else
184             hHistoPID[kUncorrelatedTracks][ipart][charge]->Fill(param);
185         }
186       }
187 #endif
188     }
189   }
190
191   /* stop stopwatch */
192   timer.Stop();
193   timer.Print();
194
195   TFile *fileout = TFile::Open(Form("TOFmatchEff.%s", filename), "RECREATE");
196   hFEAMap->Write();
197   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
198     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
199       hHisto[ihisto][icharge]->Write();
200     }
201 #if USEHISTOPID
202   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
203     for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
204       for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
205         hHistoPID[ihisto][ipart][icharge]->Write();
206       }
207 #endif
208   fileout->Close();
209   
210   TString str = Form("TOFmatchEff.%s", filename);
211   TOFmatchEff_efficiencyPt(str.Data());
212   TOFmatchEff_efficiencyEta(str.Data());
213   TOFmatchEff_efficiencyPhi(str.Data());
214 }
215
216 //_____________________________________________________________________________-
217
218 TOFmatchEff_efficiencyPt(const Char_t *filename)
219 {
220
221   /* get data */
222   TFile *filein = TFile::Open(filename);
223   THnSparseF *hHisto[kNHistos][kNCharges];
224   TH2F *hHistoPID[kNHistos][AliPID::kSPECIES][kNCharges];
225   TH1D *hHistoPt_MB[kNHistos][kNCharges], *hHistoPt_centrality[NcentralityBins][kNHistos][kNCharges];
226   TH1D *hHistoPIDPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hHistoPIDPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
227   TH1D *hHistoAllPt_MB[kNHistos], *hHistoAllPt_centrality[NcentralityBins][kNHistos];
228   /* loop over histos */
229   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
230
231     /* INCLUSIVE */
232
233     hHistoAllPt_MB[ihisto] = new TH1D(Form("hHistoAllPt_MB_%s", histoName[ihisto]), "", NptBins, ptBin);
234     for (Int_t icent = 0; icent < NcentralityBins; icent++)
235       hHistoAllPt_centrality[icent][ihisto] = new TH1D(Form("hHistoAllPt_centrality%d_%s", icent, histoName[ihisto]), "", NptBins, ptBin);
236
237     /* SINGLE PARTICLE */
238
239     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
240       
241       /* get histo */
242       hHisto[ihisto][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s", histoName[ihisto], chargeName[icharge]));
243       
244       /* MB projection */
245       hHistoPt_MB[ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kPt);
246       hHistoPt_MB[ihisto][icharge]->SetName(Form("hHistoPt_MB_%s_%s", histoName[ihisto], chargeName[icharge]));
247       hHistoPt_MB[ihisto][icharge]->Sumw2();
248       hHistoAllPt_MB[ihisto]->Add(hHistoPt_MB[ihisto][icharge]);
249         
250       /* centrality projection */
251       for (Int_t icent = 0; icent < NcentralityBins; icent++) {
252
253         hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
254         hHistoPt_centrality[icent][ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kPt);
255         hHistoPt_centrality[icent][ihisto][icharge]->SetName(Form("hHistoPt_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
256         hHistoPt_centrality[icent][ihisto][icharge]->Sumw2();
257         hHistoAllPt_centrality[icent][ihisto]->Add(hHistoPt_centrality[icent][ihisto][icharge]);
258       }
259       
260 #if USEHISTOPID
261       for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
262
263         /* get histo */
264         hHistoPID[ihisto][ipart][icharge] = (TH2F *)filein->Get(Form("hHistoPID_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
265
266         /* MB projection */
267         hHistoPIDPt_MB[ihisto][ipart][icharge] = hHistoPID[ihisto][ipart][icharge]->ProjectionY("hpy");
268         hHistoPIDPt_MB[ihisto][ipart][icharge]->SetName(Form("hHistoPIDPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
269         hHistoPIDPt_MB[ihisto][ipart][icharge]->Sumw2();
270         
271         /* centrality projection */
272         for (Int_t icent = 0; icent < NcentralityBins; icent++) {
273           hHistoPIDPt_centrality[icent][ihisto][ipart][icharge] = hHistoPID[ihisto][ipart][icharge]->ProjectionY("hpy", icent + 1, icent + 1);
274           hHistoPIDPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hHistoPIDPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
275           hHistoPIDPt_centrality[icent][ihisto][ipart][icharge]->Sumw2();
276
277         }
278         
279       }
280 #endif
281       
282     }
283   }
284
285   /* output */
286   TString str = filename;
287   str.Insert(str.Length() - TString(".root").Length(), ".efficiencyPt");
288   TFile *fileout = TFile::Open(str.Data(), "RECREATE");
289   
290   /* efficiencies/fractions and write */
291   TH1D *hEfficiencyPt_MB[kNHistos][kNCharges], *hEfficiencyPt_centrality[NcentralityBins][kNHistos][kNCharges], *hEfficiencyPt_ratioMB_centrality[NcentralityBins][kNHistos][kNCharges];
292   TH1D *hEfficiencyPIDPt_MB[kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPIDPt_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges], *hEfficiencyPIDPt_ratioMB_centrality[NcentralityBins][kNHistos][AliPID::kSPECIES][kNCharges];
293   TH1D *hEfficiencyAllPt_MB[kNHistos], *hEfficiencyAllPt_centrality[NcentralityBins][kNHistos], *hEfficiencyAllPt_ratioMB_centrality[NcentralityBins][kNHistos];
294
295   TH1D *hFractionPt_MB[kNHistos][kNCharges], *hFractionPt_centrality[NcentralityBins][kNHistos][kNCharges], *hFractionPt_ratioMB_centrality[NcentralityBins][kNHistos][kNCharges];
296   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
297     
298     if (ihisto == kAcceptedTracks) continue;
299     
300     /* INCLUSIVE */
301     
302     /* MB efficiency */
303     hEfficiencyAllPt_MB[ihisto] = new TH1D(*hHistoAllPt_MB[ihisto]);
304     hEfficiencyAllPt_MB[ihisto]->SetName(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
305     hEfficiencyAllPt_MB[ihisto]->SetLineWidth(2);
306     hEfficiencyAllPt_MB[ihisto]->SetLineColor(1);
307     hEfficiencyAllPt_MB[ihisto]->SetMarkerStyle(20);
308     hEfficiencyAllPt_MB[ihisto]->SetMarkerColor(1);
309     hEfficiencyAllPt_MB[ihisto]->Divide(hEfficiencyAllPt_MB[ihisto], hHistoAllPt_MB[kAcceptedTracks], 1, 1, "B");
310     hEfficiencyAllPt_MB[ihisto]->Write();
311     
312     /* multiplicity/centrality efficiency */
313     for (Int_t icent = 0; icent < NcentralityBins; icent++) {
314       hEfficiencyAllPt_centrality[icent][ihisto] = new TH1D(*hHistoAllPt_centrality[icent][ihisto]);
315       hEfficiencyAllPt_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
316       hEfficiencyAllPt_centrality[icent][ihisto]->SetLineWidth(2);
317       hEfficiencyAllPt_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
318       hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerStyle(20);
319       hEfficiencyAllPt_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
320       hEfficiencyAllPt_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_centrality[icent][ihisto], hHistoAllPt_centrality[icent][kAcceptedTracks], 1, 1, "B");
321       hEfficiencyAllPt_centrality[icent][ihisto]->Write();
322       
323       /* ratio wrt. MB */
324       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto] = new TH1D(*hEfficiencyAllPt_centrality[icent][ihisto]);
325       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetName(Form("hEfficiencyAllPt_ratioMB_centrality%d_%s", icent, histoName[ihisto]));
326       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineWidth(2);
327       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetLineColor(multcentColor[icent]);
328       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerStyle(20);
329       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->SetMarkerColor(multcentColor[icent]);
330       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Divide(hEfficiencyAllPt_MB[ihisto]);
331       hEfficiencyAllPt_ratioMB_centrality[icent][ihisto]->Write();
332     }
333     
334     /* SINGLE PARTICLE */
335     
336     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
337       
338       /* MB efficiency */
339       hEfficiencyPt_MB[ihisto][icharge] = new TH1D(*hHistoPt_MB[ihisto][icharge]);
340       hEfficiencyPt_MB[ihisto][icharge]->SetName(Form("hEfficiencyPt_MB_%s_%s", histoName[ihisto], chargeName[icharge]));
341       hEfficiencyPt_MB[ihisto][icharge]->SetLineWidth(2);
342       hEfficiencyPt_MB[ihisto][icharge]->SetLineColor(1);
343       hEfficiencyPt_MB[ihisto][icharge]->SetMarkerStyle(20);
344       hEfficiencyPt_MB[ihisto][icharge]->SetMarkerColor(1);
345       hEfficiencyPt_MB[ihisto][icharge]->Divide(hEfficiencyPt_MB[ihisto][icharge], hHistoPt_MB[kAcceptedTracks][icharge], 1, 1, "B");
346       hEfficiencyPt_MB[ihisto][icharge]->Write();
347       
348       /* multiplicity/centrality efficiency */
349       for (Int_t icent = 0; icent < NcentralityBins; icent++) {
350         hEfficiencyPt_centrality[icent][ihisto][icharge] = new TH1D(*hHistoPt_centrality[icent][ihisto][icharge]);
351         hEfficiencyPt_centrality[icent][ihisto][icharge]->SetName(Form("hEfficiencyPt_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
352         hEfficiencyPt_centrality[icent][ihisto][icharge]->SetLineWidth(2);
353         hEfficiencyPt_centrality[icent][ihisto][icharge]->SetLineColor(multcentColor[icent]);
354         hEfficiencyPt_centrality[icent][ihisto][icharge]->SetMarkerStyle(20);
355         hEfficiencyPt_centrality[icent][ihisto][icharge]->SetMarkerColor(multcentColor[icent]);
356         hEfficiencyPt_centrality[icent][ihisto][icharge]->Divide(hEfficiencyPt_centrality[icent][ihisto][icharge], hHistoPt_centrality[icent][kAcceptedTracks][icharge], 1, 1, "B");
357         hEfficiencyPt_centrality[icent][ihisto][icharge]->Write();
358         
359         /* ratio wrt. MB */
360         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge] = new TH1D(*hEfficiencyPt_centrality[icent][ihisto][icharge]);
361         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge]->SetName(Form("hEfficiencyPt_ratioMB_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
362         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge]->SetLineWidth(2);
363         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge]->SetLineColor(multcentColor[icent]);
364         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge]->SetMarkerStyle(20);
365         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge]->SetMarkerColor(multcentColor[icent]);
366         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge]->Divide(hEfficiencyPt_MB[ihisto][icharge]);
367         hEfficiencyPt_ratioMB_centrality[icent][ihisto][icharge]->Write();
368       }
369      
370 #if USEHISTOPID
371       for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
372
373         /* MB efficiency */
374         hEfficiencyPIDPt_MB[ihisto][ipart][icharge] = new TH1D(*hHistoPIDPt_MB[ihisto][ipart][icharge]);
375         hEfficiencyPIDPt_MB[ihisto][ipart][icharge]->SetName(Form("hEfficiencyPIDPt_MB_%s_%s_%s", histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
376         hEfficiencyPIDPt_MB[ihisto][ipart][icharge]->SetLineWidth(2);
377         hEfficiencyPIDPt_MB[ihisto][ipart][icharge]->SetLineColor(1);
378         hEfficiencyPIDPt_MB[ihisto][ipart][icharge]->SetMarkerStyle(20);
379         hEfficiencyPIDPt_MB[ihisto][ipart][icharge]->SetMarkerColor(1);
380         hEfficiencyPIDPt_MB[ihisto][ipart][icharge]->Divide(hEfficiencyPIDPt_MB[ihisto][ipart][icharge], hHistoPIDPt_MB[kAcceptedTracks][ipart][icharge], 1, 1, "B");
381         hEfficiencyPIDPt_MB[ihisto][ipart][icharge]->Write();
382         
383         /* multiplicity/centrality efficiency */
384         for (Int_t icent = 0; icent < NcentralityBins; icent++) {
385
386           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hHistoPIDPt_centrality[icent][ihisto][ipart][icharge]);
387           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPIDPt_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
388           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
389           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
390           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
391           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
392
393           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge], hHistoPIDPt_centrality[icent][kAcceptedTracks][ipart][icharge], 1, 1, "B");
394           hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]->Write();
395
396           /* ratio wrt. MB */
397           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge] = new TH1D(*hEfficiencyPIDPt_centrality[icent][ihisto][ipart][icharge]);
398           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetName(Form("hEfficiencyPIDPt_ratioMB_centrality%d_%s_%s_%s", icent, histoName[ihisto], AliPID::ParticleName(ipart), chargeName[icharge]));
399           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineWidth(2);
400           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetLineColor(multcentColor[icent]);
401           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerStyle(20);
402           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->SetMarkerColor(multcentColor[icent]);
403           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Divide(hEfficiencyPIDPt_MB[ihisto][ipart][icharge]);
404           hEfficiencyPIDPt_ratioMB_centrality[icent][ihisto][ipart][icharge]->Write();
405         }
406         
407         
408       }
409 #endif
410       
411     }       
412   }
413   
414   fileout->Close();
415
416 }
417
418 //_____________________________________________________________________________-
419
420 TOFmatchEff_efficiencyPhi(const Char_t *filename)
421 {
422
423   /* get data */
424   TFile *filein = TFile::Open(filename);
425   THnSparseF *hHisto[kNHistos][kNCharges];
426   TH1D *hHistoPhi_MB[kNHistos][kNCharges], *hHistoPhi_centrality[NcentralityBins][kNHistos][kNCharges];
427   TH1D *hHistoPhi_MB_pt[NptsubBins][kNHistos][kNCharges], *hHistoPhi_centrality_pt[NcentralityBins][NptsubBins][kNHistos][kNCharges];
428   /* loop over histos */
429   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
430     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
431       
432       /* get histo */
433       hHisto[ihisto][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s", histoName[ihisto], chargeName[icharge]));
434       
435       /* MB projection */
436       hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(0, 0);
437       hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
438       hHistoPhi_MB[ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kPhi);
439       hHistoPhi_MB[ihisto][icharge]->SetName(Form("hHistoPhi_MB_%s_%s", histoName[ihisto], chargeName[icharge]));
440       hHistoPhi_MB[ihisto][icharge]->Sumw2();
441       /* pt bins */
442       for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
443         hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
444         hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
445         hHistoPhi_MB_pt[ipt][ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kPhi);
446         hHistoPhi_MB_pt[ipt][ihisto][icharge]->SetName(Form("hHistoPhi_MB_pt%d_%s_%s", ipt, histoName[ihisto], chargeName[icharge]));
447         hHistoPhi_MB_pt[ipt][ihisto][icharge]->Sumw2();
448       }
449       
450       /* centrality projection */
451       for (Int_t icent = 0; icent < NcentralityBins; icent++) {
452         hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(0, 0);
453         hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
454         hHistoPhi_centrality[icent][ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kPhi);
455         hHistoPhi_centrality[icent][ihisto][icharge]->SetName(Form("hHistoPhi_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
456         hHistoPhi_centrality[icent][ihisto][icharge]->Sumw2();
457         /* pt bins */
458         for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
459           hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
460           hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
461           hHistoPhi_centrality_pt[icent][ipt][ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kPhi);
462           hHistoPhi_centrality_pt[icent][ipt][ihisto][icharge]->SetName(Form("hHistoPhi_centrality%d_pt%d_%s_%s", icent, ipt, histoName[ihisto], chargeName[icharge]));
463           hHistoPhi_centrality_pt[icent][ipt][ihisto][icharge]->Sumw2();
464         }
465       }
466     }
467   
468   /* output */
469   TString str = filename;
470   str.Insert(str.Length() - TString(".root").Length(), ".efficiencyPhi");
471   TFile *fileout = TFile::Open(str.Data(), "RECREATE");
472   
473   /* efficiencies/fractions and write */
474   TH1D *hEfficiencyPhi_MB[kNHistos][kNCharges], *hEfficiencyPhi_centrality[NcentralityBins][kNHistos][kNCharges], *hEfficiencyPhi_ratioMB_centrality[NcentralityBins][kNHistos][kNCharges];
475   TH1D *hEfficiencyPhi_MB_pt[NptsubBins][kNHistos][kNCharges], *hEfficiencyPhi_centrality_pt[NcentralityBins][NptsubBins][kNHistos][kNCharges], *hEfficiencyPhi_ratioMB_centrality_pt[NcentralityBins][NptsubBins][kNHistos][kNCharges];
476
477
478   TH1D *hFractionPhi_MB[kNHistos][kNCharges], *hFractionPhi_centrality[NcentralityBins][kNHistos][kNCharges], *hFractionPhi_ratioMB_centrality[NcentralityBins][kNHistos][kNCharges];
479   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
480     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
481       
482       if (ihisto == kAcceptedTracks) continue;
483       
484       /* MB efficiency */
485       hEfficiencyPhi_MB[ihisto][icharge] = new TH1D(*hHistoPhi_MB[ihisto][icharge]);
486       hEfficiencyPhi_MB[ihisto][icharge]->SetName(Form("hEfficiencyPhi_MB_%s_%s", histoName[ihisto], chargeName[icharge]));
487       hEfficiencyPhi_MB[ihisto][icharge]->SetLineWidth(2);
488       hEfficiencyPhi_MB[ihisto][icharge]->SetLineColor(1);
489       hEfficiencyPhi_MB[ihisto][icharge]->SetMarkerStyle(20);
490       hEfficiencyPhi_MB[ihisto][icharge]->SetMarkerColor(1);
491       hEfficiencyPhi_MB[ihisto][icharge]->Divide(hEfficiencyPhi_MB[ihisto][icharge], hHistoPhi_MB[kAcceptedTracks][icharge], 1, 1, "B");
492       hEfficiencyPhi_MB[ihisto][icharge]->Write();
493       /* pt bins */
494       for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
495         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge] = new TH1D(*hHistoPhi_MB_pt[ipt][ihisto][icharge]);
496         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge]->SetName(Form("hEfficiencyPhi_MB_pt%d_%s_%s", ipt, histoName[ihisto], chargeName[icharge]));
497         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge]->SetLineWidth(2);
498         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge]->SetLineColor(1);
499         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge]->SetMarkerStyle(20);
500         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge]->SetMarkerColor(1);
501         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge]->Divide(hEfficiencyPhi_MB_pt[ipt][ihisto][icharge], hHistoPhi_MB_pt[ipt][kAcceptedTracks][icharge], 1, 1, "B");
502         hEfficiencyPhi_MB_pt[ipt][ihisto][icharge]->Write();
503       }
504       
505       /* multiplicity/centrality efficiency */
506       for (Int_t icent = 0; icent < NcentralityBins; icent++) {
507         hEfficiencyPhi_centrality[icent][ihisto][icharge] = new TH1D(*hHistoPhi_centrality[icent][ihisto][icharge]);
508         hEfficiencyPhi_centrality[icent][ihisto][icharge]->SetName(Form("hEfficiencyPhi_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
509         hEfficiencyPhi_centrality[icent][ihisto][icharge]->SetLineWidth(2);
510         hEfficiencyPhi_centrality[icent][ihisto][icharge]->SetLineColor(multcentColor[icent]);
511         hEfficiencyPhi_centrality[icent][ihisto][icharge]->SetMarkerStyle(20);
512         hEfficiencyPhi_centrality[icent][ihisto][icharge]->SetMarkerColor(multcentColor[icent]);
513         hEfficiencyPhi_centrality[icent][ihisto][icharge]->Divide(hEfficiencyPhi_centrality[icent][ihisto][icharge], hHistoPhi_centrality[icent][kAcceptedTracks][icharge], 1, 1, "B");
514         hEfficiencyPhi_centrality[icent][ihisto][icharge]->Write();
515         
516         /* ratio wrt. MB */
517         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge] = new TH1D(*hEfficiencyPhi_centrality[icent][ihisto][icharge]);
518         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge]->SetName(Form("hEfficiencyPhi_ratioMB_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
519         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge]->SetLineWidth(2);
520         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge]->SetLineColor(multcentColor[icent]);
521         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge]->SetMarkerStyle(20);
522         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge]->SetMarkerColor(multcentColor[icent]);
523         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge]->Divide(hEfficiencyPhi_MB[ihisto][icharge]);
524         hEfficiencyPhi_ratioMB_centrality[icent][ihisto][icharge]->Write();
525       }
526       
527     }       
528   }
529   
530   fileout->Close();
531              
532 }
533
534 //_____________________________________________________________________________-
535
536 TOFmatchEff_efficiencyEta(const Char_t *filename)
537 {
538
539   /* get data */
540   TFile *filein = TFile::Open(filename);
541   THnSparseF *hHisto[kNHistos][kNCharges];
542   TH1D *hHistoEta_MB[kNHistos][kNCharges], *hHistoEta_centrality[NcentralityBins][kNHistos][kNCharges];
543   TH1D *hHistoEta_MB_pt[NptsubBins][kNHistos][kNCharges], *hHistoEta_centrality_pt[NcentralityBins][NptsubBins][kNHistos][kNCharges];
544   /* loop over histos */
545   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++)
546     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
547       
548       /* get histo */
549       hHisto[ihisto][icharge] = (THnSparseF *)filein->Get(Form("hHisto_%s_%s", histoName[ihisto], chargeName[icharge]));
550       
551       /* MB projection */
552       hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(0, 0);
553       hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
554       hHistoEta_MB[ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kEta);
555       hHistoEta_MB[ihisto][icharge]->SetName(Form("hHistoEta_MB_%s_%s", histoName[ihisto], chargeName[icharge]));
556       hHistoEta_MB[ihisto][icharge]->Sumw2();
557       /* pt bins */
558       for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
559         hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
560         hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(0, 0);
561         hHistoEta_MB_pt[ipt][ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kEta);
562         hHistoEta_MB_pt[ipt][ihisto][icharge]->SetName(Form("hHistoEta_MB_pt%d_%s_%s", ipt, histoName[ihisto], chargeName[icharge]));
563         hHistoEta_MB_pt[ipt][ihisto][icharge]->Sumw2();
564       }
565       
566       /* centrality projection */
567       for (Int_t icent = 0; icent < NcentralityBins; icent++) {
568         hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(0, 0);
569         hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
570         hHistoEta_centrality[icent][ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kEta);
571         hHistoEta_centrality[icent][ihisto][icharge]->SetName(Form("hHistoEta_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
572         hHistoEta_centrality[icent][ihisto][icharge]->Sumw2();
573         /* pt bins */
574         for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
575           hHisto[ihisto][icharge]->GetAxis(kPt)->SetRange(ptsubBinMin[ipt] + 1, ptsubBinMax[ipt] + 1);
576           hHisto[ihisto][icharge]->GetAxis(kCentrality)->SetRange(icent + 1, icent + 1);
577           hHistoEta_centrality_pt[icent][ipt][ihisto][icharge] = hHisto[ihisto][icharge]->Projection(kEta);
578           hHistoEta_centrality_pt[icent][ipt][ihisto][icharge]->SetName(Form("hHistoEta_centrality%d_pt%d_%s_%s", icent, ipt, histoName[ihisto], chargeName[icharge]));
579           hHistoEta_centrality_pt[icent][ipt][ihisto][icharge]->Sumw2();
580         }
581       }
582     }
583   
584   /* output */
585   TString str = filename;
586   str.Insert(str.Length() - TString(".root").Length(), ".efficiencyEta");
587   TFile *fileout = TFile::Open(str.Data(), "RECREATE");
588   
589   /* efficiencies/fractions and write */
590   TH1D *hEfficiencyEta_MB[kNHistos][kNCharges], *hEfficiencyEta_centrality[NcentralityBins][kNHistos][kNCharges], *hEfficiencyEta_ratioMB_centrality[NcentralityBins][kNHistos][kNCharges];
591   TH1D *hEfficiencyEta_MB_pt[NptsubBins][kNHistos][kNCharges], *hEfficiencyEta_centrality_pt[NcentralityBins][NptsubBins][kNHistos][kNCharges], *hEfficiencyEta_ratioMB_centrality_pt[NcentralityBins][NptsubBins][kNHistos][kNCharges];
592
593
594   TH1D *hFractionEta_MB[kNHistos][kNCharges], *hFractionEta_centrality[NcentralityBins][kNHistos][kNCharges], *hFractionEta_ratioMB_centrality[NcentralityBins][kNHistos][kNCharges];
595   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
596     for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
597       
598       if (ihisto == kAcceptedTracks) continue;
599       
600       /* MB efficiency */
601       hEfficiencyEta_MB[ihisto][icharge] = new TH1D(*hHistoEta_MB[ihisto][icharge]);
602       hEfficiencyEta_MB[ihisto][icharge]->SetName(Form("hEfficiencyEta_MB_%s_%s", histoName[ihisto], chargeName[icharge]));
603       hEfficiencyEta_MB[ihisto][icharge]->SetLineWidth(2);
604       hEfficiencyEta_MB[ihisto][icharge]->SetLineColor(1);
605       hEfficiencyEta_MB[ihisto][icharge]->SetMarkerStyle(20);
606       hEfficiencyEta_MB[ihisto][icharge]->SetMarkerColor(1);
607       hEfficiencyEta_MB[ihisto][icharge]->Divide(hEfficiencyEta_MB[ihisto][icharge], hHistoEta_MB[kAcceptedTracks][icharge], 1, 1, "B");
608       hEfficiencyEta_MB[ihisto][icharge]->Write();
609       /* pt bins */
610       for (Int_t ipt = 0; ipt < NptsubBins; ipt++) {
611         hEfficiencyEta_MB_pt[ipt][ihisto][icharge] = new TH1D(*hHistoEta_MB_pt[ipt][ihisto][icharge]);
612         hEfficiencyEta_MB_pt[ipt][ihisto][icharge]->SetName(Form("hEfficiencyEta_MB_pt%d_%s_%s", ipt, histoName[ihisto], chargeName[icharge]));
613         hEfficiencyEta_MB_pt[ipt][ihisto][icharge]->SetLineWidth(2);
614         hEfficiencyEta_MB_pt[ipt][ihisto][icharge]->SetLineColor(1);
615         hEfficiencyEta_MB_pt[ipt][ihisto][icharge]->SetMarkerStyle(20);
616         hEfficiencyEta_MB_pt[ipt][ihisto][icharge]->SetMarkerColor(1);
617         hEfficiencyEta_MB_pt[ipt][ihisto][icharge]->Divide(hEfficiencyEta_MB_pt[ipt][ihisto][icharge], hHistoEta_MB_pt[ipt][kAcceptedTracks][icharge], 1, 1, "B");
618         hEfficiencyEta_MB_pt[ipt][ihisto][icharge]->Write();
619       }
620       
621       /* multiplicity/centrality efficiency */
622       for (Int_t icent = 0; icent < NcentralityBins; icent++) {
623         hEfficiencyEta_centrality[icent][ihisto][icharge] = new TH1D(*hHistoEta_centrality[icent][ihisto][icharge]);
624         hEfficiencyEta_centrality[icent][ihisto][icharge]->SetName(Form("hEfficiencyEta_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
625         hEfficiencyEta_centrality[icent][ihisto][icharge]->SetLineWidth(2);
626         hEfficiencyEta_centrality[icent][ihisto][icharge]->SetLineColor(multcentColor[icent]);
627         hEfficiencyEta_centrality[icent][ihisto][icharge]->SetMarkerStyle(20);
628         hEfficiencyEta_centrality[icent][ihisto][icharge]->SetMarkerColor(multcentColor[icent]);
629         hEfficiencyEta_centrality[icent][ihisto][icharge]->Divide(hEfficiencyEta_centrality[icent][ihisto][icharge], hHistoEta_centrality[icent][kAcceptedTracks][icharge], 1, 1, "B");
630         hEfficiencyEta_centrality[icent][ihisto][icharge]->Write();
631         
632         /* ratio wrt. MB */
633         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge] = new TH1D(*hEfficiencyEta_centrality[icent][ihisto][icharge]);
634         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge]->SetName(Form("hEfficiencyEta_ratioMB_centrality%d_%s_%s", icent, histoName[ihisto], chargeName[icharge]));
635         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge]->SetLineWidth(2);
636         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge]->SetLineColor(multcentColor[icent]);
637         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge]->SetMarkerStyle(20);
638         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge]->SetMarkerColor(multcentColor[icent]);
639         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge]->Divide(hEfficiencyEta_MB[ihisto][icharge]);
640         hEfficiencyEta_ratioMB_centrality[icent][ihisto][icharge]->Write();
641       }
642       
643     }       
644   }
645   
646   fileout->Close();
647              
648 }
649
650 #if 0
651 //_____________________________________________________________________________-
652
653 TOFmatchMC_efficiencyCent(const Char_t *filename, const Char_t *particle = "", const Char_t *charge = "", const Char_t *trdmode = "")
654 {
655
656   const Int_t npt = 4;
657   Double_t pt[npt + 1] = {0., 0.5, 1.0, 1.5, 5.0};
658
659   /* get data */
660   TFile *filein = TFile::Open(filename);
661   THnSparseF *hHisto[kNHistos];
662   TH1D *hHisto_all[kNHistos], *hHisto_MB_all[kNHistos], *hHisto_pt[kNHistos][MAXMULTCENTBINS], *hHisto_MB_pt[kNHistos][MAXMULTCENTBINS];
663   /* loop over histos */
664   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
665     if (ihisto == kMatchedCorrelatedTracks) continue;
666     /* get histo */
667     hHisto[ihisto] = (THnSparseF *)filein->Get(histoName[ihisto]);
668     /* set range limits */
669     hHisto[ihisto]->GetAxis(kRapidity)->SetRangeUser(-0.5 + kEpsilon, 0.5 - kEpsilon);
670     hHisto[ihisto]->GetAxis(kEta)->SetRangeUser(-0.8 + kEpsilon, 0.8 - kEpsilon);
671     hHisto[ihisto]->GetAxis(kPt)->SetRangeUser(0. + kEpsilon, 5.0 - kEpsilon);
672     /* select particle if requested */
673     for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
674       if (TString(particle) == AliPID::ParticleName(ipart))
675         hHisto[ihisto]->GetAxis(kParticle)->SetRange(ipart + 1, ipart + 1);
676     /* select charge if requested */
677     if (TString(charge) == "plus")
678       hHisto[ihisto]->GetAxis(kCharge)->SetRange(1, 1);
679     else if (TString(charge) == "minus")
680       hHisto[ihisto]->GetAxis(kCharge)->SetRange(2, 2);
681     /* select TRD mode if requested */
682     if (TString(trdmode) == "trdout")
683       hHisto[ihisto]->GetAxis(kTRDmode)->SetRange(1, 1);
684     else if (TString(trdmode) == "notrdout")
685       hHisto[ihisto]->GetAxis(kTRDmode)->SetRange(2, 2);
686     /* all projection */
687     hHisto_all[ihisto] = hHisto[ihisto]->Projection(kMultCent);
688     hHisto_all[ihisto]->SetName(Form("%s_all", histoName[ihisto]));
689     hHisto_all[ihisto]->Sumw2();
690     /* MB all projection */
691     hHisto_MB_all[ihisto] = new TH1D(*hHisto_all[ihisto]);
692     hHisto_MB_all[ihisto]->SetName(Form("%s_MB_all", histoName[ihisto]));
693     for (Int_t i = 0; i < hHisto_MB_all[ihisto]->GetNbinsX(); i++) {
694       hHisto_MB_all[ihisto]->SetBinContent(i + 1, hHisto_all[ihisto]->Integral());
695       hHisto_MB_all[ihisto]->SetBinError(i + 1, TMath::Sqrt(hHisto_all[ihisto]->Integral()));
696     }
697     /* pt projection */
698     for (Int_t ibin = 0; ibin < npt; ibin++) {
699       hHisto[ihisto]->GetAxis(kPt)->SetRangeUser(pt[ibin] + kEpsilon, pt[ibin + 1] - kEpsilon);
700       hHisto_pt[ihisto][ibin] = hHisto[ihisto]->Projection(kMultCent);
701       hHisto_pt[ihisto][ibin]->SetName(Form("%s_pt%3.1f-%3.1f", histoName[ihisto], pt[ibin], pt[ibin + 1]));
702       hHisto_pt[ihisto][ibin]->Sumw2();
703       /* MB pt projection */
704       hHisto_MB_pt[ihisto][ibin] = new TH1D(*hHisto_pt[ihisto][ibin]);
705       hHisto_MB_pt[ihisto][ibin]->SetName(Form("%s_MB_pt%3.1f-%3.1f", histoName[ihisto], pt[ibin], pt[ibin + 1]));
706       for (Int_t i = 0; i < hHisto_MB_pt[ihisto][ibin]->GetNbinsX(); i++) {
707         hHisto_MB_pt[ihisto][ibin]->SetBinContent(i + 1, hHisto_pt[ihisto][ibin]->Integral());
708         hHisto_MB_pt[ihisto][ibin]->SetBinError(i + 1, TMath::Sqrt(hHisto_pt[ihisto][ibin]->Integral()));
709       }
710     }
711   }
712   /*** matched correlated histos ***/
713   /* all projection */
714   hHisto_all[kMatchedCorrelatedTracks] = new TH1D(*hHisto_all[kMatchedTracks]);
715   hHisto_all[kMatchedCorrelatedTracks]->Add(hHisto_all[kUncorrelatedTracks], -1.);
716   hHisto_all[kMatchedCorrelatedTracks]->SetName(Form("%s_all", histoName[kMatchedCorrelatedTracks]));
717   /* MB all projection */
718   hHisto_MB_all[kMatchedCorrelatedTracks] = new TH1D(*hHisto_MB_all[kMatchedTracks]);
719   hHisto_MB_all[kMatchedCorrelatedTracks]->Add(hHisto_MB_all[kUncorrelatedTracks], -1.);
720   hHisto_MB_all[kMatchedCorrelatedTracks]->SetName(Form("%s_MB_all", histoName[kMatchedCorrelatedTracks]));
721   /* pt projection */
722   for (Int_t ibin = 0; ibin < npt; ibin++) {
723     hHisto_pt[kMatchedCorrelatedTracks][ibin] = new TH1D(*hHisto_pt[kMatchedTracks][ibin]);
724     hHisto_pt[kMatchedCorrelatedTracks][ibin]->Add(hHisto_pt[kUncorrelatedTracks][ibin], -1.);
725     hHisto_pt[kMatchedCorrelatedTracks][ibin]->SetName(Form("%s_pt%3.1f-%3.1f", histoName[kMatchedCorrelatedTracks], pt[ibin], pt[ibin + 1]));
726     /* MB pt projection */
727     hHisto_MB_pt[kMatchedCorrelatedTracks][ibin] = new TH1D(*hHisto_MB_pt[kMatchedTracks][ibin]);
728     hHisto_MB_pt[kMatchedCorrelatedTracks][ibin]->Add(hHisto_MB_pt[kUncorrelatedTracks][ibin], -1.);
729     hHisto_MB_pt[kMatchedCorrelatedTracks][ibin]->SetName(Form("%s_MB_pt%3.1f-%3.1f", histoName[kMatchedCorrelatedTracks], pt[ibin], pt[ibin + 1]));
730   }
731
732   /* output */
733   TString str = filename;
734   str.Insert(str.Length() - TString(".root").Length(), ".efficiencyCent");
735   for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
736     if (TString(particle) == AliPID::ParticleName(ipart))
737       str.Insert(str.Length() - TString(".root").Length(), Form(".%s", AliPID::ParticleName(ipart)));
738   if (TString(charge) == "plus")
739     str.Insert(str.Length() - TString(".root").Length(), ".plus");
740   else if (TString(charge) == "minus")
741     str.Insert(str.Length() - TString(".root").Length(), ".minus");
742   if (TString(trdmode) == "trdout")
743     str.Insert(str.Length() - TString(".root").Length(), ".trdout");
744   else if (TString(trdmode) == "notrdout")
745     str.Insert(str.Length() - TString(".root").Length(), ".notrdout");
746   TFile *fileout = TFile::Open(str.Data(), "RECREATE");
747   
748   /* efficiencies/fractions and write */
749   TH1D *hEfficiency_all[kNHistos], *hEfficiency_MB_all[kNHistos], *hEfficiency_ratioMB_all[kNHistos], *hEfficiency_pt[kNHistos][MAXMULTCENTBINS], *hEfficiency_MB_pt[kNHistos][MAXMULTCENTBINS], *hEfficiency_ratioMB_pt[kNHistos][MAXMULTCENTBINS];
750
751
752   //  TH1D *hEfficiency_MB[kNHistos], *hEfficiency_multcent[kNHistos][MAXMULTCENTBINS], *hEfficiency_ratioMB_multcent[kNHistos][MAXMULTCENTBINS];
753   //  TH1D *hFraction_MB[kNHistos], *hFraction_multcent[kNHistos][MAXMULTCENTBINS], *hFraction_ratioMB_multcent[kNHistos][MAXMULTCENTBINS];
754   for (Int_t ihisto = 0; ihisto < kNHistos; ihisto++) {
755     if (ihisto == kAcceptedTracks) continue;
756     /* all efficiency */
757     hEfficiency_all[ihisto] = new TH1D(*hHisto_all[ihisto]);
758     hEfficiency_all[ihisto]->SetName(Form("%s_efficiency_all", histoName[ihisto]));
759     hEfficiency_all[ihisto]->SetLineWidth(2);
760     hEfficiency_all[ihisto]->SetLineColor(1);
761     hEfficiency_all[ihisto]->SetMarkerStyle(20);
762     hEfficiency_all[ihisto]->SetMarkerColor(1);
763     hEfficiency_all[ihisto]->Divide(hHisto_all[kAcceptedTracks]);
764     hEfficiency_all[ihisto]->Write();
765     /* MB all efficiency */
766     hEfficiency_MB_all[ihisto] = new TH1D(*hHisto_MB_all[ihisto]);
767     hEfficiency_MB_all[ihisto]->SetName(Form("%s_efficiency_MB_all", histoName[ihisto]));
768     hEfficiency_MB_all[ihisto]->Divide(hHisto_MB_all[kAcceptedTracks]);
769     hEfficiency_MB_all[ihisto]->Write();
770     /* ratio wrt. MB */
771     hEfficiency_ratioMB_all[ihisto] = new TH1D(*hEfficiency_all[ihisto]);
772     hEfficiency_ratioMB_all[ihisto]->SetName(Form("%s_efficiency_ratioMB_all", histoName[ihisto]));
773     hEfficiency_ratioMB_all[ihisto]->Divide(hEfficiency_MB_all[ihisto]);
774     hEfficiency_ratioMB_all[ihisto]->Write();
775     /* pt efficiency */
776     for (Int_t ibin = 0; ibin < npt; ibin++) {
777       hEfficiency_pt[ihisto][ibin] = new TH1D(*hHisto_pt[ihisto][ibin]);
778       hEfficiency_pt[ihisto][ibin]->SetName(Form("%s_efficiency_pt%3.1f-%3.1f", histoName[ihisto], pt[ibin], pt[ibin + 1]));
779       hEfficiency_pt[ihisto][ibin]->SetLineWidth(2);
780       hEfficiency_pt[ihisto][ibin]->SetLineColor(multcentColor[ibin]);
781       hEfficiency_pt[ihisto][ibin]->SetMarkerStyle(20);
782       hEfficiency_pt[ihisto][ibin]->SetMarkerColor(multcentColor[ibin]);
783       hEfficiency_pt[ihisto][ibin]->Divide(hHisto_pt[kAcceptedTracks][ibin]);
784       hEfficiency_pt[ihisto][ibin]->Write();
785       /* MB pt efficiency */
786       hEfficiency_MB_pt[ihisto][ibin] = new TH1D(*hHisto_MB_pt[ihisto][ibin]);
787       hEfficiency_MB_pt[ihisto][ibin]->SetName(Form("%s_efficiency_MB_pt%3.1f-%3.1f", histoName[ihisto], pt[ibin], pt[ibin + 1]));
788       hEfficiency_MB_pt[ihisto][ibin]->Divide(hHisto_MB_pt[kAcceptedTracks][ibin]);
789       hEfficiency_MB_pt[ihisto][ibin]->Write();
790       /* ratio wrt. central */
791       hEfficiency_ratioMB_pt[ihisto][ibin] = new TH1D(*hEfficiency_pt[ihisto][ibin]);
792       hEfficiency_ratioMB_pt[ihisto][ibin]->SetName(Form("%s_efficiency_ratioMB_pt%3.1f-%3.1f", histoName[ihisto], pt[ibin], pt[ibin + 1]));
793       hEfficiency_ratioMB_pt[ihisto][ibin]->Divide(hEfficiency_MB_pt[ihisto][ibin]);
794       hEfficiency_ratioMB_pt[ihisto][ibin]->Write();
795     }
796
797 #if 0
798
799     if (ihisto == kAcceptedTracks || ihisto == kMatchedTracks) continue;
800     /* MB fraction */
801     hFraction_MB[ihisto] = new TH1D(*hHisto_MB[ihisto]);
802     hFraction_MB[ihisto]->SetName(Form("%s_fraction_MB", histoName[ihisto]));
803     hFraction_MB[ihisto]->SetLineWidth(2);
804     hFraction_MB[ihisto]->SetLineColor(1);
805     hFraction_MB[ihisto]->SetMarkerStyle(20);
806     hFraction_MB[ihisto]->SetMarkerColor(1);
807     hFraction_MB[ihisto]->Divide(hHisto_MB[kMatchedTracks]);
808     hFraction_MB[ihisto]->Write();
809     /* multiplicity/centrality fraction */
810     for (Int_t ibin = 0; ibin < hHisto[kMatchedTracks]->GetAxis(kMultCent)->GetNbins(); ibin++) {
811        hFraction_multcent[ihisto][ibin] = new TH1D(*hHisto_multcent[ihisto][ibin]);
812        hFraction_multcent[ihisto][ibin]->SetName(Form("%s_fraction_multcent%d", histoName[ihisto], ibin));
813        hFraction_multcent[ihisto][ibin]->SetLineWidth(2);
814        hFraction_multcent[ihisto][ibin]->SetLineColor(multcentColor[ibin]);
815        hFraction_multcent[ihisto][ibin]->SetMarkerStyle(20);
816        hFraction_multcent[ihisto][ibin]->SetMarkerColor(multcentColor[ibin]);
817        hFraction_multcent[ihisto][ibin]->Divide(hHisto_multcent[kMatchedTracks][ibin]);
818        hFraction_multcent[ihisto][ibin]->Write();
819        /* ratio wrt. MB */
820        hFraction_ratioMB_multcent[ihisto][ibin] = new TH1D(*hFraction_multcent[ihisto][ibin]);
821        hFraction_ratioMB_multcent[ihisto][ibin]->SetName(Form("%s_fraction_ratioMB_multcent%d", histoName[ihisto], ibin));
822        hFraction_ratioMB_multcent[ihisto][ibin]->SetLineWidth(2);
823        hFraction_ratioMB_multcent[ihisto][ibin]->SetLineColor(multcentColor[ibin]);
824        hFraction_ratioMB_multcent[ihisto][ibin]->SetMarkerStyle(20);
825        hFraction_ratioMB_multcent[ihisto][ibin]->SetMarkerColor(multcentColor[ibin]);
826        hFraction_ratioMB_multcent[ihisto][ibin]->Divide(hFraction_MB[ihisto]);
827        hFraction_ratioMB_multcent[ihisto][ibin]->Write();
828     }
829
830     #endif
831  
832   }
833   fileout->Close();
834   
835 }
836 #endif
837
838 //_____________________________________________________________________________-
839
840 TH1D *
841 TOFmatchMC_get(const Char_t *filename, const Char_t *name, Option_t *opt = "", Int_t color = 1, Int_t marker = 20)
842 {
843
844   TFile *f = TFile::Open(filename);
845   if (!f || !f->IsOpen())
846     return NULL;
847   TH1D *h = (TH1D *)f->Get(name);
848   if (!h)
849     return NULL;
850   h->SetLineColor(color);
851   h->SetLineWidth(2);
852   h->SetMarkerColor(color);
853   h->SetMarkerStyle(marker);
854   h->Draw(opt);
855   return h;
856 }
857
858 //_____________________________________________________________________________-
859
860 TH1D *
861 TOFmatchMC_divide(const Char_t *filename, const Char_t *name1, const Char_t *name2, Option_t *opt = "")
862 {
863
864   TFile *f = TFile::Open(filename);
865   if (!f || !f->IsOpen())
866     return NULL;
867   TH1D *h1 = (TH1D *)f->Get(name1);
868   TH1D *h2 = (TH1D *)f->Get(name2);
869   if (!h1 || !h2)
870     return NULL;
871   TH1D *hr = new TH1D(*h1);
872   hr->Divide(h2);
873   hr->Draw(opt);
874   return hr;
875 }
876
877 //_____________________________________________________________________________-
878
879 TH1D *
880 TOFmatchMC_sub(const Char_t *filename, const Char_t *name1, const Char_t *name2, Option_t *opt = "", Int_t color = 1, Int_t marker = 20)
881 {
882
883   TFile *f = TFile::Open(filename);
884   if (!f || !f->IsOpen())
885     return NULL;
886   TH1D *h1 = (TH1D *)f->Get(name1);
887   TH1D *h2 = (TH1D *)f->Get(name2);
888   if (!h1 || !h2)
889     return NULL;
890   TH1D *hr = new TH1D(*h1);
891   hr->Add(h2, -1.);
892   hr->SetLineColor(color);
893   hr->SetLineWidth(2);
894   hr->SetMarkerColor(color);
895   hr->SetMarkerStyle(marker);
896   hr->Draw(opt);
897   return hr;
898 }
899
900 //_____________________________________________________________________________-
901
902 TH1D *
903 TOFmatchMC_compare(const Char_t *filename1, const Char_t *filename2, const Char_t *name, Option_t *opt = "", Int_t color = 1, Int_t marker = 20)
904 {
905
906   TFile *f1 = TFile::Open(filename1);
907   TFile *f2 = TFile::Open(filename2);
908   if (!f1 || !f2 || !f1->IsOpen() || !f2->IsOpen())
909     return NULL;
910   TH1D *h1 = (TH1D *)f1->Get(name);
911   TH1D *h2 = (TH1D *)f2->Get(name);
912   if (!h1 || !h2)
913     return NULL;
914   TH1D *hr = new TH1D(*h1);
915   hr->Divide(h2);
916   hr->SetLineColor(color);
917   hr->SetLineWidth(2);
918   hr->SetMarkerColor(color);
919   hr->SetMarkerStyle(marker);
920   hr->Draw(opt);
921   return hr;
922 }
923
924 //_____________________________________________________________________________-
925
926 TH1D *
927 TOFmatchMC_comparesub(const Char_t *filename1, const Char_t *filename2, const Char_t *name1, const Char_t *name2, Option_t *opt = "", Int_t color = 1, Int_t marker = 20)
928 {
929
930   TFile *f1 = TFile::Open(filename1);
931   TFile *f2 = TFile::Open(filename2);
932   if (!f1 || !f2 || !f1->IsOpen() || !f2->IsOpen())
933     return NULL;
934   TH1D *h11 = (TH1D *)f1->Get(name1);
935   TH1D *h21 = (TH1D *)f2->Get(name1);
936   TH1D *h12 = (TH1D *)f1->Get(name2);
937   TH1D *h22 = (TH1D *)f2->Get(name2);
938   if (!h11 || !h21 || !h12 || !h22)
939     return NULL;
940   TH1D *hs1 = new TH1D(*h11);
941   hs1->Add(h12, -1.);
942   TH1D *hs2 = new TH1D(*h21);
943   hs2->Add(h22, -1.);
944   TH1D *hr = new TH1D(*hs1);
945   hr->Divide(hs2);
946   hr->SetLineColor(color);
947   hr->SetLineWidth(2);
948   hr->SetMarkerColor(color);
949   hr->SetMarkerStyle(marker);
950   hr->Draw(opt);
951   return hr;
952 }
953
954
955 TH1D *
956 TOFmatchEff_efficiencyPt_MB_plot(const Char_t *filename, Int_t ihisto = kMatchedTracks, Int_t icharge, Int_t marker = 20, Int_t color = 2, Option_t *opt = "")
957 {
958   
959   TCanvas *cCanvas1 = new TCanvas("cCanvas1");
960   TCanvas *cCanvas2 = new TCanvas("cCanvas2");
961   const Char_t *destdir = "matchingEfficiency_DATA";
962   
963   Double_t ptMin = 0.5;
964   Double_t ptMax = 5.0;
965
966   TF1 *fEff = new TF1("fEff", "[0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4]))", 0., 5.0);
967   fEff->SetParameter(0, 0.5);
968   fEff->SetParameter(1, 0.);
969   fEff->SetParameter(2, 0.5);
970   fEff->SetParameter(3, 1.);
971   fEff->SetParameter(4, 2.);
972
973
974   TFile *filein = TFile::Open(filename);
975   TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_%s_%s", histoName[ihisto], chargeName[icharge]));
976   hEfficiencyPt->Fit(fEff, "0", "", 0.5, 5.0);
977   hEfficiencyPt->SetTitle(Form("%s tracks;p_{T} (GeV/c);acceptance #times efficiency;", chargeName[icharge]));
978   hEfficiencyPt->SetMinimum(0.4);
979   hEfficiencyPt->SetMaximum(0.8);
980   hEfficiencyPt->SetMarkerStyle(marker);
981   hEfficiencyPt->SetMarkerColor(color);
982   hEfficiencyPt->SetMarkerSize(1.5);
983   hEfficiencyPt->SetLineWidth(2);
984   hEfficiencyPt->SetLineColor(color);
985   hEfficiencyPt->GetXaxis()->SetRangeUser(ptMin + 0.001, ptMax - 0.001);
986   hEfficiencyPt->SetStats(kFALSE);
987   cCanvas1->cd();
988   hEfficiencyPt->Draw(opt);
989   fEff->Draw("same");
990
991   cCanvas1->SetGridx();
992   cCanvas1->SetGridy();
993   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s.C", destdir, chargeName[icharge]));
994   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s.root", destdir, chargeName[icharge]));
995   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s.png", destdir, chargeName[icharge]));
996   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_%s.eps", destdir, chargeName[icharge]));
997   
998   TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
999   hRatioPt->Divide(fEff);
1000   hRatioPt->SetTitle(Form("%s tracks;p_{T} (GeV/c);ratio wrt. fitted dependence;", chargeName[icharge]));
1001   hRatioPt->SetMinimum(0.9);
1002   hRatioPt->SetMaximum(1.1);
1003   cCanvas2->cd();
1004   hRatioPt->Draw();
1005
1006   cCanvas2->SetGridx();
1007   cCanvas2->SetGridy();
1008   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s.C", destdir, chargeName[icharge]));
1009   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s.root", destdir, chargeName[icharge]));
1010   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s.png", destdir, chargeName[icharge]));
1011   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_%s.eps", destdir, chargeName[icharge]));
1012   
1013
1014   //  hEfficiencyPt->Add(fEff, -1.);
1015   return hEfficiencyPt;
1016 }
1017
1018
1019 //_____________________________________________________________________________-
1020
1021 TH1D *
1022 TOFmatchEff_efficiencyPt_centrality_all_plot(const Char_t *filename, Int_t ihisto = kMatchedTracks, Int_t marker = 20, Int_t color = 1, Option_t *opt = "")
1023 {
1024   
1025   TCanvas *cCanvas1 = new TCanvas("cCanvas1");
1026   TCanvas *cCanvas2 = new TCanvas("cCanvas2");
1027   const Char_t *destdir = "matchingEfficiency_DATA";
1028   
1029   Double_t ptMin = 0.5;
1030   Double_t ptMax = 5.0;
1031
1032   TF1 *fMismatchFrac = new TF1("fMismatchFrac", "([0]+[1]*TMath::Exp(-[2]*TMath::Power(x,[3])))*[4]", 0., 5.0);
1033   fMismatchFrac->SetParameter(0, 0.0447133);
1034   fMismatchFrac->SetParameter(1, 0.179172);
1035   fMismatchFrac->SetParameter(2, 2.54333);
1036   fMismatchFrac->SetParameter(3, 1.16819);
1037   fMismatchFrac->SetParameter(4, 1.);
1038   
1039   TF1 *fEff = new TF1("fEff", "([0] + [1] * x - [2] * TMath::Exp(-[3] * TMath::Power(x, [4]))) * [5]", 0., 5.0);
1040   fEff->SetParameter(0, 0.5);
1041   fEff->SetParameter(1, 0.);
1042   fEff->SetParameter(2, 0.5);
1043   fEff->SetParameter(3, 1.);
1044   fEff->SetParameter(4, 2.);
1045   fEff->FixParameter(5, 1.);
1046   
1047   TFile *filein = TFile::Open(filename);
1048   TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
1049   hEfficiencyPt->Fit(fEff, "0", "", 0.5, 5.0);
1050   hEfficiencyPt->SetTitle("all particles;p_{T} (GeV/c);acceptance #times efficiency;");
1051   hEfficiencyPt->SetMinimum(0.4);
1052   hEfficiencyPt->SetMaximum(0.8);
1053   hEfficiencyPt->SetMarkerStyle(marker);
1054   hEfficiencyPt->SetMarkerColor(color);
1055   hEfficiencyPt->SetMarkerSize(1.5);
1056   hEfficiencyPt->SetLineWidth(2);
1057   hEfficiencyPt->SetLineColor(color);
1058   hEfficiencyPt->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
1059   hEfficiencyPt->SetStats(kFALSE);
1060   cCanvas1->cd();
1061   hEfficiencyPt->Draw(opt);
1062   fEff->Draw("same");
1063
1064   cCanvas1->SetGridx();
1065   cCanvas1->SetGridy();
1066   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.C", destdir));
1067   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.root", destdir));
1068   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.png", destdir));
1069   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.eps", destdir));
1070
1071   TH1D *hRatioPt = new TH1D(*hEfficiencyPt);
1072   hRatioPt->Divide(fEff);
1073   hRatioPt->SetTitle("all particles;p_{T} (GeV/c);ratio wrt. fitted dependence;");
1074   hRatioPt->SetMinimum(0.9);
1075   hRatioPt->SetMaximum(1.1);
1076   cCanvas2->cd();
1077   hRatioPt->Draw();
1078
1079   cCanvas2->SetGridx();
1080   cCanvas2->SetGridy();
1081   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.C", destdir));
1082   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.root", destdir));
1083   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.png", destdir));
1084   cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_MB_all.eps", destdir));
1085   
1086   /* fix efficiency shape and release scale factor */
1087   fEff->FixParameter(0, fEff->GetParameter(0));
1088   fEff->FixParameter(1, fEff->GetParameter(1));
1089   fEff->FixParameter(2, fEff->GetParameter(2));
1090   fEff->FixParameter(3, fEff->GetParameter(3));
1091   fEff->FixParameter(4, fEff->GetParameter(4));
1092   fEff->ReleaseParameter(5);
1093   
1094   TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", "all particles;centrality percentile;acceptance x efficiency scale factor;", NcentralityBins, centralityBin);
1095   hEfficiencyCent->SetMinimum(0.95);
1096   hEfficiencyCent->SetMaximum(1.05);
1097   hEfficiencyCent->SetMarkerStyle(marker);
1098   hEfficiencyCent->SetMarkerColor(color);
1099   hEfficiencyCent->SetMarkerSize(1.5);
1100   hEfficiencyCent->SetLineWidth(2);
1101   hEfficiencyCent->SetLineColor(color);
1102   hEfficiencyCent->SetStats(kFALSE);
1103   
1104   
1105   TH1D *hEfficiencyPt_cent[NcentralityBins];
1106   TH1D *hRatioPt_cent[NcentralityBins];
1107   for (Int_t icent = 0; icent < NcentralityBins; icent++) {
1108     
1109   
1110     hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
1111     hEfficiencyPt_cent[icent]->Fit(fEff, "", "", 0.5, 5.0);
1112     
1113     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]));
1114     hEfficiencyPt_cent[icent]->SetMinimum(0.2);
1115     hEfficiencyPt_cent[icent]->SetMaximum(0.8);
1116     hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
1117     hEfficiencyPt_cent[icent]->SetMarkerColor(color);
1118     hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
1119     hEfficiencyPt_cent[icent]->SetLineWidth(2);
1120     hEfficiencyPt_cent[icent]->SetLineColor(color);
1121     hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
1122     hEfficiencyPt_cent[icent]->SetStats(kFALSE);
1123     cCanvas1->cd();
1124     hEfficiencyPt_cent[icent]->Draw(opt);
1125     fEff->Draw("same");
1126     
1127     hEfficiencyCent->SetBinContent(icent + 1, fEff->GetParameter(5));
1128     hEfficiencyCent->SetBinError(icent + 1, fEff->GetParError(5));
1129     
1130     cCanvas1->SetGridx();
1131     cCanvas1->SetGridy();
1132     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.C", destdir, icent));
1133     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.root", destdir, icent));
1134     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.png", destdir, icent));
1135     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.eps", destdir, icent));
1136     
1137     hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
1138     hRatioPt_cent[icent]->Divide(fEff);
1139     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]));
1140     hRatioPt_cent[icent]->SetMinimum(0.9);
1141     hRatioPt_cent[icent]->SetMaximum(1.1);
1142     cCanvas2->cd();
1143     hRatioPt_cent[icent]->Draw();
1144
1145     cCanvas2->SetGridx();
1146     cCanvas2->SetGridy();
1147     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.C", destdir, icent));
1148     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.root", destdir, icent));
1149     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.png", destdir, icent));
1150     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.eps", destdir, icent));
1151
1152     
1153   }
1154
1155   TF1 *fEffCent = new TF1("fEffCent", "[0] - [1] * TMath::Exp(-[2] * TMath::Power(x, [3]))", 0., 90.);
1156   fEffCent->SetParameter(0, 1.02);
1157   fEffCent->SetParameter(1, 0.04);
1158   fEffCent->SetParameter(2, 0.001);
1159   fEffCent->SetParameter(3, 2.);
1160   //  hEfficiencyCent->Fit(fEffCent, "q0", "", 0., 90.);
1161   
1162   TCanvas *cCanvas3 = new TCanvas("cCanvas3");
1163   hEfficiencyCent->Draw();
1164   //  fEffCent->Draw("same");
1165   
1166   cCanvas3->SetGridx();
1167   cCanvas3->SetGridy();
1168   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.C", destdir));
1169   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.root", destdir));
1170   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.png", destdir));
1171   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.eps", destdir));
1172
1173   TCanvas *cCanvas4 = new TCanvas("cCanvas4");
1174
1175   TH1D *hRatioCent = new TH1D(*hEfficiencyCent);
1176   hRatioCent->Divide(fEffCent);
1177   hRatioCent->SetTitle(Form("all particles;centrality percentile;ratio wrt. fitted dependence;"));
1178   hRatioCent->SetMinimum(0.95);
1179   hRatioCent->SetMaximum(1.05);
1180   cCanvas4->cd();
1181   hRatioCent->Draw();
1182
1183   cCanvas4->SetGridx();
1184   cCanvas4->SetGridy();
1185   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.C", destdir));
1186   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.root", destdir));
1187   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.png", destdir));
1188   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.eps", destdir));
1189   
1190
1191
1192   //  hEfficiencyPt->Add(fEff, -1.);
1193   return hEfficiencyCent;
1194 }
1195
1196
1197 //_____________________________________________________________________________-
1198
1199 TH1D *
1200 TOFmatchEff_efficiencyPt_centrality_all_plot_nomismatch(const Char_t *filename, Int_t ihisto = kMatchedTracks, Int_t marker = 20, Int_t color = 1, Option_t *opt = "")
1201 {
1202
1203   TF1 *fpol0 = (TF1 *)gROOT->GetFunction("pol0");
1204   fpol0->SetRange(0., 5.0);
1205
1206   TCanvas *cCanvas1 = new TCanvas("cCanvas1");
1207   TCanvas *cCanvas2 = new TCanvas("cCanvas2");
1208   const Char_t *destdir = "matchingEfficiency_DATA";
1209   
1210   Double_t ptMin = 0.5;
1211   Double_t ptMax = 5.0;
1212
1213   TF1 *fMismatchCorr = new TF1("fMismatchCorr", "1. - ([0]+[1]*TMath::Exp(-[2]*TMath::Power(x,[3])))*[4]", 0., 5.0);
1214   fMismatchCorr->SetParameter(0, 4.47133e-02);
1215   fMismatchCorr->SetParameter(1, 1.79172e-01);
1216   fMismatchCorr->SetParameter(2, 2.54333e+00);
1217   fMismatchCorr->SetParameter(3, 1.16819e+00);
1218   fMismatchCorr->SetParameter(4, 1.);
1219
1220   TF1 *fMismatchScale = new TF1("fMismatchScale", "[0] + [1] * TMath::Exp(-[2] * x)", 0., 100.);
1221   fMismatchScale->SetParameter(0, -6.36877e-02);
1222   fMismatchScale->SetParameter(1, 1.74818e+00);
1223   fMismatchScale->SetParameter(2, 3.00818e-02);
1224   
1225   TFile *filein = TFile::Open(filename);
1226   TH1D *hEfficiencyPt = (TH1D *)filein->Get(Form("hEfficiencyAllPt_MB_%s", histoName[ihisto]));
1227   if (ihisto != kMatchedCorrelatedTracks)
1228     hEfficiencyPt->Multiply(fMismatchCorr);
1229   hEfficiencyPt->SetTitle("all particles;p_{T} (GeV/c);acceptance #times efficiency;");
1230   hEfficiencyPt->SetMinimum(0.4);
1231   hEfficiencyPt->SetMaximum(0.8);
1232   hEfficiencyPt->SetMarkerStyle(marker);
1233   hEfficiencyPt->SetMarkerColor(color);
1234   hEfficiencyPt->SetMarkerSize(1.5);
1235   hEfficiencyPt->SetLineWidth(2);
1236   hEfficiencyPt->SetLineColor(color);
1237   hEfficiencyPt->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
1238   hEfficiencyPt->SetStats(kFALSE);
1239   cCanvas1->cd();
1240   hEfficiencyPt->Draw(opt);
1241
1242   cCanvas1->SetGridx();
1243   cCanvas1->SetGridy();
1244   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.C", destdir));
1245   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.root", destdir));
1246   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.png", destdir));
1247   cCanvas1->SaveAs(Form("%s/efficiencyPt_MB_all.eps", destdir));
1248
1249   TH1D *hEfficiencyCent = new TH1D("hEfficiencyCent", "all particles;centrality percentile;acceptance x efficiency scale factor;", NcentralityBins, centralityBin);
1250   hEfficiencyCent->SetMinimum(0.95);
1251   hEfficiencyCent->SetMaximum(1.05);
1252   hEfficiencyCent->SetMarkerStyle(marker);
1253   hEfficiencyCent->SetMarkerColor(color);
1254   hEfficiencyCent->SetMarkerSize(1.5);
1255   hEfficiencyCent->SetLineWidth(2);
1256   hEfficiencyCent->SetLineColor(color);
1257   hEfficiencyCent->SetStats(kFALSE);
1258   
1259   
1260   TH1D *hEfficiencyPt_cent[NcentralityBins];
1261   TH1D *hRatioPt_cent[NcentralityBins];
1262   Double_t centmean;
1263   for (Int_t icent = 0; icent < NcentralityBins; icent++) {
1264     
1265     centmean = 0.5 * (centralityBin[icent] + centralityBin[icent + 1]);
1266     hEfficiencyPt_cent[icent] = (TH1D *)filein->Get(Form("hEfficiencyAllPt_centrality%d_%s", icent, histoName[ihisto]));
1267     fMismatchCorr->SetParameter(4, fMismatchScale->Eval(centmean));
1268     if (ihisto != kMatchedCorrelatedTracks)
1269       hEfficiencyPt_cent[icent]->Multiply(fMismatchCorr);
1270     hEfficiencyPt_cent[icent]->Divide(hEfficiencyPt);
1271     hEfficiencyPt_cent[icent]->Fit(fpol0, "q0", "", 0.5, 5.0);
1272     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]));
1273     hEfficiencyPt_cent[icent]->SetMinimum(0.2);
1274     hEfficiencyPt_cent[icent]->SetMaximum(0.8);
1275     hEfficiencyPt_cent[icent]->SetMarkerStyle(marker);
1276     hEfficiencyPt_cent[icent]->SetMarkerColor(color);
1277     hEfficiencyPt_cent[icent]->SetMarkerSize(1.5);
1278     hEfficiencyPt_cent[icent]->SetLineWidth(2);
1279     hEfficiencyPt_cent[icent]->SetLineColor(color);
1280     hEfficiencyPt_cent[icent]->GetXaxis()->SetRangeUser(0.5 + 0.001, 5.0 - 0.001);
1281     hEfficiencyPt_cent[icent]->SetStats(kFALSE);
1282     cCanvas1->cd();
1283     hEfficiencyPt_cent[icent]->Draw(opt);
1284     fpol0->Draw("same");
1285     
1286     hEfficiencyCent->SetBinContent(icent + 1, fpol0->GetParameter(0));
1287     hEfficiencyCent->SetBinError(icent + 1, fpol0->GetParError(0));
1288     
1289     cCanvas1->SetGridx();
1290     cCanvas1->SetGridy();
1291     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.C", destdir, icent));
1292     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.root", destdir, icent));
1293     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.png", destdir, icent));
1294     cCanvas1->SaveAs(Form("%s/efficiencyPt_centrality%d_all.eps", destdir, icent));
1295     
1296     hRatioPt_cent[icent] = new TH1D(*hEfficiencyPt_cent[icent]);
1297     hRatioPt_cent[icent]->Divide(fpol0);
1298     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]));
1299     hRatioPt_cent[icent]->SetMinimum(0.9);
1300     hRatioPt_cent[icent]->SetMaximum(1.1);
1301     cCanvas2->cd();
1302     hRatioPt_cent[icent]->Draw();
1303
1304     cCanvas2->SetGridx();
1305     cCanvas2->SetGridy();
1306     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.C", destdir, icent));
1307     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.root", destdir, icent));
1308     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.png", destdir, icent));
1309     cCanvas2->SaveAs(Form("%s/efficiencyPt_ratioFit_centrality%d_all.eps", destdir, icent));
1310
1311     
1312   }
1313
1314   TF1 *fEffCent = new TF1("fEffCent", "[0] - [1] * TMath::Exp(-[2] * TMath::Power(x, [3]))", 0., 90.);
1315   fEffCent->SetParameter(0, 1.02);
1316   fEffCent->SetParameter(1, 0.04);
1317   fEffCent->SetParameter(2, 0.001);
1318   fEffCent->SetParameter(3, 2.);
1319   //  hEfficiencyCent->Fit(fEffCent, "q0", "", 0., 90.);
1320   
1321   TCanvas *cCanvas3 = new TCanvas("cCanvas3");
1322   hEfficiencyCent->Draw();
1323   //  fEffCent->Draw("same");
1324   
1325   cCanvas3->SetGridx();
1326   cCanvas3->SetGridy();
1327   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.C", destdir));
1328   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.root", destdir));
1329   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.png", destdir));
1330   cCanvas3->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_all.eps", destdir));
1331
1332   TCanvas *cCanvas4 = new TCanvas("cCanvas4");
1333
1334   TH1D *hRatioCent = new TH1D(*hEfficiencyCent);
1335   hRatioCent->Divide(fEffCent);
1336   hRatioCent->SetTitle(Form("all particles;centrality percentile;ratio wrt. fitted dependence;"));
1337   hRatioCent->SetMinimum(0.95);
1338   hRatioCent->SetMaximum(1.05);
1339   cCanvas4->cd();
1340   hRatioCent->Draw();
1341
1342   cCanvas4->SetGridx();
1343   cCanvas4->SetGridy();
1344   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.C", destdir));
1345   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.root", destdir));
1346   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.png", destdir));
1347   cCanvas4->SaveAs(Form("%s/efficiencyCentrality_scaleFactor_ratioFit_all.eps", destdir));
1348   
1349
1350
1351   //  hEfficiencyPt->Add(fEff, -1.);
1352   return hEfficiencyCent;
1353 }
1354
1355
1356 TH1D *
1357 TOFmatchEff_rapidityCut(const Char_t *filename, Int_t ipart, Int_t icharge, Int_t color = 2, Int_t marker = 20, Option_t *opt = "")
1358 {
1359
1360   TFile *filein = TFile::Open(filename);
1361   TH1D *hEfficiency_MB = (TH1D *)filein->Get(Form("hEfficiencyPt_MB_hMatchedTracks_%s", chargeName[icharge]));
1362   TH1D *hEfficiencyPID_MB = (TH1D *)filein->Get(Form("hEfficiencyPIDPt_MB_hMatchedTracks_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
1363
1364   TH1D *hRatio = new TH1D(*hEfficiencyPID_MB);
1365   hRatio->Divide(hEfficiency_MB);
1366   hRatio->SetLineColor(color);
1367   hRatio->SetLineWidth(2);
1368   hRatio->SetMarkerColor(color);
1369   hRatio->SetMarkerStyle(marker);
1370   hRatio->Draw(opt);
1371   return hRatio;
1372 }
1373
1374 void
1375 TOFmatchEff_checkFEAmap(const Char_t *filename)
1376 {
1377
1378   TFile *filein = TFile::Open(filename);
1379   TH2F *hFEAMap = (TH2F *)filein->Get("hFEAMap");
1380   TH2F *hEmptyFEA = new TH2F("hEmptyFEA", "", 72, 0., 18., 91, 0., 91.);
1381
1382   Float_t nhits = hFEAMap->GetEntries();
1383   if (nhits <= 0) {
1384     printf("found not hits.\n");
1385     return;
1386   }
1387   printf("found %d hits\n", nhits);
1388   Float_t avhits = nhits / (hFEAMap->GetNbinsX() * hFEAMap->GetNbinsX());
1389   printf("on average %f hits/FEA\n", avhits);
1390   
1391   TH1F *hFEANormHit = new TH1F("hFEANormHit", "", 1000, 0., 3.);
1392   for (Int_t ibinx = 0; ibinx < hFEAMap->GetNbinsX(); ibinx++)
1393     for (Int_t ibiny = 0; ibiny < hFEAMap->GetNbinsY(); ibiny++) {
1394       if (hFEAMap->GetBinContent(ibinx + 1, ibiny + 1) == 0.) {
1395         hEmptyFEA->SetBinContent(ibinx + 1, ibiny + 1, 1.);
1396         continue;
1397       }
1398       hFEANormHit->Fill(hFEAMap->GetBinContent(ibinx + 1, ibiny + 1) / avhits);
1399     }
1400
1401   TCanvas *cCanvas1 = new TCanvas("cCanvas1");
1402   cCanvas1->Divide(1, 2);
1403   cCanvas1->cd(1);
1404   hFEAMap->Draw("colz");
1405   cCanvas1->cd(2);
1406   hEmptyFEA->Draw("colz");
1407
1408   TCanvas *cCanvas2 = new TCanvas("cCanvas2");
1409   hFEANormHit->Draw();
1410
1411
1412   TFile *fileout = TFile::Open(Form("TOFmatchEff_checkFEAmap.%s", filename), "RECREATE");
1413   hFEAMap->Write();
1414   hFEANormHit->Write();
1415   hEmptyFEA->Write();
1416   fileout->Close();
1417 }