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