24 #include "Cintex/Cintex.h"
29 #include "boost/program_options.hpp"
39 typedef std::map<std::string, std::vector<edm::BranchDescription> >
IdToBranches;
42 static std::ostream&
prettyPrint(std::ostream& oStream,
edm::ParameterSet const& iPSet, std::string
const& iIndent, std::string
const& iIndentDelta);
45 typedef std::map<edm::ParameterSetID, edm::ParameterSetBlob>
ParameterSetMap;
56 simpleId_(iSimpleId) {
59 void addChild(HistoryNode
const&
child) {
60 children_.push_back(child);
64 parameterSetID()
const {
65 return config_.parameterSetID();
70 return config_.processName();
75 return children_.size();
80 return &children_.back();
83 typedef std::vector<HistoryNode>::const_iterator const_iterator;
84 typedef std::vector<HistoryNode>::iterator iterator;
86 iterator
begin() {
return children_.begin();}
87 iterator
end() {
return children_.end();}
89 const_iterator
begin()
const {
return children_.begin();}
90 const_iterator
end()
const {
return children_.end();}
92 void print(std::ostream& os)
const {
93 os << config_.processName()
94 <<
" '" << config_.passID() <<
"' '"
95 << config_.releaseVersion() <<
"' ["
97 << config_.parameterSetID() <<
")"
101 void printHistory(std::string
const& iIndent = std::string(
" "))
const;
102 void printEventSetupHistory(ParameterSetMap
const& iPSM,
103 std::string
const& iFindMatch,
104 std::ostream& oErrorLog)
const;
105 void printOtherModulesHistory(ParameterSetMap
const& iPSM,
107 std::string
const& iFindMatch,
108 std::ostream& oErrorLog)
const;
109 void printTopLevelPSetsHistory(ParameterSetMap
const& iPSM,
110 std::string
const& iFindMatch,
111 std::ostream& oErrorLog)
const;
114 configurationID()
const {
121 std::vector<HistoryNode> children_;
122 unsigned int simpleId_;
125 std::ostream&
operator<<(std::ostream& os, HistoryNode
const&
node) {
129 bool HistoryNode::sort_ =
false;
134 std::string
const indentDelta(
" ");
135 std::string
indent = indentDelta;
140 <<
i->processName() <<
" '"
141 <<
i->passID() <<
"' '"
142 <<
i->releaseVersion() <<
"' ("
143 <<
i->parameterSetID() <<
")"
145 indent += indentDelta;
150 void HistoryNode::printHistory(std::string
const& iIndent)
const {
151 std::string
const indentDelta(
" ");
152 std::string
indent = iIndent;
157 i->printHistory(indent+indentDelta);
162 std::string
const& iCompName,
164 std::string
const& iProcessName) {
165 std::ostringstream
result;
168 if(0 == name.size()) {
172 result << iType <<
": " << name <<
" " << iProcessName <<
"\n"
178 void HistoryNode::printEventSetupHistory(ParameterSetMap
const& iPSM,
179 std::string
const& iFindMatch,
180 std::ostream& oErrorLog)
const {
181 for(const_iterator itH =
begin(),
e =
end();
185 ParameterSetMap::const_iterator itFind = iPSM.find(itH->parameterSetID());
186 if(itFind == iPSM.end()){
187 oErrorLog <<
"No ParameterSetID for " << itH->parameterSetID() << std::endl;
190 std::vector<std::string> sourceStrings, moduleStrings;
192 std::vector<std::string> sources = processConfig.
getParameter<std::vector<std::string> >(
"@all_essources");
193 for(std::vector<std::string>::iterator itM = sources.begin(); itM != sources.end(); ++itM) {
198 if(iFindMatch.empty()
or retValue.find(iFindMatch) != std::string::npos) {
199 sourceStrings.push_back(std::move(retValue));
203 std::vector<std::string> modules = processConfig.getParameter<std::vector<std::string> >(
"@all_esmodules");
204 for(std::vector<std::string>::iterator itM = modules.begin(); itM != modules.end(); ++itM) {
209 if(iFindMatch.empty()
or retValue.find(iFindMatch) != std::string::npos) {
210 moduleStrings.push_back(std::move(retValue));
214 std::sort(sourceStrings.begin(), sourceStrings.end());
215 std::sort(moduleStrings.begin(), moduleStrings.end());
217 std::copy(sourceStrings.begin(), sourceStrings.end(),
218 std::ostream_iterator<std::string>(
std::cout,
"\n"));
219 std::copy(moduleStrings.begin(), moduleStrings.end(),
220 std::ostream_iterator<std::string>(
std::cout,
"\n"));
223 itH->printEventSetupHistory(iPSM, iFindMatch, oErrorLog);
229 std::string
const& iProcessName) {
230 std::ostringstream
result;
234 result <<
"Module: " << label <<
" " << iProcessName <<
"\n" <<
" parameters: ";
239 void HistoryNode::printOtherModulesHistory(ParameterSetMap
const& iPSM,
241 std::string
const& iFindMatch,
242 std::ostream& oErrorLog)
const {
243 for(const_iterator itH =
begin(),
e =
end();
247 ParameterSetMap::const_iterator itFind = iPSM.find(itH->parameterSetID());
248 if(itFind == iPSM.end()){
249 oErrorLog <<
"No ParameterSetID for " << itH->parameterSetID() << std::endl;
252 std::vector<std::string> moduleStrings;
254 std::vector<std::string> modules = processConfig.
getParameter<std::vector<std::string> >(
"@all_modules");
255 for(std::vector<std::string>::iterator itM = modules.begin(); itM != modules.end(); ++itM) {
257 if(iModules.end() == iModules.find(std::make_pair(itH->processName(), *itM))) {
261 itH->processName()));
262 if(iFindMatch.empty()
or retValue.find(iFindMatch) != std::string::npos) {
263 moduleStrings.push_back(std::move(retValue));
268 std::sort(moduleStrings.begin(), moduleStrings.end());
270 std::copy(moduleStrings.begin(), moduleStrings.end(),
271 std::ostream_iterator<std::string>(
std::cout,
"\n"));
273 itH->printOtherModulesHistory(iPSM, iModules, iFindMatch, oErrorLog);
277 static void appendToSet(std::set<std::string>&iSet, std::vector<std::string>
const& iFrom){
278 for(
auto const&
n: iFrom){
285 std::string
const& iProcessName) {
286 std::ostringstream
result;
289 result <<
"PSet: " << iName <<
" " << iProcessName <<
"\n" <<
" parameters: ";
295 void HistoryNode::printTopLevelPSetsHistory(ParameterSetMap
const& iPSM,
296 std::string
const& iFindMatch,
297 std::ostream& oErrorLog)
const {
298 for(const_iterator itH =
begin(),
e =
end();
302 ParameterSetMap::const_iterator itFind = iPSM.find(itH->parameterSetID());
303 if(itFind == iPSM.end()){
304 oErrorLog <<
"No ParameterSetID for " << itH->parameterSetID() << std::endl;
308 std::set<std::string> namesToExclude;
309 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_modules"));
310 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_sources"));
311 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_loopers"));
313 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_esmodules"));
314 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_essources"));
315 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_esprefers"));
316 if (processConfig.existsAs<std::vector<std::string>>(
"all_aliases")) {
317 appendToSet(namesToExclude,processConfig.getParameter<std::vector<std::string> >(
"@all_aliases"));
320 std::vector<std::string> allNames{};
321 processConfig.getParameterSetNames(allNames);
323 std::vector<std::string>
results;
324 for(
auto const&
name: allNames){
325 if (
name.size() == 0 ||
'@' ==
name[0] || namesToExclude.find(
name)!=namesToExclude.end()) {
329 if(iFindMatch.empty()
or retValue.find(iFindMatch) != std::string::npos) {
330 results.push_back(std::move(retValue));
334 std::sort(results.begin(), results.end());
336 std::copy(results.begin(), results.end(),
337 std::ostream_iterator<std::string>(
std::cout,
"\n"));
339 itH->printTopLevelPSetsHistory(iPSM, iFindMatch, oErrorLog);
345 std::unique_ptr<TFile>
346 makeTFileWithLookup(std::string
const&
filename) {
352 std::string
override;
354 fileNames.push_back(filename);
358 <<
"File " << filename <<
" was not found or could not be opened.\n";
361 std::unique_ptr<TFile>
result(TFile::Open(
catalog.fileNames()[0].c_str()));
364 <<
"File " << fileNames[0] <<
" was not found or could not be opened.\n";
373 std::unique_ptr<TFile>
374 makeTFile(std::string
const& filename) {
375 gErrorIgnoreLevel = kFatal;
376 std::unique_ptr<TFile>
result(TFile::Open(filename.c_str()));
377 gErrorIgnoreLevel =
kError;
380 return makeTFileWithLookup(filename);
388 char const* trackiness = (psetEntry.
isTracked()?
"tracked":
"untracked");
389 os <<
"PSet " << trackiness <<
" = (";
390 prettyPrint(os, psetEntry.
pset(), iIndent + iIndentDelta, iIndentDelta);
396 std::vector<edm::ParameterSet>
const& vps = vpsetEntry.
vpset();
397 os <<
"VPSet " << (vpsetEntry.
isTracked() ?
"tracked" :
"untracked") <<
" = ({" << std::endl;
398 std::string newIndent = iIndent+iIndentDelta;
400 std::string
const between(
",\n");
401 for(std::vector<edm::ParameterSet>::const_iterator
i = vps.begin(),
e = vps.end();
i !=
e; ++
i) {
402 os << start << newIndent;
409 os << iIndent<<
"})";
415 std::string newIndent = iIndent+iIndentDelta;
417 oStream <<
"{" << std::endl;
418 for(edm::ParameterSet::table::const_iterator
i = iPSet.
tbl().begin(),
e = iPSet.
tbl().end();
i !=
e; ++
i) {
420 oStream << newIndent<<
i->first <<
": " <<
i->second << std::endl;
422 for(edm::ParameterSet::psettable::const_iterator
i = iPSet.
psetTable().begin(),
e = iPSet.
psetTable().end();
i !=
e; ++
i) {
425 oStream << newIndent <<
i->first <<
": ";
429 for(edm::ParameterSet::vpsettable::const_iterator
i = iPSet.
vpsetTable().begin(),
e = iPSet.
vpsetTable().end();
i !=
e; ++
i) {
432 oStream << newIndent <<
i->first <<
": ";
436 oStream << iIndent<<
"}";
447 bool showDependencies,
448 bool excludeESModules,
450 bool showTopLevelPSets,
451 std::string
const& findMatch);
486 bool showDependencies,
487 bool excludeESModules,
488 bool showOtherModules,
489 bool showTopLevelPSets,
490 std::string
const& findMatch) :
492 inputFile_(makeTFile(filename)),
496 showDependencies_(showDependencies),
497 excludeESModules_(excludeESModules),
498 showOtherModules_(showOtherModules),
499 showTopLevelPSets_(showTopLevelPSets),
500 findMatch_(findMatch) {
522 std::cout <<
"No event filtering information is available.\n";
523 std::cout <<
"------------------------------\n";
525 std::cout <<
"Event filtering information for "
527 <<
" processing steps is available.\n"
528 <<
"The ParameterSets will be printed out, "
529 <<
"with the oldest printed first.\n";
545 if(history->GetEntry(0) <= 0) {
546 std::cout <<
"No event filtering information is available; the event history tree has no entries\n";
552 assert (events != 0);
554 assert (eventSelectionsBranch != 0);
557 eventSelectionsBranch->SetAddress(&pids);
558 if(eventSelectionsBranch->GetEntry(0) <= 0) {
559 std::cout <<
"No event filtering information is available; the event selections branch has no entries\n";
568 std::cout <<
"ParameterSetID: " <<
id <<
'\n';
570 ParameterSetMap::const_iterator
i =
psm_.find(
id);
571 if(i ==
psm_.end()) {
572 std::cout <<
"We are unable to find the corresponding ParameterSet\n";
574 if(
id == empty.
id()) {
575 std::cout <<
"But it would have been empty anyway\n";
585 std::cout <<
" -------------------------\n";
590 std::cout <<
"Processing History:" << std::endl;
591 if(1 ==
phv_.size()) {
595 std::map<edm::ProcessConfigurationID, unsigned int> simpleIDs;
596 for(edm::ProcessHistoryVector::const_iterator it =
phv_.begin(), itEnd =
phv_.end();
604 if(parent->size() == 0) {
605 unsigned int id = simpleIDs[itH->id()];
608 simpleIDs[itH->id()] =
id;
610 parent->addChild(HistoryNode(*itH,
id));
611 parent = parent->lastChildAddress();
614 bool isUnique =
true;
615 for(HistoryNode::iterator itChild = parent->begin(), itChildEnd = parent->end();
616 itChild != itChildEnd;
618 if(itChild->configurationID() == itH->id()) {
620 parent = &(*itChild);
625 simpleIDs[itH->id()] = parent->size() + 1;
626 parent->addChild(HistoryNode(*itH, simpleIDs[itH->id()]));
627 parent = parent->lastChildAddress();
645 ParameterSetMap* pPsm = &
psm_;
650 assert(0 != psetTree);
651 typedef std::pair<edm::ParameterSetID, edm::ParameterSetBlob> IdToBlobs;
653 IdToBlobs* pIdToBlob = &idToBlob;
655 for(
long long i = 0;
i != psetTree->GetEntries(); ++
i) {
656 psetTree->GetEntry(
i);
657 psm_.insert(idToBlob);
688 for(ParameterSetMap::const_iterator
i =
psm_.begin(), iEnd =
psm_.end();
i != iEnd; ++
i) {
697 for(edm::ProcessHistoryMap::const_iterator
i = phm.begin(),
e = phm.end();
i !=
e; ++
i) {
698 phv_.push_back(
i->second);
699 for(edm::ProcessConfigurationVector::const_iterator
j =
i->second.begin(),
f =
i->second.end();
j !=
f; ++
j) {
710 std::map<edm::BranchID, std::set<edm::ParentageID> > perProductParentage;
714 if(0 == parentageTree) {
715 std::cerr <<
"no Parentage tree available so can not show dependencies/n";
721 std::vector<edm::ParentageID> orderedParentageIDs;
722 orderedParentageIDs.reserve(parentageTree->GetEntries());
727 parentageTree->GetEntry(
i);
729 orderedParentageIDs.push_back(parentageBuffer.
id());
734 if(0 == eventMetaTree) {
737 if(0 == eventMetaTree) {
743 if(0!=storedProvBranch) {
744 std::vector<edm::StoredProductProvenance>
info;
745 std::vector<edm::StoredProductProvenance>* pInfo = &
info;
746 storedProvBranch->SetAddress(&pInfo);
747 for(Long64_t
i = 0, numEntries = eventMetaTree->GetEntries();
i <
numEntries; ++
i) {
748 storedProvBranch->GetEntry(
i);
749 for(std::vector<edm::StoredProductProvenance>::const_iterator it = info.begin(), itEnd = info.end();
752 perProductParentage[bid].insert(orderedParentageIDs[it->parentageIDIndex_]);
758 if (0 != productProvBranch) {
759 std::vector<edm::ProductProvenance>
info;
760 std::vector<edm::ProductProvenance>* pInfo = &
info;
761 productProvBranch->SetAddress(&pInfo);
762 for(Long64_t
i = 0, numEntries = eventMetaTree->GetEntries();
i <
numEntries; ++
i) {
763 productProvBranch->GetEntry(
i);
764 for(std::vector<edm::ProductProvenance>::const_iterator it = info.begin(), itEnd = info.end();
766 perProductParentage[it->branchID()].insert(it->parentageID());
770 std::cerr <<
" could not find provenance information so can not show dependencies\n";
783 std::cout <<
"---------Producers with data in file---------" << std::endl;
790 std::map<edm::BranchID, std::string> branchIDToBranchName;
792 for(edm::ProductRegistry::ProductList::const_iterator it =
800 branchIDToBranchName[it->second.branchID()] = it->second.branchName();
806 for(std::map<edm::ProcessConfigurationID, edm::ParameterSetID>::const_iterator
807 itId = it->second.parameterSetIDs().begin(),
808 itIdEnd = it->second.parameterSetIDs().end();
814 moduleToIdBranches[std::make_pair(it->second.processName(), it->second.moduleLabel())][s.str()].push_back(it->second);
818 for(ModuleToIdBranches::const_iterator it = moduleToIdBranches.begin(),
819 itEnd = moduleToIdBranches.end();
822 std::ostringstream sout;
823 sout <<
"Module: " << it->first.second <<
" " << it->first.first << std::endl;
825 for(IdToBranches::const_iterator itIdBranch = idToBranches.begin(),
826 itIdBranchEnd = idToBranches.end();
827 itIdBranch != itIdBranchEnd;
829 sout <<
" PSet id:" << itIdBranch->first << std::endl;
830 sout <<
" products: {" << std::endl;
831 std::set<edm::BranchID> branchIDs;
832 for(std::vector<edm::BranchDescription>::const_iterator itBranch = itIdBranch->second.begin(),
833 itBranchEnd = itIdBranch->second.end();
834 itBranch != itBranchEnd;
836 sout <<
" " << itBranch->branchName() << std::endl;
837 branchIDs.insert(itBranch->branchID());
839 sout <<
" }" << std::endl;
841 ParameterSetMap::const_iterator itpsm =
psm_.find(psid);
842 if(
psm_.end() == itpsm) {
844 errorLog_ <<
"No ParameterSetID for " << psid << std::endl;
847 sout <<
" parameters: ";
854 sout <<
" dependencies: {" << std::endl;
855 std::set<edm::ParentageID> parentageIDs;
856 for(std::set<edm::BranchID>::const_iterator itBranch = branchIDs.begin(), itBranchEnd = branchIDs.end();
857 itBranch != itBranchEnd;
859 std::set<edm::ParentageID>
const&
temp = perProductParentage[*itBranch];
860 parentageIDs.insert(temp.begin(), temp.end());
862 for(std::set<edm::ParentageID>::const_iterator itParentID = parentageIDs.begin(), itEndParentID = parentageIDs.end();
863 itParentID != itEndParentID;
867 for(std::vector<edm::BranchID>::const_iterator itBranch = parentage->
parents().begin(), itEndBranch = parentage->
parents().end();
868 itBranch != itEndBranch;
870 sout <<
" " << branchIDToBranchName[*itBranch] << std::endl;
873 sout <<
" ERROR:parentage info not in registry ParentageID=" << *itParentID << std::endl;
876 if(parentageIDs.empty()) {
877 sout <<
" no dependencies recorded (event may not contain data from this module)" << std::endl;
879 sout <<
" }" << std::endl;
887 std::cout <<
"---------Other Modules---------" << std::endl;
892 std::cout <<
"---------EventSetup---------" << std::endl;
897 std::cout <<
"---------Top Level PSets---------" << std::endl;
923 using namespace boost::program_options;
925 std::string descString(argv[0]);
926 descString +=
" [options] <filename>";
927 descString +=
"\nAllowed options";
928 options_description desc(descString);
932 ,
"alphabetially sort EventSetup components")
934 ,
"print what data each EDProducer is dependent upon")
935 (kExcludeESModulesCommandOpt
936 ,
"do not print ES module information")
938 ,
"show all modules (not just those that created data in the file)")
939 (kShowTopLevelPSetsCommandOpt,
"show all top level PSets")
941 "show only modules whose information contains the matching string")
945 options_description hidden;
946 hidden.add_options()(
kFileNameOpt, value<std::string>(),
"file name");
949 options_description cmdline_options;
950 cmdline_options.add(desc).add(hidden);
952 positional_options_description
p;
953 p.add(kFileNameOpt, -1);
957 store(command_line_parser(argc, argv).
options(cmdline_options).positional(
p).
run(), vm);
959 }
catch(
error const& iException) {
964 if(vm.count(kHelpOpt)) {
969 if(vm.count(kSortOpt)) {
970 HistoryNode::sort_ =
true;
973 bool showDependencies =
false;
974 if(vm.count(kDependenciesOpt)) {
975 showDependencies =
true;
978 bool excludeESModules =
false;
979 if(vm.count(kExcludeESModulesOpt)) {
980 excludeESModules =
true;
983 bool showAllModules =
false;
984 if(vm.count(kShowAllModulesOpt)) {
985 showAllModules =
true;
988 bool showTopLevelPSets =
false;
989 if(vm.count(kShowTopLevelPSetsOpt)) {
990 showTopLevelPSets=
true;
994 if(vm.count(kFileNameOpt)) {
997 }
catch(boost::bad_any_cast
const&
e) {
1002 std::cout <<
"Data file not specified." << std::endl;
1007 std::string findMatch;
1008 if(vm.count(kFindMatchOpt)) {
1011 }
catch(boost::bad_any_cast
const&
e) {
1018 gErrorIgnoreLevel =
kError;
1021 ROOT::Cintex::Cintex::Enable();
1023 ProvenanceDumper dumper(
fileName, showDependencies, excludeESModules, showAllModules, showTopLevelPSets, findMatch);
1040 std::cerr <<
"Unknown exception caught\n";
std::stringstream errorLog_
collection_type::const_iterator const_iterator
virtual char const * what() const
T getParameter(std::string const &) const
const_iterator begin() const
std::string const & idToParameterSetBlobsBranchName()
std::string const & BranchTypeToMetaDataTreeName(BranchType const &branchType)
static char const *const kDependenciesOpt
std::string const & parentageTreeName()
static char const *const kFindMatchCommandOpt
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
static char const *const kShowTopLevelPSetsCommandOpt
ParameterSetID id() const
static ThreadSafeRegistry * instance()
std::string print(const Track &, edm::Verbosity=edm::Concise)
Track print utility.
edm::ProductRegistry reg_
void dumpParameterSetForID_(edm::ParameterSetID const &id)
bool getMapped(key_type const &k, value_type &result) const
static char const *const kHelpOpt
HistoryNode historyGraph_
ProcessHistoryRegistry::collection_type ProcessHistoryMap
std::string const & eventSelectionsBranchName()
std::ostream & operator<<(std::ostream &out, const ALILine &li)
void dumpEventFilteringParameterSets_(TFile *file)
bool insertMapped(value_type const &v)
ProvenanceDumper(std::string const &filename, bool showDependencies, bool excludeESModules, bool showAllModules, bool showTopLevelPSets, std::string const &findMatch)
edm::ProcessHistoryVector phv_
void fillProductRegistryTransients(std::vector< ProcessConfiguration > const &pcVec, ProductRegistry const &preg, bool okToRegister=false)
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()
void setID(ParameterSetID const &id) const
static char const *const kShowTopLevelPSetsOpt
int main(int argc, char **argv)
ProcessConfigurationRegistry::vector_type ProcessConfigurationVector
std::vector< BranchID > const & parents() const
ProductList const & productList() const
static char const *const kShowAllModulesCommandOpt
ParameterSet const & pset() const
static char const *const kExcludeESModulesCommandOpt
std::string const & processHistoryMapBranchName()
static char const *const kSortOpt
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)
ProcessHistoryRegistry::vector_type ProcessHistoryVector
std::string const & BranchTypeToBranchEntryInfoBranchName(BranchType const &branchType)
std::vector< ParameterSet > const & vpset() const
ProvenanceDumper & operator=(ProvenanceDumper const &)=delete
std::string const & metaDataTreeName()
std::string const & BranchTypeToProductTreeName(BranchType const &branchType)
std::unique_ptr< TFile > inputFile_
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
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
ParameterSet const & getParameterSet(std::string const &) const
static char const *const kShowAllModulesOpt
std::string const & parentageBranchName()
std::map< ParameterSetID, ParameterSetBlob > ParameterSetMap
std::string const & productDescriptionBranchName()
std::string const & processConfigurationBranchName()
const_iterator end() const
author Stefano ARGIRO author Bill Tanenbaum
vpsettable const & vpsetTable() const
static char const *const kFileNameCommandOpt
static char const *const kFileNameOpt
std::string const & BranchTypeToProductProvenanceBranchName(BranchType const &BranchType)
std::string const & eventTreeName()
std::string const & eventHistoryTreeName()
table const & tbl() const
tuple size
Write out results.
std::string const & moduleDescriptionMapBranchName()
static std::string topLevelPSet(std::string const &iName, edm::ParameterSet const &iProcessConfig, std::string const &iProcessName)
void printErrors(std::ostream &os)
static char const *const kFindMatchOpt