ファイルを作成したい(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のように先頭に*をつけて値を代入します。