イベントを処理したい(TTree::GetEntry

 1#include <TTree.h>
 2#include <TFile.h>
 3#include <iostream>
 4
 5TFile *file = TFile::Open("data.root");
 6TTree *tree = (TTree *)file->Get("tree");
 7
 8Float_t x;
 9tree->SetBranchAddress("x", &x);
10
11// エントリー0を取得
12tree->GetEntry(0);
13std::cout << "Entry 0: x = " << x << std::endl;

TTree::GetEntryメソッドで指定したエントリーのデータをメモリに読み込みます。 ブランチに設定されたアドレスの変数にデータが格納されます。

 1from ROOT import TFile
 2
 3file = TFile("data.root")
 4tree = file.Get("tree")
 5
 6x = 0
 7tree.SetBranchAddress("x", x)
 8
 9# エントリー0を取得
10tree.GetEntry(0)
11print(f"Entry 0: x = {x}")

注釈

GetEntry(i)を呼び出すたびに、 ファイルからi番目のデータが読み込まれ、 ブランチアドレスで設定した メモリアドレスに値が格納されます。

ブランチアドレスを設定しておかないと データにアクセスできません。

メソッドのシグネチャ

1Int_t GetEntry(Long64_t entry)

引数と戻り値

引数:

  • entry - 取得するエントリー番号(0から開始)

戻り値:

  • Int_t: 読み込んだバイト数。エラーの場合は負の値

単一のエントリーを取得したい(GetEntry

 1#include <TFile.h>
 2#include <TTree.h>
 3#include <iostream>
 4
 5TFile *file = TFile::Open("data.root");
 6TTree *tree = (TTree *)file->Get("tree");
 7
 8Int_t event_id;
 9Float_t energy;
10tree->SetBranchAddress("event_id", &event_id);
11tree->SetBranchAddress("energy", &energy);
12
13// 5番目のエントリーを取得
14tree->GetEntry(5);
15
16std::cout << "Event ID: " << event_id << ", Energy: " << energy << std::endl;
17
18file->Close();

特定のエントリー番号のイベントをメモリに読み込み、ブランチのデータにアクセスできます。

ループ処理したい(GetEntry

 1#include <TFile.h>
 2#include <TTree.h>
 3#include <iostream>
 4
 5TFile *file = TFile::Open("data.root");
 6TTree *tree = (TTree *)file->Get("tree");
 7
 8// すべてのエントリー数を取得
 9Long64_t nentries = tree->GetEntries();
10
11Float_t x, y;
12tree->SetBranchAddress("x", &x);
13tree->SetBranchAddress("y", &y);
14
15for (Long64_t i = 0; i < nentries; i++) {
16    tree->GetEntry(i);
17
18    if (x > 100) {
19        std::cout << "Entry " << i << ": x=" << x << ", y=" << y << std::endl;
20    }
21}
22
23file->Close();

データ解析の基本となるループ処理です。 GetEntriesでファイル内のイベント数を取得し、各エントリーのデータを順番に処理できます。

特定の条件のみ処理したい

 1#include <TFile.h>
 2#include <TTree.h>
 3#include <iostream>
 4
 5TFile *file = TFile::Open("data.root");
 6TTree *tree = (TTree *)file->Get("tree");
 7
 8Float_t pt, eta;
 9tree->SetBranchAddress("pt", &pt);
10tree->SetBranchAddress("eta", &eta);
11
12// すべてのエントリー数を取得
13Long64_t nentries = tree->GetEntries();
14
15for (Long64_t i = 0; i < nentries; i++) {
16    tree->GetEntry(i);
17
18    // 条件を満たすエントリーのみ処理
19    if (pt > 20.0 && std::abs(eta) < 2.5) {
20        std::cout << "Entry " << i << ": pt=" << pt << ", eta=" << eta << std::endl;
21    }
22}
23
24file->Close();

条件フィルタリングを適用して、特定の条件を満たすエントリーのみを処理できます。

関連メソッド

参考リンク