59 using std::placeholders::_1;
61 bool binary_search_string(std::vector<std::string>
const&
v,
std::string const&
s) {
62 return std::binary_search(
v.begin(),
v.end(),
s);
68 std::shared_ptr<TriggerResultInserter> makeInserter(
70 PreallocationConfiguration
const& iPrealloc,
71 ProductRegistry& preg,
72 ExceptionToActionTable
const&
actions,
73 std::shared_ptr<ActivityRegistry> areg,
74 std::shared_ptr<ProcessConfiguration const> processConfiguration) {
75 ParameterSet* trig_pset = proc_pset.getPSetForUpdate(
"@trigger_paths");
76 trig_pset->registerIt();
78 WorkerParams work_args(trig_pset, preg, &iPrealloc, processConfiguration,
actions);
79 ModuleDescription md(trig_pset->id(),
80 "TriggerResultInserter",
82 processConfiguration.get(),
85 areg->preModuleConstructionSignal_(md);
86 bool postCalled =
false;
87 std::shared_ptr<TriggerResultInserter> returnValue;
90 maker::ModuleHolderT<TriggerResultInserter> holder(
91 make_shared_noexcept_false<TriggerResultInserter>(*trig_pset, iPrealloc.numberOfStreams()),
92 static_cast<Maker const*>(
nullptr));
93 holder.setModuleDescription(md);
94 holder.registerProductsAndCallbacks(&preg);
95 returnValue = holder.module();
98 areg->postModuleConstructionSignal_(md);
101 CMS_SA_ALLOW try { areg->postModuleConstructionSignal_(md); }
catch (...) {
110 template <
typename T>
112 std::vector<std::string>
const& pathNames,
113 PreallocationConfiguration
const& iPrealloc,
114 ProductRegistry& preg,
115 std::shared_ptr<ActivityRegistry> areg,
116 std::shared_ptr<ProcessConfiguration const> processConfiguration,
123 pathStatusInserters.reserve(pathNames.size());
125 for (
auto const&
pathName : pathNames) {
126 ModuleDescription md(
129 areg->preModuleConstructionSignal_(md);
130 bool postCalled =
false;
133 maker::ModuleHolderT<T> holder(make_shared_noexcept_false<T>(iPrealloc.numberOfStreams()),
134 static_cast<Maker const*>(
nullptr));
135 holder.setModuleDescription(md);
136 holder.registerProductsAndCallbacks(&preg);
137 pathStatusInserters.emplace_back(holder.module());
140 areg->postModuleConstructionSignal_(md);
143 CMS_SA_ALLOW try { areg->postModuleConstructionSignal_(md); }
catch (...) {
152 typedef std::vector<std::string>
vstring;
156 struct BranchesCases {
157 BranchesCases(std::vector<std::string> cases) : caseLabels{
std::move(cases)} {}
158 std::vector<BranchKey> chosenBranches;
159 std::vector<std::string> caseLabels;
161 std::map<std::string, BranchesCases> switchMap;
162 for (
auto&
prod : preg.productListUpdator()) {
163 if (
prod.second.isSwitchAlias()) {
164 auto it = switchMap.find(
prod.second.moduleLabel());
165 if (it == switchMap.end()) {
167 auto inserted = switchMap.emplace(
prod.second.moduleLabel(),
168 switchPSet.getParameter<std::vector<std::string>>(
"@all_cases"));
174 for (
auto const& productIter : preg.productList()) {
175 BranchKey
const& branchKey = productIter.first;
184 BranchDescription
const&
desc = productIter.second;
185 if (
desc.branchType() ==
prod.second.branchType() and
186 desc.unwrappedTypeID().typeInfo() ==
prod.second.unwrappedTypeID().typeInfo() and
187 branchKey.moduleLabel() ==
prod.second.switchAliasModuleLabel() and
188 branchKey.productInstanceName() ==
prod.second.productInstanceName()) {
189 prod.second.setSwitchAliasForBranch(
desc);
190 if (!
prod.second.transient()) {
191 it->second.chosenBranches.push_back(
prod.first);
198 ex <<
"Trying to find a BranchDescription to be aliased-for by SwitchProducer with\n" 199 <<
" friendly class name = " <<
prod.second.friendlyClassName() <<
"\n" 200 <<
" module label = " <<
prod.second.moduleLabel() <<
"\n" 201 <<
" product instance name = " <<
prod.second.productInstanceName() <<
"\n" 203 <<
"\n\nbut did not find any. Please contact a framework developer.";
204 ex.addContext(
"Calling Schedule.cc:processSwitchProducers()");
209 if (switchMap.empty())
212 for (
auto& elem : switchMap) {
213 std::sort(elem.second.chosenBranches.begin(), elem.second.chosenBranches.end());
217 std::map<std::string, std::vector<BranchKey>> caseBranches;
218 for (
auto const&
item : preg.productList()) {
222 if (
auto found =
std::find(caseLabels.begin(), caseLabels.end(),
item.first.moduleLabel());
223 found != caseLabels.end()) {
224 caseBranches[*
found].push_back(
item.first);
228 for (
auto const& caseLabel : caseLabels) {
229 ex <<
"Products for case " << caseLabel <<
" (friendly class name, product instance name):\n";
230 auto& branches = caseBranches[caseLabel];
231 std::sort(branches.begin(), branches.end());
232 for (
auto const&
branch : branches) {
233 ex <<
" " <<
branch.friendlyClassName() <<
" " <<
branch.productInstanceName() <<
"\n";
240 std::vector<bool> foundBranches;
241 for (
auto const& switchItem : switchMap) {
242 auto const& switchLabel = switchItem.first;
243 auto const& chosenBranches = switchItem.second.chosenBranches;
244 auto const& caseLabels = switchItem.second.caseLabels;
245 foundBranches.resize(chosenBranches.size());
246 for (
auto const& caseLabel : caseLabels) {
247 std::fill(foundBranches.begin(), foundBranches.end(),
false);
248 for (
auto& nonConstItem : preg.productListUpdator()) {
249 auto const&
item = nonConstItem;
253 if (!
item.second.transient()) {
254 auto range = std::equal_range(chosenBranches.begin(),
255 chosenBranches.end(),
256 BranchKey(
item.first.friendlyClassName(),
258 item.first.productInstanceName(),
259 item.first.processName()));
262 ex <<
"SwitchProducer " << switchLabel <<
" has a case " << caseLabel <<
" with a product " 263 <<
item.first <<
" that is not produced by the chosen case " 265 .getUntrackedParameter<std::string>(
"@chosen_case")
266 <<
" and that product is not transient. " 267 <<
"If the intention is to produce only a subset of the non-transient products listed below, each " 268 "case with more non-transient products needs to be replaced with an EDAlias to only the " 269 "necessary products, and the EDProducer itself needs to be moved to a Task.\n\n";
270 addProductsToException(caseLabels, ex);
285 nonConstItem.second.setTransient(
true);
288 auto const& bd =
item.second;
289 if (not bd.branchAliases().empty()) {
291 <<
"SwitchProducer does not support ROOT branch aliases. Got the following ROOT branch " 292 "aliases for SwitchProducer with label " 293 << switchLabel <<
" for case " << caseLabel <<
":";
294 for (
auto const& branchAlias : bd.branchAliases()) {
295 ex <<
" " << branchAlias;
302 for (
size_t i = 0;
i < chosenBranches.size();
i++) {
303 if (not foundBranches[
i]) {
305 .getUntrackedParameter<std::string>(
"@chosen_case");
307 ex <<
"SwitchProducer " << switchLabel <<
" has a case " << caseLabel
308 <<
" that does not produce a product " << chosenBranches[
i] <<
" that is produced by the chosen case " 309 << chosenLabel <<
" and that product is not transient. " 310 <<
"If the intention is to produce only a subset of the non-transient products listed below, each " 311 "case with more non-transient products needs to be replaced with an EDAlias to only the " 312 "necessary products, and the EDProducer itself needs to be moved to a Task.\n\n";
313 addProductsToException(caseLabels, ex);
322 vstring const& end_path_name_list,
324 std::set<std::string>
const& usedModuleLabels,
339 std::string const moduleEdmType(
"@module_edm_type");
345 std::set<std::string> modulesInConfigSet(modulesInConfig.begin(), modulesInConfig.end());
349 vstring scheduledPaths = proc_pset.getParameter<
vstring>(
"@paths");
350 std::set<std::string> modulesOnPaths;
352 std::set<std::string> noEndPaths(scheduledPaths.begin(), scheduledPaths.end());
353 for (
auto const& endPath : end_path_name_list) {
354 noEndPaths.erase(endPath);
358 for (
auto const&
path : noEndPaths) {
366 std::vector<std::string> labelsToBeDropped;
367 labelsToBeDropped.reserve(modulesInConfigSet.size());
369 modulesInConfigSet.end(),
370 usedModuleLabels.begin(),
371 usedModuleLabels.end(),
372 std::back_inserter(labelsToBeDropped));
374 const unsigned int sizeBeforeOutputModules = labelsToBeDropped.size();
375 for (
auto const& modLabel : usedModuleLabels) {
379 edmType = proc_pset.getParameterSet(modLabel).getParameter<
std::string>(moduleEdmType);
380 if (edmType == outputModule) {
381 outputModuleLabels.push_back(modLabel);
382 labelsToBeDropped.push_back(modLabel);
384 if (edmType == edAnalyzer) {
385 if (modulesOnPaths.end() == modulesOnPaths.find(modLabel)) {
386 labelsToBeDropped.push_back(modLabel);
393 labelsToBeDropped.begin(), labelsToBeDropped.begin() + sizeBeforeOutputModules, labelsToBeDropped.end());
399 vstring::iterator endAfterRemove =
400 std::remove_if(modulesInConfig.begin(),
401 modulesInConfig.end(),
402 std::bind(binary_search_string, std::ref(labelsToBeDropped), _1));
403 modulesInConfig.erase(endAfterRemove, modulesInConfig.end());
409 for (vstring::const_iterator iEndPath = end_path_name_list.begin(), endEndPath = end_path_name_list.end();
410 iEndPath != endEndPath;
413 vstring::iterator iSave =
labels.begin();
414 vstring::iterator iBegin =
labels.begin();
416 for (vstring::iterator iLabel =
labels.begin(), iEnd =
labels.end(); iLabel != iEnd; ++iLabel) {
417 if (binary_search_string(labelsToBeDropped, *iLabel)) {
418 if (binary_search_string(outputModuleLabels, *iLabel)) {
419 outputModulePathPositions[*iLabel].emplace_back(*iEndPath, iSave - iBegin);
422 if (iSave != iLabel) {
423 iSave->swap(*iLabel);
431 proc_pset.eraseSimpleParameter(*iEndPath);
432 endPathsToBeDropped.push_back(*iEndPath);
440 endAfterRemove = std::remove_if(scheduledPaths.begin(),
441 scheduledPaths.end(),
442 std::bind(binary_search_string, std::ref(endPathsToBeDropped), _1));
443 scheduledPaths.erase(endAfterRemove, scheduledPaths.end());
447 vstring scheduledEndPaths = proc_pset.getParameter<
vstring>(
"@end_paths");
448 endAfterRemove = std::remove_if(scheduledEndPaths.begin(),
449 scheduledEndPaths.end(),
450 std::bind(binary_search_string, std::ref(endPathsToBeDropped), _1));
451 scheduledEndPaths.erase(endAfterRemove, scheduledEndPaths.end());
455 class RngEDConsumer :
public EDConsumerBase {
457 explicit RngEDConsumer(std::set<TypeID>& typesConsumed) {
459 if (rng.isAvailable()) {
460 rng->consumes(consumesCollector());
461 for (
auto const& consumesInfo : this->consumesInfo()) {
462 typesConsumed.emplace(consumesInfo.type());
468 template <
typename F>
469 auto doCleanup(
F&& iF) {
474 iTask.doneWaiting(*iPtr);
490 std::shared_ptr<ActivityRegistry> areg,
491 std::shared_ptr<ProcessConfiguration const> processConfiguration,
497 ? std::shared_ptr<TriggerResultInserter>{}
498 : makeInserter(proc_pset, prealloc, preg,
actions, areg, processConfiguration)},
499 moduleRegistry_(std::make_shared<ModuleRegistry>(resolverMaker)),
500 all_output_communicators_(),
501 preallocConfig_(prealloc),
502 pathNames_(&tns.getTrigPaths()),
503 endPathNames_(&tns.getEndPaths()),
504 wantSummary_(tns.wantSummary()) {
505 makePathStatusInserters(pathStatusInserters_,
510 processConfiguration,
513 makePathStatusInserters(endPathStatusInserters_,
518 processConfiguration,
521 assert(0 < prealloc.numberOfStreams());
522 streamSchedules_.reserve(prealloc.numberOfStreams());
523 for (
unsigned int i = 0;
i < prealloc.numberOfStreams(); ++
i) {
524 streamSchedules_.emplace_back(make_shared_noexcept_false<StreamSchedule>(resultsInserter(),
525 pathStatusInserters_,
526 endPathStatusInserters_,
534 processConfiguration,
541 const std::string kTriggerResults(
"TriggerResults");
542 std::vector<std::string> modulesToUse;
543 modulesToUse.reserve(streamSchedules_[0]->allWorkers().
size());
544 for (
auto const& worker : streamSchedules_[0]->allWorkers()) {
545 if (worker->description()->moduleLabel() != kTriggerResults) {
546 modulesToUse.push_back(worker->description()->moduleLabel());
550 unsigned int const nUnscheduledModules = streamSchedules_[0]->numberOfUnscheduledModules();
551 if (nUnscheduledModules > 0) {
552 std::vector<std::string>
temp;
553 temp.reserve(modulesToUse.size());
554 auto itBeginUnscheduled = modulesToUse.begin() + modulesToUse.size() - nUnscheduledModules;
555 std::copy(itBeginUnscheduled, modulesToUse.end(), std::back_inserter(
temp));
556 std::copy(modulesToUse.begin(), itBeginUnscheduled, std::back_inserter(
temp));
557 temp.swap(modulesToUse);
561 globalSchedule_ = std::make_unique<GlobalSchedule>(resultsInserter(),
562 pathStatusInserters_,
563 endPathStatusInserters_,
571 processConfiguration,
582 std::shared_ptr<ActivityRegistry> areg,
583 std::shared_ptr<ProcessConfiguration> processConfiguration,
584 bool hasSubprocesses,
589 const std::string kTriggerResults(
"TriggerResults");
591 std::set<std::string> usedModuleLabels;
593 if (worker->description()->moduleLabel() != kTriggerResults) {
594 usedModuleLabels.insert(worker->description()->moduleLabel());
597 std::vector<std::string> modulesInConfig(proc_pset.
getParameter<std::vector<std::string>>(
"@all_modules"));
598 std::map<std::string, std::vector<std::pair<std::string, int>>> outputModulePathPositions;
599 reduceParameterSet(proc_pset, tns.
getEndPaths(), modulesInConfig, usedModuleLabels, outputModulePathPositions);
601 std::vector<std::string> aliases = proc_pset.
getParameter<std::vector<std::string>>(
"@all_aliases");
609 if (not unsched.empty()) {
610 std::set<std::string> unscheduledModules;
613 std::insert_iterator<std::set<std::string>>(unscheduledModules, unscheduledModules.begin()),
614 [](
auto worker) {
return worker->description()->moduleLabel(); });
619 processSwitchProducers(proc_pset, processConfiguration->processName(), preg);
621 processConfiguration->setParameterSetID(proc_pset.
id());
622 processConfiguration->setProcessConfigurationID();
626 size_t all_workers_count =
allWorkers().size();
644 worker->registerThinnedAssociations(preg, thinnedAssociationsHelper);
652 c->selectProducts(preg, thinnedAssociationsHelper, processBlockHelper);
661 std::set<TypeID> productTypesConsumed;
662 std::set<TypeID> elementTypesConsumed;
665 for (
auto const& consumesInfo : worker->consumesInfo()) {
667 productTypesConsumed.emplace(consumesInfo.type());
669 elementTypesConsumed.emplace(consumesInfo.type());
674 if (hasSubprocesses) {
678 { RngEDConsumer rngConsumer = RngEDConsumer(productTypesConsumed); }
679 preg.
setFrozen(productTypesConsumed, elementTypesConsumed, processConfiguration->processName());
687 std::vector<const ModuleDescription*> modDesc;
689 modDesc.reserve(
workers.size());
693 std::back_inserter(modDesc),
730 int maxEventSpecs = 0;
731 int maxEventsOut = -1;
738 std::vector<std::string> psetNamesE;
745 if (maxEventSpecs > 1) {
747 <<
"\nAt most, one form of 'output' may appear in the 'maxEvents' parameter set";
752 if (vMaxEventsOut !=
nullptr && !vMaxEventsOut->
empty()) {
758 <<
"\nNo entry in 'maxEvents' for output module label '" <<
moduleLabel <<
"'.\n";
770 if (!
c->limitReached()) {
775 LogInfo(
"SuccessfulTermination") <<
"The job is terminating successfully because each output module\n" 776 <<
"has reached its configured limit.\n";
800 <<
"---------- Event Summary ------------";
814 <<
"---------- Path Summary ------------";
815 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(10) <<
"Trig Bit#" 816 <<
" " << std::right << std::setw(10) <<
"Executed" 817 <<
" " << std::right << std::setw(10) <<
"Passed" 818 <<
" " << std::right << std::setw(10) <<
"Failed" 819 <<
" " << std::right << std::setw(10) <<
"Error" 824 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(5) << 1 << std::right << std::setw(5)
825 <<
p.bitPosition <<
" " << std::right << std::setw(10) <<
p.timesRun <<
" " 826 << std::right << std::setw(10) <<
p.timesPassed <<
" " << std::right
827 << std::setw(10) <<
p.timesFailed <<
" " << std::right << std::setw(10)
828 <<
p.timesExcept <<
" " <<
p.name <<
"";
850 <<
"-------End-Path Summary ------------";
851 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(10) <<
"Trig Bit#" 852 <<
" " << std::right << std::setw(10) <<
"Executed" 853 <<
" " << std::right << std::setw(10) <<
"Passed" 854 <<
" " << std::right << std::setw(10) <<
"Failed" 855 <<
" " << std::right << std::setw(10) <<
"Error" 860 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(5) << 0 << std::right << std::setw(5)
861 <<
p.bitPosition <<
" " << std::right << std::setw(10) <<
p.timesRun <<
" " 862 << std::right << std::setw(10) <<
p.timesPassed <<
" " << std::right
863 << std::setw(10) <<
p.timesFailed <<
" " << std::right << std::setw(10)
864 <<
p.timesExcept <<
" " <<
p.name <<
"";
870 <<
"---------- Modules in Path: " <<
p.name <<
" ------------";
871 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(10) <<
"Trig Bit#" 872 <<
" " << std::right << std::setw(10) <<
"Visited" 873 <<
" " << std::right << std::setw(10) <<
"Passed" 874 <<
" " << std::right << std::setw(10) <<
"Failed" 875 <<
" " << std::right << std::setw(10) <<
"Error" 880 for (
auto const&
mod :
p.moduleInPathSummaries) {
881 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(5) << 1 << std::right << std::setw(5)
882 <<
mod.bitPosition <<
" " << std::right << std::setw(10) <<
mod.timesVisited
883 <<
" " << std::right << std::setw(10) <<
mod.timesPassed <<
" " << std::right
884 << std::setw(10) <<
mod.timesFailed <<
" " << std::right << std::setw(10)
885 <<
mod.timesExcept <<
" " <<
mod.moduleLabel <<
"";
892 <<
"------ Modules in End-Path: " <<
p.name <<
" ------------";
893 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(10) <<
"Trig Bit#" 894 <<
" " << std::right << std::setw(10) <<
"Visited" 895 <<
" " << std::right << std::setw(10) <<
"Passed" 896 <<
" " << std::right << std::setw(10) <<
"Failed" 897 <<
" " << std::right << std::setw(10) <<
"Error" 902 unsigned int bitpos = 0;
903 for (
auto const&
mod :
p.moduleInPathSummaries) {
904 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(5) << 0 << std::right << std::setw(5)
905 << bitpos <<
" " << std::right << std::setw(10) <<
mod.timesVisited <<
" " 906 << std::right << std::setw(10) <<
mod.timesPassed <<
" " << std::right
907 << std::setw(10) <<
mod.timesFailed <<
" " << std::right << std::setw(10)
908 <<
mod.timesExcept <<
" " <<
mod.moduleLabel <<
"";
915 <<
"---------- Module Summary ------------";
916 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(10) <<
"Visited" 917 <<
" " << std::right << std::setw(10) <<
"Executed" 918 <<
" " << std::right << std::setw(10) <<
"Passed" 919 <<
" " << std::right << std::setw(10) <<
"Failed" 920 <<
" " << std::right << std::setw(10) <<
"Error" 925 LogFwkVerbatim(
"FwkSummary") <<
"TrigReport " << std::right << std::setw(10) << worker.timesVisited <<
" " 926 << std::right << std::setw(10) << worker.timesRun <<
" " << std::right
927 << std::setw(10) << worker.timesPassed <<
" " << std::right << std::setw(10)
928 << worker.timesFailed <<
" " << std::right << std::setw(10) << worker.timesExcept
929 <<
" " << worker.moduleLabel <<
"";
940 <<
"---------- Event Summary ---[sec]----";
948 <<
" efficiency CPU/Real/thread = " 952 constexpr
int kColumn1Size = 10;
953 constexpr
int kColumn2Size = 12;
954 constexpr
int kColumn3Size = 12;
957 <<
"---------- Path Summary ---[Real sec]----";
958 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 959 <<
" " << std::right << std::setw(kColumn2Size) <<
"per exec" 962 const int timesRun =
std::max(1,
p.timesRun);
964 << std::setw(kColumn1Size) <<
p.realTime /
totalEvents <<
" " << std::right
965 << std::setw(kColumn2Size) <<
p.realTime / timesRun <<
" " <<
p.name <<
"";
967 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 968 <<
" " << std::right << std::setw(kColumn2Size) <<
"per exec" 974 <<
"-------End-Path Summary ---[Real sec]----";
975 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 976 <<
" " << std::right << std::setw(kColumn2Size) <<
"per exec" 980 const int timesRun =
std::max(1,
p.timesRun);
983 << std::setw(kColumn1Size) <<
p.realTime /
totalEvents <<
" " << std::right
984 << std::setw(kColumn2Size) <<
p.realTime / timesRun <<
" " <<
p.name <<
"";
986 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 987 <<
" " << std::right << std::setw(kColumn2Size) <<
"per exec" 994 <<
"---------- Modules in Path: " <<
p.name <<
" ---[Real sec]----";
995 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 996 <<
" " << std::right << std::setw(kColumn2Size) <<
"per visit" 999 for (
auto const&
mod :
p.moduleInPathSummaries) {
1001 << std::setw(kColumn1Size) <<
mod.realTime /
totalEvents <<
" " << std::right
1002 << std::setw(kColumn2Size) <<
mod.realTime /
std::max(1,
mod.timesVisited) <<
" " 1003 <<
mod.moduleLabel <<
"";
1007 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 1008 <<
" " << std::right << std::setw(kColumn2Size) <<
"per visit" 1015 <<
"------ Modules in End-Path: " <<
p.name <<
" ---[Real sec]----";
1016 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 1017 <<
" " << std::right << std::setw(kColumn2Size) <<
"per visit" 1020 for (
auto const&
mod :
p.moduleInPathSummaries) {
1022 << std::setw(kColumn1Size) <<
mod.realTime /
totalEvents <<
" " << std::right
1023 << std::setw(kColumn2Size) <<
mod.realTime /
std::max(1,
mod.timesVisited) <<
" " 1024 <<
mod.moduleLabel <<
"";
1028 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 1029 <<
" " << std::right << std::setw(kColumn2Size) <<
"per visit" 1035 <<
"---------- Module Summary ---[Real sec]----";
1036 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 1037 <<
" " << std::right << std::setw(kColumn2Size) <<
"per exec" 1038 <<
" " << std::right << std::setw(kColumn3Size) <<
"per visit" 1043 << std::setw(kColumn1Size) << worker.realTime /
totalEvents <<
" " << std::right
1044 << std::setw(kColumn2Size) << worker.realTime /
std::max(1, worker.timesRun) <<
" " 1045 << std::right << std::setw(kColumn3Size)
1046 << worker.realTime /
std::max(1, worker.timesVisited) <<
" " << worker.moduleLabel
1049 LogFwkVerbatim(
"FwkSummary") <<
"TimeReport " << std::right << std::setw(kColumn1Size) <<
"per event" 1050 <<
" " << std::right << std::setw(kColumn2Size) <<
"per exec" 1051 <<
" " << std::right << std::setw(kColumn3Size) <<
"per visit" 1062 using std::placeholders::_1;
1065 worker->respondToCloseOutputFile();
1070 using std::placeholders::_1;
1096 c->writeRunAsync(nextTask, rp, processContext, activityRegistry, mergeableRunProductMetadata);
1126 c->writeProcessBlockAsync(nextTask, pbp, processContext, activityRegistry);
1155 c->writeLumiAsync(nextTask, lbp, processContext, activityRegistry);
1167 using std::placeholders::_1;
1176 using std::placeholders::_1;
1181 using std::placeholders::_1;
1188 globalSchedule_->beginJob(iRegistry, iESIndices, processBlockHelperBase);
1202 unsigned int iStreamID,
1215 if (worker->description()->moduleLabel() == iLabel) {
1220 if (
nullptr ==
found) {
1229 s->replaceModule(newMod, iLabel);
1242 found->updateLookup(iIndices);
1244 auto const&
processName = newMod->moduleDescription().processName();
1245 auto const& processBlockModuleToIndicies = processBlockLookup->indiciesForModulesInProcess(
processName);
1246 auto const& runModuleToIndicies = runLookup->indiciesForModulesInProcess(
processName);
1247 auto const& lumiModuleToIndicies = lumiLookup->indiciesForModulesInProcess(
processName);
1248 auto const& eventModuleToIndicies = eventLookup->indiciesForModulesInProcess(
processName);
1249 found->resolvePutIndicies(
InProcess, processBlockModuleToIndicies);
1250 found->resolvePutIndicies(
InRun, runModuleToIndicies);
1251 found->resolvePutIndicies(
InLumi, lumiModuleToIndicies);
1252 found->resolvePutIndicies(
InEvent, eventModuleToIndicies);
1261 stream->deleteModule(iLabel);
1267 std::multimap<std::string, std::string>
const& referencesToBranches,
1268 std::vector<std::string>
const& modulesToSkip,
1271 stream->initializeEarlyDelete(
1272 *
moduleRegistry(), branchesToDeleteEarly, referencesToBranches, modulesToSkip, preg);
1277 std::vector<ModuleDescription const*>
result;
1308 std::vector<ModuleDescription const*>& descriptions,
1309 unsigned int hint)
const {
1310 streamSchedules_[0]->moduleDescriptionsInPath(iPathLabel, descriptions, hint);
1314 std::vector<ModuleDescription const*>& descriptions,
1315 unsigned int hint)
const {
1316 streamSchedules_[0]->moduleDescriptionsInEndPath(iEndPathLabel, descriptions, hint);
1320 std::vector<ModuleDescription const*>& allModuleDescriptions,
1321 std::vector<std::pair<unsigned int, unsigned int>>& moduleIDToIndex,
1323 std::vector<std::vector<ModuleProcessName>>& modulesInPreviousProcessesWhoseProductsAreConsumedBy,
1325 allModuleDescriptions.clear();
1326 moduleIDToIndex.clear();
1327 for (
auto iBranchType = 0
U; iBranchType <
NumBranchTypes; ++iBranchType) {
1328 modulesWhoseProductsAreConsumedBy[iBranchType].clear();
1330 modulesInPreviousProcessesWhoseProductsAreConsumedBy.clear();
1334 for (
auto iBranchType = 0
U; iBranchType <
NumBranchTypes; ++iBranchType) {
1335 modulesWhoseProductsAreConsumedBy[iBranchType].resize(
allWorkers().
size());
1337 modulesInPreviousProcessesWhoseProductsAreConsumedBy.resize(
allWorkers().
size());
1339 std::map<std::string, ModuleDescription const*> labelToDesc;
1343 allModuleDescriptions.push_back(
p);
1344 moduleIDToIndex.push_back(std::pair<unsigned int, unsigned int>(
p->id(),
i));
1345 labelToDesc[
p->moduleLabel()] =
p;
1353 for (
auto iBranchType = 0
U; iBranchType <
NumBranchTypes; ++iBranchType) {
1354 modules[iBranchType] = &modulesWhoseProductsAreConsumedBy[iBranchType].at(
i);
1357 std::vector<ModuleProcessName>& modulesInPreviousProcesses =
1358 modulesInPreviousProcessesWhoseProductsAreConsumedBy.at(
i);
1360 worker->modulesWhoseProductsAreConsumed(
modules, modulesInPreviousProcesses, preg, labelToDesc);
1362 ex.
addContext(
"Calling Worker::modulesWhoseProductsAreConsumed() for module " +
1363 worker->description()->moduleLabel());
1371 rep.eventSummary.totalEvents = 0;
1372 rep.eventSummary.totalEventsPassed = 0;
1373 rep.eventSummary.totalEventsFailed = 0;
1375 s->getTriggerReport(
rep);
1381 rep.eventSummary.totalEvents = 0;
1382 rep.eventSummary.cpuTime = 0.;
1383 rep.eventSummary.realTime = 0.;
1388 int returnValue = 0;
1390 returnValue +=
s->totalEvents();
1396 int returnValue = 0;
1398 returnValue +=
s->totalEventsPassed();
1404 int returnValue = 0;
1406 returnValue +=
s->totalEventsFailed();
void endPaths(std::vector< std::string > &oLabelsToFill) const
adds to oLabelsToFill the labels for all end paths in the process
LuminosityBlockID id() const
std::vector< PathSummary > endPathSummaries
std::vector< PathTimingSummary > endPathSummaries
PostModuleDestruction postModuleDestructionSignal_
T getParameter(std::string const &) const
bool terminate() const
Return whether each output module has reached its maximum count.
Timestamp const & endTime() const
void stopEvent(StreamContext const &)
void startProcessingLoop()
std::vector< BranchIDList > BranchIDLists
virtual void openFile(FileBlock const &fb)=0
void getTriggerTimingReport(TriggerTimingReport &rep) const
roAction_t actions[nactions]
void writeProcessBlockAsync(WaitingTaskHolder iTask, ProcessBlockPrincipal const &, ProcessContext const *, ActivityRegistry *)
static Timestamp invalidTimestamp()
void restartModuleEvent(StreamContext const &, ModuleCallingContext const &)
void respondToCloseInputFile(FileBlock const &fb)
void startModuleEvent(StreamContext const &, ModuleCallingContext const &)
std::vector< Worker * > AllWorkers
RunPrincipal const & runPrincipal() const
void moduleDescriptionsInPath(std::string const &iPathLabel, std::vector< ModuleDescription const *> &descriptions, unsigned int hint) const
void removeModuleIfExists(ModuleDescription const &module)
std::vector< std::string > const * pathNames_
void getTriggerReport(TriggerReport &rep) const
void convertCurrentProcessAlias(std::string const &processName)
Convert "@currentProcess" in InputTag process names to the actual current process name...
void endStream(unsigned int)
BranchIDLists const & branchIDLists() const
ParameterSet getUntrackedParameterSet(std::string const &name, ParameterSet const &defaultValue) const
PostGlobalEndLumi postGlobalWriteLumiSignal_
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
std::vector< WorkerSummary > workerSummaries
edm::propagate_const< std::unique_ptr< SystemTimeKeeper > > summaryTimeKeeper_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
PreModuleDestruction preModuleDestructionSignal_
constexpr auto then(O &&iO)
void processOneEventAsync(WaitingTaskHolder iTask, unsigned int iStreamID, EventTransitionInfo &, ServiceToken const &token)
void stopProcessingLoop()
void startEvent(StreamID)
static unsigned int getUniqueID()
Returns a unique id each time called. Intended to be passed to ModuleDescription's constructor's modI...
void updateFromRegistry(ProductRegistry const ®)
size_t getParameterSetNames(std::vector< std::string > &output, bool trackiness=true) const
edm::propagate_const< std::unique_ptr< GlobalSchedule > > globalSchedule_
void eraseOrSetUntrackedParameterSet(std::string const &name)
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
bool anyProductProduced() const
T getUntrackedParameter(std::string const &, T const &) const
static RunIndex invalidRunIndex()
unsigned int numberOfThreads() const
void processEDAliases(std::vector< std::string > const &aliasNamesToProcess, std::unordered_set< std::string > const &aliasModulesToProcess, ParameterSet const &proc_pset, std::string const &processName, ProductRegistry &preg)
void deleteModule(std::string const &iLabel, ActivityRegistry *areg)
Deletes module with label iLabel.
ParameterSetID id() const
std::vector< ModuleDescription const * > getAllModuleDescriptions() const
void updateForNewProcess(ProductRegistry const &, std::string const &processName)
ParameterSet const & registerIt()
std::vector< PathSummary > trigPathSummaries
void beginJob(ProductRegistry const &, eventsetup::ESRecordsToProductResolverIndices const &, ProcessBlockHelperBase const &)
EventSummary eventSummary
auto runLast(edm::WaitingTaskHolder iTask)
std::vector< edm::propagate_const< std::shared_ptr< PathStatusInserter > > > pathStatusInserters_
bool changeModule(std::string const &iLabel, ParameterSet const &iPSet, const ProductRegistry &iRegistry, eventsetup::ESRecordsToProductResolverIndices const &)
void fillModuleAndConsumesInfo(std::vector< ModuleDescription const *> &allModuleDescriptions, std::vector< std::pair< unsigned int, unsigned int >> &moduleIDToIndex, std::array< std::vector< std::vector< ModuleDescription const *>>, NumBranchTypes > &modulesWhoseProductsAreConsumedBy, std::vector< std::vector< ModuleProcessName >> &modulesInPreviousProcessesWhoseProductsAreConsumedBy, ProductRegistry const &preg) const
EventTimingSummary eventSummary
Strings const & getTrigPaths() const
Schedule(ParameterSet &proc_pset, service::TriggerNamesService const &tns, ProductRegistry &pregistry, ExceptionToActionTable const &actions, std::shared_ptr< ActivityRegistry > areg, std::shared_ptr< ProcessConfiguration const > processConfiguration, PreallocationConfiguration const &config, ProcessContext const *processContext, ModuleTypeResolverMaker const *resolverMaker)
void setUnscheduledProducts(std::set< std::string > const &unscheduledLabels)
void clearCounters()
Clear all the counters in the trigger report.
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
PostGlobalWriteRun postGlobalWriteRunSignal_
unsigned int numberOfStreams() const
static ServiceRegistry & instance()
std::vector< PathTimingSummary > trigPathSummaries
void limitOutput(ParameterSet const &proc_pset, BranchIDLists const &branchIDLists, SubProcessParentageHelper const *subProcessParentageHelper)
void setFrozen(bool initializeLookupInfo=true)
void respondToOpenInputFile(FileBlock const &fb)
edm::propagate_const< std::shared_ptr< ModuleRegistry > > moduleRegistry_
Timestamp const & beginTime() const
void writeRunAsync(WaitingTaskHolder iTask, RunPrincipal const &rp, ProcessContext const *, ActivityRegistry *, MergeableRunProductMetadata const *)
void stopPath(StreamContext const &, PathContext const &, HLTPathStatus const &)
int totalEventsPassed() const
std::shared_ptr< ModuleRegistry const > moduleRegistry() const
static LuminosityBlockIndex invalidLuminosityBlockIndex()
PreGlobalWriteRun preGlobalWriteRunSignal_
void stopModuleEvent(StreamContext const &, ModuleCallingContext const &)
virtual bool shouldWeCloseFile() const =0
void availablePaths(std::vector< std::string > &oLabelsToFill) const
adds to oLabelsToFill the labels for all paths in the process
Log< level::Info, false > LogInfo
PreallocationConfiguration preallocConfig_
Log< level::FwkInfo, true > LogFwkVerbatim
PreWriteProcessBlock preWriteProcessBlockSignal_
std::vector< edm::propagate_const< std::shared_ptr< StreamSchedule > > > streamSchedules_
Strings const & getEndPaths() const
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
std::shared_ptr< ProductResolverIndexHelper const > productLookup(BranchType branchType) const
void respondToOpenInputFile(FileBlock const &fb)
void startPath(StreamContext const &, PathContext const &)
bool search_all(ForwardSequence const &s, Datum const &d)
PostWriteProcessBlock postWriteProcessBlockSignal_
bool shouldWeCloseOutput() const
ProductList & productListUpdator()
void addContext(std::string const &context)
void moduleDescriptionsInEndPath(std::string const &iEndPathLabel, std::vector< ModuleDescription const *> &descriptions, unsigned int hint) const
virtual std::unique_ptr< OutputModuleCommunicator > createOutputModuleCommunicator()=0
AllOutputModuleCommunicators all_output_communicators_
void pauseModuleEvent(StreamContext const &, ModuleCallingContext const &)
PreGlobalEndLumi preGlobalWriteLumiSignal_
void beginStream(unsigned int)
void respondToCloseInputFile(FileBlock const &fb)
std::vector< std::string > const * endPathNames_
void modulesInPath(std::string const &iPathLabel, std::vector< std::string > &oLabelsToFill) const
adds to oLabelsToFill in execution order the labels of all modules in path iPathLabel ...
LuminosityBlockIndex index() const
void finishSetup(ParameterSet &proc_pset, service::TriggerNamesService const &tns, ProductRegistry &preg, BranchIDListHelper &branchIDListHelper, ProcessBlockHelperBase &processBlockHelper, ThinnedAssociationsHelper &thinnedAssociationsHelper, SubProcessParentageHelper const *subProcessParentageHelper, std::shared_ptr< ActivityRegistry > areg, std::shared_ptr< ProcessConfiguration > processConfiguration, bool hasSubprocesses, PreallocationConfiguration const &prealloc, ProcessContext const *processContext)
virtual void closeFile()=0
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
void openOutputFiles(FileBlock &fb)
void writeLumiAsync(WaitingTaskHolder iTask, LuminosityBlockPrincipal const &lbp, ProcessContext const *, ActivityRegistry *)
std::vector< WorkerTimingSummary > workerSummaries
T mod(const T &a, const T &b)
void initializeEarlyDelete(std::vector< std::string > const &branchesToDeleteEarly, std::multimap< std::string, std::string > const &referencesToBranches, std::vector< std::string > const &modulesToSkip, edm::ProductRegistry const &preg)
void endJob(ExceptionCollector &collector)
std::vector< std::string > vstring
ServiceToken presentToken() const
void setIsMergeable(BranchDescription &)
int totalEventsFailed() const
void triggerPaths(std::vector< std::string > &oLabelsToFill) const