00001
00002
00003
00004
00005
00026
00027
00028
00029
00030
00031
00032
00033 #include "DQM/TrackingMonitor/plugins/LogMessageMonitor.h"
00034
00035 #include "DQMServices/Core/interface/DQMStore.h"
00036 #include "DQMServices/Core/interface/MonitorElement.h"
00037 #include "DataFormats/Common/interface/Handle.h"
00038
00039 #include "FWCore/MessageLogger/interface/ELseverityLevel.h"
00040 #include "FWCore/MessageLogger/interface/ELstring.h"
00041 #include "FWCore/MessageLogger/interface/ErrorSummaryEntry.h"
00042 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00043
00044 #include "DQM/TrackingMonitor/interface/GetLumi.h"
00045 #include "CommonTools/TriggerUtils/interface/GenericTriggerEventFlag.h"
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 LogMessageMonitor::LogMessageMonitor(const edm::ParameterSet& iConfig)
00058 : dqmStore_( edm::Service<DQMStore>().operator->() )
00059 , conf_ ( iConfig )
00060 , pluginsMonName_ ( iConfig.getParameter<std::string> ("pluginsMonName") )
00061 , modules_vector_ ( iConfig.getParameter<std::vector<std::string> >("modules") )
00062 , categories_vector_ ( iConfig.getParameter<std::vector<std::string> >("categories") )
00063 , doWarningsPlots_ ( iConfig.getParameter<bool> ("doWarningsPlots") )
00064 , doPUmonitoring_ ( iConfig.getParameter<bool> ("doPUmonitoring") )
00065 {
00066
00067 lumiDetails_ = new GetLumi( iConfig.getParameter<edm::ParameterSet>("BXlumiSetup") );
00068 genTriggerEventFlag_ = new GenericTriggerEventFlag(iConfig);
00069 }
00070
00071
00072 LogMessageMonitor::~LogMessageMonitor()
00073 {
00074
00075
00076
00077
00078 if ( genTriggerEventFlag_ ) delete genTriggerEventFlag_;
00079
00080 }
00081
00082
00083
00084
00085
00086
00087
00088 void
00089 LogMessageMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00090 {
00091
00092
00093 if (genTriggerEventFlag_->on()&& ! genTriggerEventFlag_->accept( iEvent, iSetup) ) return;
00094
00095 double BXlumi = -1.;
00096 if ( doPUmonitoring_ )
00097 lumiDetails_->getValue(iEvent);
00098
00099
00100 edm::Handle<std::vector<edm::ErrorSummaryEntry> > errors;
00101 iEvent.getByLabel("logErrorHarvester",errors);
00102
00103 if(!errors.isValid()) return;
00104
00105 edm::ELseverityLevel el("-e");
00106
00107
00108 if(errors->size()==0){
00109 if ( doPUmonitoring_ ) {
00110 for(size_t i = 0; i < modulesMap.size(); i++) {
00111 ModulesErrorsVsBXlumi[i] -> Fill(BXlumi,0.);
00112 if ( doWarningsPlots_ )
00113 ModulesWarningsVsBXlumi[i] -> Fill(BXlumi,0.);
00114 }
00115 }
00116 } else {
00117
00118 size_t nCategories = categories_vector_.size();
00119
00120 for( size_t i = 0, n = errors->size();
00121 i < n ; i++){
00122
00123
00124
00125
00126 std::string s = (*errors)[i].module;
00127
00128 size_t pos = s.find(':');
00129 std::string s_temp = s.substr(pos+1,s.size());
00130 std::map<std::string,int>::const_iterator it = modulesMap.find(s_temp);
00131
00132 if (it!=modulesMap.end()){
00133
00134 if((*errors)[i].severity.getLevel() >= el.getLevel()){
00135
00136
00137
00138
00139 if ( doPUmonitoring_ )
00140 ModulesErrorsVsBXlumi[it->second]->Fill (BXlumi, (*errors)[i].count);
00141
00142
00143
00144
00145
00146 for (size_t icategory = 0; icategory < nCategories-1; icategory++) {
00147 if ( (*errors)[i].category==categories_vector_[icategory] )
00148 CategoriesVsModules->Fill(it->second,icategory);
00149 else
00150 CategoriesVsModules->Fill(it->second,nCategories-1);
00151 }
00152
00153 } else {
00154
00155 if ( doWarningsPlots_ )
00156 if ( doPUmonitoring_ )
00157 ModulesWarningsVsBXlumi[it->second]->Fill(BXlumi, (*errors)[i].count);
00158 }
00159 }
00160 }
00161 }
00162 }
00163
00164
00165
00166 void
00167 LogMessageMonitor::beginJob()
00168 {
00169 std::string MEFolderName = conf_.getParameter<std::string>("LogFolderName");
00170
00171 dqmStore_->setCurrentFolder(MEFolderName);
00172
00173 categories_vector_.push_back("others");
00174 size_t nModules = modules_vector_.size();
00175 size_t nCategories = categories_vector_.size();
00176
00177 histname = pluginsMonName_+"ErrorsVsModules";
00178 CategoriesVsModules = dqmStore_->book2D(histname, histname, nModules, 0., double(nModules), nCategories, 0., double(nCategories) );
00179 CategoriesVsModules->setAxisTitle("modules",1);
00180 for (size_t imodule = 0; imodule < nModules; imodule++)
00181 CategoriesVsModules->setBinLabel(imodule+1,modules_vector_[imodule],1);
00182 CategoriesVsModules->setAxisTitle("categories",2);
00183 for (size_t icategories = 0; icategories < nCategories; icategories++)
00184 CategoriesVsModules->setBinLabel(icategories+1,categories_vector_[icategories],2);
00185
00186
00187 for (size_t i = 0; i < modules_vector_.size(); i++){
00188 modulesMap.insert( std::pair<std::string,int>(modules_vector_[i],i) );
00189 }
00190
00191 if ( doPUmonitoring_ ) {
00192
00193
00194 edm::ParameterSet BXlumiParameters = conf_.getParameter<edm::ParameterSet>("BXlumiSetup");
00195 int BXlumiBin = BXlumiParameters.getParameter<int>("BXlumiBin");
00196 double BXlumiMin = BXlumiParameters.getParameter<double>("BXlumiMin");
00197 double BXlumiMax = BXlumiParameters.getParameter<double>("BXlumiMax");
00198
00199 size_t i = 0;
00200 for(std::map<std::string,int>::const_iterator it = modulesMap.begin();
00201 it != modulesMap.end(); ++it, i++){
00202
00203 dqmStore_->setCurrentFolder(MEFolderName + "/PUmonitoring/Errors");
00204
00205 histname = "errorsVsBXlumi_" + it->first;
00206 ModulesErrorsVsBXlumi.push_back( dynamic_cast<MonitorElement*>(dqmStore_->bookProfile( histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, 0.,100, "")) );
00207 ModulesErrorsVsBXlumi[i] -> setAxisTitle("BXlumi [10^{30} Hz cm^{-2}]", 1);
00208 ModulesErrorsVsBXlumi[i] -> setAxisTitle("Mean number of errors", 2);
00209
00210 if ( doWarningsPlots_ ) {
00211 dqmStore_->setCurrentFolder(MEFolderName + "/PUmonitoring/Warnings");
00212
00213 histname = "warningVsBXlumi_" + it->first;
00214 ModulesWarningsVsBXlumi.push_back( dynamic_cast<MonitorElement*>(dqmStore_->bookProfile( histname, histname, BXlumiBin, BXlumiMin, BXlumiMax, 0.,100, "")) );
00215 ModulesWarningsVsBXlumi[i] -> setAxisTitle("BXlumi [10^{30} Hz cm^{-2}]", 1);
00216 ModulesWarningsVsBXlumi[i] -> setAxisTitle("Mean number of warnings", 2);
00217 }
00218 }
00219 }
00220
00221 }
00222
00223
00224 void
00225 LogMessageMonitor::endJob()
00226 {
00227 bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
00228 std::string outputFileName = conf_.getParameter<std::string>("OutputFileName");
00229 if(outputMEsInRootFile)
00230 {
00231 dqmStore_->showDirStructure();
00232 dqmStore_->save(outputFileName);
00233 }
00234 }
00235
00236
00237 void
00238 LogMessageMonitor::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup)
00239 {
00240 if ( genTriggerEventFlag_->on() ) genTriggerEventFlag_->initRun( iRun, iSetup );
00241 }
00242
00243
00244 void
00245 LogMessageMonitor::endRun(edm::Run const&, edm::EventSetup const&)
00246 {
00247 }
00248
00249
00250 void
00251 LogMessageMonitor::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
00252 {
00253 }
00254
00255
00256 void
00257 LogMessageMonitor::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
00258 {
00259 }
00260
00261
00262 void
00263 LogMessageMonitor::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
00264
00265
00266 edm::ParameterSetDescription desc;
00267 desc.setUnknown();
00268 descriptions.addDefault(desc);
00269 }
00270
00271
00272 DEFINE_FWK_MODULE(LogMessageMonitor);