Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <memory>
00015 #include <iostream>
00016
00017
00018 #include "DQMOffline/Trigger/interface/HLTMuonMatchAndPlot.h"
00019
00020 #include "DQMServices/Core/interface/DQMStore.h"
00021
00022 #include "FWCore/Framework/interface/Frameworkfwd.h"
00023 #include "FWCore/Framework/interface/EDAnalyzer.h"
00024
00025
00026
00027 #include "FWCore/Framework/interface/MakerMacros.h"
00028 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00030
00031
00032 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
00033 #include "FWCore/ServiceRegistry/interface/Service.h"
00034
00035
00036 #include "TFile.h"
00037 #include "TDirectory.h"
00038 #include "TPRegexp.h"
00039
00040
00043
00044
00045
00046 class HLTMuonOfflineAnalyzer : public edm::EDAnalyzer {
00047
00048 public:
00049
00050 explicit HLTMuonOfflineAnalyzer(const edm::ParameterSet&);
00051
00052 private:
00053
00054
00055 virtual void beginJob();
00056 virtual void beginRun(const edm::Run &, const edm::EventSetup &);
00057 virtual void analyze(const edm::Event &, const edm::EventSetup &);
00058 virtual void endRun(const edm::Run &, const edm::EventSetup &);
00059 virtual void endJob();
00060
00061
00062 std::vector<std::string> moduleLabels(std::string);
00063
00064
00065 edm::ParameterSet pset_;
00066 std::string hltProcessName_;
00067 std::string destination_;
00068 std::vector<std::string> hltPathsToCheck_;
00069
00070
00071 std::vector<HLTMuonMatchAndPlot> analyzers_;
00072 HLTConfigProvider hltConfig_;
00073
00074
00075 DQMStore * dbe_;
00076
00077 };
00078
00079
00080
00083
00084 using namespace std;
00085 using namespace edm;
00086 using namespace reco;
00087 using namespace trigger;
00088
00089 typedef vector<string> vstring;
00090
00091
00092
00095
00096 HLTMuonOfflineAnalyzer::HLTMuonOfflineAnalyzer(const ParameterSet& pset) :
00097 pset_(pset),
00098 hltProcessName_(pset.getParameter<string>("hltProcessName")),
00099 destination_(pset.getUntrackedParameter<string>("destination")),
00100 hltPathsToCheck_(pset.getParameter<vstring>("hltPathsToCheck"))
00101 {
00102
00103 dbe_ = edm::Service<DQMStore>().operator->();
00104 dbe_->setVerbose(0);
00105 dbe_->setCurrentFolder(destination_);
00106 }
00107
00108
00109
00110 vector<string>
00111 HLTMuonOfflineAnalyzer::moduleLabels(string path) {
00112
00113 vector<string> modules = hltConfig_.moduleLabels(path);
00114 vector<string>::iterator iter = modules.begin();
00115
00116 while (iter != modules.end())
00117 if (iter->find("Filtered") == string::npos)
00118 iter = modules.erase(iter);
00119 else
00120 ++iter;
00121
00122 return modules;
00123
00124 }
00125
00126
00127
00128 void
00129 HLTMuonOfflineAnalyzer::beginRun(const edm::Run & iRun,
00130 const edm::EventSetup & iSetup) {
00131
00132
00133 bool changedConfig;
00134 if (!hltConfig_.init(iRun, iSetup, hltProcessName_, changedConfig)) {
00135 LogError("HLTMuonVal") << "Initialization of HLTConfigProvider failed!!";
00136 return;
00137 }
00138
00139
00140 set<string> hltPaths;
00141 for (size_t i = 0; i < hltPathsToCheck_.size(); i++) {
00142 TPRegexp pattern(hltPathsToCheck_[i]);
00143 for (size_t j = 0; j < hltConfig_.triggerNames().size(); j++)
00144 if (TString(hltConfig_.triggerNames()[j]).Contains(pattern))
00145 hltPaths.insert(hltConfig_.triggerNames()[j]);
00146 }
00147
00148
00149 analyzers_.clear();
00150 set<string>::iterator iPath;
00151 for (iPath = hltPaths.begin(); iPath != hltPaths.end(); iPath++) {
00152 string path = * iPath;
00153 vector<string> labels = moduleLabels(path);
00154 if (labels.size() > 0) {
00155 HLTMuonMatchAndPlot analyzer(pset_, path, moduleLabels(path));
00156 analyzers_.push_back(analyzer);
00157 }
00158 }
00159
00160
00161 vector<HLTMuonMatchAndPlot>::iterator iter;
00162 for (iter = analyzers_.begin(); iter != analyzers_.end(); ++iter) {
00163 iter->beginRun(iRun, iSetup);
00164 }
00165
00166 }
00167
00168 void
00169 HLTMuonOfflineAnalyzer::analyze(const Event& iEvent,
00170 const EventSetup& iSetup)
00171 {
00172
00173 vector<HLTMuonMatchAndPlot>::iterator iter;
00174 for (iter = analyzers_.begin(); iter != analyzers_.end(); ++iter) {
00175 iter->analyze(iEvent, iSetup);
00176 }
00177
00178 }
00179
00180
00181
00182 void
00183 HLTMuonOfflineAnalyzer::beginJob()
00184 {
00185 }
00186
00187
00188
00189 void
00190 HLTMuonOfflineAnalyzer::endRun(const edm::Run & iRun,
00191 const edm::EventSetup& iSetup)
00192 {
00193
00194
00195
00196
00197
00198
00199 }
00200
00201
00202
00203 void
00204 HLTMuonOfflineAnalyzer::endJob()
00205 {
00206 }
00207
00208
00209
00210
00211 DEFINE_FWK_MODULE(HLTMuonOfflineAnalyzer);