100 typedef std::vector<edm::Handle<edm::Association<reco::GenParticleCollection>>>
GenAssociations;
102 std::vector<edm::EDGetTokenT<edm::Association<reco::GenParticleCollection>>>
genMatchTokens_;
161 bool primaryVertexIsValid,
163 bool beamspotIsValid);
170 template <
typename T>
172 const char* psetName,
177 typedef std::pair<std::string, edm::InputTag>
NameTag;
217 template <
typename T>
219 const char* psetName,
224 if (iConfig.
exists(psetName)) {
227 if (depconf.
exists(
"tracker"))
229 if (depconf.
exists(
"ecal"))
231 if (depconf.
exists(
"hcal"))
233 if (depconf.
exists(
"pfAllParticles")) {
236 if (depconf.
exists(
"pfChargedHadrons")) {
240 if (depconf.
exists(
"pfChargedAll")) {
243 if (depconf.
exists(
"pfPUChargedHadrons")) {
247 if (depconf.
exists(
"pfNeutralHadrons")) {
251 if (depconf.
exists(
"pfPhotons")) {
254 if (depconf.
exists(
"user")) {
255 std::vector<edm::InputTag> userdeps = depconf.
getParameter<std::vector<edm::InputTag>>(
"user");
256 std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
258 for (; it != ed; ++it, ++
key) {
264 labels, [
this](
IsolationLabel const&
label) {
return consumes<edm::ValueMap<T>>(label.second); });
272 electronToken_(consumes<edm::
View<
reco::GsfElectron>>(iConfig.getParameter<edm::
InputTag>(
"electronSource"))),
274 embedGsfElectronCore_(iConfig.getParameter<bool>(
"embedGsfElectronCore")),
275 embedGsfTrack_(iConfig.getParameter<bool>(
"embedGsfTrack")),
276 embedSuperCluster_(iConfig.getParameter<bool>(
"embedSuperCluster")),
277 embedPflowSuperCluster_(iConfig.getParameter<bool>(
"embedPflowSuperCluster")),
278 embedSeedCluster_(iConfig.getParameter<bool>(
"embedSeedCluster")),
279 embedBasicClusters_(iConfig.getParameter<bool>(
"embedBasicClusters")),
280 embedPreshowerClusters_(iConfig.getParameter<bool>(
"embedPreshowerClusters")),
281 embedPflowBasicClusters_(iConfig.getParameter<bool>(
"embedPflowBasicClusters")),
282 embedPflowPreshowerClusters_(iConfig.getParameter<bool>(
"embedPflowPreshowerClusters")),
283 embedTrack_(iConfig.getParameter<bool>(
"embedTrack")),
284 addGenMatch_(iConfig.getParameter<bool>(
"addGenMatch")),
285 embedGenMatch_(addGenMatch_ ? iConfig.getParameter<bool>(
"embedGenMatch") :
false),
286 embedRecHits_(iConfig.getParameter<bool>(
"embedRecHits")),
288 useParticleFlow_(iConfig.getParameter<bool>(
"useParticleFlow")),
289 usePfCandidateMultiMap_(iConfig.getParameter<bool>(
"usePfCandidateMultiMap")),
290 pfElecToken_(!usePfCandidateMultiMap_
293 pfCandidateMapToken_(!usePfCandidateMultiMap_ ? mayConsume<edm::ValueMap<
reco::
PFCandidatePtr>>(
294 iConfig.getParameter<edm::
InputTag>(
"pfCandidateMap"))
296 pfCandidateMultiMapToken_(usePfCandidateMultiMap_
298 iConfig.getParameter<edm::
InputTag>(
"pfCandidateMultiMap"))
300 embedPFCandidate_(iConfig.getParameter<bool>(
"embedPFCandidate")),
302 addMVAVariables_(iConfig.getParameter<bool>(
"addMVAVariables")),
303 reducedBarrelRecHitCollection_(iConfig.getParameter<edm::
InputTag>(
"reducedBarrelRecHitCollection")),
304 reducedBarrelRecHitCollectionToken_(mayConsume<
EcalRecHitCollection>(reducedBarrelRecHitCollection_)),
305 reducedEndcapRecHitCollection_(iConfig.getParameter<edm::
InputTag>(
"reducedEndcapRecHitCollection")),
306 reducedEndcapRecHitCollectionToken_(mayConsume<
EcalRecHitCollection>(reducedEndcapRecHitCollection_)),
307 ecalClusterToolsESGetTokens_{consumesCollector()},
309 addPFClusterIso_(
iConfig.getParameter<
bool>(
"addPFClusterIso")),
310 addPuppiIsolation_(
iConfig.getParameter<
bool>(
"addPuppiIsolation")),
314 embedHighLevelSelection_(
iConfig.getParameter<
bool>(
"embedHighLevelSelection")),
317 addElecID_(
iConfig.getParameter<
bool>(
"addElectronID")),
323 addEfficiencies_(
iConfig.getParameter<
bool>(
"addEfficiencies")),
324 addResolutions_(
iConfig.getParameter<
bool>(
"addResolutions")),
325 useUserData_(
iConfig.exists(
"userData")),
336 iConfig.getParameter<std::vector<edm::InputTag>>(
"genParticleMatch"),
341 if (addResolutions_) {
345 if (addPuppiIsolation_) {
347 PUPPIIsolation_charged_hadrons_ =
348 consumes<edm::ValueMap<float>>(
iConfig.getParameter<
edm::InputTag>(
"puppiIsolationChargedHadrons"));
349 PUPPIIsolation_neutral_hadrons_ =
350 consumes<edm::ValueMap<float>>(
iConfig.getParameter<
edm::InputTag>(
"puppiIsolationNeutralHadrons"));
351 PUPPIIsolation_photons_ =
354 PUPPINoLeptonsIsolation_charged_hadrons_ =
355 consumes<edm::ValueMap<float>>(
iConfig.getParameter<
edm::InputTag>(
"puppiNoLeptonsIsolationChargedHadrons"));
356 PUPPINoLeptonsIsolation_neutral_hadrons_ =
357 consumes<edm::ValueMap<float>>(
iConfig.getParameter<
edm::InputTag>(
"puppiNoLeptonsIsolationNeutralHadrons"));
358 PUPPINoLeptonsIsolation_photons_ =
359 consumes<edm::ValueMap<float>>(
iConfig.getParameter<
edm::InputTag>(
"puppiNoLeptonsIsolationPhotons"));
370 if (!elecIDSrcs_.empty()) {
372 <<
"PATElectronProducer: you can't specify both 'electronIDSource' and 'electronIDSources'\n";
377 for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
382 if (elecIDSrcs_.empty()) {
384 <<
"PATElectronProducer: id addElectronID is true, you must specify either:\n"
385 <<
"\tInputTag electronIDSource = <someTag>\n"
387 <<
"\tPSet electronIDSources = { \n"
388 <<
"\t\tInputTag <someName> = <someTag> // as many as you want \n "
393 elecIDSrcs_, [
this](NameTag
const&
tag) {
return mayConsume<edm::ValueMap<float>>(tag.second); });
415 computeMiniIso_ =
iConfig.getParameter<
bool>(
"computeMiniIso");
416 miniIsoParamsE_ =
iConfig.getParameter<std::vector<double>>(
"miniIsoParamsE");
417 miniIsoParamsB_ =
iConfig.getParameter<std::vector<double>>(
"miniIsoParamsB");
418 if (computeMiniIso_ && (miniIsoParamsE_.size() != 9 || miniIsoParamsB_.size() != 9)) {
419 throw cms::Exception(
"ParameterError") <<
"miniIsoParams must have exactly 9 elements.\n";
422 pcToken_ = consumes<pat::PackedCandidateCollection>(
iConfig.getParameter<
edm::InputTag>(
"pfCandsForMiniIso"));
425 readIsolationLabels(
iConfig,
"isoDeposits", isoDepositLabels_, isoDepositTokens_);
427 readIsolationLabels(
iConfig,
"isolationValues", isolationValueLabels_, isolationValueTokens_);
429 readIsolationLabels(
iConfig,
"isolationValuesNoPFId", isolationValueLabelsNoPFId_, isolationValueNoPFIdTokens_);
431 if (addEfficiencies_) {
442 if (useParticleFlow_ && usePfCandidateMultiMap_)
443 throw cms::Exception(
"Configuration",
"usePfCandidateMultiMap not supported when useParticleFlow is set to true");
446 produces<std::vector<Electron>>();
449 PATElectronProducer::~PATElectronProducer() {}
469 edm::InputTag reducedEBRecHitCollection(
string(
"reducedEcalRecHitsEB"));
470 edm::InputTag reducedEERecHitCollection(
string(
"reducedEcalRecHitsEE"));
517 std::vector<edm::Handle<edm::ValueMap<float>>> idhandles;
518 std::vector<pat::Electron::IdPair> ids;
533 bool beamSpotIsValid =
false;
534 bool primaryVertexIsValid =
false;
548 if (pvHandle.
isValid() && !pvHandle->empty()) {
549 primaryVertex = pvHandle->at(0);
550 primaryVertexIsValid =
true;
553 <<
"No primary vertex available from EventSetup, not adding high level selection \n";
575 std::vector<Electron>*
patElectrons =
new std::vector<Electron>();
590 bool MatchedToAmbiguousGsfTrack =
false;
593 unsigned int idx = itElectron - electrons->begin();
594 auto elePtr = electrons->ptrAt(idx);
595 if (Matched || MatchedToAmbiguousGsfTrack)
600 if (itElectron->gsfTrack() ==
i->gsfTrackRef()) {
603 for (
auto const& it : itElectron->ambiguousGsfTracks()) {
604 MatchedToAmbiguousGsfTrack |= (bool)(
i->gsfTrackRef() == it);
608 if (Matched || MatchedToAmbiguousGsfTrack) {
618 (*PUPPIIsolation_neutral_hadrons)[elePtr],
619 (*PUPPIIsolation_photons)[elePtr]);
621 (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr],
622 (*PUPPINoLeptonsIsolation_photons)[elePtr]);
648 embedHighLevel(anElectron, track, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
651 ip3d = ip3dpv.second.value();
660 ids[
i].second = (*idhandles[
i])[elecsRef];
663 ids.push_back(std::make_pair(
"pf_evspi", pfRef->mva_e_pi()));
664 ids.push_back(std::make_pair(
"pf_evsmu", pfRef->mva_e_mu()));
670 const auto& vCov = lazyTools.localCovariances(*(itElectron->superCluster()->seed()));
686 std::vector<DetId> selectedCells;
687 bool barrel = itElectron->isEB();
691 clusIt != itElectron->superCluster()->clustersEnd();
694 DetId seed = lazyTools.getMaximum(**clusIt).first;
696 std::vector<DetId> dets5x5 =
699 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
702 for (
const std::pair<DetId, float>&
hit : (*clusIt)->hitsAndFractions()) {
703 selectedCells.push_back(
hit.first);
710 clusIt != itElectron->parentSuperCluster()->clustersEnd();
713 DetId seed = lazyTools.getMaximum(**clusIt).first;
715 std::vector<DetId> dets5x5 =
718 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
721 for (
const std::pair<DetId, float>&
hit : (*clusIt)->hitsAndFractions()) {
722 selectedCells.push_back(
hit.first);
728 std::sort(selectedCells.begin(), selectedCells.end());
729 std::unique(selectedCells.begin(), selectedCells.end());
742 unsigned nSelectedCells = selectedCells.size();
743 for (
unsigned icell = 0; icell < nSelectedCells; ++icell) {
745 if (it != recHits->
end()) {
749 selectedRecHits.
sort();
754 bool passconversionveto =
false;
755 if (hConversions.isValid()) {
779 anElectron, ptrToPFElectron, ptrToGsfElectron, ptrToGsfElectron, genMatches, deposits, isolationValues);
786 patElectrons->push_back(anElectron);
797 bool pfCandsPresent =
false, valMapPresent =
false;
809 unsigned int idx = itElectron - electrons->begin();
813 auto elePtr = electrons->ptrAt(idx);
826 }
else if (pfCandsPresent) {
834 if (trkRef == pfTrkRef) {
841 }
else if (valMapPresent) {
866 for (
size_t j = 0, nd = deposits.size();
j < nd; ++
j) {
873 ids[
i].second = (*idhandles[
i])[elecsRef];
892 embedHighLevel(anElectron, track, tt, primaryVertex, primaryVertexIsValid, beamSpot, beamSpotIsValid);
895 ip3d = ip3dpv.second.value();
901 const auto& vCov = lazyTools.localCovariances(*(itElectron->superCluster()->seed()));
920 (*PUPPIIsolation_neutral_hadrons)[elePtr],
921 (*PUPPIIsolation_photons)[elePtr]);
923 (*PUPPINoLeptonsIsolation_neutral_hadrons)[elePtr],
924 (*PUPPINoLeptonsIsolation_photons)[elePtr]);
930 std::vector<DetId> selectedCells;
931 bool barrel = itElectron->isEB();
935 clusIt != itElectron->superCluster()->clustersEnd();
938 DetId seed = lazyTools.getMaximum(**clusIt).first;
940 std::vector<DetId> dets5x5 =
943 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
946 for (
const std::pair<DetId, float>&
hit : (*clusIt)->hitsAndFractions()) {
947 selectedCells.push_back(
hit.first);
954 clusIt != itElectron->parentSuperCluster()->clustersEnd();
957 DetId seed = lazyTools.getMaximum(**clusIt).first;
959 std::vector<DetId> dets5x5 =
962 selectedCells.insert(selectedCells.end(), dets5x5.begin(), dets5x5.end());
965 for (
const std::pair<DetId, float>&
hit : (*clusIt)->hitsAndFractions()) {
966 selectedCells.push_back(
hit.first);
972 std::sort(selectedCells.begin(), selectedCells.end());
973 std::unique(selectedCells.begin(), selectedCells.end());
986 unsigned nSelectedCells = selectedCells.size();
987 for (
unsigned icell = 0; icell < nSelectedCells; ++icell) {
989 if (it != recHits->
end()) {
993 selectedRecHits.
sort();
998 bool passconversionveto =
false;
999 if (hConversions.isValid()) {
1001 passconversionveto =
1005 passconversionveto =
1012 anElectron, elecsRef, elecBaseRef, genMatches, deposits, pfId, isolationValues, isolationValuesNoPFId);
1017 patElectrons->push_back(anElectron);
1022 std::sort(patElectrons->begin(), patElectrons->end(),
pTComparator_);
1025 std::unique_ptr<std::vector<Electron>> ptr(patElectrons);
1081 for (
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
1102 for (
size_t j = 0, nd = deposits.size();
j < nd; ++
j) {
1112 for (
size_t j = 0;
j < isolationValues.size(); ++
j) {
1122 for (
size_t j = 0;
j < isolationValuesNoPFId.size(); ++
j) {
1167 for (
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
1184 for (
size_t j = 0, nd = deposits.size();
j < nd; ++
j) {
1188 }
else if (deposits[
j]->
contains(candPtrForIsolation.
id())) {
1195 for (
size_t j = 0;
j < isolationValues.size(); ++
j) {
1199 }
else if (isolationValues[
j]->
contains(candPtrForIsolation.
id())) {
1203 (*isolationValues[
j])[candPtrForIsolation->sourceCandidatePtr(0)]);
1210 if (anElectron.
isEE())
1221 miniIsoParamsE_[8]);
1233 miniIsoParamsB_[8]);
1240 iDesc.
setComment(
"PAT electron producer module");
1249 "ecalPFClusterIsoMap",
edm::InputTag(
"electronEcalPFClusterIsolationProducer"),
true) and
1251 "hcalPFClusterIsoMap",
edm::InputTag(
"electronHcalPFClusterIsolationProducer"),
true))
or
1257 "puppiIsolationChargedHadrons",
1258 edm::InputTag(
"egmElectronPUPPIIsolation",
"h+-DR030-BarVeto000-EndVeto001"),
1261 "puppiIsolationNeutralHadrons",
1262 edm::InputTag(
"egmElectronPUPPIIsolation",
"h0-DR030-BarVeto000-EndVeto000"),
1265 "puppiIsolationPhotons",
1266 edm::InputTag(
"egmElectronPUPPIIsolation",
"gamma-DR030-BarVeto000-EndVeto008"),
1269 "puppiNoLeptonsIsolationChargedHadrons",
1270 edm::InputTag(
"egmElectronPUPPINoLeptonsIsolation",
"gamma-DR030-BarVeto000-EndVeto008"),
1273 "puppiNoLeptonsIsolationNeutralHadrons",
1274 edm::InputTag(
"egmElectronPUPPINoLeptonsIsolation",
"gamma-DR030-BarVeto000-EndVeto008"),
1277 "puppiNoLeptonsIsolationPhotons",
1278 edm::InputTag(
"egmElectronPUPPINoLeptonsIsolation",
"gamma-DR030-BarVeto000-EndVeto008"),
1283 iDesc.
add<
bool>(
"embedGsfElectronCore",
true)->setComment(
"embed external gsf electron core");
1284 iDesc.
add<
bool>(
"embedGsfTrack",
true)->setComment(
"embed external gsf track");
1285 iDesc.
add<
bool>(
"embedSuperCluster",
true)->setComment(
"embed external super cluster");
1286 iDesc.
add<
bool>(
"embedPflowSuperCluster",
true)->setComment(
"embed external super cluster");
1287 iDesc.
add<
bool>(
"embedSeedCluster",
true)->setComment(
"embed external seed cluster");
1288 iDesc.
add<
bool>(
"embedBasicClusters",
true)->setComment(
"embed external basic clusters");
1289 iDesc.
add<
bool>(
"embedPreshowerClusters",
true)->setComment(
"embed external preshower clusters");
1290 iDesc.
add<
bool>(
"embedPflowBasicClusters",
true)->setComment(
"embed external pflow basic clusters");
1291 iDesc.
add<
bool>(
"embedPflowPreshowerClusters",
true)->setComment(
"embed external pflow preshower clusters");
1292 iDesc.
add<
bool>(
"embedTrack",
false)->setComment(
"embed external track");
1293 iDesc.
add<
bool>(
"embedRecHits",
true)->setComment(
"embed external RecHits");
1297 ->setComment(
"particle flow input collection");
1300 "take ParticleFlow candidates from pfCandidateMultiMap instead of matching to pfElectrons by Gsf track "
1302 iDesc.
ifValue(usePfCandidateMultiMap,
1305 iDesc.
add<
bool>(
"useParticleFlow",
false)->setComment(
"whether to use particle flow or not");
1306 iDesc.
add<
bool>(
"embedPFCandidate",
false)->setComment(
"embed external particle flow object");
1309 iDesc.
add<
bool>(
"addGenMatch",
true)->setComment(
"add MC matching");
1310 iDesc.
add<
bool>(
"embedGenMatch",
false)->setComment(
"embed MC matched MC information");
1311 std::vector<edm::InputTag> emptySourceVector;
1315 ->
setComment(
"input with MC match information");
1318 iDesc.
add<
bool>(
"addElectronID",
true)->setComment(
"add electron ID variables");
1325 ->
setComment(
"input with electron ID variables");
1328 iDesc.
add<
bool>(
"computeMiniIso",
false)->setComment(
"whether or not to compute and store electron mini-isolation");
1330 ->setComment(
"collection to use to compute mini-iso");
1331 iDesc.
add<std::vector<double>>(
"miniIsoParamsE", std::vector<double>())
1332 ->
setComment(
"mini-iso parameters to use for endcap electrons");
1333 iDesc.
add<std::vector<double>>(
"miniIsoParamsB", std::vector<double>())
1334 ->
setComment(
"mini-iso parameters to use for barrel electrons");
1347 isoDepositsPSet.
addOptional<std::vector<edm::InputTag>>(
"user");
1348 iDesc.
addOptional(
"isoDeposits", isoDepositsPSet);
1361 isolationValuesPSet.
addOptional<std::vector<edm::InputTag>>(
"user");
1362 iDesc.
addOptional(
"isolationValues", isolationValuesPSet);
1375 isolationValuesNoPFIdPSet.
addOptional<std::vector<edm::InputTag>>(
"user");
1376 iDesc.
addOptional(
"isolationValuesNoPFId", isolationValuesNoPFIdPSet);
1381 iDesc.
add(
"efficiencies", efficienciesPSet);
1382 iDesc.
add<
bool>(
"addEfficiencies",
false);
1390 iDesc.
add<
bool>(
"addMVAVariables",
true)->setComment(
"embed extra variables in pat::Electron : sip3d, sigmaIEtaIPhi");
1396 iDesc.
add(
"userIsolation", isolationPSet);
1401 iDesc.
add<
bool>(
"embedHighLevelSelection",
true)->setComment(
"embed high level selection");
1405 ->
setComment(
"input with high level selection");
1407 ->
setComment(
"input with high level selection");
1409 descriptions.
add(
"PATElectronProducer", iDesc);
1418 bool primaryVertexIsValid,
1420 bool beamspotIsValid) {
1428 std::pair<bool, Measurement1D>
result =
1430 double d0_corr = result.second.value();
1431 double d0_err = primaryVertexIsValid ? result.second.error() : -1.0;
1443 d0_corr = result.second.value();
1444 d0_err = beamspotIsValid ? result.second.error() : -1.0;
const PflowIsolationVariables & pfIsolationVariables() const
void setMvaVariables(double sigmaIetaIphi, double ip3d)
set missing mva input variables
bool enabled() const
'true' if this there is at least one efficiency configured
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_
std::pair< pat::IsolationKeys, edm::InputTag > IsolationLabel
void setIsolation(IsolationKeys key, float value)
const GreaterByPt< Electron > pTComparator_
void readIsolationLabels(const edm::ParameterSet &iConfig, const char *psetName, IsolationLabels &labels, std::vector< edm::EDGetTokenT< edm::ValueMap< T >>> &tokens)
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_
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
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
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< edm::ValueMap< float > > PUPPIIsolation_neutral_hadrons_
const edm::EDGetTokenT< edm::ValueMap< float > > ecalPFClusterIsoT_
IsolationLabels isoDepositLabels_
std::vector< l1t::PFCandidate > PFCandidateCollection
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
bool exists(std::string const ¶meterName) const
checks if a parameter exists
void setPFCandidateRef(const reco::PFCandidateRef &ref)
add a reference to the source IsolatedPFCandidate
const edm::InputTag reducedBarrelRecHitCollection_
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)
edm::RefToBase< reco::GsfElectron > ElectronBaseRef
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
IsolationKeys
Enum defining isolation keys.
Log< level::Error, false > LogError
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_
void setPfIsolationVariables(const PflowIsolationVariables &iso)
const Point & position() const
position
const std::string names[nVars_]
const edm::ESGetToken< CaloTopology, CaloTopologyRecord > ecalTopologyToken_
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_
bool getData(T &iHolder) const
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_
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_
const PolarLorentzVector & polarP4() const final
four-momentum Lorentz vector
void setIsolationPUPPINoLeptons(float chargedhadrons_, float neutralhadrons_, float photons_)
sets PUPPINoLeptons isolations
std::vector< edm::Handle< edm::ValueMap< IsoDeposit > > > IsoDepositMaps
std::vector< edm::EDGetTokenT< edm::ValueMap< IsoDeposit > > > isoDepositTokens_
tuple key
prepare the HTCondor submission files and eventually submit them
edm::EDGetTokenT< edm::ValueMap< float > > PUPPINoLeptonsIsolation_neutral_hadrons_
const EcalClusterLazyTools::ESGetTokens ecalClusterToolsESGetTokens_
const bool embedSeedCluster_
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
const edm::InputTag reducedEndcapRecHitCollection_
const bool addPFClusterIso_
math::XYZPoint Point
point in the space
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.
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
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< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
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
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_
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > trackBuilderToken_
void setIsPF(bool hasPFCandidate)
const bool embedGsfElectronCore_
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > pfCandidateMultiMapToken_
pat::PATUserDataHelper< pat::Electron > userDataHelper_
T getParameter(std::string const &) const
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
iterator find(key_type k)
std::vector< IsolationLabel > IsolationLabels
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
IsolationLabels isolationValueLabels_
const bool embedPflowSuperCluster_
Calculates a lepton's calorimetric isolation energy.
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
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
edm::Ref< l1t::PFCandidateCollection > PFCandidateRef
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
Calculates a lepton's tracker isolation pt.
std::vector< NameTag > elecIDSrcs_
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const
const bool embedSuperCluster_