31 #include <Math/Point3D.h> 89 bool originalCtfTrackCollectionRetreived =
false;
90 bool originalGsfTrackCollectionRetreived =
false;
113 void calculateMode();
133 if ((!originalCtfTrackCollectionRetreived) && (ctfTrack.
isNonnull())) {
134 event->get(ctfTrack.
id(), originalCtfTracks);
135 originalCtfTrackCollectionRetreived =
true;
137 if ((!originalGsfTrackCollectionRetreived) && (gsfTrack.
isNonnull())) {
138 event->get(gsfTrack.
id(), originalGsfTracks);
139 originalGsfTrackCollectionRetreived =
true;
145 gsfTrackRef(coreRef->gsfTrack()),
146 superClusterRef(coreRef->superCluster()),
147 ctfTrackRef(coreRef->ctfTrack()),
148 shFracInnerHits(coreRef->ctfGsfOverlap()),
183 float dphimin = 1.e30;
185 GlobalPoint posclu(bc->position().x(), bc->position().y(), bc->position().z());
187 if (!tempTSOS.isValid())
212 if (!vtxTSOS.isValid())
275 int nSaturatedXtals = 0;
276 bool isSeedSaturated =
false;
277 for (
auto&& hitFractionPair : theClus->hitsAndFractions()) {
281 if (
ecalRecHit->checkFlag(EcalRecHit::Flags::kSaturated)) {
284 isSeedSaturated =
true;
293 template <
bool full5x5>
308 std::vector<int> recHitFlagsToBeExcluded;
309 std::vector<int> recHitSeverityToBeExcluded;
320 std::vector<float> covariances = ClusterTools::covariances(seedCluster, recHits, &topology, &geometry);
321 std::vector<float> localCovariances = ClusterTools::localCovariances(seedCluster, recHits, &topology);
327 showerShape.
e2x5Max = ClusterTools::e2x5Max(seedCluster, recHits, &topology);
328 showerShape.
e5x5 = ClusterTools::e5x5(seedCluster, recHits, &topology);
329 showerShape.
r9 = ClusterTools::e3x3(seedCluster, recHits, &topology) / theClus->rawEnergy();
331 const float scale = full5x5 ? showerShape.
e5x5 : theClus->energy();
345 if (see_by_spp > 0) {
346 showerShape.
sigmaIetaIphi = localCovariances[1] / see_by_spp;
347 }
else if (localCovariances[1] > 0) {
353 showerShape.
e2nd = ClusterTools::e2nd(seedCluster, recHits);
354 showerShape.
eTop = ClusterTools::eTop(seedCluster, recHits, &topology);
355 showerShape.
eLeft = ClusterTools::eLeft(seedCluster, recHits, &topology);
356 showerShape.
eRight = ClusterTools::eRight(seedCluster, recHits, &topology);
357 showerShape.
eBottom = ClusterTools::eBottom(seedCluster, recHits, &topology);
359 showerShape.
e2x5Left = ClusterTools::e2x5Left(seedCluster, recHits, &topology);
360 showerShape.
e2x5Right = ClusterTools::e2x5Right(seedCluster, recHits, &topology);
361 showerShape.
e2x5Top = ClusterTools::e2x5Top(seedCluster, recHits, &topology);
362 showerShape.
e2x5Bottom = ClusterTools::e2x5Bottom(seedCluster, recHits, &topology);
379 std::unique_ptr<EcalClusterFunctionBaseClass>&& superClusterErrorFunction,
380 std::unique_ptr<EcalClusterFunctionBaseClass>&& crackCorrectionFunction,
400 std::forward<std::unique_ptr<EcalClusterFunctionBaseClass>>(superClusterErrorFunction)},
430 float egHcalIsoConeSizeOutSmall = 0.3, egHcalIsoConeSizeOutLarge = 0.4;
432 int egHcalDepth1 = 1, egHcalDepth2 = 2;
434 float egIsoConeSizeOutSmall = 0.3, egIsoConeSizeOutLarge = 0.4, egIsoJurassicWidth =
cfg_.
iso.
jurassicWidth;
458 .hadDepth1Isolation03 =
460 .hadDepth1Isolation04 =
462 .hadDepth2Isolation03 =
464 .hadDepth2Isolation04 =
466 .hadDepth1Isolation03Bc =
468 .hadDepth1Isolation04Bc =
470 .hadDepth2Isolation03Bc =
472 .hadDepth2Isolation04Bc =
475 egIsoConeSizeInBarrel,
481 &ecalSeveretyLevelAlgo,
484 egIsoConeSizeInBarrel,
490 &ecalSeveretyLevelAlgo,
493 egIsoConeSizeInEndcap,
499 &ecalSeveretyLevelAlgo,
502 egIsoConeSizeInEndcap,
508 &ecalSeveretyLevelAlgo,
510 .pfIsolationValues = {},
511 .edIsolationValues = {},
512 .originalCtfTracks = {},
513 .originalGsfTracks = {}};
517 eventData.ecalBarrelIsol03.doSeverityChecks(eventData.barrelRecHits.product(),
522 eventData.ecalBarrelIsol04.doSeverityChecks(eventData.barrelRecHits.product(),
527 eventData.ecalEndcapIsol03.doSeverityChecks(eventData.endcapRecHits.product(),
532 eventData.ecalEndcapIsol04.doSeverityChecks(eventData.endcapRecHits.product(),
550 auto eventData =
beginEvent(event, caloGeometry, ecalSeveretyLevelAlgo);
557 for (
unsigned int i = 0;
i < coreCollection->size(); ++
i) {
560 bool coreFound =
false;
561 for (
auto const& ele : electrons) {
562 if (ele.core() == coreRef) {
571 if (coreRef->superCluster().
isNull())
575 ElectronData electronData(coreRef, *eventData.beamspot);
578 if (!electronData.
calculateTSOS(mtsTransform, constraintAtVtx))
582 electrons, electronData, eventData, caloTopology, caloGeometry, mtsTransform, magneticFieldInTesla, hoc);
592 bool eg = ele.
core()->ecalDrivenSeed();
593 bool pf = ele.
core()->trackerDrivenSeed() && !ele.
core()->ecalDrivenSeed();
596 throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")
597 <<
"An electron cannot be both egamma and purely pflow";
599 if ((!eg) && (!pf)) {
600 throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")
601 <<
"An electron cannot be neither egamma nor purely pflow";
608 double etValue = ele.
superCluster()->energy() / cosh(etaValue);
609 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue;
614 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
618 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue;
627 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
635 bool HoEveto =
false;
647 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
651 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta;
656 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
660 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
665 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
673 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
683 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
690 throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed") <<
"The GsfTrack seed is not an ElectronSeed ?!";
692 if (elseed->subDet(1) == 6)
700 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied";
702 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied";
712 double magneticFieldInTesla,
800 fiducialFlags.
isEB =
true;
813 fiducialFlags.
isEE =
true;
826 fiducialFlags.
isEE =
true;
831 <<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!";
847 const bool pflow = !(electronData.
coreRef->ecalDrivenSeed());
850 full5x5_showerShape =
875 conversionVars.
flags = conversionInfo.
flag;
876 conversionVars.
dist = conversionInfo.
dist;
877 conversionVars.
dcot = conversionInfo.
dcot;
889 if ((conversionVars.
flags == 0)
or (conversionVars.
flags == 1))
891 else if ((conversionVars.
flags == 2)
or (conversionVars.
flags == 3))
898 electrons.emplace_back(eleCharge,
909 auto& ele = electrons.back();
912 ele.setP4(GsfElectron::P4_FROM_SUPER_CLUSTER, momentum, 0,
true);
927 if (sc->clustersSize() > 1) {
928 float pf_fbrem = (sc->energy() - cl->
energy()) / sc->energy();
929 ele.setSuperClusterFbrem(pf_fbrem);
931 ele.setSuperClusterFbrem(0);
940 ele.setClassification(elClass);
943 if (unexpectedClassification) {
954 if (ele.core()->ecalDrivenSeed()) {
956 if (ele.isEcalEnergyCorrected()) {
957 edm::LogWarning(
"ElectronEnergyCorrector::classBasedElectronEnergy") <<
"already done";
959 ele.setCorrectedEcalEnergy(
976 if (ele.core()->ecalDrivenSeed() && !unexpectedClassification) {
978 edm::LogWarning(
"ElectronMomentumCorrector::correct") <<
"already done";
981 ele.correctMomentum(
p.momentum,
p.trackError,
p.finalError);
1017 ele.setIsolation03(dr03);
1018 ele.setIsolation04(dr04);
1037 LogTrace(
"GsfElectronAlgo") <<
"Constructed new electron with energy " << ele.p4().e();
1054 sd1 = elseed->subDet(0);
1055 sd2 = elseed->subDet(1);
1056 dPhi1 = (ele.
charge() > 0) ? elseed->dPhiPos(0) : elseed->dPhiNeg(0);
1057 dPhi2 = (ele.
charge() > 0) ? elseed->dPhiPos(1) : elseed->dPhiNeg(1);
1058 dRz1 = (ele.
charge() > 0) ? elseed->dRZPos(0) : elseed->dRZNeg(0);
1059 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
edm::Handle< reco::TrackCollection > originalCtfTracks
T getParameter(std::string const &) const
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
EgammaRecHitIsolation ecalEndcapIsol04
EgammaRecHitIsolation ecalBarrelIsol03
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
edm::Handle< reco::ElectronSeedCollection > seeds
const math::XYZPoint & position() const
cluster centroid position
void applyCombinationRegression(reco::GsfElectron &ele) const
void setCutBasedPreselectionFlag(reco::GsfElectron &ele, const reco::BeamSpot &) const
const EleTkIsolFromCands tkIsol03Calc_
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)
EgammaTowerIsolation hadDepth1Isolation03
void readEvent(const edm::Event &)
edm::EDGetTokenT< reco::ConversionCollection > conversions
edm::EDGetTokenT< CaloTowerCollection > hcalTowersTag
EgammaTowerIsolation hadDepth2Isolation03
const EleTkIsolFromCands tkIsolHEEP04Calc_
edm::EDGetTokenT< reco::GsfPFRecTrackCollection > gsfPfRecTracksTag
float eSuperClusterOverP() const
void completeElectrons(reco::GsfElectronCollection &electrons, edm::Event const &event, edm::EventSetup const &eventSetup, const HeavyObjectCache *hoc)
CaloTopology const * topology(0)
void retreiveOriginalTrackCollections(const reco::TrackRef &, const reco::GsfTrackRef &)
void setPixelMatchDPhi1(float dPhi1)
bool ecalDrivenEcalErrorFromClassBasedParameterization
float hcalDepth2OverEcal() const
constexpr bool isNotFinite(T x)
double getEtSum(const reco::Candidate *emObject) const
double intRadiusEcalBarrel
constexpr T normalizedPhi(T phi)
bool useCombinationRegression
double maxSigmaIetaIetaEndcaps
TrajectoryStateOnSurface sclTSOS
Global3DPoint GlobalPoint
EgammaTowerIsolation hadDepth1Isolation04Bc
edm::Handle< EcalRecHitCollection > endcapRecHits
void setPixelMatchInfomation(reco::GsfElectron &) const
double maxHOverEEndcapsTower
EgammaTowerIsolation hadDepth1Isolation03Bc
std::unique_ptr< EcalClusterFunctionBaseClass > superClusterErrorFunction_
GlobalPoint globalPosition() const
int charge() const final
electric charge
double maxDeltaEtaEndcaps
void checkSetup(const edm::EventSetup &)
float deltaEtaSuperClusterAtVtx
std::vector< std::string > vweightsfiles
edm::EDGetTokenT< reco::VertexCollection > vtxCollectionTag
float deltaPhiSuperClusterAtVtx
void computeCharge(int &charge, reco::GsfElectron::ChargeInfo &info)
float hcalDepth1TowerSumEt
edm::EDGetTokenT< EcalRecHitCollection > endcapRecHitCollection
TrajectoryStateOnSurface innTSOS
reco::GsfElectron::ShowerShape calculateShowerShape(const reco::SuperClusterRef &, ElectronHcalHelper const &hcalHelper, EventData const &eventData, CaloTopology const &topology, CaloGeometry const &geometry) const
float hcalDepth1TowerSumEtBc
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
ElectronHcalHelper hcalHelper_
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0) const
ProductID id() const
Accessor for product ID.
const reco::TrackRef conversionPartnerCtfTk
void setPixelMatchSubdetectors(int sd1, int sd2)
static std::string const input
edm::EDGetTokenT< reco::GsfElectronCoreCollection > gsfElectronCores
edm::EDGetTokenT< reco::GsfElectronCollection > pflowGsfElectronsTag
RegressionHelper regHelper_
CaloClusterPtr electronCluster
double maxHOverEBarrelTower
TrajectoryStateOnSurface constrainedVtxTSOS
bool getData(T &iHolder) const
bool isGsfCtfScPixConsistent
double simpleElectronEnergyUncertainty(reco::GsfElectron const &)
void setUseNumCrystals(bool b=true)
float deltaEtaSuperClusterTrackAtVtx() const
std::vector< int > recHitSeverityToBeExcludedBarrel
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
float sigmaIetaIeta() const
double maxHOverEBarrelCone
EgammaTowerIsolation hadDepth1Isolation04
float eSeedClusterOverPout
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
const edm::ESGetToken< EcalSeverityLevelAlgo, EcalSeverityLevelAlgoRcd > ecalSeveretyLevelAlgoToken_
void checkSetup(edm::EventSetup const &eventSetup)
bool positionFromModeCartesian(TrajectoryStateOnSurface const &tsos, GlobalPoint &position)
static bool isNextToPhiBoundary(EBDetId id)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
edm::Handle< EcalRecHitCollection > barrelRecHits
float deltaPhiSuperClusterTrackAtVtx() const
std::vector< GsfElectronCore > GsfElectronCoreCollection
const double radiusOfConversion
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
float hcalOverEcal() const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
bool pureTrackerDrivenEcalErrorFromSimpleParameterization
IsolationValueMaps pfIsolationValues
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
double energy() const
cluster energy
double calIsolPt(Args &&...args) const
edm::EDGetTokenT< reco::ElectronSeedCollection > seedsTag
const reco::BeamSpot * beamspot
EgammaTowerIsolation hadDepth2Isolation04Bc
float classBasedElectronEnergy(reco::GsfElectron const &, reco::BeamSpot const &, EcalClusterFunctionBaseClass const &crackCorrectionFunction)
edm::Handle< reco::ConversionCollection > conversions
static bool isNextToDBoundary(EEDetId id)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
double maxDeltaPhiEndcaps
float hcalOverEcalBc() const
std::vector< int > recHitFlagsToBeExcludedBarrel
bool isNull() const
Checks for null.
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
const_iterator end() const
edm::Handle< reco::GsfElectronCollection > previousElectrons
float hcalDepth2TowerSumEtBc
const reco::GsfTrackRef conversionPartnerGsfTk
float hcalDepth1OverEcal() const
bool calculateTSOS(MultiTrajectoryStateTransform const &, GsfConstraintAtVertex const &)
void setPixelMatchDPhi2(float dPhi2)
reco::CaloClusterPtr getEleBasicCluster(MultiTrajectoryStateTransform const &)
const CutsConfiguration cutsPflow
edm::Handle< reco::VertexCollection > vertices
reco::TrackRef ctfTrackRef
edm::Handle< reco::GsfElectronCollection > pflowElectrons
EgammaRecHitIsolation ecalBarrelIsol04
DetId seed() const
return DetId of seed
bool isGsfScPixConsistent
double hcalESumDepth2(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0) const
std::vector< int > recHitFlagsToBeExcludedEndcaps
float hcalDepth2TowerSumEt
ElectronMomentum correctElectronMomentum(reco::GsfElectron const &, TrajectoryStateOnSurface const &)
bool hasActiveHcal(const reco::SuperCluster &sc) const
GsfElectronAlgo(const Tokens &, const StrategyConfiguration &, const CutsConfiguration &cutsCfg, const CutsConfiguration &cutsCfgPflow, const ElectronHcalHelper::Configuration &hcalCfg, const ElectronHcalHelper::Configuration &hcalCfgPflow, const IsolationConfiguration &, const EcalRecHitsConfiguration &, std::unique_ptr< EcalClusterFunctionBaseClass > &&superClusterErrorFunction, 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)
reco::GsfElectron::SaturationInfo calculateSaturationInfo(const reco::SuperClusterRef &, EventData const &eventData) const
bool isNull() const
Checks for null.
double maxSigmaIetaIetaBarrel
const reco::GsfTrackRef gsfTrackRef
EgammaTowerIsolation hadDepth2Isolation03Bc
bool ecalDrivenEcalEnergyFromClassBasedParameterization
void ele_convert(const Type1 &obj1, Type2 &obj2)
float hcalDepth2OverEcalBc
math::XYZTLorentzVector LorentzVector
Lorentz vector.
virtual GsfElectronCoreRef core() const
const StrategyConfiguration strategy
double hcalESumDepth2BehindClusters(const std::vector< CaloTowerDetId > &towers) const
float deltaEtaEleClusterAtCalo
std::vector< std::string > vweightsfiles
TrajectoryStateOnSurface seedTSOS
float hcalDepth1OverEcalBc
ESHandle< TrackerGeometry > geometry
edm::EDGetTokenT< reco::GsfElectronCollection > previousGsfElectrons
iterator find(key_type k)
edm::Handle< reco::GsfTrackCollection > originalGsfTracks
const CutsConfiguration cuts
void applyEcalRegression(reco::GsfElectron &electron, const edm::Handle< reco::VertexCollection > &vertices, const edm::Handle< EcalRecHitCollection > &rechitsEB, const edm::Handle< EcalRecHitCollection > &rechitsEE) const
float eEleClusterOverPout
const EcalRecHitsConfiguration recHits
const EleTkIsolFromCands tkIsol04Calc_
const reco::GsfElectronCoreRef coreRef
std::vector< CaloTowerDetId > hcalTowersBehindClusters(const reco::SuperCluster &sc) const
float deltaPhiEleClusterAtCalo
edm::Handle< reco::TrackCollection > currentCtfTracks
double getTowerEtSum(const reco::Candidate *cand, const std::vector< CaloTowerDetId > *detIdToExclude=0) const
SuperClusterRef superCluster() const override
reference to a SuperCluster
edm::EDGetTokenT< EcalRecHitCollection > barrelRecHitCollection
const reco::SuperClusterRef superClusterRef
TrajectoryStateOnSurface eleTSOS
float deltaPhiSeedClusterAtCalo
const Point & position() const
position
const EleTkIsolFromCands tkIsolHEEP03Calc_
double maxHOverEEndcapsCone
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
std::pair< reco::TrackRef, float > getClosestCtfToGsf(reco::GsfTrackRef const &, edm::Handle< reco::TrackCollection > const &ctfTracksH)
TrajectoryStateOnSurface outTSOS
ElectronData(const reco::GsfElectronCoreRef &core, const reco::BeamSpot &bs)
bool momentumFromModeCartesian(TrajectoryStateOnSurface const &tsos, GlobalVector &momentum)
IsolationValueMaps edIsolationValues
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
EgammaTowerIsolation hadDepth2Isolation04
const edm::ESGetToken< CaloTopology, CaloTopologyRecord > caloTopologyToken_
reco::GsfElectron::Classification classifyElectron(reco::GsfElectron const &)
void checkSetup(const edm::EventSetup &)
void setPixelMatchDRz1(float dRz1)
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers) const
math::PtEtaPhiELorentzVectorF LorentzVector
Global3DVector GlobalVector
ElectronHcalHelper hcalHelperPflow_
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
TrajectoryStateOnSurface vtxTSOS
void createElectron(reco::GsfElectronCollection &electrons, ElectronData &electronData, EventData &eventData, CaloTopology const &topology, CaloGeometry const &geometry, MultiTrajectoryStateTransform const &mtsTransform, double magneticFieldInTesla, const HeavyObjectCache *)
constexpr Detector det() const
get the detector field from this detid
reco::Candidate::LorentzVector calculateMomentum()
const reco::BeamSpot beamSpot