Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【ROOT】fittingに関するメモ(fittingのパラメーター, chisquare, ndofを取り出す)

(2015年の過去記事)

そういえばROOTでヒストグラムのfittingをするためのメモ書きがなかったのでまとめておく
だいたい参考リンクを見れば解決すると思う
あとROOTのdocument


■ 参考 : TF1の諸々
: fittingしたあとの処理について、色々とまとめられていた




■ 参考 : TF1の諸々

ここの一番したに便利な関数が載っていたのでメモ

f.FixParameter(1, 5.0); //パラメーターを動かさない
// 1はparameterの通し番号
// そのパラメーターを5.0に固定する
f.SetParLimits(1, 1.0, 3.0); //パラメーターの変化させる範囲を指定できる
1は通し番号、1.0, 3.0はそれぞれ最小値と最大値
これで、今までうまくいかなかったfittingがうまくいった
f5.SetParNames("A", "#theta", "#mu", "#gamma");
みたいな感じで、fittingに用いるパラメーターに名前をつけることができる
ギリシャ文字を使うときはTeXの\の代わりに#を付ける

統計情報の文字サイズを大きくするときは

gStyle->SetStatFontSize(0.06);

上記の
gStyle->SetStatFontSize(0.06);
を打っても箱の大きさを大きくならないことがあった・・・・

gStyle->SetStatFontSize(0.06);
とした後で、箱の大きさを変更しないと文字サイズも変更されないというバグ(?)らしい

//To make sure SetStatFontSize() does work, you need next statement:
gStyle->SetStatW(0.7);

あと、fitting後のパラメーターをROOTの中で取得する方法は、

■ 参考 : fit_parameterの取得

double para0 = f1->GetParameter(0);
double para1 = f1->GetParameter(1);
double para2 = f1->GetParameter(2);
通し番号は0から始まる


chi^2の値、dofの値を取得するには

TF1 *fit = h2->GetFunction("f1");
Double_t chi2 = fit->GetChisquare();
Int_t dof = fit->GetNDF();
h2はヒストグラムの名前, f1はフィットした関数の名前

■ 参考 : TF1 Class Reference




TF1 *f5 = new TF1("f5","[0] * x + [1]");
みたいな感じの関数をフィットに使ったとする


フィット後に、この関数のあるxでの値が知りたいときはEval()を使う

double x=5;
fprintf(stderr, "f(%f) = %f\n", x, f5->Eval(x));
みたいな感じ

しフィットしてないときはパラメーターの値がセットされていないはずなので、
SetParametersで手でセットする必要がある

f5->SetParameters(1.2, 500);
fprintf(stderr, "f(%f) = %f\n", x, f5->Eval(x));



ランキング参加中です

↓クリックしていただけると嬉しいです〜