10 #include "TPavesText.h"
13 #include "TRootBrowser.h"
18 #include "TVirtualFitter.h"
20 #include "TContextMenu.h"
23 #include "BashColor.h"
37 TString SegLetters[6] = {
"A",
"B",
"C",
"D",
"E",
"F"};
39 for(
int i=0 ; i<
fNPadsX-1 ; i++)
44 toto.
PadNmbr = (fNPadsY-j-1)*fNPadsX + i+1;
45 TString aname = SegLetters[i] + Form(
"%d",j+1);
60 for(
int i=0 ; i<= fNPadsX*
fNPadsY ; i++)
82 Color_t c[12] = {kBlue-6, kCyan-6, kGreen-6, kYellow-6 , kRed-6, kMagenta-6, kAzure, kTeal, kSpring, kOrange, kPink, kViolet};
83 for(
int i=0 ; i<48 ; i++) fColor[i] = c[i%12] - (
int)i/12;
88 gStyle->SetTextFont(132);
89 gStyle->SetTitleFont(132,
"t");
90 gStyle->SetTitleFontSize(0.4);
91 gStyle->SetTitleH(0.1);
92 gStyle->SetTitleFont(132,
"XY");
93 gStyle->SetLabelFont(132,
"XY");
94 gStyle->SetLegendFont(132);
95 gStyle->SetStatFont(132);
96 gROOT->UseCurrentStyle();
105 TBrowser *Browser = (TBrowser*)((TList*)gROOT->GetListOfBrowsers())->At(0);
107 if(gROOT->GetListOfCanvases()->FindObject(cname))
109 TRootBrowser *RootBrowser = (TRootBrowser *) Browser->GetBrowserImp();
110 ((TGTab*)RootBrowser->GetTabRight())->SetTab(cname);
111 RootBrowser->GetTabRight()->CloseTab(RootBrowser->GetTabRight()->GetCurrent());
115 cmd = Form(
"new TCanvas(\"%s\",\"%s\")",cname.Data(),ctitle.Data());
117 Browser->ExecPlugin(cname.Data(), 0, cmd.Data()) ;
118 cnew = (TCanvas *)gROOT->GetListOfCanvases()->FindObject(cname.Data());
120 if(!cnew->GetShowToolBar()) cnew->ToggleToolBar();
127 TCanvas *SegmentedCanvas =
NewCanvas(CanvasName,CanvasTitle);
129 if(SegmentedCanvas==0x0)
return SegmentedCanvas;
131 SegmentedCanvas->cd();
134 SegmentedCanvas->SetCrosshair(
true);
136 double ReduceMargin = 0.;
137 double AxisMargin = 0.1;
139 int ColNbr[6] = {2000,2001,2002,2003,2004,2005};
141 if(gROOT->GetColor(ColNbr[0]) == 0x0)
145 CrystCol[0] =
new TColor(ColNbr[0],19./256.,19./256.,21./256.);
146 CrystCol[1] =
new TColor(ColNbr[1],40./256.,45./256.,82./256.);
147 CrystCol[2] =
new TColor(ColNbr[2],43./256.,51./256.,145./256.);
148 CrystCol[3] =
new TColor(ColNbr[3],53./256.,98./256.,183./256.);
149 CrystCol[4] =
new TColor(ColNbr[4],116./256.,66./256.,165./256.);
150 CrystCol[5] =
new TColor(ColNbr[5],168./256.,47./256.,157./256.);
157 SegmentedCanvas->cd(HistPosition.
PadNmbr);
159 gPad->SetTopMargin(ReduceMargin);
160 gPad->SetRightMargin(ReduceMargin);
161 gPad->SetBottomMargin(ReduceMargin);
162 gPad->SetLeftMargin(ReduceMargin);
164 if(HistPosition.
SegName.BeginsWith(
"A")) gPad->SetLeftMargin(AxisMargin);
165 if(HistPosition.
SegName.EndsWith(
"1") || HistPosition.
SegName.EndsWith(
"HG")) gPad->SetBottomMargin(AxisMargin);
167 TPaveText *PavText =
new TPaveText(0.8,0.7,0.92,0.99,
"NDC");
168 PavText->SetTextSize(0.13);
169 PavText->SetTextFont(32);
171 PavText->SetTextColor(ColNbr[Prof]);
172 PavText->SetName(
"InfoPad");
173 PavText->AddText(HistPosition.
SegName);
174 PavText->AddText(Form(
"ID = %d",i));
175 PavText->SetBorderSize(0);
176 PavText->SetFillColor(0);
177 PavText->SetFillStyle(0);
180 gStyle->SetOptTitle(0);
183 double X1 = SegmentedCanvas->cd(
fNPadsX*4)->GetXlowNDC();
184 double Y1 = SegmentedCanvas->cd(
fNPadsX*4)->GetYlowNDC();
186 double X2 = SegmentedCanvas->cd(
fNPadsX)->GetXlowNDC()+SegmentedCanvas->cd(
fNPadsX)->GetWNDC();
187 double Y2 = SegmentedCanvas->cd(
fNPadsX)->GetYlowNDC()+SegmentedCanvas->cd(
fNPadsX)->GetHNDC();
189 gPad->GetCanvas()->cd();
190 TPad *CrystalPad =
new TPad(
"CrystalPadBase",
"CrystalPadBase",X1,Y1,X2,Y2);
193 TPad *PadBidon =
new TPad(
"CrystalPad",
"CrystalPad",0.1,0.1,0.9,0.9);
197 TImage *img = TImage::Open(
"Macros/Pictures/Crystal.png");
200 img->SetConstRatio(1);
201 img->SetImageQuality(TAttImage::kImgBest);
205 CrystalPad->SetEditable(
false);
207 return SegmentedCanvas;
214 Warning(
"ShowCanvas",
"Only %d libraries available, library 0 selected",
fListOfLibrairies->GetSize());
223 TCanvas *CurrentCanvas= 0x0;
227 CurrentCanvas = TVirtualPad::Pad()->GetCanvas();
232 if ( (CurrentCanvas = (TCanvas *)gROOT->GetListOfCanvases()->FindObject(CanvasName)) ) {
235 CurrentCanvas =
NewCanvas(CanvasName,CanvasTitle);
238 if ( CurrentCanvas == 0x0 )
243 CurrentCanvas->SetCrosshair(
true);
247 double ReduceMargin = 0.01;
248 double AxisMargin = 0.05;
250 gPad->SetTopMargin(ReduceMargin);
251 gPad->SetRightMargin(ReduceMargin);
252 gPad->SetBottomMargin(AxisMargin);
253 gPad->SetLeftMargin(AxisMargin);
255 TH1 *h = (TH1*)ListOfHists->At(HistNumber)->Clone();
259 TPaveText *PavText =
new TPaveText(0.8,0.7,1.-ReduceMargin,1.-ReduceMargin,
"NDC");
260 PavText->AddText(HistPosition.
SegName);
261 PavText->AddText(Form(
"Hist_%d",HistNumber));
262 PavText->SetBorderSize(0);
263 PavText->SetFillColor(0);
264 PavText->SetFillStyle(0);
267 gStyle->SetOptTitle(0);
272 CurrentCanvas->cd(HistPosition.
PadNmbr);
276 TList *l = gPad->GetListOfPrimitives();
277 for(
int j=l->GetSize()-1 ; j>=0 ; j--)
279 TObject *o = (TObject*)l->At(j);
280 if(o->InheritsFrom(
"TH1"))
282 LastColor = (int)((TH1*)o)->GetLineColor();
283 if(LastColor == 602) LastColor = 0;
288 TH1 *h = (TH1*)ListOfHists->At(HistNumber);
289 h->SetLineColor(LastColor+1);
290 h->DrawClone(
"same");
295 CurrentCanvas->Paint();
296 CurrentCanvas->Update();
301 TCanvas *CurrentCanvas = gPad->GetCanvas();
302 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
304 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
306 CurrentCanvas->cd(i);
313 TString opt = x_y_xy;
317 TList *ListOfPrimitives = (TList*) gPad->GetListOfPrimitives();
319 if(ListOfPrimitives->GetSize())
321 TIter iter(ListOfPrimitives);
324 while( (o = iter()) )
326 if(o->InheritsFrom(
"TH1")||o->InheritsFrom(
"TH2")||o->InheritsFrom(
"TH3")||o->InheritsFrom(
"MyGraph"))
328 if(o->InheritsFrom(
"MyGraph"))
330 TObject *obj = ((
MyGraph*)o)->GetGraph();
331 if(obj->InheritsFrom(
"TGraph")) h = ((TGraph*)obj)->GetHistogram();
342 if(opt.Contains(
"x")) h->GetXaxis()->UnZoom();
343 if(opt.Contains(
"y")) h->GetYaxis()->UnZoom();
344 if(opt.Contains(
"z")) h->GetZaxis()->UnZoom();
353 TCanvas *CurrentCanvas = gPad->GetCanvas();
354 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
356 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
358 CurrentCanvas->cd(i);
359 gPad->SetLogx(!gPad->GetLogx());
366 CurrentCanvas->Update();
367 CurrentCanvas->Modified();
372 TCanvas *CurrentCanvas = gPad->GetCanvas();
373 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
375 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
377 CurrentCanvas->cd(i);
378 gPad->SetLogy(!gPad->GetLogy());
385 CurrentCanvas->Update();
386 CurrentCanvas->Modified();
391 TCanvas *CurrentCanvas = gPad->GetCanvas();
392 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
394 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
396 CurrentCanvas->cd(i);
397 gPad->SetLogz(!gPad->GetLogz());
404 CurrentCanvas->Update();
405 CurrentCanvas->Modified();
414 TCanvas *CurrentCanvas = gPad->GetCanvas();
415 if(!CurrentCanvas)
return;
417 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
419 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
421 CurrentCanvas->cd(i);
423 TList *ListOfPrimitives = (TList*) gPad->GetListOfPrimitives();
425 if(ListOfPrimitives->GetSize())
427 TIter iter(ListOfPrimitives);
431 while( (o = iter()) )
433 if(o->InheritsFrom(
"TH1")||o->InheritsFrom(
"TH2")||o->InheritsFrom(
"TH3")||o->InheritsFrom(
"MyGraph"))
435 if(o->InheritsFrom(
"MyGraph"))
437 TObject *obj = ((
MyGraph*)o)->GetGraph();
438 if(obj->InheritsFrom(
"TGraph"))
440 TGraph *g = ((
MyGraph*)o)->GetGraph();
441 if(opt.Contains(
"x")) g->GetXaxis()->SetLimits(min,max);
442 h = g->GetHistogram();
454 if(opt.Contains(
"x"))h->GetXaxis()->SetRangeUser(min,max);
455 if(opt.Contains(
"y"))h->GetYaxis()->SetRangeUser(min,max);
456 if(opt.Contains(
"z"))h->GetZaxis()->SetRangeUser(min,max);
460 CurrentCanvas->Paint();
461 CurrentCanvas->Update();
473 TCanvas *CurrentCanvas = gPad->GetCanvas();
474 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
476 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
478 CurrentCanvas->cd(i);
480 TList *ListOfPrimitives = (TList*) gPad->GetListOfPrimitives();
482 if(ListOfPrimitives->GetSize())
484 TIter iter(ListOfPrimitives);
487 while( (o = iter()) )
489 if(o->InheritsFrom(
"TH1")||o->InheritsFrom(
"MyGraph"))
491 if(o->InheritsFrom(
"MyGraph"))
493 TObject *obj = ((
MyGraph*)o)->GetGraph();
494 if(obj->InheritsFrom(
"TGraph")) h = ((TGraph*)obj)->GetHistogram();
499 int LastBin = h->FindLastBinAbove(1);
500 if(h->GetBinLowEdge(LastBin)>BinMax) BinMax = LastBin;
501 if(h->GetMaximum()>ymax) ymax = h->GetMaximum();
507 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
509 CurrentCanvas->cd(i);
511 TList *ListOfPrimitives = (TList*) gPad->GetListOfPrimitives();
513 if(ListOfPrimitives->GetSize())
515 TIter iter(ListOfPrimitives);
518 while( (o = iter()) )
520 if(o->InheritsFrom(
"TH1")||o->InheritsFrom(
"MyGraph"))
522 if(o->InheritsFrom(
"MyGraph"))
524 TObject *obj = ((
MyGraph*)o)->GetGraph();
525 if(obj->InheritsFrom(
"TGraph")) h = ((TGraph*)obj)->GetHistogram();
538 if(opt.Contains(
"x")) h->GetXaxis()->SetRange(1,BinMax);
540 if(opt.Contains(
"y"))
552 CurrentCanvas->Update();
553 CurrentCanvas->Modified();
562 TCanvas *CurrentCanvas = gPad->GetCanvas();
563 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
567 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
569 CurrentCanvas->cd(i);
574 CurrentCanvas->Update();
575 CurrentCanvas->Modified();
587 TH1 *FirstHist = 0x0;
589 TList *ListOfPrimitives = (TList*) gPad->GetListOfPrimitives();
591 if(ListOfPrimitives->GetSize())
593 TIter iter(ListOfPrimitives);
596 while( (o = iter()) )
598 if(o->InheritsFrom(
"TH1")||o->InheritsFrom(
"MyGraph"))
600 if(o->InheritsFrom(
"MyGraph"))
602 TObject *obj = ((
MyGraph*)o)->GetGraph();
603 if(obj->InheritsFrom(
"TGraph")) h = ((TGraph*)obj)->GetHistogram();
608 if(FirstHist==0x0)FirstHist = h;
609 int LastBin = h->FindLastBinAbove(1);
610 if(h->GetBinLowEdge(LastBin)>BinMax) BinMax = LastBin;
611 if(h->GetMaximum()>ymax) ymax = h->GetMaximum();
615 if(FirstHist==0x0)
return;
619 if(opt.Contains(
"x"))
621 FirstHist->GetXaxis()->SetRange(1,BinMax);
624 if(opt.Contains(
"y"))
627 FirstHist->SetMaximum(ymax);
638 int ClusterNbr = (int)ID/3;
639 TString Letter[3] = {
"A",
"B",
"C"};
641 TString name = Form(
"%.2d",ClusterNbr) + Letter[ID%3];
648 LoupeOnPad *loupe = (
LoupeOnPad*) gPad->GetCanvas()->GetListOfPrimitives()->FindObject(
"LoupeOnPad");
668 TMethod* m = obj->IsA()->GetMethodAllAny(method);
672 obj->Warning(
"OpenContextMenu",
"%s is not a method of %s",method,obj->ClassName());
675 TString Method=alt_method_name;
676 if(Method==
"") Method=method;
677 TContextMenu * cm =
new TContextMenu(Method, Form(
"%s::%s",obj->ClassName(),Method.Data()));
688 ListOfGraphs =
new TList();
689 ListOfGraphs->SetOwner(
false);
691 TString Name = GetName();
692 Name.Remove(Name.Length()-3);
694 TCanvas *CurrentCanvas = gPad->GetCanvas();
695 int NbrOfPadInCurrentCanvas = CurrentCanvas->GetListOfPrimitives()->GetSize();
697 for(
int i=1 ; i<= NbrOfPadInCurrentCanvas ; i++)
700 CurrentCanvas->cd(i);
702 TList *ListOfPrimitives = (TList*) gPad->GetListOfPrimitives();
704 if(ListOfPrimitives->GetSize())
706 TIter iter(ListOfPrimitives);
708 while( (o = iter()) )
710 if(o->InheritsFrom(
"MyGraph")&&((TString)o->GetName()).BeginsWith(Name)) ListOfGraphs->Add(o);
721 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
725 MyG->
GetGraph()->SetFillColor(fcolor);
727 gPad->GetCanvas()->Paint();
728 gPad->GetCanvas()->Update();
734 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
738 MyG->
GetGraph()->SetFillStyle(fstyle);
740 gPad->GetCanvas()->Paint();
741 gPad->GetCanvas()->Update();
747 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
751 MyG->
GetGraph()->SetLineColor(lcolor);
753 gPad->GetCanvas()->Paint();
754 gPad->GetCanvas()->Update();
760 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
764 MyG->
GetGraph()->SetLineStyle(lstyle);
766 gPad->GetCanvas()->Paint();
767 gPad->GetCanvas()->Update();
773 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
777 MyG->
GetGraph()->SetLineWidth(lwidth);
779 gPad->GetCanvas()->Paint();
780 gPad->GetCanvas()->Update();
786 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
790 MyG->
GetGraph()->SetMarkerColor(mcolor);
792 gPad->GetCanvas()->Paint();
793 gPad->GetCanvas()->Update();
799 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
803 MyG->
GetGraph()->SetMarkerSize(msize);
805 gPad->GetCanvas()->Paint();
806 gPad->GetCanvas()->Update();
812 for(
int i=0 ; i<ListOfGraphs->GetSize() ; i++)
816 MyG->
GetGraph()->SetMarkerStyle(mstyle);
818 gPad->GetCanvas()->Paint();
819 gPad->GetCanvas()->Update();
void SetMSi(Size_t msize)
TString GetCrystalNameFromID(int ID)
TList * GetListOfGraphs()
virtual void SetMarkerSize(Size_t msize=1)
virtual void ShowHist(int HistNumber, int LibraryNumber=1, bool same=false)
vector< PadPos > fHistPositionList
virtual void UnzoomSelected(const char *x_y_xy="xy")
static const UShort_t kNbCores
virtual void SetLineColor(Color_t lcolor)
void SetFC(Color_t fcolor)
TCanvas * NewCanvas(TString cname, TString ctitle)
virtual void SetMarkerStyle(Style_t mstyle=1)
CanvasVisu(const char *name, const char *title)
header file for CrystalFrame.cpp
void SetLW(Width_t lwidth)
virtual void SetLineWidth(Width_t lwidth)
virtual void FullRangePerPad(const char *x_y="xy")
TList * fListOfLibrairies
virtual void SetRange(double min, double max, const char *x_y="x")
virtual void FullRangeAll(const char *x_y="xy")
LoupOnPad, a class to Loupe on a Pad in a Canvas with many pads in it.
static Bool_t OpenContextMenu(const char *method, TObject *obj, const char *alt_method_name="")
virtual void SetFillColor(Color_t fcolor)
TCanvas * BuildSegmentedCanvas(TString CanvasName, TString CanvasTitle)
void SetMSt(Style_t mstyle)
virtual void FullRangeSelectedPad(const char *x_y="xy")
void SetLoupeActive(Bool_t b=true)
Enable/Disable the Loupe on the pad.
virtual void SetFillStyle(Style_t fstyle)
void SetMC(Color_t mcolor)
virtual void Unzoom(const char *x_y_xy="xy")
virtual void SetLineStyle(Style_t lstyle)
void SetLS(Style_t lstyle)
void SetLC(Color_t lcolor)
virtual void SetMarkerColor(Color_t mcolor=1)
static const UShort_t kNbSegments
vector< HistPos > fPadPositionList
void SetFS(Style_t fstyle)
virtual void SetLoupe(bool loupeon=true)