Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
CommonTools
ParticleFlow
interface
ElectronIDPFCandidateSelectorDefinition.h
Go to the documentation of this file.
1
#ifndef CommonTools_ParticleFlow_ElectronIDPFCandidateSelectorDefinition
2
#define CommonTools_ParticleFlow_ElectronIDPFCandidateSelectorDefinition
3
12
#include "
FWCore/Framework/interface/Event.h
"
13
#include "
FWCore/Framework/interface/ConsumesCollector.h
"
14
#include "
FWCore/ParameterSet/interface/ParameterSet.h
"
15
#include "
DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h
"
16
#include "
DataFormats/ParticleFlowCandidate/interface/PFCandidate.h
"
17
#include "
DataFormats/Common/interface/ValueMap.h
"
18
#include "
DataFormats/EgammaCandidates/interface/GsfElectron.h
"
19
#include "
CommonTools/ParticleFlow/interface/PFCandidateSelectorDefinition.h
"
20
#include <algorithm>
21
22
namespace
pf2pat {
23
24
struct
ElectronIDPFCandidateSelectorDefinition
:
public
PFCandidateSelectorDefinition
{
25
ElectronIDPFCandidateSelectorDefinition
(
const
edm::ParameterSet
&
cfg
,
edm::ConsumesCollector
&& iC)
26
:
electronsToken_
(
27
iC.consumes<
reco
::
GsfElectronCollection
>(cfg.getParameter<edm::
InputTag
>(
"recoGsfElectrons"
))),
28
electronIdToken_
(iC.consumes<edm::ValueMap<float> >(cfg.getParameter<edm::
InputTag
>(
"electronIdMap"
))) {
29
if
(cfg.
exists
(
"bitsToCheck"
)) {
30
isBitMap_
=
true
;
31
mask_
= 0;
32
if
(cfg.
existsAs
<std::vector<std::string> >(
"bitsToCheck"
)) {
33
std::vector<std::string> strbits = cfg.
getParameter
<std::vector<std::string> >(
"bitsToCheck"
);
34
for
(std::vector<std::string>::const_iterator istrbit = strbits.begin(), estrbit = strbits.end();
35
istrbit != estrbit;
36
++istrbit) {
37
if
(*istrbit ==
"id"
) {
38
mask_
|= 1;
39
}
else
if
(*istrbit ==
"iso"
) {
40
mask_
|= 2;
41
}
else
if
(*istrbit ==
"conv"
) {
42
mask_
|= 4;
43
}
else
if
(*istrbit ==
"ip"
) {
44
mask_
|= 8;
45
}
else
46
throw
cms::Exception
(
"Configuration"
)
47
<<
"ElectronIDPFCandidateSelector: "
48
<<
"bitsToCheck allowed string values are only id(0), iso(1), conv(2), ip(3).\n"
49
<<
"Otherwise, use uint32_t bitmask).\n"
;
50
}
51
}
else
if
(cfg.
existsAs
<uint32_t>(
"bitsToCheck"
)) {
52
mask_
= cfg.
getParameter
<uint32_t>(
"bitsToCheck"
);
53
}
else
{
54
throw
cms::Exception
(
"Configuration"
)
55
<<
"ElectronIDPFCandidateSelector: "
56
<<
"bitsToCheck must be either a vector of strings, or a uint32 bitmask.\n"
;
57
}
58
}
else
{
59
isBitMap_
=
false
;
60
value_
= cfg.
getParameter
<
double
>(
"electronIdCut"
);
61
}
62
}
63
64
void
select
(
const
HandleToCollection
& hc,
const
edm::Event
&
e
,
const
edm::EventSetup
&
s
) {
65
selected_
.clear();
66
67
edm::Handle<reco::GsfElectronCollection>
electrons
;
68
e.
getByToken
(
electronsToken_
, electrons);
69
70
edm::Handle<edm::ValueMap<float>
> electronId;
71
e.
getByToken
(
electronIdToken_
, electronId);
72
73
unsigned
key
= 0;
74
for
(collection::const_iterator pfc = hc->begin(); pfc != hc->end(); ++pfc, ++
key
) {
75
// Get GsfTrack for matching with reco::GsfElectron objects
76
reco::GsfTrackRef
PfTk = pfc->gsfTrackRef();
77
78
// skip ones without GsfTrack: they won't be matched anyway
79
if
(PfTk.
isNull
())
80
continue
;
81
82
int
match
= -1;
83
// try first the non-ambiguous tracks
84
for
(
auto
it = electrons->begin(), ed = electrons->end(); it != ed; ++it) {
85
if
(it->gsfTrack() == PfTk) {
86
match = it - electrons->begin();
87
break
;
88
}
89
}
90
// then the ambiguous ones
91
if
(match == -1) {
92
for
(
auto
it = electrons->begin(), ed = electrons->end(); it != ed; ++it) {
93
if
(
std::count
(it->ambiguousGsfTracks().begin(), it->ambiguousGsfTracks().end(), PfTk) > 0) {
94
match = it - electrons->begin();
95
break
;
96
}
97
}
98
}
99
// if found, make a GsfElectronRef and read electron id
100
if
(match != -1) {
101
reco::GsfElectronRef
ref(electrons, match);
102
float
eleId = (*electronId)[ref];
103
bool
pass =
false
;
104
if
(
isBitMap_
) {
105
uint32_t thisval = eleId;
106
pass = ((thisval &
mask_
) ==
mask_
);
107
}
else
{
108
pass = (eleId >
value_
);
109
}
110
if
(pass) {
111
selected_
.push_back(
reco::PFCandidate
(*pfc));
112
reco::PFCandidatePtr
ptrToMother(hc, key);
113
selected_
.back().setSourceCandidatePtr(ptrToMother);
114
}
115
}
116
}
117
}
118
119
private
:
120
edm::EDGetTokenT<reco::GsfElectronCollection>
electronsToken_
;
121
edm::EDGetTokenT<edm::ValueMap<float>
>
electronIdToken_
;
122
bool
isBitMap_
;
123
uint32_t
mask_
;
124
double
value_
;
125
};
126
}
// namespace pf2pat
127
128
#endif
pf2pat::ElectronIDPFCandidateSelectorDefinition
Selects PFCandidates basing on cuts provided with string cut parser.
Definition:
ElectronIDPFCandidateSelectorDefinition.h:24
looper.cfg
tuple cfg
Definition:
looper.py:296
edm::ParameterSet::existsAs
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition:
ParameterSet.h:171
Exception
Definition:
hltDiff.cc:245
pf2pat::ElectronIDPFCandidateSelectorDefinition::ElectronIDPFCandidateSelectorDefinition
ElectronIDPFCandidateSelectorDefinition(const edm::ParameterSet &cfg, edm::ConsumesCollector &&iC)
Definition:
ElectronIDPFCandidateSelectorDefinition.h:25
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition:
Event.h:539
edm::Ref< GsfTrackCollection >
Event.h
edm::Handle
Definition:
AssociativeIterator.h:50
edm::ParameterSet::exists
bool exists(std::string const ¶meterName) const
checks if a parameter exists
Definition:
ParameterSet.cc:681
pf2pat::ElectronIDPFCandidateSelectorDefinition::mask_
uint32_t mask_
Definition:
ElectronIDPFCandidateSelectorDefinition.h:123
dt_dqm_sourceclient_common_cff.reco
tuple reco
Definition:
dt_dqm_sourceclient_common_cff.py:111
ValueMap.h
HI_PhotonSkim_cff.electrons
tuple electrons
Definition:
HI_PhotonSkim_cff.py:77
reco::GsfElectronCollection
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
Definition:
GsfElectronFwd.h:14
edm::EDGetTokenT< reco::GsfElectronCollection >
ParameterSet.h
PFCandidateSelectorDefinition.h
pf2pat::ElectronIDPFCandidateSelectorDefinition::isBitMap_
bool isBitMap_
Definition:
ElectronIDPFCandidateSelectorDefinition.h:122
submitPVResolutionJobs.key
tuple key
prepare the HTCondor submission files and eventually submit them
Definition:
submitPVResolutionJobs.py:398
pf2pat::ElectronIDPFCandidateSelectorDefinition::electronIdToken_
edm::EDGetTokenT< edm::ValueMap< float > > electronIdToken_
Definition:
ElectronIDPFCandidateSelectorDefinition.h:121
edm::EventSetup
Definition:
EventSetup.h:59
edm::Ptr< PFCandidate >
edm::Ref::isNull
bool isNull() const
Checks for null.
Definition:
Ref.h:235
submitPVResolutionJobs.count
tuple count
Definition:
submitPVResolutionJobs.py:352
GsfElectron.h
pf2pat::ElectronIDPFCandidateSelectorDefinition::select
void select(const HandleToCollection &hc, const edm::Event &e, const edm::EventSetup &s)
Definition:
ElectronIDPFCandidateSelectorDefinition.h:64
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition:
ParameterSet.h:303
alignCSCRings.s
list s
Definition:
alignCSCRings.py:92
pf2pat::PFCandidateSelectorDefinition::selected_
container selected_
Definition:
PFCandidateSelectorDefinition.h:33
alignCSCRings.e
list e
Definition:
alignCSCRings.py:91
HLT_FULL_cff.InputTag
tuple InputTag
Definition:
HLT_FULL_cff.py:86956
pf2pat::ElectronIDPFCandidateSelectorDefinition::electronsToken_
edm::EDGetTokenT< reco::GsfElectronCollection > electronsToken_
Definition:
ElectronIDPFCandidateSelectorDefinition.h:120
reco::PFCandidate
Particle reconstructed by the particle flow algorithm.
Definition:
PFCandidate.h:41
pf2pat::PFCandidateSelectorDefinition
Definition:
PFCandidateSelectorDefinition.h:10
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
edm::Event
Definition:
Event.h:73
pf2pat::ElectronIDPFCandidateSelectorDefinition::value_
double value_
Definition:
ElectronIDPFCandidateSelectorDefinition.h:124
PFCandidate.h
PFCandidateFwd.h
ConsumesCollector.h
edm::ConsumesCollector
Definition:
ConsumesCollector.h:45
Generated for CMSSW Reference Manual by
1.8.5