166 <<
"EventSelector::acceptEvent cannot find the trigger names for\n" 167 <<
"a process for which the configuration has requested that the\n" 168 <<
"OutputModule use TriggerResults to select events from. This " 170 <<
"be impossible, please send information to reproduce this problem " 172 <<
"the art developers at artists@fnal.gov.\n";
174 auto const trigger_path_specs =
175 pset.
get<vector<string>>(
"trigger_paths", {});
176 if (trigger_path_specs.size() != tr.size()) {
178 <<
"EventSelector::acceptEvent: Trigger names vector and\n" 179 <<
"TriggerResults are different sizes. This should be impossible,\n" 180 <<
"please send information to reproduce this problem to\n" 181 <<
"the art developers.\n";
184 std::vector<BitInfo> absolute_acceptors;
185 std::vector<BitInfo> conditional_acceptors;
186 std::vector<BitInfo> exception_acceptors;
187 std::vector<std::vector<BitInfo>> all_must_fail;
188 std::vector<std::vector<BitInfo>> all_must_fail_noex;
191 string specifier{pathSpecifier};
193 bool const noex_demanded = remove_noexception(pathSpecifier, specifier);
194 bool const negative_criterion = remove_negation(specifier);
195 bool const exception_spec = remove_exception(pathSpecifier, specifier);
197 if (negative_criterion && exception_spec) {
199 <<
"EventSelector::init, A module is using SelectEvents\n" 200 <<
"to request a trigger name starting with !exception@.\n" 201 <<
"This is not supported.\n" 202 <<
"The improper trigger name is: " << pathSpecifier <<
'\n';
205 if (noex_demanded && exception_spec) {
207 <<
"EventSelector::init, A module is using SelectEvents\n" 208 <<
"to request a trigger name starting with exception@ " 209 <<
"and also demanding &noexception.\n" 210 <<
"The improper trigger name is: " << pathSpecifier <<
'\n';
218 string const& realname{specifier};
219 auto const matches =
regexMatch(trigger_path_specs, realname);
220 if (matches.empty()) {
223 <<
"EventSelector::init, A module is using SelectEvents\n" 224 "to request a wildcarded trigger name that does not match any " 226 "The wildcarded trigger name is: " 228 <<
" (from trigger-path specification: " << pathSpecifier <<
")";
231 <<
"EventSelector::init, A module is using SelectEvents\n" 232 "to request a trigger name that does not exist.\n" 233 "The unknown trigger name is: " 235 <<
" (from trigger-path specification: " << pathSpecifier <<
") \n";
239 auto makeBitInfoPass = [&trigger_path_specs](
auto m) {
240 return BitInfo{path_position(trigger_path_specs, m),
true};
242 auto makeBitInfoFail = [&trigger_path_specs](
auto m) {
243 return BitInfo{path_position(trigger_path_specs, m),
false};
246 if (!negative_criterion && !noex_demanded && !exception_spec) {
248 matches, back_inserter(absolute_acceptors), makeBitInfoPass);
252 if (!negative_criterion && noex_demanded) {
254 matches, back_inserter(conditional_acceptors), makeBitInfoPass);
258 if (exception_spec) {
260 matches, back_inserter(exception_acceptors), makeBitInfoPass);
264 if (negative_criterion && !noex_demanded) {
265 if (matches.empty()) {
267 <<
"EventSelector::init, A module is using SelectEvents\n" 268 "to request all fails on a set of trigger names that do not " 270 <<
"The problematic name is: " << pathSpecifier <<
'\n';
273 if (matches.size() == 1) {
274 BitInfo bi{path_position(trigger_path_specs, matches[0]),
false};
275 absolute_acceptors.push_back(bi);
278 auto must_fail = matches |
279 ::ranges::views::transform(makeBitInfoFail) |
281 all_must_fail.push_back(std::move(must_fail));
286 if (negative_criterion && noex_demanded) {
287 if (matches.empty()) {
289 <<
"EventSelector::init, A module is using SelectEvents\n" 290 "to request all fails on a set of trigger names that do not " 292 <<
"The problematic name is: " << pathSpecifier <<
'\n';
295 if (matches.size() == 1) {
296 BitInfo bi{path_position(trigger_path_specs, matches[0]),
false};
297 conditional_acceptors.push_back(bi);
299 auto must_fail = matches |
300 ::ranges::views::transform(makeBitInfoFail) |
302 all_must_fail_noex.push_back(std::move(must_fail));
306 return ScheduleData{tr.parameterSetID(),
308 conditional_acceptors,
std::vector< std::string > const path_specs_
static collection_type const & get() noexcept
std::vector< std::vector< std::string >::const_iterator > regexMatch(std::vector< std::string > const &strings, std::string const &pattern)
T get(std::string const &key) const
cet::coded_exception< errors::ErrorCodes, ExceptionDetail::translate > Exception
MaybeLogger_< ELseverityLevel::ELsev_warning, false > LogWarning
bool is_glob(std::string const &pattern)