The on-storage meta-data of an ntuple.
Represents the on-disk (on storage) information about an ntuple. The meta-data consists of a header and one or several footers. The header carries the ntuple schema, i.e. the fields and the associated columns and their relationships. The footer(s) carry information about one or several clusters. For every cluster, a footer stores its location and size, and for every column the range of element indexes as well as a list of pages and page locations.
The descriptor provide machine-independent (de-)serialization of headers and footers, and it provides lookup routines for ntuple objects (pages, clusters, ...). It is supposed to be usable by all RPageStorage implementations.
The serialization does not use standard ROOT streamers in order to not let it depend on libCore. The serialization uses the concept of frames: header, footer, and substructures have a preamble with version numbers and the size of the writte struct. This allows for forward and backward compatibility when the meta-data evolves.
Definition at line 384 of file RNTupleDescriptor.hxx.
Classes | |
class | RClusterDescriptorIterable |
Used to loop over all the clusters of an ntuple (in unspecified order) More... | |
class | RClusterGroupDescriptorIterable |
Used to loop over all the cluster groups of an ntuple (in unspecified order) More... | |
class | RColumnDescriptorIterable |
Used to loop over a field's associated columns. More... | |
class | RFieldDescriptorIterable |
Used to loop over a field's child fields. More... | |
Private Attributes | |
std::unordered_map< DescriptorId_t, RClusterDescriptor > | fClusterDescriptors |
May contain only a subset of all the available clusters, e.g. | |
std::unordered_map< DescriptorId_t, RClusterGroupDescriptor > | fClusterGroupDescriptors |
std::unordered_map< DescriptorId_t, RColumnDescriptor > | fColumnDescriptors |
std::string | fDescription |
Free text from the user. | |
std::unordered_map< DescriptorId_t, RFieldDescriptor > | fFieldDescriptors |
std::uint64_t | fGeneration = 0 |
Once constructed by an RNTupleDescriptorBuilder, the descriptor is mostly immutable except for set of active the page locations. | |
std::string | fName |
The ntuple name needs to be unique in a given storage location (file) | |
std::uint64_t | fNEntries = 0 |
Updated by the descriptor builder when the cluster summaries are added. | |
std::uint64_t | fOnDiskFooterSize = 0 |
Like fOnDiskHeaderSize, contains both cluster summaries and page locations. | |
std::uint64_t | fOnDiskHeaderSize = 0 |
Set by the descriptor builder when deserialized. | |
Friends | |
class | RNTupleDescriptorBuilder |
#include <ROOT/RNTupleDescriptor.hxx>
|
default |
|
delete |
|
default |
ROOT::Experimental::RResult< void > ROOT::Experimental::RNTupleDescriptor::AddClusterDetails | ( | RClusterDescriptor && | clusterDesc | ) |
Methods to load and drop cluster details.
Definition at line 319 of file RNTupleDescriptor.cxx.
std::unique_ptr< ROOT::Experimental::RNTupleDescriptor > ROOT::Experimental::RNTupleDescriptor::Clone | ( | ) | const |
Definition at line 353 of file RNTupleDescriptor.cxx.
ROOT::Experimental::RResult< void > ROOT::Experimental::RNTupleDescriptor::DropClusterDetails | ( | DescriptorId_t | clusterId | ) |
Definition at line 332 of file RNTupleDescriptor.cxx.
ROOT::Experimental::DescriptorId_t ROOT::Experimental::RNTupleDescriptor::FindClusterId | ( | DescriptorId_t | columnId, |
NTupleSize_t | index | ||
) | const |
Definition at line 276 of file RNTupleDescriptor.cxx.
ROOT::Experimental::DescriptorId_t ROOT::Experimental::RNTupleDescriptor::FindColumnId | ( | DescriptorId_t | fieldId, |
std::uint32_t | columnIndex | ||
) | const |
Definition at line 266 of file RNTupleDescriptor.cxx.
ROOT::Experimental::DescriptorId_t ROOT::Experimental::RNTupleDescriptor::FindFieldId | ( | std::string_view | fieldName | ) | const |
Searches for a top-level field.
Definition at line 259 of file RNTupleDescriptor.cxx.
ROOT::Experimental::DescriptorId_t ROOT::Experimental::RNTupleDescriptor::FindFieldId | ( | std::string_view | fieldName, |
DescriptorId_t | parentId | ||
) | const |
Definition at line 221 of file RNTupleDescriptor.cxx.
ROOT::Experimental::DescriptorId_t ROOT::Experimental::RNTupleDescriptor::FindNextClusterId | ( | DescriptorId_t | clusterId | ) | const |
Definition at line 292 of file RNTupleDescriptor.cxx.
ROOT::Experimental::DescriptorId_t ROOT::Experimental::RNTupleDescriptor::FindPrevClusterId | ( | DescriptorId_t | clusterId | ) | const |
Definition at line 307 of file RNTupleDescriptor.cxx.
std::unique_ptr< ROOT::Experimental::RNTupleModel > ROOT::Experimental::RNTupleDescriptor::GenerateModel | ( | ) | const |
Re-create the C++ model from the stored meta-data.
Definition at line 343 of file RNTupleDescriptor.cxx.
|
inline |
Definition at line 642 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 638 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 680 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 682 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 635 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 671 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 675 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 688 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 632 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 646 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 649 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 654 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 657 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 701 of file RNTupleDescriptor.hxx.
ROOT::Experimental::DescriptorId_t ROOT::Experimental::RNTupleDescriptor::GetFieldZeroId | ( | ) | const |
Returns the logical parent of all top-level NTuple data fields.
Definition at line 252 of file RNTupleDescriptor.cxx.
|
inline |
Definition at line 718 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 687 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 692 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 693 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 691 of file RNTupleDescriptor.hxx.
ROOT::Experimental::NTupleSize_t ROOT::Experimental::RNTupleDescriptor::GetNElements | ( | DescriptorId_t | columnId | ) | const |
Definition at line 207 of file RNTupleDescriptor.cxx.
|
inline |
We know the number of entries from adding the cluster summaries.
Definition at line 696 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 690 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 630 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 629 of file RNTupleDescriptor.hxx.
std::string ROOT::Experimental::RNTupleDescriptor::GetQualifiedFieldName | ( | DescriptorId_t | fieldId | ) | const |
Walks up the parents of the field ID and returns a field name of the form a.b.c.d In case of invalid field ID, an empty string is returned.
Definition at line 238 of file RNTupleDescriptor.cxx.
|
inline |
Definition at line 662 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 665 of file RNTupleDescriptor.hxx.
|
inline |
Definition at line 719 of file RNTupleDescriptor.hxx.
|
delete |
|
default |
bool ROOT::Experimental::RNTupleDescriptor::operator== | ( | const RNTupleDescriptor & | other | ) | const |
Definition at line 197 of file RNTupleDescriptor.cxx.
void ROOT::Experimental::RNTupleDescriptor::PrintInfo | ( | std::ostream & | output | ) | const |
Definition at line 82 of file RNTupleDescriptorFmt.cxx.
|
friend |
Definition at line 385 of file RNTupleDescriptor.hxx.
|
private |
May contain only a subset of all the available clusters, e.g.
the clusters of the current file from a chain of files
Definition at line 412 of file RNTupleDescriptor.hxx.
|
private |
Definition at line 409 of file RNTupleDescriptor.hxx.
|
private |
Definition at line 408 of file RNTupleDescriptor.hxx.
|
private |
Free text from the user.
Definition at line 391 of file RNTupleDescriptor.hxx.
|
private |
Definition at line 407 of file RNTupleDescriptor.hxx.
|
private |
Once constructed by an RNTupleDescriptorBuilder, the descriptor is mostly immutable except for set of active the page locations.
During the lifetime of the descriptor, page location information for clusters can be added or removed. When this happens, the generation should be increased, so that users of the descriptor know that the information changed. The generation is increased, e.g., by the page source's exclusive lock guard around the descriptor. It is used, e.g., by the descriptor cache in RNTupleReader.
Definition at line 405 of file RNTupleDescriptor.hxx.
|
private |
The ntuple name needs to be unique in a given storage location (file)
Definition at line 389 of file RNTupleDescriptor.hxx.
|
private |
Updated by the descriptor builder when the cluster summaries are added.
Definition at line 396 of file RNTupleDescriptor.hxx.
|
private |
Like fOnDiskHeaderSize, contains both cluster summaries and page locations.
Definition at line 394 of file RNTupleDescriptor.hxx.
|
private |
Set by the descriptor builder when deserialized.
Definition at line 393 of file RNTupleDescriptor.hxx.