ファイルを読み込みたい(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オブジェクトのポインターを渡します。

TTreeReaderValueTTreeReaderArrayで、各ブランチをセットアップします。 これらのメソッドはテンプレートメソッドとなっており、型安全にデータを取得できます。

TTreeReaderオブジェクトはイテレーターのように使用でき、 reader.Next()を呼び出すことで、次のエントリーに進むことができます。