]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/ITS/PlotSDDPerformance.C
Removed printout
[u/mrichter/AliRoot.git] / PWG1 / ITS / PlotSDDPerformance.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TH1F.h>
3 #include <TH2F.h>
4 #include <TF1.h>
5 #include <TPad.h>
6 #include <TGraphErrors.h>
7 #include <TROOT.h>
8 #include <TFile.h>
9 #include <TTree.h>
10 #include <TGrid.h>
11 #include <TGridResult.h>
12 #include <TMath.h>
13 #include <TCanvas.h>
14 #include <TStyle.h>
15 #include <TLatex.h>
16 #include "AliITSgeomTGeo.h"
17 #endif
18
19 Double_t LangausFun(Double_t *x, Double_t *par) {
20
21   //Fit parameters:
22   //par[0]=Width (scale) parameter of Landau density
23   //par[1]=Most Probable (MP, location) parameter of Landau density
24   //par[2]=Total area (integral -inf to inf, normalization constant)
25   //par[3]=Width (sigma) of convoluted Gaussian function
26   //
27   //In the Landau distribution (represented by the CERNLIB approximation), 
28   //the maximum is located at x=-0.22278298 with the location parameter=0.
29   //This shift is corrected within this function, so that the actual
30   //maximum is identical to the MP parameter.
31
32   // Numeric constants
33   Double_t invsq2pi = 0.3989422804014;   // (2 pi)^(-1/2)
34   Double_t mpshift  = -0.22278298;       // Landau maximum location
35
36   // Control constants
37   Double_t np = 100.0;      // number of convolution steps
38   Double_t sc =   5.0;      // convolution extends to +-sc Gaussian sigmas
39
40   // Variables
41   Double_t xx;
42   Double_t mpc;
43   Double_t fland;
44   Double_t sum = 0.0;
45   Double_t xlow,xupp;
46   Double_t step;
47   Double_t i;
48
49
50   // MP shift correction
51   mpc = par[1] - mpshift * par[0]; 
52
53   // Range of convolution integral
54   xlow = x[0] - sc * par[3];
55   xupp = x[0] + sc * par[3];
56
57   step = (xupp-xlow) / np;
58
59   // Convolution integral of Landau and Gaussian by sum
60   for(i=1.0; i<=np/2; i++) {
61     xx = xlow + (i-.5) * step;
62     fland = TMath::Landau(xx,mpc,par[0]) / par[0];
63     sum += fland * TMath::Gaus(x[0],xx,par[3]);
64
65     xx = xupp - (i-.5) * step;
66     fland = TMath::Landau(xx,mpc,par[0]) / par[0];
67     sum += fland * TMath::Gaus(x[0],xx,par[3]);
68   }
69
70   return (par[2] * step * sum * invsq2pi / par[3]);
71 }
72
73
74 void PlotSDDPerformance(TString option="local", 
75                         TString fileName="QAresults.root", 
76                         Int_t nRun=0,
77                         Int_t year=2010, 
78                         TString period="LHC10e"){
79
80   gStyle->SetOptStat(0);
81   //  gStyle->SetOptTitle(0);
82   TFile *f;
83   TString path;
84   Char_t psfilename[100];
85   Char_t openpsfilename[100];
86   Char_t closepsfilename[100];
87   sprintf(psfilename,"QAtrainRun%d.ps",nRun);
88   sprintf(openpsfilename,"QAtrainRun%d.ps[",nRun);
89   sprintf(closepsfilename,"QAtrainRun%d.ps]",nRun);
90
91   if(option.Contains("local")){
92     f=new TFile(fileName.Data());
93   }else{
94     TGrid::Connect("alien:");
95     path=Form("/alice/data/%d/%s/%09d/ESDs/",year,period.Data(),nRun);
96     if(!gGrid||!gGrid->IsConnected()) {
97       printf("gGrid not found! exit macro\n");
98       return;
99     }
100     TGridResult *gr = gGrid->Query(path,fileName);
101     Int_t nFiles = gr->GetEntries();
102     if (nFiles < 1){
103       printf("QA file for run %d not found\n",nRun);
104       return;
105     }
106     printf("================>%d files found\n", nFiles);
107     Int_t theFile=0;
108     Int_t maxVer=0;
109     if (nFiles > 1){
110       for (Int_t iFil = 0; iFil <nFiles ; iFil++) { 
111         fileName=Form("%s",gr->GetKey(iFil,"turl"));
112         TString cutFilename=fileName.ReplaceAll("/QAresults.root","");
113         Int_t last=cutFilename.Sizeof()-3;
114         cutFilename.Remove(0,last);
115         Int_t qaver=atoi(cutFilename.Data());
116         if(qaver>maxVer){
117           maxVer=qaver;
118           theFile=iFil;
119         }
120       }
121     }
122     fileName=Form("%s",gr->GetKey(theFile,"turl"));
123     f=TFile::Open(fileName.Data());
124   }
125
126   TDirectoryFile* df=(TDirectoryFile*)f->Get("SDD_Performance");
127   if(!df){
128     printf("SDD_Performance MISSING -> Exit\n");
129     return;
130   }
131   TList* l=(TList*)df->Get("coutputRP");
132   if(!df){
133     printf("coutputRP TList MISSING -> Exit\n");
134     return;
135   }
136
137   TH1F* hcllay=(TH1F*)l->FindObject("hCluInLay");
138   TH1F* hapmod=(TH1F*)l->FindObject("hAllPmod");
139   TH1F* hgpmod=(TH1F*)l->FindObject("hGoodPmod");
140   TH1F* hmpmod=(TH1F*)l->FindObject("hMissPmod");
141   TH1F* hbrmod=(TH1F*)l->FindObject("hBadRegmod");
142   TH1F* hskmod=(TH1F*)l->FindObject("hSkippedmod");
143   TH1F* hoamod=(TH1F*)l->FindObject("hOutAccmod");
144   TH1F* hnrmod=(TH1F*)l->FindObject("hNoRefitmod");
145
146   //  TH1F* hapxl=(TH1F*)l->FindObject("hAllPxloc");
147   TH1F* hgpxl=(TH1F*)l->FindObject("hGoodPxloc");
148   TH1F* hmpxl=(TH1F*)l->FindObject("hMissPxloc");
149   TH1F* hbrxl=(TH1F*)l->FindObject("hBadRegxloc");
150   //  TH1F* hapzl=(TH1F*)l->FindObject("hAllPzloc");
151   TH1F* hgpzl=(TH1F*)l->FindObject("hGoodPzloc");
152   TH1F* hmpzl=(TH1F*)l->FindObject("hMissPzloc");
153   TH1F* hbrzl=(TH1F*)l->FindObject("hBadRegzloc");
154
155   TH2F* hdedx3=(TH2F*)l->FindObject("hdEdxL3VsP");
156   TH2F* hdedx4=(TH2F*)l->FindObject("hdEdxL4VsP");
157   TH2F* hdedxmod=(TH2F*)l->FindObject("hdEdxVsMod");
158   
159
160   TH1F* hmodR=(TH1F*)l->FindObject("hRPMod");
161   TH1F* hmodT=(TH1F*)l->FindObject("hTPMod");
162   TH1F* hgamod=(TH1F*)l->FindObject("hGAMod");
163
164   TH2F* h2dmodR3=new TH2F("h2dmodR3","Rec Points, Layer 3",6,0.5,6.5,14,0.5,14.5);
165   TH2F* h2dmodR4=new TH2F("h2dmodR4","Rec Points, Layer 4",8,0.5,8.5,22,0.5,22.5);
166   TH2F* h2dmodT3=new TH2F("h2dmodT3","Track Points, Layer 3",6,0.5,6.5,14,0.5,14.5);
167   TH2F* h2dmodT4=new TH2F("h2dmodT4","Track Points, Layer 4",8,0.5,8.5,22,0.5,22.5);
168   TH2F* h2dmodR3N=new TH2F("h2dmodR3N","Rec Points/GoodAnode/Event, Layer 3",6,0.5,6.5,14,0.5,14.5);
169   TH2F* h2dmodR4N=new TH2F("h2dmodR4N","Rec Points/GoodAnode/Event, Layer 4",8,0.5,8.5,22,0.5,22.5);
170   TH2F* h2dmodT3N=new TH2F("h2dmodT3N","Track Points/GoodAnode/Event, Layer 3",6,0.5,6.5,14,0.5,14.5);
171   TH2F* h2dmodT4N=new TH2F("h2dmodT4N","Track Points/GoodAnode/Event, Layer 4",8,0.5,8.5,22,0.5,22.5);
172   TH1F* hmodRN=new TH1F("hmodRN","Normalized Rec Points per Module",260,239.5,499.5);
173   TH1F* hmodTN=new TH1F("hmodTN","Normalized Track Points per Module",260,239.5,499.5);
174
175   TH1F* hev=(TH1F*)l->FindObject("hNEvents");
176   Int_t nTotEvents=hev->GetBinContent(2);
177   Int_t nTrigEvents=hev->GetBinContent(3);
178   Int_t nEvents=nTotEvents;
179   printf("---- Statistics ----\n");
180   printf("Number of Events = %d\n",nTotEvents);
181   if(nTrigEvents>0){ 
182     printf("Number of Triggered Events = %d\n",nTrigEvents);
183     nEvents=nTrigEvents;
184   }else{
185     printf("No request on the trigger done whenrunning the task\n");
186   }
187   Int_t bestMod=0;
188   for(Int_t iMod=0; iMod<260;iMod++){
189     Int_t gda=(Int_t)hgamod->GetBinContent(iMod+1);
190     if(gda>bestMod) bestMod=gda;
191   }
192   Int_t nChunks=1;
193   if(bestMod>512){
194     nChunks=(Int_t)(bestMod/512.+0.5);
195   }
196   printf("Chunks merged = %d\n",nChunks);
197   hgamod->Scale(1./nChunks);
198   TCanvas* cgan=new TCanvas("cgan","Good Anodes");
199   cgan->Print(openpsfilename);
200   cgan->SetTickx();
201   cgan->SetTicky();
202   hgamod->SetMarkerStyle(20);
203   hgamod->SetMarkerSize(0.6);
204   hgamod->SetMinimum(-10.);
205   hgamod->Draw("P");
206   hgamod->GetXaxis()->SetTitle("SDD Module Id");
207   hgamod->GetYaxis()->SetTitle("Number of good anodes");
208   cgan->Update();
209   cgan->Print(psfilename);
210
211   printf("---- Modules with > 2%% of bad anodes ----\n");
212   for(Int_t iMod=0; iMod<260; iMod++){
213     Int_t idMod=iMod+240;
214     Float_t rps=hmodR->GetBinContent(iMod+1);
215     Float_t tps=hmodT->GetBinContent(iMod+1);
216     Float_t ga=hgamod->GetBinContent(iMod+1);
217     if(ga<500){
218       printf("Module %d - Good Anodes = %d\n",idMod,(Int_t)ga);
219     }
220     Float_t rpsN=0.;
221     Float_t tpsN=0.;
222     Float_t erpsN=0.;
223     Float_t etpsN=0.;
224     if(ga>0){
225       rpsN=rps/ga/(Float_t)nEvents;
226       tpsN=tps/ga/(Float_t)nEvents;
227       erpsN=TMath::Sqrt(rps)/ga/(Float_t)nEvents;
228       etpsN=TMath::Sqrt(tps)/ga/(Float_t)nEvents;
229     }
230     hmodRN->SetBinContent(iMod+1,rpsN);
231     hmodTN->SetBinContent(iMod+1,tpsN);
232     hmodRN->SetBinError(iMod+1,erpsN);
233     hmodTN->SetBinError(iMod+1,etpsN);
234     Int_t iLay,iLad,iDet;
235     AliITSgeomTGeo::GetModuleId(idMod,iLay,iLad,iDet);
236     if(iLay==3){
237       h2dmodR3->SetBinContent(iDet,iLad,rps);
238       h2dmodT3->SetBinContent(iDet,iLad,tps);
239       h2dmodR3N->SetBinContent(iDet,iLad,rpsN);
240       h2dmodT3N->SetBinContent(iDet,iLad,tpsN);
241     }
242     else if(iLay==4){
243       h2dmodR4->SetBinContent(iDet,iLad,rps);
244       h2dmodT4->SetBinContent(iDet,iLad,tps);
245       h2dmodR4N->SetBinContent(iDet,iLad,rpsN);
246       h2dmodT4N->SetBinContent(iDet,iLad,tpsN);
247     }
248   }
249
250   gStyle->SetPalette(1);
251
252   if(hmodR->GetEntries()>0){
253     TCanvas* cmodR=new TCanvas("cmodR","RecPoint Occup",1200,1200);
254     cmodR->Divide(2,3);
255     cmodR->cd(1);
256     gPad->SetLeftMargin(0.14);
257     hmodR->Draw();
258     hmodR->GetXaxis()->SetTitle("SDD Module Id");
259     hmodR->GetYaxis()->SetTitle("RecPoints");
260     hmodR->GetYaxis()->SetTitleOffset(1.55);
261     cmodR->cd(2);
262     gPad->SetLeftMargin(0.14);
263     hmodRN->Draw("E");
264     hmodRN->GetXaxis()->SetTitle("SDD Module Id");
265     hmodRN->GetYaxis()->SetTitle("RecPoints/GoodAnode/Event");
266     hmodRN->GetYaxis()->SetTitleOffset(1.55);
267     cmodR->cd(3);
268     gPad->SetLeftMargin(0.14);
269     h2dmodR3->Draw("colz");
270     h2dmodR3->GetXaxis()->SetTitle("Detector");
271     h2dmodR3->GetYaxis()->SetTitle("Ladder");
272     cmodR->cd(4);
273     gPad->SetLeftMargin(0.14);
274     h2dmodR3N->Draw("colz");
275     h2dmodR3N->GetXaxis()->SetTitle("Detector");
276     h2dmodR3N->GetYaxis()->SetTitle("Ladder");
277     cmodR->cd(5);
278     gPad->SetLeftMargin(0.14);
279     h2dmodR4->Draw("colz");
280     h2dmodR4->GetXaxis()->SetTitle("Detector");
281     h2dmodR4->GetYaxis()->SetTitle("Ladder");
282     cmodR->cd(6);
283     gPad->SetLeftMargin(0.14);
284     gPad->SetLeftMargin(0.14);
285     h2dmodR4N->Draw("colz");
286     h2dmodR4N->GetXaxis()->SetTitle("Detector");
287     h2dmodR4N->GetYaxis()->SetTitle("Ladder");
288     cmodR->Update();
289     cmodR->Print(psfilename);
290   }
291     
292   TCanvas* cmodT=new TCanvas("cmodT","TrackPoint Occup",1200,1200);
293   cmodT->Divide(2,3);
294   cmodT->cd(1);
295   hmodT->Draw();
296   hmodT->GetXaxis()->SetTitle("SDD Module Id");
297   hmodT->GetYaxis()->SetTitle("TrackPoints");
298   hmodT->GetYaxis()->SetTitleOffset(1.4);
299   cmodT->cd(2);
300   gPad->SetLeftMargin(0.14);
301   hmodTN->Draw("E");
302   hmodTN->GetXaxis()->SetTitle("SDD Module Id");
303   hmodTN->GetYaxis()->SetTitle("TrackPoints");
304   hmodTN->GetYaxis()->SetTitleOffset(1.4);
305   cmodT->cd(3);
306   gPad->SetLeftMargin(0.14);
307   h2dmodT3->Draw("colz");
308   h2dmodT3->GetXaxis()->SetTitle("Detector");
309   h2dmodT3->GetYaxis()->SetTitle("Ladder");
310   cmodT->cd(4);
311   gPad->SetLeftMargin(0.14);
312   h2dmodT3N->Draw("colz");
313   h2dmodT3N->GetXaxis()->SetTitle("Detector");
314   h2dmodT3N->GetYaxis()->SetTitle("Ladder");  
315   cmodT->cd(5);
316   gPad->SetLeftMargin(0.14);
317   h2dmodT4->Draw("colz");
318   h2dmodT4->GetXaxis()->SetTitle("Detector");
319   h2dmodT4->GetYaxis()->SetTitle("Ladder");
320   cmodT->cd(6);
321   gPad->SetLeftMargin(0.14);
322   h2dmodT4N->Draw("colz");
323   h2dmodT4N->GetXaxis()->SetTitle("Detector");
324   h2dmodT4N->GetYaxis()->SetTitle("Ladder");
325   cmodT->Update();
326   cmodT->Print(psfilename);
327
328   TH1F* htplad3=(TH1F*)l->FindObject("hTPLad3");
329   TH1F* htplad4=(TH1F*)l->FindObject("hTPLad4");
330   TH1F* hgalad3=(TH1F*)l->FindObject("hGALad3");
331   TH1F* hgalad4=(TH1F*)l->FindObject("hGALad4");
332   TH1F* hnormOcc3=new TH1F("hnormOcc3","",14,-0.5,13.5);
333   TH1F* hnormOcc4=new TH1F("hnormOcc4","",22,-0.5,21.5);
334   for(Int_t ilad=0;ilad<14;ilad++){ 
335     Float_t occ=0.;
336     Float_t eocc=0.;
337     Int_t gd3=hgalad3->GetBinContent(ilad+1);
338     if(gd3>0){
339       occ=(Float_t)htplad3->GetBinContent(ilad+1)/(Float_t)gd3/(Float_t)nEvents;
340       eocc=TMath::Sqrt((Float_t)htplad3->GetBinContent(ilad+1))/(Float_t)gd3/(Float_t)nEvents;
341     }
342     hnormOcc3->SetBinContent(ilad+1,occ);
343     hnormOcc3->SetBinError(ilad+1,eocc);
344   }
345   for(Int_t ilad=0;ilad<22;ilad++){ 
346     Float_t occ=0.;
347     Float_t eocc=0.;
348     Int_t gd4=hgalad4->GetBinContent(ilad+1);
349     if(gd4>0){
350       occ=(Float_t)htplad4->GetBinContent(ilad+1)/(Float_t)gd4/(Float_t)nEvents;
351       eocc=TMath::Sqrt((Float_t)htplad4->GetBinContent(ilad+1))/(Float_t)gd4/(Float_t)nEvents;
352     }
353     hnormOcc4->SetBinContent(ilad+1,occ);
354     hnormOcc4->SetBinError(ilad+1,eocc);
355   }
356  
357
358   TCanvas* cn0=new TCanvas("cn0","Normalized Ladder Occupancy",1400,600);
359   cn0->Divide(2,1);
360   cn0->cd(1);
361   gPad->SetLeftMargin(0.14);
362   hnormOcc3->Draw();
363   hnormOcc3->GetXaxis()->SetTitle("Ladder number (layer 3)");
364   hnormOcc3->GetYaxis()->SetTitle("TrackPoints/GoodAnodes/Events");
365   hnormOcc3->GetYaxis()->SetTitleOffset(1.35);
366   cn0->cd(2);
367   gPad->SetLeftMargin(0.14);
368   hnormOcc4->Draw();
369   hnormOcc4->GetXaxis()->SetTitle("Ladder number (layer 4)");
370   hnormOcc4->GetYaxis()->SetTitle("TrackPoints/GoodAnode/Events");
371   hnormOcc4->GetYaxis()->SetTitleOffset(1.35);
372   cn0->Update();
373   cn0->Print(psfilename);
374
375   if(hcllay){
376     Double_t norm=hcllay->GetBinContent(1);
377     hcllay->Scale(1./norm);
378     hcllay->SetTitle("");
379     hcllay->GetXaxis()->SetRange(2,7);
380     hcllay->SetMinimum(0.);
381     hcllay->SetMaximum(1.1);
382     hcllay->SetMarkerStyle(23);
383     TCanvas* ceffL=new TCanvas("ceffL","PointPerLayer",1000,600);
384     ceffL->SetGridy();
385     hcllay->Draw();
386     hcllay->GetXaxis()->SetTitle("Layer");
387     hcllay->GetYaxis()->SetTitle("Fraction of tracks with point in layer");
388     ceffL->Update();
389     ceffL->Print(psfilename);
390   }
391
392   hgpmod->SetTitle("");
393   TCanvas* ceff0=new TCanvas("ceff0","ModuleIndexInfo",1000,600);
394   hgpmod->Draw();
395   hgpmod->GetXaxis()->SetTitle("SDD Module Id");
396   hgpmod->GetYaxis()->SetTitle("Number of tracks");
397   hmpmod->SetLineColor(2);
398   hmpmod->SetMarkerColor(2);
399   hmpmod->SetMarkerStyle(22);
400   hmpmod->SetMarkerSize(0.5);
401   hmpmod->Draw("psame");
402   hbrmod->SetLineColor(kGreen+1);
403   hbrmod->SetMarkerColor(kGreen+1);
404   hbrmod->SetMarkerStyle(20);
405   hbrmod->SetMarkerSize(0.5);
406   hbrmod->Draw("same");
407   hskmod->SetLineColor(kYellow);
408   hskmod->Draw("same");
409   hoamod->SetLineColor(4);
410   hoamod->Draw("same");
411   hnrmod->SetLineColor(6);
412   hnrmod->Draw("same");
413   TLatex* t1=new TLatex(0.7,0.85,"Good Point");
414   t1->SetNDC();
415   t1->SetTextColor(1);
416   t1->Draw();
417   TLatex* t2=new TLatex(0.7,0.8,"Missing Point");
418   t2->SetNDC();
419   t2->SetTextColor(2);
420   t2->Draw();
421   TLatex* t3=new TLatex(0.7,0.75,"Bad Region");
422   t3->SetNDC();
423   t3->SetTextColor(kGreen+1);
424   t3->Draw();
425   ceff0->Update();
426   ceff0->Print(psfilename);
427
428   TH1F* heff=new TH1F("heff","",260,239.5,499.5);
429   for(Int_t imod=0; imod<260;imod++){
430     Float_t numer=hgpmod->GetBinContent(imod+1)+hbrmod->GetBinContent(imod+1)+hoamod->GetBinContent(imod+1)+hnrmod->GetBinContent(imod+1);
431     Float_t denom=hapmod->GetBinContent(imod+1);
432     Float_t eff=0.;
433     Float_t erreff=0.;
434     if(denom>0){
435       eff=numer/denom;
436       erreff=TMath::Sqrt(eff*(1-eff)/denom);
437     }
438     heff->SetBinContent(imod+1,eff);
439     heff->SetBinError(imod+1,erreff);
440   }
441
442   printf("---- Modules with efficiency < 90%% ----\n");
443   TCanvas* ceff1=new TCanvas("ceff1","Efficiency",1000,600);
444   heff->Draw();
445   heff->GetXaxis()->SetTitle("SDD Module Id");
446   heff->GetYaxis()->SetTitle("Fraction of tracks with point in good region");
447   for(Int_t ibin=1; ibin<=heff->GetNbinsX(); ibin++){
448     Float_t e=heff->GetBinContent(ibin);
449     if(e<0.9){
450       Int_t iMod=(Int_t)heff->GetBinCenter(ibin);
451       Int_t lay,lad,det;
452       AliITSgeomTGeo::GetModuleId(iMod,lay,lad,det);
453       printf("Module %d - Layer %d Ladder %2d Det %d  -   Eff. %.3f\n",iMod,lay,lad,det,heff->GetBinContent(ibin));
454     }
455   }
456   ceff1->Update();
457   ceff1->Print(psfilename);
458
459   if(hgpxl){
460     hgpxl->SetTitle("");
461     hgpzl->SetTitle("");
462     TCanvas* ceff2=new TCanvas("ceff2","LocalCoord",1000,600);
463     ceff2->Divide(2,1);
464     ceff2->cd(1);
465     hgpxl->Draw();
466     hgpxl->GetXaxis()->SetTitle("Xlocal (cm)");
467     hgpxl->GetYaxis()->SetTitle("Number of tracks");
468     hmpxl->SetLineColor(2);
469     hmpxl->SetMarkerColor(2);
470     hmpxl->SetMarkerStyle(22);
471     hmpxl->SetMarkerSize(0.5);
472     hmpxl->Draw("psame");
473     hbrxl->SetLineColor(kGreen+1);
474     hbrxl->SetMarkerColor(kGreen+1);
475     hbrxl->SetMarkerStyle(20);
476     hbrxl->SetMarkerSize(0.5);
477     hbrxl->Draw("same");
478     t1->Draw();
479     t2->Draw();
480     t3->Draw();
481     ceff2->cd(2);
482     hgpzl->Draw();
483     hgpzl->GetXaxis()->SetTitle("Zlocal (cm)");
484     hgpzl->GetYaxis()->SetTitle("Number of tracks");
485     hmpzl->SetLineColor(2);
486     hmpzl->SetMarkerColor(2);
487     hmpzl->SetMarkerStyle(22);
488     hmpzl->SetMarkerSize(0.5);
489     hmpzl->Draw("psame");
490     hbrzl->SetLineColor(kGreen+1);
491     hbrzl->SetMarkerColor(kGreen+1);
492     hbrzl->SetMarkerStyle(20);
493     hbrzl->SetMarkerSize(0.5);
494     hbrzl->Draw("same");
495     t1->Draw();
496     t2->Draw();
497     t3->Draw();
498     ceff2->Update();
499     ceff2->Print(psfilename);
500   }
501
502   TH1F* htimR=(TH1F*)l->FindObject("hDrTimRP");
503   TH1F* htimT=(TH1F*)l->FindObject("hDrTimTPAll");
504   TH1F* htimTe=(TH1F*)l->FindObject("hDrTimTPExtra");
505   TH1F* htimTne=(TH1F*)l->FindObject("hDrTimTPNoExtra");
506   TCanvas* ctim=new TCanvas("ctim","DriftTime",1400,600);
507   ctim->Divide(2,1);
508   ctim->cd(1);
509   htimR->Draw(); 
510   htimR->GetYaxis()->SetTitleOffset(1.2);
511   htimR->GetXaxis()->SetTitle("Drift Time (ns)");
512   htimR->GetYaxis()->SetTitle("RecPoints");
513   ctim->cd(2);
514   htimT->Draw();
515   htimTe->SetLineColor(2);
516   htimTe->Draw("same");
517   htimTne->SetLineColor(4);
518   htimTne->Draw("same");
519   htimT->GetXaxis()->SetTitle("Drift Time (ns)");
520   htimT->GetYaxis()->SetTitle("TrackPoints");
521   htimT->GetYaxis()->SetTitleOffset(1.2);
522   TLatex* ta=new TLatex(0.5,0.85,"All Clusters");
523   ta->SetNDC();
524   ta->SetTextColor(1);
525   ta->Draw();
526   TLatex* te=new TLatex(0.5,0.8,"Extra Clusters");
527   te->SetNDC();
528   te->SetTextColor(2);
529   te->Draw();
530   TLatex* tn=new TLatex(0.5,0.75,"Non-Extra Clusters");
531   tn->SetNDC();
532   tn->SetTextColor(4);
533   tn->Draw();
534   ctim->Update();
535   ctim->Print(psfilename);
536
537   TCanvas* cdedx=new TCanvas("cdedx","dedx",1400,600);
538   cdedx->Divide(3,1);
539   cdedx->cd(1);
540   gPad->SetLogz();
541   hdedx3->Draw("col");
542   hdedx3->GetXaxis()->SetTitle("P (GeV/c)");
543   hdedx3->GetYaxis()->SetTitle("dE/dx (keV/300 #mum) Layer 3");
544   hdedx3->GetYaxis()->SetTitleOffset(1.25);
545   cdedx->cd(2);
546   gPad->SetLogz();
547   hdedx4->Draw("col");
548   hdedx4->GetXaxis()->SetTitle("P (GeV/c)");
549   hdedx4->GetYaxis()->SetTitle("dE/dx (keV/300 #mum) Layer 4");
550   hdedx4->GetYaxis()->SetTitleOffset(1.25);
551   cdedx->cd(3);
552   gPad->SetLogz();
553   hdedxmod->Draw("col"); 
554   hdedxmod->GetXaxis()->SetTitle("SDD Module Id");
555   hdedxmod->GetYaxis()->SetTitle("dE/dx (keV/300 #mum)");
556   hdedxmod->GetYaxis()->SetTitleOffset(1.25);
557   cdedx->Update();
558   cdedx->Print(psfilename);
559
560   printf("---- dE/dx vs.DriftTime ----\n");
561   TCanvas* csig=new TCanvas("csig","dedx vs. DriftTime",1000,700);
562   csig->Divide(4,2);
563   TH1F* hSigTim[8];
564   TGraphErrors* gmpv=new TGraphErrors(0);
565   TGraphErrors* gsigg=new TGraphErrors(0);
566   TGraphErrors* gsigl=new TGraphErrors(0);
567   gmpv->SetTitle("");
568   gsigg->SetTitle("");
569   gsigl->SetTitle("");
570   Int_t iPoint=0;
571   TF1 *lfun = new TF1("LangausFun",LangausFun,50.,300.,4);
572   for(Int_t it=0; it<8; it++){
573     hSigTim[it]=(TH1F*)l->FindObject(Form("hSigTimeInt%d",it));
574     csig->cd(it+1);
575     hSigTim[it]->Draw();
576     if(hSigTim[it]->GetEntries()>200){
577       lfun->SetLineWidth(2);
578       lfun->SetParameter(0,5.);
579       lfun->SetParameter(1,80.);
580       lfun->SetParameter(2,hSigTim[it]->GetEntries()/10.);
581       lfun->SetParameter(3,10.);
582       lfun->SetParLimits(3,0.,20);
583
584       hSigTim[it]->Fit("LangausFun","QLR");
585       hSigTim[it]->GetXaxis()->SetTitle(Form("dE/dx, time interval %d",it+1));
586       hSigTim[it]->GetYaxis()->SetTitle("Events");
587       Float_t mpv=lfun->GetParameter(1);
588       Float_t empv=lfun->GetParError(1);
589       Float_t sig=lfun->GetParameter(3);
590       Float_t esig=lfun->GetParError(3);
591       Float_t sigl=lfun->GetParameter(0);
592       Float_t esigl=lfun->GetParError(0);
593       gmpv->SetPoint(iPoint,(Float_t)it,mpv);
594       gmpv->SetPointError(iPoint,0.,empv);
595       gsigg->SetPoint(iPoint,(Float_t)it,sig);
596       gsigg->SetPointError(iPoint,0.,esig);
597       gsigl->SetPoint(iPoint,(Float_t)it,sigl);
598       gsigl->SetPointError(iPoint,0.,esigl);
599       ++iPoint;
600       gPad->Update();
601       printf("Bin %d - MPV=%.3f  \t SigmaLandau=%.3f  \t SigmaGaus=%.3f\n",it,mpv,sigl,sig);
602     }
603   }
604   csig->Print(psfilename);
605
606   TCanvas* cpars=new TCanvas("cpars","Params",800,900);
607   cpars->Divide(1,3,0.01,0.);
608   cpars->cd(1);
609   gPad->SetLeftMargin(0.14);
610   gPad->SetFrameLineWidth(2);
611   gPad->SetTickx();
612   gPad->SetTicky();
613   gmpv->SetMarkerStyle(20);
614   //  gmpv->SetMinimum(0);
615   //  gmpv->SetMaximum(120);
616   gmpv->GetXaxis()->SetLimits(-0.2,6.8);
617   gmpv->Draw("AP");
618   //  gmpv->GetXaxis()->SetTitle("Drift Time interval number");
619   gmpv->GetYaxis()->SetTitle("Landau MPV (keV)");
620   gmpv->GetXaxis()->SetTitleSize(0.05);
621   gmpv->GetYaxis()->SetTitleSize(0.05);
622   gmpv->GetYaxis()->SetTitleOffset(1.2);
623   cpars->cd(2);
624   gPad->SetLeftMargin(0.14);
625   gPad->SetFrameLineWidth(2);
626   gPad->SetTickx();
627   gPad->SetTicky();
628   gsigl->SetMarkerStyle(20);
629   gsigl->GetXaxis()->SetLimits(-0.2,6.8);
630   gsigl->Draw("AP");
631   //  gsigl->GetXaxis()->SetTitle("Drift Time interval number");
632   gsigl->GetYaxis()->SetTitle("#sigma_{Landau} (keV)");
633   gsigl->GetXaxis()->SetTitleSize(0.05);
634   gsigl->GetYaxis()->SetTitleSize(0.05);
635   gsigl->GetYaxis()->SetTitleOffset(1.2);
636   cpars->cd(3);
637   gPad->SetLeftMargin(0.14);
638   gPad->SetFrameLineWidth(2);
639   gPad->SetTickx();
640   gPad->SetTicky();
641   gsigg->SetMarkerStyle(20);
642   gsigg->GetXaxis()->SetLimits(-0.2,6.8);
643   gsigg->Draw("AP");
644   gsigg->GetXaxis()->SetTitle("Drift Time interval number");
645   gsigg->GetYaxis()->SetTitle("#sigma_{Gauss} (keV)");
646   gsigg->GetXaxis()->SetTitleSize(0.05);
647   gsigg->GetYaxis()->SetTitleSize(0.05);
648   gsigg->GetYaxis()->SetTitleOffset(1.2);
649   cpars->Update();
650   cpars->Print(psfilename);  
651   cpars->Print(closepsfilename);  
652
653 }