21 #include "Cintex/Cintex.h"
26 #include "boost/program_options.hpp"
36 typedef std::map<std::string, std::vector<edm::BranchDescription> >
IdToBranches;
47 typedef std::map<edm::ParameterSetID, edm::ParameterSetBlob>
ParameterSetMap;
58 simpleId_(iSimpleId) {
61 void addChild(HistoryNode
const&
child) {
62 children_.push_back(child);
66 parameterSetID()
const {
67 return config_.parameterSetID();
72 return config_.processName();
77 return children_.size();
82 return &children_.back();
85 typedef std::vector<HistoryNode>::const_iterator const_iterator;
86 typedef std::vector<HistoryNode>::iterator iterator;
88 iterator
begin() {
return children_.begin();}
89 iterator
end() {
return children_.end();}
91 const_iterator
begin()
const {
return children_.begin();}
92 const_iterator
end()
const {
return children_.end();}
94 void print(std::ostream& os)
const {
95 os << config_.processName()
96 <<
" '" << config_.passID() <<
"' '"
97 << config_.releaseVersion() <<
"' ["
99 << config_.parameterSetID() <<
")"
104 void printEventSetupHistory(ParameterSetMap
const& iPSM,
105 std::vector<std::string>
const& iFindMatch,
106 std::ostream& oErrorLog)
const;
107 void printOtherModulesHistory(ParameterSetMap
const& iPSM,
109 std::vector<std::string>
const& iFindMatch,
110 std::ostream& oErrorLog)
const;
111 void printTopLevelPSetsHistory(ParameterSetMap
const& iPSM,
112 std::vector<std::string>
const& iFindMatch,
113 std::ostream& oErrorLog)
const;
116 configurationID()
const {
123 std::vector<HistoryNode> children_;
124 unsigned int simpleId_;
127 std::ostream&
operator<<(std::ostream& os, HistoryNode
const&
node) {
131 bool HistoryNode::sort_ =
false;
138 for(
auto const&
process : iHist) {
140 <<
process.processName() <<
" '"
142 <<
process.releaseVersion() <<
"' ("
143 <<
process.parameterSetID() <<
")"
145 indent += indentDelta;
150 void HistoryNode::printHistory(
std::string const& iIndent)
const {
153 for(
auto const& item : *
this) {
155 item.printHistory(indent + indentDelta);
163 std::ostringstream
result;
166 if(0 == name.size()) {
170 result << iType <<
": " << name <<
" " << iProcessName <<
"\n"
176 void HistoryNode::printEventSetupHistory(ParameterSetMap
const& iPSM,
177 std::vector<std::string>
const& iFindMatch,
178 std::ostream& oErrorLog)
const {
179 for(
auto const& itH : *
this) {
181 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
182 if(itFind == iPSM.end()){
183 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
186 std::vector<std::string> sourceStrings, moduleStrings;
188 std::vector<std::string> sources = processConfig.
getParameter<std::vector<std::string> >(
"@all_essources");
189 for(
auto& itM : sources) {
194 bool foundMatch =
true;
195 if(!iFindMatch.empty()) {
196 for (
auto const& stringToFind : iFindMatch) {
197 if (retValue.find(stringToFind) == std::string::npos) {
204 sourceStrings.push_back(std::move(retValue));
208 std::vector<std::string>
modules = processConfig.getParameter<std::vector<std::string> >(
"@all_esmodules");
209 for(
auto& itM : modules) {
214 bool foundMatch =
true;
215 if(!iFindMatch.empty()) {
216 for (
auto const& stringToFind : iFindMatch) {
217 if (retValue.find(stringToFind) == std::string::npos) {
224 moduleStrings.push_back(std::move(retValue));
228 std::sort(sourceStrings.begin(), sourceStrings.end());
229 std::sort(moduleStrings.begin(), moduleStrings.end());
231 std::copy(sourceStrings.begin(), sourceStrings.end(),
232 std::ostream_iterator<std::string>(
std::cout,
"\n"));
233 std::copy(moduleStrings.begin(), moduleStrings.end(),
234 std::ostream_iterator<std::string>(
std::cout,
"\n"));
237 itH.printEventSetupHistory(iPSM, iFindMatch, oErrorLog);
244 std::ostringstream
result;
248 result <<
"Module: " << label <<
" " << iProcessName <<
"\n" <<
" parameters: ";
253 void HistoryNode::printOtherModulesHistory(ParameterSetMap
const& iPSM,
255 std::vector<std::string>
const& iFindMatch,
256 std::ostream& oErrorLog)
const {
257 for(
auto const& itH : *
this) {
259 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
260 if(itFind == iPSM.end()){
261 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
264 std::vector<std::string> moduleStrings;
266 std::vector<std::string> modules = processConfig.
getParameter<std::vector<std::string> >(
"@all_modules");
267 for(
auto& itM : modules) {
269 if(iModules.end() == iModules.find(std::make_pair(itH.processName(), itM))) {
274 bool foundMatch =
true;
275 if(!iFindMatch.empty()) {
276 for (
auto const& stringToFind : iFindMatch) {
277 if (retValue.find(stringToFind) == std::string::npos) {
284 moduleStrings.push_back(std::move(retValue));
289 std::sort(moduleStrings.begin(), moduleStrings.end());
291 std::copy(moduleStrings.begin(), moduleStrings.end(),
292 std::ostream_iterator<std::string>(
std::cout,
"\n"));
294 itH.printOtherModulesHistory(iPSM, iModules, iFindMatch, oErrorLog);
298 static void appendToSet(std::set<std::string>&iSet, std::vector<std::string>
const& iFrom){
299 for(
auto const&
n : iFrom) {
307 std::ostringstream
result;
310 result <<
"PSet: " << iName <<
" " << iProcessName <<
"\n" <<
" parameters: ";
316 void HistoryNode::printTopLevelPSetsHistory(ParameterSetMap
const& iPSM,
317 std::vector<std::string>
const& iFindMatch,
318 std::ostream& oErrorLog)
const {
319 for(
auto const& itH : *
this) {
321 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
322 if(itFind == iPSM.end()){
323 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
327 std::set<std::string> namesToExclude;
328 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_modules"));
329 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_sources"));
330 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_loopers"));
332 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_esmodules"));
333 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_essources"));
334 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_esprefers"));
335 if (processConfig.existsAs<std::vector<std::string>>(
"all_aliases")) {
336 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_aliases"));
339 std::vector<std::string> allNames{};
340 processConfig.getParameterSetNames(allNames);
342 std::vector<std::string>
results;
343 for(
auto const&
name: allNames){
344 if (
name.size() == 0 ||
'@' ==
name[0] || namesToExclude.find(
name)!=namesToExclude.end()) {
349 bool foundMatch =
true;
350 if(!iFindMatch.empty()) {
351 for (
auto const& stringToFind : iFindMatch) {
352 if (retValue.find(stringToFind) == std::string::npos) {
359 results.push_back(std::move(retValue));
363 std::sort(results.begin(), results.end());
365 std::copy(results.begin(), results.end(),
366 std::ostream_iterator<std::string>(
std::cout,
"\n"));
368 itH.printTopLevelPSetsHistory(iPSM, iFindMatch, oErrorLog);
374 std::unique_ptr<TFile>
383 fileNames.push_back(filename);
387 <<
"File " << filename <<
" was not found or could not be opened.\n";
390 std::unique_ptr<TFile>
result(TFile::Open(
catalog.fileNames()[0].c_str()));
393 <<
"File " << fileNames[0] <<
" was not found or could not be opened.\n";
402 std::unique_ptr<TFile>
404 gErrorIgnoreLevel = kFatal;
405 std::unique_ptr<TFile>
result(TFile::Open(filename.c_str()));
406 gErrorIgnoreLevel =
kError;
409 return makeTFileWithLookup(filename);
417 char const* trackiness = (psetEntry.
isTracked()?
"tracked":
"untracked");
418 os <<
"PSet " << trackiness <<
" = (";
419 prettyPrint(os, psetEntry.
pset(), iIndent + iIndentDelta, iIndentDelta);
425 std::vector<edm::ParameterSet>
const& vps = vpsetEntry.
vpset();
426 os <<
"VPSet " << (vpsetEntry.
isTracked() ?
"tracked" :
"untracked") <<
" = ({" << std::endl;
430 for(
auto const& item : vps) {
431 os << start << newIndent;
438 os << iIndent<<
"})";
446 oStream <<
"{" << std::endl;
447 for(
auto const& item : iPSet.
tbl()) {
449 oStream << newIndent<< item.first <<
": " << item.second << std::endl;
451 for(
auto const& item : iPSet.
psetTable()) {
454 oStream << newIndent << item.first <<
": ";
461 oStream << newIndent << item.first <<
": ";
465 oStream << iIndent<<
"}";
476 bool showDependencies,
477 bool extendedAncestors,
478 bool extendedDescendants,
479 bool excludeESModules,
481 bool showTopLevelPSets,
482 std::vector<std::string>
const& findMatch,
483 bool dontPrintProducts);
496 std::set<edm::BranchID>& ancestorBranchIDs,
497 std::ostringstream& sout,
501 std::ostringstream& sout,
531 bool showDependencies,
532 bool extendedAncestors,
533 bool extendedDescendants,
534 bool excludeESModules,
535 bool showOtherModules,
536 bool showTopLevelPSets,
537 std::vector<std::string>
const& findMatch,
538 bool dontPrintProducts) :
540 inputFile_(makeTFile(filename)),
544 showDependencies_(showDependencies),
545 extendedAncestors_(extendedAncestors),
546 extendedDescendants_(extendedDescendants),
547 excludeESModules_(excludeESModules),
548 showOtherModules_(showOtherModules),
549 showTopLevelPSets_(showTopLevelPSets),
550 findMatch_(findMatch),
551 dontPrintProducts_(dontPrintProducts) {
573 std::cout <<
"No event filtering information is available.\n";
574 std::cout <<
"------------------------------\n";
576 std::cout <<
"Event filtering information for "
578 <<
" processing steps is available.\n"
579 <<
"The ParameterSets will be printed out, "
580 <<
"with the oldest printed first.\n";
596 if(history->GetEntry(0) <= 0) {
597 std::cout <<
"No event filtering information is available; the event history tree has no entries\n";
603 assert (events != 0);
605 assert (eventSelectionsBranch != 0);
608 eventSelectionsBranch->SetAddress(&pids);
609 if(eventSelectionsBranch->GetEntry(0) <= 0) {
610 std::cout <<
"No event filtering information is available; the event selections branch has no entries\n";
619 std::cout <<
"ParameterSetID: " <<
id <<
'\n';
621 ParameterSetMap::const_iterator
i =
psm_.find(
id);
622 if(i ==
psm_.end()) {
623 std::cout <<
"We are unable to find the corresponding ParameterSet\n";
625 if(
id == empty.
id()) {
626 std::cout <<
"But it would have been empty anyway\n";
636 std::cout <<
" -------------------------\n";
641 std::cout <<
"Processing History:" << std::endl;
642 if(1 ==
phv_.size()) {
646 std::map<edm::ProcessConfigurationID, unsigned int> simpleIDs;
647 for(
auto const& ph :
phv_) {
650 for(
auto const& pc : ph) {
651 if(parent->size() == 0) {
652 unsigned int id = simpleIDs[pc.id()];
655 simpleIDs[pc.id()] = id;
657 parent->addChild(HistoryNode(pc,
id));
658 parent = parent->lastChildAddress();
661 bool isUnique =
true;
662 for(
auto& child : *parent) {
663 if(child.configurationID() == pc.id()) {
670 simpleIDs[pc.id()] = parent->size() + 1;
671 parent->addChild(HistoryNode(pc, simpleIDs[pc.id()]));
672 parent = parent->lastChildAddress();
690 ParameterSetMap* pPsm = &
psm_;
695 assert(0 != psetTree);
696 typedef std::pair<edm::ParameterSetID, edm::ParameterSetBlob> IdToBlobs;
698 IdToBlobs* pIdToBlob = &idToBlob;
700 for(
long long i = 0;
i != psetTree->GetEntries(); ++
i) {
701 psetTree->GetEntry(
i);
702 psm_.insert(idToBlob);
726 assert(
nullptr != pReg);
729 for(
auto const& item :
psm_) {
731 pset.
setID(item.first);
737 for(
auto const& history :
phv_) {
738 for(
auto const&
process : history) {
747 else if(!phm.empty()) {
748 for(
auto const& history : phm) {
749 phv_.push_back(history.second);
750 for(
auto const&
process : history.second) {
759 std::map<edm::BranchID, std::set<edm::ParentageID> > perProductParentage;
763 if(
nullptr == parentageTree) {
764 std::cerr <<
"ERROR, no Parentage tree available so can not show dependencies/n";
772 std::vector<edm::ParentageID> orderedParentageIDs;
773 orderedParentageIDs.reserve(parentageTree->GetEntries());
778 parentageTree->GetEntry(
i);
780 orderedParentageIDs.push_back(parentageBuffer.
id());
785 if(0 == eventMetaTree) {
788 if(0 == eventMetaTree) {
796 if(0!=storedProvBranch) {
797 std::vector<edm::StoredProductProvenance>
info;
798 std::vector<edm::StoredProductProvenance>* pInfo = &
info;
799 storedProvBranch->SetAddress(&pInfo);
800 for(Long64_t
i = 0, numEntries = eventMetaTree->GetEntries();
i <
numEntries; ++
i) {
801 storedProvBranch->GetEntry(
i);
802 for(
auto const& item : info) {
804 perProductParentage[bid].insert(orderedParentageIDs[item.parentageIDIndex_]);
810 if (0 != productProvBranch) {
811 std::vector<edm::ProductProvenance>
info;
812 std::vector<edm::ProductProvenance>* pInfo = &
info;
813 productProvBranch->SetAddress(&pInfo);
814 for(Long64_t
i = 0, numEntries = eventMetaTree->GetEntries();
i <
numEntries; ++
i) {
815 productProvBranch->GetEntry(
i);
816 for(
auto const& item : info) {
817 perProductParentage[item.branchID()].insert(item.parentageID());
821 std::cerr <<
" ERROR, could not find provenance information so can not show dependencies\n";
831 std::map<edm::BranchID, std::set<edm::BranchID> > parentToChildren;
835 for (
auto const& itParentageSet : perProductParentage) {
837 for (
auto const& itParentageID : itParentageSet.second) {
840 for(
auto const& branch : parentage->
parents()) {
841 parentToChildren[branch].insert(childBranchID);
844 std::cerr <<
" ERROR:parentage info not in registry ParentageID=" << itParentageID << std::endl;
854 std::cout <<
"---------Producers with data in file---------" << std::endl;
861 std::map<edm::BranchID, std::string> branchIDToBranchName;
863 for(
auto const& processConfig :
phc_) {
865 if(
nullptr == processParameterSet || processParameterSet->
empty()) {
869 auto& product = item.second;
870 if(product.processName() != processConfig.processName()) {
877 branchIDToBranchName[product.branchID()] = product.branchName();
884 if(moduleLabel ==
source) {
897 s << moduleParameterSetCopy.
id();
899 s << moduleParameterSet.
id();
901 moduleToIdBranches[std::make_pair(product.processName(), product.moduleLabel())][s.str()].push_back(product);
906 for(
auto const& item : moduleToIdBranches) {
907 std::ostringstream sout;
908 sout <<
"Module: " << item.first.second <<
" " << item.first.first << std::endl;
909 std::set<edm::BranchID> allBranchIDsForLabelAndProcess;
911 for(
auto const& idBranch : idToBranches) {
912 sout <<
" PSet id:" << idBranch.first << std::endl;
914 sout <<
" products: {" << std::endl;
916 std::set<edm::BranchID> branchIDs;
917 for(
auto const& branch : idBranch.second) {
919 sout <<
" " << branch.branchName() << std::endl;
921 branchIDs.insert(branch.branchID());
922 allBranchIDsForLabelAndProcess.insert(branch.branchID());
924 sout <<
" }" << std::endl;
926 ParameterSetMap::const_iterator itpsm = psm_.find(psid);
927 if(psm_.end() == itpsm) {
929 errorLog_ <<
"No ParameterSetID for " << psid << std::endl;
932 sout <<
" parameters: ";
938 sout <<
" dependencies: {" << std::endl;
939 std::set<edm::ParentageID> parentageIDs;
940 for(
auto const& branch : branchIDs) {
943 std::set<edm::ParentageID>
const&
temp = perProductParentage[branch];
944 parentageIDs.insert(temp.begin(), temp.end());
946 for(
auto const& parentID : parentageIDs) {
948 if(
nullptr != parentage) {
949 for(
auto const& branch : parentage->
parents()) {
950 sout <<
" " << branchIDToBranchName[branch] << std::endl;
953 sout <<
" ERROR:parentage info not in registry ParentageID=" << parentID << std::endl;
956 if(parentageIDs.empty()) {
957 sout <<
" no dependencies recorded (event may not contain data from this module)" << std::endl;
959 sout <<
" }" << std::endl;
963 sout <<
" extendedAncestors: {" << std::endl;
964 std::set<edm::BranchID> ancestorBranchIDs;
965 for (
auto const& branchID : allBranchIDsForLabelAndProcess) {
966 addAncestors(branchID, ancestorBranchIDs, sout, perProductParentage);
968 for (
auto const& ancestorBranchID : ancestorBranchIDs) {
969 sout <<
" " << branchIDToBranchName[ancestorBranchID] <<
"\n";
971 sout <<
" }" << std::endl;
975 sout <<
" extendedDescendants: {" << std::endl;
976 std::set<edm::BranchID> descendantBranchIDs;
977 for (
auto const& branchID : allBranchIDsForLabelAndProcess) {
978 addDescendants(branchID, descendantBranchIDs, sout, parentToChildren);
980 for (
auto const& descendantBranchID : descendantBranchIDs) {
981 sout <<
" " << branchIDToBranchName[descendantBranchID] <<
"\n";
983 sout <<
" }" << std::endl;
985 bool foundMatch =
true;
988 if (sout.str().find(stringToFind) == std::string::npos) {
999 std::cout <<
"---------Other Modules---------" << std::endl;
1004 std::cout <<
"---------EventSetup---------" << std::endl;
1009 std::cout <<
"---------Top Level PSets---------" << std::endl;
1023 std::set<edm::ParentageID>
const& parentIDs = perProductParentage[branchID];
1024 for (
auto const& parentageID : parentIDs) {
1026 if(0 != parentage) {
1027 for(
auto const& branch : parentage->
parents()) {
1029 if(ancestorBranchIDs.insert(branch).second) {
1030 addAncestors(branch, ancestorBranchIDs, sout, perProductParentage);
1034 sout <<
" ERROR:parentage info not in registry ParentageID=" << parentageID << std::endl;
1043 for (
auto const& childBranchID : parentToChildren[branchID]) {
1044 if (descendantBranchIDs.insert(childBranchID).second) {
1045 addDescendants(childBranchID, descendantBranchIDs, sout, parentToChildren);
1073 using namespace boost::program_options;
1076 descString +=
" [options] <filename>";
1077 descString +=
"\nAllowed options";
1078 options_description desc(descString);
1082 ,
"alphabetially sort EventSetup components")
1084 ,
"print what data each EDProducer is directly dependent upon")
1085 (kExtendedAncestorsCommandOpt
1086 ,
"print what data each EDProducer is dependent upon including indirect dependences")
1088 ,
"print what data depends on the data each EDProducer produces including indirect dependences")
1089 (kExcludeESModulesCommandOpt
1090 ,
"do not print ES module information")
1092 ,
"show all modules (not just those that created data in the file)")
1093 (kShowTopLevelPSetsCommandOpt,
"show all top level PSets")
1095 "show only modules whose information contains the matching string (or all the matching strings, this option can be repeated with different strings)")
1097 ,
"do not print products produced by module")
1101 options_description hidden;
1102 hidden.add_options()(
kFileNameOpt, value<std::string>(),
"file name");
1105 options_description cmdline_options;
1106 cmdline_options.add(desc).add(hidden);
1108 positional_options_description
p;
1109 p.add(kFileNameOpt, -1);
1113 store(command_line_parser(argc, argv).
options(cmdline_options).positional(
p).
run(), vm);
1115 }
catch(
error const& iException) {
1120 if(vm.count(kHelpOpt)) {
1125 if(vm.count(kSortOpt)) {
1126 HistoryNode::sort_ =
true;
1129 bool showDependencies =
false;
1130 if(vm.count(kDependenciesOpt)) {
1131 showDependencies =
true;
1134 bool extendedAncestors =
false;
1135 if(vm.count(kExtendedAncestorsOpt)) {
1136 extendedAncestors =
true;
1139 bool extendedDescendants =
false;
1140 if(vm.count(kExtendedDescendantsOpt)) {
1141 extendedDescendants =
true;
1144 bool excludeESModules =
false;
1145 if(vm.count(kExcludeESModulesOpt)) {
1146 excludeESModules =
true;
1149 bool showAllModules =
false;
1150 if(vm.count(kShowAllModulesOpt)) {
1151 showAllModules =
true;
1154 bool showTopLevelPSets =
false;
1155 if(vm.count(kShowTopLevelPSetsOpt)) {
1156 showTopLevelPSets=
true;
1160 if(vm.count(kFileNameOpt)) {
1163 }
catch(boost::bad_any_cast
const&
e) {
1168 std::cout <<
"Data file not specified." << std::endl;
1173 std::vector<std::string> findMatch;
1174 if(vm.count(kFindMatchOpt)) {
1176 findMatch = vm[
kFindMatchOpt].as<std::vector<std::string> >();
1177 }
catch(boost::bad_any_cast
const&
e) {
1183 bool dontPrintProducts =
false;
1184 if(vm.count(kDontPrintProductsOpt)) {
1185 dontPrintProducts=
true;
1189 gErrorIgnoreLevel =
kError;
1192 ROOT::Cintex::Cintex::Enable();
1195 excludeESModules, showAllModules, showTopLevelPSets, findMatch, dontPrintProducts);
1212 std::cerr <<
"Unknown exception caught\n";
std::stringstream errorLog_
static char const *const kDontPrintProductsCommandOpt
std::vector< ProcessHistory > ProcessHistoryVector
virtual char const * what() const
void setID(ParameterSetID const &id)
T getParameter(std::string const &) const
std::string const & idToParameterSetBlobsBranchName()
std::vector< ProcessConfiguration > ProcessConfigurationVector
std::string const & BranchTypeToMetaDataTreeName(BranchType const &branchType)
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)
tuple start
Check for commandline option errors.
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
static char const *const kShowTopLevelPSetsCommandOpt
ParameterSetID id() const
std::string print(const Track &, edm::Verbosity=edm::Concise)
Track print utility.
edm::ProductRegistry reg_
void addAncestors(edm::BranchID const &branchID, std::set< edm::BranchID > &ancestorBranchIDs, std::ostringstream &sout, std::map< edm::BranchID, std::set< edm::ParentageID > > &perProductParentage) const
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 ServiceToken createContaining(std::auto_ptr< T > iService)
create a service token that holds the service defined by iService
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
int main(int argc, char **argv)
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()
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
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
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
ProvenanceDumper & operator=(ProvenanceDumper const &)=delete
std::string const & metaDataTreeName()
std::string const & BranchTypeToProductTreeName(BranchType const &branchType)
std::unique_ptr< TFile > inputFile_
static char const *const kExtendedAncestorsCommandOpt
static std::string const triggerResults
bool isRegistered() const
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()
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()
ProductList & productListUpdator()
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::vector< std::string > findMatch_
std::map< ParameterSetID, ParameterSetBlob > ParameterSetMap
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
bool insertMapped(value_type const &v)
table const & tbl() const
static ParentageRegistry * instance()
static std::string const triggerPaths
ParameterSet const & registerIt()
static std::string const source
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 kExtendedDescendantsCommandOpt
void printErrors(std::ostream &os)
static char const *const kFindMatchOpt