CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

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
< JetCollection
JetRefVector
 
- 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, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

 HLTJetsCleanedFromLeadingLeptons (edm::ParameterSet const &iConfig)
 Constructor. More...
 
virtual void produce (edm::Event &iEvent, edm::EventSetup const &iSetup)
 Produces jets cleaned against leptons. More...
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 Describes configuration of the plugin. More...
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Attributes

edm::EDGetTokenT< std::vector
< JetType > > 
jetToken
 Token to access a collection of jets. More...
 
edm::EDGetTokenT
< trigger::TriggerFilterObjectWithRefs
leptonToken
 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...
 

Additional Inherited Members

- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

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(), defaultModuleLabel(), and HLT_25ns14e33_v1_cff::InputTag.

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 
)
virtual

Produces jets cleaned against leptons.

Implements edm::stream::EDProducerBase.

Definition at line 188 of file HLTJetsCleanedFromLeadingLeptons.h.

References HLT_25ns14e33_v1_cff::clusters, reco::deltaR2(), edm::Event::getByToken(), fwrapper::jets, patZpeak::muons, HLT_25ns14e33_v1_cff::numLeptons, muon::overlap(), interactiveExample::photons, edm::RefVector< C, T, F >::push_back(), edm::Event::put(), python.multivaluedict::sort(), 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.
210  trigger::VRelectron electrons;
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::auto_ptr<JetCollectionVector> product(new JetCollectionVector);
270  //^ Have to use the depricated auto_ptr here because this is what edm::Event::put expects
271  product->emplace_back(cleanedJetRefs);
272  iEvent.put(product);
273 }
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.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
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
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:115
vector< PseudoJet > jets
double minDeltaR2
A square of the minimal allowed angular separation between a lepton and a jet.
double deltaR2(const T1 &t1, const T2 &t2)
Definition: deltaR.h:36
std::vector< reco::RecoChargedCandidateRef > VRmuon
tuple muons
Definition: patZpeak.py:38
std::vector< reco::ElectronRef > VRelectron
edm::EDGetTokenT< std::vector< JetType > > jetToken
Token to access a collection of jets.
std::vector< reco::RecoEcalCandidateRef > VRphoton

Member Data Documentation

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

Token to access a collection of jets.

Definition at line 91 of file HLTJetsCleanedFromLeadingLeptons.h.

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

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().

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.

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.