14#ifndef ROOT_RNTupleWriter
15#define ROOT_RNTupleWriter
38class RNTupleWriteOptions;
42std::unique_ptr<RNTupleWriter>
68auto model = ROOT::RNTupleModel::Create();
69// Define the schema by adding Fields to the model.
70// MakeField returns a shared_ptr to the value to be written (in this case, a shared_ptr<int>)
71auto pFoo = model->MakeField<int>("foo");
74auto writer = ROOT::RNTupleReader::Recreate(std::move(model), "myNTuple", "some/file.root");
77for (int i = 0; i < 10; ++i) {
78 // Assign the value you want to each RNTuple Field (in this case there is only one Field "foo").
81 // Fill() writes the entire entry to the RNTuple.
82 // After calling Fill() you can safely write another value into `pFoo` knowing that the previous one was
87// On destruction, the writer will flush the written data to disk.
90The caller has to make sure that the data that gets filled into an RNTuple is not modified for the time of the
91Fill() call. The Fill call serializes the C++ object into the column format and
92writes data into the corresponding column page buffers.
94The actual writing of the buffers to storage is deferred and can be triggered by FlushCluster() or by
95destructing the writer.
97On I/O errors, a ROOT::RException is thrown.
103 friend std::unique_ptr<RNTupleWriter>
112 RNTupleWriter(std::unique_ptr<ROOT::RNTupleModel> model, std::unique_ptr<Internal::RPageSink>
sink);
121 static std::unique_ptr<RNTupleWriter>
Create(std::unique_ptr<ROOT::RNTupleModel> model,
122 std::unique_ptr<Internal::RPageSink>
sink,
139 static std::unique_ptr<RNTupleWriter>
144 static std::unique_ptr<RNTupleWriter>
151 static std::unique_ptr<RNTupleWriter>
Append(std::unique_ptr<ROOT::RNTupleModel> model, std::string_view
ntupleName,
238 return std::make_unique<ROOT::RNTupleModel::RUpdater>(*
this);
A collection of Counter objects with a name, a unit, and a description.
A container of const raw pointers, corresponding to a row in the data set.
A context for filling entries (data) into clusters of an RNTuple.
ROOT::NTupleSize_t GetNEntries() const
Return the number of entries filled so far.
std::unique_ptr< ROOT::Internal::RPageSink > fSink
void FillNoFlush(ROOT::REntry &entry, ROOT::RNTupleFillStatus &status)
Fill an entry into this context, but don't commit the cluster.
std::unique_ptr< ROOT::RNTupleModel > fModel
Needs to be destructed before fSink.
void FlushCluster()
Flush so far filled entries to storage.
std::size_t Fill(ROOT::REntry &entry)
Fill an entry into this context.
ROOT::NTupleSize_t GetLastFlushed() const
Return the entry number that was last flushed in a cluster.
void FlushColumns()
Flush column data, preparing for CommitCluster or to reduce memory usage.
std::unique_ptr< ROOT::REntry > CreateEntry() const
std::unique_ptr< Detail::RRawPtrWriteEntry > CreateRawPtrWriteEntry() const
Abstract interface to write data into an ntuple.
The REntry is a collection of values in an RNTuple corresponding to a complete row in the data set.
A status object after filling an entry.
A model is usually immutable after passing it to an RNTupleWriter.
The RNTupleModel encapulates the schema of an RNTuple.
Common user-tunable settings for storing RNTuples.
An RNTuple that gets filled with entries (data) and writes them to storage.
std::unique_ptr< ROOT::REntry > CreateEntry() const
static std::unique_ptr< RNTupleWriter > Create(std::unique_ptr< ROOT::RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink, const ROOT::RNTupleWriteOptions &options)
Create a writer, potentially wrapping the sink in a RPageSinkBuf.
std::size_t Fill(Experimental::Detail::RRawPtrWriteEntry &entry)
Fill an RRawPtrWriteEntry into this ntuple.
static std::unique_ptr< RNTupleWriter > Recreate(std::unique_ptr< ROOT::RNTupleModel > model, std::string_view ntupleName, std::string_view storage, const ROOT::RNTupleWriteOptions &options=ROOT::RNTupleWriteOptions())
Creates an RNTupleWriter backed by storage, overwriting it if one with the same URI exists.
RNTupleWriter(const RNTupleWriter &)=delete
Experimental::Detail::RNTupleMetrics fMetrics
const Experimental::Detail::RNTupleMetrics & GetMetrics() const
void CommitClusterGroup()
ROOT::RNTupleModel & GetUpdatableModel()
Internal::RPageSink & GetSink()
void FillNoFlush(Experimental::Detail::RRawPtrWriteEntry &entry, RNTupleFillStatus &status)
Fill an RRawPtrWriteEntry into this ntuple, but don't commit the cluster.
static std::unique_ptr< RNTupleWriter > Append(std::unique_ptr< ROOT::RNTupleModel > model, std::string_view ntupleName, TDirectory &fileOrDirectory, const ROOT::RNTupleWriteOptions &options=ROOT::RNTupleWriteOptions())
Creates an RNTupleWriter that writes into an existing TFile or TDirectory, without overwriting its co...
std::size_t Fill(ROOT::REntry &entry)
Multiple entries can have been instantiated from the ntuple model.
void FillNoFlush(ROOT::REntry &entry, RNTupleFillStatus &status)
Fill an entry into this ntuple, but don't commit the cluster.
RNTupleWriter(std::unique_ptr< ROOT::RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink)
ROOT::NTupleSize_t GetLastCommitted() const
Return the entry number that was last committed in a cluster.
ROOT::NTupleSize_t GetLastCommittedClusterGroup() const
Return the entry number that was last committed in a cluster group.
void CommitDataset()
Closes the underlying file (page sink) and expires the model.
const ROOT::RNTupleModel & GetModel() const
ROOT::NTupleSize_t fLastCommittedClusterGroup
void FlushColumns()
Flush column data, preparing for CommitCluster or to reduce memory usage.
RNTupleWriter & operator=(const RNTupleWriter &)=delete
ROOT::NTupleSize_t GetLastFlushed() const
Return the entry number that was last flushed in a cluster.
std::unique_ptr< Experimental::Detail::RRawPtrWriteEntry > CreateRawPtrWriteEntry() const
std::unique_ptr< ROOT::RNTupleModel::RUpdater > CreateModelUpdater()
Get a RNTupleModel::RUpdater that provides limited support for incremental updates to the underlying ...
void FlushCluster()
Flush so far filled entries to storage.
ROOT::NTupleSize_t GetNEntries() const
Return the number of entries filled so far.
void CommitCluster(bool commitClusterGroup=false)
Ensure that the data from the so far seen Fill calls has been written to storage.
Experimental::RNTupleFillContext fFillContext
std::size_t Fill()
The simplest user interface if the default entry that comes with the ntuple model is used.
Describe directory structure in memory.
std::unique_ptr< RNTupleWriter > CreateRNTupleWriter(std::unique_ptr< ROOT::RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink)
Namespace for new ROOT classes and functions.
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.