00001 #include "DQMOffline/Trigger/interface/EgHLTOfflineSource.h"
00002
00003 #include "DQMOffline/Trigger/interface/EgHLTEleHLTFilterMon.h"
00004 #include "DQMOffline/Trigger/interface/EgHLTPhoHLTFilterMon.h"
00005
00006 #include "DQMOffline/Trigger/interface/EgHLTDebugFuncs.h"
00007 #include "DQMOffline/Trigger/interface/EgHLTDQMCut.h"
00008 #include "DQMOffline/Trigger/interface/EgHLTMonElemFuncs.h"
00009 #include "DQMOffline/Trigger/interface/EgHLTTrigTools.h"
00010
00011 #include "DQMServices/Core/interface/MonitorElement.h"
00012
00013 #include "FWCore/Framework/interface/Run.h"
00014 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
00015
00016 #include <boost/algorithm/string.hpp>
00017
00018
00019 #include "DataFormats/TrackReco/interface/Track.h"
00020 #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
00021 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00022 using namespace egHLT;
00023
00024 EgHLTOfflineSource::EgHLTOfflineSource(const edm::ParameterSet& iConfig):
00025 nrEventsProcessed_(0),isSetup_(false)
00026 {
00027 dbe_ = edm::Service<DQMStore>().operator->();
00028 if (!dbe_) {
00029
00030 edm::LogInfo("EgHLTOfflineSource") << "unable to get DQMStore service?";
00031 }
00032 if(iConfig.getUntrackedParameter<bool>("DQMStore", false)) {
00033 dbe_->setVerbose(0);
00034 }
00035
00036
00037 binData_.setup(iConfig.getParameter<edm::ParameterSet>("binData"));
00038 cutMasks_.setup(iConfig.getParameter<edm::ParameterSet>("cutMasks"));
00039 eleHLTFilterNames_ = iConfig.getParameter<std::vector<std::string> >("eleHLTFilterNames");
00040 phoHLTFilterNames_ = iConfig.getParameter<std::vector<std::string> >("phoHLTFilterNames");
00041 eleTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("eleTightLooseTrigNames");
00042 diEleTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("diEleTightLooseTrigNames");
00043 phoTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("phoTightLooseTrigNames");
00044 diPhoTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("diPhoTightLooseTrigNames");
00045
00046 filterInactiveTriggers_ =iConfig.getParameter<bool>("filterInactiveTriggers");
00047 hltTag_ = iConfig.getParameter<std::string>("hltTag");
00048
00049
00050 dirName_=iConfig.getParameter<std::string>("DQMDirName");
00051
00052
00053 offEvtHelper_.setup(iConfig);
00054
00055 }
00056
00057
00058 EgHLTOfflineSource::~EgHLTOfflineSource()
00059 {
00060
00061 for(size_t i=0;i<eleFilterMonHists_.size();i++){
00062 delete eleFilterMonHists_[i];
00063 }
00064 for(size_t i=0;i<phoFilterMonHists_.size();i++){
00065 delete phoFilterMonHists_[i];
00066 }
00067 for(size_t i=0;i<eleMonElems_.size();i++){
00068 delete eleMonElems_[i];
00069 }
00070 for(size_t i=0;i<phoMonElems_.size();i++){
00071 delete phoMonElems_[i];
00072 }
00073 }
00074
00075 void EgHLTOfflineSource::beginJob()
00076 {
00077 if(dbe_) {
00078 dbe_->setCurrentFolder(dirName_);
00079
00080 dqmErrsMonElem_ =dbe_->book1D("dqmErrors","EgHLTOfflineSource Errors",101,-0.5,100.5);
00081 nrEventsProcessedMonElem_ = dbe_->bookInt("nrEventsProcessed");
00082 }
00083 }
00084
00085 void EgHLTOfflineSource::endJob()
00086 {
00087
00088 }
00089
00090
00091
00092
00093
00094 void EgHLTOfflineSource::beginRun(const edm::Run& run, const edm::EventSetup& c)
00095 {
00096 if(dbe_ && !isSetup_){
00097
00098 HLTConfigProvider hltConfig;
00099 bool changed=false;
00100 hltConfig.init(run,c,hltTag_,changed);
00101 if(filterInactiveTriggers_) filterTriggers(hltConfig);
00102
00103 std::vector<std::string> hltFiltersUsed;
00104 getHLTFilterNamesUsed(hltFiltersUsed);
00105 TrigCodes::setCodes(hltFiltersUsed);
00106
00107 offEvtHelper_.setupTriggers(hltConfig,hltFiltersUsed);
00108
00109
00110 dbe_->setCurrentFolder(dirName_+"/Source_Histos");
00111
00112 for(size_t i=0;i<eleHLTFilterNames_.size();i++){dbe_->setCurrentFolder(dirName_+"/Source_Histos/"+eleHLTFilterNames_[i]); addEleTrigPath(eleHLTFilterNames_[i]);}
00113 for(size_t i=0;i<phoHLTFilterNames_.size();i++){dbe_->setCurrentFolder(dirName_+"/Source_Histos/"+phoHLTFilterNames_[i]); addPhoTrigPath(phoHLTFilterNames_[i]);}
00114
00115
00116 MonElemFuncs::initTightLooseTrigHists(eleMonElems_,eleTightLooseTrigNames_,binData_,"gsfEle");
00118 MonElemFuncs::initTightLooseTrigHistsTrigCuts(eleMonElems_,eleTightLooseTrigNames_,binData_);
00119
00120
00121 MonElemFuncs::initTightLooseTrigHists(phoMonElems_,phoTightLooseTrigNames_,binData_,"pho");
00122
00123
00124
00125
00126 MonElemFuncs::initTightLooseTrigHists(eleMonElems_,diEleTightLooseTrigNames_,binData_,"gsfEle");
00127
00128 MonElemFuncs::initTightLooseTrigHists(phoMonElems_,diPhoTightLooseTrigNames_,binData_,"pho");
00129
00130
00131 MonElemFuncs::initTightLooseDiObjTrigHistsTrigCuts(eleMonElems_,diEleTightLooseTrigNames_,binData_);
00132 MonElemFuncs::initTightLooseDiObjTrigHistsTrigCuts(phoMonElems_,diPhoTightLooseTrigNames_,binData_);
00133
00134
00135
00136
00137
00138 for(size_t i=0;i<eleHLTFilterNames_.size();i++){
00139 dbe_->setCurrentFolder(dirName_+"/Source_Histos/"+eleHLTFilterNames_[i]);
00140 MonElemFuncs::initTrigTagProbeHist(eleMonElems_,eleHLTFilterNames_[i],cutMasks_.trigTPEle,binData_);
00141 }
00142
00143
00144
00145
00146 isSetup_=true;
00147
00148 }
00149 }
00150
00151
00152 void EgHLTOfflineSource::endRun(const edm::Run& run, const edm::EventSetup& c)
00153 {
00154
00155 }
00156
00157
00158 void EgHLTOfflineSource::analyze(const edm::Event& iEvent,const edm::EventSetup& iSetup)
00159 {
00160
00161
00162
00163
00164 if(!dbe_) return;
00165
00166
00167
00168
00169
00170 const double weight=1.;
00171 nrEventsProcessed_++;
00172 nrEventsProcessedMonElem_->Fill(nrEventsProcessed_);
00173 int errCode = offEvtHelper_.makeOffEvt(iEvent,iSetup,offEvt_);
00174 if(errCode!=0){
00175 dqmErrsMonElem_->Fill(errCode);
00176 return;
00177 }
00178
00179
00180 for(size_t pathNr=0;pathNr<eleFilterMonHists_.size();pathNr++){
00181 eleFilterMonHists_[pathNr]->fill(offEvt_,weight);
00182 }
00183 for(size_t pathNr=0;pathNr<phoFilterMonHists_.size();pathNr++){
00184 phoFilterMonHists_[pathNr]->fill(offEvt_,weight);
00185 }
00186
00187 for(size_t monElemNr=0;monElemNr<eleMonElems_.size();monElemNr++){
00188 const std::vector<OffEle>& eles = offEvt_.eles();
00189 for(size_t eleNr=0;eleNr<eles.size();eleNr++){
00190 eleMonElems_[monElemNr]->fill(eles[eleNr],offEvt_,weight);
00191 }
00192 }
00193
00194 for(size_t monElemNr=0;monElemNr<phoMonElems_.size();monElemNr++){
00195 const std::vector<OffPho>& phos = offEvt_.phos();
00196 for(size_t phoNr=0;phoNr<phos.size();phoNr++){
00197 phoMonElems_[monElemNr]->fill(phos[phoNr],offEvt_,weight);
00198 }
00199 }
00200 }
00201
00202
00203 void EgHLTOfflineSource::addEleTrigPath(const std::string& name)
00204 {
00205 EleHLTFilterMon* filterMon = new EleHLTFilterMon(name,TrigCodes::getCode(name.c_str()),binData_,cutMasks_);
00206 eleFilterMonHists_.push_back(filterMon);
00207 std::sort(eleFilterMonHists_.begin(),eleFilterMonHists_.end(),EleHLTFilterMon::ptrLess<EleHLTFilterMon>());
00208 }
00209
00210 void EgHLTOfflineSource::addPhoTrigPath(const std::string& name)
00211 {
00212 PhoHLTFilterMon* filterMon = new PhoHLTFilterMon(name,TrigCodes::getCode(name.c_str()),binData_,cutMasks_);
00213 phoFilterMonHists_.push_back(filterMon);
00214 std::sort(phoFilterMonHists_.begin(),phoFilterMonHists_.end(),PhoHLTFilterMon::ptrLess<PhoHLTFilterMon>());
00215 }
00216
00217
00218
00219
00220
00221
00222
00223
00224 void EgHLTOfflineSource::getHLTFilterNamesUsed(std::vector<std::string>& filterNames)const
00225 {
00226 std::set<std::string> filterNameSet;
00227 for(size_t i=0;i<eleHLTFilterNames_.size();i++) filterNameSet.insert(eleHLTFilterNames_[i]);
00228 for(size_t i=0;i<phoHLTFilterNames_.size();i++) filterNameSet.insert(phoHLTFilterNames_[i]);
00229
00230
00231 for(size_t tightLooseNr=0;tightLooseNr<eleTightLooseTrigNames_.size();tightLooseNr++){
00232 std::vector<std::string> trigNames;
00233 boost::split(trigNames,eleTightLooseTrigNames_[tightLooseNr],boost::is_any_of(std::string(":")));
00234 if(trigNames.size()!=2) continue;
00235 filterNameSet.insert(trigNames[0]);
00236 filterNameSet.insert(trigNames[1]);
00237 }
00238 for(size_t tightLooseNr=0;tightLooseNr<diEleTightLooseTrigNames_.size();tightLooseNr++){
00239 std::vector<std::string> trigNames;
00240 boost::split(trigNames,diEleTightLooseTrigNames_[tightLooseNr],boost::is_any_of(std::string(":")));
00241 if(trigNames.size()!=2) continue;
00242 filterNameSet.insert(trigNames[0]);
00243 filterNameSet.insert(trigNames[1]);
00244 }
00245 for(size_t tightLooseNr=0;tightLooseNr<phoTightLooseTrigNames_.size();tightLooseNr++){
00246 std::vector<std::string> trigNames;
00247 boost::split(trigNames,phoTightLooseTrigNames_[tightLooseNr],boost::is_any_of(std::string(":")));
00248 if(trigNames.size()!=2) continue;
00249 filterNameSet.insert(trigNames[0]);
00250 filterNameSet.insert(trigNames[1]);
00251 }
00252 for(size_t tightLooseNr=0;tightLooseNr<diPhoTightLooseTrigNames_.size();tightLooseNr++){
00253 std::vector<std::string> trigNames;
00254 boost::split(trigNames,diPhoTightLooseTrigNames_[tightLooseNr],boost::is_any_of(std::string(":")));
00255 if(trigNames.size()!=2) continue;
00256 filterNameSet.insert(trigNames[0]);
00257 filterNameSet.insert(trigNames[1]);
00258 }
00259
00260
00261 std::vector<std::string>(filterNameSet.begin(),filterNameSet.end()).swap(filterNames);
00262 }
00263
00264 void EgHLTOfflineSource::filterTriggers(const HLTConfigProvider& hltConfig)
00265 {
00266
00267 std::vector<std::string> activeFilters;
00268
00269 trigTools::getActiveFilters(hltConfig,activeFilters);
00270
00271
00272
00273
00274
00275
00276 trigTools::filterInactiveTriggers(eleHLTFilterNames_,activeFilters);
00277 trigTools::filterInactiveTriggers(phoHLTFilterNames_,activeFilters);
00278 trigTools::filterInactiveTightLooseTriggers(eleTightLooseTrigNames_,activeFilters);
00279 trigTools::filterInactiveTightLooseTriggers(diEleTightLooseTrigNames_,activeFilters);
00280 trigTools::filterInactiveTightLooseTriggers(phoTightLooseTrigNames_,activeFilters);
00281 trigTools::filterInactiveTightLooseTriggers(diPhoTightLooseTrigNames_,activeFilters);
00282 }