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&
values = dnn_ele_pfid[jele];
61 auto& mvaOutput = mva_outputs[jele];
63 if (
abs(el.superCluster()->eta()) <= extetaboundary) {
76 el.setMvaOutput(mvaOutput);
85 auto matchWithPFCandidates(std::vector<reco::PFCandidate>
const&
pfCandidates) {
86 std::map<reco::GsfTrackRef, reco::GsfElectron::MvaInput> gsfMVAInputs{};
92 if (pfCand.gsfTrackRef().isNonnull()) {
97 input.sigmaEtaEta = pfCand.egammaExtraRef()->sigmaEtaEta();
98 input.hadEnergy = pfCand.egammaExtraRef()->hadEnergy();
99 gsfMVAInputs[pfCand.gsfTrackRef()] =
input;
106 LogTrace(
"GsfElectronAlgo") <<
"========== " <<
title <<
" ==========";
107 LogTrace(
"GsfElectronAlgo") <<
"Event: " <<
event.id();
110 LogTrace(
"GsfElectronAlgo") <<
"Electron with charge, pt, eta, phi: " << ele.charge() <<
" , " << ele.pt()
111 <<
" , " << ele.eta() <<
" , " << ele.phi();
113 LogTrace(
"GsfElectronAlgo") <<
"=================================================";
125 return std::make_unique<GsfElectronAlgo::HeavyObjectCache>(conf);
128 void endStream()
override;
136 std::unique_ptr<GsfElectronAlgo>
algo_;
176 desc.add<
edm::InputTag>(
"barrelRecHitCollectionTag", {
"ecalRecHit",
"EcalRecHitsEB"});
177 desc.add<
edm::InputTag>(
"endcapRecHitCollectionTag", {
"ecalRecHit",
"EcalRecHitsEE"});
183 desc.add<
bool>(
"useDefaultEnergyCorrection",
true);
184 desc.add<
bool>(
"useCombinationRegression",
false);
185 desc.add<
bool>(
"ecalDrivenEcalEnergyFromClassBasedParameterization",
true);
186 desc.add<
bool>(
"ecalDrivenEcalErrorFromClassBasedParameterization",
true);
187 desc.add<
bool>(
"applyPreselection",
false);
188 desc.add<
bool>(
"useEcalRegression",
false);
189 desc.add<
bool>(
"applyAmbResolution",
false);
190 desc.add<
bool>(
"ignoreNotPreselected",
true);
191 desc.add<
bool>(
"useGsfPfRecTracks",
true);
192 desc.add<
bool>(
"pureTrackerDrivenEcalErrorFromSimpleParameterization",
true);
193 desc.add<
unsigned int>(
"ambSortingStrategy", 1);
194 desc.add<
unsigned int>(
"ambClustersOverlapStrategy", 1);
195 desc.add<
bool>(
"fillConvVtxFitProb",
true);
196 desc.add<
bool>(
"resetMvaValuesUsingPFCandidates",
false);
199 desc.add<std::vector<std::string>>(
"recHitFlagsToBeExcludedBarrel");
200 desc.add<std::vector<std::string>>(
"recHitFlagsToBeExcludedEndcaps");
201 desc.add<std::vector<std::string>>(
"recHitSeverityToBeExcludedBarrel");
202 desc.add<std::vector<std::string>>(
"recHitSeverityToBeExcludedEndcaps");
205 desc.add<
bool>(
"checkHcalStatus",
true);
207 desc.add<std::vector<double>>(
"recHitEThresholdHB", {0., 0., 0., 0.});
208 desc.add<std::vector<double>>(
"recHitEThresholdHE", {0., 0., 0., 0., 0., 0., 0.});
209 desc.add<
int>(
"maxHcalRecHitSeverity", 999999);
210 desc.add<
bool>(
"hcalRun2EffDepth",
false);
217 desc.add<
bool>(
"useNumCrystals",
true);
218 desc.add<
double>(
"etMinBarrel", 0.0);
219 desc.add<
double>(
"etMinEndcaps", 0.11);
220 desc.add<
double>(
"etMinHcal", 0.0);
221 desc.add<
double>(
"eMinBarrel", 0.095);
222 desc.add<
double>(
"eMinEndcaps", 0.0);
223 desc.add<
double>(
"intRadiusEcalBarrel", 3.0);
224 desc.add<
double>(
"intRadiusEcalEndcaps", 3.0);
225 desc.add<
double>(
"intRadiusHcal", 0.15);
226 desc.add<
double>(
"jurassicWidth", 1.5);
227 desc.add<
bool>(
"vetoClustered",
false);
230 desc.add<
bool>(
"ctfTracksCheck",
true);
233 desc.add<
double>(
"MaxElePtForOnlyMVA", 50.0);
234 desc.add<
double>(
"PreSelectMVA", -0.1);
238 psd0.
add<
double>(
"minSCEtBarrel", 4.0);
239 psd0.
add<
double>(
"minSCEtEndcaps", 4.0);
240 psd0.
add<
double>(
"minEOverPBarrel", 0.0);
241 psd0.
add<
double>(
"minEOverPEndcaps", 0.0);
242 psd0.
add<
double>(
"maxEOverPBarrel", 999999999.0);
243 psd0.
add<
double>(
"maxEOverPEndcaps", 999999999.0);
244 psd0.
add<
double>(
"maxDeltaEtaBarrel", 0.02);
245 psd0.
add<
double>(
"maxDeltaEtaEndcaps", 0.02);
246 psd0.
add<
double>(
"maxDeltaPhiBarrel", 0.15);
247 psd0.
add<
double>(
"maxDeltaPhiEndcaps", 0.15);
248 psd0.
add<
double>(
"hOverEConeSize", 0.15);
249 psd0.
add<
double>(
"maxHOverEBarrelCone", 0.15);
250 psd0.
add<
double>(
"maxHOverEEndcapsCone", 0.15);
251 psd0.
add<
double>(
"maxHBarrelCone", 0.0);
252 psd0.
add<
double>(
"maxHEndcapsCone", 0.0);
253 psd0.
add<
double>(
"maxHOverEBarrelBc", 0.15);
254 psd0.
add<
double>(
"maxHOverEEndcapsBc", 0.15);
255 psd0.
add<
double>(
"maxHBarrelBc", 0.0);
256 psd0.
add<
double>(
"maxHEndcapsBc", 0.0);
257 psd0.
add<
double>(
"maxSigmaIetaIetaBarrel", 999999999.0);
258 psd0.
add<
double>(
"maxSigmaIetaIetaEndcaps", 999999999.0);
259 psd0.
add<
double>(
"maxFbremBarrel", 999999999.0);
260 psd0.
add<
double>(
"maxFbremEndcaps", 999999999.0);
261 psd0.
add<
bool>(
"isBarrel",
false);
262 psd0.
add<
bool>(
"isEndcaps",
false);
263 psd0.
add<
bool>(
"isFiducial",
false);
264 psd0.
add<
bool>(
"seedFromTEC",
true);
265 psd0.
add<
double>(
"maxTIP", 999999999.0);
273 desc.add<
std::string>(
"crackCorrectionFunction",
"EcalClusterCrackCorrection");
275 desc.add<
bool>(
"ecalWeightsFromDB",
true);
276 desc.add<std::vector<std::string>>(
"ecalRefinedRegressionWeightFiles", {})
277 ->setComment(
"if not from DB. Otherwise, keep empty");
278 desc.add<
bool>(
"combinationWeightsFromDB",
true);
279 desc.add<std::vector<std::string>>(
"combinationRegressionWeightFile", {})
280 ->setComment(
"if not from DB. Otherwise, keep empty");
283 desc.add<std::vector<std::string>>(
"ecalRefinedRegressionWeightLabels", {});
284 desc.add<std::vector<std::string>>(
"combinationRegressionWeightLabels", {});
286 desc.add<std::vector<std::string>>(
287 "ElecMVAFilesString",
289 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_10_17Feb2011.weights.xml",
290 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_12_17Feb2011.weights.xml",
291 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_20_17Feb2011.weights.xml",
292 "RecoEgamma/ElectronIdentification/data/TMVA_Category_BDTSimpleCat_22_17Feb2011.weights.xml",
294 desc.add<std::vector<std::string>>(
295 "SoftElecMVAFilesString",
297 "RecoEgamma/ElectronIdentification/data/TMVA_BDTSoftElectrons_7Feb2014.weights.xml",
302 psd1.
add<
bool>(
"enabled",
false);
303 psd1.
add<
double>(
"extetaboundary", 2.65);
305 psd1.
add<
std::string>(
"outputTensorName",
"sequential/FinalLayer/Softmax");
307 psd1.
add<std::vector<std::string>>(
309 {
"RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/lowpT/lowpT_modelDNN.pb",
310 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEB/highpTEB_modelDNN.pb",
311 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEE/highpTEE_modelDNN.pb",
312 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta1/modelDNN.pb",
313 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta2/modelDNN.pb"});
314 psd1.
add<std::vector<std::string>>(
316 {
"RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/lowpT/lowpT_scaler.txt",
317 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEB/highpTEB_scaler.txt",
318 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Summer21_120X/highpTEE/highpTEE_scaler.txt",
319 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta1/scaler.txt",
320 "RecoEgamma/ElectronIdentification/data/Ele_PFID_dnn/Run3Winter22_122X/exteta2/scaler.txt"});
321 psd1.
add<std::vector<unsigned int>>(
"outputDim",
324 psd1.
add<
bool>(
"useEBModelInGap",
true);
334 psd0.
add<
double>(
"drMax", 0.3);
335 psd0.
add<
double>(
"drVetoBarrel", 0.0);
336 psd0.
add<
double>(
"drVetoEndcap", 0.0);
337 psd0.
add<
double>(
"etaStripBarrel", 0.0);
338 psd0.
add<
double>(
"etaStripEndcap", 0.0);
339 psd0.
add<
double>(
"energyBarrel", 0.0);
340 psd0.
add<
double>(
"energyEndcap", 0.0);
350 psd0.
add<
bool>(
"useHF",
false);
351 psd0.
add<
double>(
"drMax", 0.3);
352 psd0.
add<
double>(
"drVetoBarrel", 0.0);
353 psd0.
add<
double>(
"drVetoEndcap", 0.0);
354 psd0.
add<
double>(
"etaStripBarrel", 0.0);
355 psd0.
add<
double>(
"etaStripEndcap", 0.0);
356 psd0.
add<
double>(
"energyBarrel", 0.0);
357 psd0.
add<
double>(
"energyEndcap", 0.0);
358 psd0.
add<
bool>(
"useEt",
true);
362 descriptions.
add(
"gsfElectronProducerDefault",
desc);
370 .maxEOverPBarrel =
pset.getParameter<
double>(
"maxEOverPBarrel"),
372 .minEOverPBarrel =
pset.getParameter<
double>(
"minEOverPBarrel"),
373 .minEOverPEndcaps =
pset.getParameter<
double>(
"minEOverPEndcaps"),
374 .maxHOverEBarrelCone =
pset.getParameter<
double>(
"maxHOverEBarrelCone"),
376 .maxHBarrelCone =
pset.getParameter<
double>(
"maxHBarrelCone"),
377 .maxHEndcapsCone =
pset.getParameter<
double>(
"maxHEndcapsCone"),
378 .maxHOverEBarrelBc =
pset.getParameter<
double>(
"maxHOverEBarrelBc"),
380 .maxHBarrelBc =
pset.getParameter<
double>(
"maxHBarrelBc"),
381 .maxHEndcapsBc =
pset.getParameter<
double>(
"maxHEndcapsBc"),
382 .maxDeltaEtaBarrel =
pset.getParameter<
double>(
"maxDeltaEtaBarrel"),
383 .maxDeltaEtaEndcaps =
pset.getParameter<
double>(
"maxDeltaEtaEndcaps"),
384 .maxDeltaPhiBarrel =
pset.getParameter<
double>(
"maxDeltaPhiBarrel"),
385 .maxDeltaPhiEndcaps =
pset.getParameter<
double>(
"maxDeltaPhiEndcaps"),
386 .maxSigmaIetaIetaBarrel =
pset.getParameter<
double>(
"maxSigmaIetaIetaBarrel"),
387 .maxSigmaIetaIetaEndcaps =
pset.getParameter<
double>(
"maxSigmaIetaIetaEndcaps"),
388 .maxFbremBarrel =
pset.getParameter<
double>(
"maxFbremBarrel"),
389 .maxFbremEndcaps =
pset.getParameter<
double>(
"maxFbremEndcaps"),
390 .isBarrel =
pset.getParameter<
bool>(
"isBarrel"),
391 .isEndcaps =
pset.getParameter<
bool>(
"isEndcaps"),
392 .isFiducial =
pset.getParameter<
bool>(
"isFiducial"),
393 .maxTIP =
pset.getParameter<
double>(
"maxTIP"),
394 .seedFromTEC =
pset.getParameter<
bool>(
"seedFromTEC"),
396 .multThresEE =
pset.getParameter<
double>(
"multThresEE"),
403 ecalSeedingParametersChecked_(
false),
404 electronPutToken_(produces<GsfElectronCollection>()),
405 gsfPfRecTracksTag_(consumes(
cfg.getParameter<
edm::InputTag>(
"gsfPfRecTracksTag"))),
406 useGsfPfRecTracks_(
cfg.getParameter<
bool>(
"useGsfPfRecTracks")),
407 resetMvaValuesUsingPFCandidates_(
cfg.getParameter<
bool>(
"resetMvaValuesUsingPFCandidates")) {
408 if (resetMvaValuesUsingPFCandidates_) {
409 egmPFCandidateCollection_ = consumes(
cfg.getParameter<
edm::InputTag>(
"egmPFCandidatesTag"));
412 inputCfg_.gsfElectronCores = consumes(
cfg.getParameter<
edm::InputTag>(
"gsfElectronCoresTag"));
413 inputCfg_.hbheRecHitsTag = consumes(
cfg.getParameter<
edm::InputTag>(
"hbheRecHits"));
414 inputCfg_.barrelRecHitCollection = consumes(
cfg.getParameter<
edm::InputTag>(
"barrelRecHitCollectionTag"));
415 inputCfg_.endcapRecHitCollection = consumes(
cfg.getParameter<
edm::InputTag>(
"endcapRecHitCollectionTag"));
416 inputCfg_.ctfTracks = consumes(
cfg.getParameter<
edm::InputTag>(
"ctfTracksTag"));
419 inputCfg_.beamSpotTag = consumes(
cfg.getParameter<
edm::InputTag>(
"beamSpotTag"));
420 inputCfg_.vtxCollectionTag = consumes(
cfg.getParameter<
edm::InputTag>(
"vtxTag"));
421 if (
cfg.getParameter<
bool>(
"fillConvVtxFitProb"))
422 inputCfg_.conversions = consumes(
cfg.getParameter<
edm::InputTag>(
"conversionsTag"));
427 inputCfg_.pfClusterProducer =
435 dnnPFidEnabled_ = pset_dnn.
getParameter<
bool>(
"enabled");
436 extetaboundary_ = pset_dnn.getParameter<
double>(
"extetaboundary");
438 strategyCfg_.useDefaultEnergyCorrection =
cfg.getParameter<
bool>(
"useDefaultEnergyCorrection");
440 strategyCfg_.applyPreselection =
cfg.getParameter<
bool>(
"applyPreselection");
441 strategyCfg_.ecalDrivenEcalEnergyFromClassBasedParameterization =
442 cfg.getParameter<
bool>(
"ecalDrivenEcalEnergyFromClassBasedParameterization");
443 strategyCfg_.ecalDrivenEcalErrorFromClassBasedParameterization =
444 cfg.getParameter<
bool>(
"ecalDrivenEcalErrorFromClassBasedParameterization");
445 strategyCfg_.pureTrackerDrivenEcalErrorFromSimpleParameterization =
446 cfg.getParameter<
bool>(
"pureTrackerDrivenEcalErrorFromSimpleParameterization");
447 strategyCfg_.applyAmbResolution =
cfg.getParameter<
bool>(
"applyAmbResolution");
448 strategyCfg_.ignoreNotPreselected =
cfg.getParameter<
bool>(
"ignoreNotPreselected");
449 strategyCfg_.ambSortingStrategy =
cfg.getParameter<
unsigned>(
"ambSortingStrategy");
450 strategyCfg_.ambClustersOverlapStrategy =
cfg.getParameter<
unsigned>(
"ambClustersOverlapStrategy");
451 strategyCfg_.ctfTracksCheck =
cfg.getParameter<
bool>(
"ctfTracksCheck");
452 strategyCfg_.PreSelectMVA =
cfg.getParameter<
double>(
"PreSelectMVA");
453 strategyCfg_.MaxElePtForOnlyMVA =
cfg.getParameter<
double>(
"MaxElePtForOnlyMVA");
454 strategyCfg_.useEcalRegression =
cfg.getParameter<
bool>(
"useEcalRegression");
455 strategyCfg_.useCombinationRegression =
cfg.getParameter<
bool>(
"useCombinationRegression");
456 strategyCfg_.fillConvVtxFitProb =
cfg.getParameter<
bool>(
"fillConvVtxFitProb");
457 strategyCfg_.computePfClusterIso = dnnPFidEnabled_;
461 hcalCfg_.hOverEConeSize = psetPreselection.
getParameter<
double>(
"hOverEConeSize");
462 if (hcalCfg_.hOverEConeSize > 0) {
463 hcalCfg_.onlyBehindCluster =
false;
464 hcalCfg_.checkHcalStatus =
cfg.getParameter<
bool>(
"checkHcalStatus");
467 hcalCfg_.hbheRecHits = consumes<HBHERecHitCollection>(
cfg.getParameter<
edm::InputTag>(
"hbheRecHits"));
470 hcalCfg_.maxSeverityHB =
cfg.getParameter<
int>(
"maxHcalRecHitSeverity");
472 hcalCfg_.maxSeverityHE = hcalCfg_.maxSeverityHB;
475 hcalCfgBc_.hOverEConeSize = 0.;
476 hcalCfgBc_.onlyBehindCluster =
true;
477 hcalCfgBc_.checkHcalStatus =
cfg.getParameter<
bool>(
"checkHcalStatus");
480 hcalCfgBc_.hbheRecHits = consumes<HBHERecHitCollection>(
cfg.getParameter<
edm::InputTag>(
"hbheRecHits"));
483 hcalCfgBc_.maxSeverityHB =
cfg.getParameter<
int>(
"maxHcalRecHitSeverity");
485 hcalCfgBc_.maxSeverityHE = hcalCfgBc_.maxSeverityHB;
487 hcalRun2EffDepth_ =
cfg.getParameter<
bool>(
"hcalRun2EffDepth");
491 auto const& flagnamesbarrel =
cfg.getParameter<std::vector<std::string>>(
"recHitFlagsToBeExcludedBarrel");
492 recHitsCfg.recHitFlagsToBeExcludedBarrel = StringToEnumValue<EcalRecHit::Flags>(flagnamesbarrel);
493 auto const& flagnamesendcaps =
cfg.getParameter<std::vector<std::string>>(
"recHitFlagsToBeExcludedEndcaps");
494 recHitsCfg.recHitFlagsToBeExcludedEndcaps = StringToEnumValue<EcalRecHit::Flags>(flagnamesendcaps);
495 auto const& severitynamesbarrel =
cfg.getParameter<std::vector<std::string>>(
"recHitSeverityToBeExcludedBarrel");
496 recHitsCfg.recHitSeverityToBeExcludedBarrel =
497 StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesbarrel);
498 auto const& severitynamesendcaps =
cfg.getParameter<std::vector<std::string>>(
"recHitSeverityToBeExcludedEndcaps");
499 recHitsCfg.recHitSeverityToBeExcludedEndcaps =
500 StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesendcaps);
505 .etMinHcal =
cfg.getParameter<
double>(
"etMinHcal"),
506 .intRadiusEcalBarrel =
cfg.getParameter<
double>(
"intRadiusEcalBarrel"),
507 .intRadiusEcalEndcaps =
cfg.getParameter<
double>(
"intRadiusEcalEndcaps"),
508 .jurassicWidth =
cfg.getParameter<
double>(
"jurassicWidth"),
510 .eMinBarrel =
cfg.getParameter<
double>(
"eMinBarrel"),
511 .etMinEndcaps =
cfg.getParameter<
double>(
"etMinEndcaps"),
512 .eMinEndcaps =
cfg.getParameter<
double>(
"eMinEndcaps"),
514 .useNumCrystals =
cfg.getParameter<
bool>(
"useNumCrystals")};
537 .ecalWeightsFromDB =
cfg.getParameter<
bool>(
"ecalWeightsFromDB"),
538 .ecalRegressionWeightFiles =
cfg.getParameter<std::vector<std::string>>(
"ecalRefinedRegressionWeightFiles"),
540 cfg.getParameter<std::vector<std::string>>(
"combinationRegressionWeightLabels"),
541 .combinationWeightsFromDB =
cfg.getParameter<
bool>(
"combinationWeightsFromDB"),
542 .combinationRegressionWeightFiles =
543 cfg.getParameter<std::vector<std::string>>(
"combinationRegressionWeightFile")};
546 algo_ = std::make_unique<GsfElectronAlgo>(
556 cfg.getParameter<
std::string>(
"crackCorrectionFunction"),
cfg, consumesCollector()),
562 consumesCollector());
564 if (dnnPFidEnabled_) {
565 tfSessions_ = gcache->iElectronDNNEstimator->getSessions();
576 if (!
pset.exists(
"SeedConfiguration")) {
581 if (seedConfiguration.
getParameter<
bool>(
"applyHOverECut")) {
586 << seedConfiguration.
getParameter<
double>(
"hOverEConeSize") <<
").";
590 <<
"The max barrel cone H/E is lower than during ecal seeding.";
594 <<
"The max endcaps cone H/E is lower than during ecal seeding.";
600 <<
"The minimum super-cluster Et in barrel is lower than during ecal seeding.";
604 <<
"The minimum super-cluster Et in endcaps is lower than during ecal seeding.";
627 throw cms::Exception(
"GsfElectronAlgo|UnknownAmbiguitySortingStrategy")
642 if (gsfPfRecTrack.gsfTrackRef() ==
e1.gsfTrack()) {
644 edm::LogWarning(
"GsfElectronAlgo") <<
"associated gsfPfRecTrack already found";
647 for (
auto const& duplicate : gsfPfRecTrack.convBremGsfPFRecTrackRef()) {
648 e1.addAmbiguousGsfTrack(duplicate->gsfTrackRef());
665 LogDebug(
"GsfElectronAlgo") <<
"Blessing electron with E/P " <<
e1->eSuperClusterOverP() <<
", cluster " 666 << scRef1.
get() <<
" & track " <<
e1->gsfTrack().get();
668 for (
auto e2 =
e1 + 1; e2 !=
electrons.end(); ++e2) {
678 bool sameCluster =
false;
680 sameCluster = (scRef1 == scRef2);
690 throw cms::Exception(
"GsfElectronAlgo|UnknownAmbiguityClustersOverlapStrategy")
696 LogDebug(
"GsfElectronAlgo") <<
"Discarding electron with E/P " << e2->eSuperClusterOverP() <<
", cluster " 697 << scRef2.
get() <<
" and track " << e2->gsfTrack().get();
698 e1->addAmbiguousGsfTrack(e2->gsfTrack());
699 e2->setAmbiguous(
true);
700 }
else if (
e1->gsfTrack() == e2->gsfTrack()) {
701 edm::LogWarning(
"GsfElectronAlgo") <<
"Forgetting electron with E/P " << e2->eSuperClusterOverP()
702 <<
", cluster " << scRef2.
get() <<
" and track " << e2->gsfTrack().get();
703 e2->setAmbiguous(
true);
718 return passmva && passCutBased;
722 return passCutBased || passPF || passmva;
732 if (!
seeds.isValid()) {
734 <<
"Cannot check consistency of parameters with ecal seeding ones," 735 <<
" because the original collection of seeds is not any more available.";
745 el.setMvaInput(gsfMVAInputMap.find(el.gsfTrack())->
second);
752 logElectrons(
electrons,
event,
"GsfElectronAlgo Info (before preselection)");
758 logElectrons(
electrons,
event,
"GsfElectronAlgo Info (after preselection)");
765 logElectrons(
electrons,
event,
"GsfElectronAlgo Info (after amb. solving)");
770 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
#define DEFINE_FWK_MODULE(type)
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_
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)
Abs< T >::type abs(const T &t)
std::vector< tensorflow::Session * > tfSessions_
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