Hi Maksim,
Thanks for reporting this problem with TF3. Now fixed in CVS.
Rene Brun
On Thu, 7 Aug
2003, Maksim A. Nikulin wrote:
> Hi,
> I found that the TF3 class constructor
> TF3::TF3(const char* name, const char* formula, Double_t xmin = 0,
> Double_t xmax = 1, Double_t ymin = 0, Double_t ymax = 1, Double_t zmin =
> 0, Double_t zmax = 1)
> doesn't work in root-3.05.07:
>
> <root-session>
> root [0] f3 = new TF3("f3", "x + y + z")
> Error in <TF1::TF1>: function: f3/x + y + z has 3 parameters instead of 1
> (class TF3*)0x88f7a18
> root [1] f3_2 = new TF3("f3_2", "x + y")
> Error in <TF1::TF1>: function: f3_2/x + y has 2 parameters instead of 1
> Error in <TF3::TF3>: function: f3_2/x + y has 2 parameters instead of 3
> (class TF3*)0x88fc040root [2] f3_1 = new TF3("f3_1", "x")
> Error in <TF3::TF3>: function: f3_1/x has 1 parameters instead of 3
> (class TF3*)0x88ee978root [3] f3_0 = new TF3("f3_0", "1")
> Error in <TF3::TF3>: function: f3_0/1 has 1 parameters instead of 3
> (class TF3*)0x88fc6a0
> </root-session>
>
> There is a note in the file
> http://root.cern.ch/root/html/examples/V3.05.txt.html
> possible related to the problem
>
> 2003-07-08 08:56 brun
>
> * hist/src/: TF1.cxx, TF2.cxx, TF3.cxx:
> Add protections in the constructors with a formula in case the dimension
> of the formula does not match the class. The object is declared Zombie.
>
> I think TF1 design conflicts with the TF1 <- TF2 <- TF3 inheritance
> sequence. TF1 depends on relation between xmin and xmax:
>
> <file name="hist/src/TF1.cxx">
> // ...
> // line 156
> TF1::TF1(const char *name,const char *formula, Double_t xmin, Double_t xmax)
> :TFormula(name,formula), TAttLine(), TAttFill(), TAttMarker()
> // ...
> // line 171
> if (xmin < xmax ) {
> fXmin = xmin;
> fXmax = xmax;
> } else {
> fXmin = xmax; //when called from TF2,TF3
> fXmax = xmin;
> }
> // ...
> </file>
>
> First xmin <-> xmax exchange:
>
> <file name="hist/src/TF2.cxx">
> // ...
> // line 52
> TF2::TF2(const char *name,const char *formula, Double_t xmin, Double_t
> xmax, Double_t ymin, Double_t ymax)
> :TF1(name,formula,xmax,xmin)
> // ...
> </file>
>
> Second swap xmin and xmax:
>
> <file name="hist/src/TF3.cxx">
> // ...
> // line 38
> TF3::TF3(const char *name,const char *formula, Double_t xmin, Double_t
> xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax)
> :TF2(name,formula,xmax,xmin,ymin,ymax)
> // ...
> </file>
>
> Now xmin < xmax again. The TF1 constructor emits a warning message
> because it arguments look like in 1D case.
>
> Maksim Nikulin
>
>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:14 MET