[ROOT] Re: Root GUI

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Oct 12 2004 - 09:19:25 MEST


Varun,

Your problem has nothing to do with the GUI. Simply divide your canvas
into multiple pads. See examples in the tutorials.

Rene Brun

Varun Gopalakrishna wrote:
> 
> Hello rooters,
> 
> I am having a lot of problems with the ROOT GUI..I had a couple of
> questions.
> My requirements are that I need to view multiple plots/histogram at the
> same time in the same window. what do i need to?
> 
> I have tried my hand at the code below which just helps  me to create a
> single frame and add my histogram to it. How do I add more child frames?
> 
> Thanks
> 
> Varun
> 
> //-------------------------------------------------------------------------
> 
> #include <TGClient.h>
>  #include <TCanvas.h>
> #include <TF1.h>
> #include <TRandom.h>
>  #include <TGButton.h>
> #include <TGFrame.h>
> #include <TRootEmbeddedCanvas.h>
> #include <RQ_OBJECT.h>
> 
> class MyMainFrame
> {
> RQ_OBJECT("MyMainFrame")
> 
> private: TGMainFrame *fMain;
>  TRootEmbeddedCanvas *fEcanvas;
> 
> public:
> 
> MyMainFrame(const TGWindow *p,UInt_t w,UInt_t h);
> 
> virtual ~MyMainFrame();
> 
> void DoDraw();
> void drawthis();//*SIGNAL*
> };
> 
> MyMainFrame::MyMainFrame(const TGWindow *p,UInt_t w,UInt_t h)
>  {
> 
> // Create a main frame
> 
>  fMain = new TGMainFrame(p,w,h);
> // Create canvas widjet
> 
>  fEcanvas = new TRootEmbeddedCanvas("Ecanvas",fMain,750,750);
> fMain->AddFrame(fEcanvas, new TGLayoutHints(kLHintsExpandX |
> kLHintsExpandY,10,10,10,1));
> // Create a horizontal frame widget with buttons
> TGHorizontalFrame *hframe = new TGHorizontalFrame(fMain,200,40);
> TGTextButton *draw = new TGTextButton(hframe,"&Last 5 Hours");
> draw->Connect("Clicked()","MyMainFrame",this,"drawthis()");
> hframe->AddFrame(draw, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
> TGTextButton *exit = new TGTextButton(hframe,"&Stop",
> "gApplication->Terminate(0)");
> hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX,5,5,3,4));
> fMain->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX,2,2,2,2));
> 
> TGTextButton *b1 = new TGTextButton(hframe,"&Last 10 Hours");
> b1->Connect("Clicked()","MyMainFrame",this,"drawthis()");
> hframe->AddFrame(b1, new TGLayoutHints(kLHintsCenterX,6,6,4,5));
> TGTextButton *stop = new TGTextButton(hframe,"&Exit",
> "gApplication->Terminate(0)");
> hframe->AddFrame(stop, new TGLayoutHints(kLHintsCenterX,6,6,4,5));
> fMain->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX,2,2,2,2));
> 
> //TGTextButton *exit = new TGTextButton(hframe,"&Exit");
> //exit->SetCommand("gApplication->Terminate()");
> /*fMain->AddFrame(hFrame1,fLayout1);
> fMain->AddFrame(hFrame2,fLayout2);
> fMain->Resize(frame->GetDefaultSize());
> // lays out frames
> fMain->MapSubwindows();
> // maps subwindows
> fMain->HideFrame(hFrame2);
> // hides frame hFrame2
> fMain->MapWindow(); // maps main frame
> 
> // Set a name to the main frame
> 
> fMain->SetWindowName("Simple Example");
> // Map all subwindows of main frame
> fMain->MapSubwindows();
> // Initialize the layout algorithm
> fMain->Resize(fMain->GetDefaultSize());
> // Map main frame
> fMain->MapWindow();
> }
> 
> void MyMainFrame::DoDraw()
> {
> // Draws function graphics in randomly choosen interval
> TF1 *f1 = new TF1("f1","sin(x)/x",0,gRandom->Rndm()*10);
> f1->SetFillColor(19);
>  f1->SetFillStyle(1);
> f1->SetLineWidth(3);
>  f1->Draw();
> TCanvas *fCanvas = fEcanvas->GetCanvas();
>  fCanvas->cd();
>  fCanvas->Update();
>  //printf("in draw this");
>   //drawthis();
> }
> 
> MyMainFrame::~MyMainFrame()
> {
> // Clean up used widgets: frames, buttons, layouthints
> fMain->Cleanup();
> delete fMain;
> }
> 
> void example()
> {
> // Popup the GUI...
>  new MyMainFrame(gClient->GetRoot(),200,200);
> }
> 
> void MyMainFrame::drawthis(){
> 
> {
>   printf(" really inside the method!!!");
> 
> Int_t i =0,pos=8;
> Double_t j=0.0;
> Char_t ch;
> Float_t max=0.0,min=0.0;
> // Create a new canvas.
> /*c1 = new TCanvas("c1","Dynamic Filling Example",200,10,700,500);
>   c1->SetFillColor(42);
>   c1->GetFrame()->SetFillColor(21);
>   c1->GetFrame()->SetBorderSize(6);
>   c1->GetFrame()->SetBorderMode(-1);*/
> 
> // Create a new ROOT binary machine independent file.
> // Note that this file may contain any kind of ROOT objects, histograms,
> // pictures, graphics objects, detector geometries, tracks, events, etc..
> // This file is now becoming the current directory.
>   FILE *fp=fopen("data.dat","r+");
>   if (fp == NULL)
>      printf("Cannot open file\n");
>   TFile *hfile = gROOT->FindObject("hsimple.root"); if (hfile)
> hfile->Close();
>   hfile = new TFile("hsimple.root","RECREATE","Demo ROOT file with
> histograms");
> 
> // Create some histograms, a profile histogram and an ntuple
> hpx    = new TH1F("hpx","This is the px distribution",100,-1,1);
> 
> //  Set canvas/frame attributes (save old attributes)
>   hpx->SetFillColor(48);
> 
>   gBenchmark->Start("hsimple");
> 
> // Fill histograms randomly
> //while(true) {
>   TCanvas *fCanvas = fEcanvas->GetCanvas();
>   fCanvas->cd();
>   while((fscanf(fp,"%lf",&j)!=EOF)){
> 
>       printf("the value read is %lf\n",j);
>     hpx->Fill(j);
>     hpx->Draw();
>     //fCanvas->cd();
>     fCanvas->Modified();
>     fCanvas->Update();
>     // c1->Modified();
>     //c1->Update();
>      gBenchmark->Show("hsimple");
>      gSystem->ProcessEvents();
>      }
>   //gBenchmark->Show("hsimple");
>   pos=ftell(fp);
>   fseek(fp,0,SEEK_END);
>   if (pos!=ftell(fp))break;
>   fseek(fp,pos,SEEK_SET);
> }
> //}
>   fclose(fp);
> //gBenchmark->Show("hsimple");
> 
> // Save all objects in this file
>   hpx->SetFillColor(0);
>   hfile->Write();
>   hpx->SetFillColor(48);
> 
> // Note that the file is automatically close when application terminates
> // or when the file destructor is called.
> }



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET