The RNTupleModel encapulates the schema of an ntuple.
The ntuple model comprises a collection of hierarchically organized fields. From a model, "entries" can be extracted. For convenience, the model provides a default entry unless it is created as a "bare model". Models have a unique model identifier that faciliates checking whether entries are compatible with it (i.e.: have been extracted from that model).
A model is subject to a state transition during its lifetime: it starts in a building state, in which fields can be added and modified. Once the schema is finalized, the model gets frozen. Only frozen models can create entries.
Definition at line 82 of file RNTupleModel.hxx.
Classes | |
struct | NameWithDescription_t |
A wrapper over a field name and an optional description; used in AddField() and RUpdater::AddField() More... | |
class | RProjectedFields |
Projected fields are fields whose columns are reused from existing fields. More... | |
class | RUpdater |
A model is usually immutable after passing it to an RNTupleWriter . More... | |
Public Member Functions | |
RNTupleModel (const RNTupleModel &)=delete | |
~RNTupleModel ()=default | |
void | AddField (std::unique_ptr< RFieldBase > field) |
Adds a field whose type is not known at compile time. | |
RResult< void > | AddProjectedField (std::unique_ptr< RFieldBase > field, std::function< std::string(const std::string &)> mapping) |
Adds a top-level field based on existing fields. | |
std::unique_ptr< RNTupleModel > | Clone () const |
std::unique_ptr< REntry > | CreateBareEntry () const |
In a bare entry, all values point to nullptr. | |
RFieldBase::RBulk | CreateBulk (std::string_view fieldName) const |
Calls the given field's CreateBulk() method. Throws an exception if no field with the given name exists. | |
std::unique_ptr< REntry > | CreateEntry () const |
void | Freeze () |
REntry & | GetDefaultEntry () |
const REntry & | GetDefaultEntry () const |
std::string | GetDescription () const |
const RFieldBase & | GetField (std::string_view fieldName) const |
RFieldZero & | GetFieldZero () |
Non-const access to the root field is used to commit clusters during writing and to set the on-disk field IDs when connecting a model to a page source or sink. | |
const RFieldZero & | GetFieldZero () const |
std::uint64_t | GetModelId () const |
const RProjectedFields & | GetProjectedFields () const |
REntry::RFieldToken | GetToken (std::string_view fieldName) const |
Creates a token to be used in REntry methods to address a top-level field. | |
bool | IsFrozen () const |
std::shared_ptr< RNTupleCollectionWriter > | MakeCollection (std::string_view fieldName, std::unique_ptr< RNTupleModel > collectionModel) |
Ingests a model for a sub collection and attaches it to the current model. | |
template<typename T , typename... ArgsT> | |
std::shared_ptr< T > | MakeField (const NameWithDescription_t &fieldNameDesc, ArgsT &&...args) |
Creates a new field given a name or {name, description} pair and a corresponding value that is managed by a shared pointer. | |
RNTupleModel & | operator= (const RNTupleModel &)=delete |
void | SetDescription (std::string_view description) |
void | Unfreeze () |
Static Public Member Functions | |
static std::unique_ptr< RNTupleModel > | Create () |
static std::unique_ptr< RNTupleModel > | Create (std::unique_ptr< RFieldZero > fieldZero) |
static std::unique_ptr< RNTupleModel > | CreateBare () |
A bare model has no default entry. | |
static std::unique_ptr< RNTupleModel > | CreateBare (std::unique_ptr< RFieldZero > fieldZero) |
Private Member Functions | |
RNTupleModel (std::unique_ptr< RFieldZero > fieldZero) | |
void | EnsureNotBare () const |
Throws an RException if fDefaultEntry is nullptr. | |
void | EnsureNotFrozen () const |
Throws an RException if fFrozen is true. | |
void | EnsureValidFieldName (std::string_view fieldName) |
Checks that user-provided field names are valid in the context of this NTuple model. | |
RFieldBase * | FindField (std::string_view fieldName) const |
The field name can be a top-level field or a nested field. Returns nullptr if the field is not in the model. | |
Private Attributes | |
std::unique_ptr< REntry > | fDefaultEntry |
Contains field values corresponding to the created top-level fields. | |
std::string | fDescription |
Free text set by the user. | |
std::unordered_set< std::string > | fFieldNames |
Keeps track of which field names are taken, including projected field names. | |
std::unique_ptr< RFieldZero > | fFieldZero |
Hierarchy of fields consisting of simple types and collections (sub trees) | |
bool | fIsFrozen = false |
Changed by Freeze() / Unfreeze() and by the RUpdater. | |
std::uint64_t | fModelId = 0 |
Every model has a unique ID to distinguish it from other models. | |
std::unique_ptr< RProjectedFields > | fProjectedFields |
The set of projected top-level fields. | |
#include <ROOT/RNTupleModel.hxx>
|
private |
Definition at line 205 of file RNTupleModel.cxx.
|
delete |
|
default |
void ROOT::Experimental::RNTupleModel::AddField | ( | std::unique_ptr< RFieldBase > | field | ) |
Adds a field whose type is not known at compile time.
Thus there is no shared pointer returned.
Throws an exception if the field is null.
Definition at line 274 of file RNTupleModel.cxx.
ROOT::Experimental::RResult< void > ROOT::Experimental::RNTupleModel::AddProjectedField | ( | std::unique_ptr< RFieldBase > | field, |
std::function< std::string(const std::string &)> | mapping | ||
) |
Adds a top-level field based on existing fields.
The mapping function is called with the qualified field names of the provided field and the subfields. It should return the qualified field names used as a mapping source. Projected fields can only be used for models used to write data.
Definition at line 288 of file RNTupleModel.cxx.
std::unique_ptr< ROOT::Experimental::RNTupleModel > ROOT::Experimental::RNTupleModel::Clone | ( | ) | const |
Definition at line 235 of file RNTupleModel.cxx.
|
static |
Definition at line 222 of file RNTupleModel.cxx.
|
static |
Definition at line 228 of file RNTupleModel.cxx.
|
static |
A bare model has no default entry.
Definition at line 209 of file RNTupleModel.cxx.
|
static |
Definition at line 215 of file RNTupleModel.cxx.
std::unique_ptr< ROOT::Experimental::REntry > ROOT::Experimental::RNTupleModel::CreateBareEntry | ( | ) | const |
In a bare entry, all values point to nullptr.
The resulting entry shall use BindValue() in order set memory addresses to be serialized / deserialized
Definition at line 382 of file RNTupleModel.cxx.
ROOT::Experimental::RFieldBase::RBulk ROOT::Experimental::RNTupleModel::CreateBulk | ( | std::string_view | fieldName | ) | const |
Calls the given field's CreateBulk() method. Throws an exception if no field with the given name exists.
Definition at line 409 of file RNTupleModel.cxx.
std::unique_ptr< ROOT::Experimental::REntry > ROOT::Experimental::RNTupleModel::CreateEntry | ( | ) | const |
Definition at line 370 of file RNTupleModel.cxx.
|
private |
Throws an RException if fDefaultEntry is nullptr.
Definition at line 199 of file RNTupleModel.cxx.
|
private |
Throws an RException if fFrozen is true.
Definition at line 193 of file RNTupleModel.cxx.
|
private |
Checks that user-provided field names are valid in the context of this NTuple model.
Throws an RException for invalid names.
Definition at line 182 of file RNTupleModel.cxx.
|
private |
The field name can be a top-level field or a nested field. Returns nullptr if the field is not in the model.
Definition at line 253 of file RNTupleModel.cxx.
void ROOT::Experimental::RNTupleModel::Freeze | ( | ) |
Definition at line 431 of file RNTupleModel.cxx.
ROOT::Experimental::REntry & ROOT::Experimental::RNTupleModel::GetDefaultEntry | ( | ) |
Definition at line 356 of file RNTupleModel.cxx.
const ROOT::Experimental::REntry & ROOT::Experimental::RNTupleModel::GetDefaultEntry | ( | ) | const |
Definition at line 362 of file RNTupleModel.cxx.
|
inline |
Definition at line 326 of file RNTupleModel.hxx.
const ROOT::Experimental::RFieldBase & ROOT::Experimental::RNTupleModel::GetField | ( | std::string_view | fieldName | ) | const |
Definition at line 347 of file RNTupleModel.cxx.
ROOT::Experimental::RFieldZero & ROOT::Experimental::RNTupleModel::GetFieldZero | ( | ) |
Non-const access to the root field is used to commit clusters during writing and to set the on-disk field IDs when connecting a model to a page source or sink.
Definition at line 340 of file RNTupleModel.cxx.
|
inline |
Definition at line 323 of file RNTupleModel.hxx.
|
inline |
Definition at line 300 of file RNTupleModel.hxx.
|
inline |
Definition at line 295 of file RNTupleModel.hxx.
ROOT::Experimental::REntry::RFieldToken ROOT::Experimental::RNTupleModel::GetToken | ( | std::string_view | fieldName | ) | const |
Creates a token to be used in REntry methods to address a top-level field.
Definition at line 394 of file RNTupleModel.cxx.
|
inline |
Definition at line 299 of file RNTupleModel.hxx.
std::shared_ptr< ROOT::Experimental::RNTupleCollectionWriter > ROOT::Experimental::RNTupleModel::MakeCollection | ( | std::string_view | fieldName, |
std::unique_ptr< RNTupleModel > | collectionModel | ||
) |
Ingests a model for a sub collection and attaches it to the current model.
Throws an exception if collectionModel is null.
Definition at line 318 of file RNTupleModel.cxx.
|
inline |
Creates a new field given a name
or {name, description}
pair and a corresponding value that is managed by a shared pointer.
Example: create some fields and fill an RNTuple
Example: create a field with an initial value
Example: create a field with a description
Definition at line 271 of file RNTupleModel.hxx.
|
delete |
void ROOT::Experimental::RNTupleModel::SetDescription | ( | std::string_view | description | ) |
Definition at line 436 of file RNTupleModel.cxx.
void ROOT::Experimental::RNTupleModel::Unfreeze | ( | ) |
Definition at line 420 of file RNTupleModel.cxx.
|
private |
Contains field values corresponding to the created top-level fields.
Definition at line 184 of file RNTupleModel.hxx.
|
private |
Free text set by the user.
Definition at line 188 of file RNTupleModel.hxx.
|
private |
Keeps track of which field names are taken, including projected field names.
Definition at line 186 of file RNTupleModel.hxx.
|
private |
Hierarchy of fields consisting of simple types and collections (sub trees)
Definition at line 182 of file RNTupleModel.hxx.
|
private |
Changed by Freeze() / Unfreeze() and by the RUpdater.
Definition at line 195 of file RNTupleModel.hxx.
|
private |
Every model has a unique ID to distinguish it from other models.
Entries are linked to models via the ID. Cloned models get a new model ID.
Definition at line 193 of file RNTupleModel.hxx.
|
private |
The set of projected top-level fields.
Definition at line 190 of file RNTupleModel.hxx.