2008年2月16日土曜日

ROOT histogramの操作(1)

treeと並ぶROOTで最も良く使用されるclassが、ヒストグラムである。

全てのヒストグラムクラスはTH1クラスを継承して作成されている。
1次元ヒストグラムとして
ビンの値が整数値で
TH1C//127まで
TH1S//32767まで
TH1I//2147483647まで
浮動小数点数で
TH1F//単精度、7bit
TH1D//倍精度、14bit
という風になっている。2,3次元ヒストグラムに関しても同様。

作成は
TH1D *hist=new TH1D("hist","title",number,min,max);
の形で作るのが一般的。min~maxの区間を等間隔にnumber個のビンに区切ったヒストグラムが作成される。ビンにはそれぞれ番号が付けられていて、一番下側のビン(min,min+(max-min)/number)は1番、以後順にあがっていって最後のビン(max-(max-min)/number,max)はnumber番になる。0番は下限値以下の値、number+1番が上限値以上の値となる。

ビン幅を等幅以外にしたい時は、
TH1D *hist=new TH1D("hist","title",number,xbins);
とする。xbinsは各々のビンの下限値を示す配列へのポインタである。例えば、
1~2、2~4、4~8、8~16というビンでヒストグラムを作成したければ、
double xbins[]={1,2,4,8,16};
TH1D *hist=new TH1D("hist","title",4,xbins);
という風にする。ここで、numberには4が入るのに対して、xbinsは5つの値が必要なことに注意する。

値をヒストグラムに格納するには、
hist->Fill(val);
とする。

ビンの値を直接変更したい場合は、
hist->SetBinContent(num,val);
とすると、num番目のビンにvalがセットされる。逆にビンの値を取り出したい時は、
double val=hist->SetBinContent(num);
のようにするとvalにnum番目のビンの値が返ってくる。

ヒストグラムの最大、最小値のビンを探すには
hist->GetMaximumBin();
hist->GetMinimumBin();
を使う。最大値、最小値を求めるには、
hist->GetBinContent(hist->GetMaximumBin());
hist->GetBinContent(hist->GetMinimumBin());
のようにする。

0 件のコメント: