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

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

#include <TObjectManager.h>

Inheritance diagram for xAOD::TObjectManager:
Collaboration diagram for xAOD::TObjectManager:

Public Member Functions

 TObjectManager (::TBranch *br=0, THolder *holder=0, ::Bool_t renewOnRead=kFALSE)
 Constructor, getting hold of the created objects. More...
 
 TObjectManager (const TObjectManager &parent)
 Copy constructor. More...
 
 ~TObjectManager ()
 Destructor. More...
 
TObjectManageroperator= (const TObjectManager &parent)
 Assignment operator. More...
 
::TBranch * branch ()
 Accessor to the branch. More...
 
::TBranch ** branchPtr ()
 Pointer to the branch's pointer. 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

::TBranch * m_branch
 Pointer keeping track of the branch. More...
 
THolderm_holder
 Holder object for the EDM object. More...
 
::Long64_t m_entry
 The last entry that was loaded for this branch. 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

Definition at line 29 of file TObjectManager.h.

Constructor & Destructor Documentation

◆ TObjectManager() [1/2]

xAOD::TObjectManager::TObjectManager ( ::TBranch *  br = 0,
THolder holder = 0,
::Bool_t  renewOnRead = kFALSE 
)

Constructor, getting hold of the created objects.

Definition at line 18 of file TObjectManager.cxx.

20  : m_branch( br ), m_holder( holder ), m_entry( -1 ), m_isSet( kTRUE ),
21  m_renewOnRead( renewOnRead ) {
22  }

◆ TObjectManager() [2/2]

xAOD::TObjectManager::TObjectManager ( const TObjectManager parent)

Copy constructor.

Definition at line 24 of file TObjectManager.cxx.

25  : TVirtualManager(), m_branch( parent.m_branch ),
26  m_holder( 0 ), m_entry( parent.m_entry ),
27  m_isSet( parent.m_isSet ), m_renewOnRead( parent.m_renewOnRead ) {
28 
29  if( parent.m_holder ) {
30  m_holder = new THolder( *parent.m_holder );
31  }
32  }

◆ ~TObjectManager()

xAOD::TObjectManager::~TObjectManager ( )

Destructor.

Definition at line 34 of file TObjectManager.cxx.

34  {
35 
36  // Delete the holder object if we have one:
37  if( m_holder ) {
38  delete m_holder;
39  }
40  }

Member Function Documentation

◆ branch()

TBranch * xAOD::TObjectManager::branch ( )

Accessor to the branch.

Definition at line 64 of file TObjectManager.cxx.

64  {
65 
66  return m_branch;
67  }

◆ branchPtr()

TBranch ** xAOD::TObjectManager::branchPtr ( )

Pointer to the branch's pointer.

This sort of access to the internal TBranch object is needed when connecting to the input tree.

One has to make sure that the correct pointer is being pointed to by the input tree.

Returns
A pointer to the internal branch pointer

Definition at line 75 of file TObjectManager.cxx.

75  {
76 
77  return &m_branch;
78  }

◆ create()

Bool_t xAOD::TObjectManager::create ( )
overridevirtual

Create the object for the current event.

Dummy implementation as full objects can't be missing.

Implements xAOD::TVirtualManager.

Definition at line 198 of file TObjectManager.cxx.

198  {
199 
200  return m_isSet;
201  }

◆ getEntry()

Int_t xAOD::TObjectManager::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 branch only when it needs to be done.

It keeps track of which entry was already loaded for a branch/object, and only asks the branch to load an entry when it really has to be done.

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

Implements xAOD::TVirtualManager.

Definition at line 101 of file TObjectManager.cxx.

101  {
102 
103  // Make sure that the branch is associated to a tree
104  // as the entry to be read is retrieved from the tree
105  if (!m_branch->GetTree()){
106  Error("xAOD::TObjectManager::getEntry",
107  XAOD_MESSAGE("Branch=%s is not associated to any tree while reading of branches within this class relies on that"),
108  m_branch->GetName());
109  return -1;
110  }
111 
112  // Get the entry that should be read
113  // The entry to be read is set with TTree::LoadTree()
114  // NB: for a branch from a friend tree and if the friend tree has an index built,
115  // then the entry to read is found when calling the TTree::LoadTree() function
116  // that matches the major and minor values between the main tree and the friend tree
117  ::Long64_t entry = m_branch->GetTree()->GetReadEntry();
118 
119  if ( entry < 0 ){
120  // Raise error as it implies
121  // either that the TTree::LoadTree() function has not been called
122  // or
123  // the entry requested to be read by the user
124  // is not corresponding to any entry for the friend tree
125  Error("xAOD::TObjectManager::getEntry",
126  XAOD_MESSAGE( "Entry to read is not set for branch=%s from tree=%s. "
127  "It is either because TTree::LoadTree(entry) was not called "
128  "beforehand in the TEvent class OR "
129  "the entry requested to be read for the main tree is not corresponding to an event for the friend tree" ),
130  m_branch->GetName(),
131  m_branch->GetTree()->GetName());
132  return -1;
133  }
134 
135  // Check if anything needs to be done:
136  if( entry == m_entry ) return 0;
137 
138  // Make sure that the branch is not in "MakeClass mode":
139  if( m_branch->GetMakeClass() ) {
140  m_branch->SetMakeClass( 0 );
141  }
142 
143  // Renew the object in memory if we are in such a mode:
144  if( m_renewOnRead ) {
145  m_holder->renew();
146  }
147 
148  // Load the entry.
149  const ::Int_t nbytes = m_branch->GetEntry( entry, getall );
150 
151  // If the load was successful, remember that we loaded this entry.
152  if( nbytes >= 0 ) {
153  m_entry = entry;
154  }
155 
156  // This is a tricky thing... Parts of the code try to minimise some
157  // operations to only happen when an object is getting updated. But
158  // it can happen that an interface or auxiliary store object doesn't
159  // actually store any data itself. So TBranch::GetEntry will return 0.
160  // But we still need to tell the code looking at this return value
161  // that we did go to a new event. So we should never return 0 at
162  // this point...
163  if( nbytes ) {
164  return nbytes;
165  } else {
166  return 1;
167  }
168  }

