Skip to content

Commit fc0d434

Browse files
committed
Updated edmRNTupleTempProvDump to only use RNTuple
Removed all references to TTree used during the transition.
1 parent 893970c commit fc0d434

File tree

1 file changed

+127
-104
lines changed

1 file changed

+127
-104
lines changed

FWIO/RNTupleTempInput/bin/EdmRNTupleTempProvDump.cc

Lines changed: 127 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
#include "TError.h"
2525
#include "TFile.h"
26-
#include "TTree.h"
2726

2827
#include "ROOT/RNTuple.hxx"
2928
#include "ROOT/RNTupleReader.hxx"
@@ -440,31 +439,31 @@ void ProvenanceDumper::dumpEventFilteringParameterSets(edm::EventSelectionIDVect
440439
}
441440

442441
void ProvenanceDumper::dumpEventFilteringParameterSets_(TFile* file, ProcessSimpleIDsType const& processSimpleIDs) {
443-
TTree* history = dynamic_cast<TTree*>(file->Get(edm::poolNames::eventHistoryTreeName().c_str()));
444-
if (history != nullptr) {
445-
edm::History h;
446-
edm::History* ph = &h;
447-
448-
history->SetBranchAddress(edm::poolNames::eventHistoryBranchName().c_str(), &ph);
449-
if (history->GetEntry(0) <= 0) {
450-
std::cout << "No event filtering information is available; the event history tree has no entries\n";
451-
} else {
452-
dumpEventFilteringParameterSets(h.eventSelectionIDs(), processSimpleIDs);
453-
}
454-
} else {
455-
TTree* events = dynamic_cast<TTree*>(file->Get(edm::poolNames::eventTreeName().c_str()));
456-
assert(events != nullptr);
457-
TBranch* eventSelectionsBranch = events->GetBranch(edm::poolNames::eventSelectionsBranchName().c_str());
458-
if (eventSelectionsBranch == nullptr)
459-
return;
442+
auto eventsRNTuple = file->Get<ROOT::RNTuple>(edm::poolNames::eventTreeName().c_str());
443+
assert(eventsRNTuple != nullptr);
444+
auto eventsReader = ROOT::RNTupleReader::Open(*eventsRNTuple);
445+
446+
if (eventsReader->GetNEntries() == 0) {
447+
std::cout << "No event filtering information is available; the event selections branch has no entries\n";
448+
return;
449+
}
450+
451+
if (eventsReader->GetModel().GetFieldNames().find(edm::poolNames::eventSelectionsBranchName()) ==
452+
eventsReader->GetModel().GetFieldNames().end()) {
453+
std::cout << "No event filtering information is available; the event selections field is not present\n";
454+
return;
455+
}
456+
457+
try {
458+
auto entry = eventsReader->GetModel().CreateEntry();
460459
edm::EventSelectionIDVector ids;
461-
edm::EventSelectionIDVector* pids = &ids;
462-
eventSelectionsBranch->SetAddress(&pids);
463-
if (eventSelectionsBranch->GetEntry(0) <= 0) {
464-
std::cout << "No event filtering information is available; the event selections branch has no entries\n";
465-
} else {
466-
dumpEventFilteringParameterSets(ids, processSimpleIDs);
467-
}
460+
entry->BindRawPtr(edm::poolNames::eventSelectionsBranchName(), &ids);
461+
eventsReader->LoadEntry(0, *entry);
462+
dumpEventFilteringParameterSets(ids, processSimpleIDs);
463+
} catch (ROOT::RException const& iExcept) {
464+
std::cout << "The following exception occured while reading the event filtering information:\n"
465+
<< iExcept.what() << std::endl;
466+
return;
468467
}
469468
}
470469

@@ -681,49 +680,76 @@ ProvenanceDumper::makeBranchIDListHelper() {
681680
return {};
682681
}
683682

684-
TTree* metaTree = dynamic_cast<TTree*>(inputFile_->Get(edm::poolNames::metaDataTreeName().c_str()));
685-
if (nullptr == metaTree) {
686-
//std::cerr << "Did not find " << edm::poolNames::metaDataTreeName() << " tree" << std::endl;
683+
// Read BranchIDLists from metadata RNTuple
684+
auto metaRNTuple = inputFile_->Get<ROOT::RNTuple>(edm::poolNames::metaDataTreeName().c_str());
685+
if (nullptr == metaRNTuple) {
686+
std::cerr << "Did not find " << edm::poolNames::metaDataTreeName() << " RNTuple" << std::endl;
687687
return {};
688688
}
689689

690-
TBranch* branchIDListsBranch = metaTree->GetBranch(edm::poolNames::branchIDListBranchName().c_str());
691-
if (nullptr == branchIDListsBranch) {
692-
/*
690+
auto metaReader = ROOT::RNTupleReader::Open(*metaRNTuple);
691+
if (metaReader->GetNEntries() == 0) {
692+
std::cerr << "No entries in " << edm::poolNames::metaDataTreeName() << " RNTuple" << std::endl;
693+
return {};
694+
}
695+
696+
// Check if the required field exists in the metadata RNTuple
697+
auto metaFieldNames = metaReader->GetModel().GetFieldNames();
698+
if (metaFieldNames.find(edm::poolNames::branchIDListBranchName()) == metaFieldNames.end()) {
693699
std::cerr << "Did not find " << edm::poolNames::branchIDListBranchName() << " from "
694-
<< edm::poolNames::metaDataTreeName() << " tree" << std::endl;
695-
*/
700+
<< edm::poolNames::metaDataTreeName() << " RNTuple" << std::endl;
696701
return {};
697702
}
698703

699704
edm::BranchIDLists branchIDLists;
700-
edm::BranchIDLists* branchIDListsPtr = &branchIDLists;
701-
branchIDListsBranch->SetAddress(&branchIDListsPtr);
702-
if (branchIDListsBranch->GetEntry(0) <= 0) {
703-
//std::cerr << "Failed to read an entry from " << edm::poolNames::branchIDListBranchName() << std::endl;
705+
try {
706+
auto metaEntry = metaReader->GetModel().CreateEntry();
707+
metaEntry->BindRawPtr(edm::poolNames::branchIDListBranchName(), &branchIDLists);
708+
metaReader->LoadEntry(0, *metaEntry);
709+
} catch (ROOT::RException const& iExcept) {
710+
std::cerr << "The following exception occurred while reading " << edm::poolNames::branchIDListBranchName()
711+
<< " from " << edm::poolNames::metaDataTreeName() << " RNTuple:\n"
712+
<< iExcept.what() << std::endl;
704713
return {};
705714
}
706715

707716
edm::BranchIDListHelper branchIDListHelper;
708717
branchIDListHelper.updateFromInput(branchIDLists);
709718

710-
TTree* events = dynamic_cast<TTree*>(inputFile_->Get(edm::poolNames::eventTreeName().c_str()));
711-
assert(events != nullptr);
712-
TBranch* branchListIndexesBranch = events->GetBranch(edm::poolNames::branchListIndexesBranchName().c_str());
713-
if (nullptr == branchListIndexesBranch) {
714-
/*
719+
// Read BranchListIndexes from events RNTuple
720+
auto eventsRNTuple = inputFile_->Get<ROOT::RNTuple>(edm::poolNames::eventTreeName().c_str());
721+
assert(eventsRNTuple != nullptr);
722+
auto eventsReader = ROOT::RNTupleReader::Open(*eventsRNTuple);
723+
724+
if (eventsReader->GetNEntries() <= static_cast<ROOT::NTupleSize_t>(productIDEntry_)) {
725+
std::cerr << "Requested entry " << productIDEntry_ << " but only " << eventsReader->GetNEntries() << " entries in "
726+
<< edm::poolNames::eventTreeName() << " RNTuple" << std::endl;
727+
return {};
728+
}
729+
730+
// Check if the required field exists in the events RNTuple
731+
auto eventsFieldNames = eventsReader->GetModel().GetFieldNames();
732+
if (eventsFieldNames.find(edm::poolNames::branchListIndexesBranchName()) == eventsFieldNames.end()) {
715733
std::cerr << "Did not find " << edm::poolNames::branchListIndexesBranchName() << " from "
716-
<< edm::poolNames::eventTreeName() << " tree" << std::endl;
717-
*/
734+
<< edm::poolNames::eventTreeName() << " RNTuple" << std::endl;
718735
return {};
719736
}
737+
720738
edm::BranchListIndexes branchListIndexes;
721-
edm::BranchListIndexes* pbranchListIndexes = &branchListIndexes;
722-
branchListIndexesBranch->SetAddress(&pbranchListIndexes);
723-
if (branchListIndexesBranch->GetEntry(productIDEntry_) <= 0 or branchListIndexes.empty()) {
739+
try {
740+
auto eventsEntry = eventsReader->GetModel().CreateEntry();
741+
eventsEntry->BindRawPtr(edm::poolNames::branchListIndexesBranchName(), &branchListIndexes);
742+
eventsReader->LoadEntry(productIDEntry_, *eventsEntry);
743+
} catch (ROOT::RException const& iExcept) {
744+
std::cerr << "The following exception occurred while reading " << edm::poolNames::branchListIndexesBranchName()
745+
<< " from " << edm::poolNames::eventTreeName() << " RNTuple:\n"
746+
<< iExcept.what() << std::endl;
747+
return {};
748+
}
749+
750+
if (branchListIndexes.empty()) {
724751
/*
725-
std::cerr << "Failed to read entry from " << edm::poolNames::branchListIndexesBranchName() << ", or it is empty"
726-
<< std::endl;
752+
std::cerr << "BranchListIndexes is empty" << std::endl;
727753
*/
728754
return {};
729755
}
@@ -741,7 +767,6 @@ ProvenanceDumper::makeBranchIDListHelper() {
741767

742768
void ProvenanceDumper::work_() {
743769
auto metaRNTuple = inputFile_->Get<ROOT::RNTuple>(edm::poolNames::metaDataTreeName().c_str());
744-
//TTree* meta = dynamic_cast<TTree*>(inputFile_->Get(edm::poolNames::metaDataTreeName().c_str()));
745770
assert(metaRNTuple);
746771

747772
auto reader = ROOT::RNTupleReader::Open(*metaRNTuple);
@@ -755,7 +780,7 @@ void ProvenanceDumper::work_() {
755780
assert(rntuple);
756781
auto psets = ROOT::RNTupleReader::Open(*rntuple);
757782
assert(psets.get());
758-
auto entry = psets->GetModel().CreateBareEntry();
783+
auto entry = psets->GetModel().CreateEntry();
759784

760785
std::pair<edm::ParameterSetID, edm::ParameterSetBlob> idToBlob;
761786
entry->BindRawPtr("IdToParameterSetsBlobs", &idToBlob);
@@ -817,74 +842,72 @@ void ProvenanceDumper::work_() {
817842
std::map<edm::BranchID, std::set<edm::ParentageID>> perProductParentage;
818843

819844
if (showDependencies_ || extendedAncestors_ || extendedDescendants_) {
820-
TTree* parentageTree = dynamic_cast<TTree*>(inputFile_->Get(edm::poolNames::parentageTreeName().c_str()));
821-
if (nullptr == parentageTree) {
822-
std::cerr << "ERROR, no Parentage tree available so cannot show dependencies, ancestors, or descendants.\n";
845+
auto parentageRNTuple = inputFile_->Get<ROOT::RNTuple>(edm::poolNames::parentageTreeName().c_str());
846+
if (nullptr == parentageRNTuple) {
847+
std::cerr << "ERROR, no Parentage RNTuple available so cannot show dependencies, ancestors, or descendants.\n";
823848
std::cerr << "Possibly this is not a standard EDM format file. For example, dependency, ancestor, and\n";
824849
std::cerr << "descendant options to edmProvDump will not work with nanoAOD format files.\n\n";
825850
showDependencies_ = false;
826851
extendedAncestors_ = false;
827852
extendedDescendants_ = false;
828853
} else {
829-
edm::ParentageRegistry& registry = *edm::ParentageRegistry::instance();
854+
auto parentageReader = ROOT::RNTupleReader::Open(*parentageRNTuple);
830855

831-
std::vector<edm::ParentageID> orderedParentageIDs;
832-
orderedParentageIDs.reserve(parentageTree->GetEntries());
833-
for (Long64_t i = 0, numEntries = parentageTree->GetEntries(); i < numEntries; ++i) {
834-
edm::Parentage parentageBuffer;
835-
edm::Parentage* pParentageBuffer = &parentageBuffer;
836-
parentageTree->SetBranchAddress(edm::poolNames::parentageBranchName().c_str(), &pParentageBuffer);
837-
parentageTree->GetEntry(i);
838-
registry.insertMapped(parentageBuffer);
839-
orderedParentageIDs.push_back(parentageBuffer.id());
840-
}
841-
parentageTree->SetBranchAddress(edm::poolNames::parentageBranchName().c_str(), nullptr);
842-
843-
TTree* eventMetaTree =
844-
dynamic_cast<TTree*>(inputFile_->Get(edm::BranchTypeToMetaDataTreeName(edm::InEvent).c_str()));
845-
if (nullptr == eventMetaTree) {
846-
eventMetaTree = dynamic_cast<TTree*>(inputFile_->Get(edm::BranchTypeToProductTreeName(edm::InEvent).c_str()));
847-
}
848-
if (nullptr == eventMetaTree) {
849-
std::cerr << "ERROR, no '" << edm::BranchTypeToProductTreeName(edm::InEvent)
850-
<< "' Tree in file so can not show dependencies\n";
856+
// Check if the required field exists in the parentage RNTuple
857+
auto parentageFieldNames = parentageReader->GetModel().GetFieldNames();
858+
if (parentageFieldNames.find(edm::poolNames::parentageBranchName()) == parentageFieldNames.end()) {
859+
std::cerr << "ERROR, no '" << edm::poolNames::parentageBranchName()
860+
<< "' field in Parentage RNTuple so cannot show dependencies\n";
851861
showDependencies_ = false;
852862
extendedAncestors_ = false;
853863
extendedDescendants_ = false;
854864
} else {
855-
TBranch* storedProvBranch =
856-
eventMetaTree->GetBranch(edm::BranchTypeToProductProvenanceBranchName(edm::InEvent).c_str());
857-
858-
if (nullptr != storedProvBranch) {
859-
std::vector<edm::StoredProductProvenance> info;
860-
std::vector<edm::StoredProductProvenance>* pInfo = &info;
861-
storedProvBranch->SetAddress(&pInfo);
862-
for (Long64_t i = 0, numEntries = eventMetaTree->GetEntries(); i < numEntries; ++i) {
863-
storedProvBranch->GetEntry(i);
864-
for (auto const& item : info) {
865-
edm::BranchID bid(item.branchID_);
866-
perProductParentage[bid].insert(orderedParentageIDs.at(item.parentageIDIndex_));
867-
}
868-
}
865+
edm::ParentageRegistry& registry = *edm::ParentageRegistry::instance();
866+
867+
std::vector<edm::ParentageID> orderedParentageIDs;
868+
orderedParentageIDs.reserve(parentageReader->GetNEntries());
869+
870+
auto parentageEntry = parentageReader->GetModel().CreateEntry();
871+
edm::Parentage parentageBuffer;
872+
parentageEntry->BindRawPtr(edm::poolNames::parentageBranchName(), &parentageBuffer);
873+
874+
for (ROOT::NTupleSize_t i = 0, numEntries = parentageReader->GetNEntries(); i < numEntries; ++i) {
875+
parentageReader->LoadEntry(i, *parentageEntry);
876+
registry.insertMapped(parentageBuffer);
877+
orderedParentageIDs.push_back(parentageBuffer.id());
878+
}
879+
880+
auto eventsRNTuple = inputFile_->Get<ROOT::RNTuple>(edm::BranchTypeToProductTreeName(edm::InEvent).c_str());
881+
if (nullptr == eventsRNTuple) {
882+
std::cerr << "ERROR, no '" << edm::BranchTypeToProductTreeName(edm::InEvent)
883+
<< "' RNTuple in file so can not show dependencies\n";
884+
showDependencies_ = false;
885+
extendedAncestors_ = false;
886+
extendedDescendants_ = false;
869887
} else {
870-
//backwards compatible check
871-
TBranch* productProvBranch =
872-
eventMetaTree->GetBranch(edm::BranchTypeToBranchEntryInfoBranchName(edm::InEvent).c_str());
873-
if (nullptr != productProvBranch) {
874-
std::vector<edm::ProductProvenance> info;
875-
std::vector<edm::ProductProvenance>* pInfo = &info;
876-
productProvBranch->SetAddress(&pInfo);
877-
for (Long64_t i = 0, numEntries = eventMetaTree->GetEntries(); i < numEntries; ++i) {
878-
productProvBranch->GetEntry(i);
879-
for (auto const& item : info) {
880-
perProductParentage[item.branchID()].insert(item.parentageID());
881-
}
882-
}
883-
} else {
884-
std::cerr << " ERROR, could not find provenance information so can not show dependencies\n";
888+
auto eventsReader = ROOT::RNTupleReader::Open(*eventsRNTuple);
889+
890+
// Check if the required field exists in the events RNTuple
891+
auto eventsFieldNames = eventsReader->GetModel().GetFieldNames();
892+
if (eventsFieldNames.find(edm::BranchTypeToProductProvenanceBranchName(edm::InEvent)) ==
893+
eventsFieldNames.end()) {
894+
std::cerr << "ERROR, no '" << edm::BranchTypeToProductProvenanceBranchName(edm::InEvent)
895+
<< "' field in events RNTuple so cannot show dependencies\n";
885896
showDependencies_ = false;
886897
extendedAncestors_ = false;
887898
extendedDescendants_ = false;
899+
} else {
900+
auto eventsEntry = eventsReader->GetModel().CreateEntry();
901+
std::vector<edm::StoredProductProvenance> info;
902+
eventsEntry->BindRawPtr(edm::BranchTypeToProductProvenanceBranchName(edm::InEvent), &info);
903+
904+
for (ROOT::NTupleSize_t i = 0, numEntries = eventsReader->GetNEntries(); i < numEntries; ++i) {
905+
eventsReader->LoadEntry(i, *eventsEntry);
906+
for (auto const& item : info) {
907+
edm::BranchID bid(item.branchID_);
908+
perProductParentage[bid].insert(orderedParentageIDs.at(item.parentageIDIndex_));
909+
}
910+
}
888911
}
889912
}
890913
}

0 commit comments

Comments
 (0)