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

「部門/ROOT/フィッティング」の編集履歴(バックアップ)一覧に戻る

部門/ROOT/フィッティング - (2012/01/25 (水) 22:04:38) のソース

*フィッティングした関数に名前をつける
#highlight(c++){{hist->Fit("gaus","","",700,1000);  
TF1 *func = hist->GetFunction("gaus"); }}
のようにしてもできるはずだけど、なんかよく分からない。
#highlight(C){{func = new TF1("func","gaus",700,1000);
hist->Fit("func","","",700,1000); }}
でやったら動いて、判読性も高いように思うのでこっちのがいいと思う。

*フィッティングしたあとにパラメターを取得する
#highlight(C){{Float_t p[10];}}
などと宣言しておいて、フィッティングした関数をfuncだとすると、
#highlight(C){{func->GetParameters(p);}}
とするとp[0],p[1],p[3],... にパラメターの値が格納される。
**フィッティングパラメターの誤差を取得する
色々とやり方はあると思うが、僕が成功したのは以下の方法。2番目のパラメター(つまりp1)の誤差を得たいとして、それをFloat_t errorとすると、
#highlight(C){{error=func->GetParError(1);}}
とする。たとえばこれでエネルギースペクトルをガウシアンでフィッティングしたときの誤差を取得し、それを[[TGraphErrors>http://www47.atwiki.jp/cscd/pages/122.html]]にプロットしてエネルギーキャリブレーションをしたりする。

*フィッティングした関数の描画方法
**Drawしない
デフォルトだと元のグラフにフィッティングの結果も上書きされるので、これを図示したくない場合は、
#highlight(c){{h.Fit("myFunction", "0");}}
のようにオプションとして"0"をつける。http://root.cern.ch/root/html/TH1.html#TH1:Fit参照。
"O"(オウ)ではなく"0"(ゼロ)。
**いくつもの関数を図示する
このへんよく分かってないんだけど、
#highlight(c){{h.Fit("myFunction", "+");}}
のようにオプションをつけると、何回フィティングしても前のが残るっぽい。で、こうしておけばヒストグラムのリストにその関数が登録されるので、上で書いた
#highlight(c++){{TF1 *f = h->GetFunction("myFunc");}}
っていうのが使える。この方法は、別にフィッティングするわけでもない関数を一緒に描きたいときにも使えると思う(Fitする前にFixParameterしてしまえばいい)。[[ROOTマニュアル邦訳版>http://www.dw-sapporo.co.jp/technology/658766f830d530a130a430eb7f6e304d5834/root_usersguide_jp/5FittingHistgram.pdf]]p.77 参照。

*色んな関数でフィッティング
**ダブルガウシアン
http://www.slac.stanford.edu/BFROOT/www/Computing/Offline/ROOT/info/dG.C

*パラメーターの表示
TStyle::SetOptFitで変える。
http://root.cern.ch/root/html/TStyle.html#TStyle:SetOptFit

*フィッティングの確からしさ
-[[部門/ROOT/フィッティング]]

*参考リンク
-http://root.cern.ch/root/html/TH1.html#TH1:Fit
-[[ROOTでフィッティング - HongoWiki>http://www-utheal.phys.s.u-tokyo.ac.jp/~yuasa/wiki/index.php/ROOT%E3%81%A7%E3%83%95%E3%82%A3%E3%83%83%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0]]


#right(){(OK)}