CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes
HLTJetsCleanedFromLeadingLeptons< JetType > Class Template Reference

Produces a collection of jets cleaned against leading leptons. More...

#include <HLTJetsCleanedFromLeadingLeptons.h>

Inheritance diagram for HLTJetsCleanedFromLeadingLeptons< JetType >:
edm::stream::EDProducer<>

Classes

class  EtaPhiE
 An auxiliary class to store momentum parametrised in eta, phi, and energy. More...
 

Public Types

typedef std::vector< JetType > JetCollection
 
typedef std::vector< edm::RefVector< JetCollection, JetType, edm::refhelper::FindUsingAdvance< JetCollection, JetType > > > JetCollectionVector
 
typedef edm::Ref< JetCollectionJetRef
 
typedef edm::RefVector< JetCollectionJetRefVector
 
- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

 HLTJetsCleanedFromLeadingLeptons (edm::ParameterSet const &iConfig)
 Constructor. More...
 
void produce (edm::Event &iEvent, edm::EventSetup const &iSetup) override
 Produces jets cleaned against leptons. More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 Describes configuration of the plugin. More...
 

Private Attributes

edm::EDGetTokenT< std::vector< JetType > > jetToken
 Token to access a collection of jets. More...
 
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefsleptonToken
 Token to identify a collection of leptons that pass an HLT filter. More...
 
double minDeltaR2
 A square of the minimal allowed angular separation between a lepton and a jet. More...
 
unsigned numLeptons
 Number of leading leptons against which the jets are cleaned. More...
 

Detailed Description

template<typename JetType>
class HLTJetsCleanedFromLeadingLeptons< JetType >

Produces a collection of jets cleaned against leading leptons.

Author
Andrey Popov, inspired by code by Lukasz Kreczko Leptons (muons or electrons) are read from results of a previous HLT filter. They are ordered in energy, and the user can configure how many leading leptons are used to clean jets. If the requested number is larger than the total number of leptons, all of them are used.

The plugin loops over the given collection of jets and exclude ones that are close to one of the leading leptons. References to surviving jets are stored in the same format as expected by the HLTJetCollectionsFilter plugin.

Definition at line 28 of file HLTJetsCleanedFromLeadingLeptons.h.

Member Typedef Documentation

template<typename JetType >
typedef std::vector<JetType> HLTJetsCleanedFromLeadingLeptons< JetType >::JetCollection

Definition at line 30 of file HLTJetsCleanedFromLeadingLeptons.h.

template<typename JetType >
typedef std::vector<edm::RefVector<JetCollection, JetType, edm::refhelper::FindUsingAdvance<JetCollection, JetType> > > HLTJetsCleanedFromLeadingLeptons< JetType >::JetCollectionVector

Definition at line 35 of file HLTJetsCleanedFromLeadingLeptons.h.

template<typename JetType >
typedef edm::Ref<JetCollection> HLTJetsCleanedFromLeadingLeptons< JetType >::JetRef

Definition at line 31 of file HLTJetsCleanedFromLeadingLeptons.h.

template<typename JetType >
typedef edm::RefVector<JetCollection> HLTJetsCleanedFromLeadingLeptons< JetType >::JetRefVector

Definition at line 32 of file HLTJetsCleanedFromLeadingLeptons.h.

Constructor & Destructor Documentation

template<typename JetType >
HLTJetsCleanedFromLeadingLeptons< JetType >::HLTJetsCleanedFromLeadingLeptons ( edm::ParameterSet const &  iConfig)

Constructor.

Definition at line 137 of file HLTJetsCleanedFromLeadingLeptons.h.

References edm::ParameterSet::getParameter(), HLTJetsCleanedFromLeadingLeptons< JetType >::jetToken, and HLTJetsCleanedFromLeadingLeptons< JetType >::leptonToken.

138  : minDeltaR2(std::pow(iConfig.getParameter<double>("minDeltaR"), 2)),
139  numLeptons(iConfig.getParameter<unsigned>("numLeptons")) {
140  leptonToken = consumes<trigger::TriggerFilterObjectWithRefs>(iConfig.getParameter<edm::InputTag>("leptons"));
141  jetToken = consumes<std::vector<JetType>>(iConfig.getParameter<edm::InputTag>("jets"));
142 
143  produces<JetCollectionVector>();
144 }
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > leptonToken
Token to identify a collection of leptons that pass an HLT filter.
unsigned numLeptons
Number of leading leptons against which the jets are cleaned.
double minDeltaR2
A square of the minimal allowed angular separation between a lepton and a jet.
edm::EDGetTokenT< std::vector< JetType > > jetToken
Token to access a collection of jets.
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30

