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, const ::Long64_t &entry, std::unique_ptr< THolder > holder)
 Constructor. More...
 
 ~RObjectManager ()
 Destructor. More...
 
ROOT::RNTupleView< void > & field ()
 Accessor to the field (non-const) More...
 
const ROOT::RNTupleView< void > & field () const
 Accessor to the field (const) 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...
 
const THolderholder () const
 Accessor to the Holder object. More...
 
THolderholder ()
 Accessor to the Holder object. 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< const ::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...
 

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 30 of file RObjectManager.h.

Constructor & Destructor Documentation

◆ RObjectManager()

xAOD::Experimental::RObjectManager::RObjectManager ( ROOT::RNTupleView< void >  field,
const ::Long64_t &  entry,
std::unique_ptr< THolder holder 
)

Constructor.

Definition at line 16 of file RObjectManager.cxx.

19  : IObjectManager(std::move(holder)),
20  m_field(std::move(field)),
22  m_entry(-1),
23  m_isSet(kTRUE) {}

◆ ~RObjectManager()

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

Destructor.

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 100 of file RObjectManager.cxx.

100  {
101 
102  return m_isSet;
103 }

◆ field() [1/2]

ROOT::RNTupleView< void > & xAOD::Experimental::RObjectManager::field ( )

Accessor to the field (non-const)

Definition at line 27 of file RObjectManager.cxx.

27  {
28 
29  return m_field;
30 }

◆ field() [2/2]

const ROOT::RNTupleView< void > & xAOD::Experimental::RObjectManager::field ( ) const

Accessor to the field (const)

Definition at line 32 of file RObjectManager.cxx.

32  {
33 
34  return m_field;
35 }

◆ 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 45 of file RObjectManager.cxx.

45  {
46 
47  // Must be valid entry value
48  if (m_entryToLoad < 0) {
49  // Raise error as a negative entry is incorrect
50  Error("xAOD::RObjectManager::getEntry",
52  "Entry to read must be larger than or equal to 0. entry=%lld"),
53  m_entryToLoad.get());
54  return -1;
55  }
56 
57  // Check if anything needs to be done:
58  if (m_entryToLoad == m_entry) {
59  return 0;
60  }
61 
62  // Load the entry.
64 
65  // If successful, save entry number
67 
68  // We don't know how to get the number of bytes read, so we just return 1.
69  return 1;
70 }

◆ holder() [1/2]

THolder * xAOD::Details::IObjectManager::holder ( )
inherited

Accessor to the Holder object.

Definition at line 48 of file IObjectManager.cxx.

48  {
49 
50  return m_holder.get();
51 }

◆ holder() [2/2]

const THolder * xAOD::Details::IObjectManager::holder ( ) const
inherited

Accessor to the Holder object.

Definition at line 43 of file IObjectManager.cxx.

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

◆ 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 108 of file RObjectManager.cxx.

108  {
109 
110  return m_isSet;
111 }

◆ 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 77 of file RObjectManager.cxx.

77  {
78 
79  return holder()->get();
80 }

◆ object() [2/2]

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

Function getting a pointer to the object being handled.

Implements xAOD::TVirtualManager.

Definition at line 82 of file RObjectManager.cxx.

82  {
83 
84  return holder()->get();
85 }

◆ 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 117 of file RObjectManager.cxx.

117  {
118 
119  m_isSet = kFALSE;
120  return;
121 }

◆ 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 91 of file RObjectManager.cxx.

91  {
92 
93  holder()->set(obj);
94  m_isSet = kTRUE;
95  return;
96 }

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 69 of file RObjectManager.h.

◆ m_entryToLoad

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

Entry number to load next.

Definition at line 67 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 63 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 65 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 71 of file RObjectManager.h.


The documentation for this class was generated from the following files:
xAOD::Details::IObjectManager::m_holder
std::unique_ptr< THolder > m_holder
Object holding onto an EDM object in memory.
Definition: IObjectManager.h:44
xAOD::Details::IObjectManager::holder
const THolder * holder() const
Accessor to the Holder object.
Definition: IObjectManager.cxx:43
xAOD::THolder::get
const void * get() const
Return a typeless const pointer to the held object.
Definition: THolder.cxx:215
XAOD_MESSAGE
#define XAOD_MESSAGE(MESSAGE)
Simple macro for printing error/verbose messages.
Definition: Control/xAODRootAccess/xAODRootAccess/tools/Message.h:19
xAOD::Experimental::RObjectManager::m_field
ROOT::RNTupleView< void > m_field
The typeless object taking care of reading the field.
Definition: RObjectManager.h:63
xAOD::THolder::set
virtual void set(void *obj)
Replace the managed object.
Definition: THolder.cxx:230
xAOD::Experimental::RObjectManager::field
ROOT::RNTupleView< void > & field()
Accessor to the field (non-const)
Definition: RObjectManager.cxx:27
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
xAOD::Experimental::RObjectManager::m_entry
::Long64_t m_entry
The last entry that was loaded for this field.
Definition: RObjectManager.h:69
xAOD::Experimental::RObjectManager::m_isSet
::Bool_t m_isSet
Was the object set for the current event?
Definition: RObjectManager.h:71
xAOD::Details::IObjectManager::IObjectManager
IObjectManager(std::unique_ptr< THolder > holder)
Constructor.
Definition: IObjectManager.cxx:8
L1Topo::Error
Error
The different types of error that can be flagged in the L1TopoRDO.
Definition: Error.h:16
xAOD::Experimental::RObjectManager::m_entryToLoad
std::reference_wrapper< const ::Long64_t > m_entryToLoad
Entry number to load next.
Definition: RObjectManager.h:67
python.PyAthena.obj
obj
Definition: PyAthena.py:132