Belle II Software  release-08-01-10
RootFileInfo Class Reference

Helper class to factorize some necessary tasks when working with Belle2 output files. More...

#include <RootFileInfo.h>

Collaboration diagram for RootFileInfo:

Public Member Functions

 RootFileInfo (const std::string &filename)
 Create an object from a given filename or url. More...
 
 ~RootFileInfo ()
 Close the file and delete all structures associated with it.
 
TTree & getPersistentTree ()
 Return a reference to the persistent tree.
 
TTree & getEventTree ()
 Return a reference to the event tree.
 
const FileMetaDatagetFileMetaData ()
 Return the event metadata from the file. More...
 
const std::set< std::string > & getBranchNames (bool persistent=false)
 Return a set of branch names for either the event or the persistent tree.
 
void checkMissingBranches (const std::set< std::string > &required, bool persistent=false)
 Check if the event or persistent tree contain at least all the branches in the set of required branches. More...
 

Private Attributes

std::unique_ptr< TFile > m_file
 Pointer to the file object.
 
std::unique_ptr< TTree > m_persistent
 Pointer to the persistent tree.
 
std::unique_ptr< TTree > m_events
 Pointer to the event tree.
 
std::unique_ptr< FileMetaDatam_metadata
 Pointer to the file metadata once it has been read.
 
std::optional< std::set< std::string > > m_persistentBranches
 Cached set of persistent branch names.
 
std::optional< std::set< std::string > > m_eventBranches
 Cached set of event branch names.
 

Detailed Description

Helper class to factorize some necessary tasks when working with Belle2 output files.

Like the correct way to obtain the FileMetaData from a file or to check the list of existing branches

Definition at line 27 of file RootFileInfo.h.

Constructor & Destructor Documentation

◆ RootFileInfo()

RootFileInfo ( const std::string &  filename)
explicit

Create an object from a given filename or url.

This will open the file and read the tree headers. It will throw exceptions if it encounters any problems:

  • std::invalid_argument if the file cannot be opened at all
  • std::runtime_error if any of the trees is missing or the number of entries in the persistent tree is !=1

Definition at line 18 of file RootFileInfo.cc.

19  {
20  // make sure TDirectory is reset after this function
21  TDirectory::TContext directoryGuard;
22  // Open the file
23  m_file.reset(TFile::Open(filename.c_str(), "READ"));
24  if (!m_file || !m_file->IsOpen()) throw std::invalid_argument("Could not open file");
25  // We want to get two trees the same way but only need that here ... lambda it is
26  auto getTree = [&file = this->m_file](const std::string & label, const std::string & name, std::unique_ptr<TTree>& destination) {
27  TTree* tmp{nullptr};
28  file->GetObject(name.c_str(), tmp);
29  if (!tmp) throw std::runtime_error("No " + label + " tree found");
30  destination.reset(tmp);
31  };
32  // So get the trees from the file and store them in the members
33  getTree("persistent", c_treeNames[DataStore::c_Persistent], m_persistent);
34  getTree("event", c_treeNames[DataStore::c_Event], m_events);
35  // And finally check the number of entries in the persistent tree
36  if (auto npersistent = m_persistent->GetEntries(); npersistent != 1) {
37  throw std::runtime_error("Expected exactly one entry in persistent tree, found " + std::to_string(npersistent));
38  }
39  }
@ c_Persistent
Object is available during entire execution time.
Definition: DataStore.h:60
@ c_Event
Different object in each event, all objects/arrays are invalidated after event() function has been ca...
Definition: DataStore.h:59
std::unique_ptr< TTree > m_events
Pointer to the event tree.
Definition: RootFileInfo.h:59
std::unique_ptr< TFile > m_file
Pointer to the file object.
Definition: RootFileInfo.h:55
std::unique_ptr< TTree > m_persistent
Pointer to the persistent tree.
Definition: RootFileInfo.h:57
const std::string c_treeNames[]
Names of trees.

Member Function Documentation

◆ checkMissingBranches()

void checkMissingBranches ( const std::set< std::string > &  required,
bool  persistent = false 
)

Check if the event or persistent tree contain at least all the branches in the set of required branches.

Throw a std::runtime_error if not

Definition at line 75 of file RootFileInfo.cc.

◆ getFileMetaData()

const FileMetaData & getFileMetaData ( )

Return the event metadata from the file.

On the first call it will be read from the persistent tree. If this fails a std::runtime_error is thrown.

Definition at line 41 of file RootFileInfo.cc.


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