The Gaudi Framework  v36r16 (ea80daf8)
Gaudi::RootDataConnection Class Reference

#include <GaudiRootCnv/RootDataConnection.h>

Inheritance diagram for Gaudi::RootDataConnection:
Collaboration diagram for Gaudi::RootDataConnection:

Classes

class  ContainerSection
 
class  Tool
 

Public Types

enum  Status : StatusCode::code_t { Status::ROOT_READ_ERROR = 0x2, Status::ROOT_OPEN_ERROR = 0x4 }
 
typedef std::vector< std::stringStringVec
 Type definition for string maps. More...
 
typedef std::vector< std::pair< std::string, std::string > > ParamMap
 Type definition for the parameter map. More...
 
typedef std::map< std::string, TTree *, std::less<> > Sections
 Definition of tree sections. More...
 
typedef std::vector< ContainerSectionContainerSections
 Definition of container sections to handle merged files. More...
 
typedef std::map< std::string, ContainerSections, std::less<> > MergeSections
 Definition of database section to handle merged files. More...
 
typedef std::vector< RootRefLinkSections
 Link sections definition. More...
 
typedef std::set< const IInterface * > Clients
 Client set. More...
 
- Public Types inherited from Gaudi::IDataConnection
enum  IoType { READ = 1 << 1, UPDATE = 1 << 2, CREATE = 1 << 3, RECREATE = ( 1 << 4 ) + ( 1 << 3 ) }
 I/O Connection types. More...
 
enum  IoStatus { BAD_DATA_CONNECTION = 4 }
 Status Code on bad file connection. More...
 

Public Member Functions

MsgStreammsgSvc () const
 Allow access to printer service. More...
 
ToolmakeTool ()
 Create file access tool to encapsulate POOL compatibiliy. More...
 
 RootDataConnection (const IInterface *own, std::string_view nam, std::shared_ptr< RootConnectionSetup > setup)
 Standard constructor. More...
 
TFile * file () const
 Direct access to TFile structure. More...
 
bool isConnected () const override
 Check if connected to data source. More...
 
bool isWritable () const
 Is the file writable? More...
 
Tooltool () const
 Access tool. More...
 
const MergeSectionsmergeSections () const
 Access merged data section inventory. More...
 
const StringVecmergeFIDs () const
 Access merged FIDs. More...
 
void addClient (const IInterface *client)
 Add new client to this data source. More...
 
size_t removeClient (const IInterface *client)
 Remove client from this data source. More...
 
bool lookupClient (const IInterface *client) const
 Lookup client for this data source. More...
 
void badWriteError (std::string_view msg) const
 Error handler when bad write statements occur. More...
 
std::pair< const RootRef *, const ContainerSection * > getMergeSection (std::string_view container, int entry) const
 Access link section for single container and entry. More...
 
void enableStatistics (std::string_view section)
 Enable TTreePerStats. More...
 
void saveStatistics (std::string_view statisticsFile)
 Save TTree access statistics if required. More...
 
int loadObj (std::string_view section, std::string_view cnt, unsigned long entry, DataObject *&pObj)
 Load object. More...
 
int loadRefs (std::string_view section, std::string_view cnt, unsigned long entry, RootObjectRefs &refs)
 Load references object. More...
 
std::pair< int, unsigned long > saveObj (std::string_view section, std::string_view cnt, TClass *cl, DataObject *pObj, int minBufferSize, int maxBufferSize, int approxEventsPerBasket, int split_lvl, bool fill_missing=false)
 Save object of a given class to section and container. More...
 
std::pair< int, unsigned long > save (std::string_view section, std::string_view cnt, TClass *cl, void *pObj, int minBufferSize, int maxBufferSize, int approxEventsPerBasket, int split_lvl, bool fill_missing=false)
 Save object of a given class to section and container. More...
 
StatusCode connectRead () override
 Open data stream in read mode. More...
 
StatusCode connectWrite (IoType typ) override
 Open data stream in write mode. More...
 
StatusCode disconnect () override
 Release data stream and release implementation dependent resources. More...
 
StatusCode read (void *const, size_t) override
 Read root byte buffer from input stream. More...
 
StatusCode write (const void *, int) override
 Write root byte buffer to output stream. More...
 
long long int seek (long long int, int) override
 Seek on the file described by ioDesc. Arguments as in ::seek() More...
 
TTree * getSection (std::string_view sect, bool create=false)
 Access TTree section from section name. The section is created if required. More...
 
TBranch * getBranch (std::string_view section, std::string_view branch_name)
 Access data branch by name: Get existing branch in read only mode. More...
 
TBranch * getBranch (std::string_view section, std::string_view branch_name, TClass *cl, void *ptr, int buff_siz, int split_lvl)
 Access data branch by name: Get existing branch in write mode. More...
 
void makeRef (const IRegistry &pA, RootRef &ref)
 Create reference object from registry entry. More...
 
void makeRef (std::string_view name, long clid, int tech, std::string_view db, std::string_view cnt, int entry, RootRef &ref)
 Create reference object from values. More...
 
int makeLink (std::string_view p)
 Convert path string to path index. More...
 
const std::stringgetDb (int which) const
 Access database/file name from saved index. More...
 
const std::stringgetCont (int which) const
 Access container name from saved index. More...
 
const std::stringgetLink (int which) const
 Access link name from saved index. More...
 
- Public Member Functions inherited from Gaudi::IDataConnection
 IDataConnection (const IInterface *own, std::string nam)
 Standard constructor. More...
 
virtual ~IDataConnection ()=default
 Standard destructor. More...
 
const std::stringname () const
 Connection name. More...
 
void setFID (std::string fid)
 Set file ID. More...
 
const std::stringfid () const
 Access file id. More...
 
const std::stringpfn () const
 Access physical file name. More...
 
void setPFN (std::string fn)
 Set physical file name. More...
 
int ageFile ()
 Increase age of I/O source. More...
 
void resetAge ()
 Reset age. More...
 
int age () const
 Access age counter. More...
 
const IInterfaceowner () const
 Owner instance. More...
 

Public Attributes

std::unique_ptr< Toolm_tool
 

Protected Member Functions

const std::stringempty () const
 Empty string reference. More...
 
StatusCode saveRefs ()
 Internal helper to save/update reference tables. More...
 

Protected Attributes

std::shared_ptr< RootConnectionSetupm_setup
 Reference to the setup structure. More...
 
