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;
85 std::vector<std::string>
const& iFindMatch,
86 std::ostream& oErrorLog)
const;
89 std::vector<std::string>
const& iFindMatch,
90 std::ostream& oErrorLog)
const;
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) {
117 <<
process.parameterSetID() <<
")" << std::endl;
123 void HistoryNode::printHistory(
std::string const& iIndent)
const {
126 for (
auto const&
item : *
this) {
136 std::ostringstream
result;
143 result << iType <<
": " <<
name <<
" " << iProcessName <<
"\n" 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");
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");
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");
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) {
328 itH.printTopLevelPSetsHistory(iPSM, iFindMatch, oErrorLog);
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";
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,
461 std::set<edm::BranchID>& descendantBranchIDs,
462 std::ostringstream& sout,
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,
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";
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));
611 bool isUnique =
true;
613 if (
child.configurationID() == pc.id()) {
620 simpleIDs[pc.id()] =
parent->size() + 1;
621 parent->addChild(HistoryNode(pc, simpleIDs[pc.id()]));
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);
687 for (
auto const& history :
phv_) {
688 for (
auto const&
process : history) {
697 else if (!phm.empty()) {
698 for (
auto const& history : phm) {
699 phv_.push_back(history.second);
700 for (
auto const&
process : history.second) {
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);
767 storedProvBranch->GetEntry(
i);
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);
782 productProvBranch->GetEntry(
i);
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) {
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();
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) {
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,
996 std::set<edm::ParentageID>
const& parentIDs = perProductParentage[branchID];
997 for (
auto const& parentageID : parentIDs) {
999 if (
nullptr != parentage) {
1001 if (ancestorBranchIDs.insert(
branch).second) {
1006 sout <<
" ERROR:parentage info not in registry ParentageID=" << parentageID << std::endl;
1012 std::set<edm::BranchID>& descendantBranchIDs,
1013 std::ostringstream& sout,
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);
1059 "print what data depends on the data each EDProducer produces including indirect dependences")(
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 " 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;
1088 }
catch (
error const& iException) {
1099 HistoryNode::sort_ =
true;
1102 bool showDependencies =
false;
1104 showDependencies =
true;
1107 bool extendedAncestors =
false;
1109 extendedAncestors =
true;
1112 bool extendedDescendants =
false;
1114 extendedDescendants =
true;
1117 bool excludeESModules =
false;
1119 excludeESModules =
true;
1122 bool showAllModules =
false;
1124 showAllModules =
true;
1127 bool showTopLevelPSets =
false;
1129 showTopLevelPSets =
true;
1136 }
catch (boost::bad_any_cast
const&
e) {
1141 std::cout <<
"Data file not specified." << std::endl;
1150 }
catch (boost::bad_any_cast
const&
e) {
1156 std::vector<std::string> findMatch;
1159 findMatch = vm[
kFindMatchOpt].as<std::vector<std::string>>();
1160 }
catch (boost::bad_any_cast
const&
e) {
1166 bool dontPrintProducts =
false;
1168 dontPrintProducts =
true;
1177 extendedDescendants,
1197 std::cerr <<
"Unknown exception caught\n";
std::stringstream errorLog_
static char const *const kDontPrintProductsCommandOpt
std::vector< ProcessHistory > ProcessHistoryVector
std::vector< ProcessConfiguration > ProcessConfigurationVector
std::string const & metaDataTreeName()
static char const *const kDumpPSetIDOpt
static char const *const kDependenciesOpt
bool getMapped(key_type const &k, value_type &result) const
static char const *const kFindMatchCommandOpt
table const & tbl() const
const bool isValid(const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
static char const *const kShowTopLevelPSetsCommandOpt
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)
static char const *const kHelpOpt
HistoryNode historyGraph_
std::string const & processHistoryBranchName()
std::vector< ParameterSet > const & vpset() const
returns the VPSet
std::vector< BranchID > const & parents() const
static char const *const kDontPrintProductsOpt
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
void dumpEventFilteringParameterSets_(TFile *file)
ParameterSet const & pset() const
returns the PSet
std::string const & parameterSetMapBranchName()
edm::ProcessHistoryVector phv_
static char const *const kDependenciesCommandOpt
std::vector< EventSelectionID > EventSelectionIDVector
std::string const & productDescriptionBranchName()
static char const *const kHelpCommandOpt
static std::string const input
static char const *const kShowTopLevelPSetsOpt
std::ostream & operator<<(std::ostream &os, edm::ProcessHistory &iHist)
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()
static char const *const kShowAllModulesCommandOpt
ParameterSetID id() const
static char const *const kExcludeESModulesCommandOpt
ParameterSet const & registerIt()
edm::propagate_const< std::unique_ptr< TFile > > inputFile_
static char const *const kSortOpt
bool extendedDescendants_
std::string const & BranchTypeToProductTreeName(BranchType const &branchType)
static char const *const kExcludeESModulesOpt
std::map< std::pair< std::string, std::string >, IdToBranches > ModuleToIdBranches
void dumpEventFilteringParameterSets(edm::EventSelectionIDVector const &ids)
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()
static char const *const kSortCommandOpt
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 const & BranchTypeToProductProvenanceBranchName(BranchType const &BranchType)
std::string nonProducerComponent(std::string const &iCompName, edm::ParameterSet const &iProcessConfig, std::string const &iProcessName)
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)
std::string const & parentageBranchName()
ProvenanceDumper & operator=(ProvenanceDumper const &)=delete
static char const *const kExtendedAncestorsCommandOpt
static std::string const triggerResults
Hash< ParameterSetType > ParameterSetID
std::string const & idToParameterSetBlobsBranchName()
std::string const & eventHistoryTreeName()
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)
ServiceRegistry::Operate setupSiteLocalConfig()
std::map< std::string, std::vector< edm::BranchDescription > > IdToBranches
int main(int argc, char *argv[])
void dumpProcessHistory_()
std::string const & eventSelectionsBranchName()
edm::ProcessConfigurationVector phc_
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
static char const *const kShowAllModulesOpt
std::string const & parentageTreeName()
ProductList & productListUpdator()
std::vector< std::string > findMatch_
std::map< ParameterSetID, ParameterSetBlob > ParameterSetMap
static char const *const kExtendedDescendantsOpt
std::string const & eventHistoryBranchName()
std::string const & eventTreeName()
static char const *const kFileNameOpt
bool isRegistered() const
static char const *const kExtendedAncestorsOpt
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
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
static std::string topLevelPSet(std::string const &iName, edm::ParameterSet const &iProcessConfig, std::string const &iProcessName)
vpsettable const & vpsetTable() const
static char const *const kDumpPSetIDCommandOpt
static char const *const kExtendedDescendantsCommandOpt
psettable const & psetTable() const
void printErrors(std::ostream &os)
static char const *const kFindMatchOpt