Member Function Documentation

template<typename JetType >
void HLTJetsCleanedFromLeadingLeptons< JetType >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Describes configuration of the plugin.

Definition at line 147 of file HLTJetsCleanedFromLeadingLeptons.h.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), defaultModuleLabel(), HLT_2018_cff::InputTag, and edm::ParameterDescriptionNode::setComment().

147  {
149 
150  desc.add<edm::InputTag>("leptons", edm::InputTag("triggerFilterObjectWithRefs"))
151  ->setComment("A collection of leptons that pass an HLT filter");
152  desc.add<edm::InputTag>("jets", edm::InputTag("jetCollection"))->setComment("A collection of jets");
153  desc.add<double>("minDeltaR", 0.3)->setComment("Minimal allowed angular separation between a jet and a lepton");
154  desc.add<unsigned>("numLeptons", 1)->setComment("Number of leading leptons against which the jets are cleaned");
155 
157 }
void setComment(std::string const &value)
std::string defaultModuleLabel()
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Produces a collection of jets cleaned against leading leptons.
void add(std::string const &label, ParameterSetDescription const &psetDescription)
template<typename JetType >
void HLTJetsCleanedFromLeadingLeptons< JetType >::produce ( edm::Event iEvent,
edm::EventSetup const &  iSetup 
)
override

Produces jets cleaned against leptons.

Definition at line 160 of file HLTJetsCleanedFromLeadingLeptons.h.

References bsc_activity_cfg::clusters, reco::deltaR2(), pwdgSkimBPark_cfi::electrons, SimCluster::energy(), SimCluster::eta(), edm::Event::getByToken(), trigger::TriggerRefsCollections::getObjects(), singleTopDQM_cfi::jets, HLTJetsCleanedFromLeadingLeptons< JetType >::jetToken, HLTJetsCleanedFromLeadingLeptons< JetType >::leptonToken, HLTJetsCleanedFromLeadingLeptons< JetType >::minDeltaR2, eostools::move(), PDWG_BPHSkim_cff::muons, HLTJetsCleanedFromLeadingLeptons< JetType >::numLeptons, goodZToMuMu_cfi::overlap, SimCluster::phi(), BPHMonitor_cfi::photons, edm::RefVector< C, T, F >::push_back(), edm::Event::put(), SimDataFormats::CaloAnalysis::sc, trigger::TriggerCluster, trigger::TriggerElectron, trigger::TriggerMuon, and trigger::TriggerPhoton.