std::unique_ptr< TTreePerfStats > m_statistics
 I/O read statistics from TTree. More...
 
std::unique_ptr< TFile > m_file
 Reference to ROOT file. More...
 
TTree * m_refs = nullptr
 Pointer to the reference tree. More...
 
Sections m_sections
 Tree sections in TFile. More...
 
StringVec m_dbs
 Map containing external database file names (fids) More...
 
StringVec m_conts
 Map containing external container names. More...
 
StringVec m_links
 Map containing internal links names. More...
 
StringVec m_mergeFIDs
 Map containing merge FIDs. More...
 
ParamMap m_params
 Parameter map for file parameters. More...
 
MergeSections m_mergeSects
 Database section map for merged files. More...
 
LinkSections m_linkSects
 Database link sections. More...
 
Clients m_clients
 Client list. More...
 
std::string m_empty
 Buffer for empty string reference. More...
 
- Protected Attributes inherited from Gaudi::IDataConnection
std::string m_name
 Connection name/identifier. More...
 
std::string m_fid
 File ID of the connection. More...
 
std::string m_pfn
 Physical file name of the connection. More...
 
int m_age = 0
 Age counter. More...
 
const IInterfacem_owner = nullptr
 Owner pointer. More...
 

Friends

class Tool
 

Detailed Description

Concrete implementation of the IDataConnection interface to access ROOT files.

Author
M.Frank
Version
1.0
Date
20/12/2009

Definition at line 107 of file RootDataConnection.h.

Member Typedef Documentation

◆ Clients

Client set.

Definition at line 155 of file RootDataConnection.h.

◆ ContainerSections

Definition of container sections to handle merged files.

Definition at line 149 of file RootDataConnection.h.

◆ LinkSections

Link sections definition.

Definition at line 153 of file RootDataConnection.h.

◆ MergeSections

Definition of database section to handle merged files.

Definition at line 151 of file RootDataConnection.h.

◆ ParamMap

Type definition for the parameter map.

Definition at line 145 of file RootDataConnection.h.

◆ Sections

Definition of tree sections.

Definition at line 147 of file RootDataConnection.h.

◆ StringVec

Type definition for string maps.

Definition at line 143 of file RootDataConnection.h.

Member Enumeration Documentation

◆ Status

Enumerator
ROOT_READ_ERROR 
ROOT_OPEN_ERROR 

Definition at line 109 of file RootDataConnection.h.

109 : StatusCode::code_t { ROOT_READ_ERROR = 0x2, ROOT_OPEN_ERROR = 0x4 };

Constructor & Destructor Documentation

◆ RootDataConnection()

RootDataConnection::RootDataConnection ( const IInterface own,
std::string_view  nam,
std::shared_ptr< RootConnectionSetup setup 
)

Standard constructor.

Definition at line 171 of file RootDataConnection.cpp.

173  : IDataConnection( owner, std::string{ fname } )
174  , m_setup( std::move( setup ) ) { // 01234567890123456789012345678901234567890
175  // Check if FID: A82A3BD8-7ECB-DC11-8DC0-000423D950B0
176  if ( fname.size() == 36 && fname[8] == '-' && fname[13] == '-' && fname[18] == '-' && fname[23] == '-' ) {
177  m_name = "FID:";
178  m_name.append( fname.data(), fname.size() );
179  }
180  m_age = 0;
181  m_file.reset();
182  addClient( owner );
183 }

Member Function Documentation

◆ addClient()

void RootDataConnection::addClient ( const IInterface client)

Add new client to this data source.

Definition at line 186 of file RootDataConnection.cpp.

186 { m_clients.insert( client ); }

◆ badWriteError()

void RootDataConnection::badWriteError ( std::string_view  msg) const

Error handler when bad write statements occur.

Definition at line 202 of file RootDataConnection.cpp.

202  {
203  msgSvc() << MSG::ERROR << "File:" << fid() << "Failed action:" << msg << endmsg;
204 }

◆ connectRead()

StatusCode RootDataConnection::connectRead ( )
overridevirtual

Open data stream in read mode.

Connect the file in READ mode.

Implements Gaudi::IDataConnection.

Definition at line 243 of file RootDataConnection.cpp.

243  {
244  m_file.reset( TFile::Open( m_pfn.c_str() ) );
245  if ( !m_file || m_file->IsZombie() ) {
246  m_file.reset();
247  return StatusCode::FAILURE;
248  }
250  msgSvc() << MSG::DEBUG << "Opened file " << m_pfn << " in mode READ. [" << m_fid << "]" << endmsg << MSG::DEBUG;
251  if ( msgSvc().isActive() ) m_file->ls();
252  msgSvc() << MSG::VERBOSE;
253  if ( msgSvc().isActive() ) m_file->Print();
254  if ( makeTool() ) {
255  sc = m_tool->readRefs();
256  sc.ignore();
257 #if ROOT_VERSION_CODE >= ROOT_VERSION( 5, 33, 0 )
258  if ( sc == Status::ROOT_READ_ERROR ) {
259  IIncidentSvc* inc = m_setup->incidentSvc();
260  if ( inc ) { inc->fireIncident( Incident( pfn(), IncidentType::CorruptedInputFile ) ); }
261  }
262 #endif
263  }
264  if ( !sc.isSuccess() ) return sc;
265  bool need_fid = m_fid == m_pfn;
266  string fid = m_fid;
267  m_mergeFIDs.clear();
268  for ( auto& elem : m_params ) {
269  if ( elem.first == "FID" ) {
270  m_mergeFIDs.push_back( elem.second );
271  if ( elem.second != m_fid ) {
272  msgSvc() << MSG::DEBUG << "Check FID param:" << elem.second << endmsg;
273  // if ( m_fid == m_pfn ) {
274  m_fid = elem.second;
275  //}
276  }
277  }
278  }
279  if ( !need_fid && fid != m_fid ) {
280  msgSvc() << MSG::ERROR << "FID mismatch:" << fid << "(Catalog) != " << m_fid << "(file)" << endmsg
281  << "for PFN:" << m_pfn << endmsg;
282  return StatusCode::FAILURE;
283  }
284  msgSvc() << MSG::DEBUG << "Using FID " << m_fid << " from params table...." << endmsg << "for PFN:" << m_pfn
285  << endmsg;
286  return sc;
287 }

◆ connectWrite()

StatusCode RootDataConnection::connectWrite ( IoType  typ)
overridevirtual

Open data stream in write mode.

Implements Gaudi::IDataConnection.

