ツリーを保存したい(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()を呼び出します。
各ツリーは異なる名前で識別されます。