54 electronToken_(consumes<
edm::
View<
reco::GsfElectron> >(iConfig.getParameter<
edm::InputTag>(
"electronSource" ))),
56 embedGsfElectronCore_(iConfig.getParameter<bool>(
"embedGsfElectronCore" )),
57 embedGsfTrack_(iConfig.getParameter<bool>(
"embedGsfTrack" )),
58 embedSuperCluster_(iConfig.getParameter<bool> (
"embedSuperCluster" )),
59 embedPflowSuperCluster_(iConfig.getParameter<bool> (
"embedPflowSuperCluster" )),
60 embedSeedCluster_(iConfig.getParameter<bool>(
"embedSeedCluster" )),
61 embedBasicClusters_(iConfig.getParameter<bool>(
"embedBasicClusters" )),
62 embedPreshowerClusters_(iConfig.getParameter<bool>(
"embedPreshowerClusters" )),
63 embedPflowBasicClusters_(iConfig.getParameter<bool>(
"embedPflowBasicClusters" )),
64 embedPflowPreshowerClusters_(iConfig.getParameter<bool>(
"embedPflowPreshowerClusters" )),
65 embedTrack_(iConfig.getParameter<bool>(
"embedTrack" )),
66 addGenMatch_(iConfig.getParameter<bool>(
"addGenMatch" )),
67 embedGenMatch_(addGenMatch_ ? iConfig.getParameter<bool>(
"embedGenMatch" ) :
false),
68 embedRecHits_(iConfig.getParameter<bool>(
"embedRecHits" )),
70 useParticleFlow_(iConfig.getParameter<bool>(
"useParticleFlow" )),
72 pfCandidateMapToken_(mayConsume<
edm::ValueMap<
reco::
PFCandidatePtr> >(iConfig.getParameter<
edm::InputTag>(
"pfCandidateMap" ))),
73 embedPFCandidate_(iConfig.getParameter<bool>(
"embedPFCandidate" )),
75 reducedBarrelRecHitCollection_(iConfig.getParameter<
edm::InputTag>(
"reducedBarrelRecHitCollection")),
76 reducedBarrelRecHitCollectionToken_(mayConsume<
EcalRecHitCollection>(reducedBarrelRecHitCollection_)),
77 reducedEndcapRecHitCollection_(iConfig.getParameter<
edm::InputTag>(
"reducedEndcapRecHitCollection")),
78 reducedEndcapRecHitCollectionToken_(mayConsume<
EcalRecHitCollection>(reducedEndcapRecHitCollection_)),
80 addPFClusterIso_(iConfig.getParameter<bool>(
"addPFClusterIso")),
81 addPuppiIsolation_(iConfig.getParameter<bool>(
"addPuppiIsolation")),
82 ecalPFClusterIsoT_(consumes<
edm::ValueMap<
float> >(iConfig.getParameter<
edm::InputTag>(
"ecalPFClusterIsoMap"))),
83 hcalPFClusterIsoT_(consumes<
edm::ValueMap<
float> >(iConfig.getParameter<
edm::InputTag>(
"hcalPFClusterIsoMap"))),
85 embedHighLevelSelection_(iConfig.getParameter<bool>(
"embedHighLevelSelection")),
86 beamLineToken_(consumes<
reco::
BeamSpot>(iConfig.getParameter<
edm::InputTag>(
"beamLineSrc"))),
87 pvToken_(mayConsume<
std::vector<
reco::Vertex> >(iConfig.getParameter<
edm::InputTag>(
"pvSrc"))),
88 addElecID_(iConfig.getParameter<bool>(
"addElectronID" )),
91 addEfficiencies_(iConfig.getParameter<bool>(
"addEfficiencies")),
92 addResolutions_(iConfig.getParameter<bool>(
"addResolutions" )),
93 useUserData_(iConfig.exists(
"userData"))
130 throw cms::Exception(
"Configuration") <<
"PATElectronProducer: you can't specify both 'electronIDSource' and 'electronIDSources'\n";
135 for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
142 "PATElectronProducer: id addElectronID is true, you must specify either:\n" <<
143 "\tInputTag electronIDSource = <someTag>\n" <<
"or\n" <<
144 "\tPSet electronIDSources = { \n" <<
145 "\t\tInputTag <someName> = <someTag> // as many as you want \n " <<
187 produces<std::vector<Electron> >();
213 edm::InputTag reducedEBRecHitCollection(
string(
"reducedEcalRecHitsEB"));
214 edm::InputTag reducedEERecHitCollection(
string(
"reducedEcalRecHitsEE"));
255 std::vector<edm::Handle<edm::ValueMap<float> > > idhandles;
256 std::vector<pat::Electron::IdPair> ids;
272 bool beamSpotIsValid =
false;
273 bool primaryVertexIsValid =
false;
287 if ( pvHandle.
isValid() && !pvHandle->empty() ) {
288 primaryVertex = pvHandle->at(0);
289 primaryVertexIsValid =
true;
292 <<
"No primary vertex available from EventSetup, not adding high level selection \n";
315 std::vector<Electron> *
patElectrons =
new std::vector<Electron>();
323 i != pfElectrons->end(); ++
i, ++
index) {
332 bool MatchedToAmbiguousGsfTrack=
false;
334 unsigned int idx = itElectron - electrons->begin();
335 auto elePtr = electrons -> ptrAt(idx);
336 if (Matched || MatchedToAmbiguousGsfTrack)
continue;
340 if (itElectron->gsfTrack()==
i->gsfTrackRef()){
345 it!=itElectron->ambiguousGsfTracksEnd(); it++ ){
346 MatchedToAmbiguousGsfTrack |= (bool)(
i->gsfTrackRef()==(*it));
350 if (Matched || MatchedToAmbiguousGsfTrack){
360 anElectron.
setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]);
361 anElectron.
setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_photons)[elePtr]);
392 primaryVertexIsValid,
397 ip3d = ip3dpv.second.value();
406 ids[
i].second = (*idhandles[
i])[elecsRef];
409 ids.push_back(std::make_pair(
"pf_evspi",pfRef->mva_e_pi()));
410 ids.push_back(std::make_pair(
"pf_evsmu",pfRef->mva_e_mu()));
415 std::vector<float> vCov = lazyTools.localCovariances(*( itElectron->superCluster()->seed()));
432 std::vector<DetId> selectedCells;
433 bool barrel = itElectron->isEB();
436 for (
reco::CaloCluster_iterator clusIt = itElectron->superCluster()->clustersBegin(); clusIt!=itElectron->superCluster()->clustersEnd(); ++clusIt) {
438 DetId seed = lazyTools.getMaximum(**clusIt).first;
442 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
445 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
446 selectedCells.push_back(
hit.first);
452 for (
reco::CaloCluster_iterator clusIt = itElectron->parentSuperCluster()->clustersBegin(); clusIt!=itElectron->parentSuperCluster()->clustersEnd(); ++clusIt) {
454 DetId seed = lazyTools.getMaximum(**clusIt).first;
458 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
461 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
462 selectedCells.push_back(
hit.first);
468 std::sort(selectedCells.begin(),selectedCells.end());
469 std::unique(selectedCells.begin(),selectedCells.end());
483 unsigned nSelectedCells = selectedCells.
size();
484 for (
unsigned icell = 0 ; icell < nSelectedCells ; ++icell) {
486 if ( it != recHits->
end() ) {
490 selectedRecHits.
sort();
494 bool passconversionveto =
false;
525 patElectrons->push_back(anElectron);
543 unsigned int idx = itElectron - electrons->begin();
547 auto elePtr = electrons -> ptrAt(idx);
552 if ( pfCandsPresent ) {
557 ie != pfElectrons->end(); ++ie, ++
index) {
560 if( trkRef == pfTrkRef ) {
568 else if( valMapPresent ) {
590 for (
size_t j = 0, nd =
deposits.size(); j < nd; ++j) {
597 ids[
i].second = (*idhandles[
i])[elecsRef];
623 primaryVertexIsValid,
628 ip3d = ip3dpv.second.value();
634 std::vector<float> vCov = lazyTools.localCovariances(*( itElectron->superCluster()->seed()));
651 anElectron.
setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]);
652 anElectron.
setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_photons)[elePtr]);
659 std::vector<DetId> selectedCells;
660 bool barrel = itElectron->isEB();
663 for (
reco::CaloCluster_iterator clusIt = itElectron->superCluster()->clustersBegin(); clusIt!=itElectron->superCluster()->clustersEnd(); ++clusIt) {
665 DetId seed = lazyTools.getMaximum(**clusIt).first;
669 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
672 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
673 selectedCells.push_back(
hit.first);
679 for (
reco::CaloCluster_iterator clusIt = itElectron->parentSuperCluster()->clustersBegin(); clusIt!=itElectron->parentSuperCluster()->clustersEnd(); ++clusIt) {
681 DetId seed = lazyTools.getMaximum(**clusIt).first;
685 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
688 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
689 selectedCells.push_back(
hit.first);
695 std::sort(selectedCells.begin(),selectedCells.end());
696 std::unique(selectedCells.begin(),selectedCells.end());
709 unsigned nSelectedCells = selectedCells.
size();
710 for (
unsigned icell = 0 ; icell < nSelectedCells ; ++icell) {
712 if ( it != recHits->
end() ) {
716 selectedRecHits.
sort();
720 bool passconversionveto =
false;
733 patElectrons->push_back(anElectron);
738 std::sort(patElectrons->begin(), patElectrons->end(),
pTComparator_);
741 std::unique_ptr<std::vector<Electron> > ptr(patElectrons);
789 for(
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
810 for (
size_t j = 0, nd = deposits.size(); j < nd; ++j) {
814 assert(!pfcandref.
isNull());
817 (*deposits[j])[source]);
821 (*deposits[j])[elecRef]);
824 for (
size_t j = 0; j<isolationValues.size(); ++j) {
828 (*isolationValues[j])[source]);
837 for (
size_t j = 0; j<isolationValuesNoPFId.size(); ++j) {
875 for(
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
891 for (
size_t j = 0, nd = deposits.size(); j < nd; ++j) {
895 deposits[j]->
contains(candPtrForGenMatch.
id())) {
897 (*deposits[j])[candPtrForGenMatch]);
899 else if (deposits[j]->
contains(candPtrForIsolation.
id())) {
901 (*deposits[j])[candPtrForIsolation]);
905 (*deposits[j])[candPtrForIsolation->sourceCandidatePtr(0)]);
909 for (
size_t j = 0; j<isolationValues.size(); ++j) {
913 isolationValues[j]->
contains(candPtrForGenMatch.
id())) {
915 (*isolationValues[j])[candPtrForGenMatch]);
917 else if (isolationValues[j]->
contains(candPtrForIsolation.
id())) {
919 (*isolationValues[j])[candPtrForIsolation]);
923 (*isolationValues[j])[candPtrForIsolation->sourceCandidatePtr(0)]);
933 iDesc.
setComment(
"PAT electron producer module");
956 iDesc.
add<
bool>(
"embedGsfElectronCore",
true)->setComment(
"embed external gsf electron core");
957 iDesc.
add<
bool>(
"embedGsfTrack",
true)->setComment(
"embed external gsf track");
958 iDesc.
add<
bool>(
"embedSuperCluster",
true)->setComment(
"embed external super cluster");
959 iDesc.
add<
bool>(
"embedPflowSuperCluster",
true)->setComment(
"embed external super cluster");
960 iDesc.
add<
bool>(
"embedSeedCluster",
true)->setComment(
"embed external seed cluster");
961 iDesc.
add<
bool>(
"embedBasicClusters",
true)->setComment(
"embed external basic clusters");
962 iDesc.
add<
bool>(
"embedPreshowerClusters",
true)->setComment(
"embed external preshower clusters");
963 iDesc.
add<
bool>(
"embedPflowBasicClusters",
true)->setComment(
"embed external pflow basic clusters");
964 iDesc.
add<
bool>(
"embedPflowPreshowerClusters",
true)->setComment(
"embed external pflow preshower clusters");
965 iDesc.
add<
bool>(
"embedTrack",
false)->setComment(
"embed external track");
966 iDesc.
add<
bool>(
"embedRecHits",
true)->setComment(
"embed external RecHits");
970 iDesc.
add<
bool>(
"useParticleFlow",
false)->setComment(
"whether to use particle flow or not");
971 iDesc.
add<
bool>(
"embedPFCandidate",
false)->setComment(
"embed external particle flow object");
974 iDesc.
add<
bool>(
"addGenMatch",
true)->setComment(
"add MC matching");
975 iDesc.
add<
bool>(
"embedGenMatch",
false)->setComment(
"embed MC matched MC information");
976 std::vector<edm::InputTag> emptySourceVector;
979 )->
setComment(
"input with MC match information");
982 iDesc.
add<
bool>(
"addElectronID",
true)->setComment(
"add electron ID variables");
987 )->
setComment(
"input with electron ID variables");
1001 isoDepositsPSet.
addOptional<std::vector<edm::InputTag> >(
"user");
1002 iDesc.
addOptional(
"isoDeposits", isoDepositsPSet);
1015 isolationValuesPSet.
addOptional<std::vector<edm::InputTag> >(
"user");
1016 iDesc.
addOptional(
"isolationValues", isolationValuesPSet);
1029 isolationValuesNoPFIdPSet.
addOptional<std::vector<edm::InputTag> >(
"user");
1030 iDesc.
addOptional(
"isolationValuesNoPFId", isolationValuesNoPFIdPSet);
1035 iDesc.
add(
"efficiencies", efficienciesPSet);
1036 iDesc.
add<
bool>(
"addEfficiencies",
false);
1045 iDesc.
add<
bool>(
"addElectronShapes",
true);
1051 iDesc.
add(
"userIsolation", isolationPSet);
1056 iDesc.
add<
bool>(
"embedHighLevelSelection",
true)->setComment(
"embed high level selection");
1060 )->
setComment(
"input with high level selection");
1062 )->
setComment(
"input with high level selection");
1064 descriptions.
add(
"PATElectronProducer", iDesc);
1075 bool primaryVertexIsValid,
1077 bool beamspotIsValid
1083 std::pair<bool,Measurement1D>
result =
1089 double d0_corr = result.second.value();
1090 double d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1101 d0_corr = result.second.value();
1102 d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1117 d0_corr = result.second.value();
1118 d0_err = beamspotIsValid ? result.second.error() : -1.0;
1128 d0_corr = result.second.value();
1129 d0_err = beamspotIsValid ? result.second.error() : -1.0;
void readIsolationLabels(const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T > > > &tokens)
void setMvaVariables(double sigmaIetaIphi, double ip3d)
set missing mva input variables
bool enabled() const
'true' if this there is at least one efficiency configured
T getParameter(std::string const &) const
void setComment(std::string const &value)
Assists in assimilating all pat::UserData into pat objects.
void embedRecHits(const EcalRecHitCollection *rechits)
method to store the RecHits internally - can be called from the PATElectronProducer ...
void newEvent(const edm::Event &event)
To be called for each new event, reads in the ValueMaps for efficiencies.
void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
const edm::EDGetTokenT< reco::ConversionCollection > hConversionsToken_
bool isNonnull() const
Checks for non-null.
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_charged_hadrons_
void setIsolation(IsolationKeys key, float value)
const GreaterByPt< Electron > pTComparator_
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
bool contains(EventRange const &lh, EventID const &rh)
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_charged_hadrons_
const bool useParticleFlow_
pflow specific
void setElectronIDs(const std::vector< IdPair > &ids)
Store multiple electron ID values, discarding existing ones. The first one in the list becomes the 'd...
static const HistoName names[]
Covariance3DMatrix covariance3D() const
return only 3D position covariance matrix
const LorentzVector & p4(P4Kind kind) const
const edm::EDGetTokenT< reco::PFCandidateCollection > pfElecToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void setAllowAnything()
allow any parameter label/value pairs
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
const edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
IsolationLabels isoDepositLabels_
const bool embedPFCandidate_
void embedSuperCluster()
method to store the electron's SuperCluster internally
void embedHighLevel(pat::Electron &anElectron, reco::GsfTrackRef track, reco::TransientTrack &tt, reco::Vertex &primaryVertex, bool primaryVertexIsValid, reco::BeamSpot &beamspot, bool beamspotIsValid)
std::vector< EcalRecHit >::const_iterator const_iterator
reco::TransientTrack build(const reco::Track *p) const
void setPFCandidateRef(const reco::PFCandidateRef &ref)
add a reference to the source IsolatedPFCandidate
void fillElectron(Electron &aElectron, const ElectronBaseRef &electronRef, const reco::CandidateBaseRef &baseRef, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const bool pfId, const IsolationValueMaps &isolationValues, const IsolationValueMaps &isolationValuesNoPFId) const
common electron filling, for both the standard and PF2PAT case
void push_back(T const &t)
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
void embedGsfElectronCore()
method to store the electron's core internally
void setPassConversionVeto(bool flag)
const edm::EDGetTokenT< edm::ValueMap< float > > hcalPFClusterIsoT_
void setHcalPFClusterIso(float hcalPFClus)
const bool embedBasicClusters_
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
PFCandidateCollection::const_iterator PFCandidateConstIterator
iterator
void setEcalDrivenMomentum(const Candidate::LorentzVector &mom)
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
std::vector< edm::EDGetTokenT< edm::ValueMap< float > > > elecIDTokens_
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > electronToken_
void embedPflowSuperCluster()
method to store the electron's PflowSuperCluster internally
bool enabled() const
'true' if this there is at least one efficiency configured
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
void setIsoDeposit(IsolationKeys key, const IsoDeposit &dep)
Sets the IsoDeposit associated with some key; if it is already existent, it is overwritten.
static void fillDescription(edm::ParameterSetDescription &iDesc)
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
const bool addEfficiencies_
const edm::EDGetTokenT< std::vector< reco::Vertex > > pvToken_
bool enabled() const
True if it has a non null configuration.
const edm::EDGetTokenT< edm::ValueMap< reco::PFCandidatePtr > > pfCandidateMapToken_
void setComment(std::string const &value)
pat::helper::MultiIsolator isolator_
std::vector< edm::Handle< edm::Association< reco::GenParticleCollection > > > GenAssociations
void setDB(double dB, double edB, IPTYPE type)
Set impact parameter of a certain type and its uncertainty.
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_photons_
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
Produces pat::Electron's.
const bool addPuppiIsolation_
void embedSeedCluster()
method to store the electron's seedcluster internally
PATElectronProducer(const edm::ParameterSet &iConfig)
const bool embedHighLevelSelection_
embed high level selection variables?
reco::PFCandidateRef pfCandidateRef() const
reference to the source PFCandidates; null if this has been built from a standard electron ...
const bool addResolutions_
void newEvent(const edm::Event &event, const edm::EventSetup &setup)
To be called for each new event, reads in the EventSetup object.
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
std::vector< edm::EDGetTokenT< edm::Association< reco::GenParticleCollection > > > genMatchTokens_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
def unique(seq, keepstr=True)
void setIsolationPUPPINoLeptons(float chargedhadrons_, float neutralhadrons_, float photons_)
sets PUPPINoLeptons isolations
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T > > cases)
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
const bool embedSeedCluster_
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
const bool addPFClusterIso_
math::XYZPoint Point
point in the space
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
void embedPflowBasicClusters()
method to store the electron's pflow basic clusters
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void embedBasicClusters()
method to store the electron's basic clusters
std::pair< std::string, edm::InputTag > NameTag
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_photons_
bool isNull() const
Checks for null.
void embedGsfTrack()
method to store the electron's GsfTrack internally
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
bool isNonnull() const
Checks for non-null.
std::vector< Conversion > ConversionCollection
const bool embedGsfTrack_
const_iterator end() const
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
const edm::EDGetTokenT< reco::BeamSpot > beamLineToken_
void fillElectron2(Electron &anElectron, const reco::CandidatePtr &candPtrForIsolation, const reco::CandidatePtr &candPtrForGenMatch, const reco::CandidatePtr &candPtrForLoader, const GenAssociations &genMatches, const IsoDepositMaps &deposits, const IsolationValueMaps &isolationValues) const
void addGenParticleRef(const reco::GenParticleRef &ref)
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueNoPFIdTokens_
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
void setEcalPFClusterIso(float ecalPFClus)
pat::helper::EfficiencyLoader efficiencyLoader_
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
void setIsPF(bool hasPFCandidate)
const bool embedGsfElectronCore_
pat::PATUserDataHelper< pat::Electron > userDataHelper_
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
Analysis-level electron class.
const CaloTopology * ecalTopology_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const CaloSubdetectorTopology * getSubdetectorTopology(const DetId &id) const
access the subdetector Topology for the given subdetector directly
ProductID id() const
Accessor for product ID.
IsolationLabels isolationValueLabelsNoPFId_
void embedPreshowerClusters()
method to store the electron's preshower clusters
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
iterator find(key_type k)
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
IsolationLabels isolationValueLabels_
const bool embedPflowSuperCluster_
const bool embedPflowPreshowerClusters_
pat::helper::KinResolutionsLoader resolutionLoader_
const Point & position() const
position
const bool embedPflowBasicClusters_
void embedPflowPreshowerClusters()
method to store the electron's pflow preshower clusters
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueTokens_
void embedTrack()
method to store the electron's Track internally
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
edm::Ptr< PFCandidate > PFCandidatePtr
persistent Ptr to a PFCandidate
const bool embedPreshowerClusters_
void setIsolationPUPPI(float chargedhadrons_, float neutralhadrons_, float photons_)
sets PUPPI isolations
static std::string const source
void embedPFCandidate()
embed the PFCandidate pointed to by pfCandidateRef_
Global3DVector GlobalVector
std::vector< NameTag > elecIDSrcs_
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
const bool embedSuperCluster_
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps