Re: one histogram with changing values in different pads of a canvas

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Sep 21 1999 - 08:24:24 MEST


Hi Judith,
You should use the statements:
   gPad->Modified();
   gPad->Update();
to force the update of a pad/canvas inside a macro. We have several
examples
in the tutorials.
  See also:  http://root.cern.ch/root/HowtoDraw.html

When you want to draw the same object in two different states in the
same
or different pads, use DrawCopy instead of Draw.
  See for example: http://root.cern.ch/root/html/examples/h1draw.C.html

Rene Brun


Judith Katzy wrote:
> 
> Hello rooters,
> 
> during an analysis loop, I want to fill one histogram, draw it, reset
> it and fill it with a different value, draw it again. It works fine,
> if I do it on the command line, but if I try to do it in a macro, it
> draws the histogram with the last value in all of the pads. See macro
> below.
> This behaviour occurs, because TH1::Draw() only attaches a reference to
> the pad. According to the documentation, the effective drawing is
> performed when the canvas receives a signal to be painted, which is after
> a carriage return, in this case at the end of the macro.
> Is there a way to invoke the drawing of the pad before that?
> 
> Another  effect is, that if the histogram is drawn with different values
> in different pads and one invokes TCanvas::Print() all histograms are
> replaced  with the histogram containing the latest value.
> 
> Is there a way to work with just one histogram?
> 
> cheers,
> Judith
> 
> {
> 
> TCanvas *cw;
> if(!cw) cw = new TCanvas("test","test",700,700);
> cw->Clear();
> cw->Divide(1,2);
> TH1D ht("ht","ht",4,0.,3.);
> 
> cw->cd(1);
> ht.Fill(0.);
> ht.Draw();
> 
> cw->cd(2);
> ht.Reset();
> ht.Fill(2.);
> ht.Draw();
> }



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:39 MET