CMS 3D CMS Logo

EgHLTOfflineSource.cc
Go to the documentation of this file.
2 
5 
9 
11 
14 
15 #include <boost/algorithm/string.hpp>
16 
17 //#include "DQMOffline/Trigger/interface/EgHLTCutCodes.h"
21 using namespace egHLT;
22 
23 EgHLTOfflineSource::EgHLTOfflineSource(const edm::ParameterSet& iConfig) : nrEventsProcessed_(0) {
24  binData_.setup(iConfig.getParameter<edm::ParameterSet>("binData"));
25  cutMasks_.setup(iConfig.getParameter<edm::ParameterSet>("cutMasks"));
26  eleHLTFilterNames_ = iConfig.getParameter<std::vector<std::string> >("eleHLTFilterNames");
27  eleHLTFilterNames2Leg_ = iConfig.getParameter<std::vector<std::string> >("eleHLTFilterNames2Leg");
28  phoHLTFilterNames_ = iConfig.getParameter<std::vector<std::string> >("phoHLTFilterNames");
29  eleTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("eleTightLooseTrigNames");
30  diEleTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("diEleTightLooseTrigNames");
31  phoTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("phoTightLooseTrigNames");
32  diPhoTightLooseTrigNames_ = iConfig.getParameter<std::vector<std::string> >("diPhoTightLooseTrigNames");
33 
34  filterInactiveTriggers_ = iConfig.getParameter<bool>("filterInactiveTriggers");
35  hltTag_ = iConfig.getParameter<std::string>("hltTag");
36  dohep_ = iConfig.getParameter<bool>("doHEP");
37 
39  "DQMDirName"); //"HLT/EgHLTOfflineSource_" + iConfig.getParameter<std::string>("@module_label");
40 
41  subdirName_ = iConfig.getParameter<std::string>("subDQMDirName");
42 
43  offEvtHelper_.setup(iConfig, consumesCollector());
44 }
45 
47  // LogDebug("EgHLTOfflineSource") << "destructor called";
48  for (auto& eleFilterMonHist : eleFilterMonHists_) {
49  delete eleFilterMonHist;
50  }
51  for (auto& phoFilterMonHist : phoFilterMonHists_) {
52  delete phoFilterMonHist;
53  }
54  for (auto& eleMonElem : eleMonElems_) {
55  delete eleMonElem;
56  }
57  for (auto& phoMonElem : phoMonElems_) {
58  delete phoMonElem;
59  }
60 }
61 
63  iBooker.setCurrentFolder(dirName_);
64 
65  //the one monitor element the source fills directly
66  dqmErrsMonElem_ = iBooker.book1D("dqmErrors", "EgHLTOfflineSource Errors", 101, -0.5, 100.5);
67  nrEventsProcessedMonElem_ = iBooker.bookInt("nrEventsProcessed");
68 
69  //if the HLTConfig changes during the job, the results are "un predictable" but in practice should be fine
70  //the HLTConfig is used for working out which triggers are active, working out which filternames correspond to paths and L1 seeds
71  //assuming those dont change for E/g it *should* be fine
73  bool changed = false;
74  hltConfig.init(run, c, hltTag_, changed);
77 
78  std::vector<std::string> hltFiltersUsed;
79  getHLTFilterNamesUsed(hltFiltersUsed);
80  trigCodes.reset(TrigCodes::makeCodes(hltFiltersUsed));
81 
83 
84  MonElemFuncs monElemFuncs(iBooker, *trigCodes);
85 
86  //now book ME's
87  iBooker.setCurrentFolder(dirName_ + "/" + subdirName_);
88  //each trigger path with generate object distributions and efficiencies (BUT not trigger efficiencies...)
89  for (auto const& eleHLTFilterName : eleHLTFilterNames_) {
90  iBooker.setCurrentFolder(dirName_ + "/" + subdirName_ + "/" + eleHLTFilterName);
91  addEleTrigPath(monElemFuncs, eleHLTFilterName);
92  }
93  for (auto const& phoHLTFilterName : phoHLTFilterNames_) {
94  iBooker.setCurrentFolder(dirName_ + "/" + subdirName_ + "/" + phoHLTFilterName);
95  addPhoTrigPath(monElemFuncs, phoHLTFilterName);
96  }
97  //efficiencies of one trigger path relative to another
99  //new EgHLTDQMVarCut<OffEle>(cutMasks_.stdEle,&OffEle::cutCode));
100  //monElemFuncs.initTightLooseTrigHistsTrigCuts(eleMonElems_,eleTightLooseTrigNames_,binData_);
101 
103  // new EgHLTDQMVarCut<OffPho>(cutMasks_.stdPho,&OffPho::cutCode));
104  //monElemFuncs.initTightLooseTrigHistsTrigCuts(phoMonElems_,phoTightLooseTrigNames_,binData_);
105 
106  //di-object triggers
108  // new EgDiEleCut(cutMasks_.stdEle,&OffEle::cutCode));
110  // new EgDiPhoCut(cutMasks_.stdPho,&OffPho::cutCode));
111 
114 
115  //tag and probe trigger efficiencies
116  //this is to do measure the trigger efficiency with respect to a fully selected offline electron
117  //using a tag and probe technique (note: this will be different to the trigger efficiency normally calculated)
118  bool doTrigTagProbeEff = false;
119  if (doTrigTagProbeEff && (!dohep_)) {
120  for (auto const& eleHLTFilterName : eleHLTFilterNames_) {
121  iBooker.setCurrentFolder(dirName_ + "/" + subdirName_ + "/" + eleHLTFilterName);
122  monElemFuncs.initTrigTagProbeHist(eleMonElems_, eleHLTFilterName, cutMasks_.trigTPEle, binData_);
123  }
124  for (auto const& phoHLTFilterName : phoHLTFilterNames_) {
125  iBooker.setCurrentFolder(dirName_ + "/" + subdirName_ + "/" + phoHLTFilterName);
126  monElemFuncs.initTrigTagProbeHist(phoMonElems_, phoHLTFilterName, cutMasks_.trigTPPho, binData_);
127  }
128  for (auto& i : eleHLTFilterNames2Leg_) {
129  iBooker.setCurrentFolder(dirName_ + "/" + subdirName_ + "/" + i.substr(i.find("::") + 2));
130  //std::cout<<"FilterName: "<<eleHLTFilterNames2Leg_[i]<<std::endl;
131  //std::cout<<"Folder: "<<eleHLTFilterNames2Leg_[i].substr(eleHLTFilterNames2Leg_[i].find("::")+2)<<std::endl;
133  }
134  //tag and probe not yet implimented for photons (attemping to see if it makes sense first)
135  // monElemFuncs.initTrigTagProbeHists(phoMonElems,phoHLTFilterNames_);
136  }
137 
138  iBooker.setCurrentFolder(dirName_);
139 }
140 
142  const double weight = 1.; //we have the ability to weight but its disabled for now - maybe use this for prescales?
145  int errCode = offEvtHelper_.makeOffEvt(iEvent, iSetup, offEvt_, *trigCodes);
146  if (errCode != 0) {
147  dqmErrsMonElem_->Fill(errCode);
148  return;
149  }
150 
151  for (auto& eleFilterMonHist : eleFilterMonHists_) {
152  eleFilterMonHist->fill(offEvt_, weight);
153  }
154  for (auto& phoFilterMonHist : phoFilterMonHists_) {
155  phoFilterMonHist->fill(offEvt_, weight);
156  }
157 
158  for (auto& eleMonElem : eleMonElems_) {
159  const std::vector<OffEle>& eles = offEvt_.eles();
160  for (auto const& ele : eles) {
161  eleMonElem->fill(ele, offEvt_, weight);
162  }
163  }
164 
165  for (auto& phoMonElem : phoMonElems_) {
166  const std::vector<OffPho>& phos = offEvt_.phos();
167  for (auto const& pho : phos) {
168  phoMonElem->fill(pho, offEvt_, weight);
169  }
170  }
171 }
172 
174  auto* filterMon =
175  new EleHLTFilterMon(monElemFuncs, name, trigCodes->getCode(name.c_str()), binData_, cutMasks_, dohep_);
176  eleFilterMonHists_.push_back(filterMon);
177  std::sort(eleFilterMonHists_.begin(), eleFilterMonHists_.end(), [](auto const& x, auto const& y) { return *x < *y; });
178  //takes a minor efficiency hit at initalisation to ensure that the vector is always sorted
179 }
180 
182  PhoHLTFilterMon* filterMon =
183  new PhoHLTFilterMon(monElemFuncs, name, trigCodes->getCode(name.c_str()), binData_, cutMasks_, dohep_);
184  phoFilterMonHists_.push_back(filterMon);
185  std::sort(phoFilterMonHists_.begin(), phoFilterMonHists_.end(), [](auto const& x, auto const& y) { return *x < *y; });
186  //takes a minor efficiency hit at initalisation to ensure that the vector is always sorted
187 }
188 
189 //this function puts every filter name used in a std::vector
190 //due to the design, to ensure we get every filter, filters will be inserted multiple times
191 //eg electron filters will contain photon triggers which are also in the photon filters
192 //but only want one copy in the vector
193 //this function is intended to be called once per job so some inefficiency can can be tolerated
194 //therefore we will use a std::set to ensure that each filtername is only inserted once
195 //and then convert to a std::vector
196 void EgHLTOfflineSource::getHLTFilterNamesUsed(std::vector<std::string>& filterNames) const {
197  std::set<std::string> filterNameSet;
198  for (auto const& eleHLTFilterName : eleHLTFilterNames_)
199  filterNameSet.insert(eleHLTFilterName);
200  for (auto const& phoHLTFilterName : phoHLTFilterNames_)
201  filterNameSet.insert(phoHLTFilterName);
202  //here we are little more complicated as entries are of the form "tightTrig:looseTrig"
203  //so we need to split them first
204  for (auto const& eleTightLooseTrigName : eleTightLooseTrigNames_) {
205  std::vector<std::string> trigNames;
206  boost::split(trigNames, eleTightLooseTrigName, boost::is_any_of(std::string(":")));
207  if (trigNames.size() != 2)
208  continue; //format incorrect
209  filterNameSet.insert(trigNames[0]);
210  filterNameSet.insert(trigNames[1]);
211  }
212  for (auto const& diEleTightLooseTrigName : diEleTightLooseTrigNames_) {
213  std::vector<std::string> trigNames;
214  boost::split(trigNames, diEleTightLooseTrigName, boost::is_any_of(std::string(":")));
215  if (trigNames.size() != 2)
216  continue; //format incorrect
217  filterNameSet.insert(trigNames[0]);
218  filterNameSet.insert(trigNames[1]);
219  }
220  for (auto const& phoTightLooseTrigName : phoTightLooseTrigNames_) {
221  std::vector<std::string> trigNames;
222  boost::split(trigNames, phoTightLooseTrigName, boost::is_any_of(std::string(":")));
223  if (trigNames.size() != 2)
224  continue; //format incorrect
225  filterNameSet.insert(trigNames[0]);
226  filterNameSet.insert(trigNames[1]);
227  }
228  for (auto const& diPhoTightLooseTrigName : diPhoTightLooseTrigNames_) {
229  std::vector<std::string> trigNames;
230  boost::split(trigNames, diPhoTightLooseTrigName, boost::is_any_of(std::string(":")));
231  if (trigNames.size() != 2)
232  continue; //format incorrect
233  filterNameSet.insert(trigNames[0]);
234  filterNameSet.insert(trigNames[1]);
235  }
236  //right all the triggers are inserted once and only once in the set, convert to vector
237  //very lazy, create a new vector so can use the constructor and then use swap to transfer
238  std::vector<std::string>(filterNameSet.begin(), filterNameSet.end()).swap(filterNames);
239 }
240 
242  std::vector<std::string> activeFilters;
243  std::vector<std::string> activeEleFilters;
244  std::vector<std::string> activeEle2LegFilters;
245  std::vector<std::string> activePhoFilters;
246  std::vector<std::string> activePho2LegFilters;
247 
249  hltConfig, activeFilters, activeEleFilters, activeEle2LegFilters, activePhoFilters, activePho2LegFilters);
250 
258 }
EgHLTOfflineSource::~EgHLTOfflineSource
~EgHLTOfflineSource() override
Definition: EgHLTOfflineSource.cc:46
DDAxes::y
egHLT::MonElemFuncs::initTrigTagProbeHist_2Leg
void initTrigTagProbeHist_2Leg(std::vector< MonElemContainer< OffEle > * > &eleMonElems, const std::string &filterName, int cutMask, const BinData &bins)
Definition: EgHLTMonElemFuncs.cc:1055
mps_fire.i
i
Definition: mps_fire.py:355
egHLT::MonElemFuncs::initTrigTagProbeHist
void initTrigTagProbeHist(std::vector< MonElemContainer< OffEle > * > &eleMonElems, const std::string &filterName, int cutMask, const BinData &bins)
Definition: EgHLTMonElemFuncs.cc:983
EgHLTOfflineSource::filterInactiveTriggers_
bool filterInactiveTriggers_
Definition: EgHLTOfflineSource.h:93
egHLT::trigTools::filterInactiveTightLooseTriggers
void filterInactiveTightLooseTriggers(std::vector< std::string > &namesToFilter, const std::vector< std::string > &activeFilters)
Definition: EgHLTTrigTools.cc:250
trigNames
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:57
EgHLTOfflineSource::phoFilterMonHists_
std::vector< egHLT::PhoHLTFilterMon * > phoFilterMonHists_
Definition: EgHLTOfflineSource.h:67
edm::Run
Definition: Run.h:45
egHLT::BinData::setup
void setup(const edm::ParameterSet &conf)
Definition: EgHLTBinData.cc:5
egHLT::OffHelper::setup
void setup(const edm::ParameterSet &conf, edm::ConsumesCollector &&iC)
Definition: EgHLTOffHelper.cc:34
egHLT::OffEvt::phos
const std::vector< OffPho > & phos() const
Definition: EgHLTOffEvt.h:50
edm::swap
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:117
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
EgHLTOfflineSource::phoHLTFilterNames_
std::vector< std::string > phoHLTFilterNames_
Definition: EgHLTOfflineSource.h:82
EgHLTOfflineSource::diEleTightLooseTrigNames_
std::vector< std::string > diEleTightLooseTrigNames_
Definition: EgHLTOfflineSource.h:87
egHLT::MonElemFuncs::initTightLooseTrigHists
void initTightLooseTrigHists(std::vector< MonElemContainer< OffEle > * > &eleMonElems, const std::vector< std::string > &tightLooseTrigs, const BinData &bins, EgHLTDQMCut< OffEle > *eleCut)
Definition: EgHLTMonElemFuncs.cc:734
DQMStore.h
TriggerFilterObjectWithRefs.h
egHLT::OffHelper::setupTriggers
void setupTriggers(const HLTConfigProvider &config, const std::vector< std::string > &hltFiltersUsed, const TrigCodes &trigCodes)
Definition: EgHLTOffHelper.cc:100
DDAxes::x
cms::dd::split
std::vector< std::string_view > split(std::string_view, const char *)
EgHLTOfflineSource::cutMasks_
egHLT::CutMasks cutMasks_
Definition: EgHLTOfflineSource.h:91
EgHLTOfflineSource::phoTightLooseTrigNames_
std::vector< std::string > phoTightLooseTrigNames_
Definition: EgHLTOfflineSource.h:86
egHLT::MonElemFuncs::initTightLooseDiObjTrigHistsTrigCuts
void initTightLooseDiObjTrigHistsTrigCuts(std::vector< MonElemContainer< OffEle > * > &eleMonElems, const std::vector< std::string > &tightLooseTrigs, const BinData &bins)
Definition: EgHLTMonElemFuncs.cc:872
EgHLTOfflineSource::dqmErrsMonElem_
MonitorElement * dqmErrsMonElem_
Definition: EgHLTOfflineSource.h:60
EgHLTOfflineSource::bookHistograms
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: EgHLTOfflineSource.cc:62
Track.h
EgHLTOfflineSource::binData_
egHLT::BinData binData_
Definition: EgHLTOfflineSource.h:90
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
EgHLTOfflineSource::getHLTFilterNamesUsed
void getHLTFilterNamesUsed(std::vector< std::string > &filterNames) const
Definition: EgHLTOfflineSource.cc:196
Run.h
hltEgammaEleL1TrkIsoL1Seeded_cfi.eles
eles
Definition: hltEgammaEleL1TrkIsoL1Seeded_cfi.py:5
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
egHLT::CutMasks::trigTPEle
int trigTPEle
Definition: EgHLTCutMasks.h:17
EgHLTOfflineSource.h
egHLT::MonElemFuncs
Definition: EgHLTMonElemFuncs.h:30
ElectronFwd.h
edm::ParameterSet
Definition: ParameterSet.h:36
EgHLTOfflineSource::subdirName_
std::string subdirName_
Definition: EgHLTOfflineSource.h:72
EgHLTOfflineSource::hltTag_
std::string hltTag_
Definition: EgHLTOfflineSource.h:94
dqm::implementation::IBooker::bookInt
MonitorElement * bookInt(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:73
egHLT::EleHLTFilterMon
Definition: EgHLTEleHLTFilterMon.h:40
EgHLTOfflineSource::filterTriggers
void filterTriggers(const HLTConfigProvider &hltConfig)
Definition: EgHLTOfflineSource.cc:241
iEvent
int iEvent
Definition: GenABIO.cc:224
EgHLTOfflineSource::dohep_
bool dohep_
Definition: EgHLTOfflineSource.h:73
EgHLTOfflineSource::eleHLTFilterNames_
std::vector< std::string > eleHLTFilterNames_
Definition: EgHLTOfflineSource.h:81
EgHLTOfflineSource::diPhoTightLooseTrigNames_
std::vector< std::string > diPhoTightLooseTrigNames_
Definition: EgHLTOfflineSource.h:88
EgHLTOfflineSource::offEvtHelper_
egHLT::OffHelper offEvtHelper_
Definition: EgHLTOfflineSource.h:76
egHLT::PhoHLTFilterMon
Definition: EgHLTPhoHLTFilterMon.h:39
edm::EventSetup
Definition: EventSetup.h:57
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
EgHLTOfflineSource::trigCodes
std::unique_ptr< egHLT::TrigCodes > trigCodes
Definition: EgHLTOfflineSource.h:77
EgHLTEleHLTFilterMon.h
HLTConfigProvider.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
EgHLTOfflineSource::dirName_
std::string dirName_
Definition: EgHLTOfflineSource.h:71
HLTConfigProvider
Definition: HLTConfigProvider.h:28
writedatasetfile.run
run
Definition: writedatasetfile.py:27
EgHLTDebugFuncs.h
EgHLTOfflineSource::eleHLTFilterNames2Leg_
std::vector< std::string > eleHLTFilterNames2Leg_
Definition: EgHLTOfflineSource.h:84
EgHLTOfflineSource::nrEventsProcessedMonElem_
MonitorElement * nrEventsProcessedMonElem_
Definition: EgHLTOfflineSource.h:61
EgHLTOfflineSource::phoMonElems_
std::vector< egHLT::MonElemContainer< egHLT::OffPho > * > phoMonElems_
Definition: EgHLTOfflineSource.h:69
EgHLTOfflineSource::eleFilterMonHists_
std::vector< egHLT::EleHLTFilterMon * > eleFilterMonHists_
Definition: EgHLTOfflineSource.h:65
EgHLTOfflineSource::eleTightLooseTrigNames_
std::vector< std::string > eleTightLooseTrigNames_
Definition: EgHLTOfflineSource.h:85
egHLT::trigTools::getActiveFilters
void getActiveFilters(const HLTConfigProvider &hltConfig, std::vector< std::string > &activeFilters, std::vector< std::string > &activeEleFilters, std::vector< std::string > &activeEle2LegFilters, std::vector< std::string > &activePhoFilters, std::vector< std::string > &activePho2LegFilters)
Definition: EgHLTTrigTools.cc:129
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
egHLT::CutMasks::setup
void setup(const edm::ParameterSet &conf)
Definition: EgHLTCutMasks.h:21
EgHLTOfflineSource::nrEventsProcessed_
int nrEventsProcessed_
Definition: EgHLTOfflineSource.h:62
HltComparatorCreateWorkflow.hltConfig
hltConfig
Definition: HltComparatorCreateWorkflow.py:161
EgHLTDQMCut.h
dqm::implementation::IBooker
Definition: DQMStore.h:43
EgHLTTrigTools.h
egHLT::CutMasks::trigTPPho
int trigTPPho
Definition: EgHLTCutMasks.h:18
EgHLTOfflineSource::eleMonElems_
std::vector< egHLT::MonElemContainer< egHLT::OffEle > * > eleMonElems_
Definition: EgHLTOfflineSource.h:68
EgHLTOfflineClient_cfi.filterInactiveTriggers
filterInactiveTriggers
Definition: EgHLTOfflineClient_cfi.py:10
edm::Event
Definition: Event.h:73
egHLT::OffEvt::eles
const std::vector< OffEle > & eles() const
Definition: EgHLTOffEvt.h:48
egHLT
Definition: EgHLTBinData.h:10
EgHLTPhoHLTFilterMon.h
EgHLTOfflineSource::addEleTrigPath
void addEleTrigPath(egHLT::MonElemFuncs &monElemFuncs, const std::string &name)
Definition: EgHLTOfflineSource.cc:173
egHLT::OffHelper::makeOffEvt
int makeOffEvt(const edm::Event &edmEvent, const edm::EventSetup &setup, egHLT::OffEvt &offEvent, const TrigCodes &trigCodes)
Definition: EgHLTOffHelper.cc:151
weight
Definition: weight.py:1
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
EgHLTOfflineSource::EgHLTOfflineSource
EgHLTOfflineSource(const EgHLTOfflineSource &rhs)=delete
EgHLTOfflineSource::offEvt_
egHLT::OffEvt offEvt_
Definition: EgHLTOfflineSource.h:74
EgHLTOfflineSource::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: EgHLTOfflineSource.cc:141
EgHLTOfflineSource::addPhoTrigPath
void addPhoTrigPath(egHLT::MonElemFuncs &monElemFuncs, const std::string &name)
Definition: EgHLTOfflineSource.cc:181