4 AddChains(868); // AddChains(runNumber);
5 Select(); // make default selection of data
6 MakePictures("pic868");
18 #include "TProfile2D.h"
24 #include "TParticle.h"
26 #include "TEventList.h"
28 #include "AliTrackReference.h"
29 #include "AliTPCParam.h"
30 #include "AliDetector.h"
32 #include "AliGenInfo.h"
39 void Select(); // make default selection
40 void SelectLaser(); // make default selection for laser tracks
42 void AddChains(Int_t run); // add all the trees with selected run number to the chain
43 void MakePictures(char *dirname); // make default pictures
45 void PRFYZ(TCut cut0, TCut cut1, char * description);
46 void PRFZZ(TCut cut0, TCut cut1, char * description);
47 void P5Z(TCut cut0, TCut cut1, char * description);
48 void P3Z(TCut cut0, TCut cut1, char * description);
49 void ResYZ(TCut cut0, TCut cut1, char * description);
50 void SysYX(TCut cut0, char * description);
51 void SysZX(TCut cut0, char * description);
53 TProfile * ProfileMaxRow(TCut cut0, char *name, Int_t max);
54 TProfile * ProfileMaxPhi(TCut cut0, char *name, Int_t max);
55 TProfile * ProfileMaxZ(TCut cut0, char *name, Int_t max);
56 TProfile * ProfileQRow(TCut cut0, char *name, Int_t max);
57 TProfile * ProfileQPhi(TCut cut0, char *name, Int_t max);
58 TProfile * ProfileQZ(TCut cut0, char *name, Int_t max);
59 TCanvas * NoiseSector(TCut cut0, char * description, Int_t maxrow, Int_t maxpad);
64 TChain chaincl("Tracks","Tracks"); // tpc tracks and clusters
65 TChain chaincl2("Tracks","Tracks"); // tpc tracks and clusters
66 TChain chainSignal("SignalB","SignalB"); // signals over threshold 50
68 TChain chainFit("Fit","Fit"); // fitted signals with fit parameters
69 TChain chainPed("Fit","Fit"); // fitted pedestal with noise
70 TString runDesc="Run "; // run descriptor
72 AliComparisonDraw comp;
73 AliComparisonDraw compCl;
74 AliComparisonDraw compF;
75 AliComparisonDraw compP;
78 // selection of data for analysis
80 TEventList * listTracks = new TEventList("listTracks","listTracks");
81 TEventList * listFitS = new TEventList("listFitS","listFitS");
82 TEventList * listFitPed = new TEventList("listFitPed","listFitPed");
87 void MakePictures(char *dirname){
92 gROOT->SetStyle("Plain");
93 gStyle->SetFillColor(10);
94 gStyle->SetPadColor(10);
95 gStyle->SetCanvasColor(10);
96 gStyle->SetStatColor(10);
98 gStyle->SetPalette(1,0);
99 gStyle->SetNumberContours(50);
101 const Int_t kMinCl = 200;
103 sprintf(chshell,"mkdir %s", dirname);
104 gSystem->Exec(chshell);
105 sprintf(chshell,"cd %s", dirname);
106 gSystem->Exec(chshell);
110 TCanvas c(dirname,dirname);
111 for (Int_t isector=0; isector<36; isector++){
116 sprintf(chshell,"Cl.fX>0&&Cl.fDetector==%d",isector);
117 Int_t ncl = comp.fTree->Draw("Cl.fY",chshell);
118 if (ncl<kMinCl) continue;
119 printf("MakePictures sector %d\n",isector);
127 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
128 sprintf(chcut1,"Cl.fDetector==%d", isector);
129 prof = ProfileQRow(chcut1, chdesc, 70);
130 sprintf(chshell,"%s/qrow_sec%dIROC.eps", dirname,isector);
134 prof = ProfileMaxRow(chcut1, chdesc, 70);
135 sprintf(chshell,"%s/maxrow_sec%dIROC.eps", dirname,isector);
140 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
141 sprintf(chcut1,"Cl.fDetector==%d", isector+36);
142 prof = ProfileQRow(chcut1, chdesc, 100);
143 sprintf(chshell,"%s/qrow_sec%dOROC.eps", dirname,isector);
147 prof = ProfileMaxRow(chcut1, chdesc, 100);
148 sprintf(chshell,"%s/maxrow_sec%dOROC.eps", dirname,isector);
155 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
156 sprintf(chcut1,"Cl.fDetector==%d", isector);
157 prof = ProfileMaxPhi(chcut1, chdesc,20);
158 sprintf(chshell,"%s/qphi_sec%dIROC.eps", dirname,isector);
163 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
164 sprintf(chcut1,"Cl.fDetector==%d", isector+36);
165 prof = ProfileMaxPhi(chcut1, chdesc,20);
166 sprintf(chshell,"%s/qphi_sec%dOROC.eps", dirname,isector);
174 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
175 sprintf(chcut1,"Cl.fDetector==%d", isector);
176 prof = ProfileQZ(chcut1, chdesc,20);
177 sprintf(chshell,"%s/qz_sec%dIROC.eps", dirname,isector);
183 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
184 sprintf(chcut1,"Cl.fDetector==%d", isector+36);
185 prof = ProfileQZ(chcut1, chdesc,20);
186 sprintf(chshell,"%s/qz_sec%dOROC.eps", dirname,isector);
193 sprintf(chdesc,"%s Sector %d IROC",runDesc.Data(), isector);
194 sprintf(chcut1,"Sector==%d", isector);
195 TCanvas *cnoise = NoiseSector(chcut1, chdesc,70,70);
196 sprintf(chshell,"%s/noise_sec%dIROC.eps", dirname,isector);
197 cnoise->Print(chshell);
198 sprintf(chdesc,"%s Sector %d OROC",runDesc.Data(), isector);
199 sprintf(chcut1,"Sector==%d", isector+36);
200 cnoise = NoiseSector(chcut1, chdesc,70,70);
201 sprintf(chshell,"%s/noise_sec%dOROC.eps", dirname,isector);
202 cnoise->Print(chshell);
207 sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector);
208 sprintf(chcut1,"Cl.fDetector==%d||Cl.fDetector==%d", isector, isector+36);
209 SysYX(chcut1,chdesc);
210 sprintf(chshell,"%s/deltayx_sec%d.eps", dirname,isector);
213 SysZX(chcut1,chdesc);
214 sprintf(chshell,"%s/deltazx_sec%d.eps", dirname,isector);
220 if (ncl<500) continue; //not enough statistic
222 sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector);
223 sprintf(chcut1,"Cl.fDetector==%d", isector);
224 sprintf(chcut2,"Cl.fDetector==%d", isector+36);
226 PRFYZ(chcut1, chcut2,chdesc);
227 sprintf(chshell,"%s/prfyz_sec%d.eps", dirname,isector);
229 sprintf(chcut1,"Sector==%d", isector);
230 sprintf(chcut2,"Sector==%d", isector+36);
231 PRFZZ(chcut1, chcut2,chdesc);
232 sprintf(chshell,"%s/prfzz_sec%d.eps", dirname,isector);
237 sprintf(chdesc,"%s Sector %d",runDesc.Data(), isector);
238 sprintf(chcut1,"Cl.fDetector==%d", isector);
239 sprintf(chcut2,"Cl.fDetector==%d", isector+36);
241 ResYZ(chcut1, chcut2,chdesc);
242 sprintf(chshell,"%s/resyz_sec%d.eps", dirname,isector);
253 void AddChains(Int_t run){
255 // add files to the chains + check consistency
267 sprintf(strcl,"ls *%d*/TPCtracks.root > files.txt", run);
268 gSystem->Exec(strcl);
269 in0.open("files.txt");
271 if (sfile.Length()==0) break;
272 printf("%s\n",sfile.Data());
273 TFile f(sfile.Data());
274 TTree * tree = (TTree*)f.Get("Tracks");
277 chaincl.Add(sfile.Data());
282 sprintf(strcl,"ls *%d*/FitSignal.root > files.txt", run);
283 gSystem->Exec(strcl);
284 in1.open("files.txt");
286 if (sfile.Length()==0) break;
287 printf("%s\n",sfile.Data());
288 TFile f(sfile.Data());
289 TTree * tree =(TTree*)f.Get("Fit");
292 chainFit.Add(sfile.Data());
297 sprintf(strcl,"ls *%d*/TPCsignal.root > files.txt", run);
298 gSystem->Exec(strcl);
299 in2.open("files.txt");
301 if (sfile.Length()==0) break;
302 printf("%s\n",sfile.Data());
303 TFile f(sfile.Data());
304 TTree * tree =(TTree*)f.Get("Fit");
307 chainPed.Add(sfile.Data());
309 // chainPed.Add(sfile.Data());
313 sprintf(strcl,"ls *%d*/TPCsignal.root > files.txt", run);
314 gSystem->Exec(strcl);
315 in4.open("files.txt");
317 if (sfile.Length()==0) break;
318 printf("%s\n",sfile.Data());
319 TFile f(sfile.Data());
320 TTree * tree =(TTree*)f.Get("SignalB");
323 chainSignal.Add(sfile.Data());
325 // chainPed.Add(sfile.Data());
330 printf("\n IMPORT REC points");
331 sprintf(strcl,"ls *%d*/*RecPoints* > files.txt", run);
332 gSystem->Exec(strcl);
333 in3.open("files.txt");
335 if (sfile.Length()==0) break;
336 printf("%s\n",sfile.Data());
337 TFile fcl(sfile.Data());
339 sprintf(tname,"%s/%s/TreeR",sfile.Data(),fcl.GetListOfKeys()->At(0)->GetName());
341 // chainPed.Add(sfile.Data());
344 comp.fTree = &chaincl;
345 compF.fTree = &chainFit;
346 compP.fTree = &chainPed;
351 // base cut on the tracks
353 comp.fTree->Draw(">>listTracks","Etrack.fTPCncls>30&&abs(Etrack.fIp.fP[4])<1");
354 comp.fTree->SetEventList(listTracks);
356 compF.fTree->Draw(">>listFitS","p2>0&&p2<5&&p1<900&&p0<10000&&p4<1&&p4>0&&p5<p3&&chi2<150");
357 compF.fTree->SetEventList(listFitS);
362 // base cut on the tracks
364 comp.fTree->Draw(">>listTracks","Etrack.fTPCncls>20&&abs(Etrack.fIp.fP[4])<1&&abs(Etrack.fIp.fP[3])<0.01");
365 comp.fTree->SetEventList(listTracks);
367 compF.fTree->Draw(">>listFitS","p2>0&&p2<5&&p1<900&&p0<10000&&p4<1&&p4>0&&p5<p3&&chi2<150");
368 compF.fTree->SetEventList(listFitS);
370 // make default aliases
373 comp.fTree->SetAlias("lz0","abs(Etrack.fIp.fP[1]-20)<5");
374 comp.fTree->SetAlias("lz1","abs(Etrack.fIp.fP[1]-70)<20");
375 comp.fTree->SetAlias("lz2","abs(Etrack.fIp.fP[1]-150)<20");
376 comp.fTree->SetAlias("lz3","abs(Etrack.fIp.fP[1]-210)<20");
382 void PRFYZ(TCut cut0, TCut cut1, char * description){
384 // plot Pad response function as funtion of drift z
387 TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+(250-x)*[1]*[1])");
388 f1->SetParameter(1,0.2);
389 f1->SetParameter(0,0.2);
390 comp.DrawXY("abs(Cl.fZ)","sqrt(Cl.fSigmaY2)","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut0,5,10,240,-0,1);
391 TH1F * prfInnerY = (TH1F*)comp.fMean->Clone();
393 comp.DrawXY("abs(Cl.fZ)","sqrt(Cl.fSigmaY2)","abs(Track.fTrackPoints.GetAngleY())<0.05","Track.fTrackPoints.fTX>0"+cut1,5,10,240,-0,1);
394 TH1F * prfOuterY = (TH1F*)comp.fMean->Clone();
397 prfOuterY->SetMinimum(0);
398 prfOuterY->SetMarkerStyle(23);
399 prfInnerY->SetMarkerStyle(24);
400 prfOuterY->SetXTitle("Z position (cm)");
401 prfOuterY->SetYTitle("PRF width (cm)");
405 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
407 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
409 prfInnerY->Draw("same");
410 TString desc = description;
411 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}}");
412 legend->SetBorderSize(1);
413 legend->AddEntry(prfOuterY,chouter);
414 legend->AddEntry(prfInnerY,chinner);
420 void PRFZZ(TCut cut0, TCut cut1, char * description){
421 TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+x*[1]*[1])");
422 f1->SetParameter(1,0.2);
423 f1->SetParameter(0,0.2);
424 compF.DrawXY("p1*0.285","p2*0.285","p2>0",cut0,8,20,250,-0,2);
425 TH1F * prfInnerY = (TH1F*)compF.fMean->Clone();
426 compF.DrawXY("p1*0.285","p2*0.285","p2>0",cut1,8,20,250,-0,2);
427 TH1F * prfOuterY = (TH1F*)compF.fMean->Clone();
430 prfOuterY->SetMinimum(0);
431 prfOuterY->SetMarkerStyle(23);
432 prfInnerY->SetMarkerStyle(24);
433 prfOuterY->SetXTitle("Drift length(cm)");
434 prfOuterY->SetYTitle("Z Sigma (cm)");
438 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
440 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
442 prfInnerY->Draw("same");
443 TString desc = description;
444 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}}");
445 legend->SetBorderSize(1);
446 legend->AddEntry(prfOuterY,chouter);
447 legend->AddEntry(prfInnerY,chinner);
452 void ResYZ(TCut cut0, TCut cut1, char * description){
454 // resolution in y coordinate as function of z
456 TF1 * f1 = new TF1("fdiff","sqrt([0]*[0]+(250-x)*[1]*[1])");
457 f1->SetParameter(1,0.2);
458 f1->SetParameter(0,0.2);
459 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);
460 TH1F * prfInnerY = (TH1F*)comp.fRes->Clone();
462 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);
463 TH1F * prfOuterY = (TH1F*)comp.fRes->Clone();
466 prfOuterY->SetMinimum(0);
467 prfOuterY->SetMaximum(0.15);
468 prfOuterY->SetMarkerStyle(23);
469 prfInnerY->SetMarkerStyle(24);
470 prfOuterY->SetXTitle("Z position (cm)");
471 prfOuterY->SetYTitle("Y resolution (cm)");
475 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
477 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
479 prfInnerY->Draw("same");
480 TString desc = description;
481 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}}");
482 legend->SetBorderSize(1);
483 legend->AddEntry(prfOuterY,chouter);
484 legend->AddEntry(prfInnerY,chinner);
488 void SysYX(TCut cut0, char * description){
492 TProfile * profA = new TProfile("profY","profY",70,89,250);
493 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");
494 profA->SetXTitle("Local X (cm)");
495 profA->SetYTitle("Mean #Delta Y (cm)");
496 TLegend *legend = new TLegend(0.55,0.25,0.85,0.30, description);
500 void SysZX(TCut cut0, char * description){
504 TProfile * profA = new TProfile("profZ","profZ",70,89,250);
505 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");
506 profA->SetXTitle("Local X (cm)");
507 profA->SetYTitle("Mean #Delta Z (cm)");
508 TLegend *legend = new TLegend(0.55,0.25,0.85,0.30, description);
512 TProfile * ProfileMaxRow(TCut cut0, char *name, Int_t max){
514 // make profile histrogram of amplitudes
516 TProfile *profA = new TProfile(name,name,max,0,max-1);
518 sprintf(expr,"Cl.fMax:Cl.fRow>>%s",name);
519 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
520 profA->SetXTitle("Pad Row");
521 profA->SetYTitle("Amplitude at maxima (ADC)");
525 TProfile * ProfileMaxPhi(TCut cut0, char *name, Int_t max){
527 // make profile histrogram of amplitudes
529 TProfile *profA = new TProfile(name,name,max,-0.14,0.14);
531 sprintf(expr,"Cl.fMax:Cl.fY/Cl.fX>>%s",name);
532 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
533 profA->SetXTitle("Local #phi(rad)");
534 profA->SetYTitle("Amplitude at maxima (ADC)");
538 TProfile * ProfileQRow(TCut cut0, char *name, Int_t max){
540 // make profile histrogram of amplitudes
542 TProfile *profA = new TProfile(name,name,max,0,max-1);
544 sprintf(expr,"Cl.fQ:Cl.fRow>>%s",name);
545 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
546 profA->SetXTitle("Pad Row");
547 profA->SetYTitle("Total charge(ADC)");
551 TProfile * ProfileQPhi(TCut cut0, char *name, Int_t max){
553 // make profile histrogram of amplitudes
555 TProfile *profA = new TProfile(name,name,max,-0.14,0.14);
557 sprintf(expr,"Cl.fQ:Cl.fY/Cl.fX>>%s",name);
558 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
559 profA->SetXTitle("Local #phi(rad)");
560 profA->SetYTitle("Total charge (ADC)");
564 TProfile * ProfileQZ(TCut cut0, char *name, Int_t max){
566 // make profile histrogram of amplitudes
568 TF1 * fline = new TF1("fline","[0]+[1]*[0]*(250-x)");
569 TF1 * f1 = new TF1("f1","[0]*exp(-[1]*(250-x))");
570 TProfile *profA = new TProfile(name,name,max,0,250);
572 sprintf(expr,"Cl.fQ:abs(Cl.fZ)>>%s",name);
573 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
574 profA->SetXTitle("Z position (cm)");
575 profA->SetYTitle("Amplitude (ADC)");
578 f1->SetParameter(0,fline->GetParameter(0));
579 f1->SetParameter(1,fline->GetParameter(1));
581 sprintf(chc,"Exponential fit params: p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
583 TLegend *legend = new TLegend(0.25,0.12,0.85,0.25, chc);
588 TProfile * ProfileMaxZ(TCut cut0, char *name, Int_t max){
590 // make profile histrogram of amplitudes
592 TF1 * f1 = new TF1("f1","[0]+[1]*[0]*(250-x)");
593 TProfile *profA = new TProfile(name,name,max,0,250);
595 sprintf(expr,"Cl.fMax:abs(Cl.fZ)>>%s",name);
596 comp.fTree->Draw(expr,"abs(Cl.fZ)>0&&Cl.fMax<500"+cut0,"prof");
597 profA->SetXTitle("Z position (cm)");
598 profA->SetYTitle("Amplitude at maxima (ADC)");
601 sprintf(chc,"p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
602 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, chc);
608 void P3Z(TCut cut0, TCut cut1, char * description){
610 // first exponenent as function of z drift
612 TF1 * f1 = new TF1("fdiff","[0]+[1]/[0]*x");
613 f1->SetParameter(1,0.2);
614 f1->SetParameter(0,0.2);
615 compF.DrawXY("p1*0.285","p3","Max>250",cut0,5,20,250,-0,2);
616 TH1F * prfInnerY = (TH1F*)compF.fMean->Clone();
617 compF.DrawXY("p1*0.285","p3","Max>250",cut1,5,20,250,-0,2);
618 TH1F * prfOuterY = (TH1F*)compF.fMean->Clone();
621 prfOuterY->SetMinimum(0);
622 prfOuterY->SetMaximum(1);
623 prfOuterY->SetMarkerStyle(23);
624 prfInnerY->SetMarkerStyle(24);
625 prfOuterY->SetXTitle("Drift length (cm)");
626 prfOuterY->SetYTitle("Lambda 0 (Time Bin)");
630 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
632 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
634 prfInnerY->Draw("same");
635 TString desc = description;
636 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster shape fit Parameter Lambda0 - P3:");
637 legend->SetBorderSize(1);
638 legend->AddEntry(prfOuterY,chouter);
639 legend->AddEntry(prfInnerY,chinner);
644 void P5Z(TCut cut0, TCut cut1, char * description){
646 // second exponenent as function of z drift
648 TF1 * f1 = new TF1("fdiff","[0]+[1]/[0]*x");
649 f1->SetParameter(1,0.2);
650 f1->SetParameter(0,0.2);
651 compF.DrawXY("p1*0.285","p5","Max>250",cut0,5,20,250,-0,0.2);
652 TH1F * prfInnerY = (TH1F*)compF.fMean->Clone();
653 compF.DrawXY("p1*0.285","p5","Max>250",cut1,5,20,250,-0,0.2);
654 TH1F * prfOuterY = (TH1F*)compF.fMean->Clone();
657 prfOuterY->SetMinimum(0);
658 prfOuterY->SetMaximum(0.15);
659 prfOuterY->SetMarkerStyle(23);
660 prfInnerY->SetMarkerStyle(24);
661 prfOuterY->SetXTitle("Drift length (Time Bin)");
662 prfOuterY->SetYTitle("Lambda1 (Time bin)");
666 sprintf(chouter,"Outer sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
668 sprintf(chinner,"Inner sector : p_{0} = %f p_{1} = %f",f1->GetParameter(0),f1->GetParameter(1));
670 prfInnerY->Draw("same");
671 TString desc = description;
672 TLegend *legend = new TLegend(0.25,0.12,0.85,0.35, desc+"TPC cluster shape fit Parameter Lambda1 - P5");
673 legend->SetBorderSize(1);
674 legend->AddEntry(prfOuterY,chouter);
675 legend->AddEntry(prfInnerY,chinner);
679 TCanvas * NoiseSector(TCut cut0, char * description, Int_t maxrow, Int_t maxpad){
681 // draw plots of the noise
683 TCanvas * c = new TCanvas;
687 compP.fTree->Draw("GSigma","GSigma<5"+cut0);
689 Float_t rand = gRandom->Rndm();
691 sprintf(name,"prof%f",rand);
692 TProfile2D * prof= new TProfile2D(name,name,maxrow, 0, maxrow-1, 2*maxpad,-maxpad,maxpad);
694 sprintf(expr,"GSigma:RPad:Row>>%s",name);
695 prof->SetXTitle("Pad row");
696 prof->SetYTitle("Pad number");
697 compP.fTree->Draw(expr,cut0,"profcolz");
699 TString desc = description;
700 TLegend *legend = new TLegend(0.25,0.30,0.85,0.85, desc+"Noise map");