33 #include <Math/Point3D.h> 46 sElectronMVAEstimator = std::make_unique<SoftElectronMVAEstimator>(sconfig);
50 iElectronMVAEstimator = std::make_unique<ElectronMVAEstimator>(iconfig);
55 const bool dnnEnabled = pset_dnn.
getParameter<
bool>(
"enabled");
57 dconfig.inputTensorName = pset_dnn.getParameter<
std::string>(
"inputTensorName");
58 dconfig.outputTensorName = pset_dnn.getParameter<
std::string>(
"outputTensorName");
59 dconfig.modelsFiles = pset_dnn.getParameter<std::vector<std::string>>(
"modelsFiles");
60 dconfig.scalersFiles = pset_dnn.getParameter<std::vector<std::string>>(
"scalersFiles");
61 dconfig.outputDim = pset_dnn.getParameter<std::vector<unsigned int>>(
"outputDim");
62 const auto useEBModelInGap = pset_dnn.getParameter<
bool>(
"useEBModelInGap");
63 iElectronDNNEstimator = std::make_unique<ElectronDNNEstimator>(dconfig,
useEBModelInGap);
102 bool originalCtfTrackCollectionRetreived =
false;
103 bool originalGsfTrackCollectionRetreived =
false;
130 void calculateMode();
150 if ((!originalCtfTrackCollectionRetreived) && (ctfTrack.
isNonnull())) {
151 event->get(ctfTrack.
id(), originalCtfTracks);
152 originalCtfTrackCollectionRetreived =
true;
154 if ((!originalGsfTrackCollectionRetreived) && (gsfTrack.
isNonnull())) {
155 event->get(gsfTrack.
id(), originalGsfTracks);
156 originalGsfTrackCollectionRetreived =
true;
162 gsfTrackRef(coreRef->gsfTrack()),
163 superClusterRef(coreRef->superCluster()),
164 ctfTrackRef(coreRef->ctfTrack()),
165 shFracInnerHits(coreRef->ctfGsfOverlap()),
178 info.scPixCharge = -1;
180 info.scPixCharge = 1;
183 int chargeGsf = gsfTrackRef->charge();
184 info.isGsfScPixConsistent = ((chargeGsf *
info.scPixCharge) > 0);
185 info.isGsfCtfConsistent = (ctfTrackRef.isNonnull() && ((chargeGsf * ctfTrackRef->charge()) > 0));
186 info.isGsfCtfScPixConsistent = (
info.isGsfScPixConsistent &&
info.isGsfCtfConsistent);
189 if (
info.isGsfScPixConsistent || ctfTrackRef.isNull()) {
192 charge = ctfTrackRef->charge();
200 float dphimin = 1.e30;
201 for (
auto const& bc : superClusterRef->clusters()) {
202 GlobalPoint posclu(bc->position().x(), bc->position().y(), bc->position().z());
204 if (!tempTSOS.isValid())
221 if (!innTSOS.isValid())
229 if (!vtxTSOS.isValid())
234 if (!outTSOS.isValid())
239 GlobalPoint(superClusterRef->seed()->position().x(),
240 superClusterRef->seed()->position().y(),
241 superClusterRef->seed()->position().z()));
242 if (!seedTSOS.isValid())
247 innTSOS,
GlobalPoint(superClusterRef->x(), superClusterRef->y(), superClusterRef->z()));
248 if (!sclTSOS.isValid())
274 double scale = superClusterRef->energy() / vtxMom.mag();
276 vtxMom.x() *
scale, vtxMom.y() *
scale, vtxMom.z() *
scale, superClusterRef->energy());
292 int nSaturatedXtals = 0;
293 bool isSeedSaturated =
false;
294 for (
auto&& hitFractionPair : theClus->hitsAndFractions()) {
298 if (
ecalRecHit->checkFlag(EcalRecHit::Flags::kSaturated)) {
301 isSeedSaturated =
true;
310 template <
bool full5x5>
328 std::vector<int> recHitFlagsToBeExcluded;
329 std::vector<int> recHitSeverityToBeExcluded;
344 const auto& localCovariances = full5x5 ? ClusterTools::localCovariances(seedCluster,
360 showerShape.
r9 = ClusterTools::e3x3(seedCluster,
recHits, &
topology) / theClus->rawEnergy();
362 const float scale = full5x5 ? showerShape.
e5x5 : theClus->energy();
374 if (see_by_spp > 0) {
375 showerShape.
sigmaIetaIphi = localCovariances[1] / see_by_spp;
376 }
else if (localCovariances[1] > 0) {
382 showerShape.
e2nd = ClusterTools::e2nd(seedCluster,
recHits);
408 std::unique_ptr<EcalClusterFunctionBaseClass>&& crackCorrectionFunction,
416 tkIsol03CalcCfg_(tkIsol03),
417 tkIsol04CalcCfg_(tkIsol04),
418 tkIsolHEEP03CalcCfg_(tkIsolHEEP03),
419 tkIsolHEEP04CalcCfg_(tkIsolHEEP04),
420 magneticFieldToken_{
cc.esConsumes()},
421 caloGeometryToken_{
cc.esConsumes()},
422 caloTopologyToken_{
cc.esConsumes()},
423 trackerGeometryToken_{
cc.esConsumes()},
424 ecalSeveretyLevelAlgoToken_{
cc.esConsumes()},
425 ecalPFRechitThresholdsToken_{
cc.esConsumes()},
428 crackCorrectionFunction_{std::forward<std::unique_ptr<EcalClusterFunctionBaseClass>>(crackCorrectionFunction)},
429 regHelper_{reg, cfg_.strategy.useEcalRegression, cfg_.strategy.useCombinationRegression,
cc}
433 ecalisoAlgo_ = std::make_unique<ElectronEcalPFClusterIsolation>(pfiso.ecaldrMax,
434 pfiso.ecaldrVetoBarrel,
435 pfiso.ecaldrVetoEndcap,
436 pfiso.ecaletaStripBarrel,
437 pfiso.ecaletaStripEndcap,
438 pfiso.ecalenergyBarrel,
439 pfiso.ecalenergyEndcap);
440 hcalisoAlgo_ = std::make_unique<ElectronHcalPFClusterIsolation>(pfiso.hcaldrMax,
441 pfiso.hcaldrVetoBarrel,
442 pfiso.hcaldrVetoEndcap,
443 pfiso.hcaletaStripBarrel,
444 pfiso.hcaletaStripEndcap,
445 pfiso.hcalenergyBarrel,
446 pfiso.hcalenergyEndcap,
465 float egHcalIsoConeSizeOutSmall = 0.3, egHcalIsoConeSizeOutLarge = 0.4;
468 float egIsoConeSizeOutSmall = 0.3, egIsoConeSizeOutLarge = 0.4, egIsoJurassicWidth =
cfg_.
iso.
jurassicWidth;
478 std::vector<edm::Handle<reco::PFClusterCollection>> hcalPFClusters;
504 egHcalIsoConeSizeOutSmall,
527 egHcalIsoConeSizeOutLarge,
550 egHcalIsoConeSizeOutSmall,
573 egHcalIsoConeSizeOutLarge,
596 egIsoConeSizeInBarrel,
602 &ecalSeveretyLevelAlgo,
605 egIsoConeSizeInBarrel,
611 &ecalSeveretyLevelAlgo,
614 egIsoConeSizeInEndcap,
620 &ecalSeveretyLevelAlgo,
623 egIsoConeSizeInEndcap,
629 &ecalSeveretyLevelAlgo,
635 .originalCtfTracks = {},
636 .originalGsfTracks = {},
638 .ecalClustersHandle = ecalPFClusters,
639 .hcalClustersHandle = hcalPFClusters
645 eventData.ecalBarrelIsol03.doSeverityChecks(eventData.barrelRecHits.product(),
650 eventData.ecalBarrelIsol04.doSeverityChecks(eventData.barrelRecHits.product(),
655 eventData.ecalEndcapIsol03.doSeverityChecks(eventData.endcapRecHits.product(),
660 eventData.ecalEndcapIsol04.doSeverityChecks(eventData.endcapRecHits.product(),
685 auto eventData =
beginEvent(
event, caloGeometry, ecalSeveretyLevelAlgo);
691 std::optional<egamma::conv::TrackTable> ctfTrackTable = std::nullopt;
692 std::optional<egamma::conv::TrackTable> gsfTrackTable = std::nullopt;
695 for (
unsigned int i = 0;
i < coreCollection->size(); ++
i) {
700 if (coreRef->superCluster().
isNull())
704 ElectronData electronData(coreRef, *eventData.beamspot);
707 if (!electronData.
calculateTSOS(mtsTransform, constraintAtVtx))
710 eventData.retreiveOriginalTrackCollections(electronData.
ctfTrackRef, electronData.
coreRef->gsfTrack());
712 if (!eventData.originalCtfTracks.isValid()) {
713 eventData.originalCtfTracks = eventData.currentCtfTracks;
716 if (ctfTrackTable == std::nullopt) {
719 if (gsfTrackTable == std::nullopt) {
729 magneticFieldInTesla,
731 ctfTrackTable.value(),
732 gsfTrackTable.value(),
745 bool eg = ele.
core()->ecalDrivenSeed();
746 bool pf = ele.
core()->trackerDrivenSeed() && !ele.
core()->ecalDrivenSeed();
748 throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")
749 <<
"An electron cannot be both egamma and purely pflow";
751 if ((!eg) && (!
pf)) {
752 throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")
753 <<
"An electron cannot be neither egamma nor purely pflow";
760 double etValue = ele.
superCluster()->energy() / cosh(etaValue);
761 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue;
762 if (ele.
isEB() && (etValue <
cfg.minSCEtBarrel))
764 if (ele.
isEE() && (etValue <
cfg.minSCEtEndcaps))
766 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
770 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue;
771 if (ele.
isEB() && (eopValue >
cfg.maxEOverPBarrel))
773 if (ele.
isEE() && (eopValue >
cfg.maxEOverPEndcaps))
775 if (ele.
isEB() && (eopValue <
cfg.minEOverPBarrel))
777 if (ele.
isEE() && (eopValue <
cfg.minEOverPEndcaps))
779 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
787 bool HoEveto =
false;
791 HoEveto = hoeCone * scle <
cfg.maxHBarrelCone || hoeBc * scle <
cfg.maxHBarrelBc ||
792 hoeCone <
cfg.maxHOverEBarrelCone || hoeBc <
cfg.maxHOverEBarrelBc;
794 HoEveto = hoeCone * scle <
cfg.maxHEndcapsCone || hoeBc * scle <
cfg.maxHEndcapsBc ||
795 hoeCone <
cfg.maxHOverEEndcapsCone || hoeBc <
cfg.maxHOverEEndcapsBc;
799 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
803 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta;
808 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
812 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
817 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
825 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
828 if (!ele.
isEB() &&
cfg.isBarrel)
830 if (!ele.
isEE() &&
cfg.isEndcaps)
832 if (
cfg.isFiducial &&
835 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
842 throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed") <<
"The GsfTrack seed is not an ElectronSeed ?!";
844 if (elseed->subDet(1) == 6)
852 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied";
854 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied";
864 double magneticFieldInTesla,
951 fiducialFlags.
isEB =
true;
964 fiducialFlags.
isEE =
true;
977 fiducialFlags.
isEE =
true;
982 <<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!";
998 showerShape = calculateShowerShape<false>(electronData.
superClusterRef,
1006 full5x5_showerShape = calculateShowerShape<true>(electronData.
superClusterRef,
1034 <<
"ProductID of ctf track collection does not match ProductID of electron's CTF track! \n";
1037 <<
"ProductID of gsf track collection does not match ProductID of electron's GSF track! \n";
1049 conversionVars.
flags = conversionInfo.flag;
1050 conversionVars.
dist = conversionInfo.dist;
1051 conversionVars.
dcot = conversionInfo.dcot;
1052 conversionVars.
radius = conversionInfo.radiusOfConversion;
1063 if (conversionInfo.conversionPartnerCtfTkIdx) {
1065 }
else if (conversionInfo.conversionPartnerGsfTkIdx) {
1082 full5x5_showerShape,
1088 ele.setP4(GsfElectron::P4_FROM_SUPER_CLUSTER, momentum, 0,
true);
1104 if (sc->clustersSize() > 1) {
1105 float pf_fbrem = (sc->energy() -
cl->energy()) / sc->energy();
1106 ele.setSuperClusterFbrem(pf_fbrem);
1108 ele.setSuperClusterFbrem(0);
1117 ele.setClassification(elClass);
1120 if (unexpectedClassification) {
1131 if (ele.core()->ecalDrivenSeed()) {
1133 if (ele.isEcalEnergyCorrected()) {
1134 edm::LogWarning(
"ElectronEnergyCorrector::classBasedElectronEnergy") <<
"already done";
1136 ele.setCorrectedEcalEnergy(
1155 edm::LogWarning(
"ElectronMomentumCorrector::correct") <<
"already done";
1158 ele.correctMomentum(
p.momentum,
p.trackError,
p.finalError);
1194 ele.setIsolation03(dr03);
1195 ele.setIsolation04(dr04);
1206 ele.setPfIsolationVariables(isoVariables);
1226 LogTrace(
"GsfElectronAlgo") <<
"Constructed new electron with energy " << ele.p4().e();
1239 if (
seed.isNull()) {
1243 sd1 = elseed->subDet(0);
1244 sd2 = elseed->subDet(1);
1245 dPhi1 = (ele.
charge() > 0) ? elseed->dPhiPos(0) : elseed->dPhiNeg(0);
1246 dPhi2 = (ele.
charge() > 0) ? elseed->dPhiPos(1) : elseed->dPhiNeg(1);
1247 dRz1 = (ele.
charge() > 0) ? elseed->dRZPos(0) : elseed->dRZNeg(0);
1248 dRz2 = (ele.
charge() > 0) ? elseed->dRZPos(1) : elseed->dRZNeg(1);
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
EgammaHcalIsolation::arrayHB eThresHB() const
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)
DetId seed() const
return DetId of seed
std::array< float, 7 > hcalRecHitSumEtBc
float sigmaIetaIeta() const
bool useCombinationRegression
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, const HcalPFCuts *hcalCuts)
EgammaHcalIsolation::arrayHE eThresHE() const
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
reco::GsfElectronCollection completeElectrons(edm::Event const &event, edm::EventSetup const &eventSetup, const HeavyObjectCache *hoc, const HcalPFCuts *hcalCuts)
double getHcalEtSumBc(const reco::Candidate *c, int depth, const HcalPFCuts *hcalCuts) const
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
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) ...
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 HcalPFCuts *hcalCuts) 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
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
double getHcalEtSum(const reco::Candidate *c, int depth, const HcalPFCuts *hcalCuts) const
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)
double getEtSum(const reco::Candidate *emObject, EcalPFRecHitThresholds const &thresholds) const
Log< level::Warning, false > LogWarning
bool momentumFromModeCartesian(TrajectoryStateOnSurface const &tsos, GlobalVector &momentum)
const auto hcalChannelQuality() const
double hcalESum(const reco::SuperCluster &, int depth, const HcalPFCuts *hcalCuts) 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