39 std::unique_ptr<ROOT::Internal::RPageSink> sink)
45 fFillContext.fZipTasks = std::make_unique<ROOT::Experimental::Internal::RNTupleImtTaskScheduler>();
46 fFillContext.fSink->SetTaskScheduler(fFillContext.fZipTasks.get());
63 std::unique_ptr<Internal::RPageSink> sink,
66 if (model->GetRegisteredSubfieldNames().size() > 0) {
67 throw RException(
R__FAIL(
"cannot create an RNTupleWriter from a model with registered subfields"));
69 for (
const auto &field : model->GetConstFieldZero()) {
72 R__FAIL(
"creating a RNTupleWriter from a model containing emulated fields is currently unsupported."));
75 sink = std::make_unique<Internal::RPageSinkBuf>(std::move(sink));
77 return std::unique_ptr<RNTupleWriter>(
new RNTupleWriter(std::move(model), std::move(sink)));
80std::unique_ptr<ROOT::RNTupleWriter>
85 return Create(std::move(model), std::move(sink), options);
88std::unique_ptr<ROOT::RNTupleWriter>
90 std::string_view ntupleName, std::string_view storage,
95 for (
const auto &fieldDesc : fields) {
96 std::string typeName(fieldDesc.first);
97 std::string fieldName(fieldDesc.second);
99 model->AddField(field.Unwrap());
101 return Create(std::move(model), std::move(sink), options);
104std::unique_ptr<ROOT::RNTupleWriter>
108 auto file = fileOrDirectory.
GetFile();
110 throw RException(
R__FAIL(
"RNTupleWriter only supports writing to a ROOT file. Cannot write into a directory "
111 "that is not backed by a file"));
113 if (!file->IsBinary()) {
114 throw RException(
R__FAIL(
"RNTupleWriter only supports writing to a ROOT file. Cannot write into " +
115 std::string(file->GetName())));
117 if (!file->IsWritable()) {
119 "' given to RNTupleWriter is not writable. Open it with 'UPDATE' or 'RECREATE' "
120 "if you want to write into it."));
123 auto sink = std::make_unique<Internal::RPageSinkFile>(ntupleName, fileOrDirectory, options);
124 return Create(std::move(model), std::move(sink), options);
159std::unique_ptr<ROOT::RNTupleWriter>
161 std::unique_ptr<ROOT::Internal::RPageSink> sink)
163 return std::unique_ptr<ROOT::RNTupleWriter>(
new ROOT::RNTupleWriter(std::move(model), std::move(sink)));
166std::unique_ptr<ROOT::RNTupleWriter>
171 auto sink = std::make_unique<ROOT::Internal::RPageSinkFile>(ntupleBasename, file, ntupleDir, options);
181 "\": names starting with '__' are reserved for internal use."));
190 std::string nameStr{
name};
195 [&nameStr](
const auto &
set) { return set->GetDescriptor().GetName() == nameStr; });
198 "', but one already exists with that name"));
206 auto attrAnchorInfo = attrSet.
Commit();
220 for (
auto it = attrSets.begin(), end = attrSets.end(); it != end; ++it) {
221 if (it->get() ==
writer.get()) {
#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(...)
static bool IsReservedRNTupleAttrSetName(std::string_view name)
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
An interface to read from, or write to, a ROOT file, as well as performing other common operations.
Non-owning handle to an RNTupleAttrSetWriter.
std::weak_ptr< RNTupleAttrSetWriter > fWriter
Class used to write an RNTupleAttrSet in the context of an RNTupleWriter.
static std::unique_ptr< RNTupleAttrSetWriter > Create(const RNTupleFillContext &mainFillContext, std::unique_ptr< ROOT::Internal::RPageSink > sink, std::unique_ptr< RNTupleModel > userModel)
Creates an RNTupleAttrSetWriter associated to the RNTupleWriter owning mainFillContext and writing us...
ROOT::Internal::RNTupleLink Commit()
Commits the attributes written so far to disk and disables writing any new ones.
const ROOT::RNTupleDescriptor & GetDescriptor() const
Returns the descriptor of the underlying attribute RNTuple.
static std::unique_ptr< RPageSink > Create(std::string_view ntupleName, std::string_view location, const ROOT::RNTupleWriteOptions &options=ROOT::RNTupleWriteOptions())
Guess the concrete derived page source from the location.
Base class for all ROOT issued exceptions.
@ 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 ROOT::RCreateFieldOptions &options, const ROOT::RNTupleDescriptor *desc, ROOT::DescriptorId_t fieldId)
Factory method to resurrect a field from the stored on-disk type information.
const std::string & GetName() const
The RNTupleModel encapulates the schema of an RNTuple.
static std::unique_ptr< RNTupleModel > Create()
Common user-tunable settings for storing RNTuples.
bool GetUseBufferedWrite() const
An RNTuple that gets filled with entries (data) and writes them to storage.
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.
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.
std::vector< std::shared_ptr< Experimental::RNTupleAttrSetWriter > > fAttributeSets
All the Attribute Sets created from this Writer.
Experimental::Detail::RNTupleMetrics fMetrics
RNTupleFillContext fFillContext
void CommitClusterGroup()
void CloseAttributeSet(ROOT::Experimental::RNTupleAttrSetWriterHandle handle)
Writes the given AttributeSet to the underlying storage and closes it.
ROOT::RNTupleModel & GetUpdatableModel()
ROOT::Experimental::RNTupleAttrSetWriterHandle CreateAttributeSet(std::unique_ptr< RNTupleModel > model, std::string_view name, const ROOT::RNTupleWriteOptions *options=nullptr)
Creates a new Attribute Set called name associated to this Writer and returns a non-owning pointer to...
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...
RNTupleWriter(std::unique_ptr< ROOT::RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink)
void CommitDataset()
Closes the underlying file (page sink) and expires the model.
ROOT::NTupleSize_t fLastCommittedClusterGroup
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.
void CloseAttributeSetImpl(ROOT::Experimental::RNTupleAttrSetWriter &attrSet)
Describe directory structure in memory.
virtual TFile * GetFile() const
std::pair< std::string_view, std::string_view > DecomposePath(std::string_view path)
Given a "path-like" string (like foo/bar/baz), returns a pair { dirName, baseName }...
std::unique_ptr< RNTupleWriter > RNTupleWriter_Append(std::unique_ptr< ROOT::RNTupleModel > model, std::string_view ntuplePath, ROOT::Experimental::RFile &file, const ROOT::RNTupleWriteOptions &options=ROOT::RNTupleWriteOptions())
Creates an RNTupleWriter that writes into the given file, appending to it.
ROOT::RLogChannel & NTupleLog()
Log channel for RNTuple diagnostics.
std::unique_ptr< RNTupleWriter > CreateRNTupleWriter(std::unique_ptr< ROOT::RNTupleModel > model, std::unique_ptr< Internal::RPageSink > sink)
Bool_t IsImplicitMTEnabled()
Returns true if the implicit multi-threading in ROOT is enabled.
bool StartsWith(std::string_view string, std::string_view prefix)