From 5a139c46f713f7abf4875fff730232a03647e1f0 Mon Sep 17 00:00:00 2001 From: Martin Grunewald Date: Sun, 21 Feb 2016 08:34:28 +0100 Subject: [PATCH] Make HLTPrescaler stage-2 aware --- HLTrigger/HLTcore/interface/HLTPrescaler.h | 9 +++++- HLTrigger/HLTcore/plugins/HLTPrescaler.cc | 36 ++++++++++++++-------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/HLTrigger/HLTcore/interface/HLTPrescaler.h b/HLTrigger/HLTcore/interface/HLTPrescaler.h index 744609bc36a68..e4437e4d2b832 100644 --- a/HLTrigger/HLTcore/interface/HLTPrescaler.h +++ b/HLTrigger/HLTcore/interface/HLTPrescaler.h @@ -18,7 +18,13 @@ #include "FWCore/Framework/interface/stream/EDFilter.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/PrescaleService/interface/PrescaleService.h" + +// legacy/stage-1 L1T: #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" + +// stage-2 L1T: +#include "DataFormats/L1TGlobal/interface/GlobalAlgBlk.h" + namespace edm { class ConfigurationDescriptions; } @@ -86,7 +92,8 @@ class HLTPrescaler : public edm::stream::EDFilter gtDigiToken_; + edm::EDGetTokenT gtDigi1Token_; + edm::EDGetTokenT gtDigi2Token_; /// "seed" used to initialize the prescale counter static const diff --git a/HLTrigger/HLTcore/plugins/HLTPrescaler.cc b/HLTrigger/HLTcore/plugins/HLTPrescaler.cc index 90eb34967c7c2..ce96a58a1be83 100644 --- a/HLTrigger/HLTcore/plugins/HLTPrescaler.cc +++ b/HLTrigger/HLTcore/plugins/HLTPrescaler.cc @@ -14,7 +14,6 @@ #include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "HLTrigger/HLTcore/interface/HLTPrescaler.h" @@ -39,7 +38,8 @@ HLTPrescaler::HLTPrescaler(edm::ParameterSet const& iConfig, const trigger::Effi , prescaleService_(0) , newLumi_(true) , gtDigiTag_ (iConfig.getParameter("L1GtReadoutRecordTag")) - , gtDigiToken_ (consumes(gtDigiTag_)) + , gtDigi1Token_ (consumes(gtDigiTag_)) + , gtDigi2Token_ (consumes(gtDigiTag_)) { if(edm::Service().isAvailable()) prescaleService_ = edm::Service().operator->(); @@ -60,7 +60,7 @@ HLTPrescaler::~HLTPrescaler() void HLTPrescaler::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("offset",0); - desc.add("L1GtReadoutRecordTag",edm::InputTag("hltGtDigis")); + desc.add("L1GtReadoutRecordTag",edm::InputTag("hltGtStage2Digis")); descriptions.add("hltPrescaler", desc); } @@ -87,16 +87,28 @@ bool HLTPrescaler::filter(edm::Event& iEvent, const edm::EventSetup&) const unsigned int oldSet(prescaleSet_); const unsigned int oldPrescale(prescaleFactor_); - edm::Handle handle; - iEvent.getByToken(gtDigiToken_,handle); - if (handle.isValid()) { - prescaleSet_ = handle->gtFdlWord().gtPrescaleFactorIndexAlgo(); - // gtPrescaleFactorIndexTech() is also available - // by construction, they should always return the same index - prescaleFactor_ = prescaleService_->getPrescale(prescaleSet_, pathName); + edm::Handle handle2; + iEvent.getByToken(gtDigi2Token_,handle2); + if (handle2.isValid()) { + if (handle2->begin(0)!=handle2->end(0)) { + prescaleSet_ = static_cast(handle2->begin(0)->getPreScColumn()); + prescaleFactor_ = prescaleService_->getPrescale(prescaleSet_, pathName); + } else { + edm::LogWarning("HLT") << "Cannot read prescale column index from GT2 data: using default as defined by configuration or DAQ"; + prescaleFactor_ = prescaleService_->getPrescale(pathName); + } } else { - edm::LogWarning("HLT") << "Cannot read prescale column index from GT data: using default as defined by configuration or DAQ"; - prescaleFactor_ = prescaleService_->getPrescale(pathName); + edm::Handle handle1; + iEvent.getByToken(gtDigi1Token_,handle1); + if (handle1.isValid()) { + prescaleSet_ = handle1->gtFdlWord().gtPrescaleFactorIndexAlgo(); + // gtPrescaleFactorIndexTech() is also available + // by construction, they should always return the same index + prescaleFactor_ = prescaleService_->getPrescale(prescaleSet_, pathName); + } else { + edm::LogWarning("HLT") << "Cannot read prescale column index from GT1 data: using default as defined by configuration or DAQ"; + prescaleFactor_ = prescaleService_->getPrescale(pathName); + } } if (prescaleSet_ != oldSet) {