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 hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () 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 30 of file HLTJetsCleanedFromLeadingLeptons.h.

Member Typedef Documentation

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

Definition at line 33 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 38 of file HLTJetsCleanedFromLeadingLeptons.h.

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

Definition at line 34 of file HLTJetsCleanedFromLeadingLeptons.h.

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

Definition at line 35 of file HLTJetsCleanedFromLeadingLeptons.h.

Constructor & Destructor Documentation

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

Constructor.

Definition at line 155 of file HLTJetsCleanedFromLeadingLeptons.h.

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

156  :
157  minDeltaR2(std::pow(iConfig.getParameter<double>("minDeltaR"), 2)),
158  numLeptons(iConfig.getParameter<unsigned>("numLeptons"))
159 {
160  leptonToken = consumes<trigger::TriggerFilterObjectWithRefs>(
161  iConfig.getParameter<edm::InputTag>("leptons"));
162  jetToken = consumes<std::vector<JetType>>(iConfig.getParameter<edm::InputTag>("jets"));
163 
164  produces<JetCollectionVector>();
165 }
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:40

Member Function Documentation

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

Describes configuration of the plugin.

Definition at line 169 of file HLTJetsCleanedFromLeadingLeptons.h.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), and defaultModuleLabel().

171 {
173 
174  desc.add<edm::InputTag>("leptons", edm::InputTag("triggerFilterObjectWithRefs"))->
175  setComment("A collection of leptons that pass an HLT filter");
176  desc.add<edm::InputTag>("jets", edm::InputTag("jetCollection"))->
177  setComment("A collection of jets");
178  desc.add<double>("minDeltaR", 0.3)->
179  setComment("Minimal allowed angular separation between a jet and a lepton");
180  desc.add<unsigned>("numLeptons", 1)->
181  setComment("Number of leading leptons against which the jets are cleaned");
182 
184 }
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 188 of file HLTJetsCleanedFromLeadingLeptons.h.

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

190 {
191  // Read results of the lepton filter
193  iEvent.getByToken(leptonToken, filterOutput);
194 
195  // Momenta of the leptons that passed the filter will be pushed into a vector
196  std::vector<EtaPhiE> leptonMomenta;
197 
198 
199  // First, assume these are muons and try to store their momenta
201  filterOutput->getObjects(trigger::TriggerMuon, muons);
202 
203  for (auto const &muRef: muons) // the collection might be empty
204  leptonMomenta.emplace_back(muRef->eta(), muRef->phi(), muRef->energy());
205 
206 
207  // Then get the momenta as if these are electrons. Electrons are tricky because they can be
208  //stored with three types of trigger objects: TriggerElectron, TriggerPhoton, and
209  //TriggerCluster. Try them one by one.
211  filterOutput->getObjects(trigger::TriggerElectron, electrons);
212 
213  for (auto const &eRef: electrons) // the collection might be empty
214  {
215  auto const &sc = eRef->superCluster();
216  leptonMomenta.emplace_back(sc->eta(), sc->phi(), sc->energy());
217  }
218 
220  filterOutput->getObjects(trigger::TriggerPhoton, photons);
221 
222  for (auto const &eRef: photons) // the collection might be empty
223  {
224  auto const &sc = eRef->superCluster();
225  leptonMomenta.emplace_back(sc->eta(), sc->phi(), sc->energy());
226  }
227 
229  filterOutput->getObjects(trigger::TriggerCluster, clusters);
230 
231  for (auto const &eRef: clusters) // the collection might be empty
232  {
233  auto const &sc = eRef->superCluster();
234  leptonMomenta.emplace_back(sc->eta(), sc->phi(), sc->energy());
235  }
236 
237 
238  // Make sure the momenta are sorted
239  std::sort(leptonMomenta.rbegin(), leptonMomenta.rend());
240 
241 
242  // Read the source collection of jets
243  edm::Handle<JetCollection> jetHandle;
244  iEvent.getByToken(jetToken, jetHandle);
245  JetCollection const &jets = *jetHandle;
246 
247 
248  // Put references to jets that are not matched to leptons into a dedicated collection
249  JetRefVector cleanedJetRefs;
250  unsigned const numLeptonsToLoop = std::min<unsigned>(leptonMomenta.size(), numLeptons);
251 
252  for (unsigned iJet = 0; iJet < jets.size(); ++iJet)
253  {
254  bool overlap = false;
255 
256  for (unsigned iLepton = 0; iLepton < numLeptonsToLoop; ++iLepton)
257  if (reco::deltaR2(leptonMomenta.at(iLepton), jets.at(iJet)) < minDeltaR2)
258  {
259  overlap = true;
260  break;
261  }
262 
263  if (not overlap)
264  cleanedJetRefs.push_back(JetRef(jetHandle, iJet));
265  }
266 
267 
268  // Store the collection in the event
269  std::unique_ptr<JetCollectionVector> product(new JetCollectionVector);
270  //^ Have to use the depricated unique_ptr here because this is what edm::Event::put expects
271  product->emplace_back(cleanedJetRefs);
272  iEvent.put(std::move(product));
273 }
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:125
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:517
edm::RefVector< JetCollection > JetRefVector
bool overlap(const reco::Muon &muon1, const reco::Muon &muon2, double pullX=1.0, double pullY=1.0, bool checkAdjacentChambers=false)
std::vector< edm::RefVector< JetCollection, JetType, edm::refhelper::FindUsingAdvance< JetCollection, JetType > > > JetCollectionVector
vector< PseudoJet > jets
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 88 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 94 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 102 of file HLTJetsCleanedFromLeadingLeptons.h.

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