CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/HLTfilters/src/TriggerResultsFilter.cc

Go to the documentation of this file.
00001 
00012 #include <vector>
00013 #include <string>
00014 #include <sstream>
00015 #include <iostream>
00016 #include <iomanip>
00017 #include <boost/foreach.hpp>
00018 
00019 #include "DataFormats/Common/interface/Handle.h"
00020 #include "DataFormats/Common/interface/TriggerResults.h"
00021 #include "FWCore/Framework/interface/ESHandle.h"
00022 #include "FWCore/Utilities/interface/Exception.h"
00023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00024 
00025 #include "HLTrigger/HLTcore/interface/TriggerExpressionEvaluator.h"
00026 #include "HLTrigger/HLTcore/interface/TriggerExpressionParser.h"
00027 #include "HLTrigger/HLTfilters/interface/TriggerResultsFilter.h"
00028 
00029 //
00030 // constructors and destructor
00031 //
00032 TriggerResultsFilter::TriggerResultsFilter(const edm::ParameterSet & config) :
00033   m_expression(0),
00034   m_eventCache(config)
00035 {
00036   const std::vector<std::string> & expressions = config.getParameter<std::vector<std::string> >("triggerConditions");
00037   parse( expressions );
00038 }
00039 
00040 TriggerResultsFilter::~TriggerResultsFilter()
00041 {
00042   delete m_expression;
00043 }
00044 
00045 void TriggerResultsFilter::parse(const std::vector<std::string> & expressions) {
00046   // parse the logical expressions into functionals
00047   if (expressions.size() == 0) {
00048     edm::LogWarning("Configuration") << "Empty trigger results expression";
00049   } else if (expressions.size() == 1) {
00050     parse( expressions[0] );
00051   } else {
00052     std::stringstream expression;
00053     expression << "(" << expressions[0] << ")";
00054     for (unsigned int i = 1; i < expressions.size(); ++i)
00055       expression << " OR (" << expressions[i] << ")";
00056     parse( expression.str() );
00057   }
00058 }
00059 
00060 void TriggerResultsFilter::parse(const std::string & expression) {
00061   // parse the logical expressions into functionals
00062   m_expression = triggerExpression::parse( expression );
00063 
00064   // check if the expressions were parsed correctly
00065   if (not m_expression)
00066     edm::LogWarning("Configuration") << "Couldn't parse trigger results expression \"" << expression << "\"";
00067 }
00068 
00069 bool TriggerResultsFilter::filter(edm::Event & event, const edm::EventSetup & setup)
00070 {
00071   if (not m_expression)
00072     // no valid expression has been parsed
00073     return false;
00074 
00075   if (not m_eventCache.setEvent(event, setup))
00076     // couldn't properly access all information from the Event
00077     return false;
00078 
00079   // if the L1 or HLT configurations have changed, (re)initialize the filters (including during the first event)
00080   if (m_eventCache.configurationUpdated()) {
00081     m_expression->init(m_eventCache);
00082 
00083     // log the expanded configuration
00084     edm::LogInfo("Configuration") << "TriggerResultsFilter configuration updated: " << *m_expression;
00085   }
00086 
00087   // run the trigger results filter
00088   return (*m_expression)(m_eventCache);
00089 }
00090 
00091 // register as framework plugin
00092 #include "FWCore/Framework/interface/MakerMacros.h"
00093 DEFINE_FWK_MODULE(TriggerResultsFilter);