I’m getting some strange behaviour with TGraph->Eval() where the function does not appear to be interpolating properly. Code showing the problem is as follows:
{
Float_t dp[12];
Float_t val[12];
val[0] = 2.33 * 199 * 1.078e10;
val[1] = 2.61 * 201 * 1.022e10;
val[2] = 2.61 * 189 * 1.060e10;
val[3] = 2.34 * 235 * 8.965e9;
val[4] = 2.21 * 332 * 8.941e9;
val[5] = 2.68 * 186 * 8.987e9;
val[6] = 2.00 * 516 * 9.320e9;
val[7] = 2.13 * 593 * 9.545e9;
val[8] = 2.10 * 677 * 9.984e9;
val[9] = 2.15 * 560 * 8.959e9;
val[10] = 2.15 * 650 * 1.021e10;
val[11] = 1.93 * 799 * 1.073e10;
dp[0] = 18.1;
dp[1] = 15.97;
dp[2] = 13.15;
dp[3] = 10.70;
dp[4] = 8.36;
dp[5] = 6.08;
dp[6] = 3.59;
dp[7] = 1.71;
dp[8] = -0.35;
dp[9] = -2.20;
dp[10] = -4.14;
dp[11] = -5.81;
Float_t biggest = val[0];
for( Int_t i = 0; i < 11; i++ )
{
if (val[i+1] > val[i] ) biggest = val[i+1];
}
for( Int_t j = 0; j < 12; j++)
{
val[j] = val[j] / biggest;
}
TGraph *gr = new TGraph(12,dp,val);
Double_t ev;
for ( Int_t k = -5; k < 18; k++)
{
ev = gr->Eval(k,0,"S");
cout << k << " " << ev << endl;
}
gr->SetMarkerStyle(22);
gr->Draw("APC");
}
The results I get when running the code or ROOT 4.00/08 are
-5 -7.04742
-4 -6.0668
-3 -5.17638
-2 -4.37185
-1 -3.64891
0 -3.00327
1 -2.43063
2 -1.92667
3 -1.48712
4 -1.10765
5 -0.783984
6 -0.51181
7 -0.28683
8 -0.104744
9 0.0387482
10 0.147946
11 0.227149
12 0.280659
13 0.312775
14 0.327796
15 0.330024
16 0.323758
17 0.313299
Any ideas why it is doing this?
Thanks
Ewan