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
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
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
00062 m_expression = triggerExpression::parse( expression );
00063
00064
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
00073 return false;
00074
00075 if (not m_eventCache.setEvent(event, setup))
00076
00077 return false;
00078
00079
00080 if (m_eventCache.configurationUpdated()) {
00081 m_expression->init(m_eventCache);
00082
00083
00084 edm::LogInfo("Configuration") << "TriggerResultsFilter configuration updated: " << *m_expression;
00085 }
00086
00087
00088 return (*m_expression)(m_eventCache);
00089 }
00090
00091
00092 #include "FWCore/Framework/interface/MakerMacros.h"
00093 DEFINE_FWK_MODULE(TriggerResultsFilter);