[ROOT] Displaying TGTransientFrame

From: Chris Milne (phycm@phy.hw.ac.uk)
Date: Wed Aug 29 2001 - 13:32:00 MEST


Hi there,

I have the following code, which should bring up a window with an image whilest 
calculations are happening in the background, then I want the window to close 
once all calculations are finished, the problem is the window opens AFTER the 
calculations, can anyone help?

p.s I am fairly new to ROOT, so that's why I'm using a TPictButton, because I 
can't understand the TGPicture syntax

{
#include <fstream.h>
/////////////////////////////////////////////////
// Reset ROOT and run all calculations if needed
/////////////////////////////////////////////////
  gROOT->Reset("a");
  gROOT->LoadMacro("func.C");
  gROOT->LoadMacro("dialogs.C");
  ifstream data,data2,data3;
  char selection;
  int valid=0;
  
  data.open("output_scp.dat", ios::in);
  if(data.fail())
  {
    gROOT->Macro("calc.C");
    data.open("output_scp.dat", ios::nocreate);
    data2.open("output_ocp.dat", ios::nocreate);
    data3.open("output_linear.dat", ios::nocreate);
  }
  data2.open("output_ocp.dat", ios::in);
  if(data2.fail())
  {
    gROOT->Macro("calc.C");
    data.open("output_ocp.dat", ios::nocreate);
    data2.open("output_scp.dat", ios::nocreate);
    data3.open("output_linear.dat", ios::nocreate);
  }
  data3.open("output_linear.dat", ios::in);
  if(data3.fail())
  {
    gROOT->Macro("calc.C");
    data.open("output_ocp.dat", ios::nocreate);
    data2.open("output_scp.dat", ios::nocreate);
    data3.open("output_linear.dat", ios::nocreate);
  }
  if (!data.fail()&&!data2.fail()&&!data3.fail())
  {
    char reply;
    new ReuseDialog(valid);
    if (valid==1)
    {
      gROOT->Macro("calc.C");
      data.close();
      data2.close();
      data3.close();
      data.open("output_ocp.dat", ios::nocreate);
      data2.open("output_scp.dat", ios::nocreate);
      data3.open("output_linear.dat", ios::nocreate);
    }
  }
/////////////////////////////////////////////////
// Declarations
/////////////////////////////////////////////////
  ifstream param, blue;
  Int_t p,q,i,j;
  Double_t min, max, temp;
  param.open("param.dat", ios::nocreate);
  blue.open("shift.dat", ios::nocreate);
  param >> selection>>p >> q >>temp>>min>>max;
  
// min and max are the rough estimates entered by the user +/- 2.5nm
// next two lines correct these back to the original estimates
  
  min=(1.240472782e3/((1.240472782e3/min)+2.5));
  max=(1.240472782e3/((1.240472782e3/max)-2.5));

  param.close();
  const Int_t x=p,y=q;
  Double_t OD_scp[x][y], OD_ocp[x][y],OD_scp_r[x][y], 
OD_ocp_r[x][y],DTS_scp[x][y],
  DTS_ocp[x][y],DTS_scp_r[x][y], DTS_ocp_r[x][y],energy[x],time[y], weight[x], 
binsenergy[x+1], binstime[y+1]; 
  Double_t 
_bleach_LH_OCP[y],_bleach_LH_SCP[y],_bleach_HH_OCP[y],_bleach_HH_SCP[y],
  	    
OD_scp_ref[x][y],OD_scp_ref_r[x][y],DTS_scp_ref[x][y],DTS_scp_ref_r[x][y],
           
_blueshift_LH_OCP[y],_blueshift_LH_SCP[y],_blueshift_HH_OCP[y],_blueshift_HH_SCP
[y],
	   
HH_blueshift_max=0,LH_blueshift_max=0,HH_bleach_max=0,LH_bleach_max=0,
	   
HH_blueshift_min=0,LH_blueshift_min=0,HH_bleach_min=0,LH_bleach_min=0; 
  TH2F *h;
  TH2F *hs;  
  TH2F *hl; 							
  TH1D *hp; 							
  TH1D *hps; 							
  TH1D *hpl;
  TH1D *hp2;
  TPad *pad2; 
  TPad *pad3;
  TPad *pad4;
  TPad *pad5;
  TPad *pad6;
  TPad *pad7;
  TGraph *Bleach_LH_OCP;
  TGraph *Bleach_HH_OCP;
  TGraph *Bleach_LH_SCP;
  TGraph *Bleach_HH_SCP;
  TGraph *Blueshift_LH_OCP;
  TGraph *Blueshift_HH_OCP;
  TGraph *Blueshift_LH_SCP;
  TGraph *Blueshift_HH_SCP;  
  TSlider *xslider;
  TSlider *xslider2;
  TSlider *xslider3;
  TSlider *xslider4;
  TSlider *xslide;
  TPaveText *point;
  const char *file;
  TControlBar *bar;
  TCanvas *blue_blea;
  TCanvas *MyC;
  TGCheckButton *fC[2];
  TGTransientFrame     *fMain;
  TGPictureButton      *fPictButton;
  TGGroupFrame         *fG1;
  TGLayoutHints        *fL3;

   fMain = new TGTransientFrame(gClient->GetRoot(), fMain, 100, 200);
   fMain->ChangeOptions((fMain->GetOptions() & ~kVerticalFrame) | 
kHorizontalFrame);
   fPictButton = new TGPictureButton(fMain, gClient->GetPicture("loading.xpm"));
   fMain->Resize(fPictButton->GetDefaultWidth(), fMain->GetDefaultHeight());
   fMain->MapSubwindows();
   fMain->SetWindowName("Loading");
   fMain->SetWMSize(300,135);
   fMain->MapWindow();
   fMain->Move(300,100);

/////////////////////////////////////////////////
// Read in Files
/////////////////////////////////////////////////  
  
  for(j=0;j<q;j++)
  {
    for(i=0;i<p;i++)
    {
      data >> 
energy[i]>>time[j]>>OD_scp[i][j];//>>OD_scp_r[i][j]>>DTS_scp[i][j]>>DTS_scp_r[i]
[j];
      data2 >> 
energy[i]>>time[j]>>OD_ocp[i][j];//>>OD_ocp_r[i][j]>>DTS_ocp[i][j]>>DTS_ocp_r[i]
[j];
      data3 >> 
energy[i]>>time[j]>>OD_scp_ref[i][j];//>>OD_scp_ref_r[i][j]>>DTS_scp_ref[i][j]>>
DTS_scp_ref_r[i][j];
      binsenergy[i] = energy[i];
      binstime[j] = time[j];
    }
    blue >> 
time[j]>>_bleach_LH_OCP[j]>>_bleach_LH_SCP[j]>>_bleach_HH_OCP[j]>>_bleach_HH_SCP
[j];
    blue >> 
_blueshift_LH_OCP[j]>>_blueshift_LH_SCP[j]>>_blueshift_HH_OCP[j]>>_blueshift_HH_
SCP[j];
    
    
////////////////////////////////////////////////
// Find max and min values for axis scale
////////////////////////////////////////////////
     
    if (_blueshift_LH_OCP[j]>LH_blueshift_max)
      LH_blueshift_max=_blueshift_LH_OCP[j]; 
    if (_blueshift_LH_SCP[j]>LH_blueshift_max)
      LH_blueshift_max=_blueshift_LH_SCP[j];
    if (_blueshift_HH_OCP[j]>HH_blueshift_max)
      HH_blueshift_max=_blueshift_HH_OCP[j];
    if (_blueshift_HH_SCP[j]>HH_blueshift_max)
      HH_blueshift_max=_blueshift_HH_SCP[j];
      
    if (_bleach_LH_OCP[j]>LH_bleach_max)
      LH_bleach_max=_bleach_LH_OCP[j];
    if (_bleach_LH_SCP[j]>LH_bleach_max)
      LH_bleach_max=_bleach_LH_SCP[j];
    if (_bleach_HH_OCP[j]>HH_bleach_max)
      HH_bleach_max=_bleach_HH_OCP[j];
    if (_bleach_HH_SCP[j]>HH_bleach_max)
      HH_bleach_max=_bleach_HH_SCP[j];
      
    if (_blueshift_LH_OCP[j]<LH_blueshift_min)
      LH_blueshift_min=_blueshift_LH_OCP[j]; 
    if (_blueshift_LH_SCP[j]<LH_blueshift_min)
      LH_blueshift_min=_blueshift_LH_SCP[j];
    if (_blueshift_HH_OCP[j]<LH_blueshift_min)
      HH_blueshift_min=_blueshift_HH_OCP[j];
    if (_blueshift_HH_SCP[j]<LH_blueshift_min)
      HH_blueshift_min=_blueshift_HH_SCP[j];
      
    if (_bleach_LH_OCP[j]<LH_bleach_min)
      LH_bleach_min=_bleach_LH_OCP[j];
    if (_bleach_LH_SCP[j]<LH_bleach_min)
      LH_bleach_min=_bleach_LH_SCP[j];
    if (_bleach_HH_OCP[j]<HH_bleach_min)
      HH_bleach_min=_bleach_HH_OCP[j];
    if (_bleach_HH_SCP[j]<HH_bleach_min)
      HH_bleach_min=_bleach_HH_SCP[j];
  }
// since ROOT uses histograms, you must define the bins if they aren't
// equidistant, the next two set the bin values to the data points 
  
  binsenergy[x]=binsenergy[x-1]+((binsenergy[x-1]-binsenergy[0])/p);
  binstime[y]=binstime[y-1]+((binstime[y-1]-binstime[0])/q);

///////////////////////////////////////////////////
// create contour plots
///////////////////////////////////////////////////

 h = new TH2F("histo1", "", p, binsenergy, q, binstime);
 hs = new TH2F("histo2", "", p, binsenergy, q, binstime);
 hl = new TH2F("histo3", "", p, binsenergy, q, binstime);
  for(j=0; j<q; j++)
    for(i=0;i<p;i++)
    {
      h->Fill(energy[i], time[j], OD_ocp[i][j]);
      hs->Fill(energy[i], time[j], OD_scp[i][j]);
      hl->Fill(energy[i], time[j], OD_scp_ref[i][j]);
    }
  
///////////////////////////////////////////////////
// Generate print Control Panel
///////////////////////////////////////////////////  

  bar = new TControlBar("vertical", "Controls",750,10);
  bar->AddButton("Display Contour Plot","display_OCP_contour()", "Click To 
Display Contour Plot");
  bar->AddButton("Display Blueshift and Bleaching","display_blue_blea()", "Click 
To Display Blueshift and Bleaching");
  bar->AddButton("","","");
  bar->AddButton("Quit",".q", "Click Here To End Your ROOT Session");
  bar->Show();
  print_options();
  data.close();
  blue.close();
}



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:58 MET