Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RNTuple.hxx
Go to the documentation of this file.
1/// \file ROOT/RNTuple.hxx
2/// \ingroup NTuple
3/// \author Jakob Blomer <jblomer@cern.ch>
4/// \date 2023-09-19
5
6/*************************************************************************
7 * Copyright (C) 1995-2023, Rene Brun and Fons Rademakers. *
8 * All rights reserved. *
9 * *
10 * For the licensing terms see $ROOTSYS/LICENSE. *
11 * For the list of contributors see $ROOTSYS/README/CREDITS. *
12 *************************************************************************/
13
14#ifndef ROOT_RNTuple
15#define ROOT_RNTuple
16
17#include <Rtypes.h>
18
19#include <cstdint>
20
21class TCollection;
22class TFile;
23class TFileMergeInfo;
24
25namespace ROOT {
26
27class RNTuple;
28
29namespace Internal {
30class RPageSourceFile;
31class RNTupleFileWriter;
32
33RNTuple CreateAnchor(std::uint16_t versionEpoch, std::uint16_t versionMajor, std::uint16_t versionMinor,
34 std::uint16_t versionPatch, std::uint64_t seekHeader, std::uint64_t nbytesHeader,
35 std::uint64_t lenHeader, std::uint64_t seekFooter, std::uint64_t nbytesFooter,
36 std::uint64_t lenFooter, std::uint64_t maxKeySize);
37
38} // namespace Internal
39
40// clang-format off
41/**
42\class ROOT::RNTuple
43\ingroup NTuple
44\brief Representation of an RNTuple data set in a ROOT file
45
46\note This is the documentation for the RNTuple anchor class. For a generic introduction to RNTuple, see \ref NTuple "the RNTuple Introduction". For reading RNTuples, see RNTupleReader. For writing RNTuples, see RNTupleWriter.
47For exploring the contents of an RNTuple, use ROOT::RDataFrame. See \ref rosetta-stone for examples how to draw and scan the contents.
48
49The class points to the header and footer keys, which in turn have the references to the pages (via page lists).
50Only the RNTuple key will be listed in the list of keys. Like TBaskets, the pages are "invisible" keys.
51Byte offset references in the RNTuple header and footer reference directly the data part of page records,
52skipping the TFile key part.
53
54In the list of keys, this object appears as "ROOT::RNTuple".
55It is the user-facing representation of an RNTuple data set in a ROOT file and
56it provides an API entry point to an RNTuple stored in a ROOT file. Its main purpose is to
57construct a page source for an RNTuple, which in turn can be used to read an RNTuple with an RDF or
58an RNTupleReader.
59
60For instance, for an RNTuple called "Events" in a ROOT file, usage can be
61~~~ {.cpp}
62auto f = TFile::Open("data.root");
63auto ntpl = f->Get<ROOT::RNTuple>("Events");
64auto reader = RNTupleReader::Open(ntpl);
65~~~
66*/
67// clang-format on
71
72 friend ROOT::RNTuple
73 Internal::CreateAnchor(std::uint16_t versionEpoch, std::uint16_t versionMajor, std::uint16_t versionMinor,
74 std::uint16_t versionPatch, std::uint64_t seekHeader, std::uint64_t nbytesHeader,
75 std::uint64_t lenHeader, std::uint64_t seekFooter, std::uint64_t nbytesFooter,
76 std::uint64_t lenFooter, std::uint64_t maxKeySize);
77
78public:
79 static constexpr std::uint16_t kVersionEpoch = 1;
80 static constexpr std::uint16_t kVersionMajor = 0;
81 static constexpr std::uint16_t kVersionMinor = 2;
82 static constexpr std::uint16_t kVersionPatch = 0;
83
84 /// Returns the RNTuple version in the following form:
85 /// Epoch: 2 most significant bytes
86 /// Major: next 2 bytes
87 /// Minor: next 2 bytes
88 /// Patch: 2 least significant bytes
89 /// This integer can be compared with that of another RNTuple to determine which one has the highest overall version.
90 static constexpr std::uint64_t GetCurrentVersion()
91 {
92 return (static_cast<std::uint64_t>(kVersionEpoch) << 48) | (static_cast<std::uint64_t>(kVersionMajor) << 32) |
93 (static_cast<std::uint64_t>(kVersionMinor) << 16) | (static_cast<std::uint64_t>(kVersionPatch));
94 }
95
96private:
97 /// Version of the RNTuple binary format that the writer supports (see specification).
98 /// Changing the epoch indicates backward-incompatible changes
100 /// Changing the major version indicates forward incompatible changes; such changes should correspond to a new
101 /// bit in the feature flag of the RNTuple header.
102 /// For the pre-release epoch 0, indicates the release candidate number
104 /// Changing the minor version indicates new optional fields added to the RNTuple metadata
106 /// Changing the patch version indicates clarifications or new backported features from newer binary format versions
108 /// The file offset of the header excluding the TKey part
109 std::uint64_t fSeekHeader = 0;
110 /// The size of the compressed ntuple header
111 std::uint64_t fNBytesHeader = 0;
112 /// The size of the uncompressed ntuple header
113 std::uint64_t fLenHeader = 0;
114 /// The file offset of the footer excluding the TKey part
115 std::uint64_t fSeekFooter = 0;
116 /// The size of the compressed ntuple footer
117 std::uint64_t fNBytesFooter = 0;
118 /// The size of the uncompressed ntuple footer
119 std::uint64_t fLenFooter = 0;
120 /// The maximum size for a TKey payload. Payloads bigger than this size will be written as multiple blobs.
121 std::uint64_t fMaxKeySize = 0;
122
123 TFile *fFile = nullptr; ///<! The file from which the ntuple was streamed, registered in the custom streamer
124
125public:
126 RNTuple() = default;
127 ~RNTuple() = default;
128
129 std::uint16_t GetVersionEpoch() const { return fVersionEpoch; }
130 std::uint16_t GetVersionMajor() const { return fVersionMajor; }
131 std::uint16_t GetVersionMinor() const { return fVersionMinor; }
132 std::uint16_t GetVersionPatch() const { return fVersionPatch; }
133
134 std::uint64_t GetSeekHeader() const { return fSeekHeader; }
135 std::uint64_t GetNBytesHeader() const { return fNBytesHeader; }
136 std::uint64_t GetLenHeader() const { return fLenHeader; }
137
138 std::uint64_t GetSeekFooter() const { return fSeekFooter; }
139 std::uint64_t GetNBytesFooter() const { return fNBytesFooter; }
140 std::uint64_t GetLenFooter() const { return fLenFooter; }
141 std::uint64_t GetMaxKeySize() const { return fMaxKeySize; }
142
143 /// RNTuple implements the hadd MergeFile interface
144 /// Merge this NTuple with the input list entries
146
147 /// NOTE: if you change this version you also need to update RTFNTuple::fClassVersion in RMiniFile.cxx
149}; // class RNTuple
150
151} // namespace ROOT
152
153#endif
#define ClassDefNV(name, id)
Definition Rtypes.h:352
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
Write RNTuple data blocks in a TFile or a bare file container.
Storage provider that reads ntuple pages from a file.
Representation of an RNTuple data set in a ROOT file.
Definition RNTuple.hxx:68
Long64_t Merge(TCollection *input, TFileMergeInfo *mergeInfo)
RNTuple implements the hadd MergeFile interface Merge this NTuple with the input list entries.
std::uint64_t fSeekFooter
The file offset of the footer excluding the TKey part.
Definition RNTuple.hxx:115
std::uint64_t fNBytesFooter
The size of the compressed ntuple footer.
Definition RNTuple.hxx:117
std::uint64_t GetLenFooter() const
Definition RNTuple.hxx:140
static constexpr std::uint16_t kVersionPatch
Definition RNTuple.hxx:82
std::uint64_t GetSeekHeader() const
Definition RNTuple.hxx:134
std::uint16_t fVersionMinor
Changing the minor version indicates new optional fields added to the RNTuple metadata.
Definition RNTuple.hxx:105
static constexpr std::uint16_t kVersionMajor
Definition RNTuple.hxx:80
RNTuple()=default
std::uint16_t GetVersionMajor() const
Definition RNTuple.hxx:130
std::uint64_t fSeekHeader
The file offset of the header excluding the TKey part.
Definition RNTuple.hxx:109
std::uint64_t GetNBytesFooter() const
Definition RNTuple.hxx:139
static constexpr std::uint16_t kVersionEpoch
Definition RNTuple.hxx:79
std::uint64_t GetNBytesHeader() const
Definition RNTuple.hxx:135
std::uint64_t fMaxKeySize
The maximum size for a TKey payload. Payloads bigger than this size will be written as multiple blobs...
Definition RNTuple.hxx:121
~RNTuple()=default
std::uint16_t GetVersionMinor() const
Definition RNTuple.hxx:131
std::uint64_t fNBytesHeader
The size of the compressed ntuple header.
Definition RNTuple.hxx:111
static constexpr std::uint64_t GetCurrentVersion()
Returns the RNTuple version in the following form: Epoch: 2 most significant bytes Major: next 2 byte...
Definition RNTuple.hxx:90
std::uint64_t fLenHeader
The size of the uncompressed ntuple header.
Definition RNTuple.hxx:113
std::uint16_t GetVersionPatch() const
Definition RNTuple.hxx:132
std::uint64_t fLenFooter
The size of the uncompressed ntuple footer.
Definition RNTuple.hxx:119
std::uint64_t GetMaxKeySize() const
Definition RNTuple.hxx:141
std::uint64_t GetLenHeader() const
Definition RNTuple.hxx:136
std::uint16_t fVersionPatch
Changing the patch version indicates clarifications or new backported features from newer binary form...
Definition RNTuple.hxx:107
TFile * fFile
! The file from which the ntuple was streamed, registered in the custom streamer
Definition RNTuple.hxx:123
std::uint16_t fVersionMajor
Changing the major version indicates forward incompatible changes; such changes should correspond to ...
Definition RNTuple.hxx:103
std::uint64_t GetSeekFooter() const
Definition RNTuple.hxx:138
static constexpr std::uint16_t kVersionMinor
Definition RNTuple.hxx:81
std::uint16_t fVersionEpoch
Version of the RNTuple binary format that the writer supports (see specification).
Definition RNTuple.hxx:99
std::uint16_t GetVersionEpoch() const
Definition RNTuple.hxx:129
Collection abstract base class.
Definition TCollection.h:65
A class to pass information from the TFileMerger to the objects being merged.
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:130
RNTuple CreateAnchor(std::uint16_t versionEpoch, std::uint16_t versionMajor, std::uint16_t versionMinor, std::uint16_t versionPatch, std::uint64_t seekHeader, std::uint64_t nbytesHeader, std::uint64_t lenHeader, std::uint64_t seekFooter, std::uint64_t nbytesFooter, std::uint64_t lenFooter, std::uint64_t maxKeySize)
Definition RNTuple.cxx:52