Skip to content

Instantly share code, notes, and snippets.

@pn11
Last active July 15, 2020 06:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pn11/49c5b892af86dc8ec79b to your computer and use it in GitHub Desktop.
Save pn11/49c5b892af86dc8ec79b to your computer and use it in GitHub Desktop.
ROOTのTSpectrumクラスを使ってpeak searchをする

ROOTのTSpectrumクラスを使ってpeak searchをする

TSpectrum を使うと簡単にpeak searchができた。

の中のサンプルプログラムを動かしたら大体分かる。

TSpectrumインスタンスの生成

ピークの最大数を適当に決めてTSpecrumのインスタンスをつくる。

Int_t maxpeaks = 10;
TSpectrum *s = new TSpectrum(maxpeaks);

ちなみにこれだとresolutionは1になる。今はピークが探せさえすればいいので気にしない。あとからTSpectum::SetResolutionで変えれる。resolution=1はピーク間の距離は3 sigmaに対応するのだとか。詳しくはTSpectrum::SetResolutionを参照。

ピークを探す

TSpectrum::Searchを使う。h1というTH1Fオブジェクトがあったら、

s->Search(h1, 1, "new");

をするだけでいい。めっちゃ簡単。2つ目の引数はsigma。詳しくはマニュアルって書いてあるのであとで読む。3つ目はオプション。4つ目は省略してるけどthresholdを設定する。ピークサーチが終わるとfNPeaks, fPositionXなどの変数に情報が入ってるので、TSpectrum::GetNPeaks, TSpectrum::GetPositionXとかで取ってくる。

Float_t *xpeaks = s->GetPositionX();

あとはresolutionやthresholdをいじってoptimizeしたり、それはピークじゃないってやつをfitできるかどうかで除けばよいのかな。あとsmoothingしたりも。

コンパイル

コンパイルするときのオプションに、-lSpectrumが必要。これは

root-config --libs

しても出てこないので自分でMakefileに書いておく必要がある(?)。

に書いてあったけどもっと分かりやすいところに書いて欲しい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment