Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 09:31:59

0001 // Author: Enrico Guiraud CERN 09/2020
0002 // Author: Vincenzo Eduardo Padulano CERN 09/2024
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2024, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_RDF_RTREECOLUMNREADER
0013 #define ROOT_RDF_RTREECOLUMNREADER
0014 
0015 #include "RColumnReaderBase.hxx"
0016 #include <ROOT/RVec.hxx>
0017 #include "ROOT/RDF/Utils.hxx"
0018 #include <Rtypes.h> // Long64_t, R__CLING_PTRCHECK
0019 
0020 #include <array>
0021 #include <memory>
0022 #include <string>
0023 #include <cstddef>
0024 
0025 class TTreeReader;
0026 
0027 namespace ROOT {
0028 namespace Internal {
0029 
0030 class TTreeReaderOpaqueValue;
0031 class TTreeReaderUntypedArray;
0032 class TTreeReaderUntypedValue;
0033 
0034 namespace RDF {
0035 
0036 class R__CLING_PTRCHECK(off) RTreeOpaqueColumnReader final : public ROOT::Detail::RDF::RColumnReaderBase {
0037    std::unique_ptr<ROOT::Internal::TTreeReaderOpaqueValue> fTreeValue;
0038 
0039    void *GetImpl(Long64_t);
0040 
0041 public:
0042    /// Construct the RTreeColumnReader. Actual initialization is performed lazily by the Init method.
0043    RTreeOpaqueColumnReader(TTreeReader &r, std::string_view colName);
0044 
0045    // Rule of five
0046 
0047    RTreeOpaqueColumnReader(const RTreeOpaqueColumnReader &) = delete;
0048    RTreeOpaqueColumnReader &operator=(const RTreeOpaqueColumnReader &) = delete;
0049    RTreeOpaqueColumnReader(RTreeOpaqueColumnReader &&) = delete;
0050    RTreeOpaqueColumnReader &operator=(RTreeOpaqueColumnReader &&) = delete;
0051    ~RTreeOpaqueColumnReader() final; // Define destructor when data member type is fully defined
0052 };
0053 
0054 /// RTreeColumnReader specialization for TTree values read via TTreeReaderUntypedValue
0055 class R__CLING_PTRCHECK(off) RTreeUntypedValueColumnReader final : public ROOT::Detail::RDF::RColumnReaderBase {
0056    std::unique_ptr<ROOT::Internal::TTreeReaderUntypedValue> fTreeValue;
0057 
0058    void *GetImpl(Long64_t);
0059 
0060 public:
0061    RTreeUntypedValueColumnReader(TTreeReader &r, std::string_view colName, std::string_view typeName);
0062 
0063    // Rule of five
0064 
0065    RTreeUntypedValueColumnReader(const RTreeUntypedValueColumnReader &) = delete;
0066    RTreeUntypedValueColumnReader &operator=(const RTreeUntypedValueColumnReader &) = delete;
0067    RTreeUntypedValueColumnReader(RTreeUntypedValueColumnReader &&) = delete;
0068    RTreeUntypedValueColumnReader &operator=(RTreeUntypedValueColumnReader &&) = delete;
0069    ~RTreeUntypedValueColumnReader() final; // Define destructor when data member type is fully defined
0070 };
0071 
0072 /// RTreeColumnReader specialization for TTree values read via TTreeReaderUntypedValue
0073 class R__CLING_PTRCHECK(off) RTreeUntypedArrayColumnReader final : public ROOT::Detail::RDF::RColumnReaderBase {
0074 public:
0075    enum class ECollectionType {
0076       kRVec,
0077       kStdArray,
0078       kRVecBool
0079    };
0080 
0081    RTreeUntypedArrayColumnReader(TTreeReader &r, std::string_view colName, std::string_view valueTypeName,
0082                                  ECollectionType collType);
0083 
0084    // Rule of five
0085 
0086    RTreeUntypedArrayColumnReader(const RTreeUntypedArrayColumnReader &) = delete;
0087    RTreeUntypedArrayColumnReader &operator=(const RTreeUntypedArrayColumnReader &) = delete;
0088    RTreeUntypedArrayColumnReader(RTreeUntypedArrayColumnReader &&) = delete;
0089    RTreeUntypedArrayColumnReader &operator=(RTreeUntypedArrayColumnReader &&) = delete;
0090    ~RTreeUntypedArrayColumnReader() final; // Define destructor when data member type is fully defined
0091 
0092 private:
0093    std::unique_ptr<ROOT::Internal::TTreeReaderUntypedArray> fTreeArray;
0094    ECollectionType fCollectionType;
0095 
0096    using Byte_t = std::byte;
0097    /// We return a reference to this RVec to clients, to guarantee a stable address and contiguous memory layout.
0098    RVec<Byte_t> fRVec{};
0099 
0100    Long64_t fLastEntry = -1;
0101 
0102    /// The size of the collection value type.
0103    std::size_t fValueSize{};
0104 
0105    /// Whether we already printed a warning about performing a copy of the TTreeReaderArray contents
0106    bool fCopyWarningPrinted = false;
0107 
0108    void *GetImpl(Long64_t entry);
0109 };
0110 
0111 } // namespace RDF
0112 } // namespace Internal
0113 } // namespace ROOT
0114 
0115 #endif