ファイルを作成したい(RNTupleWriter::Recreate

1auto writer = ROOT::RNTupleWriter::Recreate(
2    std::move(model),
3    "events",
4    "output.root"
5);

RNTupleWriter::Recreate()NTupleを新規作成します。 第一引数(model)にスキーマ(RNTupleModel)を渡します。 std::move(model)で、スキーマの所有権をNTupleWriterに移しています。 第二引数はRNTupleの名前、第三引数は出力ファイル名です。

RNTupleWriterは内部でTFileを使っています。 スコープを抜けると自動的にCommit()Close()が呼ばれます。

注釈

「所有権」は、そのオブジェクトを削除する権限のことです。 std::moveは、C++のムーブセマンティクスを利用して、オブジェクトの所有権を移すための関数です。 これにより、スキーマをコピーすることなく、効率的に RNTupleModelからRNTupleWriterへ所有権を移すことができます。 RNTupleWriterがスキーマの所有権を持っているため、RNTupleWriterの寿命が終わると、スキーマも自動的にクリーンアップされます。

データを書き込みたい(RNTupleWriter::Fill

1for (int i = 0; i < 100; i++) {
2    *event_id = i;
3    *energy = 100.0f + i;
4    writer->Fill();
5}

RNTupleWriter::Fill()でデータを追加します。 Fill()を呼ぶと、現在のフィールドの値がNtupleに追加されます。

このサンプルでは、 event_idに0から99までの整数(int)を、 energyに100.0から199.0までの浮動小数点数(float)をセットしています

注釈

MakeField<T>()で作成したフィールドは、ポインターとして値をセットできます。 ポインターなので、*event_idのように先頭に*をつけて値を代入します。