イベントを処理したい(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();
条件フィルタリングを適用して、特定の条件を満たすエントリーのみを処理できます。
関連メソッド
SetBranchAddress - ブランチアドレスを設定
GetEntries - エントリー数を取得
Branch - ブランチを作成
Fill - イベントを追加