Skip to content

Commit

Permalink
Merge pull request cms-sw#335 from missirol/Phase2-L1T-HLT-Interface_…
Browse files Browse the repository at this point in the history
…devel

[HLTrigger] added templated plugin "L1EnergySumFilterT"
  • Loading branch information
trtomei committed Oct 19, 2020
2 parents deb9d2d + 662c8a5 commit 6147fc4
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 191 deletions.
134 changes: 134 additions & 0 deletions HLTrigger/HLTfilters/plugins/L1EnergySumFilterT.h
@@ -0,0 +1,134 @@
#ifndef HLTrigger_HLTfilters_L1EnergySumFilterT_h
#define HLTrigger_HLTfilters_L1EnergySumFilterT_h

#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/EventSetupRecord.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"

#include "CondFormats/HLTObjects/interface/L1TObjScalingConstants.h"
#include "CondFormats/DataRecord/interface/L1TObjScalingRcd.h"

#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/Common/interface/Ref.h"
#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"

#include "HLTrigger/HLTcore/interface/HLTFilter.h"

template <typename T>
class L1EnergySumFilterT : public HLTFilter {
public:
explicit L1EnergySumFilterT(const edm::ParameterSet&);
~L1EnergySumFilterT() override;
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
bool hltFilter(edm::Event&, const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) const override;

private:
edm::InputTag const l1SumTag_; // input tag for L1 Energy Sum product
edm::ESInputTag const l1SumScalingTag_; // input tag for L1 Energy Sum scaling
edm::EDGetTokenT<std::vector<T>> const sumToken_; // token identifying product containing L1 EnergySums
edm::ESGetToken<L1TObjScalingConstants, L1TObjScalingRcd> const scalingToken_; // token identifying the L1T scaling constants

double const min_Pt_;
std::string const typeOfSum_;

trigger::TriggerObjectType typeOfSumEnum_;

double EnergySumOfflineEt(double const Et, L1TObjScalingConstants const& scalingConstants) const;
};

template <typename T>
L1EnergySumFilterT<T>::L1EnergySumFilterT(const edm::ParameterSet& iConfig)
: HLTFilter(iConfig),
l1SumTag_(iConfig.getParameter<edm::InputTag>("inputTag")),
l1SumScalingTag_(iConfig.getParameter<edm::ESInputTag>("esScalingTag")),
sumToken_(consumes<std::vector<T>>(l1SumTag_)),
scalingToken_(esConsumes<L1TObjScalingConstants, L1TObjScalingRcd>(l1SumScalingTag_)),
min_Pt_(iConfig.getParameter<double>("MinPt")),
typeOfSum_(iConfig.getParameter<std::string>("TypeOfSum")) {

if (typeOfSum_ == "MET")
typeOfSumEnum_ = trigger::TriggerObjectType::TriggerL1PFMET;
else if (typeOfSum_ == "ETT")
typeOfSumEnum_ = trigger::TriggerObjectType::TriggerL1PFETT;
else if (typeOfSum_ == "HT")
typeOfSumEnum_ = trigger::TriggerObjectType::TriggerL1PFHT;
else if (typeOfSum_ == "MHT")
typeOfSumEnum_ = trigger::TriggerObjectType::TriggerL1PFMHT;
else {
throw cms::Exception("ConfigurationError") << "Wrong type of energy sum: " << typeOfSum_ << "\n"
<< "Valid choices are: MET, ETT, HT, MHT\n";
}
}

template <typename T>
L1EnergySumFilterT<T>::~L1EnergySumFilterT() = default;

template <typename T>
void L1EnergySumFilterT<T>::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
makeHLTFilterDescription(desc);
desc.add<double>("MinPt", -1.0);
desc.add<edm::InputTag>("inputTag", edm::InputTag("L1PFEnergySums"));
desc.add<edm::ESInputTag>("esScalingTag", edm::ESInputTag("L1TScalingESSource", "L1PFEnergySumScaling"));
desc.add<std::string>("TypeOfSum", std::string("HT"));
descriptions.add(defaultModuleLabel<L1EnergySumFilterT<T>>(), desc);
}

template <typename T>
bool L1EnergySumFilterT<T>::hltFilter(edm::Event& iEvent, const edm::EventSetup& iSetup, trigger::TriggerFilterObjectWithRefs& filterproduct) const {
// All HLT filters must create and fill an HLT filter object,
// recording any reconstructed physics objects satisfying (or not)
// this HLT filter, and place it in the Event.

// The filter object
if (saveTags()) {
filterproduct.addCollectionTag(l1SumTag_);
}

// Specific filter code

// get hold of products from Event
auto const sums = iEvent.getHandle(sumToken_);

// get scaling constants
// do we *need* to get these every event? can't we cache them somewhere?
edm::ESHandle<L1TObjScalingConstants> scalingConstants_ = iSetup.getHandle(scalingToken_);

// sum
int nsum(0);
auto isum = sums->begin();
for (; isum != sums->end(); isum++) {
double offlinePt = 0.0;
// pt or sumEt?
if (typeOfSumEnum_ == trigger::TriggerObjectType::TriggerL1PFMET or
typeOfSumEnum_ == trigger::TriggerObjectType::TriggerL1PFMHT)
offlinePt = this->EnergySumOfflineEt(isum->pt(), *scalingConstants_);
else if (typeOfSumEnum_ == trigger::TriggerObjectType::TriggerL1PFETT or
typeOfSumEnum_ == trigger::TriggerObjectType::TriggerL1PFHT)
offlinePt = this->EnergySumOfflineEt(isum->sumEt(), *scalingConstants_);

if (offlinePt >= min_Pt_) {
nsum++;
edm::Ref<std::vector<T>> ref(sums, distance(sums->begin(), isum));
filterproduct.addObject(typeOfSumEnum_, ref);
}
}

// error case
// filterproduct.addObject(0,Ref<vector<int> >());

// final filter decision:
bool const accept(nsum > 0);

// return final filter decision
return accept;
}

