57 electronToken_(consumes<
edm::
View<
reco::GsfElectron> >(iConfig.getParameter<
edm::InputTag>(
"electronSource" ))),
59 embedGsfElectronCore_(iConfig.getParameter<
bool>(
"embedGsfElectronCore" )),
60 embedGsfTrack_(iConfig.getParameter<
bool>(
"embedGsfTrack" )),
61 embedSuperCluster_(iConfig.getParameter<
bool> (
"embedSuperCluster" )),
62 embedPflowSuperCluster_(iConfig.getParameter<
bool> (
"embedPflowSuperCluster" )),
63 embedSeedCluster_(iConfig.getParameter<
bool>(
"embedSeedCluster" )),
64 embedBasicClusters_(iConfig.getParameter<
bool>(
"embedBasicClusters" )),
65 embedPreshowerClusters_(iConfig.getParameter<
bool>(
"embedPreshowerClusters" )),
66 embedPflowBasicClusters_(iConfig.getParameter<
bool>(
"embedPflowBasicClusters" )),
67 embedPflowPreshowerClusters_(iConfig.getParameter<
bool>(
"embedPflowPreshowerClusters" )),
68 embedTrack_(iConfig.getParameter<
bool>(
"embedTrack" )),
69 addGenMatch_(iConfig.getParameter<
bool>(
"addGenMatch" )),
70 embedGenMatch_(addGenMatch_ ? iConfig.getParameter<
bool>(
"embedGenMatch" ) :
false),
71 embedRecHits_(iConfig.getParameter<
bool>(
"embedRecHits" )),
73 useParticleFlow_(iConfig.getParameter<
bool>(
"useParticleFlow" )),
74 usePfCandidateMultiMap_(iConfig.getParameter<
bool>(
"usePfCandidateMultiMap" )),
78 embedPFCandidate_(iConfig.getParameter<
bool>(
"embedPFCandidate" )),
80 addMVAVariables_(iConfig.getParameter<
bool>(
"addMVAVariables")),
81 reducedBarrelRecHitCollection_(iConfig.getParameter<
edm::InputTag>(
"reducedBarrelRecHitCollection")),
82 reducedBarrelRecHitCollectionToken_(mayConsume<
EcalRecHitCollection>(reducedBarrelRecHitCollection_)),
83 reducedEndcapRecHitCollection_(iConfig.getParameter<
edm::InputTag>(
"reducedEndcapRecHitCollection")),
84 reducedEndcapRecHitCollectionToken_(mayConsume<
EcalRecHitCollection>(reducedEndcapRecHitCollection_)),
86 addPFClusterIso_(iConfig.getParameter<
bool>(
"addPFClusterIso")),
87 addPuppiIsolation_(iConfig.getParameter<
bool>(
"addPuppiIsolation")),
88 ecalPFClusterIsoT_(consumes<
edm::ValueMap<
float> >(iConfig.getParameter<
edm::InputTag>(
"ecalPFClusterIsoMap"))),
89 hcalPFClusterIsoT_(consumes<
edm::ValueMap<
float> >(iConfig.getParameter<
edm::InputTag>(
"hcalPFClusterIsoMap"))),
91 embedHighLevelSelection_(iConfig.getParameter<
bool>(
"embedHighLevelSelection")),
92 beamLineToken_(consumes<
reco::
BeamSpot>(iConfig.getParameter<
edm::InputTag>(
"beamLineSrc"))),
93 pvToken_(mayConsume<
std::vector<
reco::Vertex> >(iConfig.getParameter<
edm::InputTag>(
"pvSrc"))),
94 getdBFromTrack_(iConfig.getParameter<
bool>(
"getdBFromTrack")),
95 addElecID_(iConfig.getParameter<
bool>(
"addElectronID" )),
98 addEfficiencies_(iConfig.getParameter<
bool>(
"addEfficiencies")),
99 addResolutions_(iConfig.getParameter<
bool>(
"addResolutions" )),
100 useUserData_(iConfig.exists(
"userData"))
137 throw cms::Exception(
"Configuration") <<
"PATElectronProducer: you can't specify both 'electronIDSource' and 'electronIDSources'\n";
142 for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
149 "PATElectronProducer: id addElectronID is true, you must specify either:\n" <<
150 "\tInputTag electronIDSource = <someTag>\n" <<
"or\n" <<
151 "\tPSet electronIDSources = { \n" <<
152 "\t\tInputTag <someName> = <someTag> // as many as you want \n " <<
182 if(computeMiniIso_ && (miniIsoParamsE_.size() != 9 || miniIsoParamsB_.size() != 9)){
183 throw cms::Exception(
"ParameterError") <<
"miniIsoParams must have exactly 9 elements.\n";
207 produces<std::vector<Electron> >();
237 edm::InputTag reducedEBRecHitCollection(
string(
"reducedEcalRecHitsEB"));
238 edm::InputTag reducedEERecHitCollection(
string(
"reducedEcalRecHitsEE"));
279 std::vector<edm::Handle<edm::ValueMap<float> > > idhandles;
280 std::vector<pat::Electron::IdPair> ids;
296 bool beamSpotIsValid =
false;
297 bool primaryVertexIsValid =
false;
311 if ( pvHandle.
isValid() && !pvHandle->empty() ) {
312 primaryVertex = pvHandle->at(0);
313 primaryVertexIsValid =
true;
316 <<
"No primary vertex available from EventSetup, not adding high level selection \n";
339 std::vector<Electron> *
patElectrons =
new std::vector<Electron>();
347 i != pfElectrons->end(); ++
i, ++
index) {
356 bool MatchedToAmbiguousGsfTrack=
false;
358 unsigned int idx = itElectron - electrons->begin();
359 auto elePtr = electrons -> ptrAt(idx);
360 if (Matched || MatchedToAmbiguousGsfTrack)
continue;
364 if (itElectron->gsfTrack()==
i->gsfTrackRef()){
369 it!=itElectron->ambiguousGsfTracksEnd(); it++ ){
370 MatchedToAmbiguousGsfTrack |= (
bool)(
i->gsfTrackRef()==(*it));
374 if (Matched || MatchedToAmbiguousGsfTrack){
384 anElectron.
setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]);
385 anElectron.
setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_photons)[elePtr]);
416 primaryVertexIsValid,
421 ip3d = ip3dpv.second.value();
430 ids[
i].second = (*idhandles[
i])[elecsRef];
433 ids.push_back(std::make_pair(
"pf_evspi",pfRef->mva_e_pi()));
434 ids.push_back(std::make_pair(
"pf_evsmu",pfRef->mva_e_mu()));
440 std::vector<float> vCov = lazyTools.localCovariances(*( itElectron->superCluster()->seed()));
456 std::vector<DetId> selectedCells;
457 bool barrel = itElectron->isEB();
460 for (
reco::CaloCluster_iterator clusIt = itElectron->superCluster()->clustersBegin(); clusIt!=itElectron->superCluster()->clustersEnd(); ++clusIt) {
462 DetId seed = lazyTools.getMaximum(**clusIt).first;
466 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
469 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
470 selectedCells.push_back(
hit.first);
476 for (
reco::CaloCluster_iterator clusIt = itElectron->parentSuperCluster()->clustersBegin(); clusIt!=itElectron->parentSuperCluster()->clustersEnd(); ++clusIt) {
478 DetId seed = lazyTools.getMaximum(**clusIt).first;
482 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
485 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
486 selectedCells.push_back(
hit.first);
492 std::sort(selectedCells.begin(),selectedCells.end());
493 std::unique(selectedCells.begin(),selectedCells.end());
507 unsigned nSelectedCells = selectedCells.
size();
508 for (
unsigned icell = 0 ; icell < nSelectedCells ; ++icell) {
510 if ( it != recHits->
end() ) {
514 selectedRecHits.
sort();
518 bool passconversionveto =
false;
552 patElectrons->push_back(anElectron);
563 bool pfCandsPresent =
false, valMapPresent =
false;
574 unsigned int idx = itElectron - electrons->begin();
578 auto elePtr = electrons -> ptrAt(idx);
591 }
else if ( pfCandsPresent ) {
596 ie != pfElectrons->end(); ++ie, ++
index) {
599 if( trkRef == pfTrkRef ) {
607 else if( valMapPresent ) {
629 for (
size_t j = 0, nd =
deposits.size(); j < nd; ++j) {
636 ids[
i].second = (*idhandles[
i])[elecsRef];
662 primaryVertexIsValid,
667 ip3d = ip3dpv.second.value();
674 std::vector<float> vCov = lazyTools.localCovariances(*( itElectron->superCluster()->seed()));
692 anElectron.
setIsolationPUPPI((*PUPPIIsolation_charged_hadrons)[elePtr], (*PUPPIIsolation_neutral_hadrons)[elePtr], (*PUPPIIsolation_photons)[elePtr]);
693 anElectron.
setIsolationPUPPINoLeptons((*PUPPINoLeptonsIsolation_charged_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr], (*PUPPINoLeptonsIsolation_photons)[elePtr]);
700 std::vector<DetId> selectedCells;
701 bool barrel = itElectron->isEB();
704 for (
reco::CaloCluster_iterator clusIt = itElectron->superCluster()->clustersBegin(); clusIt!=itElectron->superCluster()->clustersEnd(); ++clusIt) {
706 DetId seed = lazyTools.getMaximum(**clusIt).first;
710 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
713 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
714 selectedCells.push_back(
hit.first);
720 for (
reco::CaloCluster_iterator clusIt = itElectron->parentSuperCluster()->clustersBegin(); clusIt!=itElectron->parentSuperCluster()->clustersEnd(); ++clusIt) {
722 DetId seed = lazyTools.getMaximum(**clusIt).first;
726 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
729 for (
const std::pair<DetId, float> &
hit : (*clusIt)->hitsAndFractions()) {
730 selectedCells.push_back(
hit.first);
736 std::sort(selectedCells.begin(),selectedCells.end());
737 std::unique(selectedCells.begin(),selectedCells.end());
750 unsigned nSelectedCells = selectedCells.
size();
751 for (
unsigned icell = 0 ; icell < nSelectedCells ; ++icell) {
753 if ( it != recHits->
end() ) {
757 selectedRecHits.
sort();
761 bool passconversionveto =
false;
778 patElectrons->push_back(anElectron);
786 std::unique_ptr<std::vector<Electron> > ptr(patElectrons);
834 for(
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
855 for (
size_t j = 0, nd = deposits.size(); j < nd; ++j) {
859 assert(!pfcandref.
isNull());
862 (*deposits[j])[source]);
866 (*deposits[j])[elecRef]);
869 for (
size_t j = 0; j<isolationValues.size(); ++j) {
873 (*isolationValues[j])[source]);
882 for (
size_t j = 0; j<isolationValuesNoPFId.size(); ++j) {
920 for(
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
936 for (
size_t j = 0, nd = deposits.size(); j < nd; ++j) {
940 deposits[j]->
contains(candPtrForGenMatch.
id())) {
942 (*deposits[j])[candPtrForGenMatch]);
944 else if (deposits[j]->
contains(candPtrForIsolation.
id())) {
946 (*deposits[j])[candPtrForIsolation]);
950 (*deposits[j])[candPtrForIsolation->sourceCandidatePtr(0)]);
954 for (
size_t j = 0; j<isolationValues.size(); ++j) {
958 isolationValues[j]->
contains(candPtrForGenMatch.
id())) {
960 (*isolationValues[j])[candPtrForGenMatch]);
962 else if (isolationValues[j]->
contains(candPtrForIsolation.
id())) {
964 (*isolationValues[j])[candPtrForIsolation]);
968 (*isolationValues[j])[candPtrForIsolation->sourceCandidatePtr(0)]);
976 if(anElectron.
isEE())
979 miniIsoParamsE_[3], miniIsoParamsE_[4], miniIsoParamsE_[5],
980 miniIsoParamsE_[6], miniIsoParamsE_[7], miniIsoParamsE_[8]);
984 miniIsoParamsB_[3], miniIsoParamsB_[4], miniIsoParamsB_[5],
985 miniIsoParamsB_[6], miniIsoParamsB_[7], miniIsoParamsB_[8]);
994 iDesc.
setComment(
"PAT electron producer module");
1017 iDesc.
add<
bool>(
"embedGsfElectronCore",
true)->setComment(
"embed external gsf electron core");
1018 iDesc.
add<
bool>(
"embedGsfTrack",
true)->setComment(
"embed external gsf track");
1019 iDesc.
add<
bool>(
"embedSuperCluster",
true)->setComment(
"embed external super cluster");
1020 iDesc.
add<
bool>(
"embedPflowSuperCluster",
true)->setComment(
"embed external super cluster");
1021 iDesc.
add<
bool>(
"embedSeedCluster",
true)->setComment(
"embed external seed cluster");
1022 iDesc.
add<
bool>(
"embedBasicClusters",
true)->setComment(
"embed external basic clusters");
1023 iDesc.
add<
bool>(
"embedPreshowerClusters",
true)->setComment(
"embed external preshower clusters");
1024 iDesc.
add<
bool>(
"embedPflowBasicClusters",
true)->setComment(
"embed external pflow basic clusters");
1025 iDesc.
add<
bool>(
"embedPflowPreshowerClusters",
true)->setComment(
"embed external pflow preshower clusters");
1026 iDesc.
add<
bool>(
"embedTrack",
false)->setComment(
"embed external track");
1027 iDesc.
add<
bool>(
"embedRecHits",
true)->setComment(
"embed external RecHits");
1032 usePfCandidateMultiMap.setComment(
"take ParticleFlow candidates from pfCandidateMultiMap instead of matching to pfElectrons by Gsf track reference");
1036 iDesc.
add<
bool>(
"useParticleFlow",
false)->setComment(
"whether to use particle flow or not");
1037 iDesc.
add<
bool>(
"embedPFCandidate",
false)->setComment(
"embed external particle flow object");
1040 iDesc.
add<
bool>(
"addGenMatch",
true)->setComment(
"add MC matching");
1041 iDesc.
add<
bool>(
"embedGenMatch",
false)->setComment(
"embed MC matched MC information");
1042 std::vector<edm::InputTag> emptySourceVector;
1045 )->
setComment(
"input with MC match information");
1048 iDesc.
add<
bool>(
"addElectronID",
true)->setComment(
"add electron ID variables");
1053 )->
setComment(
"input with electron ID variables");
1057 iDesc.
add<
bool>(
"computeMiniIso",
false)->setComment(
"whether or not to compute and store electron mini-isolation");
1059 iDesc.
add<std::vector<double> >(
"miniIsoParamsE", std::vector<double>())->
setComment(
"mini-iso parameters to use for endcap electrons");
1060 iDesc.
add<std::vector<double> >(
"miniIsoParamsB", std::vector<double>())->
setComment(
"mini-iso parameters to use for barrel electrons");
1073 isoDepositsPSet.
addOptional<std::vector<edm::InputTag> >(
"user");
1074 iDesc.
addOptional(
"isoDeposits", isoDepositsPSet);
1087 isolationValuesPSet.
addOptional<std::vector<edm::InputTag> >(
"user");
1088 iDesc.
addOptional(
"isolationValues", isolationValuesPSet);
1101 isolationValuesNoPFIdPSet.
addOptional<std::vector<edm::InputTag> >(
"user");
1102 iDesc.
addOptional(
"isolationValuesNoPFId", isolationValuesNoPFIdPSet);
1107 iDesc.
add(
"efficiencies", efficienciesPSet);
1108 iDesc.
add<
bool>(
"addEfficiencies",
false);
1117 iDesc.
add<
bool>(
"addMVAVariables",
true)->setComment(
"embed extra variables in pat::Electron : sip3d, sigmaIEtaIPhi");
1123 iDesc.
add(
"userIsolation", isolationPSet);
1128 iDesc.
add<
bool>(
"embedHighLevelSelection",
true)->setComment(
"embed high level selection");
1132 )->
setComment(
"input with high level selection");
1134 )->
setComment(
"input with high level selection");
1135 iDesc.
add<
bool>(
"getdBFromTrack",
false)->setComment(
"switch IP2D computation to use the GSF track instead of IPTools");
1137 descriptions.
add(
"PATElectronProducer", iDesc);
1148 bool primaryVertexIsValid,
1150 bool beamspotIsValid
1154 std::pair<bool,Measurement1D>
result;
1155 double d0_corr, d0_err;
1164 d0_corr = result.second.value();
1165 d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1171 d0_corr = result.second.value();
1172 d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1184 d0_corr = result.second.value();
1185 d0_err = beamspotIsValid ? result.second.error() : -1.0;
1191 d0_corr = result.second.value();
1192 d0_err = beamspotIsValid ? result.second.error() : -1.0;
const PflowIsolationVariables & pfIsolationVariables() const
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.
ParameterDescriptionNode * ifValue(ParameterDescription< T > const &switchParameter, std::unique_ptr< ParameterDescriptionCases< T >> cases)
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 PolarLorentzVector & polarP4() const final
four-momentum Lorentz vector
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
~PATElectronProducer() override
void setElectronIDs(const std::vector< IdPair > &ids)
Store multiple electron ID values, discarding existing ones. The first one in the list becomes the 'd...
Covariance3DMatrix covariance3D() const
return only 3D position covariance matrix
const LorentzVector & p4(P4Kind kind) const
const edm::EDGetTokenT< reco::PFCandidateCollection > pfElecToken_
std::vector< double > miniIsoParamsE_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void setAllowAnything()
allow any parameter label/value pairs
double zError() const
error on z
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
std::vector< pat::PackedCandidate > PackedCandidateCollection
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_
double covariance(int i, int j) const
(i, j)-th element of error matrix, i, j = 0, ... 2
const bool embedBasicClusters_
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_
void setPfIsolationVariables(const PflowIsolationVariables &iso)
const Point & position() const
position
const std::string names[nVars_]
const edm::EDGetTokenT< edm::View< reco::GsfElectron > > electronToken_
const bool addMVAVariables_
mva input variables
std::vector< double > miniIsoParamsB_
void embedPflowSuperCluster()
method to store the electron's PflowSuperCluster internally
bool enabled() const
'true' if this there is at least one efficiency configured
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_
const bool usePfCandidateMultiMap_
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_
#define DEFINE_FWK_MODULE(type)
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.
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
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
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
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)
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)
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 >
std::vector< edm::EDGetTokenT< edm::ValueMap< double > > > isolationValueNoPFIdTokens_
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
T const * product() const
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
pat::helper::EfficiencyLoader efficiencyLoader_
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
void setIsPF(bool hasPFCandidate)
const bool embedGsfElectronCore_
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > pfCandidateMultiMapToken_
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
void setMiniPFIsolation(PFIsolation const &iso)
ProductID id() const
Accessor for product ID.
IsolationLabels isolationValueLabelsNoPFId_
void setElectronMiniIso(pat::Electron &anElectron, const pat::PackedCandidateCollection *pc)
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
PFIsolation getMiniPFIsolation(const pat::PackedCandidateCollection *pfcands, const reco::Candidate::PolarLorentzVector &p4, float mindr=0.05, float maxdr=0.2, float kt_scale=10.0, float ptthresh=0.5, float deadcone_ch=0.0001, float deadcone_pu=0.01, float deadcone_ph=0.01, float deadcone_nh=0.01, float dZ_cut=0.0)
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
edm::EDGetTokenT< pat::PackedCandidateCollection > pcToken_
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