CMS 3D CMS Logo

HLTFatJetMassFilter.cc
Go to the documentation of this file.
1 
8 #include <vector>
9 
23 
25 
26 //
27 // constructors and destructor
28 //
29 template<typename jetType>
31  HLTFilter(iConfig),
32  inputJetTag_ (iConfig.template getParameter< edm::InputTag > ("inputJetTag")),
33  minMass_ (iConfig.template getParameter<double> ("minMass")),
34  fatJetDeltaR_ (iConfig.template getParameter<double> ("fatJetDeltaR")),
35  maxDeltaEta_ (iConfig.template getParameter<double> ("maxDeltaEta")),
36  maxJetEta_ (iConfig.template getParameter<double> ("maxJetEta")),
37  minJetPt_ (iConfig.template getParameter<double> ("minJetPt")),
38  triggerType_ (iConfig.template getParameter<int> ("triggerType"))
39 {
40  m_theJetToken = consumes<std::vector<jetType>>(inputJetTag_);
41  LogDebug("") << "HLTFatJetMassFilter: Input/minMass/fatJetDeltaR/maxDeltaEta/maxJetEta/minJetPt/triggerType : "
42  << inputJetTag_.encode() << " "
43  << minMass_ << " "
44  << fatJetDeltaR_ << " "
45  << maxDeltaEta_ << " "
46  << maxJetEta_ << " "
47  << minJetPt_ << " "
48  << triggerType_;
49 }
50 
51 template<typename jetType>
53 
54 template<typename jetType>
55 void
59  desc.add<edm::InputTag>("inputJetTag",edm::InputTag("hltCollection"));
60  desc.add<double>("minMass",0.0);
61  desc.add<double>("fatJetDeltaR",1.1);
62  desc.add<double>("maxDeltaEta",10.0);
63  desc.add<double>("maxJetEta",3.0);
64  desc.add<double>("minJetPt",30.0);
65  desc.add<int>("triggerType",trigger::TriggerJet);
67 }
68 
69 // ------------ method called to produce the data ------------
70 template<typename jetType>
71 bool
73 {
74  using namespace std;
75  using namespace edm;
76  using namespace reco;
77 
78  typedef vector<jetType> JetCollection;
79  typedef Ref<JetCollection> JetRef;
80 
81  // The filter object
82  if (saveTags()) filterproduct.addCollectionTag(inputJetTag_);
83 
84  // All jets
86  iEvent.getByToken ( m_theJetToken,objects);
87 
88  // Selected jets
89  CaloJetCollection recojets;
90  typename JetCollection::const_iterator i ( objects->begin() );
91  for(;i != objects->end(); i++){
92  if(std::abs(i->eta()) < maxJetEta_ && i->pt() >= minJetPt_){
93  reco::CaloJet jet(i->p4(), i->vertex(), reco::CaloJet::Specific());
94  recojets.push_back(jet);
95  }
96  }
97 
98  // events with at least two jets
99  if(recojets.size() < 2) return false;
100 
101  math::PtEtaPhiMLorentzVector j1(0.1, 0., 0., 0.);
102  math::PtEtaPhiMLorentzVector j2(0.1, 0., 0., 0.);
103  double jetPt1 = 0.;
104  double jetPt2 = 0.;
105 
106  // look for the two highest-pT jet
107  CaloJetCollection::const_iterator recojet ( recojets.begin() );
108  for (; recojet != recojets.end() ; recojet++) {
109  if(recojet->pt() > jetPt1) {
110  // downgrade the 1st jet to 2nd jet
111  j2 = j1;
112  jetPt2 = j2.pt();
113  // promote this jet to 1st jet
114  j1 = recojet->p4();
115  jetPt1 = recojet->pt();
116  } else if(recojet->pt() > jetPt2) {
117  // promote this jet to 2nd jet
118  j2 = recojet->p4();
119  jetPt2 = recojet->pt();
120  }
121  }
122 
123  // apply DeltaEta cut
124  double DeltaEta = std::abs(j1.eta() - j2.eta());
125  if(DeltaEta > maxDeltaEta_) return false;
126 
129 
130  // apply radiation recovery
131  for ( recojet = recojets.begin() ; recojet != recojets.end() ; recojet++) {
132  double DeltaR1sq = reco::deltaR2(*recojet, j1);
133  double DeltaR2sq = reco::deltaR2(*recojet, j2);
134  if(DeltaR1sq < DeltaR2sq && DeltaR1sq < fatJetDeltaR_*fatJetDeltaR_) {
135  fj1 += recojet->p4();
136  } else if(DeltaR2sq < fatJetDeltaR_*fatJetDeltaR_) {
137  fj2 += recojet->p4();
138  }
139  }
140 
141  // Apply mass cut
142  fj1 += fj2;
143  if(fj1.mass() < minMass_) return false;
144 
145  return true;
146 }
#define LogDebug(id)
Jets made from CaloTowers.
Definition: CaloJet.h:29
std::vector< Jet > JetCollection
Definition: Jet.h:55
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::string defaultModuleLabel()
std::string encode() const
Definition: InputTag.cc:159
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
edm::Ref< JetBxCollection > JetRef
Definition: Jet.h:13
int iEvent
Definition: GenABIO.cc:224
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def template(fileName, svg, replaceme="REPLACEME")
Definition: svgfig.py:521
edm::InputTag inputJetTag_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::EDGetTokenT< std::vector< jetType > > m_theJetToken
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:16
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
Definition: HLTFilter.cc:29
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
~HLTFatJetMassFilter() override
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
fixed size matrix
bool saveTags() const
Definition: HLTFilter.h:45
HLT enums.
HLTFatJetMassFilter(const edm::ParameterSet &)
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override
std::vector< CaloJet > CaloJetCollection
collection of CaloJet objects