26 #include "boost/program_options.hpp"
36 typedef std::map<std::string, std::vector<edm::BranchDescription>>
IdToBranches;
39 static std::ostream&
prettyPrint(std::ostream& oStream,
50 typedef std::map<edm::ParameterSetID, edm::ParameterSetBlob>
ParameterSetMap;
54 HistoryNode() : config_(), simpleId_(0) {}
57 : config_(iConfig), simpleId_(iSimpleId) {}
59 void addChild(HistoryNode
const&
child) { children_.push_back(child); }
65 std::size_t
size()
const {
return children_.size(); }
67 HistoryNode* lastChildAddress() {
return &children_.back(); }
69 typedef std::vector<HistoryNode>::const_iterator const_iterator;
70 typedef std::vector<HistoryNode>::iterator iterator;
72 iterator
begin() {
return children_.begin(); }
73 iterator
end() {
return children_.end(); }
75 const_iterator
begin()
const {
return children_.begin(); }
76 const_iterator
end()
const {
return children_.end(); }
78 void print(std::ostream& os)
const {
79 os << config_.processName() <<
" '" << config_.passID() <<
"' '" << config_.releaseVersion() <<
"' [" << simpleId_
80 <<
"] (" << config_.parameterSetID() <<
")" << std::endl;
84 void printEventSetupHistory(ParameterSetMap
const& iPSM,
85 std::vector<std::string>
const& iFindMatch,
86 std::ostream& oErrorLog)
const;
87 void printOtherModulesHistory(ParameterSetMap
const& iPSM,
89 std::vector<std::string>
const& iFindMatch,
90 std::ostream& oErrorLog)
const;
91 void printTopLevelPSetsHistory(ParameterSetMap
const& iPSM,
92 std::vector<std::string>
const& iFindMatch,
93 std::ostream& oErrorLog)
const;
101 std::vector<HistoryNode> children_;
102 unsigned int simpleId_;
105 std::ostream&
operator<<(std::ostream& os, HistoryNode
const& node) {
109 bool HistoryNode::sort_ =
false;
115 for (
auto const&
process : iHist) {
116 os << indent <<
process.processName() <<
" '" <<
process.passID() <<
"' '" <<
process.releaseVersion() <<
"' ("
117 <<
process.parameterSetID() <<
")" << std::endl;
118 indent += indentDelta;
123 void HistoryNode::printHistory(
std::string const& iIndent)
const {
126 for (
auto const&
item : *
this) {
128 item.printHistory(indent + indentDelta);
136 std::ostringstream
result;
143 result << iType <<
": " << name <<
" " << iProcessName <<
"\n"
149 void HistoryNode::printEventSetupHistory(ParameterSetMap
const& iPSM,
150 std::vector<std::string>
const& iFindMatch,
151 std::ostream& oErrorLog)
const {
152 for (
auto const& itH : *
this) {
154 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
155 if (itFind == iPSM.end()) {
156 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
159 std::vector<std::string> sourceStrings, moduleStrings;
161 std::vector<std::string> sources = processConfig.
getParameter<std::vector<std::string>>(
"@all_essources");
162 for (
auto& itM : sources) {
164 bool foundMatch =
true;
165 if (!iFindMatch.empty()) {
166 for (
auto const& stringToFind : iFindMatch) {
167 if (retValue.find(stringToFind) == std::string::npos) {
174 sourceStrings.push_back(
std::move(retValue));
178 std::vector<std::string>
modules = processConfig.getParameter<std::vector<std::string>>(
"@all_esmodules");
179 for (
auto& itM : modules) {
181 bool foundMatch =
true;
182 if (!iFindMatch.empty()) {
183 for (
auto const& stringToFind : iFindMatch) {
184 if (retValue.find(stringToFind) == std::string::npos) {
191 moduleStrings.push_back(
std::move(retValue));
195 std::sort(sourceStrings.begin(), sourceStrings.end());
196 std::sort(moduleStrings.begin(), moduleStrings.end());
198 std::copy(sourceStrings.begin(), sourceStrings.end(), std::ostream_iterator<std::string>(
std::cout,
"\n"));
199 std::copy(moduleStrings.begin(), moduleStrings.end(), std::ostream_iterator<std::string>(
std::cout,
"\n"));
201 itH.printEventSetupHistory(iPSM, iFindMatch, oErrorLog);
208 std::ostringstream
result;
212 result <<
"Module: " << label <<
" " << iProcessName <<
"\n"
218 void HistoryNode::printOtherModulesHistory(ParameterSetMap
const& iPSM,
220 std::vector<std::string>
const& iFindMatch,
221 std::ostream& oErrorLog)
const {
222 for (
auto const& itH : *
this) {
224 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
225 if (itFind == iPSM.end()) {
226 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
229 std::vector<std::string> moduleStrings;
231 std::vector<std::string> modules = processConfig.
getParameter<std::vector<std::string>>(
"@all_modules");
232 for (
auto& itM : modules) {
234 if (iModules.end() == iModules.find(std::make_pair(itH.processName(), itM))) {
236 bool foundMatch =
true;
237 if (!iFindMatch.empty()) {
238 for (
auto const& stringToFind : iFindMatch) {
239 if (retValue.find(stringToFind) == std::string::npos) {
246 moduleStrings.push_back(
std::move(retValue));
251 std::sort(moduleStrings.begin(), moduleStrings.end());
253 std::copy(moduleStrings.begin(), moduleStrings.end(), std::ostream_iterator<std::string>(
std::cout,
"\n"));
255 itH.printOtherModulesHistory(iPSM, iModules, iFindMatch, oErrorLog);
259 static void appendToSet(std::set<std::string>& iSet, std::vector<std::string>
const& iFrom) {
260 for (
auto const&
n : iFrom) {
268 std::ostringstream
result;
271 result <<
"PSet: " << iName <<
" " << iProcessName <<
"\n"
277 void HistoryNode::printTopLevelPSetsHistory(ParameterSetMap
const& iPSM,
278 std::vector<std::string>
const& iFindMatch,
279 std::ostream& oErrorLog)
const {
280 for (
auto const& itH : *
this) {
282 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
283 if (itFind == iPSM.end()) {
284 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
288 std::set<std::string> namesToExclude;
289 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_modules"));
290 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_sources"));
291 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_loopers"));
293 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_esmodules"));
294 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_essources"));
295 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_esprefers"));
296 if (processConfig.existsAs<std::vector<std::string>>(
"all_aliases")) {
297 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_aliases"));
300 std::vector<std::string> allNames{};
301 processConfig.getParameterSetNames(allNames);
303 std::vector<std::string>
results;
304 for (
auto const&
name : allNames) {
305 if (
name.empty() ||
'@' ==
name[0] || namesToExclude.find(
name) != namesToExclude.end()) {
310 bool foundMatch =
true;
311 if (!iFindMatch.empty()) {
312 for (
auto const& stringToFind : iFindMatch) {
313 if (retValue.find(stringToFind) == std::string::npos) {
324 std::sort(results.begin(), results.end());
326 std::copy(results.begin(), results.end(), std::ostream_iterator<std::string>(
std::cout,
"\n"));
328 itH.printTopLevelPSetsHistory(iPSM, iFindMatch, oErrorLog);
338 fileNames.push_back(filename);
342 <<
"File " << filename <<
" was not found or could not be opened.\n";
345 std::unique_ptr<TFile>
result(TFile::Open(
catalog.fileNames(0)[0].c_str()));
348 <<
"File " << fileNames[0] <<
" was not found or could not be opened.\n";
357 std::unique_ptr<TFile> makeTFile(
std::string const& filename) {
358 gErrorIgnoreLevel = kFatal;
359 std::unique_ptr<TFile>
result(TFile::Open(filename.c_str()));
360 gErrorIgnoreLevel =
kError;
363 return makeTFileWithLookup(filename);
373 char const* trackiness = (psetEntry.
isTracked() ?
"tracked" :
"untracked");
374 os <<
"PSet " << trackiness <<
" = (";
375 prettyPrint(os, psetEntry.
pset(), iIndent + iIndentDelta, iIndentDelta);
384 std::vector<edm::ParameterSet>
const& vps = vpsetEntry.
vpset();
385 os <<
"VPSet " << (vpsetEntry.
isTracked() ?
"tracked" :
"untracked") <<
" = ({" << std::endl;
389 for (
auto const&
item : vps) {
390 os << start << newIndent;
397 os << iIndent <<
"})";
407 oStream <<
"{" << std::endl;
408 for (
auto const&
item : iPSet.
tbl()) {
410 oStream << newIndent <<
item.first <<
": " <<
item.second << std::endl;
415 oStream << newIndent <<
item.first <<
": ";
417 oStream << std::endl;
422 oStream << newIndent <<
item.first <<
": ";
424 oStream << std::endl;
426 oStream << iIndent <<
"}";
436 bool showDependencies,
437 bool extendedAncestors,
438 bool extendedDescendants,
439 bool excludeESModules,
441 bool showTopLevelPSets,
442 std::vector<std::string>
const& findMatch,
443 bool dontPrintProducts,
456 std::set<edm::BranchID>& ancestorBranchIDs,
457 std::ostringstream& sout,
458 std::map<
edm::BranchID, std::set<edm::ParentageID>>& perProductParentage)
const;
461 std::set<edm::BranchID>& descendantBranchIDs,
462 std::ostringstream& sout,
463 std::map<
edm::BranchID, std::set<edm::BranchID>>& parentToChildren)
const;
494 bool showDependencies,
495 bool extendedAncestors,
496 bool extendedDescendants,
497 bool excludeESModules,
498 bool showOtherModules,
499 bool showTopLevelPSets,
500 std::vector<std::string>
const& findMatch,
501 bool dontPrintProducts,
503 : filename_(filename),
504 inputFile_(makeTFile(filename)),
508 showDependencies_(showDependencies),
509 extendedAncestors_(extendedAncestors),
510 extendedDescendants_(extendedDescendants),
511 excludeESModules_(excludeESModules),
512 showOtherModules_(showOtherModules),
513 productRegistryPresent_(
true),
514 showTopLevelPSets_(showTopLevelPSets),
515 findMatch_(findMatch),
516 dontPrintProducts_(dontPrintProducts),
517 dumpPSetID_(dumpPSetID) {}
531 std::cout <<
"No event filtering information is available.\n";
532 std::cout <<
"------------------------------\n";
534 std::cout <<
"Event filtering information for " << num_ids <<
" processing steps is available.\n"
535 <<
"The ParameterSets will be printed out, "
536 <<
"with the oldest printed first.\n";
545 if (history !=
nullptr) {
550 if (history->GetEntry(0) <= 0) {
551 std::cout <<
"No event filtering information is available; the event history tree has no entries\n";
557 assert(events !=
nullptr);
559 if (eventSelectionsBranch ==
nullptr)
563 eventSelectionsBranch->SetAddress(&pids);
564 if (eventSelectionsBranch->GetEntry(0) <= 0) {
565 std::cout <<
"No event filtering information is available; the event selections branch has no entries\n";
573 std::cout <<
"ParameterSetID: " <<
id <<
'\n';
575 ParameterSetMap::const_iterator
i =
psm_.find(
id);
576 if (i ==
psm_.end()) {
577 std::cout <<
"We are unable to find the corresponding ParameterSet\n";
580 if (
id == empty.
id()) {
581 std::cout <<
"But it would have been empty anyway\n";
591 std::cout <<
" -------------------------\n";
595 std::cout <<
"Processing History:" << std::endl;
596 std::map<edm::ProcessConfigurationID, unsigned int> simpleIDs;
597 for (
auto const& ph :
phv_) {
600 for (
auto const& pc : ph) {
601 if (parent->size() == 0) {
602 unsigned int id = simpleIDs[pc.id()];
605 simpleIDs[pc.id()] =
id;
607 parent->addChild(HistoryNode(pc,
id));
608 parent = parent->lastChildAddress();
611 bool isUnique =
true;
612 for (
auto& child : *parent) {
613 if (child.configurationID() == pc.id()) {
620 simpleIDs[pc.id()] = parent->size() + 1;
621 parent->addChild(HistoryNode(pc, simpleIDs[pc.id()]));
622 parent = parent->lastChildAddress();
641 ParameterSetMap* pPsm = &
psm_;
646 assert(
nullptr != psetTree);
647 typedef std::pair<edm::ParameterSetID, edm::ParameterSetBlob> IdToBlobs;
649 IdToBlobs* pIdToBlob = &idToBlob;
651 for (
long long i = 0;
i != psetTree->GetEntries(); ++
i) {
652 psetTree->GetEntry(
i);
653 psm_.insert(idToBlob);
697 else if (!phm.empty()) {
698 for (
auto const&
history : phm) {
714 <<
"Illegal ParameterSetID string. It should contain 32 hexadecimal characters";
721 std::map<edm::BranchID, std::set<edm::ParentageID>> perProductParentage;
725 if (
nullptr == parentageTree) {
726 std::cerr <<
"ERROR, no Parentage tree available so cannot show dependencies, ancestors, or descendants.\n";
727 std::cerr <<
"Possibly this is not a standard EDM format file. For example, dependency, ancestor, and\n";
728 std::cerr <<
"descendant options to edmProvDump will not work with nanoAOD format files.\n\n";
735 std::vector<edm::ParentageID> orderedParentageIDs;
736 orderedParentageIDs.reserve(parentageTree->GetEntries());
741 parentageTree->GetEntry(
i);
743 orderedParentageIDs.push_back(parentageBuffer.
id());
747 TTree* eventMetaTree =
749 if (
nullptr == eventMetaTree) {
752 if (
nullptr == eventMetaTree) {
754 <<
"' Tree in file so can not show dependencies\n";
759 TBranch* storedProvBranch =
762 if (
nullptr != storedProvBranch) {
763 std::vector<edm::StoredProductProvenance>
info;
764 std::vector<edm::StoredProductProvenance>* pInfo = &
info;
765 storedProvBranch->SetAddress(&pInfo);
766 for (Long64_t
i = 0, numEntries = eventMetaTree->GetEntries();
i <
numEntries; ++
i) {
767 storedProvBranch->GetEntry(
i);
768 for (
auto const&
item : info) {
770 perProductParentage[bid].insert(orderedParentageIDs.at(
item.parentageIDIndex_));
775 TBranch* productProvBranch =
777 if (
nullptr != productProvBranch) {
778 std::vector<edm::ProductProvenance>
info;
779 std::vector<edm::ProductProvenance>* pInfo = &
info;
780 productProvBranch->SetAddress(&pInfo);
781 for (Long64_t
i = 0, numEntries = eventMetaTree->GetEntries();
i <
numEntries; ++
i) {
782 productProvBranch->GetEntry(
i);
783 for (
auto const&
item : info) {
784 perProductParentage[
item.branchID()].insert(
item.parentageID());
788 std::cerr <<
" ERROR, could not find provenance information so can not show dependencies\n";
798 std::map<edm::BranchID, std::set<edm::BranchID>> parentToChildren;
802 for (
auto const& itParentageSet : perProductParentage) {
804 for (
auto const& itParentageID : itParentageSet.second) {
806 if (
nullptr != parentage) {
807 for (
auto const& branch : parentage->
parents()) {
808 parentToChildren[branch].insert(childBranchID);
811 std::cerr <<
" ERROR:parentage info not in registry ParentageID=" << itParentageID << std::endl;
822 std::cout <<
"---------Producers with data in file---------" << std::endl;
830 std::map<edm::BranchID, std::string> branchIDToBranchName;
832 for (
auto const& processConfig :
phc_) {
835 if (
nullptr == processParameterSet || processParameterSet->
empty()) {
839 auto& product =
item.second;
840 if (product.processName() != processConfig.processName()) {
848 branchIDToBranchName[product.branchID()] = product.branchName();
855 if (moduleLabel ==
source) {
868 s << moduleParameterSetCopy.
id();
870 s << moduleParameterSet.
id();
872 moduleToIdBranches[std::make_pair(product.processName(), product.moduleLabel())][s.str()].push_back(product);
877 for (
auto const&
item : moduleToIdBranches) {
878 std::ostringstream sout;
879 sout <<
"Module: " <<
item.first.second <<
" " <<
item.first.first << std::endl;
880 std::set<edm::BranchID> allBranchIDsForLabelAndProcess;
882 for (
auto const& idBranch : idToBranches) {
883 sout <<
" PSet id:" << idBranch.first << std::endl;
885 sout <<
" products: {" << std::endl;
887 std::set<edm::BranchID> branchIDs;
888 for (
auto const& branch : idBranch.second) {
890 sout <<
" " << branch.branchName() << std::endl;
892 branchIDs.insert(branch.branchID());
893 allBranchIDsForLabelAndProcess.insert(branch.branchID());
895 sout <<
" }" << std::endl;
897 ParameterSetMap::const_iterator itpsm = psm_.find(psid);
898 if (psm_.end() == itpsm) {
900 errorLog_ <<
"No ParameterSetID for " << psid << std::endl;
903 sout <<
" parameters: ";
908 sout <<
" dependencies: {" << std::endl;
909 std::set<edm::ParentageID> parentageIDs;
910 for (
auto const& branch : branchIDs) {
912 std::set<edm::ParentageID>
const&
temp = perProductParentage[branch];
913 parentageIDs.insert(temp.begin(), temp.end());
915 for (
auto const& parentID : parentageIDs) {
917 if (
nullptr != parentage) {
918 for (
auto const& branch : parentage->
parents()) {
919 sout <<
" " << branchIDToBranchName[branch] << std::endl;
922 sout <<
" ERROR:parentage info not in registry ParentageID=" << parentID << std::endl;
925 if (parentageIDs.empty()) {
926 sout <<
" no dependencies recorded (event may not contain data from this module)" << std::endl;
928 sout <<
" }" << std::endl;
932 sout <<
" extendedAncestors: {" << std::endl;
933 std::set<edm::BranchID> ancestorBranchIDs;
934 for (
auto const& branchID : allBranchIDsForLabelAndProcess) {
935 addAncestors(branchID, ancestorBranchIDs, sout, perProductParentage);
937 for (
auto const& ancestorBranchID : ancestorBranchIDs) {
938 sout <<
" " << branchIDToBranchName[ancestorBranchID] <<
"\n";
940 sout <<
" }" << std::endl;
944 sout <<
" extendedDescendants: {" << std::endl;
945 std::set<edm::BranchID> descendantBranchIDs;
946 for (
auto const& branchID : allBranchIDsForLabelAndProcess) {
947 addDescendants(branchID, descendantBranchIDs, sout, parentToChildren);
949 for (
auto const& descendantBranchID : descendantBranchIDs) {
950 sout <<
" " << branchIDToBranchName[descendantBranchID] <<
"\n";
952 sout <<
" }" << std::endl;
954 bool foundMatch =
true;
957 if (sout.str().find(stringToFind) == std::string::npos) {
969 std::cout <<
"---------Other Modules---------" << std::endl;
972 std::cout <<
"---------All Modules---------" << std::endl;
977 std::cout <<
"---------EventSetup---------" << std::endl;
982 std::cout <<
"---------Top Level PSets---------" << std::endl;
991 std::set<edm::BranchID>& ancestorBranchIDs,
992 std::ostringstream& sout,
993 std::map<
edm::BranchID, std::set<edm::ParentageID>>& perProductParentage)
const {
996 std::set<edm::ParentageID>
const& parentIDs = perProductParentage[branchID];
997 for (
auto const& parentageID : parentIDs) {
999 if (
nullptr != parentage) {
1000 for (
auto const& branch : parentage->
parents()) {
1001 if (ancestorBranchIDs.insert(branch).second) {
1002 addAncestors(branch, ancestorBranchIDs, sout, perProductParentage);
1006 sout <<
" ERROR:parentage info not in registry ParentageID=" << parentageID << std::endl;
1012 std::set<edm::BranchID>& descendantBranchIDs,
1013 std::ostringstream& sout,
1014 std::map<
edm::BranchID, std::set<edm::BranchID>>& parentToChildren)
const {
1015 for (
auto const& childBranchID : parentToChildren[branchID]) {
1016 if (descendantBranchIDs.insert(childBranchID).second) {
1017 addDescendants(childBranchID, descendantBranchIDs, sout, parentToChildren);
1047 using namespace boost::program_options;
1050 descString +=
" [options] <filename>";
1051 descString +=
"\nAllowed options";
1052 options_description
desc(descString);
1055 desc.add_options()(
kHelpCommandOpt,
"show help message")(kSortCommandOpt,
"alphabetially sort EventSetup components")(
1057 kExtendedAncestorsCommandOpt,
"print what data each EDProducer is dependent upon including indirect dependences")(
1059 "print what data depends on the data each EDProducer produces including indirect dependences")(
1060 kExcludeESModulesCommandOpt,
"do not print ES module information")(
1062 kShowTopLevelPSetsCommandOpt,
"show all top level PSets")(
1064 boost::program_options::value<std::vector<std::string>>(),
1065 "show only modules whose information contains the matching string (or all the matching strings, this option can "
1067 kDumpPSetIDCommandOpt,
1068 value<std::string>(),
1069 "print the parameter set associated with the parameter set ID string (and print nothing else)");
1074 options_description hidden;
1075 hidden.add_options()(
kFileNameOpt, value<std::string>(),
"file name");
1078 options_description cmdline_options;
1079 cmdline_options.add(desc).add(hidden);
1081 positional_options_description
p;
1082 p.add(kFileNameOpt, -1);
1086 store(command_line_parser(argc, argv).
options(cmdline_options).positional(
p).
run(), vm);
1088 }
catch (
error const& iException) {
1093 if (vm.count(kHelpOpt)) {
1098 if (vm.count(kSortOpt)) {
1099 HistoryNode::sort_ =
true;
1102 bool showDependencies =
false;
1103 if (vm.count(kDependenciesOpt)) {
1104 showDependencies =
true;
1107 bool extendedAncestors =
false;
1108 if (vm.count(kExtendedAncestorsOpt)) {
1109 extendedAncestors =
true;
1112 bool extendedDescendants =
false;
1113 if (vm.count(kExtendedDescendantsOpt)) {
1114 extendedDescendants =
true;
1117 bool excludeESModules =
false;
1118 if (vm.count(kExcludeESModulesOpt)) {
1119 excludeESModules =
true;
1122 bool showAllModules =
false;
1123 if (vm.count(kShowAllModulesOpt)) {
1124 showAllModules =
true;
1127 bool showTopLevelPSets =
false;
1128 if (vm.count(kShowTopLevelPSetsOpt)) {
1129 showTopLevelPSets =
true;
1133 if (vm.count(kFileNameOpt)) {
1136 }
catch (boost::bad_any_cast
const&
e) {
1141 std::cout <<
"Data file not specified." << std::endl;
1147 if (vm.count(kDumpPSetIDOpt)) {
1150 }
catch (boost::bad_any_cast
const&
e) {
1156 std::vector<std::string> findMatch;
1157 if (vm.count(kFindMatchOpt)) {
1159 findMatch = vm[
kFindMatchOpt].as<std::vector<std::string>>();
1160 }
catch (boost::bad_any_cast
const&
e) {
1166 bool dontPrintProducts =
false;
1167 if (vm.count(kDontPrintProductsOpt)) {
1168 dontPrintProducts =
true;
1172 gErrorIgnoreLevel =
kError;
1177 extendedDescendants,
1197 std::cerr <<
"Unknown exception caught\n";
std::stringstream errorLog_
static char const *const kDontPrintProductsCommandOpt
std::vector< ProcessHistory > ProcessHistoryVector
std::string const & idToParameterSetBlobsBranchName()
std::vector< ProcessConfiguration > ProcessConfigurationVector
std::string const & BranchTypeToMetaDataTreeName(BranchType const &branchType)
void addDescendants(edm::BranchID const &branchID, std::set< edm::BranchID > &descendantBranchIDs, std::ostringstream &sout, std::map< edm::BranchID, std::set< edm::BranchID >> &parentToChildren) const
static char const *const kDumpPSetIDOpt
static char const *const kDependenciesOpt
std::string const & parentageTreeName()
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
static char const *const kFindMatchCommandOpt
void addAncestors(edm::BranchID const &branchID, std::set< edm::BranchID > &ancestorBranchIDs, std::ostringstream &sout, std::map< edm::BranchID, std::set< edm::ParentageID >> &perProductParentage) const
const bool isValid(const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
uint16_t *__restrict__ id
static char const *const kShowTopLevelPSetsCommandOpt
bool productRegistryPresent_
ParameterSetID id() const
edm::ProductRegistry reg_
void dumpParameterSetForID_(edm::ParameterSetID const &id)
static char const *const kHelpOpt
HistoryNode historyGraph_
static char const *const kDontPrintProductsOpt
std::string const & eventSelectionsBranchName()
std::ostream & operator<<(std::ostream &out, const ALILine &li)
void dumpEventFilteringParameterSets_(TFile *file)
edm::ProcessHistoryVector phv_
static char const *const kDependenciesCommandOpt
std::vector< EventSelectionID > EventSelectionIDVector
static char const *const kHelpCommandOpt
std::string const & parameterSetsTreeName()
static std::string const input
static char const *const kShowTopLevelPSetsOpt
std::vector< BranchID > const & parents() const
static char const *const kShowAllModulesCommandOpt
ParameterSet const & pset() const
returns the PSet
static char const *const kExcludeESModulesCommandOpt
std::string const & processHistoryMapBranchName()
edm::propagate_const< std::unique_ptr< TFile > > inputFile_
static char const *const kSortOpt
bool extendedDescendants_
bool getMapped(key_type const &k, value_type &result) const
EventSelectionIDVector const & eventSelectionIDs() const
static char const *const kExcludeESModulesOpt
std::map< std::pair< std::string, std::string >, IdToBranches > ModuleToIdBranches
void dumpEventFilteringParameterSets(edm::EventSelectionIDVector const &ids)
std::string const & eventHistoryBranchName()
Long64_t numEntries(TFile *hdl, std::string const &trname)
static char const *const kSortCommandOpt
char const * what() const noexceptoverride
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
std::string eventSetupComponent(char const *iType, std::string const &iCompName, edm::ParameterSet const &iProcessConfig, std::string const &iProcessName)
std::string nonProducerComponent(std::string const &iCompName, edm::ParameterSet const &iProcessConfig, std::string const &iProcessName)
bool getMapped(key_type const &k, value_type &result) const
std::string const & BranchTypeToBranchEntryInfoBranchName(BranchType const &branchType)
std::vector< ParameterSet > const & vpset() const
returns the VPSet
bool insertMapped(value_type const &v, bool forceUpdate=false)
ProvenanceDumper(std::string const &filename, bool showDependencies, bool extendedAncestors, bool extendedDescendants, bool excludeESModules, bool showAllModules, bool showTopLevelPSets, std::vector< std::string > const &findMatch, bool dontPrintProducts, std::string const &dumpPSetID)
ProvenanceDumper & operator=(ProvenanceDumper const &)=delete
std::string const & metaDataTreeName()
std::string const & BranchTypeToProductTreeName(BranchType const &branchType)
static char const *const kExtendedAncestorsCommandOpt
static std::string const triggerResults
bool isRegistered() const
Hash< ParameterSetType > ParameterSetID
std::string const & parameterSetMapBranchName()
static void appendToSet(std::set< std::string > &iSet, std::vector< std::string > const &iFrom)
static std::ostream & prettyPrint(std::ostream &oStream, edm::ParameterSet const &iPSet, std::string const &iIndent, std::string const &iIndentDelta)
std::string const & processHistoryBranchName()
ServiceRegistry::Operate setupSiteLocalConfig()
std::map< std::string, std::vector< edm::BranchDescription > > IdToBranches
void dumpProcessHistory_()
edm::ProcessConfigurationVector phc_
psettable const & psetTable() const
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
ParameterSet const & getParameterSet(std::string const &) const
static char const *const kShowAllModulesOpt
std::string const & parentageBranchName()
T getParameter(std::string const &) const
ProductList & productListUpdator()
std::vector< std::string > findMatch_
std::map< ParameterSetID, ParameterSetBlob > ParameterSetMap
constexpr element_type const * get() const
std::string const & productDescriptionBranchName()
static char const *const kExtendedDescendantsOpt
vpsettable const & vpsetTable() const
static char const *const kFileNameOpt
std::string const & BranchTypeToProductProvenanceBranchName(BranchType const &BranchType)
std::string const & eventTreeName()
std::string const & eventHistoryTreeName()
static char const *const kExtendedAncestorsOpt
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
table const & tbl() const
static ParentageRegistry * instance()
static std::string const triggerPaths
ParameterSet const & registerIt()
static std::string const source
void setIsMergeable(BranchDescription &)
tuple size
Write out results.
std::map< ProcessHistoryID, ProcessHistory > ProcessHistoryMap
std::string const & moduleDescriptionMapBranchName()
bool insertMapped(value_type const &v)
static Registry * instance()
static std::string topLevelPSet(std::string const &iName, edm::ParameterSet const &iProcessConfig, std::string const &iProcessName)
static char const *const kDumpPSetIDCommandOpt
static char const *const kExtendedDescendantsCommandOpt
void printErrors(std::ostream &os)
static char const *const kFindMatchOpt