ファイルを読み込みたい(TTreeReader)
1void macro() {
2 TFile *file = TFile::Open("source.root");
3 if (!file || file->IsZombie()) {
4 std::cerr << "Error opening file!" << std::endl;
5 return;
6 }
7
8 // Create TTreeReader
9 TTreeReader reader("events", file);
10
11 // Set up branch readers
12 // Use TTreeReaderValue<T> for single value branches
13 // Use TTreeReaderArray<T> for array branches
14 TTreeReaderValue<int> event_id(reader, "event_id");
15 TTreeReaderValue<float> energy(reader, "energy");
16 TTreeReaderArray<int> waveform(reader, "waveform");
17
18 // Loop over entries
19 // Use as iterator: reader.Next() to advance to the next entry
20 while (reader.Next()) {
21 // Read values with dereference operator
22 int read_id = *event_id;
23 float read_energy = *energy;
24
25 // Process data...
26 std::cout << "Event ID: " << read_id << ", Energy: " << read_energy << std::endl;
27 }
28}
TTreeReaderはROOTのTTreeを読み込むためのクラスです。
第一引数(keyname)に読み込むTTreeの名前を指定します。
第二引数(dir)にTFileオブジェクトのポインターを渡します。
TTreeReaderValueやTTreeReaderArrayで、各ブランチをセットアップします。
これらのメソッドはテンプレートメソッドとなっており、型安全にデータを取得できます。
TTreeReaderオブジェクトはイテレーターのように使用でき、
reader.Next()を呼び出すことで、次のエントリーに進むことができます。