1 /// \file TestAnalisys.C
6 /// AddChains(868); // AddChains(runNumber);
7 /// Select(); // make default selection of data
8 /// MakePictures("pic868");
20 #include "TProfile2D.h"
26 #include "TParticle.h"
28 #include "TEventList.h"
30 #include "AliTrackReference.h"
31 #include "AliTPCParam.h"
32 #include "AliDetector.h"
34 #include "AliGenInfo.h"
41 void Select(); // make default selection
42 void SelectLaser(); // make default selection for laser tracks
44 void AddChains(Int_t run); // add all the trees with selected run number to the chain
45 void MakePictures(char *dirname); // make default pictures
47 void PRFYZ(TCut cut0, TCut cut1, char * description);
48 void PRFZZ(TCut cut0, TCut cut1, char * description);
49 void P5Z(TCut cut0, TCut cut1, char * description);
50 void P3Z(TCut cut0, TCut cut1, char * description);
51 void ResYZ(TCut cut0, TCut cut1, char * description);
52 void SysYX(TCut cut0, char * description);
53 void SysZX(TCut cut0, char * description);
55 TProfile * ProfileMaxRow(TCut cut0, char *name, Int_t max);
56 TProfile * ProfileMaxPhi(TCut cut0, char *name, Int_t max);
57 TProfile * ProfileMaxZ(TCut cut0, char *name, Int_t max);
58 TProfile * ProfileQRow(TCut cut0, char *name, Int_t max);
59 TProfile * ProfileQPhi(TCut cut0, char *name, Int_t max);
60 TProfile * ProfileQZ(TCut cut0, char *name, Int_t max);
61 TCanvas * NoiseSector(TCut cut0, char * description, Int_t maxrow, Int_t maxpad);
66 TChain chaincl("Tracks","Tracks"); // tpc tracks and clusters
67 TChain chaincl2("Tracks","Tracks"); // tpc tracks and clusters
68 TChain chainSignal("SignalB","SignalB"); // signals over threshold 50
70 TChain chainFit("Fit","Fit"); // fitted signals with fit parameters
71 TChain chainPed("Fit","Fit"); // fitted pedestal with noise
72 TString runDesc="Run "; // run descriptor
74 AliComparisonDraw comp;
75 AliComparisonDraw compCl;
76 AliComparisonDraw compF;
77 AliComparisonDraw compP;
80 // selection of data for analysis
82 TEventList * listTracks = new TEventList("listTracks","listTracks");
83 TEventList * listFitS = new TEventList("listFitS","listFitS");
84 TEventList * listFitPed = new TEventList("listFitPed","listFitPed");
89 void MakePictures(char *dirname){
94 gROOT->SetStyle("Plain");
95 gStyle->SetFillColor(10);
96 gStyle->SetPadColor(10);
97 gStyle->SetCanvasColor(10);
98 gStyle->SetStatColor(10);
100 gStyle->SetPalette(1,0);
101 gStyle->SetNumberContours(50);
103 const Int_t kMinCl = 200;
105 sprintf(chshell,"mkdir %s", dirname);
106 gSystem->Exec(chshell);
107 sprintf(chshell,"cd %s", dirname);
108 gSystem->Exec(chshell);
112 TCanvas c(dirname,dirname);
113 for (Int_t isector=0; isector<36; isector++){
118 sprintf(chshell,"Cl.fX>0&&Cl.fDetector==%d",isector);
119 Int_t ncl = comp.fTree->Draw("Cl.fY",chshell);
120 if (ncl<kMinCl) continue;
121 printf("MakePictures sector %d\n",isector);
129 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
130 sprintf(chcut1,"Cl.fDetector==%d", isector);
131 prof = ProfileQRow(chcut1, chdesc, 70);
132 sprintf(chshell,"%s/qrow_sec%dIROC.eps", dirname,isector);
136 prof = ProfileMaxRow(chcut1, chdesc, 70);
137 sprintf(chshell,"%s/maxrow_sec%dIROC.eps", dirname,isector);
142 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
143 sprintf(chcut1,"Cl.fDetector==%d", isector+36);
144 prof = ProfileQRow(chcut1, chdesc, 100);
145 sprintf(chshell,"%s/qrow_sec%dOROC.eps", dirname,isector);
149 prof = ProfileMaxRow(chcut1, chdesc, 100);
150 sprintf(chshell,"%s/maxrow_sec%dOROC.eps", dirname,isector);
157 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
158 sprintf(chcut1,"Cl.fDetector==%d", isector);
159 prof = ProfileMaxPhi(chcut1, chdesc,20);
160 sprintf(chshell,"%s/qphi_sec%dIROC.eps", dirname,isector);
165 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
166 sprintf(chcut1,"Cl.fDetector==%d", isector+36);
167 prof = ProfileMaxPhi(chcut1, chdesc,20);
168 sprintf(chshell,"%s/qphi_sec%dOROC.eps", dirname,isector);
176 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
177 sprintf(chcut1,"Cl.fDetector==%d", isector);
178 prof = ProfileQZ(chcut1, chdesc,20);
179 sprintf(chshell,"%s/qz_sec%dIROC.eps", dirname,isector);
185 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
186 sprintf(chcut1,"Cl.fDetector==%d", isector+36);
187 prof = ProfileQZ(chcut1, chdesc,20);
188 sprintf(chshell,"%s/qz_sec%dOROC.eps", dirname,isector);
195 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
196 sprintf(chcut1,"Sector==%d", isector);
197 TCanvas *cnoise = NoiseSector(chcut1, chdesc,70,70);
198 sprintf(chshell,"%s/noise_sec%dIROC.eps", dirname,isector);
199 cnoise->Print(chshell);
200 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
201 sprintf(chcut1,"Sector==%d", isector+36);
202 cnoise = NoiseSector(chcut1, chdesc,70,70);
203 sprintf(chshell,"%s/noise_sec%dOROC.eps", dirname,isector);
204 cnoise->Print(chshell);
209 sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector);
210 sprintf(chcut1,"Cl.fDetector==%d||Cl.fDetector==%d", isector, isector+36);
211 SysYX(chcut1,chdesc);
212 sprintf(chshell,"%s/deltayx_sec%d.eps", dirname,isector);
215 SysZX(chcut1,chdesc);
216 sprintf(chshell,"%s/deltazx_sec%d.eps", dirname,isector);
222 if (ncl<500) continue; //not enough statistic
224 sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector);
225 sprintf(chcut1,"Cl.fDetector==%d", isector);
226 sprintf(chcut2,"Cl.fDetector==%d", isector+36);
228 PRFYZ(chcut1, chcut2,chdesc);
229 sprintf(chshell,"%s/prfyz_sec%d.eps", dirname,isector);
231 sprintf(chcut1,"Sector==%d", isector);
232 sprintf(chcut2,"Sector==%d", isector+36);
233 PRFZZ(chcut1, chcut2,chdesc);
234 sprintf(chshell,"%s/prfzz_sec%d.eps", dirname,isector);
239 sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector);
240 sprintf(chcut1,"Cl.fDetector==%d", isector);
241 sprintf(chcut2,"Cl.fDetector==%d", isector+36);
243 ResYZ(chcut1, chcut2,chdesc);
244 sprintf(chshell,"%s/resyz_sec%d.eps", dirname,isector);
255 void AddChains(Int_t run){
257 // add files to the chains + check consistency
269 sprintf(strcl,"ls *%d*/TPCtracks.root > files.txt", run);
270 gSystem->Exec(strcl);
271 in0.open("files.txt");
273 if (sfile.Length()==0) break;
274 printf("%s\n",sfile.Data());
275 TFile f(sfile.Data());
276 TTree * tree = (TTree*)f.Get("Tracks");
279 chaincl.Add(sfile.Data());
284 sprintf(strcl,"ls *%d*/FitSignal.root > files.txt", run);
285 gSystem->Exec(strcl);
286 in1.open("files.txt");
288 if (sfile.Length()==0) break;
289 printf("%s\n",sfile.Data());
290 TFile f(sfile.Data());
291 TTree * tree =(TTree*)f.Get("Fit");
294 chainFit.Add(sfile.Data());
299 sprintf(strcl,"ls *%d*/TPCsignal.root > files.txt", run);
300 gSystem->Exec(strcl);
301 in2.open("files.txt");
303 if (sfile.Length()==0) break;
304 printf("%s\n",sfile.Data());
305 TFile f(sfile.Data());
306 TTree * tree =(TTree*)f.Get("Fit");
309 chainPed.Add(sfile.Data());
311 // chainPed.Add(sfile.Data());
315 sprintf(strcl,"ls *%d*/TPCsignal.root > files.txt", run);
316 gSystem->Exec(strcl);
317 in4.open("files.txt");
319 if (sfile.Length()==0) break;
320 printf("%s\n",sfile.Data());
321 TFile f(sfile.Data());
322 TTree * tree =(TTree*)f.Get("SignalB");
325 chainSignal.Add(sfile.Data());
327 // chainPed.Add(sfile.Data());
332 printf("\n IMPORT REC points");
333 sprintf(strcl,"ls *%d*/*RecPoints* > files.txt", run);
334 gSystem->Exec(strcl);
335 in3.open("files.txt");
337 if (sfile.Length()==0) break;
338 printf("%s\n",sfile.Data());
339 TFile fcl(sfile.Data());
341 sprintf(tname,"%s/%s/TreeR",sfile.Data(),fcl.GetListOfKeys()->At(0)->GetName());
343 // chainPed.Add(sfile.Data());
346 comp.fTree = &chaincl;
347 compF.fTree = &chainFit;
348 compP.fTree = &chainPed;
353 // base cut on the tracks
355 comp.fTree->Draw(">>listTracks","Etrack.fTPCncls>30&&abs(Etrack.fIp.fP[4])<1");
356 comp.fTree->SetEventList(listTracks);
358 compF.fTree->Draw(">>listFitS","p2>0&&p2<5&&p1<900&&p0<10000&&p4<1&&p4>0&&p5<p3&&chi2<150");
359 compF.fTree->SetEventList(listFitS);
364 // base cut on the tracks
366 comp.fTree->Draw(">>listTracks","Etrack.fTPCncls>20&&abs(Etrack.fIp.fP[4])<1&&abs(Etrack.fIp.fP[3])<0.01");
367 comp.fTree->SetEventList(listTracks);
369 compF.fTree->Draw(">>listFitS","p2>0&&p2<5&&p1<900&&p0<10000&&p4<1&&p4>0&&p5<p3&&chi2<150");
370 compF.fTree->SetEventList(listFitS);
372 // make default aliases
375 comp.fTree->SetAlias("lz0","abs(Etrack.fIp.fP[1]-20)<5");
376 comp.fTree->SetAlias("lz1","abs(Etrack.fIp.fP[1]-70)<20");
377 comp.fTree->SetAlias("lz2","abs(Etrack.fIp.fP[1]-150)<20");
378 comp.fTree->SetAlias("lz3","abs(Etrack.fIp.fP[1]-210)<20");
384 void PRFYZ(TCut cut0, TCut cut1, char * description){
386 // plot Pad response function as funtion of drift z
389 TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+(250-x)*[1]*[1])");
390 f1->SetParameter(1,0.2);
391 f1->SetParameter(0,0.2);
392 comp.DrawXY("abs(Cl.fZ)","sqrt(Cl.fSigmaY2)","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut0,5,10,240,-0,1);
393 TH1F * prfInnerY = (TH1F*)comp.fMean->Clone();
395 comp.DrawXY("abs(Cl.fZ)","sqrt(Cl.fSigmaY2)","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut1,5,10,240,-0,1);
396 TH1F * prfOuterY = (TH1F*)comp.fMean->Clone();
399 prfOuterY->SetMinimum(0);
400 prfOuterY->SetMarkerStyle(23);
401 prfInnerY->SetMarkerStyle(24);
402 prfOuterY->SetXTitle("Z position (cm)");
403 prfOuterY->SetYTitle("PRF width (cm)");
407 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
409 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
411 prfInnerY->Draw("same");
412 TString desc = description;
413 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"\nTPC cluster shape Fit: #sigma = #sqrt{p_{0}^{2}+(z_{d}-z)p_{1}^{2}}");
414 legend->SetBorderSize(1);
415 legend->AddEntry(prfOuterY,chouter);
416 legend->AddEntry(prfInnerY,chinner);
422 void PRFZZ(TCut cut0, TCut cut1, char * description){
423 TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+x*[1]*[1])");
424 f1->SetParameter(1,0.2);
425 f1->SetParameter(0,0.2);
426 compF.DrawXY("p1*0.285","p2*0.285","p2>0",cut0,8,20,250,-0,2);
427 TH1F * prfInnerY = (TH1F*)compF.fMean->Clone();
428 compF.DrawXY("p1*0.285","p2*0.285","p2>0",cut1,8,20,250,-0,2);
429 TH1F * prfOuterY = (TH1F*)compF.fMean->Clone();
432 prfOuterY->SetMinimum(0);
433 prfOuterY->SetMarkerStyle(23);
434 prfInnerY->SetMarkerStyle(24);
435 prfOuterY->SetXTitle("Drift length(cm)");
436 prfOuterY->SetYTitle("Z Sigma (cm)");
440 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
442 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
444 prfInnerY->Draw("same");
445 TString desc = description;
446 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC signal shape Fit: #sigma = #sqrt{p_{0}^{2}+(z)p_{1}^{2}}");
447 legend->SetBorderSize(1);
448 legend->AddEntry(prfOuterY,chouter);
449 legend->AddEntry(prfInnerY,chinner);
454 void ResYZ(TCut cut0, TCut cut1, char * description){
456 // resolution in y coordinate as function of z
458 TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+(250-x)*[1]*[1])");
459 f1->SetParameter(1,0.2);
460 f1->SetParameter(0,0.2);
461 comp.DrawXY("abs(Cl.fZ)","Track.fTrackPoints.GetY()-Cl.GetY()","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut0,5,10,240,-0.5,0.5);
462 TH1F * prfInnerY = (TH1F*)comp.fRes->Clone();
464 comp.DrawXY("abs(Cl.fZ)","Track.fTrackPoints.GetY()-Cl.GetY()","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut1,5,10,240,-0.5,0.5);
465 TH1F * prfOuterY = (TH1F*)comp.fRes->Clone();
468 prfOuterY->SetMinimum(0);
469 prfOuterY->SetMaximum(0.15);
470 prfOuterY->SetMarkerStyle(23);
471 prfInnerY->SetMarkerStyle(24);
472 prfOuterY->SetXTitle("Z position (cm)");
473 prfOuterY->SetYTitle("Y resolution (cm)");
477 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
479 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
481 prfInnerY->Draw("same");
482 TString desc = description;
483 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster resolution: #sigma = #sqrt{p_{0}^{2}+(z_{d}-z)p_{1}^{2}}");
484 legend->SetBorderSize(1);
485 legend->AddEntry(prfOuterY,chouter);
486 legend->AddEntry(prfInnerY,chinner);
490 void SysYX(TCut cut0, char * description){
494 TProfile * profA = new TProfile("profY","profY",70,89,250);
495 comp.fTree->Draw("Cl.fY-Track.fTrackPoints.GetY():Track.fTrackPoints.GetX()>>profY","abs(Cl.fY-Track.fTrackPoints.GetY())<1&&Track.fTrackPoints.fTX>10"+cut0,"prof");
496 profA->SetXTitle("Local X (cm)");
497 profA->SetYTitle("Mean #Delta Y (cm)");
498 TLegend *legend = new TLegend(0.55,0.25,0.85,0.30, description);
502 void SysZX(TCut cut0, char * description){
506 TProfile * profA = new TProfile("profZ","profZ",70,89,250);
507 comp.fTree->Draw("abs(Cl.fZ)-abs(Track.fTrackPoints.GetZ()):Track.fTrackPoints.GetX()>>profZ","abs(abs(Cl.fZ)-abs(Track.fTrackPoints.GetZ()))<1&&Track.fTrackPoints.fTX>10"+cut0,"prof");
508 profA->SetXTitle("Local X (cm)");
509 profA->SetYTitle("Mean #Delta Z (cm)");
510 TLegend *legend = new TLegend(0.55,0.25,0.85,0.30, description);
514 TProfile * ProfileMaxRow(TCut cut0, char *name, Int_t max){
516 // make profile histrogram of amplitudes
518 TProfile *profA = new TProfile(name,name,max,0,max-1);
520 sprintf(expr,"Cl.fMax:Cl.fRow>>%s",name);
521 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
522 profA->SetXTitle("Pad Row");
523 profA->SetYTitle("Amplitude at maxima (ADC)");
527 TProfile * ProfileMaxPhi(TCut cut0, char *name, Int_t max){
529 // make profile histrogram of amplitudes
531 TProfile *profA = new TProfile(name,name,max,-0.14,0.14);
533 sprintf(expr,"Cl.fMax:Cl.fY/Cl.fX>>%s",name);
534 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
535 profA->SetXTitle("Local #phi(rad)");
536 profA->SetYTitle("Amplitude at maxima (ADC)");
540 TProfile * ProfileQRow(TCut cut0, char *name, Int_t max){
542 // make profile histrogram of amplitudes
544 TProfile *profA = new TProfile(name,name,max,0,max-1);
546 sprintf(expr,"Cl.fQ:Cl.fRow>>%s",name);
547 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
548 profA->SetXTitle("Pad Row");
549 profA->SetYTitle("Total charge(ADC)");
553 TProfile * ProfileQPhi(TCut cut0, char *name, Int_t max){
555 // make profile histrogram of amplitudes
557 TProfile *profA = new TProfile(name,name,max,-0.14,0.14);
559 sprintf(expr,"Cl.fQ:Cl.fY/Cl.fX>>%s",name);
560 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
561 profA->SetXTitle("Local #phi(rad)");
562 profA->SetYTitle("Total charge (ADC)");
566 TProfile * ProfileQZ(TCut cut0, char *name, Int_t max){
568 // make profile histrogram of amplitudes
570 TF1 * fline = new TF1("fline","[0]+[1]*[0]*(250-x)");
571 TF1 * f1 = new TF1("f1","[0]*exp(-[1]*(250-x))");
572 TProfile *profA = new TProfile(name,name,max,0,250);
574 sprintf(expr,"Cl.fQ:abs(Cl.fZ)>>%s",name);
575 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
576 profA->SetXTitle("Z position (cm)");
577 profA->SetYTitle("Amplitude (ADC)");
580 f1->SetParameter(0,fline->GetParameter(0));
581 f1->SetParameter(1,fline->GetParameter(1));
583 sprintf(chc,"Exponential fit params: p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
585 TLegend *legend = new TLegend(0.25,0.12,0.85,0.25, chc);
590 TProfile * ProfileMaxZ(TCut cut0, char *name, Int_t max){
592 // make profile histrogram of amplitudes
594 TF1 * f1 = new TF1("f1","[0]+[1]*[0]*(250-x)");
595 TProfile *profA = new TProfile(name,name,max,0,250);
597 sprintf(expr,"Cl.fMax:abs(Cl.fZ)>>%s",name);
598 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
599 profA->SetXTitle("Z position (cm)");
600 profA->SetYTitle("Amplitude at maxima (ADC)");
603 sprintf(chc,"p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
604 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, chc);
610 void P3Z(TCut cut0, TCut cut1, char * description){
612 // first exponenent as function of z drift
614 TF1 * f1 = new TF1("fdiff","[0]+[1]/[0]*x");
615 f1->SetParameter(1,0.2);
616 f1->SetParameter(0,0.2);
617 compF.DrawXY("p1*0.285","p3","Max>250",cut0,5,20,250,-0,2);
618 TH1F * prfInnerY = (TH1F*)compF.fMean->Clone();
619 compF.DrawXY("p1*0.285","p3","Max>250",cut1,5,20,250,-0,2);
620 TH1F * prfOuterY = (TH1F*)compF.fMean->Clone();
623 prfOuterY->SetMinimum(0);
624 prfOuterY->SetMaximum(1);
625 prfOuterY->SetMarkerStyle(23);
626 prfInnerY->SetMarkerStyle(24);
627 prfOuterY->SetXTitle("Drift length (cm)");
628 prfOuterY->SetYTitle("Lambda 0 (Time Bin)");
632 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
634 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
636 prfInnerY->Draw("same");
637 TString desc = description;
638 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster shape fit Parameter Lambda0 - P3:");
639 legend->SetBorderSize(1);
640 legend->AddEntry(prfOuterY,chouter);
641 legend->AddEntry(prfInnerY,chinner);
646 void P5Z(TCut cut0, TCut cut1, char * description){
648 // second exponenent as function of z drift
650 TF1 * f1 = new TF1("fdiff","[0]+[1]/[0]*x");
651 f1->SetParameter(1,0.2);
652 f1->SetParameter(0,0.2);
653 compF.DrawXY("p1*0.285","p5","Max>250",cut0,5,20,250,-0,0.2);
654 TH1F * prfInnerY = (TH1F*)compF.fMean->Clone();
655 compF.DrawXY("p1*0.285","p5","Max>250",cut1,5,20,250,-0,0.2);
656 TH1F * prfOuterY = (TH1F*)compF.fMean->Clone();
659 prfOuterY->SetMinimum(0);
660 prfOuterY->SetMaximum(0.15);
661 prfOuterY->SetMarkerStyle(23);
662 prfInnerY->SetMarkerStyle(24);
663 prfOuterY->SetXTitle("Drift length (Time Bin)");
664 prfOuterY->SetYTitle("Lambda1 (Time bin)");
668 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
670 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
672 prfInnerY->Draw("same");
673 TString desc = description;
674 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster shape fit Parameter Lambda1 - P5");
675 legend->SetBorderSize(1);
676 legend->AddEntry(prfOuterY,chouter);
677 legend->AddEntry(prfInnerY,chinner);
681 TCanvas * NoiseSector(TCut cut0, char * description, Int_t maxrow, Int_t maxpad){
683 // draw plots of the noise
685 TCanvas * c = new TCanvas;
689 compP.fTree->Draw("GSigma","GSigma<5"+cut0);
691 Float_t rand = gRandom->Rndm();
693 sprintf(name,"prof%f",rand);
694 TProfile2D * prof= new TProfile2D(name,name,maxrow, 0, maxrow-1, 2*maxpad,-maxpad,maxpad);
696 sprintf(expr,"GSigma:RPad:Row>>%s",name);
697 prof->SetXTitle("Pad row");
698 prof->SetYTitle("Pad number");
699 compP.fTree->Draw(expr,cut0,"profcolz");
701 TString desc = description;
702 TLegend *legend = new TLegend(0.25,0.30,0.85,0.85, desc+"Noise map");