50 template <
typename InputIterator,
typename ForwardIterator,
typename Func>
51 void transform_into(InputIterator begin, InputIterator
end, ForwardIterator
out, Func
func) {
52 for (; begin !=
end; ++begin, ++
out)
61 template <
typename FROM,
typename TO,
typename FUNC>
62 void fill_summary(FROM
const& from, TO&
to, FUNC
func) {
63 if (
to.size() != from.size()) {
65 transform_into(from.begin(), from.end(),
temp.begin(),
func);
68 transform_into(from.begin(), from.end(),
to.begin(),
func);
78 std::shared_ptr<ActivityRegistry> areg,
79 std::shared_ptr<TriggerResultInserter> inserter) {
82 ptr->setActivityRegistry(areg);
86 void initializeBranchToReadingWorker(std::vector<std::string>
const& branchesToDeleteEarly,
87 ProductRegistry
const& preg,
88 std::multimap<std::string, Worker*>& branchToReadingWorker) {
89 auto vBranchesToDeleteEarly = branchesToDeleteEarly;
91 std::sort(vBranchesToDeleteEarly.begin(), vBranchesToDeleteEarly.end(), std::less<std::string>());
92 vBranchesToDeleteEarly.erase(
std::unique(vBranchesToDeleteEarly.begin(), vBranchesToDeleteEarly.end()),
93 vBranchesToDeleteEarly.end());
96 auto allBranchNames = preg.allBranchNames();
98 for (
auto&
b : allBranchNames) {
99 b.resize(
b.size() - 1);
101 std::sort(allBranchNames.begin(), allBranchNames.end(), std::less<std::string>());
102 std::vector<std::string>
temp;
103 temp.reserve(vBranchesToDeleteEarly.size());
106 vBranchesToDeleteEarly.end(),
107 allBranchNames.begin(),
108 allBranchNames.end(),
109 std::back_inserter(
temp));
110 vBranchesToDeleteEarly.swap(
temp);
111 if (
temp.size() != vBranchesToDeleteEarly.size()) {
112 std::vector<std::string> missingProducts;
115 vBranchesToDeleteEarly.begin(),
116 vBranchesToDeleteEarly.end(),
117 std::back_inserter(missingProducts));
118 LogInfo l(
"MissingProductsForCanDeleteEarly");
119 l <<
"The following products in the 'canDeleteEarly' list are not available in this job and will be ignored.";
120 for (
auto const&
n : missingProducts) {
126 for (
auto const&
branch : vBranchesToDeleteEarly) {
127 branchToReadingWorker.insert(std::make_pair(
branch, static_cast<Worker*>(
nullptr)));
134 typedef std::vector<std::string>
vstring;
139 std::shared_ptr<TriggerResultInserter> inserter,
142 std::shared_ptr<ModuleRegistry> modReg,
149 std::shared_ptr<ActivityRegistry> areg,
150 std::shared_ptr<ProcessConfiguration> processConfiguration,
153 : workerManager_(modReg, areg,
actions),
161 number_of_unscheduled_modules_(0),
163 streamContext_(streamID_, processContext),
164 skippingEvent_(
false) {
165 bool hasPath =
false;
166 std::vector<std::string>
const& pathNames = tns.
getTrigPaths();
167 std::vector<std::string>
const& endPathNames = tns.
getEndPaths();
171 for (
auto const& trig_name : pathNames) {
172 fillTrigPath(proc_pset, preg, &prealloc, processConfiguration, trig_bitpos, trig_name,
results(), endPathNames);
188 for (
auto const& end_path_name : endPathNames) {
189 fillEndPath(proc_pset, preg, &prealloc, processConfiguration, bitpos, end_path_name, endPathNames);
196 std::set<std::string> usedWorkerLabels;
198 usedWorkerLabels.insert(worker->description()->moduleLabel());
200 std::vector<std::string> modulesInConfig(proc_pset.
getParameter<std::vector<std::string>>(
"@all_modules"));
201 std::set<std::string> modulesInConfigSet(modulesInConfig.begin(), modulesInConfig.end());
202 std::vector<std::string> unusedLabels;
204 modulesInConfigSet.end(),
205 usedWorkerLabels.begin(),
206 usedWorkerLabels.end(),
207 back_inserter(unusedLabels));
208 std::set<std::string> unscheduledLabels;
209 std::vector<std::string> shouldBeUsedLabels;
210 if (!unusedLabels.empty()) {
215 for (
auto const&
label : unusedLabels) {
219 assert(modulePSet !=
nullptr);
221 *modulePSet, preg, &prealloc, processConfiguration,
label, unscheduledLabels, shouldBeUsedLabels);
223 if (!shouldBeUsedLabels.empty()) {
224 std::ostringstream unusedStream;
225 unusedStream <<
"'" << shouldBeUsedLabels.front() <<
"'";
226 for (std::vector<std::string>::iterator itLabel = shouldBeUsedLabels.begin() + 1,
227 itLabelEnd = shouldBeUsedLabels.end();
228 itLabel != itLabelEnd;
230 unusedStream <<
",'" << *itLabel <<
"'";
232 LogInfo(
"path") <<
"The following module labels are not assigned to any path:\n" << unusedStream.str() <<
"\n";
239 std::vector<std::string>
const& branchesToDeleteEarly,
242 std::multimap<std::string, Worker*> branchToReadingWorker;
243 initializeBranchToReadingWorker(branchesToDeleteEarly, preg, branchToReadingWorker);
245 const std::vector<std::string> kEmpty;
246 std::map<Worker*, unsigned int> reserveSizeForWorker;
247 unsigned int upperLimitOnReadingWorker = 0;
248 unsigned int upperLimitOnIndicies = 0;
249 unsigned int nUniqueBranchesToDelete = branchToReadingWorker.size();
255 if (!branchToReadingWorker.empty()) {
261 auto found = branchToReadingWorker.equal_range(
desc.branchName());
263 --nUniqueBranchesToDelete;
264 branchToReadingWorker.erase(
found.first,
found.second);
271 if (branchToReadingWorker.empty()) {
278 if (
nullptr !=
pset) {
279 auto branches =
pset->getUntrackedParameter<std::vector<std::string>>(
"mightGet", kEmpty);
280 if (not branches.empty()) {
281 ++upperLimitOnReadingWorker;
283 for (
auto const&
branch : branches) {
284 auto found = branchToReadingWorker.equal_range(
branch);
286 ++upperLimitOnIndicies;
287 ++reserveSizeForWorker[
w];
288 if (
nullptr ==
found.first->second) {
291 branchToReadingWorker.insert(make_pair(
found.first->first,
w));
298 auto it = branchToReadingWorker.begin();
299 std::vector<std::string> unusedBranches;
300 while (it != branchToReadingWorker.end()) {
301 if (it->second ==
nullptr) {
302 unusedBranches.push_back(it->first);
306 branchToReadingWorker.erase(
temp);
311 if (not unusedBranches.empty()) {
313 l <<
"The following products in the 'canDeleteEarly' list are not used in this job and will be ignored.\n" 314 " If possible, remove the producer from the job or add the product to the producer's own 'mightGet' list.";
315 for (
auto const&
n : unusedBranches) {
320 if (!branchToReadingWorker.empty()) {
324 std::map<const Worker*, EarlyDeleteHelper*> alreadySeenWorkers;
326 size_t nextOpenIndex = 0;
328 for (
auto& branchAndWorker : branchToReadingWorker) {
329 if (lastBranchName != branchAndWorker.first) {
331 BranchID bid(branchAndWorker.first +
".");
333 lastBranchName = branchAndWorker.first;
335 auto found = alreadySeenWorkers.find(branchAndWorker.second);
336 if (alreadySeenWorkers.end() ==
found) {
341 size_t index = nextOpenIndex;
342 size_t nIndices = reserveSizeForWorker[branchAndWorker.second];
346 alreadySeenWorkers.insert(std::make_pair(branchAndWorker.second, &(
earlyDeleteHelpers_.back())));
347 nextOpenIndex += nIndices;
357 if (itLast->end() != it->begin()) {
359 unsigned int delta = it->begin() - itLast->end();
360 it->shiftIndexPointers(
delta);
374 p.setEarlyDeleteHelpers(alreadySeenWorkers);
377 p.setEarlyDeleteHelpers(alreadySeenWorkers);
388 std::shared_ptr<ProcessConfiguration const> processConfiguration) {
391 if (modpset ==
nullptr) {
401 std::unordered_set<std::string>& conditionalModules,
402 std::multimap<std::string, edm::BranchDescription const*>
const& conditionalModuleBranches,
403 std::multimap<std::string, AliasInfo>
const& aliasMap,
407 std::shared_ptr<ProcessConfiguration const> processConfiguration) {
408 std::vector<Worker*> returnValue;
411 using namespace productholderindexhelper;
412 for (
auto const& ci : consumesInfo) {
413 if (not ci.skipCurrentProcess() and
414 (ci.process().empty()
or ci.process() == processConfiguration->processName())) {
415 auto productModuleLabel = ci.label();
416 if (productModuleLabel.empty()) {
418 for (
auto const&
branch : conditionalModuleBranches) {
420 if (conditionalModules.find(
branch.first) == conditionalModules.end()) {
424 if (
branch.second->unwrappedTypeID() != ci.type()) {
429 ci.type(),
TypeID(
branch.second->wrappedType().typeInfo()),
branch.second->className())) {
437 conditionalModules.erase(
branch.first);
441 conditionalModuleBranches,
446 processConfiguration);
447 returnValue.insert(returnValue.end(), dependents.begin(), dependents.end());
448 returnValue.push_back(condWorker);
452 bool productFromConditionalModule =
false;
453 auto itFound = conditionalModules.find(productModuleLabel);
454 if (itFound == conditionalModules.end()) {
456 auto findAlias = aliasMap.equal_range(productModuleLabel);
457 for (
auto it = findAlias.first; it != findAlias.second; ++it) {
459 productModuleLabel = it->second.originalModuleLabel;
460 if (it->second.instanceLabel ==
"*" or ci.instance() == it->second.instanceLabel) {
461 if (it->second.friendlyClassName ==
"*" or 462 (ci.type().friendlyClassName() == it->second.friendlyClassName)) {
463 productFromConditionalModule =
true;
469 auto branches = conditionalModuleBranches.equal_range(productModuleLabel);
470 for (
auto itBranch = branches.first; itBranch != branches.second; ++it) {
471 if (it->second.originalInstanceLabel ==
"*" or 472 itBranch->second->productInstanceName() == it->second.originalInstanceLabel) {
474 TypeID(itBranch->second->wrappedType().typeInfo()),
476 productFromConditionalModule =
true;
481 if (productFromConditionalModule) {
487 if (productFromConditionalModule) {
488 itFound = conditionalModules.find(productModuleLabel);
490 if (itFound == conditionalModules.end()) {
496 auto findBranches = conditionalModuleBranches.equal_range(productModuleLabel);
497 for (
auto itBranch = findBranches.first; itBranch != findBranches.second; ++itBranch) {
498 if (itBranch->second->productInstanceName() == ci.instance()) {
500 if (ci.type() == itBranch->second->unwrappedTypeID()) {
501 productFromConditionalModule =
true;
507 TypeID(itBranch->second->wrappedType().typeInfo()),
509 productFromConditionalModule =
true;
516 if (productFromConditionalModule) {
521 conditionalModules.erase(itFound);
525 conditionalModuleBranches,
530 processConfiguration);
531 returnValue.insert(returnValue.end(), dependents.begin(), dependents.end());
532 returnValue.push_back(condWorker);
543 std::shared_ptr<ProcessConfiguration const> processConfiguration,
547 std::vector<std::string>
const& endPathNames) {
552 auto itCondBegin =
std::find(modnames.begin(), modnames.end(),
"#");
554 std::unordered_set<std::string> conditionalmods;
556 std::multimap<std::string, AliasInfo> aliasMap;
557 std::multimap<std::string, edm::BranchDescription const*> conditionalModsBranches;
558 std::unordered_map<std::string, unsigned int> conditionalModOrder;
559 if (itCondBegin != modnames.end()) {
560 for (
auto it = itCondBegin + 1; it != modnames.begin() + modnames.size() - 1; ++it) {
562 conditionalModOrder.emplace(*it, it - modnames.begin() - 1);
565 conditionalmods = std::unordered_set<std::string>(
566 std::make_move_iterator(itCondBegin + 1), std::make_move_iterator(modnames.begin() + modnames.size() - 1));
568 for (
auto const&
cond : conditionalmods) {
574 auto aliases = proc_pset.
getParameter<std::vector<std::string>>(
"@all_aliases");
576 for (
auto const&
alias : aliases) {
578 auto aliasedToModuleLabels =
info.getParameterNames();
579 for (
auto const&
mod : aliasedToModuleLabels) {
580 if (not
mod.empty() and
mod[0] !=
'@' and conditionalmods.find(
mod) != conditionalmods.end()) {
581 auto aliasVPSet =
info.getParameter<std::vector<edm::ParameterSet>>(
mod);
582 for (
auto const& aliasPSet : aliasVPSet) {
586 if (aliasPSet.exists(
"type")) {
589 if (aliasPSet.exists(
"toProductInstance")) {
592 if (aliasPSet.exists(
"fromProductInstance")) {
593 originalInstance = aliasPSet.getParameter<
std::string>(
"fromProductInstance");
604 auto const& all_modules = proc_pset.
getParameter<std::vector<std::string>>(
"@all_modules");
605 std::vector<std::string> switchEDAliases;
606 for (
auto const&
module : all_modules) {
608 if (mod_pset.getParameter<
std::string>(
"@module_type") ==
"SwitchProducer") {
609 auto const& all_cases = mod_pset.
getParameter<std::vector<std::string>>(
"@all_cases");
610 for (
auto const& case_label : all_cases) {
611 auto range = aliasMap.equal_range(case_label);
613 switchEDAliases.push_back(case_label);
619 switchEDAliases, conditionalmods, proc_pset, processConfiguration->processName(), preg);
624 if (conditionalmods.find(
prod.first.moduleLabel()) != conditionalmods.end()) {
625 conditionalModsBranches.emplace(
prod.first.moduleLabel(), &
prod.second);
630 modnames.erase(itCondBegin, modnames.end());
632 unsigned int placeInPath = 0;
633 for (
auto const&
name : modnames) {
635 bool doNotRunConcurrently =
false;
637 if (
name[0] ==
'!') {
639 }
else if (
name[0] ==
'-' or name[0] ==
'+') {
644 doNotRunConcurrently =
true;
653 if (worker ==
nullptr) {
659 <<
"The unknown module label \"" <<
moduleLabel <<
"\" appears in " << pathType <<
" \"" <<
pathName 660 <<
"\"\n please check spelling or remove that label from the path.";
671 <<
"' with module label '" <<
moduleLabel <<
"' appears on EndPath '" 673 <<
"The return value of the filter will be ignored.\n" 674 <<
"To suppress this warning, either remove the filter from the endpath,\n" 675 <<
"or explicitly ignore it in the configuration by using cms.ignore().\n";
678 bool runConcurrently = not doNotRunConcurrently;
680 runConcurrently =
false;
684 worker, conditionalmods, conditionalModsBranches, aliasMap, proc_pset, preg, prealloc, processConfiguration);
685 for (
auto condMod : condModules) {
686 tmpworkers.emplace_back(
687 condMod,
WorkerInPath::Ignore, conditionalModOrder[condMod->description()->moduleLabel()],
true);
690 tmpworkers.emplace_back(worker, filterAction, placeInPath, runConcurrently);
694 out.swap(tmpworkers);
700 std::shared_ptr<ProcessConfiguration const> processConfiguration,
704 std::vector<std::string>
const& endPathNames) {
706 fillWorkers(proc_pset, preg, prealloc, processConfiguration,
name,
false, tmpworkers, endPathNames);
709 if (!tmpworkers.empty()) {
730 std::shared_ptr<ProcessConfiguration const> processConfiguration,
733 std::vector<std::string>
const& endPathNames) {
735 fillWorkers(proc_pset, preg, prealloc, processConfiguration,
name,
true, tmpworkers, endPathNames);
737 if (!tmpworkers.empty()) {
763 if (worker->description()->moduleLabel() == iLabel) {
768 if (
nullptr ==
found) {
779 std::vector<ModuleDescription const*>
result;
809 results_->at(empty_trig_path) = hltPathStatus;
810 pathStatusInserters[empty_trig_path]->setPathStatus(
streamID_, hltPathStatus);
835 auto pathErrorHolder = std::make_unique<std::atomic<std::exception_ptr*>>(
nullptr);
836 auto pathErrorPtr = pathErrorHolder.get();
839 [iTask,
this, weakToken, pathError =
std::move(pathErrorHolder)](std::exception_ptr
const* iPtr)
mutable {
842 std::exception_ptr ptr;
843 if (pathError->load()) {
844 ptr = *pathError->load();
845 delete pathError->load();
847 if ((not ptr) and iPtr) {
857 auto pathsDone =
make_waiting_task([allPathsHolder, pathErrorPtr, transitionInfo =
info,
this, weakToken](
858 std::exception_ptr
const* iPtr)
mutable {
864 pathErrorPtr->store(
new std::exception_ptr(*iPtr));
903 *(iExcept.load()) = std::exception_ptr();
905 *(iExcept.load()) = std::current_exception();
908 *(iExcept.load()) = std::current_exception();
912 if ((not iExcept) and
results_->accept()) {
926 std::rethrow_exception(expt);
931 std::ostringstream ost;
932 ost <<
"Processing Event " <<
info.principal().id();
935 iExcept.store(
new std::exception_ptr(std::current_exception()));
939 iExcept.store(
new std::exception_ptr(std::current_exception()));
943 std::exception_ptr ptr;
945 ptr = *iExcept.load();
958 bool const cleaningUpAfterException =
false;
964 iExcept = std::current_exception();
972 iExcept = std::current_exception();
986 std::back_inserter(oLabelsToFill),
987 std::bind(&
Path::name, std::placeholders::_1));
991 TrigPaths::const_iterator itFound = std::find_if(
994 std::bind(std::equal_to<std::string>(), iPathLabel, std::bind(&
Path::name, std::placeholders::_1)));
996 oLabelsToFill.reserve(itFound->size());
997 for (
size_t i = 0;
i < itFound->size(); ++
i) {
998 oLabelsToFill.push_back(itFound->getWorker(
i)->description()->moduleLabel());
1004 std::vector<ModuleDescription const*>& descriptions,
1005 unsigned int hint)
const {
1006 descriptions.clear();
1008 TrigPaths::const_iterator itFound;
1012 if (itFound->name() == iPathLabel)
1017 itFound = std::find_if(
1020 std::bind(std::equal_to<std::string>(), iPathLabel, std::bind(&
Path::name, std::placeholders::_1)));
1025 descriptions.reserve(itFound->size());
1026 for (
size_t i = 0;
i < itFound->size(); ++
i) {
1027 descriptions.push_back(itFound->getWorker(
i)->description());
1033 std::vector<ModuleDescription const*>& descriptions,
1034 unsigned int hint)
const {
1035 descriptions.clear();
1037 TrigPaths::const_iterator itFound;
1041 if (itFound->name() == iEndPathLabel)
1046 itFound = std::find_if(
1049 std::bind(std::equal_to<std::string>(), iEndPathLabel, std::bind(&
Path::name, std::placeholders::_1)));
1054 descriptions.reserve(itFound->size());
1055 for (
size_t i = 0;
i < itFound->size(); ++
i) {
1056 descriptions.push_back(itFound->getWorker(
i)->description());
1080 std::vector<ModuleInPathSummary>
temp(sz);
1081 for (
size_t i = 0;
i != sz; ++
i) {
1087 for (
size_t i = 0;
i != sz; ++
i) {
1115 using std::placeholders::_1;
1148 unsigned int indexEmpty = 0;
1149 unsigned int indexOfPath = 0;
1150 for (
auto& pathStatusInserter : pathStatusInserters) {
1151 std::shared_ptr<PathStatusInserter> inserterPtr =
get_underlying(pathStatusInserter);
1155 workerPtr->setActivityRegistry(
actReg_);
1164 trig_paths_.at(indexOfPath).setPathStatusInserter(inserterPtr.get(), workerPtr.get());
1173 for (
auto& endPathStatusInserter : endPathStatusInserters) {
1174 std::shared_ptr<EndPathStatusInserter> inserterPtr =
get_underlying(endPathStatusInserter);
1178 workerPtr->setActivityRegistry(
actReg_);
1187 end_paths_.at(indexOfPath).setPathStatusInserter(
nullptr, workerPtr.get());
static void fillModuleInPathSummary(Path const &path, size_t which, ModuleInPathSummary &sum)
void moduleDescriptionsInEndPath(std::string const &iEndPathLabel, std::vector< ModuleDescription const *> &descriptions, unsigned int hint) const
ExceptionToActionTable const & actionTable() const
returns the action table
T getParameter(std::string const &) const
std::vector< int > empty_trig_paths_
roAction_t actions[nactions]
bool getMapped(key_type const &k, value_type &result) const
std::vector< edm::propagate_const< WorkerPtr > > pathStatusInserterWorkers_
void endStream(StreamID iID, StreamContext &streamContext)
virtual void replaceModuleFor(Worker *) const =0
ProductList const & productList() const
void processAccumulatorsAsync(WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID, ParentContext const &, typename T::Context const *)
std::array< SelectedProducts, NumBranchTypes > SelectedProductsForBranchType
static PFTauRenderPlugin instance
std::shared_ptr< HLTGlobalStatus > TrigResPtr
WorkersInPath::size_type size_type
int totalEventsPassed() const
void addToUnscheduledWorkers(ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration > processConfiguration, std::string label, std::set< std::string > &unscheduledLabels, std::vector< std::string > &shouldBeUsedLabels)
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 ...
void processOneEventAsync(WaitingTaskHolder iTask, EventTransitionInfo &, ServiceToken const &token, std::vector< edm::propagate_const< std::shared_ptr< PathStatusInserter >>> &pathStatusInserters)
std::vector< BranchToCount > earlyDeleteBranchToCount_
void setupOnDemandSystem(EventTransitionInfo const &)
void addContextAndPrintException(char const *context, cms::Exception &ex, bool disablePrint)
void addToAllWorkers(Worker *w)
std::string const & moduleName() const
edm::propagate_const< WorkerPtr > results_inserter_
void deleteModuleIfExists(std::string const &moduleLabel)
std::shared_ptr< Worker > WorkerPtr
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
StreamID streamID() const
std::vector< Worker * > tryToPlaceConditionalModules(Worker *, std::unordered_set< std::string > &conditionalModules, std::multimap< std::string, edm::BranchDescription const *> const &conditionalModuleBranches, std::multimap< std::string, AliasInfo > const &aliasMap, ParameterSet &proc_pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration)
unsigned int number_of_unscheduled_modules_
int totalEventsFailed() const
void fillWorkers(ParameterSet &proc_pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, std::string const &name, bool ignoreFilters, PathWorkers &out, std::vector< std::string > const &endPathNames)
TEMPL(T2) struct Divides void
WorkerManager workerManager_
std::shared_ptr< ActivityRegistry > actReg_
Worker * getWorker(ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, std::string const &label)
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
void fillEndPath(ParameterSet &proc_pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, int bitpos, std::string const &name, std::vector< std::string > const &endPathNames)
T getUntrackedParameter(std::string const &, T const &) const
constexpr element_type const * get() const
oneapi::tbb::task_group * group() const noexcept
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)
std::vector< WorkerInPath > PathWorkers
std::vector< int > empty_end_paths_
void doneWaiting(std::exception_ptr iExcept)
void moduleDescriptionsInPath(std::string const &iPathLabel, std::vector< ModuleDescription const *> &descriptions, unsigned int hint) const
TrigResConstPtr results() const
Strings const & getTrigPaths() const
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)
StreamContext streamContext_
std::vector< std::string > vstring
virtual std::vector< ConsumesInfo > consumesInfo() const =0
static void fillPathSummary(Path const &path, PathSummary &sum)
StreamSchedule(std::shared_ptr< TriggerResultInserter > inserter, std::vector< edm::propagate_const< std::shared_ptr< PathStatusInserter >>> &pathStatusInserters, std::vector< edm::propagate_const< std::shared_ptr< EndPathStatusInserter >>> &endPathStatusInserters, std::shared_ptr< ModuleRegistry >, ParameterSet &proc_pset, service::TriggerNamesService const &tns, PreallocationConfiguration const &prealloc, ProductRegistry &pregistry, BranchIDListHelper &branchIDListHelper, ExceptionToActionTable const &actions, std::shared_ptr< ActivityRegistry > areg, std::shared_ptr< ProcessConfiguration > processConfiguration, StreamID streamID, ProcessContext const *processContext)
void finishedPaths(std::atomic< std::exception_ptr *> &, WaitingTaskHolder, EventTransitionInfo &)
FunctorWaitingTask< F > * make_waiting_task(F f)
bool typeIsViewCompatible(TypeID const &requestedViewType, TypeID const &wrappedtypeID, std::string const &className)
std::exception_ptr finishProcessOneEvent(std::exception_ptr)
static Worker * getWorker(std::string const &moduleLabel, ParameterSet &proc_pset, WorkerManager &workerManager, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration)
ServiceToken lock() const
void deleteModule(std::string const &iLabel)
Delete the module with label iLabel.
static void fillWorkerSummaryAux(Worker const &w, WorkerSummary &sum)
virtual Types moduleType() const =0
Log< level::Info, false > LogInfo
void beginStream(StreamID iID, StreamContext &streamContext)
ModuleDescription const * description() const
std::string const & className() const
void clearCounters()
Clear all the counters in the trigger report.
void initializeEarlyDelete(ModuleRegistry &modReg, std::vector< std::string > const &branchesToDeleteEarly, edm::ProductRegistry const &preg)
void fillTrigPath(ParameterSet &proc_pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, int bitpos, std::string const &name, TrigResPtr, std::vector< std::string > const &endPathNames)
Strings const & getEndPaths() const
void getTriggerReport(TriggerReport &rep) const
exception_actions::ActionCodes find(const std::string &category) const
std::vector< unsigned int > earlyDeleteHelperToBranchIndicies_
void forAllModuleHolders(F iFunc)
edm::propagate_const< TrigResPtr > results_
bool search_all(ForwardSequence const &s, Datum const &d)
constexpr T & get_underlying(propagate_const< T > &)
void addContext(std::string const &context)
virtual std::unique_ptr< OutputModuleCommunicator > createOutputModuleCommunicator()=0
std::vector< ModuleDescription const * > getAllModuleDescriptions() const
static void fillWorkerSummary(Worker const *pw, WorkerSummary &sum)
std::atomic< bool > skippingEvent_
void setupResolvers(Principal &principal)
void replaceModule(maker::ModuleHolder *iMod, std::string const &iLabel)
clone the type of module with label iLabel but configure with iPSet.
std::vector< edm::propagate_const< WorkerPtr > > endPathStatusInserterWorkers_
void makePathStatusInserters(std::vector< edm::propagate_const< std::shared_ptr< PathStatusInserter >>> &pathStatusInserters, std::vector< edm::propagate_const< std::shared_ptr< EndPathStatusInserter >>> &endPathStatusInserters, ExceptionToActionTable const &actions)
AllWorkers const & allWorkers() const
returns the collection of pointers to workers
std::vector< ModuleInPathSummary > moduleInPathSummaries
void availablePaths(std::vector< std::string > &oLabelsToFill) const
adds to oLabelsToFill the labels for all paths in the process
unsigned int value() const
auto wrap(F iFunc) -> decltype(iFunc())
Log< level::Warning, false > LogWarning
std::list< std::string > const & context() const
std::string const & moduleLabel() const
T mod(const T &a, const T &b)
std::string const & name() const
std::vector< std::string > vstring
static Registry * instance()
std::vector< EarlyDeleteHelper > earlyDeleteHelpers_
void addToAllWorkers(Worker *w)
void printCmsExceptionWarning(char const *behavior, cms::Exception const &e)
ParameterSet * getPSetForUpdate(std::string const &name, bool &isTracked)