ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
xAOD::Experimental::RObjectManager Class Reference

Manager for EDM objects created by ROOT. More...

#include <RObjectManager.h>

Inheritance diagram for xAOD::Experimental::RObjectManager:
Collaboration diagram for xAOD::Experimental::RObjectManager:

Public Member Functions

 RObjectManager (ROOT::RNTupleView< void > field, ::Long64_t &entry, THolder *holder=0, ::Bool_t renewOnRead=kFALSE)
 Constructor. More...
 
 RObjectManager (const RObjectManager &parent)=delete
 Do not allow copy-constructing this object: More...
 
 ~RObjectManager ()
 Destructor. More...
 
RObjectManageroperator= (const RObjectManager &parent)=delete
 Do not allow copying this object. More...
 
const std::string & fieldName () const
 provide the field name More...
 
const THolderholder () const
 Accessor to the Holder object. More...
 
THolderholder ()
 Accessor to the Holder object. More...
 
virtual ::Int_t getEntry (::Int_t getall=0) override
 Function for updating the object in memory if needed. More...
 
virtual const void * object () const override
 Function getting a const pointer to the object being handled. More...
 
virtual void * object () override
 Function getting a pointer to the object being handled. More...
 
virtual void setObject (void *obj) override
 Function replacing the object being handled. More...
 
virtual ::Bool_t create () override
 Create the object for the current event. More...
 
virtual ::Bool_t isSet () const override
 Check if the object was set for the current event. More...
 
virtual void reset () override
 Reset the object at the end of processing of an event. More...
 

Private Attributes

ROOT::RNTupleView< void > m_field
 The typeless object taking care of reading the field. More...
 
std::unique_ptr< THolderm_holder
 Holder object for the EDM object. More...
 
std::reference_wrapper<::Long64_t > m_entryToLoad
 Entry number to load next. More...
 
::Long64_t m_entry
 The last entry that was loaded for this field. More...
 
::Bool_t m_isSet
 Was the object set for the current event? More...
 
::Bool_t m_renewOnRead
 Should the object be recreated on each read? More...
 

Detailed Description

Manager for EDM objects created by ROOT.

This class is used when an EDM object is meant to be created by ROOT's schema evolution system, behind the scenes.

Author
Attila Krasznahorkay Attil.nosp@m.a.Kr.nosp@m.aszna.nosp@m.hork.nosp@m.ay@ce.nosp@m.rn.c.nosp@m.h
RD Schaffer R.D.S.nosp@m.chaf.nosp@m.fer@c.nosp@m.ern..nosp@m.ch

Definition at line 43 of file RObjectManager.h.

Constructor & Destructor Documentation

◆ RObjectManager() [1/2]

xAOD::Experimental::RObjectManager::RObjectManager ( ROOT::RNTupleView< void >  field,
::Long64_t &  entry,
THolder holder = 0,
::Bool_t  renewOnRead = kFALSE 
)

Constructor.

Definition at line 20 of file RObjectManager.cxx.

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  }

◆ RObjectManager() [2/2]

xAOD::Experimental::RObjectManager::RObjectManager ( const RObjectManager parent)
delete

Do not allow copy-constructing this object:

◆ ~RObjectManager()

xAOD::Experimental::RObjectManager::~RObjectManager ( )

Destructor.

Definition at line 27 of file RObjectManager.cxx.

27 {}

Member Function Documentation

◆ create()

Bool_t xAOD::Experimental::RObjectManager::create ( )
overridevirtual

Create the object for the current event.

Dummy implementation as full objects can't be missing.

Implements xAOD::TVirtualManager.

Definition at line 115 of file RObjectManager.cxx.

115  {
116 
117  return m_isSet;
118  }

◆ fieldName()

const std::string & xAOD::Experimental::RObjectManager::fieldName ( ) const

provide the field name

Returns
field name

Definition at line 30 of file RObjectManager.cxx.

30  {
31  return m_field.GetField().GetFieldName();
32  }

◆ getEntry()

Int_t xAOD::Experimental::RObjectManager::getEntry ( ::Int_t  getall = 0)
overridevirtual

Function for updating the object in memory if needed.

This function is used to load the contents of a field only when it needs to be done.

It keeps track of which entry was already loaded for a field/object, and only asks the RNTupleView for the field to load an entry when it really has to be done. The next entry to load (m_entryToLoad) is managed by the owning Event object, set in this object's constructor.

Returns
0 if no new entry was read, the number of read bytes otherwise

Implements xAOD::TVirtualManager.

Definition at line 56 of file RObjectManager.cxx.

56  {
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  }

◆ holder() [1/2]

