(2015年の過去記事)
そういえばROOTでヒストグラムのfittingをするためのメモ書きがなかったのでまとめておく
だいたい参考リンクを見れば解決すると思う
あとROOTのdocument
■ 参考 : TF1の諸々
: fittingしたあとの処理について、色々とまとめられていた
ここの一番したに便利な関数が載っていたのでメモ
f.FixParameter(1, 5.0); //パラメーターを動かさない
// 1はparameterの通し番号
// そのパラメーターを5.0に固定する
f.SetParLimits(1, 1.0, 3.0); //パラメーターの変化させる範囲を指定できる
1は通し番号、1.0, 3.0はそれぞれ最小値と最大値
これで、今までうまくいかなかったfittingがうまくいった// 1はparameterの通し番号
// そのパラメーターを5.0に固定する
f.SetParLimits(1, 1.0, 3.0); //パラメーターの変化させる範囲を指定できる
1は通し番号、1.0, 3.0はそれぞれ最小値と最大値
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);
gStyle->SetStatW(0.7);
あと、fitting後のパラメーターをROOTの中で取得する方法は、
double para0 = f1->GetParameter(0);
double para1 = f1->GetParameter(1);
double para2 = f1->GetParameter(2);
通し番号は0から始まるdouble para1 = f1->GetParameter(1);
double para2 = f1->GetParameter(2);
chi^2の値、dofの値を取得するには
TF1 *fit = h2->GetFunction("f1");
Double_t chi2 = fit->GetChisquare();
Int_t dof = fit->GetNDF();
h2はヒストグラムの名前, f1はフィットした関数の名前Double_t chi2 = fit->GetChisquare();
Int_t dof = fit->GetNDF();
TF1 *f5 = new TF1("f5","[0] * x + [1]");
みたいな感じの関数をフィットに使ったとするフィット後に、この関数のあるxでの値が知りたいときはEval()を使う
double x=5;
fprintf(stderr, "f(%f) = %f\n", x, f5->Eval(x));
みたいな感じ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));
fprintf(stderr, "f(%f) = %f\n", x, f5->Eval(x));
ランキング参加中です
↓クリックしていただけると嬉しいです〜