Definition at line 290 of file RootDataConnection.cpp.

290  {
291  int compress = RootConnectionSetup::compression();
292  msgSvc() << MSG::DEBUG;
293  std::string spec = m_pfn;
294  if ( m_setup->produceReproducibleFiles ) spec += "?reproducible"; // https://root.cern.ch/doc/master/classTFile.html
295  switch ( typ ) {
296  case CREATE:
297  resetAge();
298  m_file.reset( TFile::Open( spec.c_str(), "CREATE", "Root event data", compress ) );
299  m_refs = new TTree( "Refs", "Root reference data" );
300  msgSvc() << "Opened file " << m_pfn << " in mode CREATE. [" << m_fid << "]" << endmsg;
301  m_params.emplace_back( "PFN", m_pfn );
302  if ( m_fid != m_pfn ) { m_params.emplace_back( "FID", m_fid ); }
303  makeTool();
304  break;
305  case RECREATE:
306  resetAge();
307  m_file.reset( TFile::Open( spec.c_str(), "RECREATE", "Root event data", compress ) );
308  msgSvc() << "Opened file " << m_pfn << " in mode RECREATE. [" << m_fid << "]" << endmsg;
309  m_refs = new TTree( "Refs", "Root reference data" );
310  m_params.emplace_back( "PFN", m_pfn );
311  if ( m_fid != m_pfn ) { m_params.emplace_back( "FID", m_fid ); }
312  makeTool();
313  break;
314  case UPDATE:
315  resetAge();
316  m_file.reset( TFile::Open( spec.c_str(), "UPDATE", "Root event data", compress ) );
317  msgSvc() << "Opened file " << m_pfn << " in mode UPDATE. [" << m_fid << "]" << endmsg;
318  if ( m_file && !m_file->IsZombie() ) {
319  if ( makeTool() ) {
320  StatusCode sc = m_tool->readRefs();
321  sc.ignore();
322  if ( sc == Status::ROOT_READ_ERROR ) {
323 #if ROOT_VERSION_CODE >= ROOT_VERSION( 5, 33, 0 )
324  IIncidentSvc* inc = m_setup->incidentSvc();
325  if ( inc ) { inc->fireIncident( Incident( pfn(), IncidentType::CorruptedInputFile ) ); }
326 #endif
327  }
328  return sc;
329  }
330  TDirectory::TContext ctxt( m_file.get() );
331  m_refs = new TTree( "Refs", "Root reference data" );
332  makeTool();
333  return StatusCode::SUCCESS;
334  }
335  break;
336  default:
337  m_refs = nullptr;
338  m_file.reset();
339  return StatusCode::FAILURE;
340  }
342 }

◆ disconnect()

StatusCode RootDataConnection::disconnect ( )
overridevirtual

Release data stream and release implementation dependent resources.

Implements Gaudi::IDataConnection.

Definition at line 345 of file RootDataConnection.cpp.

345  {
346  if ( m_file ) {
347  if ( !m_file->IsZombie() ) {
348  if ( m_file->IsWritable() ) {
349  msgSvc() << MSG::DEBUG;
350  TDirectory::TContext ctxt( m_file.get() );
351  if ( m_refs ) {
352  if ( !m_tool->saveRefs().isSuccess() ) badWriteError( "Saving References" );
353  if ( m_refs->Write() < 0 ) badWriteError( "Write Reference branch" );
354  }
355  for ( auto& i : m_sections ) {
356  if ( i.second ) {
357  if ( i.second->Write() < 0 ) badWriteError( "Write section:" + i.first );
358  msgSvc() << "Disconnect section " << i.first << " " << i.second->GetName() << endmsg;
359  }
360  }
361  m_sections.clear();
362  }
363  msgSvc() << MSG::DEBUG;
364  if ( msgSvc().isActive() ) m_file->ls();
365  msgSvc() << MSG::VERBOSE;
366  if ( msgSvc().isActive() ) m_file->Print();
367  m_file->Close();
368  }
369  msgSvc() << MSG::DEBUG << "Disconnected file " << m_pfn << " " << m_file->GetName() << endmsg;
370  m_file.reset();
371  m_tool.reset();
372  }
373  return StatusCode::SUCCESS;
374 }

◆ empty()

CSTR RootDataConnection::empty ( ) const
protected

Empty string reference.

Definition at line 477 of file RootDataConnection.cpp.

477 { return s_empty; }

◆ enableStatistics()

void RootDataConnection::enableStatistics ( std::string_view  section)

Enable TTreePerStats.

Definition at line 216 of file RootDataConnection.cpp.

216  {
217  if ( m_statistics ) {
218  TTree* t = getSection( section, false );
219  if ( t ) {
220  m_statistics.reset( new TTreePerfStats( ( std::string{ section } + "_ioperf" ).c_str(), t ) );
221  return;
222  }
223  msgSvc() << MSG::WARNING << "Failed to enable perfstats for tree:" << section << endmsg;
224  return;
225  }
226  msgSvc() << MSG::INFO << "Perfstats are ALREADY ENABLED." << endmsg;
227 }

◆ file()

TFile* Gaudi::RootDataConnection::file ( ) const
inline

Direct access to TFile structure.

Definition at line 257 of file RootDataConnection.h.

257 { return m_file.get(); }

◆ getBranch() [1/2]

TBranch* Gaudi::RootDataConnection::getBranch ( std::string_view  section,
std::string_view  branch_name 
)
inline

Access data branch by name: Get existing branch in read only mode.

Definition at line 319 of file RootDataConnection.h.

319  {
320  return m_tool->getBranch( section, branch_name );
321  }

◆ getBranch() [2/2]

TBranch * RootDataConnection::getBranch ( std::string_view  section,
std::string_view  branch_name,
TClass *  cl,
void *  ptr,
int  buff_siz,
int  split_lvl 
)

Access data branch by name: Get existing branch in write mode.

Definition at line 443 of file RootDataConnection.cpp.

444  {
445  string n = std::string{ branch_name };
447  begin( n ), end( n ), []( const char c ) { return !isalnum( c ); }, '_' );
448  n += ".";
449  TTree* t = getSection( section, true );
450  TBranch* b = t->GetBranch( n.c_str() );
451  if ( !b && cl && m_file->IsWritable() ) {
452  b = t->Branch( n.c_str(), cl->GetName(), (void*)( ptr ? &ptr : nullptr ), buff_siz, split_lvl );
453  }
454  if ( !b ) b = t->GetBranch( std::string{ branch_name }.c_str() );
455  if ( b ) b->SetAutoDelete( kFALSE );
456  return b;
457 }

