CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes
HLTJetHbbFilter< T > Class Template Reference

#include <HLTJetHbbFilter.h>

Inheritance diagram for HLTJetHbbFilter< T >:
HLTFilter edm::global::EDFilter<> edm::global::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef std::pair< double, unsigned int > Jpair
 
- Public Types inherited from edm::global::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

bool hltFilter (edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
 
 HLTJetHbbFilter (const edm::ParameterSet &)
 
 ~HLTJetHbbFilter () override
 
- Public Member Functions inherited from HLTFilter
 HLTFilter (const edm::ParameterSet &config)
 
int module (edm::Event const &) const
 
const std::string * moduleLabel () const
 
int path (edm::Event const &) const
 
const std::string * pathName (edm::Event const &) const
 
std::pair< int, int > pmid (edm::Event const &) const
 
bool saveTags () const
 
 ~HLTFilter () override
 
- Public Member Functions inherited from edm::global::EDFilter<>
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static bool comparator (const Jpair &l, const Jpair &r)
 
static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
static float findCSV (const typename std::vector< T >::const_iterator &jet, const reco::JetTagCollection &jetTags)
 
- Static Public Member Functions inherited from HLTFilter
static void makeHLTFilterDescription (edm::ParameterSetDescription &desc)
 
- Static Public Member Functions inherited from edm::global::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Attributes

edm::InputTag inputJets_
 
edm::InputTag inputJetTags_
 
edm::EDGetTokenT< std::vector< T > > m_theJetsToken
 
edm::EDGetTokenT< reco::JetTagCollectionm_theJetTagsToken
 
double maxetab_
 
double maxmbb_
 
double maxptbb_
 
double maxtag_
 
double minmbb_
 
double minptb1_
 
double minptb2_
 
double minptbb_
 
double mintag1_
 
double mintag2_
 
int triggerType_
 

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 ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
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 T>
class HLTJetHbbFilter< T >

See header file for documentation

Author
Ann Wang

This class is an HLTFilter (-> EDFilter) implementing a two b-jet invariant mass requirement Based on HLTJetSortedVBFFilter

Author
Ann Wang, Javier Duarte

Definition at line 39 of file HLTJetHbbFilter.h.

Member Typedef Documentation

template<typename T >
typedef std::pair<double,unsigned int> HLTJetHbbFilter< T >::Jpair

Definition at line 41 of file HLTJetHbbFilter.h.

Constructor & Destructor Documentation

template<typename T >
HLTJetHbbFilter< T >::HLTJetHbbFilter ( const edm::ParameterSet iConfig)
explicit

Definition at line 33 of file HLTJetHbbFilter.cc.

References HLTJetHbbFilter< T >::inputJets_, HLTJetHbbFilter< T >::inputJetTags_, HLTJetHbbFilter< T >::m_theJetsToken, and HLTJetHbbFilter< T >::m_theJetTagsToken.

33  : HLTFilter(iConfig)
34  ,inputJets_ (iConfig.getParameter<edm::InputTag>("inputJets" ))
35  ,inputJetTags_(iConfig.getParameter<edm::InputTag>("inputJetTags"))
36  ,minmbb_ (iConfig.getParameter<double> ("minMbb" ))
37  ,maxmbb_ (iConfig.getParameter<double> ("maxMbb" ))
38  ,minptb1_ (iConfig.getParameter<double> ("minPtb1" ))
39  ,minptb2_ (iConfig.getParameter<double> ("minPtb2" ))
40  ,maxetab_ (iConfig.getParameter<double> ("maxEtab" ))
41  ,minptbb_ (iConfig.getParameter<double> ("minPtbb" ))
42  ,maxptbb_ (iConfig.getParameter<double> ("maxPtbb" ))
43  ,mintag1_ (iConfig.getParameter<double> ("minTag1" ))
44  ,mintag2_ (iConfig.getParameter<double> ("minTag2" ))
45  ,maxtag_ (iConfig.getParameter<double> ("maxTag" ))
46  ,triggerType_ (iConfig.getParameter<int> ("triggerType" ))
47 {
48  m_theJetsToken = consumes<std::vector<T>>(inputJets_);
49  m_theJetTagsToken = consumes<reco::JetTagCollection>(inputJetTags_);
50 
51  //put a dummy METCollection into the event, holding values for csv tag 1 and tag 2 values
52  produces<reco::METCollection>();
53 }
T getParameter(std::string const &) const
edm::InputTag inputJets_
HLTFilter(const edm::ParameterSet &config)
Definition: HLTFilter.cc:20
edm::EDGetTokenT< std::vector< T > > m_theJetsToken
edm::EDGetTokenT< reco::JetTagCollection > m_theJetTagsToken
edm::InputTag inputJetTags_
template<typename T >
HLTJetHbbFilter< T >::~HLTJetHbbFilter ( )
override

Definition at line 57 of file HLTJetHbbFilter.cc.

58 { }

Member Function Documentation

template<typename T >
static bool HLTJetHbbFilter< T >::comparator ( const Jpair l,
const Jpair r 
)
inlinestatic

Definition at line 42 of file HLTJetHbbFilter.h.

References fillDescriptions(), and metsig::jet.

42  {
43  return l.first < r.first;
44  }
template<typename T >
void HLTJetHbbFilter< T >::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 62 of file HLTJetHbbFilter.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), defaultModuleLabel(), HLTFilter::makeHLTFilterDescription(), and trigger::TriggerJet.

