LoginSignup
3
4

More than 5 years have passed since last update.

複数のROOTファイル内のヒストグラムを足し合わせて保存する

Last updated at Posted at 2017-11-05

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つの場合を示したが、より多くの場合でも可能である。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4