◆ getCont()

const std::string& Gaudi::RootDataConnection::getCont ( int  which) const
inline

Access container name from saved index.

Definition at line 339 of file RootDataConnection.h.

339  {
340  return ( which >= 0 ) && ( size_t( which ) < m_conts.size() ) ? *( m_conts.begin() + which ) : empty();
341  }

◆ getDb()

CSTR RootDataConnection::getDb ( int  which) const

Access database/file name from saved index.

Definition at line 468 of file RootDataConnection.cpp.

468  {
469  if ( ( which >= 0 ) && ( size_t( which ) < m_dbs.size() ) ) {
470  if ( *( m_dbs.begin() + which ) == s_local ) return m_fid;
471  return *( m_dbs.begin() + which );
472  }
473  return s_empty;
474 }

◆ getLink()

const std::string& Gaudi::RootDataConnection::getLink ( int  which) const
inline

Access link name from saved index.

Definition at line 344 of file RootDataConnection.h.

344  {
345  return ( which >= 0 ) && ( size_t( which ) < m_links.size() ) ? *( m_links.begin() + which ) : empty();
346  }

◆ getMergeSection()

pair< const RootRef *, const RootDataConnection::ContainerSection * > RootDataConnection::getMergeSection ( std::string_view  container,
int  entry 
) const

Access link section for single container and entry.

Definition at line 602 of file RootDataConnection.cpp.

602  {
603  // size_t idx = cont.find('/',1);
604  // string container = cont[0]=='/' ? cont.substr(1,idx==string::npos?idx:idx-1) : cont;
605  auto i = m_mergeSects.find( container );
606  if ( i != m_mergeSects.end() ) {
607  size_t cnt = 0;
608  const ContainerSections& s = ( *i ).second;
609  for ( auto j = s.cbegin(); j != s.cend(); ++j, ++cnt ) {
610  const ContainerSection& c = *j;
611  if ( entry >= c.start && entry < ( c.start + c.length ) ) {
612  if ( m_linkSects.size() > cnt ) {
613  if ( msgSvc().isActive() ) {
614  msgSvc() << MSG::VERBOSE << "MergeSection for:" << container << " [" << entry << "]" << endmsg
615  << "FID:" << m_fid << " -> PFN:" << m_pfn << endmsg;
616  }
617  return { &( m_linkSects[cnt] ), &c };
618  }
619  }
620  }
621  }
622  msgSvc() << MSG::DEBUG << "Return INVALID MergeSection for:" << container << " [" << entry << "]" << endmsg
623  << "FID:" << m_fid << " -> PFN:" << m_pfn << endmsg;
624  return { nullptr, nullptr };
625 }

◆ getSection()

TTree * RootDataConnection::getSection ( std::string_view  sect,
bool  create = false 
)

Access TTree section from section name. The section is created if required.

Definition at line 377 of file RootDataConnection.cpp.

377  {
378  auto it = m_sections.find( section );
379  TTree* t = ( it != m_sections.end() ? it->second : nullptr );
380  if ( !t ) {
381  t = (TTree*)m_file->Get( std::string{ section }.c_str() );
382  if ( !t && create ) {
383  TDirectory::TContext ctxt( m_file.get() );
384  t = new TTree( std::string{ section }.c_str(), "Root data for Gaudi" );
385  }
386  if ( t ) {
387  int cacheSize = m_setup->cacheSize;
388  if ( create ) {
389  // t->SetAutoFlush(100);
390  }
391  if ( section == m_setup->loadSection && cacheSize > -2 ) {
392  MsgStream& msg = msgSvc();
393  int learnEntries = m_setup->learnEntries;
394  t->SetCacheSize( cacheSize );
395  t->SetCacheLearnEntries( learnEntries );
396  msg << MSG::DEBUG;
397  if ( create ) {
398  msg << "Tree:" << section << "Setting up tree cache:" << cacheSize << endmsg;
399  } else {
400  const StringVec& vB = m_setup->vetoBranches;
401  const StringVec& cB = m_setup->cacheBranches;
402  msg << "Tree:" << section << " Setting up tree cache:" << cacheSize << " Add all branches." << endmsg;
403  msg << "Tree:" << section << " Learn for " << learnEntries << " entries." << endmsg;
404 
405  if ( cB.empty() && vB.empty() ) {
406  msg << "Adding (default) all branches to tree cache." << endmsg;
407  t->AddBranchToCache( "*", kTRUE );
408  }
409  if ( cB.size() == 1 && cB[0] == "*" ) {
410  msg << "Adding all branches to tree cache according to option \"CacheBranches\"." << endmsg;
411  t->AddBranchToCache( "*", kTRUE );
412  } else {
413  for ( TIter it( t->GetListOfBranches() ); it.Next(); ) {
414  const char* n = ( (TNamed*)( *it ) )->GetName();
415  bool add = false, veto = false;
416  for ( const auto& i : cB ) {
417  if ( !match_wild( n, ( i ).c_str() ) ) continue;
418  add = true;
419  break;
420  }
421  for ( auto i = vB.cbegin(); !add && i != vB.cend(); ++i ) {
422  if ( !match_wild( n, ( *i ).c_str() ) ) continue;
423  veto = true;
424  break;
425  }
426  if ( add && !veto ) {
427  msg << "Add " << n << " to branch cache." << endmsg;
428  t->AddBranchToCache( n, kTRUE );
429  } else {
430  msg << "Do not cache branch " << n << endmsg;
431  }
432  }
433  }
434  }
435  }
436  m_sections[std::string{ section }] = t;
437  }
438  }
439  return t;
440 }

◆ isConnected()

bool Gaudi::RootDataConnection::isConnected ( ) const
inlineoverridevirtual

Check if connected to data source.

Implements Gaudi::IDataConnection.

Definition at line 259 of file RootDataConnection.h.

259 { return bool( m_file ); }

◆ isWritable()

bool Gaudi::RootDataConnection::isWritable ( ) const
inline

Is the file writable?

Definition at line 261 of file RootDataConnection.h.

261 { return m_file && m_file->IsWritable(); }

◆ loadObj()

int RootDataConnection::loadObj ( std::string_view  section,
std::string_view  cnt,
unsigned long  entry,
DataObject *&  pObj 
)

Load object.

