CMS 3D CMS Logo

TriggerExpressionPathReader.cc
Go to the documentation of this file.
1 #include <cassert>
2 #include <sstream>
3 
9 
10 namespace triggerExpression {
11 
12  // define the result of the module from the HLT reults
13  bool PathReader::operator()(const Data& data) const {
14  if (not data.hasHLT() && not data.usePathStatus())
15  return false;
16 
17  for (auto const& trigger : m_triggers)
18  if (data.passHLT(trigger.second))
19  return true;
20 
21  return false;
22  }
23 
24  void PathReader::dump(std::ostream& out) const {
25  if (m_triggers.empty()) {
26  out << "FALSE";
27  } else if (m_triggers.size() == 1) {
28  out << m_triggers[0].first;
29  } else {
30  out << "(" << m_triggers[0].first;
31  for (unsigned int i = 1; i < m_triggers.size(); ++i)
32  out << " OR " << m_triggers[i].first;
33  out << ")";
34  }
35  }
36 
37  // (re)initialize the module
38  void PathReader::init(const Data& data) {
39  // clear the previous configuration
40  m_triggers.clear();
41 
42  // check if the pattern has is a glob expression, or a single trigger name
43  if (not edm::is_glob(m_pattern)) {
44  // no wildcard expression
45  auto index = data.triggerIndex(m_pattern);
46  if (index >= 0)
47  m_triggers.push_back(std::make_pair(m_pattern, index));
48  else {
49  std::stringstream msg;
50  msg << "requested HLT path \"" << m_pattern << "\" does not exist - known paths are:";
51  if (data.triggerNames().empty())
52  msg << " (none)";
53  else
54  for (auto const& p : data.triggerNames())
55  msg << "\n\t" << p;
56  if (data.shouldThrow())
57  throw cms::Exception("Configuration") << msg.str();
58  else
59  edm::LogWarning("Configuration") << msg.str();
60  }
61  } else {
62  // expand wildcards in the pattern
63  const std::vector<std::vector<std::string>::const_iterator>& matches =
64  edm::regexMatch(data.triggerNames(), m_pattern);
65  if (matches.empty()) {
66  // m_pattern does not match any trigger paths
67  std::stringstream msg;
68  msg << "requested pattern \"" << m_pattern << "\" does not match any HLT paths - known paths are:";
69  if (data.triggerNames().empty())
70  msg << " (none)";
71  else
72  for (auto const& p : data.triggerNames())
73  msg << "\n\t" << p;
74  if (data.shouldThrow())
75  throw cms::Exception("Configuration") << msg.str();
76  else
77  edm::LogWarning("Configuration") << msg.str();
78  } else {
79  // store indices corresponding to the matching triggers
80  for (auto const& match : matches) {
81  auto index = data.triggerIndex(*match);
82  assert(index >= 0);
83  m_triggers.push_back(std::make_pair(*match, index));
84  }
85  }
86  }
87  }
88 
89 } // namespace triggerExpression
bool is_glob(std::string const &pattern)
Definition: RegexMatch.cc:17
assert(be >=bs)
bool operator()(const Data &data) const override
void init(const Data &data) override
void dump(std::ostream &out) const override
tuple msg
Definition: mps_check.py:285
std::vector< std::vector< std::string >::const_iterator > regexMatch(std::vector< std::string > const &strings, std::regex const &regexp)
Definition: RegexMatch.cc:26
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
Log< level::Warning, false > LogWarning
std::vector< std::pair< std::string, unsigned int > > m_triggers