30 #include <Math/Point3D.h> 43 sElectronMVAEstimator = std::make_unique<SoftElectronMVAEstimator>(sconfig);
47 iElectronMVAEstimator = std::make_unique<ElectronMVAEstimator>(iconfig);
52 const bool dnnEnabled = pset_dnn.
getParameter<
bool>(
"enabled");
54 dconfig.inputTensorName = pset_dnn.getParameter<
std::string>(
"inputTensorName");
55 dconfig.outputTensorName = pset_dnn.getParameter<
std::string>(
"outputTensorName");
56 dconfig.modelsFiles = pset_dnn.getParameter<std::vector<std::string>>(
"modelsFiles");
57 dconfig.scalersFiles = pset_dnn.getParameter<std::vector<std::string>>(
"scalersFiles");
58 dconfig.outputDim = pset_dnn.getParameter<std::vector<unsigned int>>(
"outputDim");
59 const auto useEBModelInGap = pset_dnn.getParameter<
bool>(
"useEBModelInGap");
60 iElectronDNNEstimator = std::make_unique<ElectronDNNEstimator>(dconfig,
useEBModelInGap);
99 bool originalCtfTrackCollectionRetreived =
false;
100 bool originalGsfTrackCollectionRetreived =
false;
127 void calculateMode();
147 if ((!originalCtfTrackCollectionRetreived) && (ctfTrack.
isNonnull())) {
148 event->get(ctfTrack.
id(), originalCtfTracks);
149 originalCtfTrackCollectionRetreived =
true;
151 if ((!originalGsfTrackCollectionRetreived) && (gsfTrack.
isNonnull())) {
152 event->get(gsfTrack.
id(), originalGsfTracks);
153 originalGsfTrackCollectionRetreived =
true;
159 gsfTrackRef(coreRef->gsfTrack()),
160 superClusterRef(coreRef->superCluster()),
161 ctfTrackRef(coreRef->ctfTrack()),
162 shFracInnerHits(coreRef->ctfGsfOverlap()),
175 info.scPixCharge = -1;
177 info.scPixCharge = 1;
180 int chargeGsf = gsfTrackRef->charge();
181 info.isGsfScPixConsistent = ((chargeGsf *
info.scPixCharge) > 0);
182 info.isGsfCtfConsistent = (ctfTrackRef.isNonnull() && ((chargeGsf * ctfTrackRef->charge()) > 0));
183 info.isGsfCtfScPixConsistent = (
info.isGsfScPixConsistent &&
info.isGsfCtfConsistent);
186 if (
info.isGsfScPixConsistent || ctfTrackRef.isNull()) {
189 charge = ctfTrackRef->charge();
197 float dphimin = 1.e30;
198 for (
auto const& bc : superClusterRef->clusters()) {
199 GlobalPoint posclu(bc->position().x(), bc->position().y(), bc->position().z());
201 if (!tempTSOS.isValid())
218 if (!innTSOS.isValid())
226 if (!vtxTSOS.isValid())
231 if (!outTSOS.isValid())
236 GlobalPoint(superClusterRef->seed()->position().x(),
237 superClusterRef->seed()->position().y(),
238 superClusterRef->seed()->position().z()));
239 if (!seedTSOS.isValid())
244 innTSOS,
GlobalPoint(superClusterRef->x(), superClusterRef->y(), superClusterRef->z()));
245 if (!sclTSOS.isValid())
271 double scale = superClusterRef->energy() / vtxMom.mag();
273 vtxMom.x() *
scale, vtxMom.y() *
scale, vtxMom.z() *
scale, superClusterRef->energy());
289 int nSaturatedXtals = 0;
290 bool isSeedSaturated =
false;
291 for (
auto&& hitFractionPair : theClus->hitsAndFractions()) {
295 if (
ecalRecHit->checkFlag(EcalRecHit::Flags::kSaturated)) {
298 isSeedSaturated =
true;
307 template <
bool full5x5>
324 std::vector<int> recHitFlagsToBeExcluded;
325 std::vector<int> recHitSeverityToBeExcluded;
336 const auto& covariances = ClusterTools::covariances(seedCluster,
recHits, &topology, &
geometry);
340 const auto& localCovariances = full5x5 ? ClusterTools::localCovariances(seedCluster,
347 : ClusterTools::localCovariances(seedCluster,
recHits, &topology);
354 showerShape.
e2x5Max = ClusterTools::e2x5Max(seedCluster,
recHits, &topology);
355 showerShape.
e5x5 = ClusterTools::e5x5(seedCluster,
recHits, &topology);
356 showerShape.
r9 = ClusterTools::e3x3(seedCluster,
recHits, &topology) / theClus->rawEnergy();
358 const float scale = full5x5 ? showerShape.
e5x5 : theClus->energy();
370 if (see_by_spp > 0) {
371 showerShape.
sigmaIetaIphi = localCovariances[1] / see_by_spp;
372 }
else if (localCovariances[1] > 0) {
378 showerShape.
e2nd = ClusterTools::e2nd(seedCluster,
recHits);
379 showerShape.
eTop = ClusterTools::eTop(seedCluster,
recHits, &topology);
380 showerShape.
eLeft = ClusterTools::eLeft(seedCluster,
recHits, &topology);
381 showerShape.
eRight = ClusterTools::eRight(seedCluster,
recHits, &topology);
382 showerShape.
eBottom = ClusterTools::eBottom(seedCluster,
recHits, &topology);
384 showerShape.
e2x5Left = ClusterTools::e2x5Left(seedCluster,
recHits, &topology);
385 showerShape.
e2x5Right = ClusterTools::e2x5Right(seedCluster,
recHits, &topology);
386 showerShape.
e2x5Top = ClusterTools::e2x5Top(seedCluster,
recHits, &topology);
387 showerShape.
e2x5Bottom = ClusterTools::e2x5Bottom(seedCluster,
recHits, &topology);
404 std::unique_ptr<EcalClusterFunctionBaseClass>&& crackCorrectionFunction,
412 tkIsol03CalcCfg_(tkIsol03),
413 tkIsol04CalcCfg_(tkIsol04),
414 tkIsolHEEP03CalcCfg_(tkIsolHEEP03),
415 tkIsolHEEP04CalcCfg_(tkIsolHEEP04),
416 magneticFieldToken_{
cc.esConsumes()},
417 caloGeometryToken_{
cc.esConsumes()},
418 caloTopologyToken_{
cc.esConsumes()},
419 trackerGeometryToken_{
cc.esConsumes()},
420 ecalSeveretyLevelAlgoToken_{
cc.esConsumes()},
421 ecalPFRechitThresholdsToken_{
cc.esConsumes()},
424 crackCorrectionFunction_{std::forward<std::unique_ptr<EcalClusterFunctionBaseClass>>(crackCorrectionFunction)},
425 regHelper_{reg, cfg_.strategy.useEcalRegression, cfg_.strategy.useCombinationRegression,
cc}
429 ecalisoAlgo_ = std::make_unique<ElectronEcalPFClusterIsolation>(pfiso.ecaldrMax,
430 pfiso.ecaldrVetoBarrel,
431 pfiso.ecaldrVetoEndcap,
432 pfiso.ecaletaStripBarrel,
433 pfiso.ecaletaStripEndcap,
434 pfiso.ecalenergyBarrel,
435 pfiso.ecalenergyEndcap);
436 hcalisoAlgo_ = std::make_unique<ElectronHcalPFClusterIsolation>(pfiso.hcaldrMax,
437 pfiso.hcaldrVetoBarrel,
438 pfiso.hcaldrVetoEndcap,
439 pfiso.hcaletaStripBarrel,
440 pfiso.hcaletaStripEndcap,
441 pfiso.hcalenergyBarrel,
442 pfiso.hcalenergyEndcap,
461 float egHcalIsoConeSizeOutSmall = 0.3, egHcalIsoConeSizeOutLarge = 0.4;
464 float egIsoConeSizeOutSmall = 0.3, egIsoConeSizeOutLarge = 0.4, egIsoJurassicWidth =
cfg_.
iso.
jurassicWidth;
474 std::vector<edm::Handle<reco::PFClusterCollection>> hcalPFClusters;
500 egHcalIsoConeSizeOutSmall,
523 egHcalIsoConeSizeOutLarge,
546 egHcalIsoConeSizeOutSmall,
569 egHcalIsoConeSizeOutLarge,
592 egIsoConeSizeInBarrel,
598 &ecalSeveretyLevelAlgo,
601 egIsoConeSizeInBarrel,
607 &ecalSeveretyLevelAlgo,
610 egIsoConeSizeInEndcap,
616 &ecalSeveretyLevelAlgo,
619 egIsoConeSizeInEndcap,
625 &ecalSeveretyLevelAlgo,
631 .originalCtfTracks = {},
632 .originalGsfTracks = {},
634 .ecalClustersHandle = ecalPFClusters,
635 .hcalClustersHandle = hcalPFClusters
641 eventData.ecalBarrelIsol03.doSeverityChecks(eventData.barrelRecHits.product(),
646 eventData.ecalBarrelIsol04.doSeverityChecks(eventData.barrelRecHits.product(),
651 eventData.ecalEndcapIsol03.doSeverityChecks(eventData.endcapRecHits.product(),
656 eventData.ecalEndcapIsol04.doSeverityChecks(eventData.endcapRecHits.product(),
680 auto eventData =
beginEvent(
event, caloGeometry, ecalSeveretyLevelAlgo);
686 std::optional<egamma::conv::TrackTable> ctfTrackTable = std::nullopt;
687 std::optional<egamma::conv::TrackTable> gsfTrackTable = std::nullopt;
690 for (
unsigned int i = 0;
i < coreCollection->size(); ++
i) {
695 if (coreRef->superCluster().
isNull())
699 ElectronData electronData(coreRef, *eventData.beamspot);
702 if (!electronData.
calculateTSOS(mtsTransform, constraintAtVtx))
705 eventData.retreiveOriginalTrackCollections(electronData.
ctfTrackRef, electronData.
coreRef->gsfTrack());
707 if (!eventData.originalCtfTracks.isValid()) {
708 eventData.originalCtfTracks = eventData.currentCtfTracks;
711 if (ctfTrackTable == std::nullopt) {
714 if (gsfTrackTable == std::nullopt) {
724 magneticFieldInTesla,
726 ctfTrackTable.value(),
727 gsfTrackTable.value(),
739 bool eg = ele.
core()->ecalDrivenSeed();
740 bool pf = ele.
core()->trackerDrivenSeed() && !ele.
core()->ecalDrivenSeed();
742 throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")
743 <<
"An electron cannot be both egamma and purely pflow";
745 if ((!eg) && (!
pf)) {
746 throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")
747 <<
"An electron cannot be neither egamma nor purely pflow";
754 double etValue = ele.
superCluster()->energy() / cosh(etaValue);
755 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue;
756 if (ele.
isEB() && (etValue <
cfg.minSCEtBarrel))
758 if (ele.
isEE() && (etValue <
cfg.minSCEtEndcaps))
760 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
764 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue;
765 if (ele.
isEB() && (eopValue >
cfg.maxEOverPBarrel))
767 if (ele.
isEE() && (eopValue >
cfg.maxEOverPEndcaps))
769 if (ele.
isEB() && (eopValue <
cfg.minEOverPBarrel))
771 if (ele.
isEE() && (eopValue <
cfg.minEOverPEndcaps))
773 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
781 bool HoEveto =
false;
785 HoEveto = hoeCone * scle <
cfg.maxHBarrelCone || hoeBc * scle <
cfg.maxHBarrelBc ||
786 hoeCone <
cfg.maxHOverEBarrelCone || hoeBc <
cfg.maxHOverEBarrelBc;
788 HoEveto = hoeCone * scle <
cfg.maxHEndcapsCone || hoeBc * scle <
cfg.maxHEndcapsBc ||
789 hoeCone <
cfg.maxHOverEEndcapsCone || hoeBc <
cfg.maxHOverEEndcapsBc;
793 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
797 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta;
802 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
806 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
811 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
819 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
822 if (!ele.
isEB() &&
cfg.isBarrel)
824 if (!ele.
isEE() &&
cfg.isEndcaps)
826 if (
cfg.isFiducial &&
829 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
836 throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed") <<
"The GsfTrack seed is not an ElectronSeed ?!";
838 if (elseed->subDet(1) == 6)
846 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied";
848 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied";
858 double magneticFieldInTesla,
944 fiducialFlags.
isEB =
true;
957 fiducialFlags.
isEE =
true;
970 fiducialFlags.
isEE =
true;
975 <<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!";
991 showerShape = calculateShowerShape<false>(
993 full5x5_showerShape = calculateShowerShape<true>(
1015 <<
"ProductID of ctf track collection does not match ProductID of electron's CTF track! \n";
1018 <<
"ProductID of gsf track collection does not match ProductID of electron's GSF track! \n";
1030 conversionVars.
flags = conversionInfo.flag;
1031 conversionVars.
dist = conversionInfo.dist;
1032 conversionVars.
dcot = conversionInfo.dcot;
1033 conversionVars.
radius = conversionInfo.radiusOfConversion;
1044 if (conversionInfo.conversionPartnerCtfTkIdx) {
1046 }
else if (conversionInfo.conversionPartnerGsfTkIdx) {
1063 full5x5_showerShape,
1069 ele.setP4(GsfElectron::P4_FROM_SUPER_CLUSTER, momentum, 0,
true);
1085 if (sc->clustersSize() > 1) {
1086 float pf_fbrem = (sc->energy() -
cl->energy()) / sc->energy();
1087 ele.setSuperClusterFbrem(pf_fbrem);
1089 ele.setSuperClusterFbrem(0);
1098 ele.setClassification(elClass);
1101 if (unexpectedClassification) {
1112 if (ele.core()->ecalDrivenSeed()) {
1114 if (ele.isEcalEnergyCorrected()) {
1115 edm::LogWarning(
"ElectronEnergyCorrector::classBasedElectronEnergy") <<
"already done";
1117 ele.setCorrectedEcalEnergy(
1136 edm::LogWarning(
"ElectronMomentumCorrector::correct") <<
"already done";
1139 ele.correctMomentum(
p.momentum,
p.trackError,
p.finalError);
1175 ele.setIsolation03(dr03);
1176 ele.setIsolation04(dr04);
1187 ele.setPfIsolationVariables(isoVariables);
1207 LogTrace(
"GsfElectronAlgo") <<
"Constructed new electron with energy " << ele.p4().e();
1220 if (
seed.isNull()) {
1224 sd1 = elseed->subDet(0);
1225 sd2 = elseed->subDet(1);
1226 dPhi1 = (ele.
charge() > 0) ? elseed->dPhiPos(0) : elseed->dPhiNeg(0);
1227 dPhi2 = (ele.
charge() > 0) ? elseed->dPhiPos(1) : elseed->dPhiNeg(1);
1228 dRz1 = (ele.
charge() > 0) ? elseed->dRZPos(0) : elseed->dRZNeg(0);
1229 dRz2 = (ele.
charge() > 0) ? elseed->dRZPos(1) : elseed->dRZNeg(1);
reco::GsfElectronCollection completeElectrons(edm::Event const &event, edm::EventSetup const &eventSetup, const HeavyObjectCache *hoc)
edm::EDGetTokenT< HBHERecHitCollection > hbheRecHitsTag
EleTkIsolFromCands tkIsol03Calc
const math::XYZPoint & position() const
cluster centroid position
EleTkIsolFromCands tkIsol04Calc
edm::Handle< reco::TrackCollection > originalCtfTracks
EgammaRecHitIsolation ecalEndcapIsol04
EgammaRecHitIsolation ecalBarrelIsol03
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
edm::Handle< reco::ElectronSeedCollection > seeds
EgammaHcalIsolation hadIsolation04Bc
std::array< float, 7 > hcalRecHitSumEt
void applyCombinationRegression(reco::GsfElectron &ele) const
T getParameter(std::string const &) const
static bool isNextToEtaBoundary(EBDetId id)
EgammaRecHitIsolation ecalEndcapIsol03
void setPassCutBasedPreselection(bool flag)
double classBasedElectronEnergyUncertainty(reco::GsfElectron const &)
int ietaAbs() const
get the absolute value of the crystal ieta
double intRadiusEcalEndcaps
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
std::vector< int > recHitSeverityToBeExcludedEndcaps
void setPixelMatchDRz2(float dRz2)
ProductID id() const
Accessor for product ID.
static constexpr float kRelEnCut
edm::EDGetTokenT< reco::ConversionCollection > conversions
void setCutBasedPreselectionFlag(reco::GsfElectron &ele, const reco::BeamSpot &) const
const Point & position() const
position
void retreiveOriginalTrackCollections(const reco::TrackRef &, const reco::GsfTrackRef &)
void setPixelMatchDPhi1(float dPhi1)
bool hasActiveHcal(const reco::SuperCluster &sc) const
const auto towerMap() const
bool ecalDrivenEcalErrorFromClassBasedParameterization
constexpr bool isNotFinite(T x)
uint32_t cc[maxCellsPerHit]
double intRadiusEcalBarrel
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFEM
constexpr T normalizedPhi(T phi)
reco::GsfElectron::ShowerShape calculateShowerShape(const reco::SuperClusterRef &, ElectronHcalHelper const &hcalHelperCone, ElectronHcalHelper const &hcalHelperBc, EventData const &eventData, CaloTopology const &topology, CaloGeometry const &geometry, EcalPFRecHitThresholds const &thresholds) const
DetId seed() const
return DetId of seed
std::array< float, 7 > hcalRecHitSumEtBc
float sigmaIetaIeta() const
bool useCombinationRegression
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHCAL
TrajectoryStateOnSurface sclTSOS
Global3DPoint GlobalPoint
edm::Handle< EcalRecHitCollection > endcapRecHits
EgammaHcalIsolation hadIsolation03
ConversionInfo findConversion(const reco::GsfElectronCore &gsfElectron, TrackTableView ctfTable, TrackTableView gsfTable, float bFieldAtOrigin, float minFracSharedHits=0.45f)
bool isNonnull() const
Checks for non-null.
GsfElectronAlgo(const Tokens &, const StrategyConfiguration &, const CutsConfiguration &cutsCfg, const ElectronHcalHelper::Configuration &hcalCone, const ElectronHcalHelper::Configuration &hcalBc, const IsolationConfiguration &, const PFClusterIsolationConfiguration &, const EcalRecHitsConfiguration &, std::unique_ptr< EcalClusterFunctionBaseClass > &&crackCorrectionFunction, const RegressionHelper::Configuration ®Cfg, const edm::ParameterSet &tkIsol03Cfg, const edm::ParameterSet &tkIsol04Cfg, const edm::ParameterSet &tkIsolHEEP03Cfg, const edm::ParameterSet &tkIsolHEEP04Cfg, edm::ConsumesCollector &&cc)
float deltaEtaSuperClusterAtVtx
std::vector< std::string > vweightsfiles
edm::EDGetTokenT< reco::VertexCollection > vtxCollectionTag
float hcalOverEcalBc(const ShowerShape &ss, int depth) const
float deltaPhiSuperClusterAtVtx
void computeCharge(int &charge, reco::GsfElectron::ChargeInfo &info)
edm::EDGetTokenT< EcalRecHitCollection > endcapRecHitCollection
TrajectoryStateOnSurface innTSOS
constexpr Detector det() const
get the detector field from this detid
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFHAD
void setPixelMatchSubdetectors(int sd1, int sd2)
float eSuperClusterOverP() const
static std::string const input
edm::EDGetTokenT< reco::GsfElectronCoreCollection > gsfElectronCores
EgammaHcalIsolation hadIsolation03Bc
RegressionHelper regHelper_
CaloClusterPtr electronCluster
TrajectoryStateOnSurface constrainedVtxTSOS
double hcalESum(const reco::SuperCluster &, int depth) const
void createElectron(reco::GsfElectronCollection &electrons, ElectronData &electronData, EventData &eventData, CaloTopology const &topology, CaloGeometry const &geometry, MultiTrajectoryStateTransform const &mtsTransform, double magneticFieldInTesla, const HeavyObjectCache *, egamma::conv::TrackTableView ctfTable, egamma::conv::TrackTableView gsfTable, EcalPFRecHitThresholds const &thresholds)
double simpleElectronEnergyUncertainty(reco::GsfElectron const &)
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
std::array< float, 7 > hcalOverEcal
const edm::ESGetToken< EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd > ecalPFRechitThresholdsToken_
std::vector< int > recHitSeverityToBeExcludedBarrel
float eSeedClusterOverPout
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
const edm::ESGetToken< EcalSeverityLevelAlgo, EcalSeverityLevelAlgoRcd > ecalSeveretyLevelAlgoToken_
edm::soa::ViewFromTable_t< TrackTable > TrackTableView
void checkSetup(edm::EventSetup const &eventSetup)
bool positionFromModeCartesian(TrajectoryStateOnSurface const &tsos, GlobalPoint &position)
void beginEvent(const edm::Event &evt, const edm::EventSetup &eventSetup)
edm::Handle< reco::PFClusterCollection > ecalClustersHandle
static bool isNextToPhiBoundary(EBDetId id)
edm::Handle< EcalRecHitCollection > barrelRecHits
std::vector< GsfElectronCore > GsfElectronCoreCollection
double getEtSum(const reco::Candidate *emObject) const
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag
bool pureTrackerDrivenEcalErrorFromSimpleParameterization
const EleTkIsolFromCands::Configuration tkIsol03CalcCfg_
Abs< T >::type abs(const T &t)
HeavyObjectCache(const edm::ParameterSet &)
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
std::vector< CaloTowerDetId > hcalTowersBehindClusters
float deltaEtaSeedClusterAtCalo
std::unique_ptr< EcalClusterFunctionBaseClass > crackCorrectionFunction_
const IsolationConfiguration iso
static bool isNextToRingBoundary(EEDetId id)
edm::EDGetTokenT< reco::TrackCollection > ctfTracks
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
double getHcalEtSum(const reco::Candidate *c, int depth) const
edm::EDGetTokenT< reco::ElectronSeedCollection > seedsTag
const reco::BeamSpot * beamspot
int maxSeverityHB() const
float classBasedElectronEnergy(reco::GsfElectron const &, reco::BeamSpot const &, EcalClusterFunctionBaseClass const &crackCorrectionFunction)
edm::Handle< reco::ConversionCollection > conversions
static bool isNextToDBoundary(EEDetId id)
bool isNull() const
Checks for null.
std::vector< edm::Handle< reco::PFClusterCollection > > hcalClustersHandle
float hcalOverEcal(const ShowerShape &ss, int depth) const
EleTkIsolFromCands tkIsolHEEP04Calc
std::vector< int > recHitFlagsToBeExcludedBarrel
int maxSeverityHE() const
virtual GsfElectronCoreRef core() const
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
float deltaPhiSuperClusterTrackAtVtx() const
reco::GsfElectron::SaturationInfo calculateSaturationInfo(const reco::SuperClusterRef &, EventData const &eventData) const
const_iterator end() const
double energy() const
cluster energy
bool calculateTSOS(MultiTrajectoryStateTransform const &, GsfConstraintAtVertex const &)
const EleTkIsolFromCands::Configuration tkIsolHEEP04CalcCfg_
void setPixelMatchDPhi2(float dPhi2)
reco::CaloClusterPtr getEleBasicCluster(MultiTrajectoryStateTransform const &)
edm::Handle< reco::VertexCollection > vertices
double getHcalEtSumBc(const reco::Candidate *c, int depth) const
reco::TrackRef ctfTrackRef
EgammaRecHitIsolation ecalBarrelIsol04
const PFClusterIsolationConfiguration pfiso
float deltaEtaSuperClusterTrackAtVtx() const
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducer
std::vector< int > recHitFlagsToBeExcludedEndcaps
ElectronMomentum correctElectronMomentum(reco::GsfElectron const &, TrajectoryStateOnSurface const &)
float ecalClusterEnergyUncertaintyElectronSpecific(reco::SuperCluster const &superCluster)
const reco::GsfTrackRef gsfTrackRef
void setPixelMatchInfomation(reco::GsfElectron &) const
bool ecalDrivenEcalEnergyFromClassBasedParameterization
void ele_convert(const Type1 &obj1, Type2 &obj2)
void applyEcalRegression(reco::GsfElectron &electron, const reco::VertexCollection &vertices, const EcalRecHitCollection &rechitsEB, const EcalRecHitCollection &rechitsEE) const
auto hcalTowersBehindClusters(const reco::SuperCluster &sc) const
math::XYZTLorentzVector LorentzVector
Lorentz vector.
std::array< float, 7 > hcalOverEcalBc
const StrategyConfiguration strategy
float deltaEtaEleClusterAtCalo
edm::soa::AddColumns< edm::soa::PtEtaPhiTable, TrackTableSpecificColumns >::type TrackTable
std::vector< std::string > vweightsfiles
bool useDefaultEnergyCorrection
TrajectoryStateOnSurface seedTSOS
EgammaHcalIsolation hadIsolation04
iterator find(key_type k)
edm::Handle< reco::GsfTrackCollection > originalGsfTracks
TrajectoryStateOnSurface constrainAtBeamSpot(const reco::GsfTrack &, const reco::BeamSpot &) const
(multi)TSOS after including the beamspot
const CutsConfiguration cuts
float eEleClusterOverPout
const EcalRecHitsConfiguration recHits
ElectronHcalHelper hcalHelperCone_
const reco::GsfElectronCoreRef coreRef
ElectronHcalHelper hcalHelperBc_
float deltaPhiEleClusterAtCalo
edm::Handle< reco::TrackCollection > currentCtfTracks
std::unique_ptr< ElectronHcalPFClusterIsolation > hcalisoAlgo_
std::unique_ptr< ElectronEcalPFClusterIsolation > ecalisoAlgo_
const auto hcalTopology() const
edm::EDGetTokenT< EcalRecHitCollection > barrelRecHitCollection
const reco::SuperClusterRef superClusterRef
TrajectoryStateOnSurface eleTSOS
float deltaPhiSeedClusterAtCalo
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
TrajectoryStateOnSurface outTSOS
ElectronData(const reco::GsfElectronCoreRef &core, const reco::BeamSpot &bs)
Log< level::Warning, false > LogWarning
bool momentumFromModeCartesian(TrajectoryStateOnSurface const &tsos, GlobalVector &momentum)
const auto hcalChannelQuality() const
std::array< double, 4 > arrayHB
EventData beginEvent(edm::Event const &event, CaloGeometry const &caloGeometry, EcalSeverityLevelAlgo const &ecalSeveretyLevelAlgo)
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
GlobalVector vtxMomWithConstraint
const EleTkIsolFromCands::Configuration tkIsolHEEP03CalcCfg_
const edm::ESGetToken< CaloTopology, CaloTopologyRecord > caloTopologyToken_
reco::GsfElectron::Classification classifyElectron(reco::GsfElectron const &)
void checkSetup(const edm::EventSetup &)
void setPixelMatchDRz1(float dRz1)
SuperClusterRef superCluster() const override
reference to a SuperCluster
const EleTkIsolFromCands::Configuration tkIsol04CalcCfg_
math::PtEtaPhiELorentzVectorF LorentzVector
int charge() const final
electric charge
Global3DVector GlobalVector
const auto hcalSevLvlComputer() const
TrajectoryStateOnSurface vtxTSOS
EleTkIsolFromCands tkIsolHEEP03Calc
reco::Candidate::LorentzVector calculateMomentum()
const reco::BeamSpot beamSpot
std::array< double, 7 > arrayHE