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<
uint>(
"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()),
180 int chargeGsf = gsfTrackRef->charge();
182 info.
isGsfCtfConsistent = (ctfTrackRef.isNonnull() && ((chargeGsf * ctfTrackRef->charge()) > 0));
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());
282 int detector = seedXtalId.
subdetId();
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>
321 int detector = seedXtalId.
subdetId();
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);
353 showerShape.
e1x5 = ClusterTools::e1x5(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) {
377 showerShape.
eMax = ClusterTools::eMax(seedCluster, recHits);
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()},
420 ecalSeveretyLevelAlgoToken_{cc.esConsumes()},
421 ecalPFRechitThresholdsToken_{cc.esConsumes()},
422 hcalHelperCone_{hcalCone,
std::move(cc)},
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;
492 .currentCtfTracks = ctfTracks,
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;
760 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
764 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue;
773 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
781 bool HoEveto =
false;
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";
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,
899 (electronData.
eleMom.
mag() > 0.) ? (elbcRef->energy() / electronData.
eleMom.
mag()) : (-1.);
941 int detector = seedXtalId.
subdetId();
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>(
1013 if (el_ctftrack.
isNonnull() && el_ctftrack.
id() != ctfTracks.
id())
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) {
1055 electrons.emplace_back(eleCharge,
1063 full5x5_showerShape,
1066 auto& ele = electrons.back();
1069 ele.setP4(GsfElectron::P4_FROM_SUPER_CLUSTER, momentum, 0,
true);
1084 if (sc->clustersSize() > 1) {
1085 float pf_fbrem = (sc->energy() - cl->energy()) / sc->energy();
1086 ele.setSuperClusterFbrem(pf_fbrem);
1088 ele.setSuperClusterFbrem(0);
1097 ele.setClassification(elClass);
1100 if (unexpectedClassification) {
1111 if (ele.core()->ecalDrivenSeed()) {
1113 if (ele.isEcalEnergyCorrected()) {
1114 edm::LogWarning(
"ElectronEnergyCorrector::classBasedElectronEnergy") <<
"already done";
1116 ele.setCorrectedEcalEnergy(
1135 edm::LogWarning(
"ElectronMomentumCorrector::correct") <<
"already done";
1138 ele.correctMomentum(
p.momentum,
p.trackError,
p.finalError);
1174 ele.setIsolation03(dr03);
1175 ele.setIsolation04(dr04);
1186 ele.setPfIsolationVariables(isoVariables);
1206 LogTrace(
"GsfElectronAlgo") <<
"Constructed new electron with energy " << ele.p4().e();
1223 sd1 = elseed->subDet(0);
1224 sd2 = elseed->subDet(1);
1225 dPhi1 = (ele.
charge() > 0) ? elseed->dPhiPos(0) : elseed->dPhiNeg(0);
1226 dPhi2 = (ele.
charge() > 0) ? elseed->dPhiPos(1) : elseed->dPhiNeg(1);
1227 dRz1 = (ele.
charge() > 0) ? elseed->dRZPos(0) : elseed->dRZNeg(0);
1228 dRz2 = (ele.
charge() > 0) ? elseed->dRZPos(1) : elseed->dRZNeg(1);
TrajectoryStateOnSurface constrainAtBeamSpot(const reco::GsfTrack &, const reco::BeamSpot &) const
(multi)TSOS after including the beamspot
reco::GsfElectronCollection completeElectrons(edm::Event const &event, edm::EventSetup const &eventSetup, const HeavyObjectCache *hoc)
edm::EDGetTokenT< HBHERecHitCollection > hbheRecHitsTag
EleTkIsolFromCands tkIsol03Calc
EleTkIsolFromCands tkIsol04Calc
edm::Handle< reco::TrackCollection > originalCtfTracks
EgammaRecHitIsolation ecalEndcapIsol04
EgammaRecHitIsolation ecalBarrelIsol03
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
edm::Handle< reco::ElectronSeedCollection > seeds
EgammaHcalIsolation hadIsolation04Bc
const math::XYZPoint & position() const
cluster centroid position
void applyCombinationRegression(reco::GsfElectron &ele) const
std::array< float, 7 > hcalRecHitSumEt
void setCutBasedPreselectionFlag(reco::GsfElectron &ele, const reco::BeamSpot &) const
static bool isNextToEtaBoundary(EBDetId id)
EgammaRecHitIsolation ecalEndcapIsol03
void setPassCutBasedPreselection(bool flag)
double classBasedElectronEnergyUncertainty(reco::GsfElectron const &)
bool isNonnull() const
Checks for non-null.
double intRadiusEcalEndcaps
std::vector< int > recHitSeverityToBeExcludedEndcaps
void setPixelMatchDRz2(float dRz2)
double hcalESum(const reco::SuperCluster &, int depth) const
static constexpr float kRelEnCut
edm::EDGetTokenT< reco::ConversionCollection > conversions
uint16_t *__restrict__ id
float eSuperClusterOverP() const
void retreiveOriginalTrackCollections(const reco::TrackRef &, const reco::GsfTrackRef &)
void setPixelMatchDPhi1(float dPhi1)
int maxSeverityHB() const
bool ecalDrivenEcalErrorFromClassBasedParameterization
constexpr bool isNotFinite(T x)
double getEtSum(const reco::Candidate *emObject) const
double intRadiusEcalBarrel
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFEM
constexpr T normalizedPhi(T phi)
std::array< float, 7 > hcalRecHitSumEtBc
bool useCombinationRegression
double maxSigmaIetaIetaEndcaps
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHCAL
TrajectoryStateOnSurface sclTSOS
Global3DPoint GlobalPoint
double maxHOverEEndcapsBc
edm::Handle< EcalRecHitCollection > endcapRecHits
void setPixelMatchInfomation(reco::GsfElectron &) const
EgammaHcalIsolation hadIsolation03
ConversionInfo findConversion(const reco::GsfElectronCore &gsfElectron, TrackTableView ctfTable, TrackTableView gsfTable, float bFieldAtOrigin, float minFracSharedHits=0.45f)
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)
double maxDeltaEtaEndcaps
float deltaEtaSuperClusterAtVtx
std::vector< std::string > vweightsfiles
edm::EDGetTokenT< reco::VertexCollection > vtxCollectionTag
float deltaPhiSuperClusterAtVtx
void computeCharge(int &charge, reco::GsfElectron::ChargeInfo &info)
edm::EDGetTokenT< EcalRecHitCollection > endcapRecHitCollection
TrajectoryStateOnSurface innTSOS
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducerHFHAD
ProductID id() const
Accessor for product ID.
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
void setPixelMatchSubdetectors(int sd1, int sd2)
static std::string const input
edm::EDGetTokenT< reco::GsfElectronCoreCollection > gsfElectronCores
EgammaHcalIsolation hadIsolation03Bc
RegressionHelper regHelper_
CaloClusterPtr electronCluster
TrajectoryStateOnSurface constrainedVtxTSOS
bool getData(T &iHolder) const
bool isGsfCtfScPixConsistent
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)
float hcalOverEcalBc(const ShowerShape &ss, int depth) const
double simpleElectronEnergyUncertainty(reco::GsfElectron const &)
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Handle< PROD > getHandle(EDGetTokenT< PROD > token) const
std::array< float, 7 > hcalOverEcal
const edm::ESGetToken< EcalPFRecHitThresholds, EcalPFRecHitThresholdsRcd > ecalPFRechitThresholdsToken_
float deltaEtaSuperClusterTrackAtVtx() const
std::vector< int > recHitSeverityToBeExcludedBarrel
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
TkSoA const *__restrict__ CAHitNtupletGeneratorKernelsGPU::QualityCuts cuts
float sigmaIetaIeta() const
double maxHOverEBarrelCone
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
float deltaPhiSuperClusterTrackAtVtx() const
std::vector< GsfElectronCore > GsfElectronCoreCollection
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
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)
auto hcalTowersBehindClusters(const reco::SuperCluster &sc) const
edm::EDGetTokenT< reco::TrackCollection > ctfTracks
double energy() const
cluster energy
edm::EDGetTokenT< reco::ElectronSeedCollection > seedsTag
const reco::BeamSpot * beamspot
float classBasedElectronEnergy(reco::GsfElectron const &, reco::BeamSpot const &, EcalClusterFunctionBaseClass const &crackCorrectionFunction)
edm::Handle< reco::ConversionCollection > conversions
static bool isNextToDBoundary(EEDetId id)
void applyEcalRegression(reco::GsfElectron &electron, const reco::VertexCollection &vertices, const EcalRecHitCollection &rechitsEB, const EcalRecHitCollection &rechitsEE) const
double maxDeltaPhiEndcaps
std::vector< edm::Handle< reco::PFClusterCollection > > hcalClustersHandle
EleTkIsolFromCands tkIsolHEEP04Calc
std::vector< int > recHitFlagsToBeExcludedBarrel
bool isNull() const
Checks for null.
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
const_iterator end() const
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
DetId seed() const
return DetId of seed
bool isGsfScPixConsistent
edm::EDGetTokenT< reco::PFClusterCollection > pfClusterProducer
std::vector< int > recHitFlagsToBeExcludedEndcaps
ElectronMomentum correctElectronMomentum(reco::GsfElectron const &, TrajectoryStateOnSurface const &)
float ecalClusterEnergyUncertaintyElectronSpecific(reco::SuperCluster const &superCluster)
bool hasActiveHcal(const reco::SuperCluster &sc) const
reco::GsfElectron::SaturationInfo calculateSaturationInfo(const reco::SuperClusterRef &, EventData const &eventData) const
bool isNull() const
Checks for null.
double maxSigmaIetaIetaBarrel
double getHcalEtSum(const reco::Candidate *c, int depth) const
T getParameter(std::string const &) const
const reco::GsfTrackRef gsfTrackRef
bool ecalDrivenEcalEnergyFromClassBasedParameterization
void ele_convert(const Type1 &obj1, Type2 &obj2)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
virtual GsfElectronCoreRef core() const
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
const auto hcalTopology() const
TrajectoryStateOnSurface seedTSOS
EgammaHcalIsolation hadIsolation04
iterator find(key_type k)
edm::Handle< reco::GsfTrackCollection > originalGsfTracks
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_
float hcalOverEcal(const ShowerShape &ss, int depth) const
std::unique_ptr< ElectronEcalPFClusterIsolation > ecalisoAlgo_
edm::EDGetTokenT< EcalRecHitCollection > barrelRecHitCollection
const reco::SuperClusterRef superClusterRef
TrajectoryStateOnSurface eleTSOS
const auto hcalSevLvlComputer() const
float deltaPhiSeedClusterAtCalo
const auto hcalChannelQuality() const
const Point & position() const
position
double maxHOverEEndcapsCone
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
TrajectoryStateOnSurface outTSOS
trackerGeometryToken_(iC.esConsumes())
ElectronData(const reco::GsfElectronCoreRef &core, const reco::BeamSpot &bs)
double getHcalEtSumBc(const reco::Candidate *c, int depth) const
Log< level::Warning, false > LogWarning
bool momentumFromModeCartesian(TrajectoryStateOnSurface const &tsos, GlobalVector &momentum)
std::array< double, 4 > arrayHB
EventData beginEvent(edm::Event const &event, CaloGeometry const &caloGeometry, EcalSeverityLevelAlgo const &ecalSeveretyLevelAlgo)
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
GlobalVector vtxMomWithConstraint
int ietaAbs() const
get the absolute value of the crystal ieta
const EleTkIsolFromCands::Configuration tkIsolHEEP03CalcCfg_
const edm::ESGetToken< CaloTopology, CaloTopologyRecord > caloTopologyToken_
reco::GsfElectron::Classification classifyElectron(reco::GsfElectron const &)
const auto towerMap() const
void checkSetup(const edm::EventSetup &)
void setPixelMatchDRz1(float dRz1)
SuperClusterRef superCluster() const override
reference to a SuperCluster
const EleTkIsolFromCands::Configuration tkIsol04CalcCfg_
int maxSeverityHE() const
math::PtEtaPhiELorentzVectorF LorentzVector
int charge() const final
electric charge
Global3DVector GlobalVector
TrajectoryStateOnSurface vtxTSOS
EleTkIsolFromCands tkIsolHEEP03Calc
constexpr Detector det() const
get the detector field from this detid
reco::Candidate::LorentzVector calculateMomentum()
const reco::BeamSpot beamSpot
std::array< double, 7 > arrayHE