62  {
65  desc.add<edm::InputTag>("inputJets",edm::InputTag("hltJetCollection"));
66  desc.add<edm::InputTag>("inputJetTags",edm::InputTag(""));
67  desc.add<double>("minMbb",70);
68  desc.add<double>("maxMbb",200);
69  desc.add<double>("minPtb1",-1);
70  desc.add<double>("minPtb2",-1);
71  desc.add<double>("maxEtab",99999.0);
72  desc.add<double>("minPtbb",-1);
73  desc.add<double>("maxPtbb",-1);
74  desc.add<double>("minTag1",0.5);
75  desc.add<double>("minTag2",0.2);
76  desc.add<double>("maxTag",99999.0);
77  desc.add<int>("triggerType",trigger::TriggerJet);
78  descriptions.add(defaultModuleLabel<HLTJetHbbFilter<T>>(), desc);
79 }
std::string defaultModuleLabel()
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
void add(std::string const &label, ParameterSetDescription const &psetDescription)
template<typename T >
float HLTJetHbbFilter< T >::findCSV ( const typename std::vector< T >::const_iterator &  jet,
const reco::JetTagCollection jetTags 
)
static

Definition at line 81 of file HLTJetHbbFilter.cc.

References edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::begin(), reco::deltaR(), and edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::end().

Referenced by HLTJetHbbFilter< T >::hltFilter().

81  {
82  float minDr = 0.1; //matching jet tag with jet
83  float tmpCSV = -20 ;
84  for (auto jetb = jetTags.begin(); (jetb!=jetTags.end()); ++jetb) {
85  float tmpDr = reco::deltaR(*jet,*(jetb->first));
86  if (tmpDr < minDr) {
87  minDr = tmpDr ;
88  tmpCSV= jetb->second;
89  }
90  }
91  return tmpCSV;
92 }
const_iterator end() const
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:28
const_iterator begin() const
template<typename T >
bool HLTJetHbbFilter< T >::hltFilter ( edm::Event event,
const edm::EventSetup setup,
trigger::TriggerFilterObjectWithRefs filterproduct 
) const
overridevirtual

Implements HLTFilter.

Definition at line 100 of file HLTJetHbbFilter.cc.