Definition at line 535 of file RootDataConnection.cpp.

536  {
537  TBranch* b = getBranch( section, cnt );
538  if ( b ) {
539  TClass* cl = gROOT->GetClass( b->GetClassName(), kTRUE );
540  if ( cl ) {
541  int nb = -1;
542  pObj = (DataObject*)cl->New();
543  {
544  DataObjectPush push( pObj );
545  b->SetAddress( &pObj );
546  if ( section == m_setup->loadSection ) {
547  TTree* t = b->GetTree();
548  if ( Long64_t( entry ) != t->GetReadEntry() ) { t->LoadTree( Long64_t( entry ) ); }
549  }
550  nb = b->GetEntry( entry );
551  msgSvc() << MSG::VERBOSE;
552  if ( msgSvc().isActive() ) {
553  msgSvc() << "Load [" << entry << "] --> " << section << ":" << cnt << " " << nb << " bytes." << endmsg;
554  }
555  if ( nb < 0 ) { // This is definitely an error...ROOT says if reads fail, -1 is issued.
556 #if ROOT_VERSION_CODE >= ROOT_VERSION( 5, 33, 0 )
557  IIncidentSvc* inc = m_setup->incidentSvc();
558  if ( inc ) { inc->fireIncident( Incident( pfn(), IncidentType::CorruptedInputFile ) ); }
559 #endif
560  } else if ( nb == 0 && pObj->clID() == CLID_DataObject ) {
561  TFile* f = b->GetFile();
562  int vsn = f->GetVersion();
563  if ( vsn < 52400 ) {
564  // For Gaudi v21r5 (ROOT 5.24.00b) DataObject::m_version was not written!
565  // Still this call be well be successful.
566  nb = 1;
567  } else if ( vsn > 1000000 && ( vsn % 1000000 ) < 52400 ) {
568  // dto. Some POOL files have for unknown reasons a version
569  // not according to ROOT standards. Hack this explicitly.
570  nb = 1;
571  }
572  }
573  if ( nb < 0 ) {
574  delete pObj;
575  pObj = nullptr;
576  }
577  }
578  return nb;
579  }
580  }
581  return -1;
582 }

◆ loadRefs()

int RootDataConnection::loadRefs ( std::string_view  section,
std::string_view  cnt,
unsigned long  entry,
RootObjectRefs refs 
)

Load references object.

Definition at line 585 of file RootDataConnection.cpp.

586  {
587  int nbytes = m_tool->loadRefs( section, cnt, entry, refs );
588 #if ROOT_VERSION_CODE >= ROOT_VERSION( 5, 33, 0 )
589  if ( nbytes < 0 ) {
590  // This is definitely an error:
591  // -- Either branch not preesent at all or
592  // -- ROOT I/O error, which issues -1
593  IIncidentSvc* inc = m_setup->incidentSvc();
594  if ( inc ) { inc->fireIncident( Incident( pfn(), IncidentType::CorruptedInputFile ) ); }
595  }
596 #endif
597  return nbytes;
598 }

◆ lookupClient()

bool RootDataConnection::lookupClient ( const IInterface client) const

Lookup client for this data source.

Definition at line 196 of file RootDataConnection.cpp.

196  {
197  auto i = m_clients.find( client );
198  return i != m_clients.end();
199 }

◆ makeLink()

int RootDataConnection::makeLink ( std::string_view  p)

Convert path string to path index.

Definition at line 460 of file RootDataConnection.cpp.

460  {
461  auto ip = std::find( std::begin( m_links ), std::end( m_links ), p );
462  if ( ip != std::end( m_links ) ) return std::distance( std::begin( m_links ), ip );
463  m_links.push_back( std::string{ p } );
464  return m_links.size() - 1;
465 }

◆ makeRef() [1/2]

void RootDataConnection::makeRef ( const IRegistry pA,
RootRef ref 
)

Create reference object from registry entry.

Definition at line 628 of file RootDataConnection.cpp.

628  {
629  IOpaqueAddress* pA = pR.address();
630  makeRef( pR.name(), pA->clID(), pA->svcType(), pA->par()[0], pA->par()[1], -1, ref );
631 }

◆ makeRef() [2/2]

void RootDataConnection::makeRef ( std::string_view  name,
long  clid,
int  tech,
std::string_view  db,
std::string_view  cnt,
int  entry,
RootRef ref 
)

Create reference object from values.

Definition at line 634 of file RootDataConnection.cpp.

635  {
636  auto db = ( dbase == m_fid ? std::string_view{ s_local } : dbase );
637  ref.entry = entry;
638 
639  int cdb = -1;
640  if ( !db.empty() ) {
641  auto idb = std::find_if( m_dbs.begin(), m_dbs.end(), [&]( const std::string& i ) { return i == db; } );
642  cdb = std::distance( m_dbs.begin(), idb );
643  if ( idb == m_dbs.end() ) m_dbs.push_back( std::string{ db } );
644  }
645 
646  int ccnt = -1;
647  if ( !cnt.empty() ) {
648  auto icnt = std::find_if( m_conts.begin(), m_conts.end(), [&]( const std::string& i ) { return i == cnt; } );
649  ccnt = std::distance( m_conts.begin(), icnt );
650  if ( icnt == m_conts.end() ) m_conts.push_back( std::string{ cnt } );
651  }
652 
653  int clnk = -1;
654  if ( !name.empty() ) {
655  auto ilnk = std::find_if( m_links.begin(), m_links.end(), [&]( const std::string& i ) { return i == name; } );
656  clnk = std::distance( m_links.begin(), ilnk );
657  if ( ilnk == m_links.end() ) m_links.push_back( std::string{ name } );
658  }
659 
660  ref.dbase = cdb;
661  ref.container = ccnt;
662  ref.link = clnk;
663  ref.clid = clid;
664  ref.svc = tech;
665  if ( ref.svc == POOL_ROOT_StorageType || ref.svc == POOL_ROOTKEY_StorageType ||
666  ref.svc == POOL_ROOTTREE_StorageType ) {
667  ref.svc = ROOT_StorageType;
668  }
669 }

◆ makeTool()

RootDataConnection::Tool * RootDataConnection::makeTool ( )

Create file access tool to encapsulate POOL compatibiliy.

Definition at line 230 of file RootDataConnection.cpp.

