Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
RTreeColumnReader.hxx
Go to the documentation of this file.
1// Author: Enrico Guiraud CERN 09/2020
2// Author: Vincenzo Eduardo Padulano CERN 09/2024
3
4/*************************************************************************
5 * Copyright (C) 1995-2024, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_RDF_RTREECOLUMNREADER
13#define ROOT_RDF_RTREECOLUMNREADER
14
15#include "RColumnReaderBase.hxx"
16#include <ROOT/RVec.hxx>
17#include "ROOT/RDF/Utils.hxx"
18#include <Rtypes.h> // Long64_t, R__CLING_PTRCHECK
19
20#include <array>
21#include <memory>
22#include <string>
23#include <cstddef>
24
25class TTreeReader;
26template <typename T>
28
29namespace ROOT {
30namespace Internal {
31
35
36namespace RDF {
37
38class R__CLING_PTRCHECK(off) RTreeOpaqueColumnReader final : public ROOT::Detail::RDF::RColumnReaderBase {
39 std::unique_ptr<ROOT::Internal::TTreeReaderOpaqueValue> fTreeValue;
40
41 void *GetImpl(Long64_t) override;
42
43public:
44 /// Construct the RTreeColumnReader. Actual initialization is performed lazily by the Init method.
45 RTreeOpaqueColumnReader(TTreeReader &r, std::string_view colName);
46
47 // Rule of five
48
53 ~RTreeOpaqueColumnReader() final; // Define destructor when data member type is fully defined
54};
55
56/// RTreeColumnReader specialization for TTree values read via TTreeReaderUntypedValue
58 std::unique_ptr<ROOT::Internal::TTreeReaderUntypedValue> fTreeValue;
59
60 void *GetImpl(Long64_t) override;
61
62public:
63 RTreeUntypedValueColumnReader(TTreeReader &r, std::string_view colName, std::string_view typeName);
64
65 // Rule of five
66
71 ~RTreeUntypedValueColumnReader() final; // Define destructor when data member type is fully defined
72};
73
74/// RTreeColumnReader specialization for TTree values read via TTreeReaderUntypedValue
76public:
77 enum class ECollectionType {
78 kRVec,
79 kStdArray,
80 kRVecBool,
81 kStdVector
82 };
83
84 RTreeUntypedArrayColumnReader(TTreeReader &r, std::string_view colName, std::string_view valueTypeName,
85 ECollectionType collType);
86
87 // Rule of five
88
93 ~RTreeUntypedArrayColumnReader() final; // Define destructor when data member type is fully defined
94
95private:
98
99 using Byte_t = std::byte;
100 /// We return a reference to this RVec to clients, to guarantee a stable address and contiguous memory layout.
102
103 /// When the user explicitly requests std::vector<T>, we use this std::vector as a stable storage.
104 std::vector<Byte_t> fStdVector{};
105
107
108 /// The size of the collection value type.
109 std::size_t fValueSize{};
110
111 /// Whether we already printed a warning about performing a copy of the TTreeReaderArray contents
113
114 void *GetImpl(Long64_t entry) override;
115
116 void *ReadStdArray(Long64_t entry);
117 void *ReadStdVector(Long64_t entry);
118 void *ReadRVec(Long64_t entry);
119};
120
121class R__CLING_PTRCHECK(off) RMaskedColumnReader : public ROOT::Detail::RDF::RColumnReaderBase {
122 std::unique_ptr<ROOT::Detail::RDF::RColumnReaderBase> fValueReader;
123 std::unique_ptr<TTreeReaderValue<uint64_t>> fTreeValueMask;
124 unsigned int fMaskIndex = 0;
125
126 void *GetImpl(Long64_t) override;
127
128public:
129 RMaskedColumnReader(TTreeReader &r, std::unique_ptr<ROOT::Detail::RDF::RColumnReaderBase> valueReader,
130 std::string_view maskName, unsigned int maskIndex);
132 void SetColumnReader(std::unique_ptr<ROOT::Detail::RDF::RColumnReaderBase> reader)
133 {
134 fValueReader = std::move(reader);
135 }
136};
137
138} // namespace RDF
139} // namespace Internal
140} // namespace ROOT
141
142#endif
ROOT::R::TRInterface & r
Definition Object.C:4
long long Long64_t
Portable signed long integer 8 bytes.
Definition RtypesCore.h:83
#define R__CLING_PTRCHECK(ONOFF)
Definition Rtypes.h:483
std::unique_ptr< TTreeReaderValue< uint64_t > > fTreeValueMask
std::unique_ptr< ROOT::Detail::RDF::RColumnReaderBase > fValueReader
void SetColumnReader(std::unique_ptr< ROOT::Detail::RDF::RColumnReaderBase > reader)
RMaskedColumnReader(TTreeReader &r, std::unique_ptr< ROOT::Detail::RDF::RColumnReaderBase > valueReader, std::string_view maskName, unsigned int maskIndex)
RTreeOpaqueColumnReader(const RTreeOpaqueColumnReader &)=delete
RTreeOpaqueColumnReader & operator=(const RTreeOpaqueColumnReader &)=delete
RTreeOpaqueColumnReader & operator=(RTreeOpaqueColumnReader &&)=delete
RTreeOpaqueColumnReader(RTreeOpaqueColumnReader &&)=delete
std::unique_ptr< ROOT::Internal::TTreeReaderOpaqueValue > fTreeValue
RTreeOpaqueColumnReader(TTreeReader &r, std::string_view colName)
Construct the RTreeColumnReader. Actual initialization is performed lazily by the Init method.
RTreeColumnReader specialization for TTree values read via TTreeReaderUntypedValue.
bool fCopyWarningPrinted
Whether we already printed a warning about performing a copy of the TTreeReaderArray contents.
RTreeUntypedArrayColumnReader & operator=(RTreeUntypedArrayColumnReader &&)=delete
RTreeUntypedArrayColumnReader(const RTreeUntypedArrayColumnReader &)=delete
RTreeUntypedArrayColumnReader(TTreeReader &r, std::string_view colName, std::string_view valueTypeName, ECollectionType collType)
RTreeUntypedArrayColumnReader(RTreeUntypedArrayColumnReader &&)=delete
RVec< Byte_t > fRVec
We return a reference to this RVec to clients, to guarantee a stable address and contiguous memory la...
std::unique_ptr< ROOT::Internal::TTreeReaderUntypedArray > fTreeArray
std::vector< Byte_t > fStdVector
When the user explicitly requests std::vector<T>, we use this std::vector as a stable storage.
RTreeUntypedArrayColumnReader & operator=(const RTreeUntypedArrayColumnReader &)=delete
std::size_t fValueSize
The size of the collection value type.
RTreeUntypedValueColumnReader(RTreeUntypedValueColumnReader &&)=delete
RTreeUntypedValueColumnReader(TTreeReader &r, std::string_view colName, std::string_view typeName)
RTreeUntypedValueColumnReader & operator=(const RTreeUntypedValueColumnReader &)=delete
std::unique_ptr< ROOT::Internal::TTreeReaderUntypedValue > fTreeValue
RTreeUntypedValueColumnReader(const RTreeUntypedValueColumnReader &)=delete
RTreeUntypedValueColumnReader & operator=(RTreeUntypedValueColumnReader &&)=delete
Read a value in a branch without knowledge of its type.
A "std::vector"-like collection of values implementing handy operation to analyse them.
Definition RVec.hxx:1525
An interface for reading values stored in ROOT columnar datasets.
A simple, robust and fast interface to read values from ROOT columnar datasets such as TTree,...
Definition TTreeReader.h:46
STL class.
Special implementation of ROOT::RRangeCast for TCollection, including a check that the cast target ty...
Definition TObject.h:395