Re: [ROOT] Updating and saving a canvas

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Sep 18 2002 - 14:10:48 MEST


Hi Alberto,

When you call pCanv->Update(), pCanv looks for all subpads
that have been modified and redraw only these pads.
In your case with a pad inside the canvas, you have to
set the "Modified" bit in the current pad.
Add the line
  pPad->Modified();
before calling pCanv->Update();

Rene Brun

On Wed, 18 Sep 2002, Alberto Garcia Raboso wrote:

> Hi ROOTers,
> 
> The following piece of code tries to:
>    * Create one canvas, and a pad inside.
>    * Draw a graph, update the canvas and save it.
>    * Clear the pad.
>    * Draw another graph, update the canvas and save it.
>    * etc.
>    * clear the screen and free memory
> The problem is that when I call pCanv->Update() for the first time, ROOT
> begins to do it while the script goes on running, so calling several
> times pCanv->SaveAs(...) before finishing the first update of the
> Canvas. Thus some of the files contain an empty canvas, while others
> have a semi-drawn one.
> 
> It seems like updating the canvas uses a thread independent from the one
> that runs the script... is it right? Does anybody know how to make ROOT
> update completely the Canvas before executing the next line of code?
> 
> Thanks in advance,
> 
> Alberto
> 
> THE CODE:
> 
> //
> // Create Canvas and Pad
> //
> TCanvas *pCanv = new TCanvas("pCanv", "" ,200, 100, 1100, 800);
> TPad *pPad = new TPad("pPad", "", 0.03, 0.03, 0.97, 0.97);
> pCanv->SetFillColor(10);
> pCanv->SetGrid();
> 
> //
> // Draw fpScatter
> //
> TH1F *GraphFrame = pPad->DrawFrame(fpCentral->GetPlotLimXMin(),
> 	fpCentral->GetPlotLimYMin(), fpCentral->GetPlotLimXMax(),
> 	fpCentral->GetPlotLimYMax(), fHistTitle.Data());
> GraphFrame->GetXaxis()->SetTitle("#phi_{b} (rad/512)");
> GraphFrame->GetXaxis()->CenterTitle();
> GraphFrame->GetYaxis()->SetTitle("#Delta#phi (rad/4096)");
> GraphFrame->GetYaxis()->CenterTitle();
> fpScatter->SetMarkerStyle(1);
> fpScatter->SetMarkerSize(0.35);
> fpScatter->SetMarkerColor(4);
> fpScatter->Draw("P");
> pCanv->Update();
> pCanv->SaveAs( (const Char_t*) ( TString("Sc") + fFileName +
> 	TString(".ps") ) );
> pPad->Clear();
> 
> //
> // Draw fpHist
> //
> fpHistPt->SetStats(kFALSE);
> fpHistPt->GetXaxis()->SetTitle("p_{t} (GeV/c)");
> fpHistPt->GetXaxis()->CenterTitle();
> fpHistPt->GetYaxis()->SetTitle("Number of hits");
> fpHistPt->GetYaxis()->CenterTitle();
> fpHistPt->Draw();
> pCanv->Update();
> pCanv->SaveAs( (const Char_t*) ( TString("hPt") + fFileName +
> 	TString(".ps") ) );
> pPad->Clear();
> 
> ... more like this ...
> 		
> //
> // Clear screen
> //
> delete pPad;
> delete pCanv;
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Alberto Garcia Raboso
> CERN / EP
> CH-1211 Geneva 23, Switzerland
> Office 40-2B-19 (+41 22 76 71626)
> E-Mail: Alberto.Garcia.Raboso@cern.ch
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Well, farewell, my hobbits! You should come safe to your own
> homes now, and I shall not be kept awake for fear of your
> peril. We will send word when we may, and some of us may yet
> meet at times; but I fear that we shall not all be gathered
> together ever again.
> 
>                       The return of the King. J.R.R. Tolkien
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:10 MET