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