部門 > ROOT > フィッティング

フィッティングした関数に名前をつける

hist->Fit("gaus","","",700,1000);  
TF1 *func = hist->GetFunction("gaus"); 
のようにしてもできるはずだけど、なんかよく分からない。
func = new TF1("func","gaus",700,1000);
hist->Fit("func","","",700,1000); 
でやったら動いて、判読性も高いように思うのでこっちのがいいと思う。

フィッティングしたあとにパラメターを取得する

Float_t p[10];
などと宣言しておいて、フィッティングした関数をfuncだとすると、
func->GetParameters(p);
とするとp[0],p[1],p[3],... にパラメターの値が格納される。

フィッティングパラメターの誤差を取得する

色々とやり方はあると思うが、僕が成功したのは以下の方法。2番目のパラメター(つまりp1)の誤差を得たいとして、それをFloat_t errorとすると、
error=func->GetParError(1);
とする。たとえばこれでエネルギースペクトルをガウシアンでフィッティングしたときの誤差を取得し、それをTGraphErrorsにプロットしてエネルギーキャリブレーションをしたりする。

フィッティングした関数の描画方法

Drawしない

デフォルトだと元のグラフにフィッティングの結果も上書きされるので、これを図示したくない場合は、
h.Fit("myFunction", "0");
のようにオプションとして"0"をつける。http://root.cern.ch/root/html/TH1.html#TH1:Fit参照。
"O"(オウ)ではなく"0"(ゼロ)。

いくつもの関数を図示する

このへんよく分かってないんだけど、
h.Fit("myFunction", "+");
のようにオプションをつけると、何回フィティングしても前のが残るっぽい。で、こうしておけばヒストグラムのリストにその関数が登録されるので、上で書いた
TF1 *f = h->GetFunction("myFunc");
っていうのが使える。この方法は、別にフィッティングするわけでもない関数を一緒に描きたいときにも使えると思う(Fitする前にFixParameterしてしまえばいい)。ROOTマニュアル邦訳版p.77 参照。

色んな関数でフィッティング

ダブルガウシアン

gaus(0)ってやると[0]がcontantで[1]がmeanで[2]がsigmaでってなるので、それにgaus(3)っていうのを足せば良い?

パラメーターの表示


フィッティングの確からしさ


参考リンク



(OK)

タグ:

ROOT
最終更新:2012年02月04日 16:22