[ROOT] TF2::GetHistogram problem

From: Andre Holzner (Andre.Holzner@cern.ch)
Date: Mon Jul 30 2001 - 15:41:28 MEST


Hello,

I do (in cint):

TF2 *dens_func = new
TF2("two_gaus","1/(2*3.14159265358979323846)*exp(-(x*x+y*y)/2)",-3,3,-3,3);
TH2F *h = (TH2F*)dens_func->GetHistogram();

and I get a segmentation fault after the second statement.
Looking at TH1F::GetHistogram:

TH1 *TF1::GetHistogram() const
{
// return a pointer to the histogram used to vusualize the function
 
   if (fHistogram) return fHistogram;
 
   // may be function has not yet be painted. force a pad update
   gPad->Modified();
   gPad->Update();
   return fHistogram;
}

I guess the problem is, that gPad is a null pointer
(I didn't open any canvas before).

So my question / suggestion:

Why not separating out the code in TF1::Paint (and TF2::Paint etc.)
which creates the histogram and stores it in fHistogram
into a (possibly protected) method CreateHistogram and modify
TF1::GetHistogram to:

TH1 *TF1::GetHistogram() const
{
// return a pointer to the histogram used to vusualize the function
 
   if (fHistogram) return fHistogram;
 
   CreateHistogram();
   return fHistogram;
}


? That way one does not have to create a canvas when one is simply
interested in the histogram filled into the function.

Or is there another function to do this ?

(by the way, I use root 3.01/05 / 9 July 2001 on Linux/i386).

best regards,

André

-- 
------------------+----------------------------------
Andre Holzner     | +41 22 76 76750 
Bureau 32 2-C13   | Building 32     
CERN              | Office 2-C13    
CH-1211 Geneve 23 | http://wwweth.cern.ch/~holzner/



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