root
root copied to clipboard
[ntuple] Add initial `RNTupleProcessor` prototype
This PR provides the first steps to the RNTupleProcessor
, which is envisioned as an interface for reading vertically and horizontally composed RNTuples (i.e., chains and friends), and combinations thereof. The interface provides an iterator which gives access to the REntry
containing the field values of the current entry index, as well as some additional bookkeeping information.
At this point, only vertically composed RNTuples (i.e., chains) are supported. Horizontal compositions in the form of (unaligned) friends and the ability to combine vertical and horizontal compositions will be addressed in a future PR. Other additions that will be accounted for in one or more follow-up PRs include:
- The possibility for users to provide their own entries/value pointers to the processor.
- The possibility for users to specify the
RNTupleModel
used to construct the processor entry.- An extension to this involves the ability to specify multiple models, together with the ability to "enable" certain models while iterating. This would enable the possibility to read from certain fields conditionally, e.g. after a cut.
Checklist:
- [x] tested changes locally
- [x] updated the docs (if necessary)
Starting build on ROOT-performance-centos8-multicore
/soversion
, ROOT-ubuntu2204
/nortcxxmod
, ROOT-ubuntu2004
/python3
, mac12arm
/cxx20
, windows10
/default
How to customize builds
Test Results
13 files 13 suites 3d 3h 15m 53s :stopwatch: 2 648 tests 2 648 :white_check_mark: 0 :zzz: 0 :x: 32 613 runs 32 613 :white_check_mark: 0 :zzz: 0 :x:
Results for commit fe7e9fee.
:recycle: This comment has been updated with latest results.
One more thought: we may not need to create the model from the first page source. Since we anyway loop through the top-level field descriptors and create the proto fields, we can at the same time create the entry (and we need the model only to create an entry anyway, afaics).