28 #include "boost/program_options.hpp" 39 typedef std::map<std::string, std::vector<edm::BranchDescription>>
IdToBranches;
42 static std::ostream&
prettyPrint(std::ostream& oStream,
53 typedef std::map<edm::ParameterSetID, edm::ParameterSetBlob>
ParameterSetMap;
57 HistoryNode() : config_(), simpleId_(0) {}
60 : config_(iConfig), simpleId_(iSimpleId) {}
62 void addChild(HistoryNode
const&
child) { children_.push_back(
child); }
68 std::size_t
size()
const {
return children_.size(); }
70 HistoryNode* lastChildAddress() {
return &children_.back(); }
72 typedef std::vector<HistoryNode>::const_iterator const_iterator;
73 typedef std::vector<HistoryNode>::iterator iterator;
75 iterator
begin() {
return children_.begin(); }
76 iterator
end() {
return children_.end(); }
78 const_iterator
begin()
const {
return children_.begin(); }
79 const_iterator
end()
const {
return children_.end(); }
81 void print(std::ostream& os)
const {
82 os << config_.processName() <<
" '" << config_.passID() <<
"' '" << config_.releaseVersion() <<
"' [" << simpleId_
83 <<
"] (" << config_.parameterSetID() <<
")" << std::endl;
88 std::vector<std::string>
const& iFindMatch,
89 std::ostream& oErrorLog)
const;
92 std::vector<std::string>
const& iFindMatch,
93 std::ostream& oErrorLog)
const;
95 std::vector<std::string>
const& iFindMatch,
96 std::ostream& oErrorLog)
const;
104 std::vector<HistoryNode> children_;
105 unsigned int simpleId_;
108 std::ostream&
operator<<(std::ostream& os, HistoryNode
const& node) {
112 bool HistoryNode::sort_ =
false;
118 for (
auto const&
process : iHist) {
120 <<
process.parameterSetID() <<
")" << std::endl;
126 void HistoryNode::printHistory(
std::string const& iIndent)
const {
129 for (
auto const&
item : *
this) {
139 std::ostringstream
result;
146 result << iType <<
": " <<
name <<
" " << iProcessName <<
"\n" 153 std::vector<std::string>
const& iFindMatch,
154 std::ostream& oErrorLog)
const {
155 for (
auto const& itH : *
this) {
157 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
158 if (itFind == iPSM.end()) {
159 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
162 std::vector<std::string> sourceStrings, moduleStrings;
164 std::vector<std::string>
sources = processConfig.getParameter<std::vector<std::string>>(
"@all_essources");
167 bool foundMatch =
true;
168 if (!iFindMatch.empty()) {
169 for (
auto const& stringToFind : iFindMatch) {
170 if (retValue.find(stringToFind) == std::string::npos) {
177 sourceStrings.push_back(
std::move(retValue));
181 std::vector<std::string>
modules = processConfig.getParameter<std::vector<std::string>>(
"@all_esmodules");
184 bool foundMatch =
true;
185 if (!iFindMatch.empty()) {
186 for (
auto const& stringToFind : iFindMatch) {
187 if (retValue.find(stringToFind) == std::string::npos) {
194 moduleStrings.push_back(
std::move(retValue));
198 std::sort(sourceStrings.begin(), sourceStrings.end());
199 std::sort(moduleStrings.begin(), moduleStrings.end());
201 std::copy(sourceStrings.begin(), sourceStrings.end(), std::ostream_iterator<std::string>(
std::cout,
"\n"));
202 std::copy(moduleStrings.begin(), moduleStrings.end(), std::ostream_iterator<std::string>(
std::cout,
"\n"));
204 itH.printEventSetupHistory(iPSM, iFindMatch, oErrorLog);
211 std::ostringstream
result;
215 result <<
"Module: " <<
label <<
" " << iProcessName <<
"\n" 221 void HistoryNode::printOtherModulesHistory(
ParameterSetMap const& iPSM,
223 std::vector<std::string>
const& iFindMatch,
224 std::ostream& oErrorLog)
const {
225 for (
auto const& itH : *
this) {
227 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
228 if (itFind == iPSM.end()) {
229 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
232 std::vector<std::string> moduleStrings;
234 std::vector<std::string>
modules = processConfig.getParameter<std::vector<std::string>>(
"@all_modules");
237 if (iModules.end() == iModules.find(std::make_pair(itH.processName(), itM))) {
239 bool foundMatch =
true;
240 if (!iFindMatch.empty()) {
241 for (
auto const& stringToFind : iFindMatch) {
242 if (retValue.find(stringToFind) == std::string::npos) {
249 moduleStrings.push_back(
std::move(retValue));
254 std::sort(moduleStrings.begin(), moduleStrings.end());
256 std::copy(moduleStrings.begin(), moduleStrings.end(), std::ostream_iterator<std::string>(
std::cout,
"\n"));
258 itH.printOtherModulesHistory(iPSM, iModules, iFindMatch, oErrorLog);
262 static void appendToSet(std::set<std::string>& iSet, std::vector<std::string>
const& iFrom) {
263 for (
auto const&
n : iFrom) {
271 std::ostringstream
result;
274 result <<
"PSet: " << iName <<
" " << iProcessName <<
"\n" 280 void HistoryNode::printTopLevelPSetsHistory(
ParameterSetMap const& iPSM,
281 std::vector<std::string>
const& iFindMatch,
282 std::ostream& oErrorLog)
const {
283 for (
auto const& itH : *
this) {
285 ParameterSetMap::const_iterator itFind = iPSM.find(itH.parameterSetID());
286 if (itFind == iPSM.end()) {
287 oErrorLog <<
"No ParameterSetID for " << itH.parameterSetID() << std::endl;
291 std::set<std::string> namesToExclude;
292 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_modules"));
293 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_sources"));
294 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_loopers"));
296 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_esmodules"));
297 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_essources"));
298 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_esprefers"));
299 if (processConfig.existsAs<std::vector<std::string>>(
"all_aliases")) {
300 appendToSet(namesToExclude, processConfig.getParameter<std::vector<std::string>>(
"@all_aliases"));
303 std::vector<std::string> allNames{};
304 processConfig.getParameterSetNames(allNames);
306 std::vector<std::string>
results;
307 for (
auto const&
name : allNames) {
308 if (
name.empty() ||
'@' ==
name[0] || namesToExclude.find(
name) != namesToExclude.end()) {
313 bool foundMatch =
true;
314 if (!iFindMatch.empty()) {
315 for (
auto const& stringToFind : iFindMatch) {
316 if (retValue.find(stringToFind) == std::string::npos) {
331 itH.printTopLevelPSetsHistory(iPSM, iFindMatch, oErrorLog);
345 <<
"File " <<
filename <<
" was not found or could not be opened.\n";
348 std::unique_ptr<TFile>
result(TFile::Open(
catalog.fileNames(0)[0].c_str()));
351 <<
"File " <<
fileNames[0] <<
" was not found or could not be opened.\n";
366 return makeTFileWithLookup(
filename);
376 char const* trackiness = (psetEntry.
isTracked() ?
"tracked" :
"untracked");
377 os <<
"PSet " << trackiness <<
" = (";
378 prettyPrint(os, psetEntry.
pset(), iIndent + iIndentDelta, iIndentDelta);
387 std::vector<edm::ParameterSet>
const& vps = vpsetEntry.
vpset();
388 os <<
"VPSet " << (vpsetEntry.
isTracked() ?
"tracked" :
"untracked") <<
" = ({" << std::endl;
392 for (
auto const&
item : vps) {
393 os <<
start << newIndent;
400 os << iIndent <<
"})";
410 oStream <<
"{" << std::endl;
411 for (
auto const&
item : iPSet.
tbl()) {
413 oStream << newIndent <<
item.first <<
": " <<
item.second << std::endl;
418 oStream << newIndent <<
item.first <<
": ";
420 oStream << std::endl;
425 oStream << newIndent <<
item.first <<
": ";
427 oStream << std::endl;
429 oStream << iIndent <<
"}";
439 bool showDependencies,
440 bool extendedAncestors,
441 bool extendedDescendants,
442 bool excludeESModules,
444 bool showTopLevelPSets,
445 std::vector<std::string>
const& findMatch,
446 bool dontPrintProducts,
460 std::set<edm::BranchID>& ancestorBranchIDs,
461 std::ostringstream& sout,
465 std::set<edm::BranchID>& descendantBranchIDs,
466 std::ostringstream& sout,
496 std::optional<std::tuple<edm::BranchIDListHelper, std::vector<edm::ProcessIndex>>>
makeBranchIDListHelper();
500 bool showDependencies,
501 bool extendedAncestors,
502 bool extendedDescendants,
503 bool excludeESModules,
504 bool showOtherModules,
505 bool showTopLevelPSets,
506 std::vector<std::string>
const& findMatch,
507 bool dontPrintProducts,
515 showDependencies_(showDependencies),
516 extendedAncestors_(extendedAncestors),
517 extendedDescendants_(extendedDescendants),
518 excludeESModules_(excludeESModules),
519 showOtherModules_(showOtherModules),
520 productRegistryPresent_(
true),
521 showTopLevelPSets_(showTopLevelPSets),
522 findMatch_(findMatch),
523 dontPrintProducts_(dontPrintProducts),
524 dumpPSetID_(dumpPSetID),
525 productIDEntry_(productIDEntry) {}
539 std::cout <<
"No event filtering information is available.\n";
540 std::cout <<
"------------------------------\n";
542 std::cout <<
"Event filtering information for " << num_ids <<
" processing steps is available.\n" 543 <<
"The ParameterSets will be printed out, " 544 <<
"with the oldest printed first.\n";
553 if (history !=
nullptr) {
558 if (history->GetEntry(0) <= 0) {
559 std::cout <<
"No event filtering information is available; the event history tree has no entries\n";
567 if (eventSelectionsBranch ==
nullptr)
571 eventSelectionsBranch->SetAddress(&pids);
572 if (eventSelectionsBranch->GetEntry(0) <= 0) {
573 std::cout <<
"No event filtering information is available; the event selections branch has no entries\n";
581 std::cout <<
"ParameterSetID: " <<
id <<
'\n';
583 ParameterSetMap::const_iterator
i =
psm_.find(
id);
584 if (
i ==
psm_.end()) {
585 std::cout <<
"We are unable to find the corresponding ParameterSet\n";
588 if (
id ==
empty.id()) {
589 std::cout <<
"But it would have been empty anyway\n";
599 std::cout <<
" -------------------------\n";
603 std::cout <<
"Processing History:" << std::endl;
604 std::map<edm::ProcessConfigurationID, unsigned int> simpleIDs;
605 for (
auto const&
ph :
phv_) {
608 for (
auto const& pc :
ph) {
609 if (
parent->size() == 0) {
610 unsigned int id = simpleIDs[pc.id()];
613 simpleIDs[pc.id()] =
id;
615 parent->addChild(HistoryNode(pc,
id));
619 bool isUnique =
true;
621 if (
child.configurationID() == pc.id()) {
628 simpleIDs[pc.id()] =
parent->size() + 1;
629 parent->addChild(HistoryNode(pc, simpleIDs[pc.id()]));
638 std::optional<std::tuple<edm::BranchIDListHelper, std::vector<edm::ProcessIndex>>>
646 if (
nullptr == metaTree) {
652 if (
nullptr == branchIDListsBranch) {
662 branchIDListsBranch->SetAddress(&branchIDListsPtr);
663 if (branchIDListsBranch->GetEntry(0) <= 0) {
674 if (
nullptr == branchListIndexesBranch) {
683 branchListIndexesBranch->SetAddress(&pbranchListIndexes);
684 if (branchListIndexesBranch->GetEntry(
productIDEntry_) <= 0
or branchListIndexes.empty()) {
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;
1077 std::set<edm::BranchID>& ancestorBranchIDs,
1078 std::ostringstream& sout,
1082 std::set<edm::ParentageID>
const& parentIDs = perProductParentage[branchID];
1083 for (
auto const& parentageID : parentIDs) {
1085 if (
nullptr != parentage) {
1087 if (ancestorBranchIDs.insert(
branch).second) {
1092 sout <<
" ERROR:parentage info not in registry ParentageID=" << parentageID << std::endl;
1098 std::set<edm::BranchID>& descendantBranchIDs,
1099 std::ostringstream& sout,
1101 for (
auto const& childBranchID : parentToChildren[branchID]) {
1102 if (descendantBranchIDs.insert(childBranchID).second) {
1103 addDescendants(childBranchID, descendantBranchIDs, sout, parentToChildren);
1134 using namespace boost::program_options;
1137 descString +=
" [options] <filename>";
1138 descString +=
"\nAllowed options";
1139 options_description
desc(descString);
1146 "print what data depends on the data each EDProducer produces including indirect dependences")(
1151 boost::program_options::value<std::vector<std::string>>(),
1152 "show only modules whose information contains the matching string (or all the matching strings, this option can " 1155 value<std::string>(),
1156 "print the parameter set associated with the parameter set ID string (and print nothing else)")(
1159 "show ProductID instead of BranchID using the specified entry in the Events tree");
1164 options_description hidden;
1165 hidden.add_options()(
kFileNameOpt, value<std::string>(),
"file name");
1168 options_description cmdline_options;
1169 cmdline_options.add(
desc).add(hidden);
1171 positional_options_description
p;
1178 }
catch (
error const& iException) {
1189 HistoryNode::sort_ =
true;
1192 bool showDependencies =
false;
1194 showDependencies =
true;
1197 bool extendedAncestors =
false;
1199 extendedAncestors =
true;
1202 bool extendedDescendants =
false;
1204 extendedDescendants =
true;
1207 bool excludeESModules =
false;
1209 excludeESModules =
true;
1212 bool showAllModules =
false;
1214 showAllModules =
true;
1217 bool showTopLevelPSets =
false;
1219 showTopLevelPSets =
true;
1226 }
catch (boost::bad_any_cast
const&
e) {
1231 std::cout <<
"Data file not specified." << std::endl;
1240 }
catch (boost::bad_any_cast
const&
e) {
1246 std::vector<std::string> findMatch;
1249 findMatch = vm[
kFindMatchOpt].as<std::vector<std::string>>();
1250 }
catch (boost::bad_any_cast
const&
e) {
1256 bool dontPrintProducts =
false;
1258 dontPrintProducts =
true;
1261 int productIDEntry = -1;
1265 }
catch (boost::bad_any_cast
const&
e) {
1277 extendedDescendants,
1298 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
std::vector< BranchIDList > BranchIDLists
bool getMapped(key_type const &k, value_type &result) const
static char const *const kFindMatchCommandOpt
table const & tbl() const
bool fixBranchListIndexes(BranchListIndexes &indexes, bool assertOnFailure=true) const
Called by sources to convert their read indexes into the indexes used by the job. ...
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)
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, int productIDEntry)
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
ProductID branchIDToProductID(BranchID const &bid, BranchIDListHelper const &branchIDListHelper, std::vector< ProcessIndex > const &branchListIndexToProcessIndex)
static char const *const kShowTopLevelPSetsOpt
std::string const & branchIDListBranchName()
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
std::vector< BranchListIndex > BranchListIndexes
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)
static char const *const kProductIDEntryOpt
Long64_t numEntries(TFile *hdl, std::string const &trname)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
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)
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::vector< ProcessIndex > makeBranchListIndexToProcessIndex(BranchListIndexes const &branchListIndexes)
std::string const & eventSelectionsBranchName()
int const productIDEntry_
edm::ProcessConfigurationVector phc_
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
static char const *const kShowAllModulesOpt
std::string const & parentageTreeName()
ProductList & productListUpdator()
bool updateFromInput(BranchIDLists const &bidlists)
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
std::string const & branchListIndexesBranchName()
std::optional< std::tuple< edm::BranchIDListHelper, std::vector< edm::ProcessIndex > > > makeBranchIDListHelper()
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