From 02bcb56eb402606fab0823442bee99f21a2ea92a Mon Sep 17 00:00:00 2001 From: tmadlener Date: Thu, 3 Sep 2020 15:03:47 +0200 Subject: [PATCH] Fix handling of file switching for event meta data --- include/podio/ROOTReader.h | 3 +++ src/ROOTReader.cc | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/podio/ROOTReader.h b/include/podio/ROOTReader.h index b6dd335e1..1e4d48214 100755 --- a/include/podio/ROOTReader.h +++ b/include/podio/ROOTReader.h @@ -6,6 +6,7 @@ #include #include #include +#include // forward declarations class TClass; @@ -76,6 +77,8 @@ class ROOTReader : public IReader { std::map* readRunMetaData() override final ; private: + std::pair getLocalTreeAndEntry(const std::string& treename); + typedef std::pair Input; std::vector m_inputs; std::map > m_storedClasses; diff --git a/src/ROOTReader.cc b/src/ROOTReader.cc index fb4e786e0..67bce70a4 100755 --- a/src/ROOTReader.cc +++ b/src/ROOTReader.cc @@ -13,23 +13,29 @@ namespace podio { + std::pair ROOTReader::getLocalTreeAndEntry(const std::string& treename) { + auto localEntry = m_chain->LoadTree(m_eventNumber); + auto* tree = static_cast(m_chain->GetFile()->Get(treename.c_str())); + return {tree, localEntry}; + } + GenericParameters* ROOTReader::readEventMetaData(){ GenericParameters* emd = new GenericParameters() ; - auto evt_metadatatree = static_cast(m_chain->GetFile()->Get("evt_metadata")); + auto [evt_metadatatree, entry] = getLocalTreeAndEntry("evt_metadata"); evt_metadatatree->SetBranchAddress("evtMD",&emd); - evt_metadatatree->GetEntry(m_eventNumber); + evt_metadatatree->GetEntry(entry); return emd ; } std::map* ROOTReader::readCollectionMetaData(){ auto* emd = new std::map ; - auto col_metadatatree = static_cast(m_chain->GetFile()->Get("col_metadata")); + auto [col_metadatatree, dummy] = getLocalTreeAndEntry("col_metadata"); col_metadatatree->SetBranchAddress("colMD",&emd); col_metadatatree->GetEntry(0); return emd ; } std::map* ROOTReader::readRunMetaData(){ auto* emd = new std::map ; - auto run_metadatatree = static_cast(m_chain->GetFile()->Get("run_metadata")); + auto [run_metadatatree, dummy] = getLocalTreeAndEntry("run_metadata"); run_metadatatree->SetBranchAddress("runMD",&emd); run_metadatatree->GetEntry(0); return emd ;