References accept(), trigger::TriggerFilterObjectWithRefs::addCollectionTag(), trigger::TriggerRefsCollections::addObject(), SoftLeptonByDistance_cfi::distance, HLTJetHbbFilter< T >::findCSV(), HLTJetHbbFilter< T >::inputJets_, fwrapper::jets, HLTJetHbbFilter< T >::m_theJetsToken, HLTJetHbbFilter< T >::m_theJetTagsToken, HLTJetHbbFilter< T >::maxetab_, HLTJetHbbFilter< T >::maxmbb_, HLTJetHbbFilter< T >::maxptbb_, HLTJetHbbFilter< T >::maxtag_, HLTJetHbbFilter< T >::minmbb_, HLTJetHbbFilter< T >::minptb1_, HLTJetHbbFilter< T >::minptb2_, HLTJetHbbFilter< T >::minptbb_, HLTJetHbbFilter< T >::mintag1_, HLTJetHbbFilter< T >::mintag2_, HLTFilter::moduleLabel(), eostools::move(), HLTFilter::saveTags(), edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::size(), mathSSE::sqrt(), trigger::TriggerMET, HLTJetHbbFilter< T >::triggerType_, and extraflags_cff::vtx.

101 {
102 
103  using namespace std;
104  using namespace edm;
105  using namespace reco;
106  using namespace trigger;
107 
108  typedef vector<T> TCollection;
109  typedef Ref<TCollection> TRef;
110 
111  bool accept(false);
112  //const unsigned int nMax(15);
113 
115  event.getByToken(m_theJetsToken,jets);
116  Handle<JetTagCollection> jetTags;
117 
118  unsigned int nJet=0;
119 
120  event.getByToken(m_theJetTagsToken,jetTags);
121 
122  double tag1 = -99.;
123  double tag2 = -99.;
124 
125  if (jetTags->size()<2) return false;
126 
127  double ejet1 = -99.;
128  double pxjet1 = -99.;
129  double pyjet1 = -99.;
130  double pzjet1 = -99.;
131  double ptjet1 = -99.;
132  double etajet1 = -99.;
133 
134  double ejet2 = -99.;
135  double pxjet2 = -99.;
136  double pyjet2 = -99.;
137  double pzjet2 = -99.;
138  double ptjet2 = -99.;
139  double etajet2 = -99.;
140 
141  //looping through sets of jets
142  for (auto jet1=jets->begin(); (jet1!=jets->end()); ++jet1) {
143  tag1 = findCSV(jet1, *jetTags);
144  ++nJet;
145  for (auto jet2=(jet1+1); (jet2!=jets->end()); ++jet2) {
146  tag2 = findCSV(jet2, *jetTags);
147 
148  ejet1 = jet1->energy();
149  pxjet1 = jet1->px();
150  pyjet1 = jet1->py();
151  pzjet1 = jet1->pz();
152  ptjet1 = jet1->pt();
153  etajet1 = jet1->eta();
154 
155  ejet2 = jet2->energy();
156  pxjet2 = jet2->px();
157  pyjet2 = jet2->py();
158  pzjet2 = jet2->pz();
159  ptjet2 = jet2->pt();
160  etajet2 = jet2->eta();
161 
162 
163  if ( ( (mintag1_ <= tag1) and (tag1 <= maxtag_) ) && ( (mintag2_ <= tag2) and (tag2 <= maxtag_) ) ) {// if they're both b's
164  if ( fabs(etajet1) <= maxetab_ && fabs(etajet2) <= maxetab_ ) { // if they satisfy the eta requirement
165  if ( ( ptjet1 >= minptb1_ && ptjet2 >= minptb2_ ) || ( ptjet2 >= minptb1_ && ptjet1 >= minptb2_ ) ) { // if they satisfy the pt requirement
166 
167  double ptbb = sqrt( (pxjet1 + pxjet2) * (pxjet1 + pxjet2) +
168  (pyjet1 + pyjet2) * (pyjet1 + pyjet2) ); // pt of the two jets
169 
170  if ( ptbb >= minptbb_ && ( maxptbb_ < 0 || ptbb <= maxptbb_ ) ) { //if they satisfy the vector pt requirement
171 
172  double mbb = sqrt( (ejet1 + ejet2) * (ejet1 + ejet2) -
173  (pxjet1 + pxjet2) * (pxjet1 + pxjet2) -
174  (pyjet1 + pyjet2) * (pyjet1 + pyjet2) -
175  (pzjet1 + pzjet2) * (pzjet1 + pzjet2) );// mass of two jets
176 
177  if ( (minmbb_ <= mbb) and (mbb <= maxmbb_ ) ) { // if they fit the mass requirement
178  accept = true;
179 
180  TRef ref1 = TRef(jets, distance(jets->begin(),jet1));
181  TRef ref2 = TRef(jets, distance(jets->begin(),jet2));
182 
183  if (saveTags()) filterproduct.addCollectionTag(inputJets_);
184  filterproduct.addObject(triggerType_,ref1);
185  filterproduct.addObject(triggerType_,ref2);
186 
187  //create METCollection for storing csv tag1 and tag2 results
188  std::unique_ptr<reco::METCollection> csvObject(new reco::METCollection());
189  reco::MET::LorentzVector csvP4(tag1,tag2,0,0);
190  reco::MET::Point vtx(0,0,0);
191  reco::MET csvTags(csvP4, vtx);
192  csvObject->push_back(csvTags);
193  edm::RefProd<reco::METCollection > ref_before_put = event.getRefBeforePut<reco::METCollection >();
194  //put the METCollection into the event (necessary because of how addCollectionTag works...)
195  event.put(std::move(csvObject));
196  edm::Ref<reco::METCollection> csvRef(ref_before_put, 0);
197  if (saveTags()) filterproduct.addCollectionTag(edm::InputTag( *moduleLabel()));
198  filterproduct.addObject(trigger::TriggerMET, csvRef); //give it the ID of a MET object
199  return accept;
200  }
201  }
202  }
203  }
204  }
205  }
206  }
207  return accept;
208 }
static float findCSV(const typename std::vector< T >::const_iterator &jet, const reco::JetTagCollection &jetTags)
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
std::vector< reco::MET > METCollection
collection of MET objects
Definition: METCollection.h:23
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
Definition: MET.h:42
T sqrt(T t)
Definition: SSEVec.h:18
vector< PseudoJet > jets
edm::InputTag inputJets_
const std::string * moduleLabel() const
Definition: HLTFilter.cc:66
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:37
edm::EDGetTokenT< std::vector< T > > m_theJetsToken
fixed size matrix
bool saveTags() const
Definition: HLTFilter.h:45
HLT enums.
edm::EDGetTokenT< reco::JetTagCollection > m_theJetTagsToken
math::XYZPoint Point
point in the space
Definition: Candidate.h:41
def move(src, dest)
Definition: eostools.py:511
size_type size() const

