ATLAS Offline Software
Loading...
Searching...
No Matches
pool::RootTreeIndexContainer Class Reference

Description: Spezialization of RootTreeContainer ROOT specific implementation of Database container. More...

#include <src/RootTreeIndexContainer.h>

Inheritance diagram for pool::RootTreeIndexContainer:
Collaboration diagram for pool::RootTreeIndexContainer:

Public Member Functions

 RootTreeIndexContainer (const std::string &name)
 RootTreeIndexContainer (const RootTreeIndexContainer &)=delete
RootTreeIndexContaineroperator= (const RootTreeIndexContainer &)=delete
virtual ~RootTreeIndexContainer () override
virtual StatusCode open (DbDatabase &, const std::string &, const DbTypeInfo *, DbAccessMode) override final
 Open the container.
virtual uint64_t nextRecordId () override final
 Number of entries within the container.
virtual void useNextRecordId (uint64_t) override final
 Suggest next Record ID for tbe next object written - for synced indexes.
virtual StatusCode loadObject (void **ptr, ShapeH shape, Token::OID_t &oid) override
 Find object by object identifier and load it into memory.
virtual StatusCode writeObject (ActionList::value_type &) override
 Commit single entry to container.
virtual StatusCode close () override
 Close the container and deallocate resources.
virtual StatusCode checkAccess (DbDatabase &dbH, const std::string &nam) const override final
 Check if we can access the container for reading with the given type.
virtual StatusCode getOption (DbOption &opt) override
 Access options.
virtual StatusCode setOption (const DbOption &opt) override
 Set options.
virtual uint64_t size () override
 Number of entries within the container.
TTree * getTTree ()
 return the TTree in which this container is stored
const std::string & getName () const
 return the name of the container
bool isBranchContainer () const
 is this a container in a TBranch? (regular ones take the whole TTree)
void setTreeFillMode (bool mode)
 set Tree Filling mode (true/false) for branch containers
bool usingTreeFillMode () const
 return true if this branch container is using TTree Filling mode
bool isDirty () const
 return true if this branch container was updated and it's TTree needs to be Filled
void clearDirty ()
 clear the dirty status (used after containing TTree was Filled)
virtual StatusCode transAct (Transaction::Action action) override
 Execute Transaction action.
virtual void release () override
 Release instance (Abstract interfaces do not expose destructor!)
virtual std::string name () const override
 Get container name.
virtual StatusCode store (const void *object, DbContainer &cntH, ShapeH shape) override
 Store object in location.
virtual StatusCode allocate (DbContainer &cntH, const void *object, ShapeH shape, Token::OID_t &oid) override
 In place allocation of object location.
virtual StatusCode next (Token::OID_t &linkH) override
 Fetch next object address to set token.
virtual StatusCode load (void **ptr, ShapeH shape, const Token::OID_t &lnkH, Token::OID_t &oid, bool any_next) override
 Find object within the container and load it into memory.
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Protected Types

typedef std::vector< BranchDescBranches
 Definition of the branch container.
typedef std::vector< DbActionActionList

Protected Member Functions

virtual StatusCode commitTransaction ()
 Execute object modification requests during a transaction.

Protected Attributes

TTree * m_tree
 Reference to the root tree object.
const DbTypeInfom_type
 reference to exact type description
Branches m_branches
 Branch map.
DbDatabase m_dbH
 Parent Database handle.
RootDatabasem_rootDb
 Root database file reference.
std::string m_branchName
 Branch name, if branch is specified by user.
int m_ioBytes
 Number of bytes written/read during last operation. Set to -1 if it failed.
bool m_treeFillMode
 if True, branch container will not use Branch->Fill() but will be filled with its Tree by the database instance
bool m_isDirty
 flag set when a branch container was updated (but the branch was not Filled)
std::unique_ptr< RootAuxDynIO::IFactoryToolm_auxDynTool
 Factory object from AuxDynIO plugin that creates AuxDyn readers and writers.
std::string m_name
 Container name.

Private Member Functions

StatusCode addBranch (const DbColumn *col, BranchDesc &dsc, const std::string &desc)
 Add item branch.
StatusCode addObject (DbDatabase &dbH, const DbColumn *col, BranchDesc &dsc, const std::string &desc, int splitLevel, int bufferSize, int branchOffsetTabLen)
 Add BLOB.
StatusCode finishTransAct ()
TBranch * branch (const std::string &nam) const
 Access branch by name.
void setBranchOffsetTabLen (TBranch *b, int offsettab_len)
 Recursively set Offset Table length for a branch and it's subbranches.
void initMessaging () const
 Initialize our message level and MessageSvc.

Private Attributes

TBranch * m_indexBranch
 Pointer to index branch.
uint64_t m_index_entries
const uint32_t m_index_multi
 Index multiplier (e.g. pid - ppid), fill in c'tor.
