Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【ROOT】累積ヒストグラムを書きたい(cumulative distribution)

(2017年の過去記事)

検索したら、まずGetCumulativeという関数が見つかった

■ 参考 : TH1 Class Reference

けど使い方がよくわからん・・・(アフォですいません・・・)


とりあえず次のサンプルコードを見つけたので動かしてみる
■ 参考 : cumulative.C: illustrate use of the TH1::GetCumulative method


しかし「GetCumulativeという関数が見つからない」というエラーで動かない・・・
試しに /usr/local/root/include/TH1.h を見てみると、確かにGetCumulativeという関数がない・・・・

たぶん、この関数がroot v6.0以降で追加されたので、
自分が使ってるroot v5.34にはないんだろう・・・(ダメじゃん)



しょうがないので今回は次のように、手でbinの中身を数え上げるコードで対応する・・・
(最初にこれを思いついたけど、ROOTならさぞ素晴らしい関数があると思って調べてみたかったんだよ・・・ いや、あったけど・・・・)

TH1D *cdf = new TH1D("cdf","", nbin, min*0.99, max*1.01);
int total = 0;
for (int i=nbin-1;i>0;i--){
total += h1->GetBinContent(i);
for (int k=0;k<total;k++){
cdf->AddBinContent(i);
}
}
普通の累積分布は左から足していくようなものらしい(参考リンクにある方法)
今は右端の領域に興味があったので左から足していく累積分布にんなってるので注意・・・

■ 参考 : Re: [ROOT] Cumulative histogram






ランキング参加中です

↓クリックしていただけると嬉しいです〜