k* patch
[u/mrichter/AliRoot.git] / ITS / PlotOutputQATaskITSsa.C
CommitLineData
4a8b7bdd 1#if !defined(__CINT__) || defined(__MAKECINT__)
2#include <TCanvas.h>
3#include <TGrid.h>
4#include <TFile.h>
5#include <TList.h>
6#include <TPaveStats.h>
7#include <TGraph.h>
8#include <TGraphErrors.h>
9#include <TH1.h>
10#include <TF1.h>
11#include <TH2.h>
12#include <TLegend.h>
13#include <TLegendEntry.h>
14#include <TLatex.h>
15#include <TStyle.h>
16#include <TROOT.h>
17#endif
18
19/* $Id$ */
20
21//-------------------------------------------------------
22//
23// Macro do plot the output histograms of the QA task for ITS standalone tracks
069fccec 24// dE/dx for ITS pure standalone tracks with parameterization
25// dE/dx resolution for ITS pure standalone tracks with parameterization
26// d0 resolution and bias with gaussian fit
27// d0 resolution and bias with gaussian+tail fit
28// Comparison of the two methods for d0 resolution
29// Pt resolution (matching ITSèureSA with TPC+ITS tracks)
4a8b7bdd 30// General Plots: ratios between ITSsa, ITSpureSA and TPC+ITS tracks
31// eta phi distributions of tracks
32// number of clusters per track
4a8b7bdd 33//
34// Authors: Leonardo Milano, Francesco Prino
35//
36//-------------------------------------------------------
37
069fccec 38Int_t color[3]={1,2,4};
39TString particle[3]={"Pion","Kaon","Proton"};
4a8b7bdd 40
4a8b7bdd 41
069fccec 42void PlotOutputQATaskITSsa(TString filename="LHC11h_QA95_MB_4cls.root",TString foutName="OutputQAITSstandaloneTracks_LHC11h_QA95_MB_4cls.root",Bool_t fMC=0){
43
4a8b7bdd 44 gROOT->SetStyle("Plain");
069fccec 45 gStyle->SetPalette(1);
4a8b7bdd 46
47 if(filename.Contains("alien")) TGrid::Connect("alien:");
069fccec 48 TFile* f=TFile::Open(filename.Data());
49 TDirectory *dirFile=(TDirectory*)f->Get("ITSsaTracks");
50 TString lname="clistITSsaTracks";
51 TList *li = (TList*)dirFile->Get(lname.Data());
52
53 TFile *fout=new TFile(foutName.Data(),"recreate");
54 fout->Close();
55 delete fout;
56
57 Bool_t useHybridITSsaParameterization=1; //BetheITSsaHybrid committed in Rev. 59830
58 Bool_t PlotPIDBands=0; //Bands used for PID in the spectra analysis
59 dedxPlot(li,fMC,foutName,useHybridITSsaParameterization,PlotPIDBands);
60 dedxRes(li,foutName);
61 ImpParRes(li,foutName);
62 ImpParResGausTail(li,foutName);
63 CompareImpParRes(foutName);
64 Bool_t optFromMC=0;
65 PlotPtResol(li,foutName,optFromMC);
66 PlotITSsa(li,foutName);
67}
68
69
70
71//----------------------------------------------------------------------------
72
73void dedxPlot(TList *li,Bool_t fMC,TString foutName,Bool_t useHybridITSsaParameterization,Bool_t PlotPIDBands)
74{
75 // Plot the dedx vs momentum from the ITSsaTracks QA output
76 // Bethe Bloch parameterization is taken from AliITSPIDResponse
77 // If useHybridITSsaParameterization the Hybrid ITS parameterization (Phobos + polinomial at low beta*gamma) is used. This requires AliRoot > Rev. 59830
78
79 TH2F *fHistDEDX=(TH2F*)li->FindObject("hdedxvsP2clsITSpureSA");
80 fHistDEDX->Add((TH2F*)li->FindObject("hdedxvsP3clsITSpureSA"));
81 fHistDEDX->Add((TH2F*)li->FindObject("hdedxvsP4clsITSpureSA"));
82
83 TCanvas *c=new TCanvas("dEdx_vs_p","dEdx_vs_p",1);
84 c->SetLogz();
85 c->SetLogx();
86 fHistDEDX->SetXTitle("#it{p} (GeV/#it{c})");
87 fHistDEDX->SetYTitle("d#it{E}/dx (KeV/300#mum)");
88 fHistDEDX->GetXaxis()->SetRangeUser(0.08,3);
89 fHistDEDX->GetYaxis()->SetRangeUser(0.,700);
90 fHistDEDX->GetYaxis()->SetTitleSize(0.05);
91 fHistDEDX->GetXaxis()->SetTitleSize(0.05);
92 //fHistDEDX->SetMinimum(2000);
93 //fHistDEDX->SetMaximum(18000);
94 fHistDEDX->DrawClone("col");
95
96 Float_t pdgmass[5]={0.13957,0.493677,0.938272,1.875612762,0.00996}; //mass for pi, K, P, d (Gev/c^2)
97 Double_t dedxvalue[5];
98 Double_t funcvalue[7];
99 TGraph *fdedx[7];
100 AliITSPIDResponse *pidresp=new AliITSPIDResponse(fMC);
101
102 for(Int_t i7=0;i7<7;i7++){
103 fdedx[i7]=new TGraph();
104 fdedx[i7]->SetName(Form("%d",i7));
105 fdedx[i7]->SetTitle(Form("%d",i7));
106 fdedx[i7]->SetLineWidth(2);
107 fdedx[i7]->SetLineColor(1);
108 }
109
110 Float_t mom=0.07.;//low pt range
111 Float_t step=(3-mom)/100;
112 Double_t lr[7]={0.09,0.09,0.09,0.1,0.2,.25,.3};
113
114 for(Int_t i=0;i<100;i++){
115 if(useHybridITSsaParameterization)for(Int_t i2=0;i2<5;i2++)dedxvalue[i2]=pidresp->BetheITSsaHybrid(mom,pdgmass[i2]);
116 else for(Int_t i2=0;i2<5;i2++)dedxvalue[i2]=pidresp->Bethe(mom,pdgmass[i2],1);
117 funcvalue[0]=dedxvalue[0]-0.2*dedxvalue[0];
118 funcvalue[1]=dedxvalue[0];
119 funcvalue[2]=0.5*(dedxvalue[0]+dedxvalue[1]);
120 funcvalue[3]=dedxvalue[1];
121 funcvalue[4]=0.5*(dedxvalue[2]+dedxvalue[1]);
122 funcvalue[5]=dedxvalue[2];
123 funcvalue[6]=0.5*(dedxvalue[2]+dedxvalue[3]);
124
125 for(Int_t i2=0;i2<7;i2++){
126 fdedx[i2]->SetPoint(i,mom,funcvalue[i2]);
127 }
128 mom+=step;
129 }
130 fdedx[0]->SetLineStyle(2);
131 fdedx[2]->SetLineStyle(2);
132 fdedx[4]->SetLineStyle(2);
133 fdedx[6]->SetLineStyle(2);
134 for(Int_t i2=0;i2<7;i2++){
135 fdedx[i2]->RemovePoint(0);
136 fdedx[i2]->GetXaxis()->SetRangeUser(lr[i2],3);
137 if(!PlotPIDBands)if(i2==0 || i2==2 || i2==4 || i2==6)continue;
138 fdedx[i2]->DrawClone("Lsame");
139 }
140 TLatex *tex=new TLatex(0.55,630,"ITS standalone tracking");
141 tex->SetTextSize(0.04);
142 tex->DrawClone();
143
144 TLatex *pi=new TLatex(0.1223724,176.0205,"#pi");
145 TLatex *k=new TLatex(0.263512,291.1394,"K");
146 TLatex *p=new TLatex(0.517675,296.7096,"p");
147 TLatex *e=new TLatex(0.09856606,101.7502,"e");
148 pi->DrawClone();
149 k->DrawClone();
150 p->DrawClone();
151 e->DrawClone();
152
153 //add electron line
154 Float_t mom=0.09.;//low pt range
155 Float_t step=(0.16-mom)/10;
156 TGraph* fElectr=new TGraph();
157 fElectr->SetName("fElectr");
158 fElectr->SetTitle("fElectr");
159 AliITSPIDResponse *pidresp=new AliITSPIDResponse(0);
160 for(Int_t i=0;i<10;i++){
161 if(useHybridITSsaParameterization)fElectr->SetPoint(i,mom,pidresp->BetheITSsaHybrid(mom,0.00051));
162 else fElectr->SetPoint(i,mom,pidresp->Bethe(mom,0.00051,1));
163 mom+=step;
164 }
165 fElectr->SetLineWidth(2);
166 fElectr->SetLineColor(1);
167 fElectr->DrawClone("Lsame");
168
169 TFile *fout=new TFile(foutName.Data(),"update");
170 c->Write();
171 fout->Close();
172 delete fout;
173 }
4a8b7bdd 174
069fccec 175//----------------------------------------------------------------------------
4a8b7bdd 176
069fccec 177void dedxRes(TList *li,TString foutName)
178{
179 // plot the dedx resolution as a function of momuntum from the ITSsaTracks QA
180 // Resolution is calculated from Gaussian fit to the pion peak for tracks with 2, 3 and 4 clusters in the ITS
181
182 TCanvas *cdedxRes=new TCanvas("dedxRes_vs_p","dedxRes_vs_p",1000,800);
183 cdedxRes->SetGridx();
184 cdedxRes->SetLogx();
185
186 for(Int_t ncls=2;ncls<5;ncls++){
187 TH2F *hdedxvsPITSpureSA=(TH2F*)li->FindObject(Form("hdedxvsP%iclsITSpureSA",ncls));
188 //binning
189 const Int_t nbins = 29;
190 Double_t xbins[nbins+1]={0.06,0.08,0.10,0.12,0.14,0.16,0.18,0.20,0.25,0.30,
191 0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,
192 0.85,0.90,0.95,1.00,1.20,1.40,1.60,1.80,1.90,2.00};
193 TH1F *fHistdedxRes = new TH1F(Form("fHistdedxRes%icls",ncls),Form("fHistdedxRes%icls",ncls),nbins,xbins);
194 fHistdedxRes->GetXaxis()->SetTitle("#font[52]{p} (GeV/#font[52]{c})");
195 fHistdedxRes->GetYaxis()->SetTitle("de/dx relative resolution");
196 fHistdedxRes->GetYaxis()->SetTitleOffset(1.5);
197 TH1F *fHistDCA[nbins];
198 TF1 *fPar = new TF1("fPar","gaus",0,1000);
199 for(Int_t m=0;m<nbins;m++){
200 fHistDCA[m]= (TH1F*)hdedxvsPITSpureSA->ProjectionY(Form("%i",m),hdedxvsPITSpureSA->GetXaxis()->FindBin(xbins[m]+0.0000001),hdedxvsPITSpureSA->GetXaxis()->FindBin(xbins[m+1]-0.0000001));
201 }
202 TCanvas *cgaus=new TCanvas(Form("cgausFitdEdxRes_%icls",ncls),Form("cgausFitdEdxRes_%icls",ncls),1000,800);
203 cgaus->Divide(8,4,0.001,0.001);
204 for(Int_t i=0; i<nbins; i++){
205 cgaus->cd(i+1);
206 fHistDCA[i]->SetFillColor(16);
207 Float_t MaxPosition=fHistDCA[i]->GetBinCenter(fHistDCA[i]->GetMaximumBin());
208 Float_t minFit=MaxPosition-0.1*MaxPosition;
209 Float_t maxFit=MaxPosition+0.1*MaxPosition;
210 fPar->SetParameter(1,MaxPosition);
211 fHistDCA[i]->Fit(fPar,"NM","",minFit,maxFit);
212 fHistDCA[i]->GetXaxis()->SetRangeUser(minFit-50,maxFit+50);
213 fPar->SetLineColor(1);
214 fHistDCA[i]->DrawClone();
215 fPar->DrawClone("same");
216 fHistdedxRes->Fill((xbins[i]+xbins[i+1])/2,fPar->GetParameter(2)/fPar->GetParameter(1));
217 fHistdedxRes->SetBinError(fHistdedxRes->FindBin((xbins[i]+xbins[i+1])/2),fPar->GetParError(2)/fPar->GetParameter(1));
218 }
219 cdedxRes->cd();
220 setDrawAtt(20,ncls,1,ncls,1,fHistdedxRes);
221 fHistdedxRes->SetMinimum(0.0);
222 fHistdedxRes->SetMaximum(0.2);
223 fHistdedxRes->GetXaxis()->SetRangeUser(0.2,2);
224 if(ncls==2)fHistdedxRes->DrawCopy("p");
225 else fHistdedxRes->DrawCopy("psame");
226
227 TF1 *fFit = new TF1(Form("fFitdEdxRes_%d",ncls),"pol0",0.6,2);
228 fFit->SetLineColor(ncls);
229 fHistdedxRes->Fit(fFit,"NM","",0.6,2);
230 fFit->DrawCopy("same");
231 TPaveText *tpave1=new TPaveText(0.3,0.2-0.15*ncls,0.7,0.89,"brNDC");
232 tpave1->SetBorderSize(0);
233 tpave1->SetFillStyle(0);
234 tpave1->SetFillColor(0);
235 tpave1->SetTextColor(ncls);
236 TText *txt2=tpave1->AddText(Form("pol 0: %.3f",fFit->GetParameter(0)));
237 txt2->SetTextFont(62);
238 tpave1->DrawClone();
239
240 TFile *fout=new TFile(foutName.Data(),"update");
241 fHistdedxRes->Write();
242 fFit->Write();
243 fout->Close();
244 delete fout;
245 }
246
247 cdedxRes->BuildLegend()->SetFillColor(0);
248 TPaveText *tpave=new TPaveText(0.5,0.9,0.8,0.99,"brNDC");
249 tpave->SetBorderSize(0);
250 tpave->SetFillStyle(0);
251 tpave->SetFillColor(0);
252 tpave->SetTextColor(2);
253 TText *txt1=tpave->AddText("ITS standalone");
254 txt1->SetTextFont(62);
255 tpave->DrawClone();
256
257 TFile *fout=new TFile(foutName.Data(),"update");
258 cdedxRes->Write();
259 fout->Close();
260 delete fout;
261}
4a8b7bdd 262
069fccec 263//----------------------------------------------------------------------------
4a8b7bdd 264
069fccec 265void ImpParRes(TList *li,TString foutName)
266{
267 //Plot the resolution on the tranverse component of impact parmeter from the ITSsaTracks QA output as a function of pt
268 // Gaussian fit is used
4a8b7bdd 269
069fccec 270 TH2F *hd0rphiITSpureSA[3];
271 //binning
272 const Int_t nbins = 29;
273 Double_t xbins[nbins+1]={0.06,0.08,0.10,0.12,0.14,0.16,0.18,0.20,0.25,0.30,
274 0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,
275 0.85,0.90,0.95,1.00,1.20,1.40,1.60,1.80,1.90,2.00};
276 Int_t MinBin[3]={2,7,9};
277
278 TH1F *fHistDCA[nbins];
279 TString particle[3]={"Pion","Kaon","Proton"};
280
281 TCanvas *cImpPar=new TCanvas("ImpParRes_vs_pt_Gaus","ImpParRes_vs_pt_Gaus",1000,800);
282 cImpPar->SetGridx();
283 cImpPar->SetLogx();
284 TCanvas *cImpParMean=new TCanvas("ImpParMean_vs_pt_Gaus","ImpParMean_vs_pt_Gaus",1000,800);
285 cImpParMean->SetGridx();
286 cImpParMean->SetLogx();
287
288 for(Int_t iparticle=0;iparticle<3;iparticle++){
289 hd0rphiITSpureSA[iparticle]=(TH2F*)li->FindObject(Form("hd0rphiITSpureSA%s",particle[iparticle].Data()));
290
291 TH1F *fHistImpParRes = new TH1F(Form("fHistImpParResGaus%s",particle[iparticle].Data()),Form("%s",particle[iparticle].Data()),nbins,xbins);
292 fHistImpParRes->GetXaxis()->SetTitle("#font[52]{p}_{T} (GeV/#font[52]{c})");
293 fHistImpParRes->GetYaxis()->SetTitle("d0 r#phi resolution [#mum]");
294 fHistImpParRes->GetYaxis()->SetTitleOffset(1.5);
295 TH1F *fHistImpParMean = new TH1F(Form("fHistImpParMeanGaus%s",particle[iparticle].Data()),Form("%s",particle[iparticle].Data()),nbins,xbins);
296 fHistImpParMean->GetXaxis()->SetTitle("#font[52]{p}_{T} (GeV/#font[52]{c})");
297 fHistImpParMean->GetYaxis()->SetTitle("d0 r#phi mean [#mum]");
298 fHistImpParMean->GetYaxis()->SetTitleOffset(1.5);
299
300 TF1 *fPar = new TF1("fPar","gaus",-1,1);
301
302 for(Int_t m=0;m<nbins;m++){
303 fHistDCA[m]= (TH1F*)hd0rphiITSpureSA[iparticle]->ProjectionY(Form("%s%i",particle[iparticle].Data(),m),hd0rphiITSpureSA[iparticle]->GetXaxis()->FindBin(xbins[m]+0.000001),hd0rphiITSpureSA[iparticle]->GetXaxis()->FindBin(xbins[m+1]-0.000001));
304 }
305
306 TCanvas *cgaus=new TCanvas(Form("cgausFit_ImpParRes_vs_pt_%s",particle[iparticle].Data()),Form("cgausFit_ImpParRes_vs_pt_%s",particle[iparticle].Data()),1000,800);
307 cgaus->Divide(8,4,0.001,0.001);
308 Float_t sigma=0;
309
310 for(Int_t i=0; i<nbins; i++){
311 if(i<MinBin[iparticle])continue;
312
313 cgaus->cd(i+1);
314 gPad->SetLogy();
315 fHistDCA[i]->SetLineColor(color[iparticle]);
316 fHistDCA[i]->SetMarkerColor(color[iparticle]);
317 fPar->SetLineColor(color[iparticle]);
318 fHistDCA[i]->SetFillColor(16);
319 Printf("first fit step [-1,1]");
320 fHistDCA[i]->Fit(fPar,"NM","",-1,1);
321 Printf("second fit step [-2sigma,2sigma]");
322 Float_t nsigmas=2.;
323 sigma=fPar->GetParameter(2);
324 fHistDCA[i]->Fit(fPar,"NM","",fPar->GetParameter(1)-nsigmas*sigma,fPar->GetParameter(1)+nsigmas*sigma);
325 Printf("Third fit step [-0.5 sigma,0.5 sigma]");
326 nsigmas=.5; // narrow range, just want to fit the primaries
327 fHistDCA[i]->Fit(fPar,"NM","",fPar->GetParameter(1)-nsigmas*sigma,fPar->GetParameter(1)+nsigmas*sigma);
328
329 //set range to 3 sigmas (for the plot)
330 sigma=fPar->GetParameter(2);
331 fHistDCA[i]->GetXaxis()->SetRangeUser(fPar->GetParameter(1)-3*sigma,fPar->GetParameter(1)+3*sigma);
332 fHistDCA[i]->DrawClone();
333 fPar->DrawClone("same");
334 fHistImpParRes->Fill((xbins[i]+xbins[i+1])/2,10000*fPar->GetParameter(2));
335 fHistImpParRes->SetBinError(fHistImpParRes->FindBin((xbins[i]+xbins[i+1])/2),10000*fPar->GetParError(2));
336 fHistImpParMean->Fill((xbins[i]+xbins[i+1])/2,10000*fPar->GetParameter(1));
337 fHistImpParMean->SetBinError(fHistImpParMean->FindBin((xbins[i]+xbins[i+1])/2),10000*fPar->GetParError(1));
338 }
339
340 fHistImpParRes->SetMaximum(1000);
341 fHistImpParRes->SetMinimum(0);
342 fHistImpParMean->SetMaximum(80);
343 fHistImpParMean->SetMinimum(-80);
344
345 setDrawAtt(iparticle+20,color[iparticle],1,color[iparticle],1,fHistImpParRes);
346 fHistImpParRes->SetTitle(Form("%s - Gaus Fit",particle[iparticle].Data()));
347 setDrawAtt(iparticle+20,color[iparticle],1,color[iparticle],1,fHistImpParMean);
348 fHistImpParMean->SetTitle(Form("%s - Gaus Fit",particle[iparticle].Data()));
349
350 cImpPar->cd();
351 if(iparticle==0)fHistImpParRes->DrawCopy("p");
352 else fHistImpParRes->DrawCopy("psame");
353
354 cImpParMean->cd();
355 if(iparticle==0)fHistImpParMean->DrawCopy("p");
356 else fHistImpParMean->DrawCopy("psame");
357
358 TFile *fout=new TFile(foutName.Data(),"update");
359 cgaus->Write();
360 fHistImpParRes->Write();
361 fHistImpParMean->Write();
362 fout->Close();
363 delete fout;
364 }
365
366 cImpPar->BuildLegend()->SetFillColor(0);
367 cImpParMean->BuildLegend()->SetFillColor(0);
368 TFile *fout=new TFile(foutName.Data(),"update");
369 cImpPar->Write();
370 cImpParMean->Write();
371 fout->Close();
372 delete fout;
373
374}
4a8b7bdd 375
069fccec 376//----------------------------------------------------------------------------
4a8b7bdd 377
069fccec 378void ImpParResGausTail(TList *li,TString foutName)
379{
380 //Plot the resolution on the tranverse component of impact parmeter from the ITSsaTracks QA output as a function of pt
381 // Gaussian + tail fit is used
382
383 TH2F *hd0rphiITSpureSA[3];
384 //binning
385 const Int_t nbins = 29;
386 Double_t xbins[nbins+1]={0.06,0.08,0.10,0.12,0.14,0.16,0.18,0.20,0.25,0.30,
387 0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,
388 0.85,0.90,0.95,1.00,1.20,1.40,1.60,1.80,1.90,2.00};
389 TH1F *d0AllpointrphiSkip1_[nbins];
390
391 TCanvas *cImpPar=new TCanvas("ImpParResGausTail_vs_pt","ImpParResGausTail_vs_pt",1000,800);
392 cImpPar->SetGridx();
393 cImpPar->SetLogx();
394 TCanvas *cImpParMean=new TCanvas("ImpParMeanGausTail_vs_pt","ImpParMeanGausTail_vs_pt",1000,800);
395 cImpParMean->SetGridx();
396 cImpParMean->SetLogx();
397
398
399 //define the histgram
400 TH1F **d0AllpointrphiSkipTail1_=new TH1F*[nbins];
401 TH1F **d0AllpointrphiSkipGaus1_=new TH1F*[nbins];
402 TH1F **d0Pt_=new TH1F*[nbins];
403 Float_t sigma=0;
404 Double_t j =3.;
405
406 for(Int_t iparticle=0;iparticle<3;iparticle++){
407 hd0rphiITSpureSA[iparticle]=(TH2F*)li->FindObject(Form("hd0rphiITSpureSA%s",particle[iparticle].Data()));
408
409 TH1F *fHistImpParRes = new TH1F(Form("fHistImpParResGausTail%s",particle[iparticle].Data()),Form("%s",particle[iparticle].Data()),nbins,xbins);
410 fHistImpParRes->GetXaxis()->SetTitle("#font[52]{p}_{T} (GeV/#font[52]{c})");
411 fHistImpParRes->GetYaxis()->SetTitle("d0 r#phi resolution [#mum]");
412 fHistImpParRes->GetYaxis()->SetTitleOffset(1.5);
413 TH1F *fHistImpParMean = new TH1F(Form("fHistImpParMeanGausTail%s",particle[iparticle].Data()),Form("%s",particle[iparticle].Data()),nbins,xbins);
414 fHistImpParMean->GetXaxis()->SetTitle("#font[52]{p}_{T} (GeV/#font[52]{c})");
415 fHistImpParMean->GetYaxis()->SetTitle("d0 r#phi mean [#mum]");
416 fHistImpParMean->GetYaxis()->SetTitleOffset(1.5);
417
418 for(Int_t m=0;m<nbins;m++){
419 d0AllpointrphiSkip1_[m]= (TH1F*)hd0rphiITSpureSA[iparticle]->ProjectionY(Form("%s%i",particle[iparticle].Data(),m),hd0rphiITSpureSA[iparticle]->GetXaxis()->FindBin(xbins[m]+0.000001),hd0rphiITSpureSA[iparticle]->GetXaxis()->FindBin(xbins[m+1]-0.000001));
420 }
421
422 TCanvas *cgaus=new TCanvas(Form("cgausTailFit_ImpParRes_vs_pt_%s",particle[iparticle].Data()),Form("cgausTailFit_ImpParRes_vs_pt_%s",particle[iparticle].Data()),1000,800);
423 cgaus->Divide(8,4,0.001,0.001);
424
425 for(Int_t i=0; i<nbins; i++){
426 cgaus->cd(i+1);
427 gPad->SetLogy();
428 d0AllpointrphiSkip1_[i]->SetLineColor(1);
429 d0AllpointrphiSkip1_[i]->SetMarkerColor(1);
430 TF1 *h = new TF1("h","gaus",-1,1);
431 d0AllpointrphiSkip1_[i]->Fit(h,"NM","",-1,1);
432 Double_t d0rphirange_allpointSkip1 = h->GetParameter(2);
433 Double_t d0rphiMean_allpointSkip1 = h->GetParameter(1);
434 Double_t cutleft1= -j*(d0rphirange_allpointSkip1);
435 Double_t cutright1 =j*d0rphirange_allpointSkip1;
436
437 //fitting
438 d0AllpointrphiSkipTail1_[i] = new TH1F(*d0AllpointrphiSkip1_[i]);
439 d0AllpointrphiSkipGaus1_[i] = new TH1F(*d0AllpointrphiSkip1_[i]);
440 d0AllpointrphiSkipTail1_[i]->Reset(0);
441 d0AllpointrphiSkipGaus1_[i]->Reset(0);
442
443 //Filling only with tail and Gaus
444 for (Int_t bin=1;bin<d0AllpointrphiSkip1_[i]->GetNbinsX();bin++){
445 Float_t bincenter = d0AllpointrphiSkip1_[i]->GetBinCenter(bin);
446 if(bincenter<cutleft1 || bincenter>cutright1) {
447 d0AllpointrphiSkipTail1_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin));
448 d0AllpointrphiSkipTail1_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin));
449 d0AllpointrphiSkipGaus1_[i]->SetBinContent(bin,0.);
450 //This sentence is very important,otherwise we will get the information the data is empty when we fit it .
451 }
452 else if(bincenter>=cutleft1 && bincenter<=cutright1){
453 d0AllpointrphiSkipTail1_[i]->SetBinContent(bin,0);
454 d0AllpointrphiSkipGaus1_[i]->SetBinContent(bin,d0AllpointrphiSkip1_[i]->GetBinContent(bin));
455 d0AllpointrphiSkipGaus1_[i]->SetBinError(bin,d0AllpointrphiSkip1_[i]->GetBinError(bin));
456 }
457 }
458 d0AllpointrphiSkipGaus1_[i]->SetLineColor(2);
459 d0AllpointrphiSkipGaus1_[i]->SetMarkerColor(2);
460 d0AllpointrphiSkipTail1_[i]->SetLineColor(4);
461 d0AllpointrphiSkipTail1_[i]->SetMarkerColor(4);
462
463 TF1 *hh;
464 hh =CreateFuncTail(d0AllpointrphiSkipTail1_[i],"hh");
465 hh->SetLineColor(d0AllpointrphiSkipTail1_[i]->GetLineColor());
466 d0AllpointrphiSkipTail1_[i]->Fit(hh,"NM","",-1,1);
467 Double_t Sigmatail_allpointSkip1 = hh->GetParameter(2);
468 d0AllpointrphiSkipGaus1_[i]->Fit(h,"NM","",d0rphiMean_allpointSkip1-d0rphirange_allpointSkip1,d0rphiMean_allpointSkip1+d0rphirange_allpointSkip1);//narrow around the peak
469 //d0AllpointrphiSkipGaus1_[i]->Fit(h,"NM","",-1,1);
470 h->SetLineColor(d0AllpointrphiSkipGaus1_[i]->GetLineColor());
471 Double_t Sigmagaus_allpointSkip1 = h->GetParameter(2);
472 Double_t Meangaus_allpointSkip1 = h->GetParameter(1);
473 Double_t Constgaus_allpointSkip1 = h->GetParameter(0);
474 d0AllpointrphiSkipGaus1_[i]->DrawClone("");
475 d0AllpointrphiSkipTail1_[i]->DrawClone("same");
476 hh->DrawClone("same");
477 h->DrawClone("same");
478
479 TF1 * fPar=CreateFuncGaussTail(d0AllpointrphiSkip1_[i],"allpointSkip1",Constgaus_allpointSkip1,Meangaus_allpointSkip1,Sigmagaus_allpointSkip1,Sigmatail_allpointSkip1);
480 d0AllpointrphiSkip1_[i]->Fit(fPar,"NM","",-1,1);
481 fPar->SetLineColor(d0AllpointrphiSkip1_[i]->GetLineColor());
482 fPar->DrawClone("same");
483
484 sigma=fPar->GetParameter(2);
485 fHistImpParRes->Fill((xbins[i]+xbins[i+1])/2,10000*fPar->GetParameter(2));
486 fHistImpParRes->SetBinError(fHistImpParRes->FindBin((xbins[i]+xbins[i+1])/2),10000*fPar->GetParError(2));
487 fHistImpParMean->Fill((xbins[i]+xbins[i+1])/2,10000*fPar->GetParameter(1));
488 fHistImpParMean->SetBinError(fHistImpParMean->FindBin((xbins[i]+xbins[i+1])/2),10000*fPar->GetParError(1));
489 }
490
491 fHistImpParRes->SetMaximum(1000);
492 fHistImpParRes->SetMinimum(0);
493 fHistImpParMean->SetMaximum(80);
494 fHistImpParMean->SetMinimum(-80);
495
496 setDrawAtt(iparticle+20,color[iparticle],1,color[iparticle],1,fHistImpParRes);
497 fHistImpParRes->SetTitle(Form("%s - GausTail Fit",particle[iparticle].Data()));
498 setDrawAtt(iparticle+20,color[iparticle],1,color[iparticle],1,fHistImpParMean);
499 fHistImpParMean->SetTitle(Form("%s - GausTail Fit",particle[iparticle].Data()));
500
501 cImpPar->cd();
502 if(iparticle==0)fHistImpParRes->DrawCopy("p");
503 else fHistImpParRes->DrawCopy("psame");
504
505 cImpParMean->cd();
506 if(iparticle==0)fHistImpParMean->DrawCopy("p");
507 else fHistImpParMean->DrawCopy("psame");
508
509
510 TFile *fout=new TFile(foutName.Data(),"update");
511 cgaus->Write();
512 fHistImpParRes->Write();
513 fHistImpParMean->Write();
514 fout->Close();
515 delete fout;
516 }
517
518 cImpPar->BuildLegend()->SetFillColor(0);
519 cImpParMean->BuildLegend()->SetFillColor(0);
520 TFile *fout=new TFile(foutName.Data(),"update");
521 cImpPar->Write();
522 cImpParMean->Write();
523 fout->Close();
524 delete fout;
525
526}
527//----------------------------------------------------------------------------
528
529TF1 *CreateFuncTail(TH1F *hh,TString funcname,Double_t wholeRangeInt=-1.)
530{
531 TF1 *tail=new TF1(funcname.Data(),"[0]*(1./(2.*[2])*TMath::Exp(-TMath::Abs(x-[1])/[2]))",-1,1);
532 Double_t binwidth=hh->GetBinWidth(10);
533 Double_t integral=hh->Integral();
534 if(wholeRangeInt!=-1.)tail->SetParLimits(0,(0.2)*wholeRangeInt*binwidth,(0.5)*wholeRangeInt*binwidth);
535 Double_t RMS1=TMath::Abs(hh->GetRMS());
536 Double_t firstvalue1=binwidth*integral;
537 tail->SetParameters(1.,0,100.);//Set the initial value of parameter
538 return tail;
4a8b7bdd 539
069fccec 540}
541//----------------------------------------------------------------------------
542TF1 *CreateFuncGaussTail(TH1F *h,TString funcname,Double_t Norm,Double_t parzero,Double_t parone,Double_t partwo)
543{
544 TF1 *gaustail=new TF1(funcname.Data(),"[0]*([4]/(TMath::Sqrt(2.*TMath::Pi())*[2])*TMath::Exp(-1.*(x-[1])*(x-[1])/(2.*[2]*[2]))+(1.-[4])/(2.*[3])*TMath::Exp(-TMath::Abs(x-[1])/[3]))",-1,1);
545 gaustail->SetParameters(Norm,parzero,parone,partwo,0.82);//Set the initial value of parameter
546 return gaustail;
4a8b7bdd 547
069fccec 548}
4a8b7bdd 549
069fccec 550//----------------------------------------------------------------------------
4a8b7bdd 551
069fccec 552void CompareImpParRes(TString foutName){
553 //Copare the resolution obtained from Gaus and GausTail fit!
554 // BE CAREFUL!! look at the fits "by eye", GausTail sometimes fail, especially pions at low pt
555
556 TFile *fout=new TFile(foutName.Data(),"read");
557
558 TCanvas *c=new TCanvas("CompareImpParRes","CompareImpParRes",1);
559 c->SetLogx();
560
561 for(Int_t iparticle=0;iparticle<3;iparticle++){
562 TH1F *fHistImpParResGaus = (TH1F*)fout->Get(Form("fHistImpParResGaus%s",particle[iparticle].Data()));
563 TH1F *fHistImpParResGausTail = (TH1F*)fout->Get(Form("fHistImpParResGausTail%s",particle[iparticle].Data()));
564 setDrawAtt(iparticle+24,color[iparticle],1,color[iparticle],1,fHistImpParResGaus);
565 if(iparticle==0)fHistImpParResGaus->DrawClone();
566 else fHistImpParResGaus->DrawClone("same");
567 fHistImpParResGausTail->DrawClone("same");
568 }
569 gPad->BuildLegend()->SetFillColor(0);
570
571 TFile *fout=new TFile(foutName.Data(),"update");
572 c->Write();
573 fout->Close();
574 delete fout;
575
4a8b7bdd 576}
577
069fccec 578
4a8b7bdd 579//-----------------------------------------------------
580
069fccec 581void PlotPtResol(TList* l,TString foutName, Bool_t optFromMC){
4a8b7bdd 582 TString hNameR,hNameA;
583 TString partName[3]={"Pion","Kaon","Proton"};
584 TString prefix;
585 if(optFromMC) prefix="hMC";
586 else prefix="h";
587
588 TCanvas* c2d[3];
589 TCanvas* c1dA[3];
590 TCanvas* c1dR[3];
069fccec 591
4a8b7bdd 592 TH2F* h2DA[3];
593 TH2F* h2DR[3];
594 TH1F* hptres[3][40];
595 TH1F* h1ptrelres[3][40];
596 TH1F* hptreco[3][40];
069fccec 597
4a8b7bdd 598 TGraphErrors* gbias[3];
599 TGraphErrors* grelresol[3];
069fccec 600
4a8b7bdd 601 gStyle->SetPalette(1);
069fccec 602
4a8b7bdd 603 for(Int_t iSpec=0; iSpec<3; iSpec++){
604 hNameA=Form("%sPtResid%s",prefix.Data(),partName[iSpec].Data());
605 hNameR=Form("%sInvPtRelResid%s",prefix.Data(),partName[iSpec].Data());
606 printf("%s %s\n",hNameA.Data(),hNameR.Data());
607 h2DA[iSpec]=(TH2F*)l->FindObject(hNameA.Data());
608 h2DR[iSpec]=(TH2F*)l->FindObject(hNameR.Data());
609 c2d[iSpec]=new TCanvas(Form("c2d%s",partName[iSpec].Data()),Form("c2d%s",partName[iSpec].Data()));
610 c2d[iSpec]->Divide(2,1);
611 c2d[iSpec]->cd(1);
612 h2DA[iSpec]->Draw("colz");
613 c2d[iSpec]->cd(2);
614 h2DR[iSpec]->Draw("colz");
615
616 Int_t nptbins=h2DR[iSpec]->GetNbinsX();
617
618 Int_t nybinsA=h2DA[iSpec]->GetNbinsY();
619 Float_t minyA=h2DA[iSpec]->GetYaxis()->GetBinLowEdge(1);
620 Float_t maxyA=h2DA[iSpec]->GetYaxis()->GetBinUpEdge(nybinsA);
621
622 Int_t nybinsR=h2DR[iSpec]->GetNbinsY();
623 Float_t minyR=h2DR[iSpec]->GetYaxis()->GetBinLowEdge(1);
624 Float_t maxyR=h2DR[iSpec]->GetYaxis()->GetBinUpEdge(nybinsR);
625 printf("%d %d %f %f %d %f %f\n",nptbins,nybinsA,minyA,maxyA,nybinsR,minyR,maxyR);
626
627 c1dA[iSpec]=new TCanvas(Form("c1dA%s",partName[iSpec].Data()),Form("c1dA%s",partName[iSpec].Data()));
628 c1dA[iSpec]->Divide(6,5);
629 c1dR[iSpec]=new TCanvas(Form("c1dR%s",partName[iSpec].Data()),Form("c1dR%s",partName[iSpec].Data()));
630 c1dR[iSpec]->Divide(6,5);
631
632
633 gbias[iSpec]=new TGraphErrors(0);
634 grelresol[iSpec]=new TGraphErrors(0);
635 gbias[iSpec]->SetTitle("");
636 grelresol[iSpec]->SetTitle("");
637
638 for(Int_t iptbin=0; iptbin<nptbins;iptbin++){
639 Float_t avept=h2DA[iSpec]->GetXaxis()->GetBinCenter(iptbin+1);
640 Float_t widpt=0.5*h2DA[iSpec]->GetXaxis()->GetBinWidth(iptbin+1);
641 Int_t minptbinmev=(Int_t)(h2DA[iSpec]->GetXaxis()->GetBinLowEdge(iptbin+1)*1000.+0.5);
642
643 hptres[iSpec][iptbin]=new TH1F(Form("hptres%s_%d",partName[iSpec].Data(),minptbinmev),
644 Form("hptres%s_%d",partName[iSpec].Data(),minptbinmev),
645 nybinsA,minyA,maxyA);
646 h1ptrelres[iSpec][iptbin]=new TH1F(Form("h1ptrelres%s_%d",partName[iSpec].Data(),minptbinmev),
647 Form("h1ptrelres%s_%d",partName[iSpec].Data(),minptbinmev),
648 nybinsR,minyR,maxyR);
649 hptreco[iSpec][iptbin]=new TH1F(Form("hptreco%s_%d",partName[iSpec].Data(),minptbinmev),
650 Form("hptreco%s_%d",partName[iSpec].Data(),minptbinmev),
651 400,0.,2.);
652 for(Int_t iBin=1; iBin<=nybinsA; iBin++){
653 hptres[iSpec][iptbin]->SetBinContent(iBin,h2DA[iSpec]->GetBinContent(iptbin+1,iBin));
654 hptres[iSpec][iptbin]->SetBinError(iBin,h2DA[iSpec]->GetBinError(iptbin+1,iBin));
655 }
656 for(Int_t iBin=1; iBin<=nybinsR; iBin++){
657 h1ptrelres[iSpec][iptbin]->SetBinContent(iBin,h2DR[iSpec]->GetBinContent(iptbin+1,iBin));
658 h1ptrelres[iSpec][iptbin]->SetBinError(iBin,h2DR[iSpec]->GetBinError(iptbin+1,iBin));
659 }
660
661 c1dA[iSpec]->cd(iptbin+1);
662 hptres[iSpec][iptbin]->Draw();
663 if(hptres[iSpec][iptbin]->Integral()>50){
664 hptres[iSpec][iptbin]->Fit("gaus");
665 hptres[iSpec][iptbin]->GetXaxis()->SetTitle("Pt residuals (GeV/c)");
666 hptres[iSpec][iptbin]->GetXaxis()->CenterTitle();
667 TF1* fgaus= (TF1*)hptres[iSpec][iptbin]->GetListOfFunctions()->FindObject("gaus");
668 Int_t nPoint=gbias[iSpec]->GetN();
669 gbias[iSpec]->SetPoint(nPoint, avept, fgaus->GetParameter(1));//hptres[iSpec][iptbin]->GetMean());
670 gbias[iSpec]->SetPointError(nPoint, widpt, fgaus->GetParError(1)); //hptres[iSpec][iptbin]->GetMeanError());
671 }
672 c1dR[iSpec]->cd(iptbin+1);
673 h1ptrelres[iSpec][iptbin]->Draw();
674 if(h1ptrelres[iSpec][iptbin]->Integral()>50){
069fccec 675 h1ptrelres[iSpec][iptbin]->Fit("gaus","","",-0.1,0.1);//,"L");
4a8b7bdd 676 h1ptrelres[iSpec][iptbin]->GetXaxis()->SetTitle("1/Pt relative residuals");
677 h1ptrelres[iSpec][iptbin]->GetXaxis()->CenterTitle();
678 TF1* fgaus= (TF1*)h1ptrelres[iSpec][iptbin]->GetListOfFunctions()->FindObject("gaus");
679 Int_t nPoint=grelresol[iSpec]->GetN();
680 grelresol[iSpec]->SetPoint(nPoint, avept, fgaus->GetParameter(2));
681 grelresol[iSpec]->SetPointError(nPoint, widpt, fgaus->GetParError(2));
682 }
683
684 }
685 }
686
687
688 TCanvas* cb=new TCanvas("cb","Bias");
689 gbias[2]->SetMarkerStyle(22);
690 gbias[2]->SetMarkerColor(4);
691 gbias[2]->SetLineColor(4);
692 gbias[2]->Draw("PA");
693 gbias[0]->SetMarkerStyle(20);
694 gbias[0]->SetMarkerColor(1);
695 gbias[0]->SetLineColor(1);
696 gbias[0]->Draw("PSAME");
697 gbias[1]->SetMarkerStyle(25);
698 gbias[1]->SetMarkerColor(2);
699 gbias[1]->SetLineColor(2);
700 gbias[1]->Draw("PSAME");
701 gbias[2]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
702 if(optFromMC) gbias[2]->GetYaxis()->SetTitle("<p_{T}(ITSsa)-p_{T}(MC)> (GeV/c)");
703 else gbias[2]->GetYaxis()->SetTitle("<p_{T}(ITSsa)-p_{T}(TPCITS)> (GeV/c)");
704 gbias[2]->GetYaxis()->SetTitleOffset(1.2);
705 cb->Update();
706
707 TCanvas* cr=new TCanvas("cr","Resol");
708 grelresol[2]->SetMinimum(0.);
709 grelresol[2]->SetMaximum(0.2);
710 grelresol[2]->SetMarkerStyle(22);
711 grelresol[2]->SetMarkerColor(4);
712 grelresol[2]->SetLineColor(4);
713 grelresol[2]->Draw("PA");
714 grelresol[0]->SetMarkerStyle(20);
715 grelresol[0]->SetMarkerColor(1);
716 grelresol[0]->SetLineColor(1);
717 grelresol[0]->Draw("PSAME");
718 grelresol[1]->SetMarkerStyle(25);
719 grelresol[1]->SetMarkerColor(2);
720 grelresol[1]->SetLineColor(2);
721 grelresol[1]->Draw("PSAME");
722 grelresol[2]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
723 grelresol[2]->GetYaxis()->SetTitle("1/Pt relative resolution (%)");
724 grelresol[2]->GetYaxis()->SetTitleOffset(1.2);
725 cr->Update();
069fccec 726
727 TFile *fout=new TFile(foutName.Data(),"update");
728 for(Int_t iSpec=0; iSpec<3; iSpec++){
729 c2d[iSpec]->Write();
730 c1dA[iSpec]->Write();
731 c1dR[iSpec]->Write();
732 }
733 cb->Write();
734 cr->Write();
735 fout->Close();
736 delete fout;
4a8b7bdd 737}
069fccec 738//----------------------------------------------------------------------------
4a8b7bdd 739
069fccec 740void PlotITSsa(TList* li,TString foutName){
4a8b7bdd 741
069fccec 742 TH1F* hPtTPCITS=(TH1F*)li->FindObject("hPtTPCITS");
743 TH1F* hPtITSsa=(TH1F*)li->FindObject("hPtITSsa");
744 TH1F* hPtITSpureSA=(TH1F*)li->FindObject("hPtITSpureSA");
4a8b7bdd 745
069fccec 746 TH2F* hEtaPhiTPCITS=(TH2F*)li->FindObject("hEtaPhiTPCITS");
747 TH2F* hEtaPhiITSsa=(TH2F*)li->FindObject("hEtaPhiITSsa");
748 TH2F* hEtaPhiITSpureSA=(TH2F*)li->FindObject("hEtaPhiITSpureSA");
4a8b7bdd 749
069fccec 750 TH1F* hChi2TPCITS=(TH1F*)li->FindObject("hChi2TPCITS");
751 TH1F* hChi2ITSsa=(TH1F*)li->FindObject("hChi2ITSsa");
752 TH1F* hChi2ITSpureSA=(TH1F*)li->FindObject("hChi2ITSpureSA");
4a8b7bdd 753
069fccec 754 TH1F* hNcluTPCITS=(TH1F*)li->FindObject("hNcluTPCITS");
755 TH1F* hNcluITSsa=(TH1F*)li->FindObject("hNcluITSsa");
756 TH1F* hNcluITSpureSA=(TH1F*)li->FindObject("hNcluITSpureSA");
4a8b7bdd 757
758
069fccec 759 TH1F* hRatio=(TH1F*)hPtTPCITS->Clone("hRatio");
760 hRatio->Add(hPtITSsa);
761 hRatio->Divide(hPtITSpureSA);
762 hRatio->SetStats(0);
763
764 TCanvas* c1=new TCanvas("c1","Pt",800,1000);
765 c1->Divide(1,2);
766 c1->cd(1);
767 hPtITSpureSA->Draw();
768 hPtITSpureSA->GetXaxis()->SetTitle("Pt (GeV/c)");
769 gPad->Update();
770 TPaveStats *st1=(TPaveStats*)hPtITSpureSA->GetListOfFunctions()->FindObject("stats");
771 st1->SetY1NDC(0.71);
772 st1->SetY2NDC(0.9);
773 hPtTPCITS->SetLineColor(2);
774 hPtTPCITS->Draw("sames");
775 gPad->Update();
776 TPaveStats *st2=(TPaveStats*)hPtTPCITS->GetListOfFunctions()->FindObject("stats");
777 st2->SetY1NDC(0.51);
778 st2->SetY2NDC(0.7);
779 st2->SetTextColor(2);
780
781 hPtITSsa->SetLineColor(4);
782 hPtITSsa->Draw("sames");
783 gPad->Update();
784 TPaveStats *st3=(TPaveStats*)hPtITSsa->GetListOfFunctions()->FindObject("stats");
785 st3->SetY1NDC(0.31);
786 st3->SetY2NDC(0.5);
787 st3->SetTextColor(4);
788 TLegend* leg=new TLegend(0.5,0.5,0.69,0.69);
789 leg->SetFillColor(0);
790 TLegendEntry* ent=leg->AddEntry(hPtITSpureSA,"ITS pureSA","L");
791 ent->SetTextColor(hPtITSpureSA->GetLineColor());
792 ent=leg->AddEntry(hPtTPCITS,"TPC+ITS","L");
793 ent->SetTextColor(hPtTPCITS->GetLineColor());
794 ent=leg->AddEntry(hPtITSsa,"ITSsa","L");
795 ent->SetTextColor(hPtITSsa->GetLineColor());
796 leg->Draw();
797 c1->cd(2);
798 gPad->SetGridx();
799 gPad->SetGridy();
800 hRatio->Draw();
801 hRatio->GetXaxis()->SetTitle("Pt (GeV/c)");
802 hRatio->GetYaxis()->SetTitle("(TPCITS+ITSsa)/ITSpureSA");
803
804 hChi2ITSpureSA->Scale(1./hChi2ITSpureSA->GetEntries());
805 hChi2ITSsa->Scale(1./hChi2ITSsa->GetEntries());
806 hChi2TPCITS->Scale(1./hChi2TPCITS->GetEntries());
807
808 TCanvas* c2=new TCanvas("c2","Chi2");
809 hChi2ITSpureSA->Draw();
810 hChi2ITSpureSA->GetXaxis()->SetTitle("Chi2");
811 gPad->Update();
812 TPaveStats *stc1=(TPaveStats*)hChi2ITSpureSA->GetListOfFunctions()->FindObject("stats");
813 stc1->SetY1NDC(0.71);
814 stc1->SetY2NDC(0.9);
815 hChi2TPCITS->SetLineColor(2);
816 hChi2TPCITS->Draw("sames");
817 gPad->Update();
818 TPaveStats *stc2=(TPaveStats*)hChi2TPCITS->GetListOfFunctions()->FindObject("stats");
819 stc2->SetY1NDC(0.51);
820 stc2->SetY2NDC(0.7);
821 stc2->SetTextColor(2);
822 c2->Update();
823 hChi2ITSsa->SetLineColor(4);
824 hChi2ITSsa->Draw("sames");
825 gPad->Update();
826 TPaveStats *stc3=(TPaveStats*)hChi2ITSsa->GetListOfFunctions()->FindObject("stats");
827 stc3->SetY1NDC(0.31);
828 stc3->SetY2NDC(0.5);
829 stc3->SetTextColor(4);
830 leg->Draw();
831
832 hNcluITSpureSA->Scale(1./hNcluITSpureSA->GetEntries());
833 hNcluITSsa->Scale(1./hNcluITSsa->GetEntries());
834 hNcluTPCITS->Scale(1./hNcluTPCITS->GetEntries());
835
836 TCanvas* c3=new TCanvas("c3","Nclu");
837 c3->SetRightMargin(0.22);
838 hNcluITSpureSA->Draw();
839 hNcluITSpureSA->GetXaxis()->SetTitle("n. ITS clusters");
840 gPad->Update();
841 TPaveStats *stn1=(TPaveStats*)hNcluITSpureSA->GetListOfFunctions()->FindObject("stats");
842 stn1->SetY1NDC(0.71);
843 stn1->SetY2NDC(0.9);
844 hNcluTPCITS->SetLineColor(2);
845 hNcluTPCITS->Draw("sames");
846 gPad->Update();
847 TPaveStats *stn2=(TPaveStats*)hNcluTPCITS->GetListOfFunctions()->FindObject("stats");
848 stn2->SetY1NDC(0.51);
849 stn2->SetY2NDC(0.7);
850 stn2->SetTextColor(2);
851
852 hNcluITSsa->SetLineColor(4);
853 hNcluITSsa->Draw("sames");
854 gPad->Update();
855 TPaveStats *stn3=(TPaveStats*)hNcluITSsa->GetListOfFunctions()->FindObject("stats");
856 stn3->SetY1NDC(0.31);
857 stn3->SetY2NDC(0.5);
858 stn3->SetTextColor(4);
859 leg->Draw();
860
861 gStyle->SetPalette(1);
862 hEtaPhiITSpureSA->SetStats(0);
863 hEtaPhiITSpureSA->SetTitle("ITS pureSA");
864 hEtaPhiITSsa->SetStats(0);
865 hEtaPhiITSsa->SetTitle("ITSsa");
866 hEtaPhiTPCITS->SetStats(0);
867 hEtaPhiTPCITS->SetTitle("TPC+ITS");
868 TCanvas* c4=new TCanvas("c4","EtaPhi",1000,700);
869 c4->Divide(3,1);
870 c4->cd(1);
871 hEtaPhiITSpureSA->Draw("colz");
872 hEtaPhiITSpureSA->GetXaxis()->SetTitle("Eta");
873 hEtaPhiITSpureSA->GetYaxis()->SetTitle("Phi");
874 c4->cd(2);
875 hEtaPhiITSsa->Draw("colz");
876 hEtaPhiITSsa->GetXaxis()->SetTitle("Eta");
877 hEtaPhiITSsa->GetYaxis()->SetTitle("Phi");
878 c4->cd(3);
879 hEtaPhiTPCITS->Draw("colz");
880 hEtaPhiTPCITS->GetXaxis()->SetTitle("Eta");
881 hEtaPhiTPCITS->GetYaxis()->SetTitle("Phi");
882
883 TFile *fout=new TFile(foutName.Data(),"update");
884 c1->Write();
885 c2->Write();
886 c3->Write();
887 c4->Write();
888 fout->Close();
889 delete fout;
890
891}
4a8b7bdd 892
893
069fccec 894//----------------------------------------------------------------------------
895
896void setDrawAtt(Int_t markerstyle,Int_t markercolor,Int_t markersize,Int_t linecolor,Int_t linewidth,TH1 *h1)
897{
4a8b7bdd 898 h1->SetMarkerStyle(markerstyle);
899 h1->SetMarkerColor(markercolor);
900 h1->SetMarkerSize(markersize);
901 h1->SetLineColor(linecolor);
902 h1->SetLineWidth(linewidth);
903}