DQMOffline
RecoB
src
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
10
#include "
DQMOffline/RecoB/interface/MatchJet.h
"
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
20
MatchJet::MatchJet
(
const
edm::ParameterSet
& pSet)
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
26
void
MatchJet::matchCollections
(
const
edm::RefToBaseVector<reco::Jet>
& refJets_,
27
const
edm::RefToBaseVector<reco::Jet>
& recJets_,
28
const
reco::JetCorrector
*
corrector
) {
29
refJetCorrector
.
setCorrector
(
corrector
);
30
recJetCorrector
.
setCorrector
(
corrector
);
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
73
typedef
Matching<double>::Match
Match
;
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
82
edm::RefToBase<reco::Jet>
MatchJet::operator()
(
const
edm::RefToBase<reco::Jet>
& recJet)
const
{
83
edm::RefToBase<reco::Jet>
result
;
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:355
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:35
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:136
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:36
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:303
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
Generated for CMSSW Reference Manual by
1.8.16