Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions HLTrigger/Configuration/python/customizeHLTforCMSSW.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"):

Expand All @@ -191,6 +200,7 @@ def customizeHLTforCMSSW(process, menuType="GRun"):
# process = customiseFor12718(process)

process = customizeHLTfor47611(process)
process = customizeHLTfor48957(process)

return process

64 changes: 34 additions & 30 deletions HLTrigger/special/plugins/HLTL1NumberFilter.cc
Original file line number Diff line number Diff line change
@@ -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:

Expand All @@ -22,12 +22,12 @@
#include <memory>

// 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
Expand All @@ -36,22 +36,18 @@ HLTL1NumberFilter::HLTL1NumberFilter(const edm::ParameterSet& config)
: //now do what ever initialization is needed
inputToken_(consumes<FEDRawDataCollection>(config.getParameter<edm::InputTag>("rawInput"))),
period_(config.getParameter<unsigned int>("period")),
fedId_(config.getParameter<int>("fedId")),
fedIds_(config.getParameter<std::vector<int>>("fedIds")),
invert_(config.getParameter<bool>("invert")),
// only try and use TCDS event number if the FED ID 1024 is selected
useTCDS_(config.getParameter<bool>("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<bool>("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<edm::InputTag>("rawInput", edm::InputTag("source"));
desc.add<unsigned int>("period", 4096);
desc.add<bool>("invert", true);
desc.add<int>("fedId", 812);
desc.add<std::vector<int>>("fedIds", {812});
desc.add<bool>("useTCDSEventNumber", false);
descriptions.add("hltL1NumberFilter", desc);
}
Expand All @@ -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<FEDRawDataCollection> 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;
}
Expand Down
20 changes: 9 additions & 11 deletions HLTrigger/special/plugins/HLTL1NumberFilter.h
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 <string>

//
Expand All @@ -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:
Expand All @@ -50,8 +48,8 @@ class HLTL1NumberFilter : public edm::global::EDFilter<> {
const edm::EDGetTokenT<FEDRawDataCollection> 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<int> 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
Expand Down