]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/ITS/AliITSQAchecks.C
2ae18bf30ac9bd85dd97683a143175dfc6eb5607
[u/mrichter/AliRoot.git] / PWG1 / ITS / AliITSQAchecks.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TCanvas.h>
3 #include <TGrid.h>
4 #include <TFile.h>
5 #include <TList.h>
6 #include <TGridResult.h>
7 #include <TPaveStats.h>
8 #include <TGraph.h>
9 #include <TMath.h>
10 #include <TGraphErrors.h>
11 #include <TH1.h>
12 #include <TF1.h>
13 #include <TH2.h>
14 #include <TLegend.h>
15 #include <TLegendEntry.h>
16 #include <TLatex.h>
17 #include <TStyle.h>
18 #include <TROOT.h>
19 #endif
20
21 void PlotGeneral(TFile* fildat, TCanvas**& clist, Int_t& cnum);
22 void PlotITSsa(TFile* fildat, TCanvas**& clist, Int_t& cnum);
23 void PlotSDD(TFile* fildat, TCanvas**& clist, Int_t& cnum);
24 void GetGainModuleLevelSSD(TFile* fildat, TCanvas**& clist, Int_t& cnum);
25 void VertexQAMacro(TFile *fildat, TCanvas **&clist, Int_t &cnum);
26 void PlotSPD(TFile* fildat, TFile* filMC, TCanvas**& clist, Int_t& cnum);
27 Bool_t PlotITSTPCMatchingEff(TFile *f, TCanvas**& clist,Int_t& cnum);
28 void SetDrawAtt(Int_t markerstyle,Int_t markercolor,Int_t markersize,Int_t linecolor,Int_t linewidth,TH1 *h1);
29 Double_t LangausFun(Double_t *x, Double_t *par);
30 void SaveC(TFile &fout, TCanvas**& clist, Int_t cnum);
31 TString GetRunNumber();
32
33 //  the run number is available to all the functions. Its value is set by AliITSQAchecks
34   Int_t gRunNumber = 0;
35
36
37 //_______________________________________________________________________
38 void AliITSQAchecks(TString option="grid",
39                           Int_t nRun=167713,
40                           TString period="LHC11h",
41                           TString qaTrain="QA90",
42 TString filenamedata="QAresults.root", TString filenameMC="alien:///alice/data/2011/LHC11h/000167706/ESDs/pass1_HLT/QA90/QAresults.root"){
43   // option:  "local" if filenamedata is the name of a local file
44   //          "grid" if on alien
45   // nRun:    run number
46   // period:  LHC period (e.g. LHC11h)
47   // qaTrain: QA train specifier
48   // filenamedata: QAresults.root is by default the file name with the results
49   // filenameMC: file name for MC comparison. If the names begins with alien:
50   //             the file is accessed through alien, otherwise is taken as local
51   // Select here what you want to display
52   // the complete selection string is
53   // "general ITSSA SPD SDD SSD vertex ITSTPC"
54   // Contact:  Stefania Beole': beole@to.infn.it  
55
56 /* $Id$ */
57
58   gRunNumber = nRun;
59
60   TString selection("general ITSSA SPD SDD SSD vertex ITSTPC"); 
61   gROOT->SetStyle("Plain");
62   gStyle->SetOptStat(1111);
63   TFile *fildat;
64   TString path;
65   Int_t year=2011;
66   if(period.Contains("LHC10")) year=2010;
67   else if(period.Contains("LHC09")) year=2009;
68
69   if(option.Contains("local")){
70     fildat=new TFile(filenamedata.Data());
71     printf("Opened file %s\n",fildat->GetName());
72   }else{
73     TGrid::Connect("alien:");
74     if(qaTrain.Contains("QA")){
75       path=Form("/alice/data/%d/%s/%09d/ESDs/pass1_HLT/%s/",year,period.Data(),nRun,qaTrain.Data());
76     } else {
77       path=Form("/alice/data/%d/%s/%09d/ESDs/pass1_HLT/",year,period.Data(),nRun);
78     }
79     filenamedata = "alien://"+path+"QAresults.root";
80     fildat=TFile::Open(filenamedata.Data());
81   }
82   if(option.Contains("local") && filenameMC.Contains("alien"))TGrid::Connect("alien:");
83   TFile* filMC=TFile::Open(filenameMC.Data());
84   TCanvas** clist;
85   Int_t cnum;
86   TFile fout("Outfil.root","recreate");
87   if(selection.Contains("general")){
88     PlotGeneral(fildat,clist,cnum); 
89     printf("GENERAL - cnum = %d\n",cnum);
90     SaveC(fout,clist,cnum);
91   }
92   if(selection.Contains("ITSSA")){
93     PlotITSsa(fildat,clist,cnum); 
94     printf("ITSSA - cnum = %d\n",cnum);
95     SaveC(fout,clist,cnum);
96   }
97   if(selection.Contains("SDD")){
98     PlotSDD(fildat,clist,cnum); 
99     printf("SDD - cnum = %d\n",cnum);
100     SaveC(fout,clist,cnum);
101   }
102   if(selection.Contains("SSD")){
103     GetGainModuleLevelSSD(fildat,clist,cnum);
104     printf("SSD - cnum = %d\n",cnum);
105     SaveC(fout,clist,cnum);
106   }
107   if(selection.Contains("vertex")){
108     VertexQAMacro(fildat,clist,cnum);
109     printf("VERTEX - cnum = %d\n",cnum);
110     SaveC(fout,clist,cnum);
111   }
112   if(selection.Contains("SPD")){
113     PlotSPD(fildat,filMC,clist,cnum);
114     printf("SPD - cnum = %d\n",cnum);
115     SaveC(fout,clist,cnum);
116   }
117   if(selection.Contains("ITSTPC")){
118     PlotITSTPCMatchingEff(fildat,clist,cnum);
119     printf("ITSTPC - cnum = %d\n",cnum);
120     SaveC(fout,clist,cnum);
121   }
122
123   fout.Close();
124   
125 }
126
127 //_______________________________________________________________________
128 void PlotGeneral(TFile* fildat, TCanvas**& clist, Int_t& cnum){
129   TDirectoryFile* df=(TDirectoryFile*)fildat->Get("SDD_Performance");
130     if(!df){
131       printf("SDD_Performance MISSING -> Exit\n");
132       return;
133     }
134     TList* l=(TList*)df->Get("coutputRP");
135     if(!df){
136       printf("coutputRP TList MISSING -> Exit\n");
137       return;
138     }
139     cnum=1; // number of canvases 
140     clist= new TCanvas* [1];//array of pointers to TCanvases
141     gROOT->SetStyle("Plain");
142   gStyle->SetOptStat(1111);
143   TH1F* hcllay=(TH1F*)l->FindObject("hCluInLay");
144  TH1F* hev=(TH1F*)l->FindObject("hNEvents");
145   Int_t nTotEvents=hev->GetBinContent(2);
146   Int_t nTrigEvents=hev->GetBinContent(3);
147   Int_t nEvents=nTotEvents;
148   printf("---- Statistics ----\n");
149   printf("Number of Events = %d\n",nTotEvents);
150   if(nTrigEvents>0){ 
151     printf("Number of Triggered Events = %d\n",nTrigEvents);
152     nEvents=nTrigEvents;
153   }else{
154     printf("No request on the trigger done when running the task\n");
155   }
156   if(hcllay){
157     Double_t norm=hcllay->GetBinContent(1);
158     if(norm>0.){
159       hcllay->Scale(1./norm);
160       hcllay->SetTitle("");
161       hcllay->GetXaxis()->SetRange(2,7);
162       hcllay->SetMinimum(0.);
163       hcllay->SetMaximum(1.1);
164       hcllay->SetMarkerStyle(23);
165       TString ctitle=GetRunNumber()+"General checks: PointPerLayer";
166       TCanvas* ceffL=new TCanvas("ceffL",ctitle,1000,800);
167       clist[0]=ceffL;
168       // ceffL->Divide(1,2);
169       // ceffL->cd(1);
170       ceffL->SetGridy();
171       hcllay->Draw(); 
172       TLatex* tg=new TLatex(0.15,0.2,"Fraction of tracks with point in ITS layer");
173       tg->SetTextSize(0.04);
174       tg->SetNDC();
175       tg->SetTextColor(1);
176       tg->Draw();
177       TString testo="Run "+GetRunNumber();
178       TLatex* tg2 = new TLatex(0.15,0.85,testo.Data());
179       tg2->SetTextSize(0.04);
180       tg2->SetNDC();
181       tg2->SetTextColor(2);
182       tg2->Draw();
183       hcllay->GetXaxis()->SetTitle("Layer");
184       hcllay->GetYaxis()->SetTitle("Fraction of tracks with point in layer");
185       ceffL->Update();
186       ceffL->SaveAs("track_points_per_layer.pdf");
187     }
188   }
189 }
190
191
192 //_______________________________________________________________________
193 //////////////////////////////////////////////////////////////////////
194 /// ITSsa ////////////////////////////////////////////////////////////
195 //////////////////////////////////////////////////////////////////////
196  void PlotITSsa(TFile* fildat, TCanvas**& clist, Int_t& cnum){
197     TDirectoryFile* df=(TDirectoryFile*)fildat->Get("TracksITSsa");
198     if(!df) df=(TDirectoryFile*)fildat->Get("ITSsaTracks");
199     if(!df){
200       printf("ITSsa_Performance MISSING -> Exit\n");
201       return;
202     }
203  
204     TList* l=(TList*)df->Get("clistITSsaTracks");
205     if(!df){
206       printf("clistITSsaTracks TList MISSING -> Exit\n");
207       return;
208     }
209     cnum=2; // number of canvases 
210     clist= new TCanvas* [2];//array of pointers to TCanvases
211      gROOT->SetStyle("Plain");
212   gStyle->SetOptStat(1111);
213
214
215   TH1F* hPtTPCITS=(TH1F*)l->FindObject("hPtTPCITS");
216   TH1F* hPtITSsa=(TH1F*)l->FindObject("hPtITSsa");
217   TH1F* hPtITSpureSA=(TH1F*)l->FindObject("hPtITSpureSA");
218
219   TH2F* hEtaPhiTPCITS=(TH2F*)l->FindObject("hEtaPhiTPCITS");
220   TH2F* hEtaPhiITSsa=(TH2F*)l->FindObject("hEtaPhiITSsa");
221   TH2F* hEtaPhiITSpureSA=(TH2F*)l->FindObject("hEtaPhiITSpureSA");
222
223   TH1F* hRatio=(TH1F*)hPtTPCITS->Clone("hRatio");
224   TH1F* hRatio1=(TH1F*)hPtTPCITS->Clone("hRatio1");
225    hRatio->Add(hPtITSsa);
226   hRatio->Divide(hPtITSpureSA);
227   hRatio->SetStats(0);
228   hRatio1->Divide(hPtITSsa);
229   hRatio1->SetStats(0);
230
231   TString ctitle=GetRunNumber()+"ITS standalone: performance vs Pt";
232   TCanvas* cITSsa1=new TCanvas("cITSsa1",ctitle,1200,1200);
233   clist[0]=cITSsa1;
234   cITSsa1->Divide(1,2);
235   cITSsa1->cd(1);
236   // hPtITSpureSA->Draw();
237   // hPtITSpureSA->GetXaxis()->SetTitle("Pt (GeV/c)");
238   // gPad->Update();
239   // TPaveStats *st1=(TPaveStats*)hPtITSpureSA->GetListOfFunctions()->FindObject("stats");
240   // st1->SetY1NDC(0.71);
241   // st1->SetY2NDC(0.9);
242   hPtTPCITS->SetLineColor(2);
243   hPtTPCITS->GetXaxis()->SetTitle("Pt (GeV/c)");
244   //  hPtTPCITS->Draw("sames");
245   hPtTPCITS->Draw();
246   gPad->Update();
247   TPaveStats *st2=(TPaveStats*)hPtTPCITS->GetListOfFunctions()->FindObject("stats");
248   st2->SetY1NDC(0.71);
249   st2->SetY2NDC(0.9);
250   st2->SetTextColor(2);
251
252   hPtITSsa->SetLineColor(4);
253   hPtITSsa->Draw("sames");
254   gPad->Update();
255   TPaveStats *st3=(TPaveStats*)hPtITSsa->GetListOfFunctions()->FindObject("stats");
256   st3->SetY1NDC(0.51);
257   st3->SetY2NDC(0.7);
258   st3->SetTextColor(4);
259   TLegend* leg=new TLegend(0.5,0.5,0.69,0.79);
260   leg->SetFillColor(0);
261   TLegendEntry* ent=leg->AddEntry(hPtTPCITS,"TPC+ITS","L");
262   ent->SetTextColor(hPtTPCITS->GetLineColor());
263   ent=leg->AddEntry(hPtITSsa,"ITSsa","L");
264   ent->SetTextColor(hPtITSsa->GetLineColor());
265    // to be used only with pp data (ITS pure SA)  
266  // ent=leg->AddEntry(hPtITSpureSA,"ITS pureSA","L");
267   //ent->SetTextColor(hPtITSpureSA->GetLineColor());
268   leg->Draw();
269   cITSsa1->cd(2);
270    gPad->SetGridx();
271    gPad->SetGridy();
272    hRatio1->GetXaxis()->SetTitle("Pt (GeV/c)");
273    hRatio1->GetYaxis()->SetTitle("TPCITS/ITSsa");
274    //   hRatio->GetYaxis()->SetTitle("(TPCITS+ITSsa)/ITSpureSA");
275    hRatio1->DrawCopy();
276    TLatex* tratio=new TLatex(0.2,0.75,"TPC+ITS/ITSsa vs Pt");
277    tratio->SetNDC();
278    tratio->SetTextColor(1);
279   tratio->Draw();
280   cITSsa1->Update();
281   cITSsa1->SaveAs("ITSsa1.pdf");
282   gStyle->SetPalette(1);
283   hEtaPhiITSpureSA->SetStats(0);
284   hEtaPhiITSpureSA->SetTitle("ITS pureSA");
285   hEtaPhiITSsa->SetStats(0);
286   hEtaPhiITSsa->SetTitle("ITSsa tracks");
287   hEtaPhiTPCITS->SetStats(0);
288   hEtaPhiTPCITS->SetTitle("TPC+ITS tracks");
289   ctitle=GetRunNumber()+"Eta-phi distribution for ITSsa and TPC+ITS tracks";
290   TCanvas* cITSsa2=new TCanvas("cITSsa2",ctitle,1200,800);
291   clist[1]=cITSsa2;
292   //  cITSsa2->Divide(3,1); for ITSpuresa
293   cITSsa2->Divide(2,1);
294   cITSsa2->cd(1);
295   // TPad* p1=new TPad("p1","Tracking: tracks distribution in EtaPhi",0,0.5,1.,1.);
296   // p1->Divide(3,1);
297   // p1->cd (1);
298   // hEtaPhiITSpureSA->Draw("colz");
299   // hEtaPhiITSpureSA->GetXaxis()->SetTitle("Eta");
300   // hEtaPhiITSpureSA->GetYaxis()->SetTitle("Phi");
301   //  cITSsa2->cd(2);
302   //  p1->cd(2);
303   hEtaPhiITSsa->Draw("colz");
304   hEtaPhiITSsa->GetXaxis()->SetTitle("Eta");
305   hEtaPhiITSsa->GetYaxis()->SetTitle("Phi");
306   cITSsa2->cd(2);
307   //  p1->cd(3);
308   hEtaPhiTPCITS->Draw("colz");
309   hEtaPhiTPCITS->GetXaxis()->SetTitle("Eta");
310   hEtaPhiTPCITS->GetYaxis()->SetTitle("Phi");
311   //  c4->cd(4);
312   cITSsa2->SaveAs("ITSsa2.pdf");  
313 }
314
315 //-----------------------------------------------------
316 // ///////////  Plot SDD ////////////
317 //_______________________________________________________________________
318 void SetDrawAtt(Int_t markerstyle,Int_t markercolor,Int_t markersize,Int_t linecolor,Int_t linewidth,TH1 *h1){ 
319
320
321   h1->SetMarkerStyle(markerstyle);
322   h1->SetMarkerColor(markercolor);
323   h1->SetMarkerSize(markersize);
324   h1->SetLineColor(linecolor);
325   h1->SetLineWidth(linewidth);
326 }
327
328 //_______________________________________________________________________
329 Double_t LangausFun(Double_t *x, Double_t *par) {
330
331   //Fit parameters:
332   //par[0]=Width (scale) parameter of Landau density
333   //par[1]=Most Probable (MP, location) parameter of Landau density
334   //par[2]=Total area (integral -inf to inf, normalization constant)
335   //par[3]=Width (sigma) of convoluted Gaussian function
336   //
337   //In the Landau distribution (represented by the CERNLIB approximation), 
338   //the maximum is located at x=-0.22278298 with the location parameter=0.
339   //This shift is corrected within this function, so that the actual
340   //maximum is identical to the MP parameter.
341
342   // Numeric constants
343   Double_t invsq2pi = 0.3989422804014;   // (2 pi)^(-1/2)
344   Double_t mpshift  = -0.22278298;       // Landau maximum location
345
346   // Control constants
347   Double_t np = 100.0;      // number of convolution steps
348   Double_t sc =   5.0;      // convolution extends to +-sc Gaussian sigmas
349
350   // Variables
351   Double_t xx;
352   Double_t mpc;
353   Double_t fland;
354   Double_t sum = 0.0;
355   Double_t xlow,xupp;
356   Double_t step;
357   Double_t i;
358
359
360   // MP shift correction
361   mpc = par[1] - mpshift * par[0]; 
362
363   // Range of convolution integral
364   xlow = x[0] - sc * par[3];
365   xupp = x[0] + sc * par[3];
366
367   step = (xupp-xlow) / np;
368
369   // Convolution integral of Landau and Gaussian by sum
370   for(i=1.0; i<=np/2; i++) {
371     xx = xlow + (i-.5) * step;
372     fland = TMath::Landau(xx,mpc,par[0]) / par[0];
373     sum += fland * TMath::Gaus(x[0],xx,par[3]);
374
375     xx = xupp - (i-.5) * step;
376     fland = TMath::Landau(xx,mpc,par[0]) / par[0];
377     sum += fland * TMath::Gaus(x[0],xx,par[3]);
378   }
379
380   return (par[2] * step * sum * invsq2pi / par[3]);
381
382 }
383 //_________________________________________________________________________
384 void PlotSDD(TFile* fildat, TCanvas**& clist, Int_t& cnum){
385   TDirectoryFile* df=(TDirectoryFile*)fildat->Get("SDD_Performance");
386     if(!df){
387       printf("SDD_Performance MISSING -> Exit\n");
388       return;
389     }
390     TList* l=(TList*)df->Get("coutputRP");
391     if(!df){
392       printf("coutputRP TList MISSING -> Exit\n");
393       return;
394     }
395     cnum=1; // number of canvases 
396     clist= new TCanvas* [cnum];//array of pointers to TCanvases
397   gROOT->SetStyle("Plain");
398   gStyle->SetOptStat(1111);
399   TH1F* htimT=(TH1F*)l->FindObject("hDrTimTPAll");
400   TH1F* htimTe=(TH1F*)l->FindObject("hDrTimTPExtra");
401   TH1F* htimTne=(TH1F*)l->FindObject("hDrTimTPNoExtra");
402   htimT->Rebin(4);
403   htimTe->Rebin(4);
404   htimTne->Rebin(4);
405   htimT->SetLineWidth(2);
406   htimTe->SetLineWidth(2);
407   htimTne->SetLineWidth(2);  
408   // TH1F* hev=(TH1F*)l->FindObject("hNEvents");
409   // Int_t nTotEvents=hev->GetBinContent(2);
410   // Int_t nTrigEvents=hev->GetBinContent(3);
411   // Int_t nEvents=nTotEvents;
412   // printf("---- Statistics ----\n");
413   // printf("Number of Events = %d\n",nTotEvents);
414   // if(nTrigEvents>0){ 
415   //   printf("Number of Triggered Events = %d\n",nTrigEvents);
416   //   nEvents=nTrigEvents;
417   // }else{
418   //   printf("No request on the trigger done when running the task\n");
419   // }
420   // if(hcllay){
421   //   Double_t norm=hcllay->GetBinContent(1);
422   //   if(norm>0.){
423   //     hcllay->Scale(1./norm);
424   //     hcllay->SetTitle("");
425   //     hcllay->GetXaxis()->SetRange(2,7);
426   //     hcllay->SetMinimum(0.);
427   //     hcllay->SetMaximum(1.1);
428   //     hcllay->SetMarkerStyle(23);
429   //     TCanvas* ceffL=new TCanvas("ceffL","General: PointPerLayer",800,1000);
430   //     clist[0]=ceffL;
431   //     ceffL->Divide(1,2);
432   //     ceffL->cd(1);
433   //     ceffL->SetGridy();
434   //     hcllay->Draw();
435   //     hcllay->GetXaxis()->SetTitle("Layer");
436   //     hcllay->GetYaxis()->SetTitle("Fraction of tracks with point in layer");
437   //     ceffL->Update();
438   //   }
439   // }
440   TH1F* hSigTim[8];
441   TGraphErrors* gmpv=new TGraphErrors(0);
442   TGraphErrors* gsigg=new TGraphErrors(0);
443   TGraphErrors* gsigl=new TGraphErrors(0);
444   gmpv->SetTitle("");
445   gsigg->SetTitle("");
446   gsigl->SetTitle("");
447   Int_t iPoint=0;
448   TF1 *lfun = new TF1("LangausFun",LangausFun,50.,300.,4);
449   for(Int_t it=0; it<8; it++){
450     hSigTim[it]=(TH1F*)l->FindObject(Form("hSigTimeInt%d",it));
451     if(hSigTim[it]->GetEntries()>200){
452       lfun->SetLineWidth(2);
453       lfun->SetParameter(0,5.);
454       lfun->SetParameter(1,80.);
455       lfun->SetParameter(2,hSigTim[it]->GetEntries()/10.);
456       lfun->SetParameter(3,10.);
457       lfun->SetParLimits(3,0.,20);
458
459       //      hSigTim[it]->Fit("LangausFun","QLR");
460       hSigTim[it]->Fit("LangausFun","ON");
461       hSigTim[it]->GetXaxis()->SetTitle(Form("dE/dx, time interval %d",it+1));
462       hSigTim[it]->GetYaxis()->SetTitle("Events");
463       Float_t mpv=lfun->GetParameter(1);
464       Float_t empv=lfun->GetParError(1);
465       Float_t sig=lfun->GetParameter(3);
466       Float_t esig=lfun->GetParError(3);
467       Float_t sigl=lfun->GetParameter(0);
468       Float_t esigl=lfun->GetParError(0);
469       gmpv->SetPoint(iPoint,(Float_t)it,mpv);
470       gmpv->SetPointError(iPoint,0.,empv);
471       gsigg->SetPoint(iPoint,(Float_t)it,sig);
472       gsigg->SetPointError(iPoint,0.,esig);
473       gsigl->SetPoint(iPoint,(Float_t)it,sigl);
474       gsigl->SetPointError(iPoint,0.,esigl);
475       ++iPoint;
476       printf("Bin %d - MPV=%.3f  \t SigmaLandau=%.3f  \t SigmaGaus=%.3f\n",it,mpv,sigl,sig);
477     }
478   }
479   TString ctitle=GetRunNumber()+"SDD: DriftTime - dE/dx";
480   TCanvas* ctim=new TCanvas("ctim",ctitle,800,1000);
481   clist[0]=ctim;
482   ctim->Divide(1,2);
483   ctim->cd(1);
484   // htimT->Draw();
485   // htimTe->SetLineColor(2);
486   // htimTe->Draw("same");
487   htimTne->SetLineColor(4);
488   htimTne->Draw("");
489   htimTne->GetXaxis()->SetTitle("Drift Time (ns)");
490   htimTne->GetYaxis()->SetTitle("TrackPoints");
491   htimTne->GetYaxis()->SetTitleOffset(1.2);
492   // TLatex* ta=new TLatex(0.5,0.85,"All Clusters");
493   // ta->SetNDC();
494   // ta->SetTextColor(1);
495   // ta->Draw();
496   // TLatex* te=new TLatex(0.5,0.8,"Extra Clusters");
497   // te->SetNDC();
498   // te->SetTextColor(2);
499   // te->Draw();
500   //  TLatex* tn=new TLatex(0.3,0.3,"Non-Extra Clusters");
501   TLatex* tn=new TLatex(0.3,0.3,"Clusters on SDD modules");
502   tn->SetNDC();
503   tn->SetTextColor(4);
504   tn->Draw();
505   TLine* tlin3=new TLine(450.,0.,450.,htimTne->GetMaximum());
506     tlin3->SetLineColor(2);
507     tlin3->SetLineWidth(2);
508     tlin3->SetLineStyle(7);
509     tlin3->Draw("same");
510   TLine* tlin4=new TLine(620.,0.,620.,htimTne->GetMaximum());
511     tlin4->SetLineColor(2);
512     tlin4->SetLineWidth(2);
513     tlin4->SetLineStyle(7);
514     tlin4->Draw("same");
515   TLatex* tlimit1=new TLatex(0.2,0.5,"Range for t0");
516   tlimit1->SetNDC();
517   tlimit1->SetTextColor(2);
518   tlimit1->Draw();
519   TLine* tlin5=new TLine(6200.,0.,6200.,htimTne->GetMaximum());
520     tlin5->SetLineColor(2);
521     tlin5->SetLineStyle(7);
522     tlin5->SetLineWidth(2);
523     tlin5->Draw("same");
524   TLine* tlin6=new TLine(5150.,0.,5150.,htimTne->GetMaximum());
525     tlin6->SetLineColor(2);
526     tlin6->SetLineWidth(2);
527     tlin6->SetLineStyle(7);
528     tlin6->Draw("same");
529   TLatex* tlimit2=new TLatex(0.6,0.5,"Range for falling edge");
530   tlimit2->SetNDC();
531   tlimit2->SetTextColor(2);
532   tlimit2->Draw();
533
534   //  ctim->Update();
535   //  TCanvas* cpars=new TCanvas("cpars","Params",800,600);
536   ctim->cd(2);
537   gPad->SetLeftMargin(0.14);
538   gPad->SetFrameLineWidth(2);
539   gPad->SetTickx();
540   gPad->SetTicky();
541   gmpv->SetMarkerStyle(20);
542   gmpv->SetMinimum(75);
543   gmpv->SetMaximum(90);
544   gmpv->GetXaxis()->SetLimits(-0.2,6.8);
545   gmpv->Draw("AP");
546   gmpv->GetXaxis()->SetTitle("Drift Time interval number");
547   gmpv->GetYaxis()->SetTitle("Landau MPV (keV)");
548   gmpv->GetXaxis()->SetTitleSize(0.05);
549   gmpv->GetYaxis()->SetTitleSize(0.05);
550   gmpv->GetYaxis()->SetTitleOffset(1.2);
551   TLatex* tex=new TLatex(0.2,0.75,"dE/dx MPV vs Drift time interval");
552   tex->SetNDC();
553   tex->SetTextColor(1);
554   tex->Draw();
555  //  cpars->Update();
556   ctim->Update();
557   ctim->SaveAs("SDD.pdf");
558
559
560 //_______________________________________________________________________
561 //////////////// SSD ///////////////////////
562 //_______________________________________________________________________
563 void GetGainModuleLevelSSD(TFile* fildat, TCanvas**& clist, Int_t& cnum)
564 {
565   gROOT->SetStyle("Plain");
566   gStyle->SetOptStat(1111);
567   gStyle->SetPalette(1,0);
568   cnum=1;
569   clist=new TCanvas*[1]; 
570
571   TDirectoryFile* df=(TDirectoryFile*)fildat->Get("PWG1dEdxSSDQA");
572   TList* listin=(TList*)df->Get("SSDdEdxQA");
573   if(!listin) return;
574   TH2F* fHistQ=0x0;
575   fHistQ=(TH2F*)listin ->FindObject("QACharge");
576   fHistQ->SetStats(111);
577   fHistQ->SetTitle("SSD Charge vs module number");
578 if(!fHistQ) return;
579   TH2F* fHistCR=(TH2F*)listin ->FindObject("QAChargeRatio");
580   fHistCR->SetStats(0);
581   fHistCR->SetTitle("SSD Charge Ratio vs module number");
582
583   if(!fHistCR) return;
584
585   TH1F* fHistMPVs=new TH1F("SSD HistMPVS","HistMPVs;MPV;N",75,70,95);
586         
587   TH1F* fHistCRmean=new TH1F("SSD HistCRmean","HistCRmean;CRmean;N",200,-1,1);
588         
589   TH1F *fMPVGraph = new TH1F("SSD MPV","MPVgraph;Module number;MPV",1698,-0.5,1697.5);
590   fMPVGraph->SetMarkerColor(kRed);
591   fMPVGraph->SetMarkerSize(0.5);
592   fMPVGraph->SetMarkerStyle(22);
593   fMPVGraph->SetStats(111111);
594   
595   TH1F *fCRmeanGraph = new TH1F("SSD CRmeangraph","CRmeangraph;Module number;MPV",1698,-0.5,1697.5);
596   fCRmeanGraph->SetMarkerColor(kBlue);
597   fCRmeanGraph->SetMarkerSize(0.5);
598   fCRmeanGraph->SetMarkerStyle(23);
599   fCRmeanGraph->SetStats(111111);
600
601   Float_t mpv[1698];
602   Int_t ntofit=200;
603  
604   //  ofstream outfiletxtbad;
605   //outfiletxtbad.open("QALHC11eCPass1_bis/badModules.txt");    
606     for (int i =0;i<1698;i++)
607     {
608       //      cout<<i<<endl;
609       TString tmpQ("Q");
610       tmpQ+=i;
611       TString tmpCR("CR");
612       tmpCR+=i;
613       TH1D* fHist1DCR= fHistCR->ProjectionY(tmpCR,i+1,i+1);
614       Double_t mean=fHist1DCR->GetMean();
615       if(!(TMath::Abs(mean)<1.0)||fHist1DCR->GetEntries()<10)
616           continue;
617       fHistCRmean->Fill(mean);
618       fCRmeanGraph->SetBinContent(i+1,mean);
619       fCRmeanGraph->SetBinError(i+1,fHist1DCR->GetRMS());
620       fCRmeanGraph->GetYaxis()->SetTitle("CR");
621       TH1D* fHist1DQ=fHistQ->ProjectionY(tmpQ,i+1,i+1);
622       //check bad modules
623       if(fHist1DQ->GetEntries()<ntofit)
624         {
625           //outfiletxtbad<<"Low statistic \t module= "<<i<<" netries="<<fHist1DQ->GetEntries()<<endl;
626           continue;
627         }
628       else
629         {
630           tmpQ+="fit";
631           Float_t range=fHist1DQ->GetBinCenter(fHist1DQ->GetMaximumBin());
632           TF1 *f1 = new TF1(tmpQ,LangausFun,range*0.45,range*3.0,4);
633           f1->SetParameters(7.0,range,1.0,5.5);
634           Float_t normalization=fHist1DQ->GetEntries()*fHist1DQ->GetXaxis()->GetBinWidth(2)/f1->Integral(range*0.45,range*3.0);
635           f1->SetParameters(7.0,range,normalization,5.5);
636           //f1->SetParameters(7.0,range,fHist1DQ->GetMaximum(),5.5);
637           f1->SetParNames("sigma Landau","MPV","N","sigma Gaus");
638           f1->SetParLimits(0,2.0,100.0);
639           f1->SetParLimits(3,0.0,100.0);
640           if(fHist1DQ->Fit(tmpQ,"BRQON")==0)
641             {
642               mpv[i]=f1->GetParameter(1);
643               fHistMPVs->Fill(mpv[i]);  
644               fMPVGraph->SetBinContent(i+1,f1->GetParameter(1));
645               fMPVGraph->SetBinError(i+1,f1->GetParError(1));
646               if(mpv[i]<75.0)
647                 {
648                   //outfiletxtbad<<"MPV lower than 75 \t module="<<i<<endl;
649                 }       
650               if(mpv[i]>100.0)
651                 {
652                   // outfiletxtbad<<"MPV higher than 100 \t module="<<i<<endl;            
653                 }
654               if(f1->GetParError(1)>1.0)
655                 {
656                   //outfiletxtbad<<"MPV high error on MPV  \t module="<<i<<endl;                                
657                 }
658             }
659           else
660             {
661               mpv[i]=1;
662               //outfiletxtbad<<"BAD FIT \t module="<<i<<endl;
663               continue;
664             }   
665         }       
666     }   
667   
668     TString ctitle=GetRunNumber()+"SSD Calibration 1";
669   TCanvas *c1SSD = new TCanvas("c1SSD",ctitle,1000,1000);
670   clist[0]=c1SSD;
671   c1SSD->Divide(2,3);
672   c1SSD->cd(1);
673   fHistQ->DrawCopy("colz");
674   c1SSD->cd(2);
675   fHistCR->DrawCopy("colz");
676
677   //  TCanvas *c2SSD = new TCanvas("c2SSD","SSD Calibration 2",1000,1000);
678   //clist[1]=c2SSD;
679   //c2SSD->Divide(2,2);
680   c1SSD->cd(3);
681   fMPVGraph->DrawCopy();  
682      TLine* tlin0=new TLine(0.,80.,1698.,80.);
683     tlin0->SetLineColor(2);
684     tlin0->SetLineWidth(2);
685     tlin0->Draw("same");
686      TLine* tlin01=new TLine(0.,90.,1698.,90.);
687     tlin01->SetLineColor(2);
688     tlin01->SetLineWidth(2);
689     tlin01->Draw("same");
690   c1SSD->cd(4); 
691   fHistMPVs->DrawCopy();
692   c1SSD->cd(5);
693   fCRmeanGraph->DrawCopy();
694     TLine* tlin1=new TLine(0.,0.2,1698.,0.2);
695     tlin1->SetLineColor(2);
696     tlin1->SetLineWidth(2);
697     tlin1->Draw("same");
698     TLine* tlin2=new TLine(0.,-0.2,1698.,-0.2);
699     tlin2->SetLineColor(2);
700     tlin2->SetLineWidth(2);
701     tlin2->Draw("same");
702   TLatex* ta1=new TLatex(0.2,0.8,"SSD Calibration");
703   ta1->SetNDC();
704   ta1->SetTextSize(0.05);
705   ta1->SetTextColor(2);
706   ta1->Draw("same");
707   c1SSD->cd(6);
708   fHistCRmean->DrawCopy();
709   c1SSD->Update();
710   c1SSD->SaveAs("SSD.pdf");
711 }
712
713 //_______________________________________________________________________
714 void VertexQAMacro(TFile *fildat, TCanvas **&clist, Int_t &cnum){
715
716         TDirectoryFile *dir = (TDirectoryFile*)fildat->Get("Vertex_Performance");
717         if(!dir){
718                 Printf("Vertex directory not found... check!");
719         }
720         
721         TList *lt = (TList*)dir->Get("cOutputVtxESD");
722         
723         cnum = 1;
724         clist = new TCanvas*[1];
725
726         
727         TH1F *xVtxSPD = (TH1F*)lt->FindObject("fhSPDVertexX");
728         TH1F *yVtxSPD = (TH1F*)lt->FindObject("fhSPDVertexY");
729         TH1F *zVtxSPD = (TH1F*)lt->FindObject("fhSPDVertexZ");
730         
731         TH1F *zVtxSPD_Zonly = (TH1F*)lt->FindObject("fhSPDVertexZonly");
732         
733         if(!zVtxSPD_Zonly){
734                 Printf("using SPD 3D histo, Zonly not available");
735             zVtxSPD_Zonly = (TH1F*)lt->FindObject("fhSPDVertexZ");      
736         }
737         
738         TH1F *xVtxTRK = (TH1F*)lt->FindObject("fhTRKVertexX");
739         TH1F *yVtxTRK = (TH1F*)lt->FindObject("fhTRKVertexY");
740         TH1F *zVtxTRK = (TH1F*)lt->FindObject("fhTRKVertexZ");
741         
742         TH2F *hntrksSPDvsSPDcls = (TH2F*)lt->FindObject("fhntrksSPDvsSPDcls");
743     TH2F *hntrksZvsSPDcls = (TH2F*)lt->FindObject("fhntrksZvsSPDcls");
744         
745         Bool_t histoCorelation = kTRUE;
746         
747         if(!hntrksZvsSPDcls){
748                 Printf("skipping the second part, no 2D histos available");
749                 histoCorelation=kFALSE; 
750         }
751
752         TString ctitle=GetRunNumber()+"TRKandSPD3DxVtx";
753         TCanvas *TRK_SPD3D_Vtx = new TCanvas("TRKandSPD3DVtx",ctitle,1000,1000);
754         TRK_SPD3D_Vtx->Divide(3,2);
755         clist[0]=TRK_SPD3D_Vtx;
756         gStyle->SetOptFit(111);
757
758         TRK_SPD3D_Vtx->cd(1);
759         xVtxSPD->SetMarkerStyle(20);
760         xVtxSPD->SetLineWidth(3);
761         xVtxSPD->SetMarkerColor(kBlue+2);
762         TF1 *fx = new TF1("gaus", "gaus", -1, 1);
763         xVtxTRK->SetMarkerStyle(20);
764         xVtxTRK->SetLineWidth(4);
765         xVtxTRK->SetLineColor(2);
766         xVtxTRK->Draw("PE");
767         xVtxTRK->Fit("gaus", "M");
768         xVtxSPD->Draw("PE SAME");
769         xVtxTRK->GetXaxis()->SetRangeUser(-0.05, 0.15);
770         xVtxSPD->GetXaxis()->SetRangeUser(-0.05, 0.15);
771         
772         TLatex* tVTX1=new TLatex(0.15,0.85,"VertexSPD");
773     tVTX1->SetNDC();
774     tVTX1->SetTextColor(kBlue+2);
775     tVTX1->Draw();
776         TLatex* tVTX2=new TLatex(0.15,0.8,"VertexTRK");
777     tVTX2->SetNDC();
778     tVTX2->SetTextColor(2);
779     tVTX2->Draw();
780         
781         TRK_SPD3D_Vtx->cd(2);
782         yVtxSPD->SetMarkerStyle(20);
783         yVtxSPD->SetLineWidth(3);
784         yVtxSPD->SetMarkerColor(kBlue+2);
785         TF1 *fy = new TF1("gaus", "gaus", -1, 1);
786         yVtxTRK->SetMarkerStyle(20);
787         yVtxTRK->SetLineWidth(3);
788         yVtxTRK->SetLineColor(2);
789         yVtxTRK->Draw("PE");
790         yVtxTRK->Fit("gaus", "M");
791         yVtxSPD->Draw("PE SAME");
792         yVtxTRK->GetXaxis()->SetRangeUser(0.15, 0.4);
793         yVtxSPD->GetXaxis()->SetRangeUser(0.15, 0.4);
794
795         TLatex* tVTX3=new TLatex(0.15,0.85,"VertexSPD");
796   tVTX3->SetNDC();
797   tVTX3->SetTextColor(kBlue+2);
798   tVTX3->Draw();
799         TLatex* tVTX4=new TLatex(0.15,0.8,"VertexTRK");
800   tVTX4->SetNDC();
801   tVTX4->SetTextColor(2);
802   tVTX4->Draw();
803         
804         
805         
806         TRK_SPD3D_Vtx->cd(3);
807         
808         TF1 *fz = new TF1("gaus", "gaus", -20, 20);
809         zVtxTRK->SetMarkerStyle(20);
810         zVtxTRK->SetLineWidth(3);
811         zVtxTRK->SetMarkerColor(2);
812         zVtxTRK->SetLineColor(2);
813         zVtxTRK->Draw("PE");
814         zVtxTRK->Fit("gaus", "M");
815         zVtxSPD->SetMarkerStyle(20);
816         zVtxSPD->SetLineWidth(1);
817         zVtxSPD->SetLineColor(kBlue+2);
818         zVtxSPD->SetMarkerColor(kBlue+2);
819         zVtxSPD->SetMarkerSize(0.8);
820         zVtxSPD->Draw("PE SAME");
821         TLatex* tVTX5=new TLatex(0.15,0.85,"VertexSPD");
822   tVTX5->SetNDC();
823   tVTX5->SetTextColor(kBlue+2);
824   tVTX5->Draw();
825         TLatex* tVTX6=new TLatex(0.15,0.8,"VertexTRK");
826   tVTX6->SetNDC();
827   tVTX6->SetTextColor(2);
828   tVTX6->Draw();
829
830         
831         
832         //      TCanvas *corrContrSPDClusters = new TCanvas("corrContrSPDClusters", "corrContrSPDClusters");
833         // corrContrSPDClusters->Divide(3,1);
834         //clist[1]=corrContrSPDClusters;
835                 TRK_SPD3D_Vtx->cd(4);
836                 //      corrContrSPDClusters->cd(1);
837         zVtxSPD_Zonly->SetLineWidth(3);
838         zVtxSPD_Zonly->SetLineColor(kBlue+2);
839         zVtxSPD_Zonly->Draw();
840         TLatex* tVTX7=new TLatex(0.15,0.8,"Vertex Z only");
841   tVTX7->SetNDC();
842   tVTX7->SetTextColor(2);
843   tVTX7->Draw();
844         
845         if(histoCorelation){
846                         TRK_SPD3D_Vtx->cd(5);
847                         //corrContrSPDClusters->cd(2);
848                 hntrksSPDvsSPDcls->SetMarkerStyle(20);
849                 hntrksSPDvsSPDcls->Draw();
850         
851                 TRK_SPD3D_Vtx->cd(6);
852                 //              corrContrSPDClusters->cd(3);
853                 hntrksZvsSPDcls->SetMarkerStyle(20);
854                 hntrksZvsSPDcls->Draw();        
855    }    
856         TRK_SPD3D_Vtx->SaveAs("vertex.pdf");
857         delete fx;
858         delete fy;
859         delete fz;
860 }
861
862 //_______________________________________________________________________
863 void PlotSPD(TFile *fildat, TFile *filMC, TCanvas **&clist, Int_t &cnum){
864
865   gROOT->SetStyle("Plain");
866   gStyle->SetPalette(1);
867   gStyle->SetOptStat(0);
868   gStyle->SetOptFit(111);
869   cnum=2; // number of canvases 
870   clist= new TCanvas* [2];//array of pointers to TCanvases
871
872    TDirectoryFile *spddata = (TDirectoryFile*)fildat->Get("SPD_Performance");
873     spddata->cd();
874    TList *fListData = (TList*)spddata->Get("coutput1");
875     
876    TString fTitleData = "Data";
877    TString fTitleMc = "MC";
878
879
880   Double_t nevtsData = ((TH1I*)(fListData->FindObject("hEventsProcessed")))->GetEntries();
881   printf("   #events in %s : %f \n",fTitleData.Data(),nevtsData);
882
883   TDirectoryFile *spdmc = (TDirectoryFile*)filMC->Get("SPD_Performance");
884   spdmc->cd();
885   TList *fListMc = (TList*)spdmc->Get("coutput1");
886   Double_t nevtsMc = ((TH1I*)(fListMc->FindObject("hEventsProcessed")))->GetEntries();
887   printf("   #events in %s : %f \n",fTitleMc.Data(),nevtsMc);
888   //printf("Available functions : \n - ratiomodules() \n - ratiochips() \n - mapsinner(isShowMaps) \n - phiTracklet() \n - phiTrackletsZ() \n - foEfficiency() \n");
889   // phi projection
890   TH2F *trackData = (TH2F*)fListData->FindObject("hSPDphivsSPDeta");
891   trackData->SetTitle(Form("%s %s",trackData->GetTitle(),fTitleData.Data()));
892   TH1D *trackDataPhi = trackData->ProjectionY();
893   if(!trackDataPhi) printf("NO 1 \n");
894   //trackDataPhi->SetTitle(Form("%s %s",trackDataPhi->GetTitle(),fTitleData.Data()));
895   trackDataPhi->SetTitle("Tracklets vs Phi");
896   //rawDist->cd(1);
897   //trackDataPhi->SetLineColor(kRed);
898   //trackDataPhi->DrawCopy();
899   TH1D *trackDataEta = trackData->ProjectionX();
900   if(!trackDataEta) printf("NO 2 \n");
901   trackDataEta->SetTitle("Tracklets vs eta");
902   //trackDataEta->SetTitle(Form("%s %s",trackDataEta->GetTitle(),fTitleData.Data()));
903   // rawDist->cd(2);
904   // trackDataEta->SetLineColor(kRed);
905   // trackDataEta->DrawCopy();
906
907   TH1F etaData, phiData;
908   trackDataEta->Copy(etaData);
909   trackDataPhi->Copy(phiData);
910   //////???????
911   TH1F etaFrac, phiFrac, mcEta, mcPhi;
912   trackDataEta->Copy(etaFrac);
913   trackDataPhi->Copy(phiFrac);
914
915   TH2F *trackMc = (TH2F*)fListMc->FindObject("hSPDphivsSPDeta");
916     trackMc->SetTitle(Form("%s %s",trackMc->GetTitle(),fTitleMc.Data()));
917
918   TString ctitle = GetRunNumber()+"tracklets";
919   TCanvas *tracklets = new TCanvas("tracklets",ctitle,1200,600);
920   clist[0]=tracklets;
921   tracklets->Divide(2,1);
922   tracklets->cd(1);
923   tracklets->cd(1)->SetRightMargin(0.15);
924   //trackData->SetTitle(Form("%s %s",trackData->GetTitle(),fTitleData.Data()));
925   trackData->SetTitle("Data 2011");
926   trackData->DrawCopy("colz");
927   tracklets->cd(2);
928   tracklets->cd(2)->SetRightMargin(0.15);
929   //trackMc->SetTitle(Form("%s %s",trackMc->GetTitle(),fTitleMc.Data()));
930   trackMc->SetTitle("Data 2010");
931   TH1D *h = (TH1D*)trackMc->DrawCopy("colz");
932   //  fTitleData.ReplaceAll(" ","");
933   //  fTitleMc.ReplaceAll(" ","");
934   // tracklets->SaveAs(Form("trackletsPhiEtaMaps_%s_%s.png",fTitleData.Data(),fTitleMc.Data()));
935   tracklets->SaveAs("SPDtracklets.pdf");
936
937   TH1D *trackMcPhi = trackMc->ProjectionY();
938   trackMcPhi->SetTitle(Form("%s",h->GetTitle()));
939   // rawDist->cd(3);
940   // trackMcPhi->DrawCopy();
941   TH1D *trackMcEta = trackMc->ProjectionX();
942   trackMcEta->SetTitle(Form("%s",h->GetTitle()));
943   // rawDist->cd(4);
944   // trackMcEta->DrawCopy();
945
946   //rawDist->SaveAs(Form("trackletsPhiEtaRaw_%s_%s.png",fTitleData.Data(),fTitleMc.Data()));
947
948   TH1F etaMc, phiMc;
949   trackMcEta->Copy(etaMc);
950   trackMcPhi->Copy(phiMc);
951
952   trackMcEta->Copy(mcEta);
953   trackMcPhi->Copy(mcPhi);
954
955   etaFrac.Scale(1./etaFrac.GetEntries());
956   mcEta.Scale(1./mcEta.GetEntries());
957   etaFrac.Add(&mcEta,-1);
958   etaFrac.Divide(&mcEta);
959
960   phiFrac.Scale(1./phiFrac.GetEntries());
961   mcPhi.Scale(1./mcPhi.GetEntries());
962   phiFrac.Add(&mcPhi,-1);
963   phiFrac.Divide(&mcPhi);
964
965   ctitle = GetRunNumber()+"tracklets and ratios vs eta and phi";
966   TCanvas *track = new TCanvas("track",ctitle,1200,1200);
967   clist[1]=track;
968   track->Divide(2,2);
969   track->cd(1);
970   phiData.SetLineColor(kRed);
971   phiData.SetLineWidth(2);
972   phiData.Scale(1./phiData.GetEntries());
973   phiData.DrawCopy();
974   phiMc.Scale(1./phiMc.GetEntries());
975   //  TLatex* tphi=new TLatex(0.6,0.85,"Red = data; Blue =MC");
976   TLatex* tphi=new TLatex(0.6,0.85,"Red = LHC11h; Blue = LHC10h");
977   tphi->SetNDC();
978   tphi->SetTextSize(0.04);
979    tphi->SetTextColor(1);
980   tphi->Draw();  
981   phiMc.DrawCopy("same");
982   track->cd(2);
983   etaData.SetLineColor(kRed);
984   etaData.SetLineWidth(2);
985   etaData.Scale(1./etaData.GetEntries());
986   etaData.DrawCopy();
987   etaMc.Scale(1./etaMc.GetEntries());
988   tphi->Draw();  
989   etaMc.DrawCopy("same");
990   //  track->SaveAs(Form("trackletsPhiEtaNorm_%s_%s.png",fTitleData.Data(),fTitleMc.Data()));
991
992   //  TCanvas *frac = new TCanvas("frac","fractions",1200,600);
993   //frac->Divide(2,1);
994   //  frac->cd(1);
995   track->cd(3);
996   //  phiFrac.SetTitle(Form(" #Delta#varphi/#varphi_{%s}   %s - %s ",fTitleMc.Data(),fTitleData.Data(),fTitleMc.Data()));
997   phiFrac.SetLineColor(1);
998   // TLatex* tratio=new TLatex(0.2,0.85,"Data/MC");
999  TLatex* tratio=new TLatex(0.2,0.85,"Data 2011/ Data 2010");
1000   tratio->SetNDC();
1001   //  tratio->SetTextSize();
1002   tratio->SetTextColor(1);
1003   phiFrac.DrawCopy();
1004   tratio->Draw();  
1005   track->cd(4);
1006   //  etaFrac.SetTitle(Form(" #Delta#eta/#eta_{%s}   %s - %s ",fTitleMc.Data(),fTitleData.Data(),fTitleMc.Data()));
1007   etaFrac.SetLineColor(1);
1008   etaFrac.DrawCopy();  
1009   //  track->SaveAs(Form("trackletsPhiEtaNorm_%s_%s.png",fTitleData.Data(),fTitleMc.Data()));
1010   // frac->SaveAs(Form("relativeRatios_%s_%s.png",fTitleData.Data(),fTitleMc.Data()));
1011   tratio->Draw();  
1012   track->SaveAs("SPD_eta_phi.pdf");
1013 }
1014
1015 //_______________________________________________________________________
1016 Bool_t PlotITSTPCMatchingEff(TFile *f, TCanvas**& clist,Int_t& cnum) {
1017
1018   cnum=1;
1019   clist = new TCanvas*[1];
1020
1021   //  clist = new TCanvas* [1];
1022   TString ctitle = GetRunNumber()+"ITS-TPC match";
1023   TCanvas* cITSTPCmatch = new TCanvas("cITSTPCmatch",ctitle,10,10,1200,600);
1024   clist[0]=cITSTPCmatch;
1025   cITSTPCmatch->Divide(2,1);
1026   cITSTPCmatch->cd(1);
1027   gPad->SetGridy();
1028   gPad->SetLogx();
1029   cITSTPCmatch->cd(2);
1030   gPad->SetGridy();
1031   gPad->SetLogx();
1032
1033   //  clist = cITSTPCmatch;
1034
1035   if(!f) return kFALSE;
1036
1037   TList *list=0;
1038   TList *listSPD=0;
1039   TDirectoryFile *dir=0;
1040
1041   // count active SPD HSs
1042   dir=(TDirectoryFile*)f->GetDirectory("SPD_Performance");
1043   if(dir) listSPD = (TList*)dir->Get("coutput1");
1044   if(!dir) return kFALSE;
1045
1046   Float_t spdFrac[2]={0.,0.};
1047   TH1F *hnHSsSPD=new TH1F("hnHSsSPD","Active HSs in SPD layers 1 and 2; layer; HSs",2,0.5,2.5);
1048   if(listSPD) {
1049     //listSPD->Print();
1050     TH1F *hFiredChip = (TH1F*)listSPD->FindObject("hFiredChip");
1051     Int_t nHSsInner=0,nHSsOuter=0;
1052     for(Int_t i=0;i<400;i++) if(hFiredChip->GetBinContent(i)>0) nHSsInner++;
1053     for(Int_t i=400;i<1200;i++) if(hFiredChip->GetBinContent(i)>0) nHSsOuter++;
1054     nHSsInner = (Int_t)(nHSsInner/10);
1055     nHSsOuter = (Int_t)(nHSsOuter/10);
1056     hnHSsSPD->SetBinContent(1,nHSsInner);
1057     hnHSsSPD->SetBinContent(2,nHSsOuter);
1058     spdFrac[0]=(Float_t)nHSsInner/40.;
1059     spdFrac[1]=(Float_t)nHSsOuter/80.;
1060   }
1061   TGraph *spdFrac0=new TGraph(1);
1062   spdFrac0->SetPoint(0,0.08,spdFrac[0]);
1063   spdFrac0->SetMarkerColor(1); spdFrac0->SetMarkerStyle(20);
1064   TGraph *spdFrac1=new TGraph(1);
1065   spdFrac1->SetPoint(0,0.08,spdFrac[1]);
1066   spdFrac1->SetMarkerColor(1); spdFrac1->SetMarkerStyle(24);
1067   TLegend *l2=new TLegend(0.1,0.62,0.5,0.93);
1068   l2->SetBorderSize(1);
1069   l2->AddEntry(spdFrac0,"Frac. active SPD0","p");
1070   l2->AddEntry(spdFrac1,"Frac. active SPD1","p");
1071
1072   //
1073   // Efficiencies for CENTRAL
1074   //
1075   dir=(TDirectoryFile*)f->GetDirectory("ITS_Performance");
1076   if(dir) list = (TList*)dir->Get("cOutputITS_3500_10000");
1077   if(!list) return kFALSE;
1078
1079   TH1F *fHistPtTPCInAcc = (TH1F*)list->FindObject("fHistPtTPCInAcc");
1080   TH1F *fHistPtITSMI6InAcc = (TH1F*)list->FindObject("fHistPtITSMI6InAcc");
1081   TH1F *fHistPtITSMI5InAcc = (TH1F*)list->FindObject("fHistPtITSMI5InAcc");
1082   TH1F *fHistPtITSMI4InAcc = (TH1F*)list->FindObject("fHistPtITSMI4InAcc");
1083   TH1F *fHistPtITSMI3InAcc = (TH1F*)list->FindObject("fHistPtITSMI3InAcc");
1084   TH1F *fHistPtITSMI2InAcc = (TH1F*)list->FindObject("fHistPtITSMI2InAcc");
1085   TH1F *fHistPtITSMISPDInAcc = (TH1F*)list->FindObject("fHistPtITSMISPDInAcc");
1086   TH1F *fHistPtITSMIoneSPDInAcc = (TH1F*)list->FindObject("fHistPtITSMIoneSPDInAcc");
1087   TH1F *fHistPtITSTPCsel = (TH1F*)list->FindObject("fHistPtITSTPCsel");
1088   TH1F *fHistPtITSMIge2InAcc = (TH1F*)fHistPtITSMI6InAcc->Clone("fHistPtITSMIge2InAcc");
1089   fHistPtITSMIge2InAcc->Add(fHistPtITSMI5InAcc);
1090   fHistPtITSMIge2InAcc->Add(fHistPtITSMI4InAcc);
1091   fHistPtITSMIge2InAcc->Add(fHistPtITSMI3InAcc);
1092   fHistPtITSMIge2InAcc->Add(fHistPtITSMI2InAcc);
1093
1094
1095   TLegend *l3=new TLegend(0.5,0.62,0.95,0.93);
1096   l3->SetBorderSize(1);
1097   cITSTPCmatch->cd(1);
1098   fHistPtITSMIge2InAcc->SetTitle("Fraction of prolonged tracks with N ITS points: central");
1099   fHistPtITSMIge2InAcc->SetYTitle("ITS+TPC / TPC");
1100   fHistPtITSMIge2InAcc->Divide(fHistPtITSMIge2InAcc,fHistPtTPCInAcc,1,1,"B");
1101   fHistPtITSMIge2InAcc->SetMaximum(1.6);
1102   fHistPtITSMIge2InAcc->SetMinimum(0);
1103   fHistPtITSMIge2InAcc->GetXaxis()->SetRangeUser(0.1,30);
1104   fHistPtITSMIge2InAcc->Draw();
1105   l3->AddEntry(fHistPtITSMIge2InAcc,">=2 cls","l");
1106   fHistPtITSMI6InAcc->Divide(fHistPtITSMI6InAcc,fHistPtTPCInAcc,1,1,"B");
1107   fHistPtITSMI6InAcc->SetLineColor(2);
1108   l3->AddEntry(fHistPtITSMI6InAcc,"6 cls","l");
1109   fHistPtITSMI6InAcc->Draw("same");
1110   fHistPtITSMI5InAcc->Divide(fHistPtITSMI5InAcc,fHistPtTPCInAcc,1,1,"B");
1111   fHistPtITSMI5InAcc->SetLineColor(3);
1112   l3->AddEntry(fHistPtITSMI5InAcc,"5 cls","l");
1113   fHistPtITSMI5InAcc->Draw("same");
1114   fHistPtITSMI4InAcc->Divide(fHistPtITSMI4InAcc,fHistPtTPCInAcc,1,1,"B");
1115   fHistPtITSMI4InAcc->SetLineColor(4);
1116   l3->AddEntry(fHistPtITSMI4InAcc,"4 cls","l");
1117   fHistPtITSMI4InAcc->Draw("same");
1118   fHistPtITSMI3InAcc->Divide(fHistPtITSMI3InAcc,fHistPtTPCInAcc,1,1,"B");
1119   fHistPtITSMI3InAcc->SetLineColor(6);
1120   l3->AddEntry(fHistPtITSMI3InAcc,"3 cls","l");
1121   fHistPtITSMI3InAcc->Draw("same");
1122   fHistPtITSMI2InAcc->Divide(fHistPtITSMI2InAcc,fHistPtTPCInAcc,1,1,"B");
1123   fHistPtITSMI2InAcc->SetLineColor(7);
1124   l3->AddEntry(fHistPtITSMI2InAcc,"2 cls","l");
1125   fHistPtITSMI2InAcc->Draw("same");
1126   fHistPtITSMISPDInAcc->Divide(fHistPtITSMISPDInAcc,fHistPtTPCInAcc,1,1,"B");
1127   fHistPtITSMISPDInAcc->SetLineColor(9);
1128   l3->AddEntry(fHistPtITSMISPDInAcc,"2SPD + any","l");
1129   fHistPtITSMISPDInAcc->Draw("same");
1130   fHistPtITSMIoneSPDInAcc->Divide(fHistPtITSMIoneSPDInAcc,fHistPtTPCInAcc,1,1,"B");
1131   fHistPtITSMIoneSPDInAcc->SetLineColor(15);
1132   l3->AddEntry(fHistPtITSMIoneSPDInAcc,">=1SPD + any","l");
1133   fHistPtITSMIoneSPDInAcc->Draw("same");
1134   fHistPtITSTPCsel->Divide(fHistPtITSTPCsel,fHistPtTPCInAcc,1,1,"B");
1135   fHistPtITSTPCsel->SetLineColor(kAzure+1);
1136   l3->AddEntry(fHistPtITSTPCsel,">=1SPD + any + d_{0} cut","l");
1137   fHistPtITSTPCsel->Draw("same");
1138   fHistPtITSMIge2InAcc->Draw("same");
1139   l3->Draw();
1140   l2->Draw();
1141   spdFrac0->Draw("p");
1142   spdFrac1->Draw("p");
1143
1144   //
1145   // Efficiencies for PERIPHERAL
1146   //
1147   dir=(TDirectoryFile*)f->GetDirectory("ITS_Performance");
1148   if(dir) list = (TList*)dir->Get("cOutputITS_70_310");
1149   if(!list) return kFALSE;
1150
1151   fHistPtTPCInAcc = (TH1F*)list->FindObject("fHistPtTPCInAcc");
1152   fHistPtITSMI6InAcc = (TH1F*)list->FindObject("fHistPtITSMI6InAcc");
1153   fHistPtITSMI5InAcc = (TH1F*)list->FindObject("fHistPtITSMI5InAcc");
1154   fHistPtITSMI4InAcc = (TH1F*)list->FindObject("fHistPtITSMI4InAcc");
1155   fHistPtITSMI3InAcc = (TH1F*)list->FindObject("fHistPtITSMI3InAcc");
1156   fHistPtITSMI2InAcc = (TH1F*)list->FindObject("fHistPtITSMI2InAcc");
1157   fHistPtITSMISPDInAcc = (TH1F*)list->FindObject("fHistPtITSMISPDInAcc");
1158   fHistPtITSMIoneSPDInAcc = (TH1F*)list->FindObject("fHistPtITSMIoneSPDInAcc");
1159   fHistPtITSTPCsel = (TH1F*)list->FindObject("fHistPtITSTPCsel");
1160   fHistPtITSMIge2InAcc = (TH1F*)fHistPtITSMI6InAcc->Clone("fHistPtITSMIge2InAcc");
1161   fHistPtITSMIge2InAcc->Add(fHistPtITSMI5InAcc);
1162   fHistPtITSMIge2InAcc->Add(fHistPtITSMI4InAcc);
1163   fHistPtITSMIge2InAcc->Add(fHistPtITSMI3InAcc);
1164   fHistPtITSMIge2InAcc->Add(fHistPtITSMI2InAcc);
1165
1166
1167   cITSTPCmatch->cd(2);
1168   fHistPtITSMIge2InAcc->SetTitle("Fraction of prolonged tracks with N ITS points: peripheral");
1169   fHistPtITSMIge2InAcc->SetYTitle("ITS+TPC / TPC");
1170   fHistPtITSMIge2InAcc->Divide(fHistPtITSMIge2InAcc,fHistPtTPCInAcc,1,1,"B");
1171   fHistPtITSMIge2InAcc->SetMaximum(1.6);
1172   fHistPtITSMIge2InAcc->SetMinimum(0);
1173   fHistPtITSMIge2InAcc->GetXaxis()->SetRangeUser(0.1,30);
1174   fHistPtITSMIge2InAcc->Draw();
1175   fHistPtITSMI6InAcc->Divide(fHistPtITSMI6InAcc,fHistPtTPCInAcc,1,1,"B");
1176   fHistPtITSMI6InAcc->SetLineColor(2);
1177   fHistPtITSMI6InAcc->Draw("same");
1178   fHistPtITSMI5InAcc->Divide(fHistPtITSMI5InAcc,fHistPtTPCInAcc,1,1,"B");
1179   fHistPtITSMI5InAcc->SetLineColor(3);
1180   fHistPtITSMI5InAcc->Draw("same");
1181   fHistPtITSMI4InAcc->Divide(fHistPtITSMI4InAcc,fHistPtTPCInAcc,1,1,"B");
1182   fHistPtITSMI4InAcc->SetLineColor(4);
1183   fHistPtITSMI4InAcc->Draw("same");
1184   fHistPtITSMI3InAcc->Divide(fHistPtITSMI3InAcc,fHistPtTPCInAcc,1,1,"B");
1185   fHistPtITSMI3InAcc->SetLineColor(6);
1186   fHistPtITSMI3InAcc->Draw("same");
1187   fHistPtITSMI2InAcc->Divide(fHistPtITSMI2InAcc,fHistPtTPCInAcc,1,1,"B");
1188   fHistPtITSMI2InAcc->SetLineColor(7);
1189   fHistPtITSMI2InAcc->Draw("same");
1190   fHistPtITSMISPDInAcc->Divide(fHistPtITSMISPDInAcc,fHistPtTPCInAcc,1,1,"B");
1191   fHistPtITSMISPDInAcc->SetLineColor(9);
1192   fHistPtITSMISPDInAcc->Draw("same");
1193   fHistPtITSMIoneSPDInAcc->Divide(fHistPtITSMIoneSPDInAcc,fHistPtTPCInAcc,1,1,"B");
1194   fHistPtITSMIoneSPDInAcc->SetLineColor(15);
1195   fHistPtITSMIoneSPDInAcc->Draw("same");
1196   fHistPtITSTPCsel->Divide(fHistPtITSTPCsel,fHistPtTPCInAcc,1,1,"B");
1197   fHistPtITSTPCsel->SetLineColor(kAzure+1);
1198   fHistPtITSTPCsel->Draw("same");
1199   fHistPtITSMIge2InAcc->Draw("same");
1200   l3->Draw();
1201   l2->Draw();
1202   spdFrac0->Draw("p");
1203   spdFrac1->Draw("p");
1204   cITSTPCmatch->SaveAs("TPCITSmatching.pdf");
1205   return kTRUE;
1206 }
1207
1208 //_______________________________________________________________________
1209 void SaveC(TFile &fout, TCanvas**& clist, Int_t cnum){
1210   TDirectory *current = gDirectory;
1211   fout.cd();
1212   for(Int_t i=0;i<cnum;i++)clist[i]->Write();
1213   delete[] clist;
1214   current->cd();
1215 }
1216
1217 //_______________________________________________________________________
1218 TString GetRunNumber(){
1219   // returns a string with the run number
1220   char rn[10];
1221   sprintf(rn,"%d  ",gRunNumber);
1222   TString str(rn);
1223   return str;
1224 }