34 std::unique_ptr<ROOT::Experimental::Internal::RPageSink>
sink)
35 : fFillContext(std::
move(model), std::
move(
sink)), fMetrics(
"RNTupleWriter")
40 fZipTasks = std::make_unique<Internal::RNTupleImtTaskScheduler>();
57std::unique_ptr<ROOT::Experimental::RNTupleWriter>
61 if (model->GetRegisteredSubfields().size() > 0) {
62 throw RException(
R__FAIL(
"cannot create an RNTupleWriter from a model with registered subfields"));
64 for (
const auto &
field : model->GetConstFieldZero()) {
67 R__FAIL(
"creating a RNTupleWriter from a model containing emulated fields is currently unsupported."));
70 sink = std::make_unique<Internal::RPageSinkBuf>(std::move(
sink));
72 return std::unique_ptr<RNTupleWriter>(
new RNTupleWriter(std::move(model), std::move(
sink)));
75std::unique_ptr<ROOT::Experimental::RNTupleWriter>
80 return Create(std::move(model), std::move(
sink), options);
83std::unique_ptr<ROOT::Experimental::RNTupleWriter>
94 model->AddField(
field.Unwrap());
96 return Create(std::move(model), std::move(
sink), options);
99std::unique_ptr<ROOT::Experimental::RNTupleWriter>
105 throw RException(
R__FAIL(
"RNTupleWriter only supports writing to a ROOT file. Cannot write into a directory "
106 "that is not backed by a file"));
108 if (!file->IsBinary()) {
109 throw RException(
R__FAIL(
"RNTupleWriter only supports writing to a ROOT file. Cannot write into " +
110 std::string(file->GetName())));
114 return Create(std::move(model), std::move(
sink), options);
119 if (GetNEntries() == fLastCommittedClusterGroup)
121 fFillContext.fSink->CommitClusterGroup();
122 fLastCommittedClusterGroup = GetNEntries();
127 if (fFillContext.fModel->IsExpired()) {
130 return *fFillContext.fModel;
135 if (fFillContext.GetModel().IsExpired())
138 CommitCluster(
true );
139 fFillContext.fSink->CommitDataset();
140 fFillContext.fModel->Expire();
143std::unique_ptr<ROOT::Experimental::RNTupleWriter>
145 std::unique_ptr<ROOT::Experimental::Internal::RPageSink>
sink)
147 return std::unique_ptr<ROOT::Experimental::RNTupleWriter>(
#define R__FAIL(msg)
Short-hand to return an RResult<T> in an error state; the RError is implicitly converted into RResult...
#define R__LOG_ERROR(...)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
void ObserveMetrics(RNTupleMetrics &observee)
static std::unique_ptr< RPageSink > Create(std::string_view ntupleName, std::string_view location, const RNTupleWriteOptions &options=RNTupleWriteOptions())
Guess the concrete derived page source from the location.
@ kTraitEmulatedField
This field is a user defined type that was missing dictionaries and was reconstructed from the on-dis...
static RResult< std::unique_ptr< RFieldBase > > Create(const std::string &fieldName, const std::string &typeName, const RCreateFieldOptions &options, const RNTupleDescriptor *desc, ROOT::DescriptorId_t fieldId)
Factory method to resurrect a field from the stored on-disk type information.
std::unique_ptr< Internal::RPageSink > fSink
The RNTupleModel encapulates the schema of an ntuple.
static std::unique_ptr< RNTupleModel > Create()
Common user-tunable settings for storing ntuples.
bool GetUseBufferedWrite() const
An RNTuple that gets filled with entries (data) and writes them to storage.
RNTupleWriter(std::unique_ptr< RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink)
RNTupleModel & GetUpdatableModel()
static std::unique_ptr< RNTupleWriter > Append(std::unique_ptr< RNTupleModel > model, std::string_view ntupleName, TDirectory &fileOrDirectory, const RNTupleWriteOptions &options=RNTupleWriteOptions())
Throws an exception if the model is null.
std::unique_ptr< Internal::RPageStorage::RTaskScheduler > fZipTasks
The page sink's parallel page compression scheduler if IMT is on.
static std::unique_ptr< RNTupleWriter > Create(std::unique_ptr< RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink, const RNTupleWriteOptions &options)
Create a writer, potentially wrapping the sink in a RPageSinkBuf.
void CommitDataset()
Closes the underlying file (page sink) and expires the model.
void CommitClusterGroup()
Detail::RNTupleMetrics fMetrics
static std::unique_ptr< RNTupleWriter > Recreate(std::unique_ptr< RNTupleModel > model, std::string_view ntupleName, std::string_view storage, const RNTupleWriteOptions &options=RNTupleWriteOptions())
Throws an exception if the model is null.
RNTupleFillContext fFillContext
Base class for all ROOT issued exceptions.
const RError & GetError() const
Describe directory structure in memory.
std::unique_ptr< RNTupleWriter > CreateRNTupleWriter(std::unique_ptr< RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink)
ROOT::RLogChannel & NTupleLog()
Log channel for RNTuple diagnostics.
Bool_t IsImplicitMTEnabled()
Returns true if the implicit multi-threading in ROOT is enabled.