Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:18:29

0001 #ifndef TriggerResultsFilter_h
0002 #define TriggerResultsFilter_h
0003 
0004 /** \class TriggerResultsFilter
0005  *
0006  *
0007  *  This class is an EDFilter implementing filtering on arbitrary logical combinations
0008  *  of L1 and HLT results.
0009  *
0010  *  It has been written as an extension of the HLTHighLevel and HLTHighLevelDev filters.
0011  *
0012  *
0013  *  Authors: Martin Grunewald, Andrea Bocci
0014  *
0015  */
0016 
0017 #include <memory>
0018 #include <string>
0019 #include <vector>
0020 #include <regex>
0021 
0022 #include "FWCore/Framework/interface/Event.h"
0023 #include "FWCore/Framework/interface/Frameworkfwd.h"
0024 #include "FWCore/Framework/interface/stream/EDFilter.h"
0025 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0026 #include "HLTrigger/HLTcore/interface/TriggerExpressionData.h"
0027 
0028 // forward declaration
0029 namespace edm {
0030   class ConfigurationDescriptions;
0031 }
0032 namespace triggerExpression {
0033   class Evaluator;
0034 }
0035 
0036 //
0037 // class declaration
0038 //
0039 
0040 class TriggerResultsFilter : public edm::stream::EDFilter<> {
0041 public:
0042   explicit TriggerResultsFilter(const edm::ParameterSet &);
0043   ~TriggerResultsFilter() override = default;
0044   static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0045   bool filter(edm::Event &, const edm::EventSetup &) override;
0046 
0047 private:
0048   void beginStream(edm::StreamID) override;
0049 
0050   /// parse the logical expression into functionals
0051   void parse(const std::string &expression);
0052   void parse(const std::vector<std::string> &expressions);
0053 
0054   /// evaluator for the trigger condition
0055   std::unique_ptr<triggerExpression::Evaluator> m_expression;
0056 
0057   /// cache some data from the Event for faster access by the m_expression
0058   triggerExpression::Data m_eventCache;
0059 
0060   struct PatternData {
0061     PatternData(std::string const &aStr, std::regex const &aRegex, bool const hasMatch = false)
0062         : str(aStr), regex(aRegex), matched(hasMatch) {}
0063     std::string str;
0064     std::regex regex;
0065     bool matched;
0066   };
0067 
0068   std::vector<PatternData> hltPathStatusPatterns_;
0069 };
0070 
0071 #endif  //TriggerResultsFilter_h