Re: MultiDimFit Print method.

From: Rene Brun <brun_at_pcroot.cern.ch>
Date: Tue, 19 Jul 2005 08:39:37 +0200 (MEST)


This is now fixed in the CVS head.
Thanks for this report.

Rene Brun

On Tue, 12 Jul 2005, Christian Holm
Christensen wrote:

> Hi Marcos,
>
> On Mon, 2005-07-11 at 20:48 +0200, Marcos Gimenez wrote:
>> Hello all
>>
>> After making a succesfull fit using the MultiDimFit class, i printed the
>> output function using fit->Print("m"); and i found that there were diferences
>> in the powers shown between fit->Print("m") and fit->Print("c");
>>
>>
>> Using Print("m") (bad results after testing the fit)
>>
>> Parameterization:
>> -----------------
>> Normalised variables:
>> y_0 = 1 + 2 * (x_0 - 1) / (1 - -1)
>> y_1 = 1 + 2 * (x_1 - 1) / (1 - -1)
>>
>> f(y_0, y_1) = 0.6374
>> + 28.69 * y_0
>> - 0.4414 * y_0^3
>> + 0.005439 * y_0 * y_1^3
>> + 14.73 * y_0^4
>> + 19.87 * y_1^5
>> + 0.5973 * y_0^3 * y_1^3
>> - 0.1731 * y_0^5
>> - 22.42 * y_0^6
>> - 17.31 * y_1^7
>> + 0.2964 * y_1
>> - 3.186 * y_1^3
>> - 0.2975 * y_1^4
>>
>>
>>
>> Using Print("c") (good results after testing the fit, same results when using
>> fit->Eval(x) method)
>>
>> Coefficients:
>> -------------
>> # Value Error Powers
>> ---------------------------------------
>> 0 0.6374 0.3363 0 0
>> 1 28.69 1.419 1 0
>> 2 -0.4414 2.462 2 0
>> 3 0.005439 0.8616 1 2
>> 4 14.73 10.56 3 0
>> 5 19.87 75.6 0 4
>> 6 0.5973 1.171 2 2
>> 7 -0.1731 2.452 4 0
>> 8 -22.42 9.288 5 0
>> 9 -17.31 65.37 0 6
>> 10 0.2964 0.63 0 1
>> 11 -3.186 10.77 0 2
>> 12 -0.2975 0.7781 0 3
>>
>> If i look in the TMultiDimFit source and i search what it does when "m" option
>> it is selected there is a part in the code after the switch(fPolyType) that i
>> think it should be using p-1 instead of p, because TMultiDimFit stores
>> power+1.
>>
>> Now
>>
>> for (Int_t j = 0; j < fNVariables; j++) {
>> Int_t p = fPowers[fPowerIndex[i] * fNVariables + j];
>> switch (p) {
>> case 1: break;
>> case 2: cout << " * y_" << j; break;
>> default:
>> switch(fPolyType) {
>> case kLegendre: cout << " * L_" << p << "(y_" << j << ")"; break;
>> case kChebyshev: cout << " * C_" << p << "(y_" << j << ")"; break;
>> default: cout << " * y_" << j << "^" << p; break;
>> }
>> }
>>
>> }
>>
>> I think it should be
>>
>> for (Int_t j = 0; j < fNVariables; j++) {
>> Int_t p = fPowers[fPowerIndex[i] * fNVariables + j];
>> switch (p) {
>> case 1: break;
>> case 2: cout << " * y_" << j; break;
>> default:
>> switch(fPolyType) {
>> case kLegendre: cout << " * L_" << p-1 << "(y_" << j << ")"; break;
>> case kChebyshev: cout << " * C_" << p-1 << "(y_" << j << ")"; break;
>> default: cout << " * y_" << j << "^" << p-1; break;
>> }
>> }
>>
>> }
>>
>
> You are right. TMultiDimFit stores the powers as `p+1', rather than
> `p', so you are right - the Print method, under option `m', one (1)
> should be subtracted from `p' to get the right result.
>
> Rene, will you fix it? Thanks.
>
> Yours,
>
>
Received on Tue Jul 19 2005 - 08:41:12 MEST

This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:10 MET