230  {
231  if ( !m_refs ) m_refs = (TTree*)m_file->Get( "Refs" );
232  if ( m_refs ) m_tool.reset( new RootTool( this ) );
233 #ifdef __POOL_COMPATIBILITY
234  else if ( m_file->Get( "##Links" ) != nullptr )
235  m_tool.reset( new PoolTool( this ) );
236 #endif
237  else
238  m_tool.reset();
239  return m_tool.get();
240 }

◆ mergeFIDs()

const StringVec& Gaudi::RootDataConnection::mergeFIDs ( ) const
inline

Access merged FIDs.

Definition at line 267 of file RootDataConnection.h.

267 { return m_mergeFIDs; }

◆ mergeSections()

const MergeSections& Gaudi::RootDataConnection::mergeSections ( ) const
inline

Access merged data section inventory.

Definition at line 265 of file RootDataConnection.h.

265 { return m_mergeSects; }

◆ msgSvc()

MsgStream& Gaudi::RootDataConnection::msgSvc ( ) const
inline

Allow access to printer service.

Definition at line 158 of file RootDataConnection.h.

158 { return m_setup->msgSvc(); }

◆ read()

StatusCode Gaudi::RootDataConnection::read ( void * const  ,
size_t   
)
inlineoverridevirtual

Read root byte buffer from input stream.

Implements Gaudi::IDataConnection.

Definition at line 309 of file RootDataConnection.h.

309 { return StatusCode::FAILURE; }

◆ removeClient()

size_t RootDataConnection::removeClient ( const IInterface client)

Remove client from this data source.

Definition at line 189 of file RootDataConnection.cpp.

189  {
190  auto i = m_clients.find( client );
191  if ( i != m_clients.end() ) m_clients.erase( i );
192  return m_clients.size();
193 }

◆ save()

pair< int, unsigned long > RootDataConnection::save ( std::string_view  section,
std::string_view  cnt,
TClass *  cl,
void *  pObj,
int  minBufferSize,
int  maxBufferSize,
int  approxEventsPerBasket,
int  split_lvl,
bool  fill_missing = false 
)

Save object of a given class to section and container.

Definition at line 488 of file RootDataConnection.cpp.

490  {
491  split_lvl = 0;
492  TBranch* b = getBranch( section, cnt, cl, pObj ? &pObj : nullptr, minBufferSize, split_lvl );
493  if ( b ) {
494  Long64_t evt = b->GetEntries();
495  // msgSvc() << MSG::DEBUG << cnt.c_str() << " Obj:" << (void*)pObj
496  // << " Split:" << split_lvl << " Buffer size:" << minBufferSize << endl;
497  bool set_buffer_size = ( evt == 0 );
498  if ( fill_missing ) {
499  Long64_t num, nevt = b->GetTree()->GetEntries();
500  if ( nevt > evt ) {
501  set_buffer_size = true;
502  b->SetAddress( nullptr );
503  num = nevt - evt;
504  while ( num > 0 ) {
505  b->Fill();
506  --num;
507  }
508  msgSvc() << MSG::DEBUG << "Added " << long( nevt - evt ) << " / Tree: " << nevt
509  << " / Branch: " << b->GetEntries() + 1 << " NULL entries to:" << cnt << endmsg;
510  evt = b->GetEntries();
511  }
512  }
513  if ( set_buffer_size ) {
514  auto dummy_file = make_unique<TMemFile>( "dummy.root", "CREATE" );
515  auto dummy_tree = make_unique<TTree>( "DummyTree", "DummyTree", split_lvl, dummy_file->GetDirectory( "/" ) );
516  TBranch* dummy_branch = dummy_tree->Branch( "DummyBranch", cl->GetName(), &pObj, minBufferSize, split_lvl );
517  Int_t nWritten = dummy_branch->Fill();
518  if ( nWritten < 0 ) return { nWritten, evt };
519  Int_t newBasketSize = nWritten * approxEventsPerBasket;
520  // Ensure that newBasketSize doesn't wrap around
521  if ( std::numeric_limits<Int_t>::max() / approxEventsPerBasket < nWritten ) {
522  newBasketSize = std::numeric_limits<Int_t>::max();
523  }
524  b->SetBasketSize( std::min( maxBufferSize, std::max( minBufferSize, newBasketSize ) ) );
525  msgSvc() << MSG::DEBUG << "Setting basket size to " << newBasketSize << " for " << cnt << endmsg;
526  }
527  b->SetAddress( &pObj );
528  return { b->Fill(), evt };
529  }
530  if ( pObj ) { msgSvc() << MSG::ERROR << "Failed to access branch " << m_name << "/" << cnt << endmsg; }
531  return { -1, ~0 };
532 }

◆ saveObj()

pair< int, unsigned long > RootDataConnection::saveObj ( std::string_view  section,
std::string_view  cnt,
TClass *  cl,
DataObject pObj,
int  minBufferSize,
int  maxBufferSize,
int  approxEventsPerBasket,
int  split_lvl,
bool  fill_missing = false 
)

Save object of a given class to section and container.

Definition at line 480 of file RootDataConnection.cpp.

482  {
483  DataObjectPush push( pObj );
484  return save( section, cnt, cl, pObj, minBufferSize, maxBufferSize, approxEventsPerBasket, split_lvl, fill );
485 }

◆ saveRefs()

StatusCode Gaudi::RootDataConnection::saveRefs ( )
protected

Internal helper to save/update reference tables.

◆ saveStatistics()

void RootDataConnection::saveStatistics ( std::string_view  statisticsFile)

Save TTree access statistics if required.

Definition at line 207 of file RootDataConnection.cpp.

207  {
208  if ( m_statistics ) {
209  m_statistics->Print();
210  if ( !statisticsFile.empty() ) m_statistics->SaveAs( std::string{ statisticsFile }.c_str() );
212  }
213 }

◆ seek()

long long int Gaudi::RootDataConnection::seek ( long long int  ,
int   
)
inlineoverridevirtual

Seek on the file described by ioDesc. Arguments as in ::seek()

Implements Gaudi::IDataConnection.

Definition at line 313 of file RootDataConnection.h.

313 { return -1; }

◆ tool()

Tool* Gaudi::RootDataConnection::tool ( ) const
inline

Access tool.

Definition at line 263 of file RootDataConnection.h.

263 { return m_tool.get(); }

◆ write()

StatusCode Gaudi::RootDataConnection::write ( const void *  ,
int   
)
inlineoverridevirtual

Write root byte buffer to output stream.

Implements Gaudi::IDataConnection.

Definition at line 311 of file RootDataConnection.h.

