Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
IRootAuxDynIO.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 #ifndef IROOTAUXDYN_IO_H
5 #define IROOTAUXDYN_IO_H
6 
8 
9 #include <string>
10 #include <memory>
11 #include <vector>
12 #include <mutex>
13 #include <tuple>
14 
15 #include "RVersion.h"
16 
17 class TBranch;
18 class TTree;
19 class TFile;
20 class TClass;
21 
22 
23 #if ROOT_VERSION_CODE >= ROOT_VERSION( 6, 35, 0 )
24  namespace ROOT { class RNTupleReader; }
25 #else
26  namespace ROOT::Experimental { class RNTupleReader; }
27  namespace ROOT { using RNTupleReader = ROOT::Experimental::RNTupleReader; }
28 #endif
29 
30 namespace RootAuxDynIO
31 {
32  // The convention for the tuple is <name, type, data>
33  typedef std::tuple<std::string, std::string, void*> attrDataTuple;
34 
36  {
37  public :
46  virtual void addReaderToObject(void* object, size_t row, std::recursive_mutex* iomtx = nullptr) = 0;
47 
48  virtual size_t getBytesRead() const = 0;
49 
50  virtual void resetBytesRead() = 0;
51 
52  virtual ~IRootAuxDynReader() {}
53  };
54 
55 
58  public:
59  virtual ~IRootAuxDynWriter() = default;
60 
63  // may throw exceptions
64  virtual int writeAuxAttributes(const std::string& base_branch, void* object, size_t rows_written ) = 0;
65 
67  virtual bool needsCommit() = 0;
68 
70  virtual int commit() = 0;
71 
73  virtual void setBranchFillMode(bool) = 0;
74  };
75 
79  public:
81  virtual ~IRNTupleAuxDynWriter() = default;
82 
84  virtual std::vector<attrDataTuple> collectAuxAttributes( const std::string& base_branch, void* object ) = 0;
85  };
86 
87 
88 
90  {
91  public:
92  virtual ~IFactoryTool() = default;
93 
94  virtual std::unique_ptr<IRootAuxDynReader>
95  getBranchAuxDynReader(TTree*, TBranch*) const = 0;
96 
97  virtual std::unique_ptr<IRootAuxDynWriter>
98  getBranchAuxDynWriter(TTree&, TClass&, int bufferSize, int splitLevel,
99  int offsettab_len, bool do_branch_fill) const = 0;
100 
101  virtual std::unique_ptr<IRNTupleAuxDynWriter>
102  getNTupleAuxDynWriter(TClass &tc) const = 0;
103 
104  virtual std::unique_ptr<IRootAuxDynReader>
105  getNTupleAuxDynReader(const std::string& field_name, const std::string& field_type,
106  ROOT::RNTupleReader* reader) const = 0;
107 
108 
110  virtual bool hasAuxStore(std::string_view fieldname, TClass *tc) const = 0;
111 
113  virtual bool hasAuxStoreIO(TClass *tc) const = 0;
114 
119  virtual bool isAuxDynBranch(TBranch *branch) const = 0;
120  };
121 
122 } // namespace
123 
124 #endif
125 
query_example.row
row
Definition: query_example.py:24
RootAuxDynIO::IRootAuxDynWriter::~IRootAuxDynWriter
virtual ~IRootAuxDynWriter()=default
RootAuxDynIO::IFactoryTool::getNTupleAuxDynWriter
virtual std::unique_ptr< IRNTupleAuxDynWriter > getNTupleAuxDynWriter(TClass &tc) const =0
RootAuxDynIO::IFactoryTool::isAuxDynBranch
virtual bool isAuxDynBranch(TBranch *branch) const =0
Check is a branch holds AuxStore objects.
RootAuxDynIO::IRootAuxDynWriter
Interface for an AuxDyn Writer - TTree based.
Definition: IRootAuxDynIO.h:57
RootAuxDynIO::attrDataTuple
std::tuple< std::string, std::string, void * > attrDataTuple
Definition: IRootAuxDynIO.h:33
RootAuxDynIO::IRootAuxDynReader::resetBytesRead
virtual void resetBytesRead()=0
RootAuxDynIO::IRNTupleAuxDynWriter::collectAuxAttributes
virtual std::vector< attrDataTuple > collectAuxAttributes(const std::string &base_branch, void *object)=0
Collect Aux data information to be writting out.
RootAuxDynIO::IRootAuxDynWriter::commit
virtual int commit()=0
Call Fill() on the ROOT object used by this writer.
RootAuxDynIO::IRNTupleAuxDynWriter::~IRNTupleAuxDynWriter
virtual ~IRNTupleAuxDynWriter()=default
Default Destructor.
RootAuxDynIO::IRootAuxDynWriter::setBranchFillMode
virtual void setBranchFillMode(bool)=0
set per-branch independent commit/fill mode
EFTrackingXrtAlgorithmConfig.bufferSize
bufferSize
Definition: EFTrackingXrtAlgorithmConfig.py:77
RootAuxDynIO::IRNTupleAuxDynWriter
Interface for a RNTuple-based Writer that handles AuxDyn attributes Works in conjuction with the gene...
Definition: IRootAuxDynIO.h:78
RootAuxDynIO::IFactoryTool::getBranchAuxDynWriter
virtual std::unique_ptr< IRootAuxDynWriter > getBranchAuxDynWriter(TTree &, TClass &, int bufferSize, int splitLevel, int offsettab_len, bool do_branch_fill) const =0
RootAuxDynDefs.h
RootAuxDynIO::IFactoryTool::getNTupleAuxDynReader
virtual std::unique_ptr< IRootAuxDynReader > getNTupleAuxDynReader(const std::string &field_name, const std::string &field_type, ROOT::RNTupleReader *reader) const =0
RootAuxDynIO::IRootAuxDynWriter::writeAuxAttributes
virtual int writeAuxAttributes(const std::string &base_branch, void *object, size_t rows_written)=0
handle writing of dynamic xAOD attributes of an AuxContainer - called from RootTreeContainer::writeOb...
RootAuxDynIO::IRootAuxDynReader::addReaderToObject
virtual void addReaderToObject(void *object, size_t row, std::recursive_mutex *iomtx=nullptr)=0
Attach specialized AuxStore for reading dynamic attributes.
RootAuxDynIO::IRootAuxDynReader::~IRootAuxDynReader
virtual ~IRootAuxDynReader()
Definition: IRootAuxDynIO.h:52
RootAuxDynIO::IRootAuxDynReader
Definition: IRootAuxDynIO.h:36
RootAuxDynIO::IFactoryTool::getBranchAuxDynReader
virtual std::unique_ptr< IRootAuxDynReader > getBranchAuxDynReader(TTree *, TBranch *) const =0
RootAuxDynIO::IFactoryTool::hasAuxStore
virtual bool hasAuxStore(std::string_view fieldname, TClass *tc) const =0
check if a field/branch with fieldname and type tc has IAuxStore interface
RootAuxDynIO
Specialization of RootAuxDynStore for reading Aux Dynamic attributes from RNTuple.
Definition: RNTupleContainer.h:28
RootAuxDynIO::IFactoryTool::~IFactoryTool
virtual ~IFactoryTool()=default
RTTAlgmain.branch
branch
Definition: RTTAlgmain.py:61
RootAuxDynIO::IRootAuxDynWriter::needsCommit
virtual bool needsCommit()=0
is there a need to call commit()?
RootAuxDynIO::IFactoryTool::hasAuxStoreIO
virtual bool hasAuxStoreIO(TClass *tc) const =0
check if the type tc has IAuxStoreIO interface
collisions.reader
reader
read the goodrunslist xml file(s)
Definition: collisions.py:22
ROOT
Selection rules: declare transient members.
Definition: DataVector.h:580
RootAuxDynIO::IRootAuxDynReader::getBytesRead
virtual size_t getBytesRead() const =0
RootAuxDynIO::IFactoryTool
Definition: IRootAuxDynIO.h:90