template <typename T>
double L1EnergySumFilterT<T>::EnergySumOfflineEt(double Et, const L1TObjScalingConstants& scalingConstants) const {
return (scalingConstants.m_constants.at(0).m_constant + Et * scalingConstants.m_constants.at(0).m_linear + Et * Et * scalingConstants.m_constants.at(0).m_quadratic);
}

#endif // HLTrigger_HLTfilters_L1EnergySumFilterT_h
131 changes: 0 additions & 131 deletions HLTrigger/HLTfilters/plugins/L1PFEnergySumFilter.cc

This file was deleted.

48 changes: 0 additions & 48 deletions HLTrigger/HLTfilters/plugins/L1PFEnergySumFilter.h

This file was deleted.

6 changes: 5 additions & 1 deletion HLTrigger/HLTfilters/plugins/plugins.cc
Expand Up @@ -43,7 +43,7 @@ using namespace trigger;
#include "L1TkEleFilter.h"
#include "L1TkEmFilter.h"
#include "L1PFJetFilter.h"
#include "L1PFEnergySumFilter.h"
#include "L1EnergySumFilterT.h"

// filter for HLT candidates
typedef HLTSinglet<RecoEcalCandidate> HLT1Photon;
Expand All @@ -70,6 +70,9 @@ typedef HLTSinglet<l1extra::L1MuonParticle> HLTLevel1Muon;

typedef HLTSinglet<l1t::PFJet> HLTLevel1PFJet;

typedef L1EnergySumFilterT<reco::MET> L1EnergySumFilter;
typedef L1EnergySumFilterT<reco::PFMET> L1PFEnergySumFilter;

#include "HLTSmartSinglet.h"
#include "HLTSmartSinglet.cc"

Expand Down Expand Up @@ -132,6 +135,7 @@ DEFINE_FWK_MODULE(L1TkMuonFilter);
DEFINE_FWK_MODULE(L1TkEleFilter);
DEFINE_FWK_MODULE(L1TkEmFilter);
DEFINE_FWK_MODULE(L1PFJetFilter);
DEFINE_FWK_MODULE(L1EnergySumFilter);
DEFINE_FWK_MODULE(L1PFEnergySumFilter);
DEFINE_FWK_MODULE(HLT2CaloJetCaloJet);
DEFINE_FWK_MODULE(HLT2CaloJetCaloMET);
Expand Down
14 changes: 3 additions & 11 deletions HLTrigger/HLTfilters/test/test_Phase2L1THLT.py
Expand Up @@ -128,29 +128,22 @@
maxEtaJetHt=cms.double(2.4),
)

process.L1PFMetredux = cms.EDProducer(
"HLTHtMhtProducer",
jetsLabel=cms.InputTag("l1PFMetPuppi"),
minPtJetMht=cms.double(0.0),
maxEtaJetMht=cms.double(9999.9),
)

### Notice that there is no MHT seed in the Phase-II Level-1 Menu...
# Possible choices for TypeOfSum are: MET, MHT, ETT, HT
# but notice that if you are using a MET seed you
# should probably use the precomputed one.

# We don't have scaling for MHT...
process.l1tPFMht120 = cms.EDFilter(
"L1PFEnergySumFilter",
"L1EnergySumFilter",
inputTag=cms.InputTag("L1PFHtMht"),
esScalingTag=cms.ESInputTag("L1TScalingESSource", "L1PFHTScaling"),
MinPt=cms.double(120.0),
TypeOfSum=cms.string("MHT"),
)

process.l1tPFHt120 = cms.EDFilter(
"L1PFEnergySumFilter",
"L1EnergySumFilter",
inputTag=cms.InputTag("L1PFHtMht"),
esScalingTag=cms.ESInputTag("L1TScalingESSource", "L1PFHTScaling"),
MinPt=cms.double(120.0),
Expand All @@ -159,7 +152,7 @@

process.l1tPFMet120 = cms.EDFilter(
"L1PFEnergySumFilter",
inputTag=cms.InputTag("L1PFMetredux"),
inputTag=cms.InputTag("l1PFMetPuppi"),
esScalingTag=cms.ESInputTag("L1TScalingESSource", "L1PuppiMETScaling"),
MinPt=cms.double(120.0),
TypeOfSum=cms.string("MET"),
Expand Down Expand Up @@ -200,7 +193,6 @@

process.hltTestSeq = cms.Sequence(
process.L1PFHtMht
+ process.L1PFMetredux
+ cms.ignore(process.l1tMuon7)
+ cms.ignore(process.l1tPFJet64)
+ cms.ignore(process.l1tEle7)
Expand Down

0 comments on commit 6147fc4

Please sign in to comment.