719 assert(
nullptr != psetTree);
720 typedef std::pair<edm::ParameterSetID, edm::ParameterSetBlob> IdToBlobs;
722 IdToBlobs* pIdToBlob = &idToBlob;
724 for (
long long i = 0;
i != psetTree->GetEntries(); ++
i) {
725 psetTree->GetEntry(
i);
726 psm_.insert(idToBlob);
760 for (
auto const& history :
phv_) {
761 for (
auto const&
process : history) {
770 else if (!phm.empty()) {
771 for (
auto const& history : phm) {
772 phv_.push_back(history.second);
773 for (
auto const&
process : history.second) {
787 <<
"Illegal ParameterSetID string. It should contain 32 hexadecimal characters";
797 std::map<edm::BranchID, std::set<edm::ParentageID>> perProductParentage;
801 if (
nullptr == parentageTree) {
802 std::cerr <<
"ERROR, no Parentage tree available so cannot show dependencies, ancestors, or descendants.\n";
803 std::cerr <<
"Possibly this is not a standard EDM format file. For example, dependency, ancestor, and\n";
804 std::cerr <<
"descendant options to edmProvDump will not work with nanoAOD format files.\n\n";
811 std::vector<edm::ParentageID> orderedParentageIDs;
812 orderedParentageIDs.reserve(parentageTree->GetEntries());
817 parentageTree->GetEntry(
i);
819 orderedParentageIDs.push_back(parentageBuffer.
id());
823 TTree* eventMetaTree =
825 if (
nullptr == eventMetaTree) {
828 if (
nullptr == eventMetaTree) {
830 <<
"' Tree in file so can not show dependencies\n";
835 TBranch* storedProvBranch =
838 if (
nullptr != storedProvBranch) {
839 std::vector<edm::StoredProductProvenance>
info;
840 std::vector<edm::StoredProductProvenance>* pInfo = &
info;
841 storedProvBranch->SetAddress(&pInfo);
843 storedProvBranch->GetEntry(
i);
846 perProductParentage[bid].insert(orderedParentageIDs.at(
item.parentageIDIndex_));
851 TBranch* productProvBranch =
853 if (
nullptr != productProvBranch) {
854 std::vector<edm::ProductProvenance>
info;
855 std::vector<edm::ProductProvenance>* pInfo = &
info;
856 productProvBranch->SetAddress(&pInfo);
858 productProvBranch->GetEntry(
i);
860 perProductParentage[
item.branchID()].insert(
item.parentageID());
864 std::cerr <<
" ERROR, could not find provenance information so can not show dependencies\n";
874 std::map<edm::BranchID, std::set<edm::BranchID>> parentToChildren;
878 for (
auto const& itParentageSet : perProductParentage) {
880 for (
auto const& itParentageID : itParentageSet.second) {
882 if (
nullptr != parentage) {
884 parentToChildren[
branch].insert(childBranchID);
887 std::cerr <<
" ERROR:parentage info not in registry ParentageID=" << itParentageID << std::endl;
898 std::cout <<
"---------Producers with data in file---------" << std::endl;
906 std::map<edm::BranchID, std::string> branchIDToBranchName;
908 for (
auto const& processConfig :
phc_) {
911 if (
nullptr == processParameterSet || processParameterSet->
empty()) {
915 auto& product =
item.second;
916 if (product.processName() != processConfig.processName()) {
924 branchIDToBranchName[product.branchID()] = product.branchName();
944 s << moduleParameterSetCopy.
id();
946 s << moduleParameterSet.
id();
948 moduleToIdBranches[std::make_pair(product.processName(), product.moduleLabel())][
s.str()].push_back(product);
953 for (
auto const&
item : moduleToIdBranches) {
954 std::ostringstream sout;
955 sout <<
"Module: " <<
item.first.second <<
" " <<
item.first.first << std::endl;
956 std::set<edm::BranchID> allBranchIDsForLabelAndProcess;
958 for (
auto const& idBranch : idToBranches) {
959 sout <<
" PSet id:" << idBranch.first << std::endl;
961 sout <<
" products: {" << std::endl;
963 std::set<edm::BranchID> branchIDs;
964 for (
auto const&
branch : idBranch.second) {
966 sout <<
" " <<
branch.branchName();
968 if (branchIDListHelperAndToProcessIndex) {
969 sout <<
" ProductID " 971 std::get<0>(*branchIDListHelperAndToProcessIndex),
972 std::get<1>(*branchIDListHelperAndToProcessIndex));
974 sout <<
" BranchID " <<
branch.branchID();
978 branchIDs.insert(
branch.branchID());
979 allBranchIDsForLabelAndProcess.insert(
branch.branchID());
981 sout <<
" }" << std::endl;
983 ParameterSetMap::const_iterator itpsm =
psm_.find(psid);
984 if (
psm_.end() == itpsm) {
986 errorLog_ <<
"No ParameterSetID for " << psid << std::endl;
989 sout <<
" parameters: ";
994 sout <<
" dependencies: {" << std::endl;
995 std::set<edm::ParentageID> parentageIDs;
996 for (
auto const&
branch : branchIDs) {
998 std::set<edm::ParentageID>
const&
temp = perProductParentage[
branch];
999 parentageIDs.insert(
temp.begin(),
temp.end());
1001 for (
auto const& parentID : parentageIDs) {
1003 if (
nullptr != parentage) {
1005 sout <<
" " << branchIDToBranchName[
branch] << std::endl;
1008 sout <<
" ERROR:parentage info not in registry ParentageID=" << parentID << std::endl;
1011 if (parentageIDs.empty()) {
1012 sout <<
" no dependencies recorded (event may not contain data from this module)" << std::endl;
1014 sout <<
" }" << std::endl;
1018 sout <<
" extendedAncestors: {" << std::endl;
1019 std::set<edm::BranchID> ancestorBranchIDs;
1020 for (
auto const& branchID : allBranchIDsForLabelAndProcess) {
1021 addAncestors(branchID, ancestorBranchIDs, sout, perProductParentage);
1023 for (
auto const& ancestorBranchID : ancestorBranchIDs) {
1024 sout <<
" " << branchIDToBranchName[ancestorBranchID] <<
"\n";
1026 sout <<
" }" << std::endl;
1030 sout <<
" extendedDescendants: {" << std::endl;
1031 std::set<edm::BranchID> descendantBranchIDs;
1032 for (
auto const& branchID : allBranchIDsForLabelAndProcess) {
1033 addDescendants(branchID, descendantBranchIDs, sout, parentToChildren);
1035 for (
auto const& descendantBranchID : descendantBranchIDs) {
1036 sout <<
" " << branchIDToBranchName[descendantBranchID] <<
"\n";
1038 sout <<
" }" << std::endl;
1040 bool foundMatch =
true;
1042 for (
auto const& stringToFind :
findMatch_) {
1043 if (sout.str().find(stringToFind) == std::string::npos) {
1055 std::cout <<
"---------Other Modules---------" << std::endl;
1058 std::cout <<
"---------All Modules---------" << std::endl;
1063 std::cout <<
"---------EventSetup---------" << std::endl;
1068 std::cout <<
"---------Top Level PSets---------" << std::endl;
std::stringstream errorLog_
std::vector< ProcessHistory > ProcessHistoryVector
std::string const & metaDataTreeName()
bool getMapped(key_type const &k, value_type &result) const
bool productRegistryPresent_
std::string const & BranchTypeToBranchEntryInfoBranchName(BranchType const &branchType)
std::string const & moduleDescriptionMapBranchName()
edm::ProductRegistry reg_
ParameterSet const & getParameterSet(std::string const &) const
void dumpParameterSetForID_(edm::ParameterSetID const &id)
HistoryNode historyGraph_
std::string const & processHistoryBranchName()
std::vector< BranchID > const & parents() const
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
void dumpEventFilteringParameterSets_(TFile *file)
std::string const & parameterSetMapBranchName()
edm::ProcessHistoryVector phv_
std::string const & productDescriptionBranchName()
static std::string const input
ProductID branchIDToProductID(BranchID const &bid, BranchIDListHelper const &branchIDListHelper, std::vector< ProcessIndex > const &branchListIndexToProcessIndex)
constexpr element_type const * get() const
std::string const & BranchTypeToMetaDataTreeName(BranchType const &branchType)
bool getMapped(key_type const &k, value_type &result) const
std::string const & processHistoryMapBranchName()
ParameterSetID id() const
ParameterSet const & registerIt()
edm::propagate_const< std::unique_ptr< TFile > > inputFile_
bool extendedDescendants_
std::string const & BranchTypeToProductTreeName(BranchType const &branchType)
std::map< std::pair< std::string, std::string >, IdToBranches > ModuleToIdBranches
Long64_t numEntries(TFile *hdl, std::string const &trname)
def unique(seq, keepstr=True)
void addDescendants(edm::BranchID const &branchID, std::set< edm::BranchID > &descendantBranchIDs, std::ostringstream &sout, std::map< edm::BranchID, std::set< edm::BranchID >> &parentToChildren) const
std::string const & parameterSetsTreeName()
std::string const & BranchTypeToProductProvenanceBranchName(BranchType const &BranchType)
bool insertMapped(value_type const &v, bool forceUpdate=false)
std::string const & parentageBranchName()
static std::string const triggerResults
Hash< ParameterSetType > ParameterSetID
std::string const & idToParameterSetBlobsBranchName()
static std::ostream & prettyPrint(std::ostream &oStream, edm::ParameterSet const &iPSet, std::string const &iIndent, std::string const &iIndentDelta)
std::map< std::string, std::vector< edm::BranchDescription > > IdToBranches
void dumpProcessHistory_()
edm::ProcessConfigurationVector phc_
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
std::string const & parentageTreeName()
ProductList & productListUpdator()
std::vector< std::string > findMatch_
std::map< ParameterSetID, ParameterSetBlob > ParameterSetMap
bool isRegistered() const
std::optional< std::tuple< edm::BranchIDListHelper, std::vector< edm::ProcessIndex > > > makeBranchIDListHelper()
static ParentageRegistry * instance()
static std::string const triggerPaths
static std::string const source
void setIsMergeable(BranchDescription &)
std::map< ProcessHistoryID, ProcessHistory > ProcessHistoryMap
bool insertMapped(value_type const &v)
static Registry * instance()
void addAncestors(edm::BranchID const &branchID, std::set< edm::BranchID > &ancestorBranchIDs, std::ostringstream &sout, std::map< edm::BranchID, std::set< edm::ParentageID >> &perProductParentage) const