Go to the documentation of this file.00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020 #include "FWCore/Framework/interface/EDFilter.h"
00021 #include "FWCore/Framework/interface/Event.h"
00022 #include "FWCore/Framework/interface/MakerMacros.h"
00023 #include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h"
00024 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00025 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00026 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00027
00028
00029 #include <memory>
00030
00031
00032
00033
00034
00035 class LogErrorFilter : public edm::EDFilter {
00036 public:
00037 explicit LogErrorFilter(edm::ParameterSet const&);
00038 ~LogErrorFilter();
00039 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
00040
00041 private:
00042 virtual bool filter(edm::Event&, edm::EventSetup const&);
00043
00044
00045 edm::InputTag harvesterTag_;
00046 bool atLeastOneError_;
00047 bool atLeastOneWarning_;
00048 bool atLeastOneEntry_;
00049 std::vector<std::string> avoidCategories_;
00050
00051 };
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 LogErrorFilter::LogErrorFilter(edm::ParameterSet const& iConfig) :
00065 harvesterTag_(iConfig.getParameter<edm::InputTag>("harvesterTag")),
00066 atLeastOneError_(iConfig.getParameter<bool>("atLeastOneError")),
00067 atLeastOneWarning_(iConfig.getParameter<bool>("atLeastOneWarning")),
00068 atLeastOneEntry_(atLeastOneError_ && atLeastOneWarning_),
00069 avoidCategories_(iConfig.getParameter<std::vector<std::string> >("avoidCategories")) {
00070 if(!atLeastOneError_ && !atLeastOneWarning_) {
00071 throw edm::Exception(edm::errors::Configuration) <<
00072 "Useless configuration of the error/warning filter. Need to select on an error or a warning or both.\n";
00073 }
00074 }
00075
00076 LogErrorFilter::~LogErrorFilter() {
00077
00078
00079 }
00080
00081
00082
00083
00084
00085
00086 bool
00087 LogErrorFilter::filter(edm::Event& iEvent, edm::EventSetup const&) {
00088 edm::Handle<std::vector<edm::ErrorSummaryEntry> > errorsAndWarnings;
00089 iEvent.getByLabel(harvesterTag_,errorsAndWarnings);
00090
00091 if(errorsAndWarnings.failedToGet()) {
00092 return false;
00093 } else {
00094 if(atLeastOneEntry_) {
00095 if(avoidCategories_.size() != 0) {
00096 for(unsigned int iE = 0; iE != errorsAndWarnings->size(); ++iE) {
00097
00098 if(std::find(avoidCategories_.begin(),avoidCategories_.end(), ((*errorsAndWarnings)[iE]).category) != avoidCategories_.end()) {
00099 continue;
00100 } else {
00101 return true;
00102 }
00103 }
00104 return false;
00105 } else {
00106 return (errorsAndWarnings->size() != 0);
00107 }
00108 } else {
00109 if(atLeastOneError_ || atLeastOneWarning_) {
00110 unsigned int nError = 0;
00111 unsigned int nWarning = 0;
00112 for(unsigned int iE = 0; iE != errorsAndWarnings->size(); ++iE) {
00113
00114 if(avoidCategories_.size() != 0) {
00115 if(std::find(avoidCategories_.begin(),avoidCategories_.end(), ((*errorsAndWarnings)[iE]).category) != avoidCategories_.end()) {
00116 continue;
00117 }
00118 }
00119 edm::ELseverityLevel const& severity = ((*errorsAndWarnings)[iE]).severity;
00120
00121 if(severity.getLevel() == edm::ELseverityLevel::ELsev_error || severity.getLevel() == edm::ELseverityLevel::ELsev_error2) {
00122 ++nError;
00123 }
00124
00125 if(severity.getLevel() == edm::ELseverityLevel::ELsev_warning || severity.getLevel() == edm::ELseverityLevel::ELsev_warning2) {
00126 ++nWarning;
00127 }
00128 }
00129 if(atLeastOneError_ && nError != 0) {
00130 return (true);
00131 }
00132 if(atLeastOneWarning_ && nWarning != 0) {
00133 return (true);
00134 }
00135 }
00136 }
00137 }
00138 return (false);
00139 }
00140
00141 void
00142 LogErrorFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
00143 edm::ParameterSetDescription desc;
00144 desc.add<edm::InputTag>("harvesterTag");
00145 desc.add<bool>("atLeastOneError");
00146 desc.add<bool>("atLeastOneWarning");
00147 desc.add<std::vector<std::string> >("avoidCategories");
00148 descriptions.add("logErrorFilter", desc);
00149 }
00150
00151
00152 DEFINE_FWK_MODULE(LogErrorFilter);