Long64_t m_index
 Index (64 bit) - using ROOT type that matches the earlier 'long long'.
int64_t m_indexBump
 How much to increase nextRecordID to keep index values synced with other containers.
bool m_firstRead
 first object retrieval attempt flag (to rebuild index)
ActionList m_writeStack
 Transaction fifo storage for writing.
size_t m_size
 Current size of the transaction stack.
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels)
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging)

Detailed Description

Description: Spezialization of RootTreeContainer ROOT specific implementation of Database container.

Since objects in root are stored in "trees with branches", this object corresponds to a tuple (Tree/Branch), where each object type (determined by the location of the transient object within the data store) is accessed by an index number stored inside its tree.

Author
N.Dulin, P.v.Gemmeren
Date
8/1/2018
Version
1.0

Definition at line 34 of file RootTreeIndexContainer.h.

Member Typedef Documentation

◆ ActionList

typedef std::vector< DbAction > pool::DbContainerImp::ActionList
protectedinherited

Definition at line 64 of file DbContainerImp.h.

◆ Branches

typedef std::vector<BranchDesc> pool::RootTreeContainer::Branches
protectedinherited

Definition of the branch container.

Definition at line 94 of file RootTreeContainer.h.

Constructor & Destructor Documentation

◆ RootTreeIndexContainer() [1/2]

pool::RootTreeIndexContainer::RootTreeIndexContainer ( const std::string & name)
explicit

◆ RootTreeIndexContainer() [2/2]

pool::RootTreeIndexContainer::RootTreeIndexContainer ( const RootTreeIndexContainer & )
delete

◆ ~RootTreeIndexContainer()

virtual pool::RootTreeIndexContainer::~RootTreeIndexContainer ( )
inlineoverridevirtual

Definition at line 40 of file RootTreeIndexContainer.h.

40{}

Member Function Documentation

◆ addBranch()

StatusCode pool::RootTreeContainer::addBranch ( const DbColumn * col,
BranchDesc & dsc,
const std::string & desc )
privateinherited

Add item branch.

◆ addObject()

StatusCode pool::RootTreeContainer::addObject ( DbDatabase & dbH,
const DbColumn * col,
BranchDesc & dsc,
const std::string & desc,
int splitLevel,
int bufferSize,
int branchOffsetTabLen )
privateinherited

Add BLOB.

◆ allocate()

virtual StatusCode pool::DbContainerImp::allocate ( DbContainer & cntH,
const void * object,
ShapeH shape,
Token::OID_t & oid )
overridevirtualinherited

In place allocation of object location.

Implements pool::IDbContainer.

◆ branch()

TBranch * pool::RootTreeContainer::branch ( const std::string & nam) const
privateinherited

Access branch by name.

◆ checkAccess()

virtual StatusCode pool::RootTreeContainer::checkAccess ( DbDatabase & dbH,
const std::string & nam ) const
finaloverridevirtualinherited

Check if we can access the container for reading with the given type.

Implements pool::IDbContainer.

◆ clearDirty()

void pool::RootTreeContainer::clearDirty ( )
inlineinherited

clear the dirty status (used after containing TTree was Filled)

Definition at line 196 of file RootTreeContainer.h.

196{ m_isDirty = false; }
bool m_isDirty
flag set when a branch container was updated (but the branch was not Filled)

◆ close()

virtual StatusCode pool::RootTreeContainer::close ( )
overridevirtualinherited

Close the container and deallocate resources.

Reimplemented from pool::DbContainerImp.

◆ commitTransaction()

virtual StatusCode pool::DbContainerImp::commitTransaction ( )
protectedvirtualinherited

Execute object modification requests during a transaction.

◆ finishTransAct()

StatusCode pool::RootTreeContainer::finishTransAct ( )
privateinherited

◆ getName()

const std::string & pool::RootTreeContainer::getName ( ) const
inlineinherited

return the name of the container

Definition at line 181 of file RootTreeContainer.h.

181{ return m_name; }
std::string m_name
Container name.

◆ getOption()

virtual StatusCode pool::RootTreeContainer::getOption ( DbOption & opt)
overridevirtualinherited

Access options.

Parameters
opt[IN] Reference to option object.
Returns
StatusCode code indicating success or failure.

Reimplemented from pool::DbContainerImp.

◆ getTTree()

TTree * pool::RootTreeContainer::getTTree ( )
inlineinherited

return the TTree in which this container is stored

Definition at line 178 of file RootTreeContainer.h.

178{ return m_tree; }
TTree * m_tree
Reference to the root tree object.

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ isBranchContainer()

bool pool::RootTreeContainer::isBranchContainer ( ) const
inlineinherited

is this a container in a TBranch? (regular ones take the whole TTree)

Definition at line 184 of file RootTreeContainer.h.

