17#ifndef ROOT7_RNTupleDescriptor
18#define ROOT7_RNTupleDescriptor
41#include <unordered_map>
42#include <unordered_set>
47class RColumnElementBase;
50namespace Experimental {
53class RNTupleDescriptor;
57class RColumnDescriptorBuilder;
58class RClusterDescriptorBuilder;
59class RClusterGroupDescriptorBuilder;
60class RExtraTypeInfoDescriptorBuilder;
61class RFieldDescriptorBuilder;
62class RNTupleDescriptorBuilder;
126 std::unique_ptr<RFieldBase>
467 using Iter_t = std::unordered_map<ROOT::DescriptorId_t, RColumnRange>::const_iterator;
752 RFieldDescriptorIterable
756 RFieldDescriptorIterable
761 RFieldDescriptorIterable
822 std::unique_ptr<RNTupleModel>
CreateModel(
const RCreateModelOptions &options = RCreateModelOptions())
const;
1031 std::advance(it,
fIndex);
1079 std::advance(it,
fIndex);
#define R__FAIL(msg)
Short-hand to return an RResult<T> in an error state; the RError is implicitly converted into RResult...
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
The available trivial, native content types of a column.
A helper class for piece-wise construction of an RClusterDescriptor.
RResult< void > CommitSuppressedColumnRanges(const RNTupleDescriptor &desc)
Sets the first element index and number of elements for all the suppressed column ranges.
RResult< RClusterDescriptor > MoveDescriptor()
Move out the full cluster descriptor including page locations.
RClusterDescriptorBuilder & NEntries(std::uint64_t nEntries)
RResult< void > MarkSuppressedColumnRange(ROOT::DescriptorId_t physicalId)
Books the given column ID as being suppressed in this cluster.
RClusterDescriptorBuilder & FirstEntryIndex(std::uint64_t firstEntryIndex)
RResult< void > CommitColumnRange(ROOT::DescriptorId_t physicalId, std::uint64_t firstElementIndex, std::uint32_t compressionSettings, const RClusterDescriptor::RPageRange &pageRange)
RClusterDescriptorBuilder & ClusterId(ROOT::DescriptorId_t clusterId)
RClusterDescriptor fCluster
RClusterDescriptorBuilder & AddExtendedColumnRanges(const RNTupleDescriptor &desc)
Add column and page ranges for columns created during late model extension missing in this cluster.
const RClusterDescriptor::RColumnRange & GetColumnRange(ROOT::DescriptorId_t physicalId)
A helper class for piece-wise construction of an RClusterGroupDescriptor.
void AddSortedClusters(const std::vector< ROOT::DescriptorId_t > &clusterIds)
RClusterGroupDescriptorBuilder & PageListLocator(const RNTupleLocator &pageListLocator)
RResult< RClusterGroupDescriptor > MoveDescriptor()
RClusterGroupDescriptorBuilder & MinEntry(std::uint64_t minEntry)
RClusterGroupDescriptorBuilder & ClusterGroupId(ROOT::DescriptorId_t clusterGroupId)
RClusterGroupDescriptorBuilder & EntrySpan(std::uint64_t entrySpan)
RClusterGroupDescriptorBuilder & NClusters(std::uint32_t nClusters)
RClusterGroupDescriptorBuilder & PageListLength(std::uint64_t pageListLength)
static RClusterGroupDescriptorBuilder FromSummary(const RClusterGroupDescriptor &clusterGroupDesc)
RClusterGroupDescriptor fClusterGroup
RClusterGroupDescriptorBuilder()=default
A helper class for piece-wise construction of an RColumnDescriptor.
ROOT::DescriptorId_t GetRepresentationIndex() const
RColumnDescriptorBuilder & FieldId(ROOT::DescriptorId_t fieldId)
ROOT::DescriptorId_t GetFieldId() const
RColumnDescriptorBuilder & SetSuppressedDeferred()
RColumnDescriptorBuilder & LogicalColumnId(ROOT::DescriptorId_t logicalColumnId)
RColumnDescriptorBuilder & BitsOnStorage(std::uint16_t bitsOnStorage)
RColumnDescriptorBuilder()=default
Make an empty column descriptor builder.
RColumnDescriptorBuilder & RepresentationIndex(std::uint16_t representationIndex)
RColumnDescriptorBuilder & Index(std::uint32_t index)
RColumnDescriptorBuilder & FirstElementIndex(std::uint64_t firstElementIdx)
RColumnDescriptorBuilder & Type(ROOT::ENTupleColumnType type)
RColumnDescriptorBuilder & ValueRange(std::optional< RColumnDescriptor::RValueRange > valueRange)
RResult< RColumnDescriptor > MakeDescriptor() const
Attempt to make a column descriptor.
RColumnDescriptorBuilder & PhysicalColumnId(ROOT::DescriptorId_t physicalColumnId)
RColumnDescriptor fColumn
RColumnDescriptorBuilder & ValueRange(double min, double max)
A helper class for piece-wise construction of an RFieldDescriptor.
RFieldDescriptorBuilder & ParentId(ROOT::DescriptorId_t id)
ROOT::DescriptorId_t GetParentId() const
RFieldDescriptorBuilder & ProjectionSourceId(ROOT::DescriptorId_t id)
RFieldDescriptorBuilder & Structure(const ROOT::ENTupleStructure &structure)
RFieldDescriptorBuilder & TypeVersion(std::uint32_t typeVersion)
RFieldDescriptorBuilder & NRepetitions(std::uint64_t nRepetitions)
RFieldDescriptorBuilder & FieldVersion(std::uint32_t fieldVersion)
RFieldDescriptorBuilder & FieldId(ROOT::DescriptorId_t fieldId)
RFieldDescriptorBuilder & TypeName(const std::string &typeName)
static RFieldDescriptorBuilder FromField(const RFieldBase &field)
Make a new RFieldDescriptorBuilder based off a live NTuple field.
RFieldDescriptorBuilder & FieldName(const std::string &fieldName)
RResult< RFieldDescriptor > MakeDescriptor() const
Attempt to make a field descriptor.
RFieldDescriptorBuilder()=default
Make an empty dangling field descriptor.
RFieldDescriptorBuilder & TypeChecksum(const std::optional< std::uint32_t > typeChecksum)
RFieldDescriptorBuilder & TypeAlias(const std::string &typeAlias)
RFieldDescriptorBuilder & FieldDescription(const std::string &fieldDescription)
A helper class for piece-wise construction of an RNTupleDescriptor.
RNTupleSerializer::StreamerInfoMap_t BuildStreamerInfos() const
Get the streamer info records for custom classes. Currently requires the corresponding dictionaries t...
RResult< void > AddExtraTypeInfo(RExtraTypeInfoDescriptor &&extraTypeInfoDesc)
RResult< void > AddColumn(RColumnDescriptor &&columnDesc)
void BeginHeaderExtension()
Mark the beginning of the header extension; any fields and columns added after a call to this functio...
void ShiftAliasColumns(std::uint32_t offset)
If the descriptor is constructed in pieces consisting of physical and alias columns (regular and proj...
RResult< void > AddClusterGroup(RClusterGroupDescriptor &&clusterGroup)
void SetSchemaFromExisting(const RNTupleDescriptor &descriptor)
Copies the "schema" part of descriptor into the builder's descriptor.
RNTupleDescriptor fDescriptor
RResult< void > AddFieldProjection(ROOT::DescriptorId_t sourceId, ROOT::DescriptorId_t targetId)
void ReplaceExtraTypeInfo(RExtraTypeInfoDescriptor &&extraTypeInfoDesc)
void SetOnDiskHeaderSize(std::uint64_t size)
void AddToOnDiskFooterSize(std::uint64_t size)
The real footer size also include the page list envelopes.
void SetNTuple(const std::string_view name, const std::string_view description)
void SetFeature(unsigned int flag)
const RNTupleDescriptor & GetDescriptor() const
RResult< void > AddFieldLink(ROOT::DescriptorId_t fieldId, ROOT::DescriptorId_t linkId)
RResult< void > AddCluster(RClusterDescriptor &&clusterDesc)
RResult< void > EnsureFieldExists(ROOT::DescriptorId_t fieldId) const
RResult< void > EnsureValidDescriptor() const
Checks whether invariants hold:
void AddField(const RFieldDescriptor &fieldDesc)
RNTupleDescriptor MoveDescriptor()
void Reset()
Clears so-far stored clusters, fields, and columns and return to a pristine ntuple descriptor.
void SetOnDiskHeaderXxHash3(std::uint64_t xxhash3)
std::map< Int_t, TVirtualStreamerInfo * > StreamerInfoMap_t
std::forward_iterator_tag iterator_category
Iter_t fIter
The wrapped map iterator.
std::ptrdiff_t difference_type
bool operator==(const iterator &rh) const
bool operator!=(const iterator &rh) const
std::unordered_map< ROOT::DescriptorId_t, RColumnRange >::const_iterator Iter_t
const RClusterDescriptor & fDesc
RColumnRangeIterable(const RClusterDescriptor &desc)
The window of element indexes of a particular column in a particular cluster.
void SetNElements(ROOT::NTupleSize_t n)
std::optional< std::uint32_t > fCompressionSettings
The usual format for ROOT compression settings (see Compression.h).
ROOT::NTupleSize_t fNElements
The number of column elements in the cluster.
bool fIsSuppressed
Suppressed columns have an empty page range and unknown compression settings.
void IncrementNElements(ROOT::NTupleSize_t by)
ROOT::NTupleSize_t fFirstElementIndex
The global index of the first column element in the cluster.
void SetCompressionSettings(std::optional< std::uint32_t > comp)
ROOT::DescriptorId_t GetPhysicalColumnId() const
RColumnRange(ROOT::DescriptorId_t physicalColumnId, ROOT::NTupleSize_t firstElementIndex, ROOT::NTupleSize_t nElements, std::optional< std::uint32_t > compressionSettings, bool suppressed=false)
ROOT::DescriptorId_t fPhysicalColumnId
bool Contains(ROOT::NTupleSize_t index) const
void IncrementFirstElementIndex(ROOT::NTupleSize_t by)
ROOT::NTupleSize_t GetFirstElementIndex() const
void SetIsSuppressed(bool suppressed)
bool operator==(const RColumnRange &other) const
void SetPhysicalColumnId(ROOT::DescriptorId_t id)
void SetFirstElementIndex(ROOT::NTupleSize_t idx)
bool IsSuppressed() const
ROOT::NTupleSize_t GetNElements() const
std::optional< std::uint32_t > GetCompressionSettings() const
Meta-data for a set of ntuple clusters.
RClusterDescriptor & operator=(RClusterDescriptor &&other)=default
ROOT::DescriptorId_t GetId() const
RClusterDescriptor(RClusterDescriptor &&other)=default
std::uint64_t GetNBytesOnStorage() const
RColumnRangeIterable GetColumnRangeIterable() const
Returns an iterator over pairs { columnId, columnRange }. The iteration order is unspecified.
ROOT::NTupleSize_t GetFirstEntryIndex() const
std::unordered_map< ROOT::DescriptorId_t, RPageRange > fPageRanges
RClusterDescriptor(const RClusterDescriptor &other)=delete
const RColumnRange & GetColumnRange(ROOT::DescriptorId_t physicalId) const
ROOT::DescriptorId_t fClusterId
RClusterDescriptor & operator=(const RClusterDescriptor &other)=delete
const RPageRange & GetPageRange(ROOT::DescriptorId_t physicalId) const
RClusterDescriptor Clone() const
bool ContainsColumn(ROOT::DescriptorId_t physicalId) const
bool operator==(const RClusterDescriptor &other) const
std::unordered_map< ROOT::DescriptorId_t, RColumnRange > fColumnRanges
ROOT::NTupleSize_t fFirstEntryIndex
Clusters can be swapped by adjusting the entry offsets.
RClusterDescriptor()=default
ROOT::NTupleSize_t GetNEntries() const
ROOT::NTupleSize_t fNEntries
Clusters are bundled in cluster groups.
std::uint64_t fMinEntry
The minimum first entry number of the clusters in the cluster group.
std::vector< ROOT::DescriptorId_t > fClusterIds
The cluster IDs can be empty if the corresponding page list is not loaded.
RClusterGroupDescriptor Clone() const
RClusterGroupDescriptor(const RClusterGroupDescriptor &other)=delete
ROOT::DescriptorId_t GetId() const
RClusterGroupDescriptor & operator=(RClusterGroupDescriptor &&other)=default
std::uint64_t fEntrySpan
Number of entries that are (partially for sharded clusters) covered by this cluster group.
std::uint64_t fPageListLength
Uncompressed size of the page list.
std::uint64_t GetMinEntry() const
std::uint64_t GetPageListLength() const
const std::vector< ROOT::DescriptorId_t > & GetClusterIds() const
RClusterGroupDescriptor CloneSummary() const
RClusterGroupDescriptor & operator=(const RClusterGroupDescriptor &other)=delete
std::uint32_t fNClusters
Number of clusters is always known even if the cluster IDs are not (yet) populated.
std::uint32_t GetNClusters() const
RNTupleLocator fPageListLocator
The page list that corresponds to the cluster group.
RClusterGroupDescriptor()=default
ROOT::DescriptorId_t fClusterGroupId
bool HasClusterDetails() const
A cluster group is loaded in two stages.
bool operator==(const RClusterGroupDescriptor &other) const
RNTupleLocator GetPageListLocator() const
RClusterGroupDescriptor(RClusterGroupDescriptor &&other)=default
std::uint64_t GetEntrySpan() const
Meta-data stored for every column of an ntuple.
bool IsSuppressedDeferredColumn() const
std::optional< RValueRange > fValueRange
Optional value range (used e.g. by quantized real fields)
std::uint16_t fBitsOnStorage
The size in bits of elements of this column.
ROOT::ENTupleColumnType GetType() const
bool IsDeferredColumn() const
RColumnDescriptor & operator=(RColumnDescriptor &&other)=default
RColumnDescriptor(const RColumnDescriptor &other)=delete
std::uint16_t GetBitsOnStorage() const
RColumnDescriptor Clone() const
Get a copy of the descriptor.
ROOT::DescriptorId_t fLogicalColumnId
The actual column identifier, which is the link to the corresponding field.
std::uint64_t GetFirstElementIndex() const
RColumnDescriptor(RColumnDescriptor &&other)=default
RColumnDescriptor & operator=(const RColumnDescriptor &other)=delete
RColumnDescriptor()=default
ROOT::DescriptorId_t GetLogicalId() const
ROOT::ENTupleColumnType fType
The on-disk column type.
std::optional< RValueRange > GetValueRange() const
ROOT::DescriptorId_t fPhysicalColumnId
Usually identical to the logical column ID, except for alias columns where it references the shadowed...
std::int64_t fFirstElementIndex
The absolute value specifies the index for the first stored element for this column.
std::uint16_t GetRepresentationIndex() const
ROOT::DescriptorId_t fFieldId
Every column belongs to one and only one field.
std::uint16_t fRepresentationIndex
A field may use multiple column representations, which are numbered from zero to $m$.
bool IsAliasColumn() const
std::uint32_t GetIndex() const
ROOT::DescriptorId_t GetPhysicalId() const
std::uint32_t fIndex
A field can be serialized into several columns, which are numbered from zero to $n$.
bool operator==(const RColumnDescriptor &other) const
ROOT::DescriptorId_t GetFieldId() const
A field translates read and write calls from/to underlying columns to/from tree values.
Meta-data stored for every field of an ntuple.
RFieldDescriptor & operator=(RFieldDescriptor &&other)=default
ROOT::DescriptorId_t GetId() const
ROOT::DescriptorId_t GetProjectionSourceId() const
const std::string & GetFieldName() const
const std::string & GetTypeName() const
const std::string & GetFieldDescription() const
ROOT::ENTupleStructure GetStructure() const
std::uint32_t fTypeVersion
The version of the C++ type itself.
std::uint32_t fColumnCardinality
The number of columns in the column representations of the field.
std::uint32_t GetTypeVersion() const
std::optional< std::uint32_t > fTypeChecksum
For custom classes, we store the ROOT TClass reported checksum to facilitate the use of I/O rules tha...
ROOT::DescriptorId_t fParentId
Establishes sub field relationships, such as classes and collections.
bool IsCustomClass() const
Tells if the field describes a user-defined class rather than a fundamental type, a collection,...
std::string fFieldDescription
Free text set by the user.
const std::string & GetTypeAlias() const
std::string fFieldName
The leaf name, not including parent fields.
std::uint32_t GetFieldVersion() const
RFieldDescriptor()=default
std::uint32_t fFieldVersion
The version of the C++-type-to-column translation mechanics.
ROOT::DescriptorId_t fFieldId
bool IsProjectedField() const
ROOT::DescriptorId_t fProjectionSourceId
For projected fields, the source field ID.
std::unique_ptr< RFieldBase > CreateField(const RNTupleDescriptor &ntplDesc, const ROOT::RCreateFieldOptions &options={}) const
In general, we create a field simply from the C++ type name.
RFieldDescriptor(const RFieldDescriptor &other)=delete
ROOT::DescriptorId_t GetParentId() const
std::vector< ROOT::DescriptorId_t > fLogicalColumnIds
The ordered list of columns attached to this field: first by representation index then by column inde...
std::uint64_t GetNRepetitions() const
RFieldDescriptor Clone() const
Get a copy of the descriptor.
bool operator==(const RFieldDescriptor &other) const
std::vector< ROOT::DescriptorId_t > fLinkIds
The pointers in the other direction from parent to children.
std::string fTypeAlias
A typedef or using directive that resolved to the type name during field creation.
ROOT::ENTupleStructure fStructure
The structural information carried by this field in the data model tree.
const std::vector< ROOT::DescriptorId_t > & GetLinkIds() const
const std::vector< ROOT::DescriptorId_t > & GetLogicalColumnIds() const
RFieldDescriptor & operator=(const RFieldDescriptor &other)=delete
RFieldDescriptor(RFieldDescriptor &&other)=default
std::optional< std::uint32_t > GetTypeChecksum() const
std::string fTypeName
The C++ type that was used when writing the field.
std::uint32_t GetColumnCardinality() const
std::uint64_t fNRepetitions
The number of elements per entry for fixed-size arrays.
std::forward_iterator_tag iterator_category
bool operator!=(const iterator &rh) const
RIterator(const RNTupleDescriptor &ntuple, std::size_t index)
bool operator==(const iterator &rh) const
const RNTupleDescriptor & fNTuple
The enclosing range's NTuple.
std::ptrdiff_t difference_type
Used to loop over all the clusters of an ntuple (in unspecified order)
RClusterDescriptorIterable(const RNTupleDescriptor &ntuple)
const RNTupleDescriptor & fNTuple
The associated NTuple for this range.
std::forward_iterator_tag iterator_category
std::ptrdiff_t difference_type
RIterator(const RNTupleDescriptor &ntuple, std::size_t index)
const RNTupleDescriptor & fNTuple
The enclosing range's NTuple.
bool operator!=(const iterator &rh) const
bool operator==(const iterator &rh) const
Used to loop over all the cluster groups of an ntuple (in unspecified order)
RClusterGroupDescriptorIterable(const RNTupleDescriptor &ntuple)
const RNTupleDescriptor & fNTuple
The associated NTuple for this range.
bool operator==(const iterator &rh) const
const std::vector< ROOT::DescriptorId_t > & fColumns
The enclosing range's descriptor id list.
bool operator!=(const iterator &rh) const
std::ptrdiff_t difference_type
RIterator(const RNTupleDescriptor &ntuple, const std::vector< ROOT::DescriptorId_t > &columns, std::size_t index)
std::forward_iterator_tag iterator_category
const RNTupleDescriptor & fNTuple
The enclosing range's NTuple.
Used to loop over a field's associated columns.
std::vector< ROOT::DescriptorId_t > fColumns
The descriptor ids of the columns ordered by field, representation, and column index.
const RNTupleDescriptor & fNTuple
The associated NTuple for this range.
RColumnDescriptorIterable(const RNTupleDescriptor &ntuple, const RFieldDescriptor &fieldDesc)
bool operator!=(const iterator &rh) const
const RNTupleDescriptor & fNTuple
The enclosing range's NTuple.
bool operator==(const iterator &rh) const
std::forward_iterator_tag iterator_category
const std::vector< ROOT::DescriptorId_t > & fFieldChildren
The enclosing range's descriptor id list.
std::ptrdiff_t difference_type
RIterator(const RNTupleDescriptor &ntuple, const std::vector< ROOT::DescriptorId_t > &fieldChildren, std::size_t index)
Used to loop over a field's child fields.
const RNTupleDescriptor & fNTuple
The associated NTuple for this range.
RFieldDescriptorIterable(const RNTupleDescriptor &ntuple, const RFieldDescriptor &field, const std::function< bool(ROOT::DescriptorId_t, ROOT::DescriptorId_t)> &comparator)
Sort the range using an arbitrary comparison function.
RFieldDescriptorIterable(const RNTupleDescriptor &ntuple, const RFieldDescriptor &field)
std::vector< ROOT::DescriptorId_t > fFieldChildren
The descriptor ids of the child fields.
The on-storage meta-data of an ntuple.
std::uint64_t fNPhysicalColumns
Updated by the descriptor builder when columns are added.
std::uint64_t fGeneration
Once constructed by an RNTupleDescriptorBuilder, the descriptor is mostly immutable except for set of...
ROOT::DescriptorId_t FindPhysicalColumnId(ROOT::DescriptorId_t fieldId, std::uint32_t columnIndex, std::uint16_t representationIndex) const
std::uint64_t fOnDiskFooterSize
Like fOnDiskHeaderSize, contains both cluster summaries and page locations.
std::size_t GetNLogicalColumns() const
std::uint64_t fNEntries
Updated by the descriptor builder when the cluster groups are added.
const RClusterGroupDescriptor & GetClusterGroupDescriptor(ROOT::DescriptorId_t clusterGroupId) const
ROOT::NTupleSize_t GetNElements(ROOT::DescriptorId_t physicalColumnId) const
std::set< unsigned int > fFeatureFlags
std::vector< RExtraTypeInfoDescriptor > fExtraTypeInfoDescriptors
RResult< void > DropClusterGroupDetails(ROOT::DescriptorId_t clusterGroupId)
RResult< void > AddClusterGroupDetails(ROOT::DescriptorId_t clusterGroupId, std::vector< RClusterDescriptor > &clusterDescs)
Methods to load and drop cluster group details (cluster IDs and page locations)
std::unique_ptr< RNTupleModel > CreateModel(const RCreateModelOptions &options=RCreateModelOptions()) const
Re-create the C++ model from the stored meta-data.
const std::string & GetName() const
std::uint64_t GetOnDiskHeaderXxHash3() const
std::uint64_t GetOnDiskHeaderSize() const
std::size_t GetNClusters() const
std::vector< ROOT::DescriptorId_t > fSortedClusterGroupIds
References cluster groups sorted by entry range and thus allows for binary search.
ROOT::DescriptorId_t GetFieldZeroId() const
Returns the logical parent of all top-level NTuple data fields.
RColumnDescriptorIterable GetColumnIterable() const
const RColumnDescriptor & GetColumnDescriptor(ROOT::DescriptorId_t columnId) const
ROOT::DescriptorId_t FindPrevClusterId(ROOT::DescriptorId_t clusterId) const
const RFieldDescriptor & GetFieldDescriptor(ROOT::DescriptorId_t fieldId) const
RNTupleDescriptor(RNTupleDescriptor &&other)=default
std::uint64_t fNClusters
Updated by the descriptor builder when the cluster groups are added.
std::string fName
The ntuple name needs to be unique in a given storage location (file)
ROOT::DescriptorId_t FindLogicalColumnId(ROOT::DescriptorId_t fieldId, std::uint32_t columnIndex, std::uint16_t representationIndex) const
std::unordered_map< ROOT::DescriptorId_t, RFieldDescriptor > fFieldDescriptors
RNTupleDescriptor(const RNTupleDescriptor &other)=delete
std::uint64_t GetGeneration() const
std::size_t GetNExtraTypeInfos() const
RNTupleDescriptor Clone() const
RNTupleDescriptor()=default
static constexpr unsigned int kFeatureFlagTest
RNTupleDescriptor & operator=(RNTupleDescriptor &&other)=default
std::uint64_t fOnDiskHeaderXxHash3
Set by the descriptor builder when deserialized.
std::size_t GetNFields() const
std::unordered_map< ROOT::DescriptorId_t, RColumnDescriptor > fColumnDescriptors
bool operator==(const RNTupleDescriptor &other) const
ROOT::DescriptorId_t FindFieldId(std::string_view fieldName, ROOT::DescriptorId_t parentId) const
std::uint64_t GetOnDiskFooterSize() const
ROOT::DescriptorId_t FindNextClusterId(ROOT::DescriptorId_t clusterId) const
ROOT::DescriptorId_t fFieldZeroId
Set by the descriptor builder.
ROOT::NTupleSize_t GetNEntries() const
We know the number of entries from adding the cluster summaries.
RExtraTypeInfoDescriptorIterable GetExtraTypeInfoIterable() const
std::size_t GetNClusterGroups() const
std::unordered_map< ROOT::DescriptorId_t, RClusterDescriptor > fClusterDescriptors
May contain only a subset of all the available clusters, e.g.
std::unique_ptr< RHeaderExtension > fHeaderExtension
RClusterGroupDescriptorIterable GetClusterGroupIterable() const
bool HasFeature(unsigned int flag) const
std::size_t GetNPhysicalColumns() const
RNTupleDescriptor & operator=(const RNTupleDescriptor &other)=delete
std::unordered_map< ROOT::DescriptorId_t, RClusterGroupDescriptor > fClusterGroupDescriptors
const std::string & GetDescription() const
RNTupleDescriptor CloneSchema() const
Creates a descriptor containing only the schema information about this RNTuple, i....
std::size_t GetNActiveClusters() const
RClusterDescriptorIterable GetClusterIterable() const
std::string fDescription
Free text from the user.
RFieldDescriptorIterable GetTopLevelFields() const
const RClusterDescriptor & GetClusterDescriptor(ROOT::DescriptorId_t clusterId) const
ROOT::DescriptorId_t FindClusterId(ROOT::NTupleSize_t entryIdx) const
std::string GetQualifiedFieldName(ROOT::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 ...
const RHeaderExtension * GetHeaderExtension() const
Return header extension information; if the descriptor does not have a header extension,...
std::uint64_t fOnDiskHeaderSize
Set by the descriptor builder when deserialized.
const RFieldDescriptor & GetFieldZero() const
void PrintInfo(std::ostream &output) const
RFieldDescriptorIterable GetFieldIterable(const RFieldDescriptor &fieldDesc) const
std::vector< std::uint64_t > GetFeatureFlags() const
A column element encapsulates the translation between basic C++ types and their column representation...
Base class for all ROOT issued exceptions.
Generic information about the physical location of data.
const_iterator begin() const
RNTupleDescriptor CloneDescriptorSchema(const RNTupleDescriptor &desc)
EExtraTypeInfoIds
Used in RExtraTypeInfoDescriptor.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
constexpr NTupleSize_t kInvalidNTupleIndex
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
constexpr DescriptorId_t kInvalidDescriptorId
ENTupleStructure
The fields in the ntuple model tree can carry different structural information about the type system.
RValueRange(double min, double max)
RValueRange(std::pair< double, double > range)
bool operator==(RValueRange other) const
bool operator!=(RValueRange other) const
Modifiers passed to CreateModel
bool GetForwardCompatible() const
void SetForwardCompatible(bool v)
void SetReconstructProjections(bool v)
bool GetReconstructProjections() const
bool fCreateBare
If true, the model will be created without a default entry (bare model).
bool fReconstructProjections
If set to true, projected fields will be reconstructed as such.
bool fEmulateUnknownTypes
If true, fields with a user defined type that have no available dictionaries will be reconstructed as...
void SetEmulateUnknownTypes(bool v)
bool GetCreateBare() const
void SetCreateBare(bool v)
bool fForwardCompatible
Normally creating a model will fail if any of the reconstructed fields contains an unknown column typ...
bool GetEmulateUnknownTypes() const