Member Data Documentation

template<typename T >
edm::InputTag HLTJetHbbFilter< T >::inputJets_
private
template<typename T >
edm::InputTag HLTJetHbbFilter< T >::inputJetTags_
private

Definition at line 56 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::HLTJetHbbFilter().

template<typename T >
edm::EDGetTokenT<std::vector<T> > HLTJetHbbFilter< T >::m_theJetsToken
private
template<typename T >
edm::EDGetTokenT<reco::JetTagCollection> HLTJetHbbFilter< T >::m_theJetTagsToken
private
template<typename T >
double HLTJetHbbFilter< T >::maxetab_
private

Definition at line 61 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::maxmbb_
private

Definition at line 58 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::maxptbb_
private

Definition at line 63 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::maxtag_
private

Definition at line 66 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::minmbb_
private

Definition at line 57 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::minptb1_
private

Definition at line 59 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::minptb2_
private

Definition at line 60 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::minptbb_
private

Definition at line 62 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::mintag1_
private

Definition at line 64 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
double HLTJetHbbFilter< T >::mintag2_
private

Definition at line 65 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().

template<typename T >
int HLTJetHbbFilter< T >::triggerType_
private

Definition at line 67 of file HLTJetHbbFilter.h.

Referenced by HLTJetHbbFilter< T >::hltFilter().