diff --git a/HLTrigger/Configuration/python/customizeHLTforCMSSW.py b/HLTrigger/Configuration/python/customizeHLTforCMSSW.py index 884840d6ef234..06e9872a30baf 100644 --- a/HLTrigger/Configuration/python/customizeHLTforCMSSW.py +++ b/HLTrigger/Configuration/python/customizeHLTforCMSSW.py @@ -182,6 +182,15 @@ def customizeHLTfor47611(process): return process +def customizeHLTfor48957(process): + for filt in filters_by_type(process, "HLTL1NumberFilter"): + if hasattr(filt, "fedId"): + value = filt.fedId.value() + del filt.fedId + filt.fedIds = cms.vint32([value]) + + return process + # CMSSW version specific customizations def customizeHLTforCMSSW(process, menuType="GRun"): @@ -191,6 +200,7 @@ def customizeHLTforCMSSW(process, menuType="GRun"): # process = customiseFor12718(process) process = customizeHLTfor47611(process) + process = customizeHLTfor48957(process) return process diff --git a/HLTrigger/special/plugins/HLTL1NumberFilter.cc b/HLTrigger/special/plugins/HLTL1NumberFilter.cc index 660d022763a43..d9766d91682e4 100644 --- a/HLTrigger/special/plugins/HLTL1NumberFilter.cc +++ b/HLTrigger/special/plugins/HLTL1NumberFilter.cc @@ -1,9 +1,9 @@ // -*- C++ -*- // -// Package: HLTL1NumberFilter +// Package: HLTrigger/special // Class: HLTL1NumberFilter // -/**\class HLTL1NumberFilter HLTL1NumberFilter.cc filter/HLTL1NumberFilter/src/HLTL1NumberFilter.cc +/**\class HLTL1NumberFilter HLTL1NumberFilter.cc HLTrigger/special/plugins/HLTL1NumberFilter.cc Description: @@ -22,12 +22,12 @@ #include // user include files -#include "HLTL1NumberFilter.h" #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/FEDRawData/interface/FEDHeader.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "DataFormats/TCDS/interface/TCDSRecord.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "HLTL1NumberFilter.h" // // constructors and destructor @@ -36,22 +36,18 @@ HLTL1NumberFilter::HLTL1NumberFilter(const edm::ParameterSet& config) : //now do what ever initialization is needed inputToken_(consumes(config.getParameter("rawInput"))), period_(config.getParameter("period")), - fedId_(config.getParameter("fedId")), + fedIds_(config.getParameter>("fedIds")), invert_(config.getParameter("invert")), - // only try and use TCDS event number if the FED ID 1024 is selected - useTCDS_(config.getParameter("useTCDSEventNumber") and fedId_ == 1024) {} - -HLTL1NumberFilter::~HLTL1NumberFilter() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} + // only try and use TCDS event number if the FED ID 1024 OR 1050 is selected + useTCDS_(config.getParameter("useTCDSEventNumber") && + std::any_of(fedIds_.begin(), fedIds_.end(), [](int id) { return id == 1024 || id == 1050; })) {} void HLTL1NumberFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("rawInput", edm::InputTag("source")); desc.add("period", 4096); desc.add("invert", true); - desc.add("fedId", 812); + desc.add>("fedIds", {812}); desc.add("useTCDSEventNumber", false); descriptions.add("hltL1NumberFilter", desc); } @@ -64,28 +60,36 @@ bool HLTL1NumberFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::Eve using namespace edm; if (iEvent.isRealData()) { - bool accept(false); edm::Handle theRaw; iEvent.getByToken(inputToken_, theRaw); - const FEDRawData& data = theRaw->FEDData(fedId_); - if (data.data() and data.size() > 0) { - unsigned long counter; - if (useTCDS_) { - TCDSRecord record(data.data()); - counter = record.getTriggerCount(); - } else { - FEDHeader header(data.data()); - counter = header.lvl1ID(); + + bool accept = false; + bool atLeastOneValidFED = false; // Track if any FED had valid data + for (int fedId : fedIds_) { + const FEDRawData& data = theRaw->FEDData(fedId); + if (data.data() && data.size() > 0) { + atLeastOneValidFED = true; + unsigned long counter; + // Use TCDS if requested and fedId is 1024 or 1050 + if (useTCDS_ && (fedId == 1024 || fedId == 1050)) { + TCDSRecord record(data.data()); + counter = record.getTriggerCount(); + } else { + FEDHeader header(data.data()); + counter = header.lvl1ID(); + } + if (period_ != 0) + accept = accept || (counter % period_ == 0); + else + accept = true; } - if (period_ != 0) - accept = (counter % period_ == 0); - if (invert_) - accept = not accept; - return accept; - } else { - LogWarning("HLTL1NumberFilter") << "No valid data for FED " << fedId_ << " used by HLTL1NumberFilter"; - return false; } + if (!atLeastOneValidFED) { + edm::LogWarning("HLTL1NumberFilter") << "No valid data for any FED in list used by HLTL1NumberFilter"; + } + if (invert_) + accept = !accept; + return accept; } else { return true; } diff --git a/HLTrigger/special/plugins/HLTL1NumberFilter.h b/HLTrigger/special/plugins/HLTL1NumberFilter.h index 6c86ca019dcbc..28d8a218a6639 100644 --- a/HLTrigger/special/plugins/HLTL1NumberFilter.h +++ b/HLTrigger/special/plugins/HLTL1NumberFilter.h @@ -1,8 +1,8 @@ -#ifndef HLTL1NumberFilter_h -#define HLTL1NumberFilter_h +#ifndef HLTrigger_special_HLTL1NumberFilter_h +#define HLTrigger_special_HLTL1NumberFilter_h // -*- C++ -*- // -// Package: HLTL1NumberFilter +// Package: HLTrigger/special // Class: HLTL1NumberFilter // /**\class HLTL1NumberFilter HLTL1NumberFilter.cc filter/HLTL1NumberFilter/src/HLTL1NumberFilter.cc @@ -19,16 +19,14 @@ Description: Filter to select HCAL abort gap events // // include files -#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" #include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/global/EDFilter.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" - #include // @@ -38,7 +36,7 @@ Description: Filter to select HCAL abort gap events class HLTL1NumberFilter : public edm::global::EDFilter<> { public: explicit HLTL1NumberFilter(const edm::ParameterSet &); - ~HLTL1NumberFilter() override; + ~HLTL1NumberFilter() override = default; static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); private: @@ -50,8 +48,8 @@ class HLTL1NumberFilter : public edm::global::EDFilter<> { const edm::EDGetTokenT inputToken_; /// accept the event if its event number is a multiple of period_ const unsigned int period_; - /// FED from which to get lv1ID number - const int fedId_; + /// FEDs from which to get lv1ID number + const std::vector fedIds_; /// if invert_=true, invert that event accept decision const bool invert_; /// if useTCDS=true, use 64-bit Event Number from TCDS record (FED 1024) word 11