CMS 3D CMS Logo

MatchJet.cc
Go to the documentation of this file.
1 #include <functional>
2 #include <algorithm>
3 #include <vector>
4 #include <memory>
5 #include <string>
6 
7 #include <Math/GenVector/Cartesian3D.h>
8 #include <Math/GenVector/VectorUtil.h>
9 
11 
12 #include "Matching.h"
13 
14 using namespace btag;
15 
16 namespace {
17  inline double sqr(double val) { return val * val; }
18 } // namespace
19 
21  : maxChi2(pSet.getParameter<double>("maxChi2")),
22  sigmaDeltaR2(sqr(pSet.getParameter<double>("sigmaDeltaR"))),
23  sigmaDeltaE2(sqr(pSet.getParameter<double>("sigmaDeltaE"))),
24  threshold(1.0) {}
25 
27  const edm::RefToBaseVector<reco::Jet>& recJets_,
31 
32  typedef ROOT::Math::Cartesian3D<double> Vector;
33 
34  std::vector<Vector> corrRefJets;
35  refJets.clear();
36  for (edm::RefToBaseVector<reco::Jet>::const_iterator iter = refJets.begin(); iter != refJets_.end(); ++iter) {
37  edm::RefToBase<reco::Jet> jetRef = *iter;
38  reco::Jet jet = refJetCorrector(*jetRef);
39  if (jet.energy() < threshold)
40  continue;
41 
42  corrRefJets.push_back(Vector(jet.px(), jet.py(), jet.pz()));
43  refJets.push_back(jetRef);
44  }
45 
46  std::vector<Vector> corrRecJets;
47  recJets.clear();
48  for (edm::RefToBaseVector<reco::Jet>::const_iterator iter = recJets.begin(); iter != recJets_.end(); ++iter) {
49  edm::RefToBase<reco::Jet> jetRec = *iter;
50  reco::Jet jet = recJetCorrector(*jetRec);
51  if (jet.energy() < threshold)
52  continue;
53 
54  corrRecJets.push_back(Vector(jet.px(), jet.py(), jet.pz()));
55  recJets.push_back(jetRec);
56  }
57 
58  refToRec.clear();
59  refToRec.resize(refJets.size(), -1);
60 
61  recToRef.clear();
62  recToRef.resize(recJets.size(), -1);
63 
64  Matching<double> matching(corrRefJets, corrRecJets, [this](auto& v1, auto& v2) {
65  double x = ROOT::Math::VectorUtil::DeltaR2(v1, v2) / this->sigmaDeltaR2 +
66  sqr(2. * (v1.R() - v2.R()) / (v1.R() + v2.R())) / this->sigmaDeltaE2;
67  // Possible debug output
68  // std::cout << "xxx " << ROOT::Math::VectorUtil::DeltaPhi(v1, v2) << " " << (v1.Eta() - v2.Eta())
69  // << " " << (v1.R() - v2.R()) / (v1.R() + v2.R()) << " " << x << std::endl;
70  return x;
71  });
72 
74 
75  const std::vector<Match>& matches = matching.match(std::less<double>(), [&](auto& c) { return c < this->maxChi2; });
76  for (std::vector<Match>::const_iterator iter = matches.begin(); iter != matches.end(); ++iter) {
77  refToRec[iter->index1] = iter->index2;
78  recToRef[iter->index2] = iter->index1;
79  }
80 }
81 
84  if (recJet.id() != recJets.id())
85  return result;
86 
87  for (unsigned int i = 0; i != recJets.size(); ++i) {
88  if (recJets[i] == recJet) {
89  int match = recToRef[i];
90  if (match >= 0)
91  result = refJets[match];
92  break;
93  }
94  }
95 
96  return result;
97 }
edm::RefToBaseVector::end
const_iterator end() const
Definition: RefToBaseVector.h:186
MatchJet::sigmaDeltaE2
double sigmaDeltaE2
Definition: MatchJet.h:44
mps_fire.i
i
Definition: mps_fire.py:428
reco::Jet
Base class for all types of Jets.
Definition: Jet.h:20
CorrectJet::setCorrector
void setCorrector(const reco::JetCorrector *corrector)
Returns the corrected jet.
Definition: CorrectJet.h:21
reco::JetCorrector
Definition: JetCorrector.h:33
sqr
int sqr(const T &t)
Definition: pfalgo_common_ref.h:9
MatchJet::sigmaDeltaR2
double sigmaDeltaR2
Definition: MatchJet.h:43
MatchJet.h
beam_dqm_sourceclient-live_cfg.maxChi2
maxChi2
Definition: beam_dqm_sourceclient-live_cfg.py:144
DDAxes::x
TtSemiLepJetCombMVATrainer_cfi.matching
matching
Definition: TtSemiLepJetCombMVATrainer_cfi.py:13
MatchJet::operator()
edm::RefToBase< reco::Jet > operator()(const edm::RefToBase< reco::Jet > &recJet) const
Returns the matched "reference" jet.
Definition: MatchJet.cc:82
MatchJet::refJetCorrector
CorrectJet refJetCorrector
Definition: MatchJet.h:39
Vector
ROOT::Math::Plane3D::Vector Vector
Definition: EcalHitMaker.cc:29
pfClustersFromHGC3DClusters_cfi.corrector
corrector
Definition: pfClustersFromHGC3DClusters_cfi.py:5
MatchJet::refToRec
std::vector< int > refToRec
Definition: MatchJet.h:35
edm::RefToBaseVector::push_back
void push_back(const RefToBase< T > &)
Definition: RefToBaseVector.h:217
edm::RefToBaseVector::id
ProductID id() const
Definition: RefToBaseVector.h:171
edm::reftobase::BaseVectorHolder::const_iterator
Definition: BaseVectorHolder.h:54
MatchJet::recJets
edm::RefToBaseVector< reco::Jet > recJets
Definition: MatchJet.h:37
Matching.h
MatchJet::recJetCorrector
CorrectJet recJetCorrector
Definition: MatchJet.h:40
edm::ParameterSet
Definition: ParameterSet.h:47
match
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
MatchJet::refJets
edm::RefToBaseVector< reco::Jet > refJets
Definition: MatchJet.h:36
MatchJet::maxChi2
double maxChi2
Definition: MatchJet.h:42
MatchJet::threshold
double threshold
Definition: MatchJet.h:45
MatchJet::MatchJet
MatchJet()
Definition: MatchJet.h:21
btag::Matching
Definition: Matching.h:13
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
edm::RefToBaseVector< reco::Jet >
MultipleCompare.Match
def Match(required, got)
Definition: MultipleCompare.py:75
MatchJet::recToRef
std::vector< int > recToRef
Definition: MatchJet.h:35
edm::RefToBase::id
ProductID id() const
Definition: RefToBase.h:214
edm::RefToBaseVector::size
size_type size() const
Definition: RefToBaseVector.h:160
heppy_batch.val
val
Definition: heppy_batch.py:351
metsig::jet
Definition: SignAlgoResolutions.h:47
MatchJet::matchCollections
void matchCollections(const edm::RefToBaseVector< reco::Jet > &refJets, const edm::RefToBaseVector< reco::Jet > &recJets, const reco::JetCorrector *corrector)
match the collections
Definition: MatchJet.cc:26
edm::RefToBase< reco::Jet >
edm::RefToBaseVector::begin
const_iterator begin() const
Definition: RefToBaseVector.h:181
patCandidatesForDimuonsSequences_cff.matches
matches
Definition: patCandidatesForDimuonsSequences_cff.py:131
btag::Matching::Match
Definition: Matching.h:28
mps_fire.result
result
Definition: mps_fire.py:311
edm::RefToBaseVector::clear
void clear()
Definition: RefToBaseVector.h:165
remoteMonitoring_LED_IterMethod_cfg.threshold
threshold
Definition: remoteMonitoring_LED_IterMethod_cfg.py:426
btag
Definition: Matching.h:10