RecoEgamma
PhotonIdentification
plugins
cuts
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc
Go to the documentation of this file.
1
#include "
PhysicsTools/SelectorUtils/interface/CutApplicatorWithEventContentBase.h
"
2
#include "
DataFormats/EgammaCandidates/interface/Photon.h
"
3
#include "
CommonTools/Egamma/interface/EffectiveAreas.h
"
4
5
class
PhoAnyPFIsoWithEAAndExpoScalingEBCut
:
public
CutApplicatorWithEventContentBase
{
6
public
:
7
PhoAnyPFIsoWithEAAndExpoScalingEBCut
(
const
edm::ParameterSet
&
c
);
8
9
result_type
operator()
(
const
reco::PhotonPtr
&)
const
final
;
10
11
void
setConsumes
(
edm::ConsumesCollector
&)
final
;
12
void
getEventContent
(
const
edm::EventBase
&)
final
;
13
14
double
value
(
const
reco::CandidatePtr
&
cand
)
const
final
;
15
16
CandidateType
candidateType
()
const
final {
return
PHOTON
; }
17
18
private
:
19
// Cut values
20
float
_C1_EB
;
21
float
_C2_EB
;
22
float
_C3_EB
;
23
float
_C1_EE
;
24
float
_C2_EE
;
25
// Configuration
26
float
_barrelCutOff
;
27
bool
_useRelativeIso
;
28
// Effective area constants
29
EffectiveAreas
_effectiveAreas
;
30
// The isolations computed upstream
31
edm::Handle<edm::ValueMap<float>
>
_anyPFIsoMap
;
32
// The rho
33
edm::Handle<double>
_rhoHandle
;
34
35
constexpr
static
char
anyPFIsoWithEA_
[] =
"anyPFIsoWithEA"
;
36
constexpr
static
char
rhoString_
[] =
"rho"
;
37
};
38
39
constexpr
char
PhoAnyPFIsoWithEAAndExpoScalingEBCut::anyPFIsoWithEA_
[];
40
constexpr
char
PhoAnyPFIsoWithEAAndExpoScalingEBCut::rhoString_
[];
41
42
DEFINE_EDM_PLUGIN
(
CutApplicatorFactory
,
PhoAnyPFIsoWithEAAndExpoScalingEBCut
,
"PhoAnyPFIsoWithEAAndExpoScalingEBCut"
);
43
44
PhoAnyPFIsoWithEAAndExpoScalingEBCut::PhoAnyPFIsoWithEAAndExpoScalingEBCut
(
const
edm::ParameterSet
&
c
)
45
:
CutApplicatorWithEventContentBase
(
c
),
46
_C1_EB(
c
.getParameter<double>(
"C1_EB"
)),
47
_C2_EB(
c
.getParameter<double>(
"C2_EB"
)),
48
_C3_EB(
c
.getParameter<double>(
"C3_EB"
)),
49
_C1_EE(
c
.getParameter<double>(
"C1_EE"
)),
50
_C2_EE(
c
.getParameter<double>(
"C2_EE"
)),
51
_barrelCutOff(
c
.getParameter<double>(
"barrelCutOff"
)),
52
_useRelativeIso(
c
.getParameter<
bool
>(
"useRelativeIso"
)),
53
_effectiveAreas((
c
.getParameter<
edm
::FileInPath>(
"effAreasConfigFile"
)).
fullPath
()) {
54
edm::InputTag
maptag =
c
.getParameter<
edm::InputTag
>(
"anyPFIsoMap"
);
55
contentTags_
.emplace(
anyPFIsoWithEA_
, maptag);
56
57
edm::InputTag
rhoTag
=
c
.getParameter<
edm::InputTag
>(
"rho"
);
58
contentTags_
.emplace(
rhoString_
,
rhoTag
);
59
}
60
61
void
PhoAnyPFIsoWithEAAndExpoScalingEBCut::setConsumes
(
edm::ConsumesCollector
&
cc
) {
62
auto
anyPFIsoWithEA =
cc
.consumes<
edm::ValueMap<float>
>(
contentTags_
[
anyPFIsoWithEA_
]);
63
contentTokens_
.emplace(
anyPFIsoWithEA_
, anyPFIsoWithEA);
64
65
auto
rho
=
cc
.consumes<
double
>(
contentTags_
[
rhoString_
]);
66
contentTokens_
.emplace(
rhoString_
,
rho
);
67
}
68
69
void
PhoAnyPFIsoWithEAAndExpoScalingEBCut::getEventContent
(
const
edm::EventBase
&
ev
) {
70
ev
.getByLabel(
contentTags_
[
anyPFIsoWithEA_
],
_anyPFIsoMap
);
71
ev
.getByLabel(
contentTags_
[
rhoString_
],
_rhoHandle
);
72
}
73
74
CutApplicatorBase::result_type
PhoAnyPFIsoWithEAAndExpoScalingEBCut::operator()
(
const
reco::PhotonPtr
&
cand
)
const
{
75
// in case we are by-value
76
const
std::string
& inst_name =
contentTags_
.find(
anyPFIsoWithEA_
)->second.instance();
77
edm::Ptr<pat::Photon>
pat
(
cand
);
78
float
anyisoval = -1.0;
79
if
(
_anyPFIsoMap
.
isValid
() &&
_anyPFIsoMap
->
contains
(
cand
.id())) {
80
anyisoval = (*_anyPFIsoMap)[
cand
];
81
}
else
if
(
_anyPFIsoMap
.
isValid
() &&
_anyPFIsoMap
->
idSize
() == 1 &&
cand
.id() ==
edm::ProductID
()) {
82
// in case we have spoofed a ptr
83
//note this must be a 1:1 valuemap (only one product input)
84
anyisoval =
_anyPFIsoMap
->
begin
()[
cand
.key()];
85
}
else
if
(
_anyPFIsoMap
.
isValid
()) {
// throw an exception
86
anyisoval = (*_anyPFIsoMap)[
cand
];
87
}
88
89
// Figure out the cut value
90
// The value is generally pt-dependent: C1 + pt * C2
91
const
float
pt
=
cand
->pt();
92
93
// In this version of the isolation cut we apply
94
// exponential pt scaling to the barrel isolation cut,
95
// and linear pt scaling to the endcap isolation cut.
96
double
absEta =
std::abs
(
cand
->superCluster()->eta());
97
const
float
isolationCutValue = (absEta <
_barrelCutOff
?
_C1_EB
+
exp
(
pt
*
_C2_EB
+
_C3_EB
) :
_C1_EE
+
pt
*
_C2_EE
);
98
99
// Retrieve the variable value for this particle
100
float
anyPFIso =
_anyPFIsoMap
.
isValid
() ? anyisoval :
pat
->userFloat(inst_name);
101
102
// Apply pile-up correction
103
double
eA =
_effectiveAreas
.
getEffectiveArea
(absEta);
104
double
rho
= *
_rhoHandle
;
105
float
anyPFIsoWithEA =
std::max
(0.0, anyPFIso -
rho
* eA);
106
107
// Divide by pT if the relative isolation is requested
108
if
(
_useRelativeIso
)
109
anyPFIsoWithEA /=
pt
;
110
111
// Apply the cut and return the result
112
return
anyPFIsoWithEA < isolationCutValue;
113
}
114
115
double
PhoAnyPFIsoWithEAAndExpoScalingEBCut::value
(
const
reco::CandidatePtr
&
cand
)
const
{
116
reco::PhotonPtr
pho(
cand
);
117
118
// in case we are by-value
119
const
std::string
& inst_name =
contentTags_
.find(
anyPFIsoWithEA_
)->second.instance();
120
edm::Ptr<pat::Photon>
pat
(
cand
);
121
float
anyisoval = -1.0;
122
if
(
_anyPFIsoMap
.
isValid
() &&
_anyPFIsoMap
->
contains
(
cand
.id())) {
123
anyisoval = (*_anyPFIsoMap)[
cand
];
124
}
else
if
(
_anyPFIsoMap
.
isValid
() &&
_anyPFIsoMap
->
idSize
() == 1 &&
cand
.id() ==
edm::ProductID
()) {
125
// in case we have spoofed a ptr
126
//note this must be a 1:1 valuemap (only one product input)
127
anyisoval =
_anyPFIsoMap
->
begin
()[
cand
.key()];
128
}
else
if
(
_anyPFIsoMap
.
isValid
()) {
// throw an exception
129
anyisoval = (*_anyPFIsoMap)[
cand
];
130
}
131
132
// Figure out the cut value
133
// The value is generally pt-dependent: C1 + pt * C2
134
const
float
pt
= pho->pt();
135
136
// In this version of the isolation cut we apply
137
// exponential pt scaling to the barrel isolation cut,
138
// and linear pt scaling to the endcap isolation cut.
139
double
absEta =
std::abs
(pho->superCluster()->eta());
140
141
// Retrieve the variable value for this particle
142
float
anyPFIso =
_anyPFIsoMap
.
isValid
() ? anyisoval :
pat
->userFloat(inst_name);
143
144
// Apply pile-up correction
145
double
eA =
_effectiveAreas
.
getEffectiveArea
(absEta);
146
double
rho
= *
_rhoHandle
;
147
float
anyPFIsoWithEA =
std::max
(0.0, anyPFIso -
rho
* eA);
148
149
// Divide by pT if the relative isolation is requested
150
if
(
_useRelativeIso
)
151
anyPFIsoWithEA /=
pt
;
152
153
// Apply the cut and return the result
154
return
anyPFIsoWithEA;
155
}
electrons_cff.bool
bool
Definition:
electrons_cff.py:393
CutApplicatorBase::PHOTON
Definition:
CutApplicatorBase.h:47
DiDispStaMuonMonitor_cfi.pt
pt
Definition:
DiDispStaMuonMonitor_cfi.py:39
contentValuesFiles.fullPath
fullPath
Definition:
contentValuesFiles.py:64
edm
HLT enums.
Definition:
AlignableModifier.h:19
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_rhoHandle
edm::Handle< double > _rhoHandle
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:33
PhoAnyPFIsoWithEAAndExpoScalingEBCut::setConsumes
void setConsumes(edm::ConsumesCollector &) final
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:61
PhoAnyPFIsoWithEAAndExpoScalingEBCut::rhoString_
constexpr static char rhoString_[]
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:36
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C2_EE
float _C2_EE
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:24
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_useRelativeIso
bool _useRelativeIso
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:27
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C1_EB
float _C1_EB
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:20
EffectiveAreas.h
watchdog.const
const
Definition:
watchdog.py:83
edm::Handle
Definition:
AssociativeIterator.h:50
PhoAnyPFIsoWithEAAndExpoScalingEBCut::candidateType
CandidateType candidateType() const final
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:16
CutApplicatorWithEventContentBase::contentTags_
std::unordered_map< std::string, edm::InputTag > contentTags_
Definition:
CutApplicatorWithEventContentBase.h:35
HLT_FULL_cff.rhoTag
rhoTag
Definition:
HLT_FULL_cff.py:14986
candidate_functions::CandidateCut::result_type
bool result_type
Definition:
CandidateCut.h:11
Photon.h
EffectiveAreas
Definition:
EffectiveAreas.h:7
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C3_EB
float _C3_EB
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:22
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C2_EB
float _C2_EB
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:21
CutApplicatorWithEventContentBase.h
DEFINE_EDM_PLUGIN
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition:
PluginFactory.h:124
DDAxes::rho
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition:
AlCaHLTBitMon_QueryRunRegistry.py:256
PhoAnyPFIsoWithEAAndExpoScalingEBCut
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:5
edm::ParameterSet
Definition:
ParameterSet.h:47
CutApplicatorBase::CandidateType
CandidateType
Definition:
CutApplicatorBase.h:47
SiStripPI::max
Definition:
SiStripPayloadInspectorHelper.h:169
PhoAnyPFIsoWithEAAndExpoScalingEBCut::operator()
result_type operator()(const reco::PhotonPtr &) const final
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:74
edmplugin::PluginFactory
Definition:
PluginFactory.h:34
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_anyPFIsoMap
edm::Handle< edm::ValueMap< float > > _anyPFIsoMap
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:31
edm::ValueMap::begin
const_iterator begin() const
Definition:
ValueMap.h:229
cand
Definition:
decayParser.h:32
PhoAnyPFIsoWithEAAndExpoScalingEBCut::value
double value(const reco::CandidatePtr &cand) const final
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:115
PhoAnyPFIsoWithEAAndExpoScalingEBCut::PhoAnyPFIsoWithEAAndExpoScalingEBCut
PhoAnyPFIsoWithEAAndExpoScalingEBCut(const edm::ParameterSet &c)
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:44
pat
Definition:
HeavyIon.h:7
HltBtagPostValidation_cff.c
c
Definition:
HltBtagPostValidation_cff.py:31
cc
edm::Ptr
Definition:
AssociationVector.h:31
PhoAnyPFIsoWithEAAndExpoScalingEBCut::getEventContent
void getEventContent(const edm::EventBase &) final
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:69
edm::ValueMap::idSize
size_t idSize() const
Definition:
ValueMap.h:157
edm::ValueMap< float >
ev
bool ev
Definition:
Hydjet2Hadronizer.cc:95
CutApplicatorWithEventContentBase::contentTokens_
std::unordered_map< std::string, edm::EDGetToken > contentTokens_
Definition:
CutApplicatorWithEventContentBase.h:40
edm::EventBase
Definition:
EventBase.h:46
EffectiveAreas::getEffectiveArea
const float getEffectiveArea(float eta) const
Definition:
EffectiveAreas.cc:44
PhoAnyPFIsoWithEAAndExpoScalingEBCut::anyPFIsoWithEA_
constexpr static char anyPFIsoWithEA_[]
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:35
edm::ValueMap::contains
bool contains(ProductID id) const
Definition:
ValueMap.h:155
funct::abs
Abs< T >::type abs(const T &t)
Definition:
Abs.h:22
JetChargeProducer_cfi.exp
exp
Definition:
JetChargeProducer_cfi.py:6
edm::HandleBase::isValid
bool isValid() const
Definition:
HandleBase.h:70
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_barrelCutOff
float _barrelCutOff
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:26
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_C1_EE
float _C1_EE
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:23
edm::InputTag
Definition:
InputTag.h:15
edm::ConsumesCollector
Definition:
ConsumesCollector.h:45
edm::ProductID
Definition:
ProductID.h:27
CutApplicatorWithEventContentBase
Definition:
CutApplicatorWithEventContentBase.h:19
PhoAnyPFIsoWithEAAndExpoScalingEBCut::_effectiveAreas
EffectiveAreas _effectiveAreas
Definition:
PhoAnyPFIsoWithEAAndExpoScalingEBCut.cc:29
Generated for CMSSW Reference Manual by
1.8.16