#ROOTとは
ROOTは欧州合同原子核研究機構CERNが開発している情報処理フレームワーク。高エネルギー物理や宇宙線系では広く使われている。
本家のページ
#対象となる読者
例えば、
-
モンテカルロシミュレーションで、統計を稼ぐために複数のプロセッサを持つ計算機で別々にジョブを走らせ、後からそれを足し合わせようとしている人。
-
複数回の実験で得られたデータの足し合わせをしようとしている人。
を想定している(きれいな並列計算のコードを書けるならその方がいい)。
#前提
今、手元に2つのROOTファイル
datafile1.root
datafile2.root
があり、それぞれが、2次元ヒストグラム(TH2D)h1、h2を持つとしよう。
ここでは、2次元ヒストグラムh1、h2はx軸、y軸ともに
範囲0~1、100bin
であるとする。
これらのヒストグラムを読み込んで、足し合わせたのち、結果を
result.root
に保存するものとする。
#マクロコード
merge_histo.C
int merge_histo(){
//ヒストグラムの読み込み
TFile *f1 = new TFile("datafile1.root");
TH2D* h1=(TH2D*)f1->Get("h1");
TFile *f2 = new TFile("datafile2.root");
TH2D* h2=(TH2D*)f2->Get("h2");
//足し合わせるヒストグラムをTListに格納
TList *l = new TList;
l->Add(h1);
l->Add(h2);
//足し合わせた結果を入れるためのヒストグラム
TH2D* h = new TH2D("h","h", 100, 0.0, 1.0, 100, 0.0, 1.0);
h->Merge(l);
//結果を保存
TFile *file = new TFile("result.root","recreate");
h->Write();
file->Close();
return 0;
}
上ではROOTファイルが2つの場合を示したが、より多くの場合でも可能である。