184{ return !m_branchName.empty(); }
std::string m_branchName
Branch name, if branch is specified by user.

◆ isDirty()

bool pool::RootTreeContainer::isDirty ( ) const
inlineinherited

return true if this branch container was updated and it's TTree needs to be Filled

Definition at line 193 of file RootTreeContainer.h.

193{ return m_isDirty; }

◆ load()

virtual StatusCode pool::DbContainerImp::load ( void ** ptr,
ShapeH shape,
const Token::OID_t & lnkH,
Token::OID_t & oid,
bool any_next )
overridevirtualinherited

Find object within the container and load it into memory.

Parameters
ptr[IN/OUT] ROOT-style address of the pointer to object
shape[IN] Object type
linkH[IN] Preferred object OID
oid[OUT] Actual object OID
any_next[IN] On selection, objects may be skipped. If objects are skipped, the actual oid will differ from the preferred oid.
Returns
Status code indicating success or failure.

Implements pool::IDbContainer.

Reimplemented in pool::RootKeyContainer.

◆ loadObject()

virtual StatusCode pool::RootTreeIndexContainer::loadObject ( void ** ptr,
ShapeH shape,
Token::OID_t & oid )
overridevirtual

Find object by object identifier and load it into memory.

Parameters
ptr[IN/OUT] ROOT-style address of the pointer to object
shape[IN] Object type
oid[OUT] Object OID
Returns
Status code indicating success or failure.

Reimplemented from pool::RootTreeContainer.

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 167 of file AthMessaging.h.

168{
169 MsgStream* ms = m_msg_tls.get();
170 if (!ms) {
171 if (!m_initialized.test_and_set()) initMessaging();
172 ms = new MsgStream(m_imsg,m_nm);
173 m_msg_tls.reset( ms );
174 }
175
176 ms->setLevel (m_lvl);
177 return *ms;
178}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 182 of file AthMessaging.h.

183{ return msg() << lvl; }
MsgStream & msg() const
The standard message stream.

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152{
153 // If user did not set explicit message level we have to initialize
154 // the messaging and retrieve the default via the MessageSvc.
155 if (m_lvl==MSG::NIL && !m_initialized.test_and_set()) initMessaging();
156
157 if (m_lvl <= lvl) {
158 msg() << lvl;
159 return true;
160 } else {
161 return false;
162 }
163}

◆ name()

virtual std::string pool::DbContainerImp::name ( ) const
inlineoverridevirtualinherited

Get container name.

Implements pool::IDbContainer.

Definition at line 90 of file DbContainerImp.h.

91 { return m_name; }

◆ next()

virtual StatusCode pool::DbContainerImp::next ( Token::OID_t & linkH)
overridevirtualinherited

Fetch next object address to set token.

Implements pool::IDbContainer.

Reimplemented in pool::RootKeyContainer.

◆ nextRecordId()

virtual uint64_t pool::RootTreeIndexContainer::nextRecordId ( )
finaloverridevirtual

Number of entries within the container.

Reimplemented from pool::DbContainerImp.

◆ open()

virtual StatusCode pool::RootTreeIndexContainer::open ( DbDatabase & ,
const std::string & ,
const DbTypeInfo * ,
DbAccessMode  )
finaloverridevirtual

Open the container.

Reimplemented from pool::RootTreeContainer.

◆ operator=()

RootTreeIndexContainer & pool::RootTreeIndexContainer::operator= ( const RootTreeIndexContainer & )
delete

◆ release()

virtual void pool::DbContainerImp::release ( )
inlineoverridevirtualinherited

Release instance (Abstract interfaces do not expose destructor!)

Implements pool::IDbContainer.

Definition at line 86 of file DbContainerImp.h.

86{ delete this; }

◆ setBranchOffsetTabLen()

void pool::RootTreeContainer::setBranchOffsetTabLen ( TBranch * b,
int offsettab_len )
privateinherited

Recursively set Offset Table length for a branch and it's subbranches.

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ setOption()

virtual StatusCode pool::RootTreeContainer::setOption ( const DbOption & opt)
overridevirtualinherited

Set options.

Parameters
opt[IN] Reference to option object.
Returns
StatusCode code indicating success or failure.

Reimplemented from pool::DbContainerImp.

◆ setTreeFillMode()

void pool::RootTreeContainer::setTreeFillMode ( bool mode)
inherited

set Tree Filling mode (true/false) for branch containers

◆ size()

virtual uint64_t pool::RootTreeContainer::size ( )
overridevirtualinherited

Number of entries within the container.

Reimplemented from pool::DbContainerImp.

◆ store()

virtual StatusCode pool::DbContainerImp::store ( const void * object,
DbContainer & cntH,
ShapeH shape )
overridevirtualinherited

Store object in location.

Implements pool::IDbContainer.

