イベントを追加したい(TTree::Fill

 1#include <TTree.h>
 2
 3TTree *tree = new TTree("tree", "Event data");
 4Int_t value = 0;
 5tree->Branch("value", &value, "value/I");
 6
 7// 単一のイベントを追加
 8tree->Fill();
 9
10// ループでイベントを追加
11for (int i = 0; i < 100; i++) {
12    value = i;
13    tree->Fill();
14}

TTree::Fillメソッドでブランチに設定した変数の現在値をイベントレコードとして追加します。 ブランチが複数ある場合、すべてのブランチの値が同時に1つのエントリとして記録されます。

 1import ROOT
 2
 3tree = ROOT.TTree("tree", "Event data")
 4value = ROOT.std.vector('int')()
 5tree.Branch("value", value)
 6
 7# 単一のイベントを追加
 8tree.Fill()
 9
10# ループでイベントを追加
11for i in range(100):
12    value.clear()
13    value.push_back(i)
14    tree.Fill()

メソッドのシグネチャ

1Int_t Fill()

引数と戻り値

戻り値:

  • ツリーに追加されたエントリ数(通常は正の値)

単一のイベントを追加したい(Fill

1#include <TTree.h>
2
3TTree *tree = new TTree("tree", "simple event");
4Int_t count = 0;
5tree->Branch("count", &count, "count/I");
6
7count = 42;
8tree->Fill();

ブランチに値を設定してからFill()を呼び出します。 1回の呼び出しで1つのイベントレコードが追加されます。

複数のブランチにデータを追加したい(Fill

 1#include <TTree.h>
 2
 3TTree *tree = new TTree("tree", "multi-branch event");
 4Int_t run = 0;
 5Float_t energy = 0.0;
 6tree->Branch("run", &run, "run/I");
 7tree->Branch("energy", &energy, "energy/F");
 8
 9// イベントループ
10for (int evt = 0; evt < 1000; evt++) {
11    run = 2025;
12    energy = 100.5 + evt * 0.1;
13    tree->Fill();
14}

複数のブランチを定義すると、Fill()は全ブランチの現在値を同時に記録します。 各ブランチのデータが1つのエントリとして関連付けられ、あとでデータ分析時に対応するデータにアクセスできます。

関連メソッド

  • Branch - ブランチを作成

  • Write - ツリーをファイルに保存

  • GetEntries - ツリーのエントリ数を取得

参考リンク