311 { return StatusCode::FAILURE; }

Friends And Related Function Documentation

◆ Tool

friend class Tool
friend

Definition at line 247 of file RootDataConnection.h.

Member Data Documentation

◆ m_clients

Clients Gaudi::RootDataConnection::m_clients
protected

Client list.

Definition at line 186 of file RootDataConnection.h.

◆ m_conts

StringVec Gaudi::RootDataConnection::m_conts
protected

Map containing external container names.

Definition at line 174 of file RootDataConnection.h.

◆ m_dbs

StringVec Gaudi::RootDataConnection::m_dbs
protected

Map containing external database file names (fids)

Definition at line 172 of file RootDataConnection.h.

◆ m_empty

std::string Gaudi::RootDataConnection::m_empty
protected

Buffer for empty string reference.

Definition at line 188 of file RootDataConnection.h.

◆ m_file

std::unique_ptr<TFile> Gaudi::RootDataConnection::m_file
protected

Reference to ROOT file.

Definition at line 166 of file RootDataConnection.h.

◆ m_links

StringVec Gaudi::RootDataConnection::m_links
protected

Map containing internal links names.

Definition at line 176 of file RootDataConnection.h.

◆ m_linkSects

LinkSections Gaudi::RootDataConnection::m_linkSects
protected

Database link sections.

Definition at line 184 of file RootDataConnection.h.

◆ m_mergeFIDs

StringVec Gaudi::RootDataConnection::m_mergeFIDs
protected

Map containing merge FIDs.

Definition at line 178 of file RootDataConnection.h.

◆ m_mergeSects

MergeSections Gaudi::RootDataConnection::m_mergeSects
protected

Database section map for merged files.

Definition at line 182 of file RootDataConnection.h.

◆ m_params

ParamMap Gaudi::RootDataConnection::m_params
protected

Parameter map for file parameters.

Definition at line 180 of file RootDataConnection.h.

◆ m_refs

TTree* Gaudi::RootDataConnection::m_refs = nullptr
protected

Pointer to the reference tree.

Definition at line 168 of file RootDataConnection.h.

◆ m_sections

Sections Gaudi::RootDataConnection::m_sections
protected

Tree sections in TFile.

Definition at line 170 of file RootDataConnection.h.

◆ m_setup

std::shared_ptr<RootConnectionSetup> Gaudi::RootDataConnection::m_setup
protected

Reference to the setup structure.

Definition at line 162 of file RootDataConnection.h.

◆ m_statistics

std::unique_ptr<TTreePerfStats> Gaudi::RootDataConnection::m_statistics
protected

I/O read statistics from TTree.

Definition at line 164 of file RootDataConnection.h.

◆ m_tool

std::unique_ptr<Tool> Gaudi::RootDataConnection::m_tool

Definition at line 246 of file RootDataConnection.h.


