ROOT (ヒストグラム解析編)†
この頁の目次†
基本操作†
$ root file1.root # file1.rootを開く
root [] .ls // file1.rootに含まれるヒストグラムなどの一覧を表示する
KEY: TH1F hist1;1 hist1
KEY: TH1F hist2;1 hist2 // 一覧の例。「KEY: 型 名前;1 タイトル」 の順に現れる
:
root [] hist1->Draw(); // "hist1" という名前のヒストグラムを画面に表示する
root [] .q // rootを終了する
新しい1次元ヒストグラムを作成する†
TH1F* hist = new TH1F("name","title", binnum, min, max);
ピークサーチ†
- 通常の使い方
TSpectrum *s = new TSpectrum(3); // "3"は探すピークの数。必要に応じて変える
s->Search(h1, 1, "nobackground");
Double_t *xpeaks = s->GetPositionX();
printf("%f\n",xpeaks[0]);
- 範囲を指定してピークサーチする
- 参考
- ROOTの公式頁では、TSpectrumはレガシーコードだからもう使うな、代わりにRooFitとTUnfoldを使うべし、的なことが書いてあるが、
RooFitとTUnfoldのドキュメントをいくら探してもピークサーチする方法は見つからない。
ヒストグラムを関数でフィットする†
- Gaus関数でフィットする
h->Fit("gaus");
- Gaus + 直線BGでfit
TF1 *f1 = new TF1("f1","[0]*exp(-0.5*((x-[1])/[2])*((x-[1])/[2]))+[3]*x+[4]",2050,2200); // 関数の定義
f1->SetParameter(0,1400); // 初期パラメーターの設定
f1->SetParameter(1,2100);
f1->SetParameter(2,5);
f1->SetParameter(3,1);
f1->SetParameter(4,100);
hist->Fit("f1"); // fit
- 狭い範囲でフィッティングする場合、仕様なのか、フィッティングする範囲を拡大(SetRangeUserなどで表示範囲を調整)していないとうまくフィットしないことがある。