160  {
161  // Read results of the lepton filter
163  iEvent.getByToken(leptonToken, filterOutput);
164 
165  // Momenta of the leptons that passed the filter will be pushed into a vector
166  std::vector<EtaPhiE> leptonMomenta;
167 
168  // First, assume these are muons and try to store their momenta
170  filterOutput->getObjects(trigger::TriggerMuon, muons);
171 
172  for (auto const &muRef : muons) // the collection might be empty
173  leptonMomenta.emplace_back(muRef->eta(), muRef->phi(), muRef->energy());
174 
175  // Then get the momenta as if these are electrons. Electrons are tricky because they can be
176  //stored with three types of trigger objects: TriggerElectron, TriggerPhoton, and
177  //TriggerCluster. Try them one by one.
179  filterOutput->getObjects(trigger::TriggerElectron, electrons);
180 
181  for (auto const &eRef : electrons) // the collection might be empty
182  {
183  auto const &sc = eRef->superCluster();
184  leptonMomenta.emplace_back(sc->eta(), sc->phi(), sc->energy());
185  }
186 
188  filterOutput->getObjects(trigger::TriggerPhoton, photons);
189 
190  for (auto const &eRef : photons) // the collection might be empty
191  {
192  auto const &sc = eRef->superCluster();
193  leptonMomenta.emplace_back(sc->eta(), sc->phi(), sc->energy());
194  }
195 
197  filterOutput->getObjects(trigger::TriggerCluster, clusters);
198 
199  for (auto const &eRef : clusters) // the collection might be empty
200  {
201  auto const &sc = eRef->superCluster();
202  leptonMomenta.emplace_back(sc->eta(), sc->phi(), sc->energy());
203  }
204 
205  // Make sure the momenta are sorted
206  std::sort(leptonMomenta.rbegin(), leptonMomenta.rend());
207 
208  // Read the source collection of jets
209  edm::Handle<JetCollection> jetHandle;
210  iEvent.getByToken(jetToken, jetHandle);
211  JetCollection const &jets = *jetHandle;
212 
213  // Put references to jets that are not matched to leptons into a dedicated collection
214  JetRefVector cleanedJetRefs;
215  unsigned const numLeptonsToLoop = std::min<unsigned>(leptonMomenta.size(), numLeptons);
216 
217  for (unsigned iJet = 0; iJet < jets.size(); ++iJet) {
218  bool overlap = false;
219 
220  for (unsigned iLepton = 0; iLepton < numLeptonsToLoop; ++iLepton)
221  if (reco::deltaR2(leptonMomenta.at(iLepton), jets.at(iJet)) < minDeltaR2) {
222  overlap = true;
223  break;
224  }
225 
226  if (not overlap)
227  cleanedJetRefs.push_back(JetRef(jetHandle, iJet));
228  }
229 
230  // Store the collection in the event
231  std::unique_ptr<JetCollectionVector> product(new JetCollectionVector);
232  //^ Have to use the depricated unique_ptr here because this is what edm::Event::put expects
233  product->emplace_back(cleanedJetRefs);
234  iEvent.put(std::move(product));
235 }
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > leptonToken
Token to identify a collection of leptons that pass an HLT filter.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
unsigned numLeptons
Number of leading leptons against which the jets are cleaned.
float phi() const
Momentum azimuthal angle. Note this is taken from the first SimTrack only.
Definition: SimCluster.h:140
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
edm::RefVector< JetCollection > JetRefVector
std::vector< edm::RefVector< JetCollection, JetType, edm::refhelper::FindUsingAdvance< JetCollection, JetType > > > JetCollectionVector
double minDeltaR2
A square of the minimal allowed angular separation between a lepton and a jet.
float energy() const
Energy. Note this is taken from the first SimTrack only.
Definition: SimCluster.h:104
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
std::vector< reco::RecoChargedCandidateRef > VRmuon
std::vector< reco::ElectronRef > VRelectron
edm::EDGetTokenT< std::vector< JetType > > jetToken
Token to access a collection of jets.
std::vector< reco::RecoEcalCandidateRef > VRphoton
def move(src, dest)
Definition: eostools.py:511
float eta() const
Momentum pseudorapidity. Note this is taken from the simtrack before the calorimeter.
Definition: SimCluster.h:148

Member Data Documentation

template<typename JetType >
edm::EDGetTokenT<std::vector<JetType> > HLTJetsCleanedFromLeadingLeptons< JetType >::jetToken
private
template<typename JetType >
edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs> HLTJetsCleanedFromLeadingLeptons< JetType >::leptonToken
private

Token to identify a collection of leptons that pass an HLT filter.

Definition at line 84 of file HLTJetsCleanedFromLeadingLeptons.h.

Referenced by HLTJetsCleanedFromLeadingLeptons< JetType >::HLTJetsCleanedFromLeadingLeptons(), and HLTJetsCleanedFromLeadingLeptons< JetType >::produce().

template<typename JetType >
double HLTJetsCleanedFromLeadingLeptons< JetType >::minDeltaR2
private

A square of the minimal allowed angular separation between a lepton and a jet.

Definition at line 90 of file HLTJetsCleanedFromLeadingLeptons.h.

Referenced by HLTJetsCleanedFromLeadingLeptons< JetType >::produce().

template<typename JetType >
unsigned HLTJetsCleanedFromLeadingLeptons< JetType >::numLeptons
private

Number of leading leptons against which the jets are cleaned.

If the number is larger than the total number of leptons, the jets are cleaned against all leptons.

Definition at line 98 of file HLTJetsCleanedFromLeadingLeptons.h.

Referenced by HLTJetsCleanedFromLeadingLeptons< JetType >::produce().