Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
RNTupleContainer.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 //====================================================================
5 // Root Database Container RNTuple implementation
6 //--------------------------------------------------------------------
7 // Author : M.Nowak
8 //====================================================================
9 #ifndef POOL_RNTUPLECONTAINER_H
10 #define POOL_RNTUPLECONTAINER_H 1
11 
12 // Framework include files
13 
14 
15 #include "StorageSvc/DbColumn.h"
17 #include "StorageSvc/DbDatabase.h"
18 #include <vector>
19 #include <memory>
20 #include <optional>
21 #include <string>
22 
23 // Forward declarations
24 class TClass;
25 namespace SG { class IAuxStoreIO; }
27 namespace RootStorageSvc { class RNTupleWriterHelper; }
28 namespace ROOT::Experimental { class RNTupleReader; }
29 
30 #include "ROOT/RNTupleView.hxx"
31 /*
32  * POOL namespace declaration
33  */
34 namespace pool {
35 
37 using ROOT::Experimental::RNTupleView;
38 
39 // Forward declaration
40 class DbColumn;
41 class RootDatabase;
42 
50 {
52 
54  struct FieldDesc : public DbColumn
55  {
56  std::string fieldname;
57  std::optional< RNTupleView<void> > view;
58  std::string sgkey;
59  TClass* clazz = nullptr;
60  void* object = nullptr;
61 
62  // if writing char* keep a copy here as an std::string
63  std::string str;
64 
65  // ---- extra variables used for AuxDyn attributes
66  // number of rows written to this branch so far
67  size_t rows_written = 0;
68 
71 
72  // AuxDyn RNTuple reader (managed by the Database)
73  std::unique_ptr<RootAuxDynIO::IRootAuxDynReader> auxdyn_reader;
74 
75  // AuxDyn RNTuple writer (managed by the Database)
76  std::unique_ptr<RootAuxDynIO::IRNTupleAuxDynWriter> auxdyn_writer;
77 
78  FieldDesc(const DbColumn& c);
79  FieldDesc(FieldDesc const& other) = delete;
80  FieldDesc(FieldDesc&& other) = default;
81  ~FieldDesc() = default;
82 
83  FieldDesc& operator=(FieldDesc const& other) = delete;
85 
86  const std::string typeName();
87  bool hasAuxStore() { return aux_iostore_IFoffset >= 0; }
89  return (aux_iostore_IFoffset >= 0
90  ? reinterpret_cast<SG::IAuxStoreIO*>((char*)object +
92  : nullptr);
93  }
94  };
95 
96  protected:
98  const DbTypeInfo* m_type{};
100  std::vector<FieldDesc> m_fieldDescs;
108  bool m_isDirty;
109 
112  int64_t m_indexBump;
114 
117 
120 
121  public:
124 
125  virtual ~RNTupleContainer();
126 
128  virtual DbStatus close() override final;
129 
131  virtual DbStatus open(DbDatabase& dbH, const std::string& nam,
133  DbAccessMode mod) override final;
134 
137  const std::string& nam) const override final;
138 
140 
144  virtual DbStatus getOption(DbOption& opt) override final;
145 
147 
151  virtual DbStatus setOption(const DbOption& opt) override final;
152 
154  virtual DbStatus isShapeSupported(const DbTypeInfo* typ) const override final;
155 
157  virtual uint64_t size() override final;
158 
160  const std::string& getName() const { return m_name; }
161 
164  bool isDirty() const { return m_isDirty; }
165 
167  void clearDirty() { m_isDirty = false; }
168 
170 
176  virtual DbStatus loadObject(void** ptr, ShapeH shape,
177  Token::OID_t& oid) override final;
178 
180  virtual DbStatus writeObject(ActionList::value_type&) override final;
181 
182  virtual uint64_t nextRecordId() override final;
183 
184  virtual void useNextRecordId(uint64_t nextID) override final;
185 
187  virtual DbStatus select(DbSelect& criteria) override final;
188 
190  using DbContainerImp::fetch;
191  virtual DbStatus fetch(DbSelect& sel) override final;
192 
194  virtual DbStatus transAct(Transaction::Action action) override final;
195 
197  virtual DbStatus save(DbObjectHandle<DbObject>& objH) override final;
198 
199  private:
202 };
203 
204 } // namespace pool
205 #endif
grepfile.info
info
Definition: grepfile.py:38
pool::RNTupleContainer::useNextRecordId
virtual void useNextRecordId(uint64_t nextID) override final
Suggest next Record ID for tbe next object written - used only with synced indexes.
pool::RNTupleContainer::FieldDesc
Definition of a field info structure.
Definition: RNTupleContainer.h:55
pool::DbAccessMode
int DbAccessMode
Definition: Database/APR/StorageSvc/StorageSvc/pool.h:47
pool::RNTupleContainer::m_rootDb
RootDatabase * m_rootDb
Root database file reference.
Definition: RNTupleContainer.h:104
pool::RNTupleContainer::FieldDesc::auxdyn_writer
std::unique_ptr< RootAuxDynIO::IRNTupleAuxDynWriter > auxdyn_writer
Definition: RNTupleContainer.h:76
pool::DbObject
void DbObject
Definition: Database/APR/StorageSvc/StorageSvc/pool.h:35
pool::DbStatus
Definition: DbStatus.h:67
pool::RNTupleContainer::FieldDesc::aux_iostore_IFoffset
int aux_iostore_IFoffset
IOStore interface offset for object type in this branch (for casting)
Definition: RNTupleContainer.h:70
pool::RNTupleContainer::save
virtual DbStatus save(DbObjectHandle< DbObject > &objH) override final
Add single entry to container.
pool::RNTupleContainer::nextRecordId
virtual uint64_t nextRecordId() override final
Number of next record in the container (=size if no delete is allowed)
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
pool::RNTupleContainer::select
virtual DbStatus select(DbSelect &criteria) override final
Define selection criteria.
make_coralServer_rep.opt
opt
Definition: make_coralServer_rep.py:19
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
pool::RNTupleContainer::FieldDesc::sgkey
std::string sgkey
Definition: RNTupleContainer.h:58
pool::RNTupleContainer::loadObject
virtual DbStatus loadObject(void **ptr, ShapeH shape, Token::OID_t &oid) override final
Find object by object identifier and load it into memory.
pool
pool namespace
Definition: libname.h:15
pool::RNTupleContainer::isDirty
bool isDirty() const
Return true if this branch container was updated and it's TTree needs to be Filled.
Definition: RNTupleContainer.h:164
pool::RNTupleContainer::size
virtual uint64_t size() override final
Number of entries within the container.
pool::DbContainerImp::save
virtual DbStatus save(DbObjectHandle< DbObject > &objH) override
Add single entry to container.
pool::RNTupleContainer::m_type
const DbTypeInfo * m_type
reference to exact type description
Definition: RNTupleContainer.h:98
pool::RNTupleContainer::writeObject
virtual DbStatus writeObject(ActionList::value_type &) override final
Commit single entry to container.
pool::RNTupleContainer::FieldDesc::hasAuxStore
bool hasAuxStore()
Definition: RNTupleContainer.h:87
pool::DbObjectHandle
Definition: DbContainer.h:37
pool::RNTupleContainer::m_isDirty
bool m_isDirty
flag set on writing to prevent double writes in the same commit
Definition: RNTupleContainer.h:108
pool::DbContainerImp::m_name
std::string m_name
Container name.
Definition: DbContainerImp.h:76
pool::RNTupleContainer::m_dbH
DbDatabase m_dbH
Parent Database handle.
Definition: RNTupleContainer.h:102
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
pool::RNTupleContainer::FieldDesc::fieldname
std::string fieldname
Definition: RNTupleContainer.h:56
pool::RNTupleContainer::getName
const std::string & getName() const
Return the name of the container.
Definition: RNTupleContainer.h:160
pool::RNTupleContainer::RNTupleContainer
RNTupleContainer()
Standard constructor.
DbColumn.h
SG::IAuxStoreIO
Interface providing I/O for a generic auxiliary store.
Definition: IAuxStoreIO.h:44
pool::RNTupleContainer::FieldDesc::auxdyn_reader
std::unique_ptr< RootAuxDynIO::IRootAuxDynReader > auxdyn_reader
Definition: RNTupleContainer.h:73
pool::RNTupleContainer::open
virtual DbStatus open(DbDatabase &dbH, const std::string &nam, const DbTypeInfo *info, DbAccessMode mod) override final
Open the container for object access.
DbDatabase.h
pool::RNTupleContainer::FieldDesc::~FieldDesc
~FieldDesc()=default
pool::RNTupleContainer::m_ntupleReader
RNTupleReader * m_ntupleReader
Internal cache of the native RNTupleReader.
Definition: RNTupleContainer.h:119
pool::RNTupleContainer::setOption
virtual DbStatus setOption(const DbOption &opt) override final
Set options.
Token::OID_t
Definition: Token.h:24
pool::RNTupleContainer::m_indexMulti
const uint32_t m_indexMulti
Definition: RNTupleContainer.h:113
pool::ShapeH
const class Shape * ShapeH
Definition: DbContainerObj.h:27
pool::RNTupleContainer::m_fieldDescs
std::vector< FieldDesc > m_fieldDescs
List of field descriptors.
Definition: RNTupleContainer.h:100
RootAuxDynIO::IRNTupleAuxDynWriter
Interface for a RNTuple-based Writer that handles AuxDyn attributes Works in conjuction with the gene...
Definition: RootAuxDynIO.h:117
pool::RNTupleContainer::m_indexSize
uint64_t m_indexSize
Definition: RNTupleContainer.h:111
pool::RNTupleContainer::FieldDesc::getIOStorePtr
SG::IAuxStoreIO * getIOStorePtr()
Definition: RNTupleContainer.h:88
maskDeadModules.mod
mod
Definition: maskDeadModules.py:36
pool::RNTupleContainer::getOption
virtual DbStatus getOption(DbOption &opt) override final
Access options.
pool::RNTupleContainer::close
virtual DbStatus close() override final
Close the container and deallocate resources.
pool::RNTupleContainer::FieldDesc::FieldDesc
FieldDesc(const DbColumn &c)
pool::DbOption
Definition: DbOption.h:36
sel
sel
Definition: SUSYToolsTester.cxx:97
pool::RNTupleContainer::m_indexBump
int64_t m_indexBump
Definition: RNTupleContainer.h:112
pool::DbSelect
Definition: DbSelect.h:44
pool::RNTupleContainer
Definition: RNTupleContainer.h:50
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
pool::RNTupleContainer::isShapeSupported
virtual DbStatus isShapeSupported(const DbTypeInfo *typ) const override final
Ask if a given shape is supported.
pool::RNTupleContainer::m_ntupleWriter
RootStorageSvc::RNTupleWriterHelper * m_ntupleWriter
Internal cache of the RNTupleWriterHelper.
Definition: RNTupleContainer.h:116
pool::RNTupleContainer::m_index
uint64_t m_index
Definition: RNTupleContainer.h:110
pool::RNTupleContainer::FieldDesc::clazz
TClass * clazz
Definition: RNTupleContainer.h:59
pool::RNTupleContainer::FieldDesc::rows_written
size_t rows_written
Definition: RNTupleContainer.h:67
pool::RNTupleContainer::fetch
virtual DbStatus fetch(DbSelect &sel) override final
Fetch next object address of the selection to set token.
private
#define private
Definition: DetDescrConditionsDict_dict_fixes.cxx:13
pool::RNTupleContainer::FieldDesc::operator=
FieldDesc & operator=(FieldDesc const &other)=delete
pool::Transaction
Definition: Transaction.h:26
pool::RNTupleContainer::initObjectFieldDesc
DbStatus initObjectFieldDesc(FieldDesc &dsc)
Init a field description for an object (i.e. find TClass etc.)
pool::RNTupleContainer::FieldDesc::typeName
const std::string typeName()
RootAuxDynIO::IRootAuxDynReader
Definition: RootAuxDynIO.h:73
pool::RNTupleContainer::checkAccess
virtual DbStatus checkAccess(DbDatabase &dbH, const std::string &nam) const override final
Check if we can access the container for reading with the given type.
pool::RNTupleContainer::m_ioBytes
int m_ioBytes
Number of bytes written/read during last operation. Set to -1 if it failed.
Definition: RNTupleContainer.h:106
RootAuxDynIO
Specialization of RootAuxDynStore for reading Aux Dynamic attributes from RNTuple.
Definition: RNTupleContainer.h:26
pool::RNTupleContainer::FieldDesc::FieldDesc
FieldDesc(FieldDesc const &other)=delete
pool::DbColumn
Definition: DbColumn.h:35
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
RootStorageSvc::RNTupleWriterHelper
Definition: RNTupleWriterHelper.h:33
pool::RootDatabase
Definition: RootDatabase.h:59
python.CaloScaleNoiseConfig.action
action
Definition: CaloScaleNoiseConfig.py:77
DbContainerImp.h
pool::RNTupleContainer::~RNTupleContainer
virtual ~RNTupleContainer()
RNTupleReader
ROOT::Experimental::RNTupleReader RNTupleReader
Definition: RNTupleAuxDynStore.h:19
pool::RNTupleContainer::transAct
virtual DbStatus transAct(Transaction::Action action) override final
Execute transaction action.
ROOT::Experimental
Definition: RNTCollection.h:26
pool::RNTupleContainer::clearDirty
void clearDirty()
Clear the dirty status (used after containing TTree was Filled)
Definition: RNTupleContainer.h:167
pool::RNTupleContainer::FieldDesc::view
std::optional< RNTupleView< void > > view
Definition: RNTupleContainer.h:57
pool::DbContainerImp
Definition: DbContainerImp.h:44
pool::RNTupleContainer::FieldDesc::FieldDesc
FieldDesc(FieldDesc &&other)=default
pool::DbDatabase
Definition: DbDatabase.h:53
python.compressB64.c
def c
Definition: compressB64.py:93
RootStorageSvc
Definition: RNTupleContainer.h:27
pool::DbTypeInfo
Definition: DbTypeInfo.h:47
pool::RNTupleContainer::FieldDesc::str
std::string str
Definition: RNTupleContainer.h:63
pool::RNTupleContainer::FieldDesc::operator=
FieldDesc & operator=(FieldDesc &&other)=default