95 void endJob()
override;
102 double match_trigger(std::vector<int> &trigIndices,
148 maxMuon_ = iConfig.
getParameter<
unsigned int>(
"maxMuon");
149 isoTriggerNames_ = iConfig.
getParameter<std::vector<std::string>>(
"isoTriggerNames");
153 VtxToken_ = consumes<reco::VertexCollection>(
156 TriggerResultsToken_ = consumes<edm::TriggerResults>(
158 triggerSummaryLabelToken_ = consumes<trigger::TriggerEvent>(
166 muon_data = muon->getData();
168 tree_ = fs_->make<TTree>(
"Muon2RecoTree",
"Muon2RecoTree");
169 tree_->Branch(
"Muon",
"L1Analysis::L1AnalysisRecoMuon2DataFormat", &muon_data, 32000, 3);
171 triggerMaxDeltaR_ = iConfig.
getParameter<
double>(
"triggerMaxDeltaR");
174 isoTriggerNames_ = iConfig.
getParameter<std::vector<std::string>>(
"isoTriggerNames");
175 triggerNames_ = iConfig.
getParameter<std::vector<std::string>>(
"triggerNames");
206 iEvent.
getByToken(TriggerResultsToken_, triggerResults);
209 iEvent.
getByToken(triggerSummaryLabelToken_, triggerSummaryLabel_);
219 for (reco::PFMETCollection::const_iterator imet = metLabel_->begin();
220 imet != metLabel_->end() && (unsigned)counter_met < 1;
227 muon->SetMuon(iEvent, iSetup, recoMuons, vertices, METx, METy, maxMuon_);
232 for (reco::MuonCollection::const_iterator imu = recoMuons->begin();
233 imu != recoMuons->end() && (unsigned)counter_mu < maxMuon_;
239 if (triggerMatching_) {
240 double isoMatchDeltaR = 9999.;
241 double matchDeltaR = 9999.;
242 int hasIsoTriggered = 0;
243 int hasTriggered = 0;
245 int passesSingleMuonFlag = 0;
248 if (triggerResults.
isValid()) {
249 if (triggerSummaryLabel_.
isValid()) {
256 for (UInt_t iPath = 0; iPath < isoTriggerNames_.size(); ++iPath) {
257 if (passesSingleMuonFlag == 1)
267 passTrig = triggerResults->accept(trigNames.
triggerIndex(pathName));
270 passesSingleMuonFlag = 1;
273 if (triggerSummaryLabel_.
isValid()) {
277 matchDeltaR = match_trigger(triggerIndices_, triggerObjects, triggerSummaryLabel_, (*imu));
278 if (matchDeltaR < triggerMaxDeltaR_)
285 isoMatchDeltaR = match_trigger(isoTriggerIndices_, triggerObjects, triggerSummaryLabel_, (*imu));
286 if (isoMatchDeltaR < triggerMaxDeltaR_)
296 muon_data->hlt_isomu.push_back(hasIsoTriggered);
297 muon_data->hlt_mu.push_back(hasTriggered);
298 muon_data->hlt_isoDeltaR.push_back(isoMatchDeltaR);
299 muon_data->hlt_deltaR.push_back(matchDeltaR);
300 muon_data->passesSingleMuon.push_back(passesSingleMuonFlag);
317 muon_data->hlt_isomu.push_back(-9999);
318 muon_data->hlt_mu.push_back(-9999);
319 muon_data->hlt_isoDeltaR.push_back(-9999);
320 muon_data->hlt_deltaR.push_back(-9999);
327 double matchDeltaR = 9999;
329 for (
size_t iTrigIndex = 0; iTrigIndex < trigIndices.size(); ++iTrigIndex) {
330 int triggerIndex = trigIndices[iTrigIndex];
331 const std::vector<std::string> moduleLabels(hltConfig_.moduleLabels(triggerIndex));
333 const unsigned moduleIndex = hltConfig_.size(triggerIndex) - 2;
335 const unsigned hltFilterIndex =
336 triggerEvent->filterIndex(
edm::InputTag(moduleLabels[moduleIndex],
"", triggerProcessLabel_));
338 if (hltFilterIndex < triggerEvent->sizeFilters()) {
339 const trigger::Keys triggerKeys(triggerEvent->filterKeys(hltFilterIndex));
340 const trigger::Vids triggerVids(triggerEvent->filterIds(hltFilterIndex));
342 const unsigned nTriggers = triggerVids.size();
343 for (
size_t iTrig = 0; iTrig < nTriggers; ++iTrig) {
347 double dRtmp =
deltaR(mu, trigObject);
349 if (dRtmp < matchDeltaR) {
363 if (triggerMatching_) {
365 if (!hltConfig_.init(run, eventSetup, triggerProcessLabel_, changed)) {
367 std::cout <<
"Error: didn't find process" << triggerProcessLabel_ << std::endl;
371 bool enableWildcard =
true;
372 for (
size_t iTrig = 0; iTrig < triggerNames_.size(); ++iTrig) {
374 TString tNameTmp = TString(triggerNames_[iTrig]);
375 TRegexp tNamePattern = TRegexp(tNameTmp, enableWildcard);
378 for (
unsigned ipath = 0; ipath < hltConfig_.size(); ++ipath) {
380 TString tmpName = TString(hltConfig_.triggerName(ipath));
381 if (tmpName.Contains(tNamePattern)) {
383 triggerIndices_.push_back(tIndex);
387 std::cout <<
"Warning: Could not find trigger" << triggerNames_[iTrig] << std::endl;
391 for (
size_t iTrig = 0; iTrig < isoTriggerNames_.size(); ++iTrig) {
393 TString tNameTmp = TString(isoTriggerNames_[iTrig]);
394 TRegexp tNamePattern = TRegexp(tNameTmp, enableWildcard);
397 for (
unsigned ipath = 0; ipath < hltConfig_.size(); ++ipath) {
399 TString tmpName = TString(hltConfig_.triggerName(ipath));
400 if (tmpName.Contains(tNamePattern)) {
402 isoTriggerIndices_.push_back(tIndex);
406 std::cout <<
"Warning: Could not find trigger" << isoTriggerNames_[iTrig] << std::endl;
static const std::string kSharedResource
L1Analysis::L1AnalysisRecoMuon2DataFormat * muon_data
T getUntrackedParameter(std::string const &, T const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
unsigned int triggerIndex(std::string_view name) const
~L1Muon2RecoTreeProducer() override
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
void endRun(edm::Run const &, edm::EventSetup const &) override
void beginRun(const edm::Run &, const edm::EventSetup &) override
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
Single trigger physics object (e.g., an isolated muon)
double match_trigger(std::vector< int > &trigIndices, const trigger::TriggerObjectCollection &trigObjs, edm::Handle< trigger::TriggerEvent > &triggerEvent, const reco::Muon &mu)
edm::EDGetTokenT< reco::MuonCollection > MuonToken_
edm::Service< TFileService > fs_
static std::string const triggerResults
HLTConfigProvider hltConfig_
metToken_(consumes< reco::PFMETCollection >(iConfig.getParameter< edm::InputTag >("met")))
edm::Handle< edm::TriggerResults > isoTriggerToken_
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
static const char *const trigNames[]
std::vector< size_type > Keys
T getParameter(std::string const &) const
L1Muon2RecoTreeProducer(const edm::ParameterSet &)
std::string triggerProcessLabel_
void analyze(const edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< edm::TriggerResults > TriggerResultsToken_
edm::EDGetTokenT< reco::VertexCollection > VtxToken_
edm::Handle< std::vector< std::string > > isoTriggerNamesToken_
L1Analysis::L1AnalysisRecoMuon2 * muon
std::vector< int > triggerIndices_
std::vector< int > isoTriggerIndices_
edm::EDGetTokenT< trigger::TriggerEvent > triggerSummaryLabelToken_
std::vector< std::string > triggerNames_
edm::EDGetTokenT< reco::PFMETCollection > metToken_
bool passTrig(const float objEta, float objPhi, const trigger::TriggerEvent &trigEvt, const std::string &filterName, const std::string &processName)
std::vector< std::string > isoTriggerNames_