The documentation for this class was generated from the following files:
IOTest.evt
evt
Definition: IOTest.py:105
MSG::DEBUG
@ DEBUG
Definition: IMessageSvc.h:25
Gaudi::IDataConnection::name
const std::string & name() const
Connection name.
Definition: IIODataManager.h:59
std::string
STL class.
Gaudi::RootDataConnection::m_clients
Clients m_clients
Client list.
Definition: RootDataConnection.h:186
IOpaqueAddress::par
virtual const std::string * par() const =0
Retrieve String parameters.
Gaudi::RootTool
Definition: RootTool.h:26
std::move
T move(T... args)
Gaudi::ContainerSection
Definition: merge.C:33
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:314
MSG::INFO
@ INFO
Definition: IMessageSvc.h:25
Gaudi::RootDataConnection::badWriteError
void badWriteError(std::string_view msg) const
Error handler when bad write statements occur.
Definition: RootDataConnection.cpp:202
Properties.long
long
(c) Copyright 1998-2020 CERN for the benefit of the LHCb and ATLAS collaborations # # This software i...
Definition: Properties.py:15
gaudirun.s
string s
Definition: gaudirun.py:348
IOpaqueAddress
Definition: IOpaqueAddress.h:33
std::map::find
T find(T... args)
std::vector::size
T size(T... args)
IOpaqueAddress::svcType
virtual long svcType() const =0
Retrieve service type.
Gaudi::IDataConnection::RECREATE
@ RECREATE
Definition: IIODataManager.h:49
Gaudi::IDataConnection::resetAge
void resetAge()
Reset age.
Definition: IIODataManager.h:71
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:19
Gaudi::RootDataConnection::m_file
std::unique_ptr< TFile > m_file
Reference to ROOT file.
Definition: RootDataConnection.h:166
std::unique_ptr::get
T get(T... args)
std::distance
T distance(T... args)
MSG::WARNING
@ WARNING
Definition: IMessageSvc.h:25
Gaudi::RootDataConnection::m_params
ParamMap m_params
Parameter map for file parameters.
Definition: RootDataConnection.h:180
std::isalnum
T isalnum(T... args)
gaudirun.c
c
Definition: gaudirun.py:527
StatusCode::code_t
unsigned long code_t
type of StatusCode value
Definition: StatusCode.h:67
std::unique_ptr::reset
T reset(T... args)
IIncidentSvc::fireIncident
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
Gaudi::RootDataConnection::m_dbs
StringVec m_dbs
Map containing external database file names (fids)
Definition: RootDataConnection.h:172
std::vector::clear
T clear(T... args)
std::replace_if
T replace_if(T... args)
std::vector::push_back
T push_back(T... args)
bug_34121.t
t
Definition: bug_34121.py:30
Gaudi::RootDataConnection::m_linkSects
LinkSections m_linkSects
Database link sections.
Definition: RootDataConnection.h:184
Gaudi::IDataConnection::CREATE
@ CREATE
Definition: IIODataManager.h:49
Gaudi::RootDataConnection::ContainerSections
std::vector< ContainerSection > ContainerSections
Definition of container sections to handle merged files.
Definition: RootDataConnection.h:149
StatusCode
Definition: StatusCode.h:65
Gaudi::RootDataConnection::m_mergeFIDs
StringVec m_mergeFIDs
Map containing merge FIDs.
Definition: RootDataConnection.h:178
Gaudi::RootDataConnection::m_setup
std::shared_ptr< RootConnectionSetup > m_setup
Reference to the setup structure.
Definition: RootDataConnection.h:162
ProduceConsume.j
j
Definition: ProduceConsume.py:101
CLHEP::begin
double * begin(CLHEP::HepVector &v)
Definition: TupleAlg.cpp:45
Gaudi::RootDataConnection::Status::ROOT_READ_ERROR
@ ROOT_READ_ERROR
POOL_ROOT_StorageType
const long POOL_ROOT_StorageType
Definition: ClassID.h:78
GaudiTesting.BaseTest.which
def which(executable)
Definition: BaseTest.py:746
Gaudi::RootDataConnection::m_mergeSects
MergeSections m_mergeSects
Database section map for merged files.
Definition: RootDataConnection.h:182
std::string::c_str
T c_str(T... args)
POOL_ROOTKEY_StorageType
const long POOL_ROOTKEY_StorageType
Definition: ClassID.h:79
IOpaqueAddress::clID
virtual const CLID & clID() const =0
Retrieve class information from link.
Gaudi::IDataConnection::UPDATE
@ UPDATE
Definition: IIODataManager.h:49
Gaudi::RootDataConnection::m_statistics
std::unique_ptr< TTreePerfStats > m_statistics
I/O read statistics from TTree.
Definition: RootDataConnection.h:164
Gaudi::IDataConnection::m_name
std::string m_name
Connection name/identifier.
Definition: IIODataManager.h:37
GaudiPython.Bindings.nullptr
nullptr
Definition: Bindings.py:92
std::set::erase
T erase(T... args)
Gaudi::IDataConnection::IDataConnection
IDataConnection(const IInterface *own, std::string nam)
Standard constructor.
Definition: IIODataManager.h:55
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
Gaudi::RootDataConnection::makeRef
void makeRef(const IRegistry &pA, RootRef &ref)
Create reference object from registry entry.
Definition: RootDataConnection.cpp:628
ROOT_StorageType
const long ROOT_StorageType
Definition: ClassID.h:62
Gaudi::RootDataConnection::m_tool
std::unique_ptr< Tool > m_tool
Definition: RootDataConnection.h:246
Gaudi::RootDataConnection::m_conts
StringVec m_conts
Map containing external container names.
Definition: RootDataConnection.h:174
Gaudi::IDataConnection::m_fid
std::string m_fid
File ID of the connection.
Definition: IIODataManager.h:39
MsgStream
Definition: MsgStream.h:34
Gaudi::PoolTool
Definition: PoolTool.h:27
Gaudi::IDataConnection::m_age
int m_age
Age counter.
Definition: IIODataManager.h:43
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:235
std::string::append
T append(T... args)
StatusCode::ignore
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition: StatusCode.h:139
std::min
T min(T... args)
IRegistry::address
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
std::vector::emplace_back
T emplace_back(T... args)
MSG::VERBOSE
@ VERBOSE
Definition: IMessageSvc.h:25
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
POOL_ROOTTREE_StorageType
const long POOL_ROOTTREE_StorageType
Definition: ClassID.h:80
Gaudi::RootDataConnection::save
std::pair< int, unsigned long > save(std::string_view section, std::string_view cnt, TClass *cl, void *pObj, int minBufferSize, int maxBufferSize, int approxEventsPerBasket, int split_lvl, bool fill_missing=false)
Save object of a given class to section and container.
Definition: RootDataConnection.cpp:488
std::vector::begin
T begin(T... args)
std::set::insert
T insert(T... args)
Gaudi::RootDataConnection::getSection
TTree * getSection(std::string_view sect, bool create=false)
Access TTree section from section name. The section is created if required.
Definition: RootDataConnection.cpp:377
MSG::ERROR
@ ERROR
Definition: IMessageSvc.h:25
DataObject
Definition: DataObject.h:40
Gaudi::IDataConnection::fid
const std::string & fid() const
Access file id.
Definition: IIODataManager.h:63
std::string::empty
T empty(T... args)
Gaudi::IDataConnection::owner
const IInterface * owner() const
Owner instance.
Definition: IIODataManager.h:75
Gaudi::RootDataConnection::m_links
StringVec m_links
Map containing internal links names.
Definition: RootDataConnection.h:176
Gaudi::RootDataConnection::StringVec
std::vector< std::string > StringVec
Type definition for string maps.
Definition: RootDataConnection.h:143
Gaudi::Utils::Histos::fill
GAUDI_API void fill(AIDA::IHistogram1D *histo, const double value, const double weight=1.0)
simple function to fill AIDA::IHistogram1D objects
Definition: Fill.cpp:45
std::map::end
T end(T... args)
IOTest.end
end
Definition: IOTest.py:123
Gaudi::IDataConnection::m_pfn
std::string m_pfn
Physical file name of the connection.
Definition: IIODataManager.h:41
Gaudi::IDataConnection::pfn
const std::string & pfn() const
Access physical file name.
Definition: IIODataManager.h:65
compareRootHistos.ref
ref
Definition: compareRootHistos.py:28
Gaudi::RootDataConnection::addClient
void addClient(const IInterface *client)
Add new client to this data source.
Definition: RootDataConnection.cpp:186
Gaudi::RootDataConnection::makeTool
Tool * makeTool()
Create file access tool to encapsulate POOL compatibiliy.
Definition: RootDataConnection.cpp:230
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
Gaudi::RootDataConnection::empty
const std::string & empty() const
Empty string reference.
Definition: RootDataConnection.cpp:477
std::numeric_limits::max
T max(T... args)
IIncidentSvc
Definition: IIncidentSvc.h:33
Gaudi::RootDataConnection::m_sections
Sections m_sections
Tree sections in TFile.
Definition: RootDataConnection.h:170
Gaudi::RootDataConnection::getBranch
TBranch * getBranch(std::string_view section, std::string_view branch_name)
Access data branch by name: Get existing branch in read only mode.
Definition: RootDataConnection.h:319
Incident
Definition: Incident.h:27
DataObject::clID
virtual const CLID & clID() const
Retrieve reference to class definition structure.
Definition: DataObject.cpp:66
Gaudi::RootConnectionSetup::compression
static int compression()
Access to global compression level.
Definition: RootDataConnection.cpp:162
Gaudi::RootDataConnection::msgSvc
MsgStream & msgSvc() const
Allow access to printer service.
Definition: RootDataConnection.h:158
std::numeric_limits
Gaudi::RootDataConnection::m_refs
TTree * m_refs
Pointer to the reference tree.
Definition: RootDataConnection.h:168
GaudiPython.Persistency.add
def add(instance)
Definition: Persistency.py:49