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 };
82
83 RTreeUntypedArrayColumnReader(TTreeReader &r, std::string_view colName, std::string_view valueTypeName,
84 ECollectionType collType);
85
86 // Rule of five
87
92 ~RTreeUntypedArrayColumnReader() final; // Define destructor when data member type is fully defined
93
95 std::unique_ptr<ROOT::Internal::TTreeReaderUntypedArray> fTreeArray;
96 ECollectionType fCollectionType;
97
98 using Byte_t = std::byte;
99 /// We return a reference to this RVec to clients, to guarantee a stable address and contiguous memory layout.
100 RVec<Byte_t> fRVec{};
101
102 Long64_t fLastEntry = -1;
103
104 /// The size of the collection value type.
105 std::size_t fValueSize{};
106
107 /// Whether we already printed a warning about performing a copy of the TTreeReaderArray contents
108 bool fCopyWarningPrinted = false;
109
110 void *GetImpl(Long64_t entry) override;
111};
112
114 std::unique_ptr<ROOT::Detail::RDF::RColumnReaderBase> fValueReader;
115 std::unique_ptr<TTreeReaderValue<uint64_t>> fTreeValueMask;
116 unsigned int fMaskIndex = 0;
117
118 void *GetImpl(Long64_t) override;
119
120public:
121 RMaskedColumnReader(TTreeReader &r, std::unique_ptr<ROOT::Detail::RDF::RColumnReaderBase> valueReader,
122 std::string_view maskName, unsigned int maskIndex);
124 void SetColumnReader(std::unique_ptr<ROOT::Detail::RDF::RColumnReaderBase> reader)
125 {
126 fValueReader = std::move(reader);
127 }
128};
129
130} // namespace RDF
131} // namespace Internal
132} // namespace ROOT
133
134#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:1526
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