THolder * xAOD::Experimental::RObjectManager::holder ( )

Accessor to the Holder object.

Returns
A pointer to the internal data holding object

Definition at line 43 of file RObjectManager.cxx.

43  {
44 
45  return m_holder.get();
46  }

◆ holder() [2/2]

const THolder * xAOD::Experimental::RObjectManager::holder ( ) const

Accessor to the Holder object.

Returns
A pointer to the internal data holding object

Definition at line 36 of file RObjectManager.cxx.

36  {
37 
38  return m_holder.get();
39  }

◆ isSet()

Bool_t xAOD::Experimental::RObjectManager::isSet ( ) const
overridevirtual

Check if the object was set for the current event.

Returns
kTRUE if the object for this event was set, kFALSE otherwise

Implements xAOD::TVirtualManager.

Definition at line 123 of file RObjectManager.cxx.

123  {
124 
125  return m_isSet;
126  }

◆ object() [1/2]

const void * xAOD::Experimental::RObjectManager::object ( ) const
overridevirtual

Function getting a const pointer to the object being handled.

This function gives an easy access to the object managed by this object.

Returns
A typeless pointer to the object being managed

Implements xAOD::TVirtualManager.

Definition at line 92 of file RObjectManager.cxx.

92  {
93 
94  return std::as_const(*m_holder).get();
95  }

◆ object() [2/2]

void * xAOD::Experimental::RObjectManager::object ( )
overridevirtual

Function getting a pointer to the object being handled.

Implements xAOD::TVirtualManager.

Definition at line 97 of file RObjectManager.cxx.

97  {
98 
99  return m_holder->get();
100  }

◆ operator=()

RObjectManager& xAOD::Experimental::RObjectManager::operator= ( const RObjectManager parent)
delete

Do not allow copying this object.

◆ reset()

void xAOD::Experimental::RObjectManager::reset ( )
overridevirtual

Reset the object at the end of processing of an event.

This function needs to be called after an event was filled into the output TTree.

It tells the manager object that it needs to wait for another object to be set up for the upcoming event.

Implements xAOD::TVirtualManager.

Definition at line 132 of file RObjectManager.cxx.

132  {
133 
134  m_isSet = kFALSE;
135  return;
136  }

◆ setObject()

void xAOD::Experimental::RObjectManager::setObject ( void *  obj)
overridevirtual

Function replacing the object being handled.

This is just a convenient way of calling THolder::Set from TEvent.

Parameters
objThe object to replace the previously managed one

Implements xAOD::TVirtualManager.

Definition at line 106 of file RObjectManager.cxx.

106  {
107 
108  m_holder->set( obj );
109  m_isSet = kTRUE;
110  return;
111  }

Member Data Documentation

◆ m_entry

::Long64_t xAOD::Experimental::RObjectManager::m_entry
private

The last entry that was loaded for this field.

Definition at line 90 of file RObjectManager.h.

◆ m_entryToLoad

std::reference_wrapper<::Long64_t> xAOD::Experimental::RObjectManager::m_entryToLoad
private

Entry number to load next.

Definition at line 88 of file RObjectManager.h.

◆ m_field

ROOT::RNTupleView<void> xAOD::Experimental::RObjectManager::m_field
private

The typeless object taking care of reading the field.

Definition at line 84 of file RObjectManager.h.

◆ m_holder

std::unique_ptr<THolder> xAOD::Experimental::RObjectManager::m_holder
private

Holder object for the EDM object.

Definition at line 86 of file RObjectManager.h.

◆ m_isSet

::Bool_t xAOD::Experimental::RObjectManager::m_isSet
private

Was the object set for the current event?

Definition at line 92 of file RObjectManager.h.

◆ m_renewOnRead

::Bool_t xAOD::Experimental::RObjectManager::m_renewOnRead
private

Should the object be recreated on each read?

Definition at line 94 of file RObjectManager.h.


The documentation for this class was generated from the following files:
xAOD::Experimental::RObjectManager::holder
const THolder * holder() const
Accessor to the Holder object.
Definition: RObjectManager.cxx:36
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::m_field
ROOT::RNTupleView< void > m_field
The typeless object taking care of reading the field.
Definition: RObjectManager.h:84
xAOD::Experimental::RObjectManager::m_holder
std::unique_ptr< THolder > m_holder
Holder object for the EDM object.
Definition: RObjectManager.h:86
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::m_isSet
::Bool_t m_isSet
Was the object set for the current event?
Definition: RObjectManager.h:92
L1Topo::Error
Error
The different types of error that can be flagged in the L1TopoRDO.
Definition: Error.h:16
python.PyAthena.obj
obj
Definition: PyAthena.py:132