Interface for iterating over entries of RNTuples and vertically concatenated RNTuples (chains).
Example usage (see ntpl012_processor.C for a full example):
An RNTupleProcessor is created by providing one or more RNTupleOpenSpecs, each of which contains the name and storage location of a single RNTuple. The RNTuples are processed in the order in which they were provided.
The RNTupleProcessor constructor also (optionally) accepts an RNTupleModel, which determines which fields should be read. If no model is provided, a default model based on the descriptor of the first specified RNTuple will be used. If a field that was present in the first RNTuple is not found in a subsequent one, an error will be thrown.
The RNTupleProcessor provides an iterator which gives access to the REntry containing the field data for the current entry. Additional bookkeeping information can be obtained through the RNTupleProcessor itself.
Definition at line 67 of file RNTupleProcessor.hxx.
Classes | |
class | RFieldContext |
Manager for a field as part of the RNTupleProcessor. More... | |
class | RIterator |
Iterator over the entries of an RNTuple, or vertical concatenation thereof. More... | |
Public Member Functions | |
RNTupleProcessor (const RNTupleProcessor &)=delete | |
RNTupleProcessor (RNTupleProcessor &&)=delete | |
virtual | ~RNTupleProcessor ()=default |
RIterator | begin () |
RIterator | end () |
std::size_t | GetCurrentNTupleNumber () const |
Get the index to the RNTuple currently being processed, according to the sources specified upon creation. | |
const REntry & | GetEntry () const |
Returns a reference to the entry used by the processor. | |
NTupleSize_t | GetLocalEntryNumber () const |
Get the entry number local to the RNTuple that is currently being processed. | |
NTupleSize_t | GetNEntriesProcessed () const |
Get the total number of entries processed so far. | |
RNTupleProcessor & | operator= (const RNTupleProcessor &)=delete |
RNTupleProcessor & | operator= (RNTupleProcessor &&)=delete |
Static Public Member Functions | |
static std::unique_ptr< RNTupleProcessor > | Create (const RNTupleOpenSpec &ntuple) |
static std::unique_ptr< RNTupleProcessor > | Create (const RNTupleOpenSpec &ntuple, RNTupleModel &model) |
static std::unique_ptr< RNTupleProcessor > | CreateChain (const std::vector< RNTupleOpenSpec > &ntuples, std::unique_ptr< RNTupleModel > model=nullptr) |
Create a new RNTuple processor chain for vertical concatenation of RNTuples. | |
static std::unique_ptr< RNTupleProcessor > | CreateJoin (const std::vector< RNTupleOpenSpec > &ntuples, const std::vector< std::string > &joinFields, std::vector< std::unique_ptr< RNTupleModel > > models={}) |
Create a new RNTuple processor for horizontallly concatenated RNTuples. | |
Protected Member Functions | |
RNTupleProcessor (const std::vector< RNTupleOpenSpec > &ntuples) | |
virtual NTupleSize_t | Advance ()=0 |
Advance the processor to the next available entry. | |
void | ConnectField (RFieldContext &fieldContext, Internal::RPageSource &pageSource, REntry &entry) |
Creates and connects a concrete field to the current page source, based on its proto field. | |
virtual void | LoadEntry ()=0 |
Fill the entry with values belonging to the current entry number. | |
void | SetLocalEntryNumber (NTupleSize_t entryNumber) |
Set the local (i.e. | |
Protected Attributes | |
std::size_t | fCurrentNTupleNumber |
std::unique_ptr< REntry > | fEntry |
std::unordered_map< std::string, RFieldContext > | fFieldContexts |
NTupleSize_t | fLocalEntryNumber |
NTupleSize_t | fNEntriesProcessed |
std::vector< RNTupleOpenSpec > | fNTuples |
std::unique_ptr< Internal::RPageSource > | fPageSource |
#include <ROOT/RNTupleProcessor.hxx>
|
inlineprotected |
Definition at line 143 of file RNTupleProcessor.hxx.
|
delete |
|
delete |
|
virtualdefault |
|
protectedpure virtual |
Advance the processor to the next available entry.
Checks if the end of the currently connected RNTuple is reached. If this is the case, either the next RNTuple is connected or the iterator has reached the end.
Implemented in ROOT::Experimental::RNTupleSingleProcessor, ROOT::Experimental::RNTupleChainProcessor, and ROOT::Experimental::RNTupleJoinProcessor.
|
inline |
Definition at line 239 of file RNTupleProcessor.hxx.
|
protected |
Creates and connects a concrete field to the current page source, based on its proto field.
Definition at line 100 of file RNTupleProcessor.cxx.
|
static |
Definition at line 35 of file RNTupleProcessor.cxx.
|
static |
Definition at line 44 of file RNTupleProcessor.cxx.
|
static |
Create a new RNTuple processor chain for vertical concatenation of RNTuples.
[in] | ntuples | A list specifying the names and locations of the ntuples to process. |
[in] | model | An RNTupleModel specifying which fields can be read by the processor. If no model is provided, one will be created based on the descriptor of the first ntuple specified. |
Definition at line 50 of file RNTupleProcessor.cxx.
|
static |
Create a new RNTuple processor for horizontallly concatenated RNTuples.
[in] | ntuples | A list specifying the names and locations of the ntuples to process. The first ntuple in the list will be considered the primary ntuple and drives the processor iteration loop. Subsequent ntuples are considered auxiliary, whose entries to be read are determined by the primary ntuple (which does not necessarily have to be sequential). |
[in] | joinFields | The names of the fields on which to join, in case the specified ntuples are unaligned. The join is made based on the combined join field values, and therefore each field has to be present in each specified RNTuple. If an empty list is provided, it is assumed that the specified ntuple are fully aligned, and RNTupleIndex will not be used. |
[in] | models | A list of models for the ntuples. This list must either contain a model for each ntuple in ntuples (following the specification order), or be empty. When the list is empty, the default model (i.e. containing all fields) will be used for each ntuple. |
Definition at line 57 of file RNTupleProcessor.cxx.
|
inline |
Definition at line 240 of file RNTupleProcessor.hxx.
|
inline |
Get the index to the RNTuple currently being processed, according to the sources specified upon creation.
Definition at line 163 of file RNTupleProcessor.hxx.
|
inline |
Returns a reference to the entry used by the processor.
Definition at line 176 of file RNTupleProcessor.hxx.
|
inline |
Get the entry number local to the RNTuple that is currently being processed.
When only one RNTuple is present in the processor chain, the return value is equal to GetGlobalEntryNumber.
Definition at line 169 of file RNTupleProcessor.hxx.
|
inline |
Get the total number of entries processed so far.
When only one RNTuple is present in the processor chain, the return value is equal to GetLocalEntryNumber.
Definition at line 159 of file RNTupleProcessor.hxx.
|
protectedpure virtual |
Fill the entry with values belonging to the current entry number.
Implemented in ROOT::Experimental::RNTupleSingleProcessor, ROOT::Experimental::RNTupleChainProcessor, and ROOT::Experimental::RNTupleJoinProcessor.
|
delete |
|
delete |
|
inlineprotected |
Set the local (i.e.
relative to the page source currently openend) entry number. Used by RNTupleProcessor::RIterator
.
[in] | entryNumber |
Definition at line 141 of file RNTupleProcessor.hxx.
|
protected |
Definition at line 115 of file RNTupleProcessor.hxx.
|
protected |
Definition at line 109 of file RNTupleProcessor.hxx.
|
protected |
Definition at line 112 of file RNTupleProcessor.hxx.
|
protected |
Definition at line 116 of file RNTupleProcessor.hxx.
|
protected |
Definition at line 114 of file RNTupleProcessor.hxx.
|
protected |
Definition at line 108 of file RNTupleProcessor.hxx.
|
protected |
Definition at line 110 of file RNTupleProcessor.hxx.