◆ holder() [1/2]

THolder * xAOD::TObjectManager::holder ( )

Accessor to the Holder object.

Returns
A pointer to the internal data holding object

Definition at line 89 of file TObjectManager.cxx.

89  {
90 
91  return m_holder;
92  }

◆ holder() [2/2]

const THolder * xAOD::TObjectManager::holder ( ) const

Accessor to the Holder object.

Returns
A pointer to the internal data holding object

Definition at line 82 of file TObjectManager.cxx.

82  {
83 
84  return m_holder;
85  }

◆ isSet()

Bool_t xAOD::TObjectManager::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 206 of file TObjectManager.cxx.

206  {
207 
208  return m_isSet;
209  }

◆ object() [1/2]

const void * xAOD::TObjectManager::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 175 of file TObjectManager.cxx.

175  {
176 
177  return std::as_const(*m_holder).get();
178  }

◆ object() [2/2]

void * xAOD::TObjectManager::object ( )
overridevirtual

Function getting a pointer to the object being handled.

Implements xAOD::TVirtualManager.

Definition at line 180 of file TObjectManager.cxx.

180  {
181 
182  return m_holder->get();
183  }

◆ operator=()

TObjectManager & xAOD::TObjectManager::operator= ( const TObjectManager parent)

Assignment operator.

Definition at line 42 of file TObjectManager.cxx.

42  {
43 
44  // Check if we need to do anything:
45  if( this == &parent ) {
46  return *this;
47  }
48 
49  m_branch = parent.m_branch;
50  if( m_holder ) {
51  delete m_holder;
52  m_holder = 0;
53  }
54  if( parent.m_holder ) {
55  m_holder = new THolder( *parent.m_holder );
56  }
57  m_entry = parent.m_entry;
58  m_isSet = parent.m_isSet;
59  m_renewOnRead = parent.m_renewOnRead;
60 
61  return *this;
62  }

◆ reset()

void xAOD::TObjectManager::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 215 of file TObjectManager.cxx.

215  {
216 
217  m_isSet = kFALSE;
218  return;
219  }

◆ setObject()

void xAOD::TObjectManager::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 189 of file TObjectManager.cxx.

189  {
190 
191  m_holder->set( obj );
192  m_isSet = kTRUE;
193  return;
194  }

Member Data Documentation

◆ m_branch

::TBranch* xAOD::TObjectManager::m_branch
private

Pointer keeping track of the branch.

Definition at line 71 of file TObjectManager.h.

◆ m_entry

::Long64_t xAOD::TObjectManager::m_entry
private

The last entry that was loaded for this branch.

Definition at line 75 of file TObjectManager.h.

◆ m_holder

THolder* xAOD::TObjectManager::m_holder
private

Holder object for the EDM object.

Definition at line 73 of file TObjectManager.h.

◆ m_isSet

::Bool_t xAOD::TObjectManager::m_isSet
private

Was the object set for the current event?

Definition at line 77 of file TObjectManager.h.

◆ m_renewOnRead

::Bool_t xAOD::TObjectManager::m_renewOnRead
private

Should the object be recreated on each read?

Definition at line 79 of file TObjectManager.h.


The documentation for this class was generated from the following files:
xAOD::TObjectManager::m_branch
::TBranch * m_branch
Pointer keeping track of the branch.
Definition: TObjectManager.h:71
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::TObjectManager::m_entry
::Long64_t m_entry
The last entry that was loaded for this branch.
Definition: TObjectManager.h:75
xAOD::THolder::set
virtual void set(void *obj)
Replace the managed object.
Definition: THolder.cxx:230
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAOD::TObjectManager::m_isSet
::Bool_t m_isSet
Was the object set for the current event?
Definition: TObjectManager.h:77
xAOD::TObjectManager::m_renewOnRead
::Bool_t m_renewOnRead
Should the object be recreated on each read?
Definition: TObjectManager.h:79
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
xAOD::THolder::renew
void renew()
Renew the object in memory.
Definition: THolder.cxx:420
xAOD::TObjectManager::holder
const THolder * holder() const
Accessor to the Holder object.
Definition: TObjectManager.cxx:82
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:135
PlotCalibFromCool.br
br
Definition: PlotCalibFromCool.py:355
xAOD::TObjectManager::m_holder
THolder * m_holder
Holder object for the EDM object.
Definition: TObjectManager.h:73