ツリーを保存したい(TTree::Write

 1#include <TTree.h>
 2#include <TFile.h>
 3
 4TFile *file = new TFile("output.root", "recreate");
 5
 6TTree *tree = new TTree("tree", "Event data");
 7Int_t run = 0;
 8tree->Branch("run", &run, "run/I");
 9
10run = 2025;
11tree->Fill();
12
13tree->Write();
14file->Close();

TTree::WriteメソッドでツリーをROOTファイルに保存します。 ツリーを保存するには、TFileを作成してからツリーを書き込む必要があります。

 1import ROOT
 2
 3file = ROOT.TFile("output.root", "recreate")
 4
 5tree = ROOT.TTree("tree", "Event data")
 6run = ROOT.ctypes.c_int()
 7tree.Branch("run", run, "run/I")
 8
 9run.value = 2025
10tree.Fill()
11
12tree.Write()
13file.Close()

メソッドのシグネチャ

1Int_t Write(const char* name = nullptr,
2            Int_t option = 0,
3            Int_t bufsize = 0)

引数と戻り値

引数:

  • name - オブジェクト名(nullptrの場合は元の名前を使用)

  • option - 書き込みオプション(0=デフォルト、1=上書き)

  • bufsize - バッファサイズ

戻り値:

  • 書き込んだバイト数

ツリーをROOTファイルに保存したい(Write

 1#include <TTree.h>
 2#include <TFile.h>
 3
 4TFile *file = new TFile("data.root", "recreate");
 5
 6TTree *tree = new TTree("tree", "analysis data");
 7Int_t event_id = 0;
 8Float_t energy = 0.0;
 9tree->Branch("event_id", &event_id, "event_id/I");
10tree->Branch("energy", &energy, "energy/F");
11
12for (int i = 0; i < 1000; i++) {
13    event_id = i;
14    energy = 10.0 + i * 0.1;
15    tree->Fill();
16}
17
18tree->Write();
19file->Close();

基本的な保存方法です。TFileを"recreate"モードで作成し、データを入力したあとにWrite()を呼び出します。 最後にClose()でファイルを閉じます。

既存のツリーに追加で保存したい(Write

 1#include <TTree.h>
 2#include <TFile.h>
 3
 4TFile *file = new TFile("data.root", "update");
 5
 6TTree *tree = new TTree("tree2", "additional data");
 7Int_t value = 0;
 8tree->Branch("value", &value, "value/I");
 9
10for (int i = 0; i < 100; i++) {
11    value = i * 2;
12    tree->Fill();
13}
14
15tree->Write();
16file->Close();

既存のファイルに新しいツリーを追加する場合、TFileを"update"モードで開きます。 新しいツリーが既存のツリーと同じ名前の場合、オプション引数で上書きを指定できます。

複数のツリーを保存したい(Write

 1#include <TTree.h>
 2#include <TFile.h>
 3
 4TFile *file = new TFile("multidata.root", "recreate");
 5
 6// 1つ目のツリー
 7TTree *tree1 = new TTree("tree1", "first dataset");
 8Int_t val1 = 0;
 9tree1->Branch("val1", &val1, "val1/I");
10
11for (int i = 0; i < 100; i++) {
12    val1 = i;
13    tree1->Fill();
14}
15tree1->Write();
16
17// 2つ目のツリー
18TTree *tree2 = new TTree("tree2", "second dataset");
19Int_t val2 = 0;
20tree2->Branch("val2", &val2, "val2/I");
21
22for (int i = 0; i < 100; i++) {
23    val2 = i * 2;
24    tree2->Fill();
25}
26tree2->Write();
27
28file->Close();

1つのROOTファイルに複数のツリーを保存する場合、各ツリーに対してWrite()を呼び出します。 各ツリーは異なる名前で識別されます。

関連メソッド

  • Branch - ブランチを作成

  • Fill - イベントを追加

  • TFile - ROOTファイルの操作

参考リンク