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
32class TTreeReaderOpaqueValue;
33class TTreeReaderUntypedArray;
34class TTreeReaderUntypedValue;
35
36namespace RDF {
37
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
96 std::unique_ptr<ROOT::Internal::TTreeReaderUntypedArray> fTreeArray;
97 ECollectionType fCollectionType;
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.
101 RVec<Byte_t> fRVec{};
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
106 Long64_t fLastEntry = -1;
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
112 bool fCopyWarningPrinted = false;
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
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
size_t fValueSize
long long Long64_t
Portable signed long integer 8 bytes.
Definition RtypesCore.h:83
#define R__CLING_PTRCHECK(ONOFF)
Definition Rtypes.h:483
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 r
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)
RTreeOpaqueColumnReader(const RTreeOpaqueColumnReader &)=delete
RTreeOpaqueColumnReader & operator=(const RTreeOpaqueColumnReader &)=delete
RTreeOpaqueColumnReader & operator=(RTreeOpaqueColumnReader &&)=delete
RTreeOpaqueColumnReader(RTreeOpaqueColumnReader &&)=delete
std::unique_ptr< ROOT::Internal::TTreeReaderOpaqueValue > fTreeValue
RTreeColumnReader specialization for TTree values read via TTreeReaderUntypedValue.
RTreeUntypedArrayColumnReader & operator=(RTreeUntypedArrayColumnReader &&)=delete
RTreeUntypedArrayColumnReader(const RTreeUntypedArrayColumnReader &)=delete
RTreeUntypedArrayColumnReader(RTreeUntypedArrayColumnReader &&)=delete
RTreeUntypedArrayColumnReader & operator=(const RTreeUntypedArrayColumnReader &)=delete
RTreeColumnReader specialization for TTree values read via TTreeReaderUntypedValue.
RTreeUntypedValueColumnReader(RTreeUntypedValueColumnReader &&)=delete
RTreeUntypedValueColumnReader & operator=(const RTreeUntypedValueColumnReader &)=delete
std::unique_ptr< ROOT::Internal::TTreeReaderUntypedValue > fTreeValue
RTreeUntypedValueColumnReader(const RTreeUntypedValueColumnReader &)=delete
RTreeUntypedValueColumnReader & operator=(RTreeUntypedValueColumnReader &&)=delete
A "std::vector"-like collection of values implementing handy operation to analyse them.
Definition RVec.hxx:1524
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