CMS 3D CMS Logo

TriggerExpressionL1uGTReader.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <regex>
3 
11 
12 namespace triggerExpression {
13 
14 // define the result of the module from the L1 reults
15 bool L1uGTReader::operator()(const Data & data) const {
16  if (not data.hasL1T())
17  return false;
18 
19  std::vector<bool> const & word = data.l1tResults();
20  if (word.empty())
21  return false;
22 
23  for (auto const & trigger: m_triggers)
24  if (trigger.second < word.size() and word[trigger.second])
25  return true;
26 
27  return false;
28 }
29 
30 void L1uGTReader::dump(std::ostream & out) const {
31  if (m_triggers.empty()) {
32  out << "FALSE";
33  } else if (m_triggers.size() == 1) {
34  out << m_triggers[0].first;
35  } else {
36  out << "(" << m_triggers[0].first;
37  for (unsigned int i = 1; i < m_triggers.size(); ++i)
38  out << " OR " << m_triggers[i].first;
39  out << ")";
40  }
41 }
42 
43 void L1uGTReader::init(const Data & data) {
44  if (not data.hasL1T())
45  return;
46 
47  const L1TUtmTriggerMenu & menu = data.l1tMenu();
48 
49  // clear the previous configuration
50  m_triggers.clear();
51 
52  // check if the pattern has is a glob expression, or a single trigger name
53  auto const & triggerMap = menu.getAlgorithmMap();
54  if (not edm::is_glob(m_pattern)) {
55  // no wildcard expression
56  auto entry = triggerMap.find(m_pattern);
57  if (entry != triggerMap.end()) {
58  // single L1 bit
59  m_triggers.push_back( std::make_pair(m_pattern, entry->second.getIndex()) );
60  } else
61  // trigger not found in the current menu
62  if (data.shouldThrow())
63  throw cms::Exception("Configuration") << "requested L1 trigger \"" << m_pattern << "\" does not exist in the current L1 menu";
64  else
65  edm::LogWarning("Configuration") << "requested L1 trigger \"" << m_pattern << "\" does not exist in the current L1 menu";
66  } else {
67  // expand wildcards in the pattern
68  bool match = false;
69  std::regex re(edm::glob2reg(m_pattern));
70  for (auto const & entry: triggerMap)
71  if (std::regex_match(entry.first, re)) {
72  match = true;
73  m_triggers.push_back( std::make_pair(entry.first, entry.second.getIndex()) );
74  }
75 
76  if (not match) {
77  // m_pattern does not match any L1 bits
78  if (data.shouldThrow())
79  throw cms::Exception("Configuration") << "requested pattern \"" << m_pattern << "\" does not match any L1 trigger in the current menu";
80  else
81  edm::LogWarning("Configuration") << "requested pattern \"" << m_pattern << "\" does not match any L1 trigger in the current menu";
82  }
83  }
84 
85 }
86 
87 } // namespace triggerExpression
const L1TUtmTriggerMenu & l1tMenu() const
bool is_glob(std::string const &pattern)
Definition: RegexMatch.cc:17
std::string glob2reg(std::string const &pattern)
Definition: RegexMatch.cc:19
std::vector< std::pair< std::string, unsigned int > > m_triggers
void dump(std::ostream &out) const override
void init(const Data &data) override
const std::vector< bool > & l1tResults() const
const std::map< std::string, L1TUtmAlgorithm > & getAlgorithmMap() const
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
bool operator()(const Data &data) const override