ATLAS Offline Software
RObjectManager.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 // ROOT include(s):
7 #include <TBranch.h>
8 #include <TTree.h>
9 #include <TError.h>
10 
11 // Local include(s):
15 
16 namespace xAOD {
17 
18  namespace Experimental {
19 
20  RObjectManager::RObjectManager( ROOT::RNTupleView<void> field,::Long64_t& entry, THolder* holder, ::Bool_t renewOnRead )
21  :
22  m_field( std::move( field ) ),
23  m_holder( holder ),
24  m_entryToLoad( entry ), m_entry ( -1 ), m_isSet( kTRUE ), m_renewOnRead( renewOnRead ) {
25  }
26 
28 
30  const std::string& RObjectManager::fieldName() const {
31  return m_field.GetField().GetFieldName();
32  }
33 
37 
38  return m_holder.get();
39  }
40 
44 
45  return m_holder.get();
46  }
47 
56  ::Int_t RObjectManager::getEntry( [[maybe_unused]] ::Int_t getall ) {
57 
58  // Must be valid entry value
59  if ( m_entryToLoad < 0 ){
60  // Raise error as a negative entry is incorrect
61  Error("xAOD::RObjectManager::getEntry",
62  XAOD_MESSAGE( "Entry to read must be larger than or equal to 0. entry=%i"), static_cast< int >( m_entryToLoad ) );
63  return -1;
64  }
65 
66  // Check if anything needs to be done:
67  if( m_entryToLoad == m_entry ) return 0;
68 
69  // Renew the object in memory if we are in such a mode:
70  if( m_renewOnRead ) {
71  m_holder->renew();
72  }
73 
74  // Load the entry.
76 
77  // If successful, save entry number
79 
80  // For the moment, we don't know how to get
81  // the number of bytes read, so we just return 1
82  return 1;
83 
84  }
85 
86 
92  const void* RObjectManager::object() const {
93 
94  return std::as_const(*m_holder).get();
95  }
96 
98 
99  return m_holder->get();
100  }
101 
107 
108  m_holder->set( obj );
109  m_isSet = kTRUE;
110  return;
111  }
112 
116 
117  return m_isSet;
118  }
119 
123  ::Bool_t RObjectManager::isSet() const {
124 
125  return m_isSet;
126  }
127 
133 
134  m_isSet = kFALSE;
135  return;
136  }
137 
138  } // namespace Experimental
139 
140 } // namespace xAOD
xAOD::Experimental::RObjectManager::reset
virtual void reset() override
Reset the object at the end of processing of an event.
Definition: RObjectManager.cxx:132
xAOD::Experimental::RObjectManager::holder
const THolder * holder() const
Accessor to the Holder object.
Definition: RObjectManager.cxx:36
xAOD::Experimental::RObjectManager::setObject
virtual void setObject(void *obj) override
Function replacing the object being handled.
Definition: RObjectManager.cxx:106
xAOD::THolder
This class takes care of holding EDM objects in memory.
Definition: THolder.h:35
xAOD::Experimental::RObjectManager::RObjectManager
RObjectManager(ROOT::RNTupleView< void > field, ::Long64_t &entry, THolder *holder=0, ::Bool_t renewOnRead=kFALSE)
Constructor.
Definition: RObjectManager.cxx:20
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
XAOD_MESSAGE
#define XAOD_MESSAGE(MESSAGE)
Simple macro for printing error/verbose messages.
Definition: Control/xAODRootAccess/xAODRootAccess/tools/Message.h:19
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
xAOD::Experimental::RObjectManager::m_entryToLoad
std::reference_wrapper<::Long64_t > m_entryToLoad
Entry number to load next.
Definition: RObjectManager.h:88
xAOD::Experimental::RObjectManager::isSet
virtual ::Bool_t isSet() const override
Check if the object was set for the current event.
Definition: RObjectManager.cxx:123
xAOD::Experimental::RObjectManager::m_field
ROOT::RNTupleView< void > m_field
The typeless object taking care of reading the field.
Definition: RObjectManager.h:84
Message.h
xAOD::Experimental::RObjectManager::m_holder
std::unique_ptr< THolder > m_holder
Holder object for the EDM object.
Definition: RObjectManager.h:86
xAOD::Experimental::RObjectManager::create
virtual ::Bool_t create() override
Create the object for the current event.
Definition: RObjectManager.cxx:115
xAOD::Experimental::RObjectManager::~RObjectManager
~RObjectManager()
Destructor.
Definition: RObjectManager.cxx:27
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
xAOD::Experimental::RObjectManager::m_renewOnRead
::Bool_t m_renewOnRead
Should the object be recreated on each read?
Definition: RObjectManager.h:94
xAOD::Experimental::RObjectManager::m_entry
::Long64_t m_entry
The last entry that was loaded for this field.
Definition: RObjectManager.h:90
xAOD::Experimental::RObjectManager::getEntry
virtual ::Int_t getEntry(::Int_t getall=0) override
Function for updating the object in memory if needed.
Definition: RObjectManager.cxx:56
xAOD::Experimental::RObjectManager::m_isSet
::Bool_t m_isSet
Was the object set for the current event?
Definition: RObjectManager.h:92
THolder.h
xAOD::Experimental::RObjectManager::fieldName
const std::string & fieldName() const
provide the field name
Definition: RObjectManager.cxx:30
python.PyAthena.obj
obj
Definition: PyAthena.py:132
xAOD::Experimental::RObjectManager::object
virtual const void * object() const override
Function getting a const pointer to the object being handled.
Definition: RObjectManager.cxx:92
RObjectManager.h