CMS 3D CMS Logo

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