39 const std::vector<tensorflow::Session*>& tfSessions) {
40 std::vector<GsfElectron::MvaOutput> mva_outputs(
electrons.size());
47 mva_outputs[iele] = mvaOutput;
49 el.setMvaOutput(mvaOutput);
55 LogDebug(
"GsfElectronProducer") <<
"Getting DNN PFId for ele";
59 const auto& [iModel,
values] = dnn_ele_pfid[jele];
61 auto& mvaOutput = mva_outputs[jele];
70 }
else if (iModel == 4) {
78 el.setMvaOutput(mvaOutput);
87 auto matchWithPFCandidates(std::vector<reco::PFCandidate>
const&
pfCandidates) {
88 std::map<reco::GsfTrackRef, reco::GsfElectron::MvaInput> gsfMVAInputs{};
94 if (pfCand.gsfTrackRef().isNonnull()) {
99 input.sigmaEtaEta = pfCand.egammaExtraRef()->sigmaEtaEta();
100 input.hadEnergy = pfCand.egammaExtraRef()->hadEnergy();
101 gsfMVAInputs[pfCand.gsfTrackRef()] =
input;
108 LogTrace(
"GsfElectronAlgo") <<
"========== " <<
title <<
" ==========";
109 LogTrace(
"GsfElectronAlgo") <<
"Event: " <<
event.id();
112 LogTrace(
"GsfElectronAlgo") <<
"Electron with charge, pt, eta, phi: " << ele.charge() <<
" , " << ele.pt()
113 <<
" , " << ele.eta() <<
" , " << ele.phi();
115 LogTrace(
"GsfElectronAlgo") <<
"=================================================";
127 return std::make_unique<GsfElectronAlgo::HeavyObjectCache>(conf);
130 void endStream()
override;
138 std::unique_ptr<GsfElectronAlgo>
algo_;
181 desc.add<
edm::InputTag>(
"barrelRecHitCollectionTag", {
"ecalRecHit",
"EcalRecHitsEB"});
182 desc.add<
edm::InputTag>(
"endcapRecHitCollectionTag", {
"ecalRecHit",
"EcalRecHitsEE"});
188 desc.add<
bool>(
"useDefaultEnergyCorrection",
true);
189 desc.add<
bool>(
"useCombinationRegression",
false);
190 desc.add<
bool>(
"ecalDrivenEcalEnergyFromClassBasedParameterization",
true);
191 desc.add<
bool>(
"ecalDrivenEcalErrorFromClassBasedParameterization",
true);
192 desc.add<
bool>(
"applyPreselection",
false);
193 desc.add<
bool>(
"useEcalRegression",
false);
194 desc.add<
bool>(
"applyAmbResolution",
false);
195 desc.add<
bool>(
"ignoreNotPreselected",
true);
196 desc.add<
bool>(
"useGsfPfRecTracks",
true);
197 desc.add<
bool>(
"pureTrackerDrivenEcalErrorFromSimpleParameterization",
true);
198 desc.add<
unsigned int>(
"ambSortingStrategy", 1);
199 desc.add<
unsigned int>(
"ambClustersOverlapStrategy", 1);
200 desc.add<
bool>(
"fillConvVtxFitProb",
true);
201 desc.add<
bool>(
"resetMvaValuesUsingPFCandidates",
false);
204 desc.add<std::vector<std::string>>(
"recHitFlagsToBeExcludedBarrel");
205 desc.add<std::vector<std::string>>(
"recHitFlagsToBeExcludedEndcaps");
206 desc.add<std::vector<std::string>>(
"recHitSeverityToBeExcludedBarrel");
207 desc.add<std::vector<std::string>>(
"recHitSeverityToBeExcludedEndcaps");
210 desc.add<
bool>(
"checkHcalStatus",
true);
212 desc.add<std::vector<double>>(
"recHitEThresholdHB", {0., 0., 0., 0.});
213 desc.add<std::vector<double>>(
"recHitEThresholdHE", {0., 0., 0., 0., 0., 0., 0.});
214 desc.add<
int>(
"maxHcalRecHitSeverity", 999999);
215 desc.add<
bool>(
"hcalRun2EffDepth",
false);
216 desc.add<
bool>(
"usePFThresholdsFromDB",
false);
223 desc.add<
bool>(
"useNumCrystals",
true);
224 desc.add<
double>(
"etMinBarrel", 0.0);
225 desc.add<
double>(
"etMinEndcaps", 0.11);
226 desc.add<
double>(
"etMinHcal", 0.0);
227 desc.add<
double>(
"eMinBarrel", 0.095);
228 desc.add<
double>(
"eMinEndcaps", 0.0);
229 desc.add<
double>(
"intRadiusEcalBarrel", 3.0);
230 desc.add<
double>(
"intRadiusEcalEndcaps", 3.0);
231 desc.add<
double>(
"intRadiusHcal", 0.15);
232 desc.add<
double>(
"jurassicWidth", 1.5);
233 desc.add<
bool>(
"vetoClustered",
false);
236 desc.add<
bool>(
"ctfTracksCheck",
true);
239 desc.add<
double>(
"MaxElePtForOnlyMVA", 50.0);
240 desc.add<
double>(
"PreSelectMVA", -0.1);
244 psd0.
add<
double>(
"minSCEtBarrel", 4.0);
245 psd0.
add<
double>(
"minSCEtEndcaps", 4.0);
246 psd0.
add<
double>(
"minEOverPBarrel", 0.0);
247 psd0.
add<
double>(
"minEOverPEndcaps", 0.0);
248 psd0.
add<
double>(
"maxEOverPBarrel", 999999999.0);
249 psd0.
add<
double>(
"maxEOverPEndcaps", 999999999.0);
250 psd0.
add<
double>(
"maxDeltaEtaBarrel", 0.02);
251 psd0.
add<
double>(
"maxDeltaEtaEndcaps", 0.02);
252 psd0.
add<
double>(
"maxDeltaPhiBarrel", 0.15);
253 psd0.
add<
double>(
"maxDeltaPhiEndcaps", 0.15);
254 psd0.
add<
double>(
"hOverEConeSize", 0.15);
255 psd0.
add<
double>(
"maxHOverEBarrelCone", 0.15);
256 psd0.
add<
double>(
"maxHOverEEndcapsCone", 0.15);
257 psd0.
add<
double>(
"maxHBarrelCone", 0.0);
258 psd0.
add<
double>(
"maxHEndcapsCone", 0.0);
259 psd0.
add<
double>(
"maxHOverEBarrelBc", 0.15);
260 psd0.
add<
double>(
"maxHOverEEndcapsBc", 0.15);
261 psd0.
add<
double>(
"maxHBarrelBc", 0.0);
262 psd0.
add<
double>(
"maxHEndcapsBc", 0.0);
263 psd0.
add<
double>(
"maxSigmaIetaIetaBarrel", 999999999.0);
264 psd0.
add<
double>(
"maxSigmaIetaIetaEndcaps", 999999999.0);
265 psd0.
add<
double>(
"maxFbremBarrel", 999999999.0);
266 psd0.
add<
double>(
"maxFbremEndcaps", 999999999.0);
267 psd0.
add<
bool>(
"isBarrel",
false);
268 psd0.
add<
bool>(
"isEndcaps",
false);
269 psd0.
add<
bool>(
"isFiducial",
false);
270 psd0.
add<
bool>(
"seedFromTEC",
true);
271 psd0.
add<
double>(
"maxTIP", 999999999.0);
279 desc.add<
std::string>(
"crackCorrectionFunction",
"EcalClusterCrackCorrection");
281 desc.add<
bool>(
"ecalWeightsFromDB",
true);
282 desc.add<std::vector<std::string>>(
"ecalRefinedRegressionWeightFiles", {})
283 ->setComment(
"if not from DB. Otherwise, keep empty");
284 desc.add<
bool>(
"combinationWeightsFromDB",
true);
285 desc.add<std::vector<std::string>>(
"combinationRegressionWeightFile", {})
286 ->setComment(
"if not from DB. Otherwise, keep empty");
289 desc.add<std::vector<std::string>>(
"ecalRefinedRegressionWeightLabels", {});
290 desc.add<std::vector<std::string>>(
"combinationRegressionWeightLabels", {});
292 desc.add<std::vector<std::string>>(
293 "ElecMVAFilesString",
295 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_10_17Feb2011.weights.xml",
296 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_12_17Feb2011.weights.xml",
297 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_20_17Feb2011.weights.xml",
298 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_22_17Feb2011.weights.xml",
300 desc.add<std::vector<std::string>>(
301 "SoftElecMVAFilesString",
303 "RecoEgamma/ElectronIdentification/data/TMVA_BDTSoftElectrons_7Feb2014.weights.xml",
308 psd1.
add<
bool>(
"enabled",
false);
309 psd1.
add<
double>(
"extetaboundary", 2.65);
311 psd1.
add<
std::string>(
"outputTensorName",
"sequential/FinalLayer/Softmax");
313 psd1.
add<std::vector<std::string>>(
315 {
"RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/lowpT/lowpT_modelDNN.pb",
316 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEB/highpTEB_modelDNN.pb",
317 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEE/highpTEE_modelDNN.pb",
318 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta1/modelDNN.pb",
319 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta2/modelDNN.pb"});
320 psd1.
add<std::vector<std::string>>(
322 {
"RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/lowpT/lowpT_scaler.txt",
323 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEB/highpTEB_scaler.txt",
324 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEE/highpTEE_scaler.txt",
325 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta1/scaler.txt",
326 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta2/scaler.txt"});
327 psd1.
add<std::vector<unsigned int>>(
"outputDim",
330 psd1.
add<
bool>(
"useEBModelInGap",
true);
340 psd0.
add<
double>(
"drMax", 0.3);
341 psd0.
add<
double>(
"drVetoBarrel", 0.0);
342 psd0.
add<
double>(
"drVetoEndcap", 0.0);
343 psd0.
add<
double>(
"etaStripBarrel", 0.0);
344 psd0.
add<
double>(
"etaStripEndcap", 0.0);
345 psd0.
add<
double>(
"energyBarrel", 0.0);
346 psd0.
add<
double>(
"energyEndcap", 0.0);
356 psd0.
add<
bool>(
"useHF",
false);
357 psd0.
add<
double>(
"drMax", 0.3);
358 psd0.
add<
double>(
"drVetoBarrel", 0.0);
359 psd0.
add<
double>(
"drVetoEndcap", 0.0);
360 psd0.
add<
double>(
"etaStripBarrel", 0.0);
361 psd0.
add<
double>(
"etaStripEndcap", 0.0);
362 psd0.
add<
double>(
"energyBarrel", 0.0);
363 psd0.
add<
double>(
"energyEndcap", 0.0);
364 psd0.
add<
bool>(
"useEt",
true);
368 descriptions.
add(
"gsfElectronProducerDefault",
desc);
376 .maxEOverPBarrel =
pset.getParameter<
double>(
"maxEOverPBarrel"),
378 .minEOverPBarrel =
pset.getParameter<
double>(
"minEOverPBarrel"),
379 .minEOverPEndcaps =
pset.getParameter<
double>(
"minEOverPEndcaps"),
380 .maxHOverEBarrelCone =
pset.getParameter<
double>(
"maxHOverEBarrelCone"),
382 .maxHBarrelCone =
pset.getParameter<
double>(
"maxHBarrelCone"),
383 .maxHEndcapsCone =
pset.getParameter<
double>(
"maxHEndcapsCone"),
384 .maxHOverEBarrelBc =
pset.getParameter<
double>(
"maxHOverEBarrelBc"),
386 .maxHBarrelBc =
pset.getParameter<
double>(
"maxHBarrelBc"),
387 .maxHEndcapsBc =
pset.getParameter<
double>(
"maxHEndcapsBc"),
388 .maxDeltaEtaBarrel =
pset.getParameter<
double>(
"maxDeltaEtaBarrel"),
389 .maxDeltaEtaEndcaps =
pset.getParameter<
double>(
"maxDeltaEtaEndcaps"),
390 .maxDeltaPhiBarrel =
pset.getParameter<
double>(
"maxDeltaPhiBarrel"),
391 .maxDeltaPhiEndcaps =
pset.getParameter<
double>(
"maxDeltaPhiEndcaps"),
392 .maxSigmaIetaIetaBarrel =
pset.getParameter<
double>(
"maxSigmaIetaIetaBarrel"),
393 .maxSigmaIetaIetaEndcaps =
pset.getParameter<
double>(
"maxSigmaIetaIetaEndcaps"),
394 .maxFbremBarrel =
pset.getParameter<
double>(
"maxFbremBarrel"),
395 .maxFbremEndcaps =
pset.getParameter<
double>(
"maxFbremEndcaps"),
396 .isBarrel =
pset.getParameter<
bool>(
"isBarrel"),
397 .isEndcaps =
pset.getParameter<
bool>(
"isEndcaps"),
398 .isFiducial =
pset.getParameter<
bool>(
"isFiducial"),
399 .maxTIP =
pset.getParameter<
double>(
"maxTIP"),
400 .seedFromTEC =
pset.getParameter<
bool>(
"seedFromTEC"),
402 .multThresEE =
pset.getParameter<
double>(
"multThresEE"),
409 ecalSeedingParametersChecked_(
false),
410 electronPutToken_(produces<GsfElectronCollection>()),
411 gsfPfRecTracksTag_(consumes(
cfg.getParameter<
edm::InputTag>(
"gsfPfRecTracksTag"))),
412 useGsfPfRecTracks_(
cfg.getParameter<
bool>(
"useGsfPfRecTracks")),
413 resetMvaValuesUsingPFCandidates_(
cfg.getParameter<
bool>(
"resetMvaValuesUsingPFCandidates")) {
414 if (resetMvaValuesUsingPFCandidates_) {
415 egmPFCandidateCollection_ = consumes(
cfg.getParameter<
edm::InputTag>(
"egmPFCandidatesTag"));
419 cutsFromDB_ =
cfg.getParameter<
bool>(
"usePFThresholdsFromDB");
421 hcalCutsToken_ = esConsumes<HcalPFCuts, HcalPFCutsRcd>(
edm::ESInputTag(
"",
"withTopo"));
424 inputCfg_.gsfElectronCores = consumes(
cfg.getParameter<
edm::InputTag>(
"gsfElectronCoresTag"));
425 inputCfg_.hbheRecHitsTag = consumes(
cfg.getParameter<
edm::InputTag>(
"hbheRecHits"));
426 inputCfg_.barrelRecHitCollection = consumes(
cfg.getParameter<
edm::InputTag>(
"barrelRecHitCollectionTag"));
427 inputCfg_.endcapRecHitCollection = consumes(
cfg.getParameter<
edm::InputTag>(
"endcapRecHitCollectionTag"));
428 inputCfg_.ctfTracks = consumes(
cfg.getParameter<
edm::InputTag>(
"ctfTracksTag"));
431 inputCfg_.beamSpotTag = consumes(
cfg.getParameter<
edm::InputTag>(
"beamSpotTag"));
432 inputCfg_.vtxCollectionTag = consumes(
cfg.getParameter<
edm::InputTag>(
"vtxTag"));
433 if (
cfg.getParameter<
bool>(
"fillConvVtxFitProb"))
434 inputCfg_.conversions = consumes(
cfg.getParameter<
edm::InputTag>(
"conversionsTag"));
439 inputCfg_.pfClusterProducer =
447 dnnPFidEnabled_ = pset_dnn.
getParameter<
bool>(
"enabled");
448 extetaboundary_ = pset_dnn.getParameter<
double>(
"extetaboundary");
450 strategyCfg_.useDefaultEnergyCorrection =
cfg.getParameter<
bool>(
"useDefaultEnergyCorrection");
452 strategyCfg_.applyPreselection =
cfg.getParameter<
bool>(
"applyPreselection");
453 strategyCfg_.ecalDrivenEcalEnergyFromClassBasedParameterization =
454 cfg.getParameter<
bool>(
"ecalDrivenEcalEnergyFromClassBasedParameterization");
455 strategyCfg_.ecalDrivenEcalErrorFromClassBasedParameterization =
456 cfg.getParameter<
bool>(
"ecalDrivenEcalErrorFromClassBasedParameterization");
457 strategyCfg_.pureTrackerDrivenEcalErrorFromSimpleParameterization =
458 cfg.getParameter<
bool>(
"pureTrackerDrivenEcalErrorFromSimpleParameterization");
459 strategyCfg_.applyAmbResolution =
cfg.getParameter<
bool>(
"applyAmbResolution");
460 strategyCfg_.ignoreNotPreselected =
cfg.getParameter<
bool>(
"ignoreNotPreselected");
461 strategyCfg_.ambSortingStrategy =
cfg.getParameter<
unsigned>(
"ambSortingStrategy");
462 strategyCfg_.ambClustersOverlapStrategy =
cfg.getParameter<
unsigned>(
"ambClustersOverlapStrategy");
463 strategyCfg_.ctfTracksCheck =
cfg.getParameter<
bool>(
"ctfTracksCheck");
464 strategyCfg_.PreSelectMVA =
cfg.getParameter<
double>(
"PreSelectMVA");
465 strategyCfg_.MaxElePtForOnlyMVA =
cfg.getParameter<
double>(
"MaxElePtForOnlyMVA");
466 strategyCfg_.useEcalRegression =
cfg.getParameter<
bool>(
"useEcalRegression");
467 strategyCfg_.useCombinationRegression =
cfg.getParameter<
bool>(
"useCombinationRegression");
468 strategyCfg_.fillConvVtxFitProb =
cfg.getParameter<
bool>(
"fillConvVtxFitProb");
469 strategyCfg_.computePfClusterIso = dnnPFidEnabled_;
473 hcalCfg_.hOverEConeSize = psetPreselection.
getParameter<
double>(
"hOverEConeSize");
474 if (hcalCfg_.hOverEConeSize > 0) {
475 hcalCfg_.onlyBehindCluster =
false;
476 hcalCfg_.checkHcalStatus =
cfg.getParameter<
bool>(
"checkHcalStatus");
479 hcalCfg_.hbheRecHits = consumes<HBHERecHitCollection>(
cfg.getParameter<
edm::InputTag>(
"hbheRecHits"));
482 hcalCfg_.maxSeverityHB =
cfg.getParameter<
int>(
"maxHcalRecHitSeverity");
484 hcalCfg_.maxSeverityHE = hcalCfg_.maxSeverityHB;
487 hcalCfgBc_.hOverEConeSize = 0.;
488 hcalCfgBc_.onlyBehindCluster =
true;
489 hcalCfgBc_.checkHcalStatus =
cfg.getParameter<
bool>(
"checkHcalStatus");
492 hcalCfgBc_.hbheRecHits = consumes<HBHERecHitCollection>(
cfg.getParameter<
edm::InputTag>(
"hbheRecHits"));
495 hcalCfgBc_.maxSeverityHB =
cfg.getParameter<
int>(
"maxHcalRecHitSeverity");
497 hcalCfgBc_.maxSeverityHE = hcalCfgBc_.maxSeverityHB;
499 hcalRun2EffDepth_ =
cfg.getParameter<
bool>(
"hcalRun2EffDepth");
503 auto const& flagnamesbarrel =
cfg.getParameter<std::vector<std::string>>(
"recHitFlagsToBeExcludedBarrel");
504 recHitsCfg.recHitFlagsToBeExcludedBarrel = StringToEnumValue<EcalRecHit::Flags>(flagnamesbarrel);
505 auto const& flagnamesendcaps =
cfg.getParameter<std::vector<std::string>>(
"recHitFlagsToBeExcludedEndcaps");
506 recHitsCfg.recHitFlagsToBeExcludedEndcaps = StringToEnumValue<EcalRecHit::Flags>(flagnamesendcaps);
507 auto const& severitynamesbarrel =
cfg.getParameter<std::vector<std::string>>(
"recHitSeverityToBeExcludedBarrel");
508 recHitsCfg.recHitSeverityToBeExcludedBarrel =
509 StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesbarrel);
510 auto const& severitynamesendcaps =
cfg.getParameter<std::vector<std::string>>(
"recHitSeverityToBeExcludedEndcaps");
511 recHitsCfg.recHitSeverityToBeExcludedEndcaps =
512 StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesendcaps);
517 .etMinHcal =
cfg.getParameter<
double>(
"etMinHcal"),
518 .intRadiusEcalBarrel =
cfg.getParameter<
double>(
"intRadiusEcalBarrel"),
519 .intRadiusEcalEndcaps =
cfg.getParameter<
double>(
"intRadiusEcalEndcaps"),
520 .jurassicWidth =
cfg.getParameter<
double>(
"jurassicWidth"),
522 .eMinBarrel =
cfg.getParameter<
double>(
"eMinBarrel"),
523 .etMinEndcaps =
cfg.getParameter<
double>(
"etMinEndcaps"),
524 .eMinEndcaps =
cfg.getParameter<
double>(
"eMinEndcaps"),
526 .useNumCrystals =
cfg.getParameter<
bool>(
"useNumCrystals")};
549 .ecalWeightsFromDB =
cfg.getParameter<
bool>(
"ecalWeightsFromDB"),
550 .ecalRegressionWeightFiles =
cfg.getParameter<std::vector<std::string>>(
"ecalRefinedRegressionWeightFiles"),
552 cfg.getParameter<std::vector<std::string>>(
"combinationRegressionWeightLabels"),
553 .combinationWeightsFromDB =
cfg.getParameter<
bool>(
"combinationWeightsFromDB"),
554 .combinationRegressionWeightFiles =
555 cfg.getParameter<std::vector<std::string>>(
"combinationRegressionWeightFile")};
558 algo_ = std::make_unique<GsfElectronAlgo>(
568 cfg.getParameter<
std::string>(
"crackCorrectionFunction"),
cfg, consumesCollector()),
574 consumesCollector());
576 if (dnnPFidEnabled_) {
577 tfSessions_ = gcache->iElectronDNNEstimator->getSessions();
588 if (!
pset.exists(
"SeedConfiguration")) {
593 if (seedConfiguration.
getParameter<
bool>(
"applyHOverECut")) {
598 << seedConfiguration.
getParameter<
double>(
"hOverEConeSize") <<
").";
602 <<
"The max barrel cone H/E is lower than during ecal seeding.";
606 <<
"The max endcaps cone H/E is lower than during ecal seeding.";
612 <<
"The minimum super-cluster Et in barrel is lower than during ecal seeding.";
616 <<
"The minimum super-cluster Et in endcaps is lower than during ecal seeding.";
639 throw cms::Exception(
"GsfElectronAlgo|UnknownAmbiguitySortingStrategy")
654 if (gsfPfRecTrack.gsfTrackRef() ==
e1.gsfTrack()) {
656 edm::LogWarning(
"GsfElectronAlgo") <<
"associated gsfPfRecTrack already found";
659 for (
auto const& duplicate : gsfPfRecTrack.convBremGsfPFRecTrackRef()) {
660 e1.addAmbiguousGsfTrack(duplicate->gsfTrackRef());
677 LogDebug(
"GsfElectronAlgo") <<
"Blessing electron with E/P " <<
e1->eSuperClusterOverP() <<
", cluster " 678 << scRef1.
get() <<
" & track " <<
e1->gsfTrack().get();
680 for (
auto e2 =
e1 + 1; e2 !=
electrons.end(); ++e2) {
690 bool sameCluster =
false;
692 sameCluster = (scRef1 == scRef2);
702 throw cms::Exception(
"GsfElectronAlgo|UnknownAmbiguityClustersOverlapStrategy")
708 LogDebug(
"GsfElectronAlgo") <<
"Discarding electron with E/P " << e2->eSuperClusterOverP() <<
", cluster " 709 << scRef2.
get() <<
" and track " << e2->gsfTrack().get();
710 e1->addAmbiguousGsfTrack(e2->gsfTrack());
711 e2->setAmbiguous(
true);
712 }
else if (
e1->gsfTrack() == e2->gsfTrack()) {
713 edm::LogWarning(
"GsfElectronAlgo") <<
"Forgetting electron with E/P " << e2->eSuperClusterOverP()
714 <<
", cluster " << scRef2.
get() <<
" and track " << e2->gsfTrack().get();
715 e2->setAmbiguous(
true);
730 return passmva && passCutBased;
734 return passCutBased || passPF || passmva;
749 if (!
seeds.isValid()) {
751 <<
"Cannot check consistency of parameters with ecal seeding ones," 752 <<
" because the original collection of seeds is not any more available.";
762 el.setMvaInput(gsfMVAInputMap.find(el.gsfTrack())->
second);
769 logElectrons(
electrons,
event,
"GsfElectronAlgo Info (before preselection)");
775 logElectrons(
electrons,
event,
"GsfElectronAlgo Info (after preselection)");
782 logElectrons(
electrons,
event,
"GsfElectronAlgo Info (after amb. solving)");
787 ele.hcalToRun2EffDepth();
void checkEcalSeedingParameters(edm::ParameterSet const &)
static constexpr float kMultThresEE
T getParameter(std::string const &) const
bool ignoreNotPreselected
const edm::EDGetTokenT< reco::GsfPFRecTrackCollection > gsfPfRecTracksTag_
unsigned ambClustersOverlapStrategy
GsfElectronAlgo::Tokens inputCfg_
double pt() const final
transverse momentum
bool ecalDrivenSeed() const
edm::EDGetTokenT< reco::PFCandidateCollection > egmPFCandidateCollection_
std::vector< std::string > ecalRegressionWeightLabels
unsigned ambSortingStrategy
static void fillDescriptions(edm::ConfigurationDescriptions &)
const bool resetMvaValuesUsingPFCandidates_
bool passingPflowPreselection() const
std::vector< Vertex > VertexCollection
collection of Vertex objects
edm::EDGetTokenT< reco::VertexCollection > vtxCollectionTag
const bool useGsfPfRecTracks_
edm::EDGetTokenT< EcalRecHitCollection > endcapRecHitCollection
ParameterSet const & parameterSet(StableProvenance const &provenance, ProcessHistory const &history)
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
bool ecalSeedingParametersChecked_
edm::ESGetToken< HcalPFCuts, HcalPFCutsRcd > hcalCutsToken_
ElectronHcalHelper::Configuration hcalCfg_
static std::string const input
std::unique_ptr< const ElectronMVAEstimator > iElectronMVAEstimator
U second(std::pair< T, U > const &p)
bool isBetterElectron(reco::GsfElectron const &, reco::GsfElectron const &)
bool isInnermostElectron(reco::GsfElectron const &, reco::GsfElectron const &)
void endStream() override
GsfElectronProducer(const edm::ParameterSet &, const GsfElectronAlgo::HeavyObjectCache *)
static std::unique_ptr< GsfElectronAlgo::HeavyObjectCache > initializeGlobalCache(const edm::ParameterSet &conf)
double maxHOverEBarrelCone
float dnn_e_sigNonIsolated
const edm::EDPutTokenT< reco::GsfElectronCollection > electronPutToken_
combinationRegressionWeightLabels
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag
bool closeSession(Session *&session)
std::vector< tensorflow::Session * > tfSessions_
#define DEFINE_FWK_MODULE(type)
static edm::ParameterSetDescription pSetDescript()
edm::EDGetTokenT< reco::ElectronSeedCollection > seedsTag
std::unique_ptr< const ElectronDNNEstimator > iElectronDNNEstimator
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isPreselected(reco::GsfElectron const &ele) const
static constexpr float kMultThresEB
void setAmbiguityData(reco::GsfElectronCollection &electrons, edm::Event const &event, bool ignoreNotPreselected=true) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const GsfElectronAlgo::CutsConfiguration cutsCfg_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
float sharedEnergy(reco::CaloCluster const &clu1, reco::CaloCluster const &clu2, EcalRecHitCollection const &barrelRecHits, EcalRecHitCollection const &endcapRecHits)
bool passingMvaPreselection() const
T const * get() const
Returns C++ pointer to the item.
edm::EDGetTokenT< EcalRecHitCollection > barrelRecHitCollection
float dnn_e_bkgNonIsolated
std::unique_ptr< GsfElectronAlgo > algo_
ElectronHcalHelper::Configuration hcalCfgBc_
double maxHOverEEndcapsCone
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
Log< level::Warning, false > LogWarning
std::array< double, 4 > arrayHB
static void globalEndJob(GsfElectronAlgo::HeavyObjectCache const *)
void produce(edm::Event &event, const edm::EventSetup &setup) override
bool passingCutBasedPreselection() const
GsfElectronAlgo::StrategyConfiguration strategyCfg_
std::array< double, 7 > arrayHE