[ROOT] Root GUI

From: Varun Gopalakrishna (varun@amanda.wisc.edu)
Date: Sat Oct 09 2004 - 10:05:48 MEST


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