Reimplemented in RNTupleContainer.

◆ transAct()

virtual StatusCode pool::RootTreeContainer::transAct ( Transaction::Action action)
overridevirtualinherited

Execute Transaction action.

Reimplemented from pool::DbContainerImp.

◆ useNextRecordId()

virtual void pool::RootTreeIndexContainer::useNextRecordId ( uint64_t )
finaloverridevirtual

Suggest next Record ID for tbe next object written - for synced indexes.

Reimplemented from pool::DbContainerImp.

◆ usingTreeFillMode()

bool pool::RootTreeContainer::usingTreeFillMode ( ) const
inlineinherited

return true if this branch container is using TTree Filling mode

Definition at line 190 of file RootTreeContainer.h.

190{ return m_treeFillMode; }
bool m_treeFillMode
if True, branch container will not use Branch->Fill() but will be filled with its Tree by the databas...

◆ writeObject()

virtual StatusCode pool::RootTreeIndexContainer::writeObject ( ActionList::value_type & )
overridevirtual

Commit single entry to container.

Reimplemented from pool::RootTreeContainer.

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_auxDynTool

std::unique_ptr<RootAuxDynIO::IFactoryTool> pool::RootTreeContainer::m_auxDynTool
protectedinherited

Factory object from AuxDynIO plugin that creates AuxDyn readers and writers.

Definition at line 116 of file RootTreeContainer.h.

◆ m_branches

Branches pool::RootTreeContainer::m_branches
protectedinherited

Branch map.

Definition at line 101 of file RootTreeContainer.h.

◆ m_branchName

std::string pool::RootTreeContainer::m_branchName
protectedinherited

Branch name, if branch is specified by user.

Definition at line 107 of file RootTreeContainer.h.

◆ m_dbH

DbDatabase pool::RootTreeContainer::m_dbH
protectedinherited

Parent Database handle.

Definition at line 103 of file RootTreeContainer.h.

◆ m_firstRead

bool pool::RootTreeIndexContainer::m_firstRead
private

first object retrieval attempt flag (to rebuild index)

Definition at line 80 of file RootTreeIndexContainer.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_index

Long64_t pool::RootTreeIndexContainer::m_index
private

Index (64 bit) - using ROOT type that matches the earlier 'long long'.

Definition at line 74 of file RootTreeIndexContainer.h.

◆ m_index_entries

uint64_t pool::RootTreeIndexContainer::m_index_entries
private

Definition at line 68 of file RootTreeIndexContainer.h.

◆ m_index_multi

const uint32_t pool::RootTreeIndexContainer::m_index_multi
private

Index multiplier (e.g. pid - ppid), fill in c'tor.

Definition at line 71 of file RootTreeIndexContainer.h.

◆ m_indexBranch

TBranch* pool::RootTreeIndexContainer::m_indexBranch
private

Pointer to index branch.

Definition at line 66 of file RootTreeIndexContainer.h.

◆ m_indexBump

int64_t pool::RootTreeIndexContainer::m_indexBump
private

How much to increase nextRecordID to keep index values synced with other containers.

Definition at line 77 of file RootTreeIndexContainer.h.

◆ m_ioBytes

int pool::RootTreeContainer::m_ioBytes
protectedinherited

Number of bytes written/read during last operation. Set to -1 if it failed.

Definition at line 109 of file RootTreeContainer.h.

◆ m_isDirty

bool pool::RootTreeContainer::m_isDirty
protectedinherited

flag set when a branch container was updated (but the branch was not Filled)

Definition at line 113 of file RootTreeContainer.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_name

std::string pool::DbContainerImp::m_name
protectedinherited

Container name.

Definition at line 73 of file DbContainerImp.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_rootDb

RootDatabase* pool::RootTreeContainer::m_rootDb
protectedinherited

Root database file reference.

Definition at line 105 of file RootTreeContainer.h.

◆ m_size

size_t pool::DbContainerImp::m_size
privateinherited

Current size of the transaction stack.

Definition at line 70 of file DbContainerImp.h.

◆ m_tree

TTree* pool::RootTreeContainer::m_tree
protectedinherited

Reference to the root tree object.

Definition at line 97 of file RootTreeContainer.h.

◆ m_treeFillMode

bool pool::RootTreeContainer::m_treeFillMode
protectedinherited

if True, branch container will not use Branch->Fill() but will be filled with its Tree by the database instance

Definition at line 111 of file RootTreeContainer.h.

◆ m_type

const DbTypeInfo* pool::RootTreeContainer::m_type
protectedinherited

reference to exact type description

Definition at line 99 of file RootTreeContainer.h.

◆ m_writeStack

ActionList pool::DbContainerImp::m_writeStack
privateinherited

Transaction fifo storage for writing.

Definition at line 68 of file DbContainerImp.h.


The documentation for this class was generated from the following file: