44 #include <Math/Point3D.h>
51 using namespace reco ;
108 : inputCfg(inputConfig),
109 strategyCfg(strategyConfig),
111 cutsCfgPflow(cutsConfigPflow),
113 recHitsCfg(recHitsConfig),
116 superClusterErrorFunction(superClusterErrorFunc),
117 crackCorrectionFunction(crackCorrectionFunc),
126 delete hcalHelperPflow ;
127 delete sElectronMVAEstimator;
160 : cacheIDGeom(0), cacheIDTopo(0), cacheIDTDGeom(0), cacheIDMagField(0),
167 delete constraintAtVtx ;
168 delete mtsTransform ;
187 void retreiveOriginalTrackCollections
223 :
event(0), beamspot(0),
224 originalCtfTrackCollectionRetreived(
false),
225 originalGsfTrackCollectionRetreived(
false),
226 tkIsolation03(0), tkIsolation04(0),
227 hadDepth1Isolation03(0), hadDepth1Isolation04(0),
228 hadDepth2Isolation03(0), hadDepth2Isolation04(0),
229 ecalBarrelIsol03(0), ecalBarrelIsol04(0),
230 ecalEndcapIsol03(0), ecalEndcapIsol04(0)
237 delete tkIsolation03 ;
238 delete tkIsolation04 ;
239 delete hadDepth1Isolation03 ;
240 delete hadDepth1Isolation04 ;
241 delete hadDepth2Isolation03 ;
242 delete hadDepth2Isolation04 ;
243 delete ecalBarrelIsol03 ;
244 delete ecalBarrelIsol04 ;
245 delete ecalEndcapIsol03 ;
246 delete ecalEndcapIsol04 ;
248 GsfElectronPtrCollection::const_iterator it ;
257 if ((!originalCtfTrackCollectionRetreived)&&(ctfTrack.
isNonnull()))
259 event->get(ctfTrack.
id(),originalCtfTracks) ;
260 originalCtfTrackCollectionRetreived =
true ;
262 if ((!originalGsfTrackCollectionRetreived)&&(gsfTrack.
isNonnull()))
264 event->get(gsfTrack.
id(),originalGsfTracks) ;
265 originalGsfTrackCollectionRetreived =
true ;
317 gsfTrackRef(coreRef->gsfTrack()),
318 superClusterRef(coreRef->superCluster()),
319 ctfTrackRef(coreRef->ctfTrack()), shFracInnerHits(coreRef->ctfGsfOverlap()),
328 if (!ctfTrackRef.isNull())
return ;
332 shFracInnerHits = 0 ;
336 const HitPattern & gsfHitPattern = gsfTrackRef->hitPattern() ;
339 TrackCollection::const_iterator ctfTkIter ;
340 for ( ctfTkIter = ctfTrackCollection->begin() , counter = 0 ;
341 ctfTkIter != ctfTrackCollection->end() ; ctfTkIter++, counter++ )
344 double dEta = gsfTrackRef->eta() - ctfTkIter->eta() ;
345 double dPhi = gsfTrackRef->phi() - ctfTkIter->phi() ;
346 double pi = acos(-1.);
350 if (
sqrt(dEta*dEta + dPhi*dPhi) > 0.3) continue ;
352 unsigned int shared = 0 ;
353 int gsfHitCounter = 0 ;
354 int numGsfInnerHits = 0 ;
355 int numCtfInnerHits = 0 ;
358 const HitPattern & ctfHitPattern = ctfTkIter->hitPattern() ;
361 for ( elHitsIt = gsfTrackRef->recHitsBegin() ;
362 elHitsIt != gsfTrackRef->recHitsEnd() ;
363 elHitsIt++, gsfHitCounter++ )
365 if (!((**elHitsIt).isValid()))
369 uint32_t gsfHit = gsfHitPattern.
getHitPattern(gsfHitCounter) ;
377 int ctfHitsCounter = 0 ;
378 numCtfInnerHits = 0 ;
380 for ( ctfHitsIt = ctfTkIter->recHitsBegin() ;
381 ctfHitsIt != ctfTkIter->recHitsEnd() ;
382 ctfHitsIt++, ctfHitsCounter++ )
384 if(!((**ctfHitsIt).isValid()))
387 uint32_t ctfHit = ctfHitPattern.
getHitPattern(ctfHitsCounter);
405 if ((numGsfInnerHits==0)||(numCtfInnerHits==0))
408 if ( static_cast<float>(shared)/
min(numGsfInnerHits,numCtfInnerHits) > shFracInnerHits )
410 shFracInnerHits =
static_cast<float>(shared)/
min(numGsfInnerHits, numCtfInnerHits);
411 ctfTrackRef =
TrackRef(currentCtfTracks,counter);
431 int chargeGsf = gsfTrackRef->charge() ;
433 info.
isGsfCtfConsistent = (ctfTrackRef.isNonnull()&&((chargeGsf*ctfTrackRef->charge())>0)) ;
440 { charge = ctfTrackRef->charge() ; }
449 float dphimin = 1.e30 ;
450 for (
CaloCluster_iterator bc=superClusterRef->clustersBegin(); bc!=superClusterRef->clustersEnd(); bc++)
452 GlobalPoint posclu((*bc)->position().x(),(*bc)->position().y(),(*bc)->position().z()) ;
454 if (!tempTSOS.isValid()) tempTSOS=outTSOS ;
472 if (!innTSOS.isValid())
return false;
479 if (!vtxTSOS.isValid()) vtxTSOS=innTSOS;
483 if (!outTSOS.isValid())
return false;
487 GlobalPoint(superClusterRef->seed()->position().x(),
488 superClusterRef->seed()->position().y(),
489 superClusterRef->seed()->position().z()));
490 if (!seedTSOS.isValid()) seedTSOS=outTSOS;
494 if (!sclTSOS.isValid()) sclTSOS=outTSOS;
521 double scale = superClusterRef->energy()/vtxMom.mag() ;
524 superClusterRef->energy() ) ;
532 int detector = seedXtalId.
subdetId() ;
537 std::vector<int> recHitFlagsToBeExcluded ;
538 std::vector<int> recHitSeverityToBeExcluded ;
552 std::vector<float> covariances = EcalClusterTools::covariances(seedCluster,recHits,topology,geometry) ;
553 std::vector<float> localCovariances = EcalClusterTools::localCovariances(seedCluster,recHits,topology) ;
557 showerShape.
e1x5 = EcalClusterTools::e1x5(seedCluster,recHits,topology) ;
558 showerShape.
e2x5Max = EcalClusterTools::e2x5Max(seedCluster,recHits,topology) ;
559 showerShape.
e5x5 = EcalClusterTools::e5x5(seedCluster,recHits,topology) ;
560 showerShape.
r9 = EcalClusterTools::e3x3(seedCluster,recHits,topology)/theClus->rawEnergy() ;
585 int detector = seedXtalId.
subdetId() ;
590 std::vector<int> recHitFlagsToBeExcluded ;
591 std::vector<int> recHitSeverityToBeExcluded ;
652 :
generalData_(
new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,recHitsCfg,superClusterErrorFunction,crackCorrectionFunction,mvaCfg,regCfg)),
668 bool updateField(
false);
675 bool updateGeometry(
false);
677 updateGeometry =
true;
682 if ( updateField || updateGeometry ) {
724 GsfElectronPtrCollection::const_iterator it ;
729 { outEle.push_back(**it) ; }
735 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected event data" ; }
763 float extRadiusSmall=0.3, extRadiusLarge=0.4 ;
769 float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
771 int egHcalDepth1=1, egHcalDepth2=2;
806 std::vector<edm::InputTag> inputTagIsoVals;
814 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
821 inputTagIsoVals.clear();
828 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
837 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"lacking event data" ; }
844 LogTrace(
"GsfElectronAlgo") <<
"========== " << title <<
" ==========";
847 GsfElectronPtrCollection::const_iterator it ;
850 LogTrace(
"GsfElectronAlgo") <<
"Electron with charge, pt, eta, phi: " << (*it)->charge() <<
" , "
851 << (*it)->pt() <<
" , " << (*it)->eta() <<
" , " << (*it)->phi();
853 LogTrace(
"GsfElectronAlgo") <<
"=================================================";
859 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected electron data" ; }
862 for (
unsigned int i=0 ;
i<coreCollection->size() ; ++
i )
866 bool coreFound =
false ;
867 GsfElectronPtrCollection::const_iterator itrEle ;
873 if ((*itrEle)->core()==coreRef)
879 if (coreFound) continue ;
882 if (coreRef->superCluster().
isNull())
continue ;
903 GsfElectronCollection::const_iterator oldElectron ;
905 ( oldElectron = oldElectrons->begin() ;
906 oldElectron != oldElectrons->end() ;
910 const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack() ;
912 for ( icore=0 ; icore<newCores->size() ; ++icore )
914 if (oldElectronGsfTrackRef==(*newCores)[icore].gsfTrack())
931 GsfElectronCollection::const_iterator pfElectron, edElectron ;
932 unsigned int edIndex, pfIndex ;
934 GsfElectronPtrCollection::iterator el ;
955 ( pfIndex = 0, pfElectron = pfElectrons->begin() ; pfElectron != pfElectrons->end() ; pfIndex++, pfElectron++ )
957 if (pfElectron->gsfTrack()==(*el)->gsfTrack())
961 edm::LogWarning(
"GsfElectronProducer")<<
"associated pfGsfElectron already found" ;
976 (*el)->setPfIsolationVariables(isoVariables);
980 (*el)->setMvaInput(pfElectron->mvaInput()) ;
981 (*el)->setMvaOutput(pfElectron->mvaOutput()) ;
982 if ((*el)->ecalDrivenSeed())
983 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
false) ; }
985 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
true) ; }
986 double noCutMin = -999999999. ;
987 if ((*el)->mva()<noCutMin) {
throw cms::Exception(
"GsfElectronAlgo|UnexpectedMvaValue")<<
"unexpected MVA value: "<<(*el)->mva() ; }
996 edIndex = 0, edElectron = edElectrons->begin() ;
997 while ((found ==
false)&&(edElectron != edElectrons->end()))
999 if (edElectron->gsfTrack()==(*el)->gsfTrack())
1012 (*el)->setPfIsolationVariables(isoVariables);
1024 if (!((*el)->parentSuperCluster().isNull()))
1028 (*el)->setPfShowerShape(pflowShowerShape) ;
1030 else if ((*el)->passingPflowPreselection())
1031 {
edm::LogError(
"GsfElectronCoreProducer")<<
"Preselected tracker driven GsfTrack with no associated pflow SuperCluster." ; }
1038 if (sc->clustersSize()>1)
1041 (*el)->setPfSuperClusterFbrem((sc->energy()-(*first)->energy())/sc->energy()) ;
1044 { (*el)->setPfSuperClusterFbrem(0.) ; }
1060 return passmva && passCutBased;
1065 return passCutBased || passPF || passmva;
1069 return passCutBased || passPF;
1081 LogTrace(
"GsfElectronAlgo")<<
"========== removed not preselected "<<ei<<
"/"<<emax<<
"==========" ;
1096 bool eg = ele->
core()->ecalDrivenSeed() ;
1097 bool pf = ele->
core()->trackerDrivenSeed() && !ele->
core()->ecalDrivenSeed() ;
1099 if (eg&&pf) {
throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<
"An electron cannot be both egamma and purely pflow" ; }
1100 if ((!eg)&&(!pf)) {
throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<
"An electron cannot be neither egamma nor purely pflow" ; }
1106 double etValue = ele->
superCluster()->energy()/cosh(etaValue) ;
1107 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue ;
1110 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
1114 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue ;
1119 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
1126 bool HoEveto =
false ;
1130 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
1134 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta ;
1137 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
1141 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
1144 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
1150 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
1156 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
1164 {
throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed")<<
"The GsfTrack seed is not an ElectronSeed ?!" ; }
1166 {
if (elseed->subDet2()==6)
return ; }
1171 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied" ;
1173 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied" ;
1181 if (ele->
core()->ecalDrivenSeed())
1187 {
LogTrace(
"GsfElectronAlgo") <<
"Main mva criterion is satisfied" ; }
1210 GsfElectronPtrCollection::iterator el ;
1216 std::map<reco::GsfTrackRef,reco::GsfElectron::MvaInput>::const_iterator itcheck=mvaInputs.find((*el)->gsfTrack());
1217 (*el)->setMvaInput(itcheck->second);
1223 GsfElectronPtrCollection::iterator el ;
1232 mvaOutput.
mva = mvaValue ;
1233 (*el)->setMvaOutput(mvaOutput);
1236 std::map<reco::GsfTrackRef,reco::GsfElectron::MvaOutput>::const_iterator itcheck=mvaOutputs.find((*el)->gsfTrack());
1237 (*el)->setMvaOutput(itcheck->second);
1325 int detector = seedXtalId.
subdetId() ;
1356 {
throw cms::Exception(
"GsfElectronAlgo|UnknownXtalRegion")<<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1386 ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1390 conversionVars.
flags = conversionInfo.
flag() ;
1391 conversionVars.
dist = conversionInfo.
dist() ;
1392 conversionVars.
dcot = conversionInfo.
dcot() ;
1394 if ((conversionVars.
flags==0)
or(conversionVars.
flags==1))
1396 else if ((conversionVars.
flags==2)
or(conversionVars.
flags==3))
1407 tcMatching, tkExtra, ctfInfo,
1408 fiducialFlags,showerShape, full5x5_showerShape,
1412 ele->
setP4(GsfElectron::P4_FROM_SUPER_CLUSTER,momentum,0,
true) ;
1428 if (sc->clustersSize()>1)
1430 float pf_fbrem =( sc->energy() - cl->energy() ) / sc->energy();
1459 if (ele->
core()->ecalDrivenSeed())
1475 if (ele->
core()->ecalDrivenSeed())
1512 LogTrace(
"GsfElectronAlgo")<<
"Constructed new electron with energy "<< ele->
p4().e() ;
1527 GsfElectronPtrCollection::iterator
e1,
e2 ;
1541 (*e1)->clearAmbiguousGsfTracks() ;
1542 (*e1)->setAmbiguous(
false) ;
1555 GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
1556 for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
1557 gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
1560 if (gsfPfRecTrack->gsfTrackRef()==(*e1)->gsfTrack())
1564 edm::LogWarning(
"GsfElectronAlgo")<<
"associated gsfPfRecTrack already found" ;
1569 const std::vector<reco::GsfPFRecTrackRef> & duplicates(gsfPfRecTrack->convBremGsfPFRecTrackRef()) ;
1570 std::vector<reco::GsfPFRecTrackRef>::const_iterator duplicate ;
1571 for ( duplicate = duplicates.begin() ; duplicate != duplicates.end() ; duplicate ++ )
1572 { (*e1)->addAmbiguousGsfTrack((*duplicate)->gsfTrackRef()) ; }
1586 if ((*e1)->ambiguous())
continue ;
1587 if ( ignoreNotPreselected && !
isPreselected(*e1) )
continue ;
1592 <<
"Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1593 <<
", cluster " << scRef1.
get()
1594 <<
" & track " << (*e1)->gsfTrack().get() ;
1601 if ((*e2)->ambiguous())
continue ;
1602 if ( ignoreNotPreselected && !
isPreselected(*e2) )
continue ;
1608 bool sameCluster =
false ;
1610 { sameCluster = (scRef1==scRef2) ; }
1628 <<
"Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1629 <<
", cluster " << scRef2.
get()
1630 <<
" and track " << (*e2)->gsfTrack().get() ;
1631 (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1632 (*e2)->setAmbiguous(
true) ;
1634 else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1637 <<
"Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1638 <<
", cluster " << scRef2.
get()
1639 <<
" and track " << (*e2)->gsfTrack().get() ;
1640 (*e2)->setAmbiguous(
true) ;
1653 LogTrace(
"GsfElectronAlgo")<<
"========== remove ambiguous "<<ei<<
"/"<<emax<<
"==========" ;
1654 if ((*eitr)->ambiguous())
TrajectoryStateOnSurface constrainAtBeamSpot(const reco::GsfTrack &, const reco::BeamSpot &) const
(multi)TSOS after including the beamspot
CaloClusterPtr electronCluster() const
ElectronHcalHelper * hcalHelperPflow
edm::Handle< reco::TrackCollection > originalCtfTracks
T getParameter(std::string const &) const
unsigned long long cacheIdentifier() const
edm::Handle< reco::ElectronSeedCollection > seeds
const MultiTrajectoryStateMode * mtsMode
bool isPreselected(reco::GsfElectron *ele)
const math::XYZPoint & position() const
cluster centroid position
void applyCombinationRegression(reco::GsfElectron &ele) const
void setTrackFbrem(float fbrem)
edm::Handle< edm::ValueMap< float > > pfMva
void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate)
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
static bool isNextToEtaBoundary(EBDetId id)
EgammaTowerIsolation * hadDepth1Isolation04Bc
reco::GsfTrackRef conversionPartnerGsfTk() const
bool originalGsfTrackCollectionRetreived
void setPassCutBasedPreselection(bool flag)
bool positionFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalPoint &position) const
double intRadiusEcalEndcaps
unsigned long long cacheIDGeom
std::vector< int > recHitSeverityToBeExcludedEndcaps
unsigned ambClustersOverlapStrategy
void readEvent(const edm::Event &)
EgammaTowerIsolation * hadDepth1Isolation03Bc
double radiusOfConversion() const
void clonePreviousElectrons()
const LorentzVector & p4(P4Kind kind) const
float eSuperClusterOverP() const
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
CaloTopology const * topology(0)
void retreiveOriginalTrackCollections(const reco::TrackRef &, const reco::GsfTrackRef &)
bool ecalDrivenEcalErrorFromClassBasedParameterization
float hcalDepth2OverEcal() const
double getEtSum(const reco::Candidate *emObject) const
const IsolationConfiguration isoCfg
double intRadiusEcalBarrel
unsigned ambSortingStrategy
void calculateShowerShape(const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
void beginEvent(edm::Event &)
unsigned long long cacheIDTopo
bool useCombinationRegression
double maxSigmaIetaIetaEndcaps
TrajectoryStateOnSurface sclTSOS
const EcalRecHitsConfiguration recHitsCfg
Geom::Phi< T > phi() const
EventSetupData * eventSetupData_
Global3DPoint GlobalPoint
std::vector< Track > TrackCollection
collection of Tracks
edm::Handle< EcalRecHitCollection > endcapRecHits
double hcalESumDepth2BehindClusters(const std::vector< CaloTowerDetId > &towers)
std::vector< CaloTowerDetId > hcalTowersBehindClusters(const reco::SuperCluster &sc)
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
double maxDeltaEtaEndcaps
void checkSetup(const edm::EventSetup &)
void setMVAInputs(const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaInput > &mvaInputs)
bool passingCutBasedPreselection() const
float deltaEtaSuperClusterAtVtx
bool passingMvaPreselection() const
float deltaPhiSuperClusterAtVtx
void computeCharge(int &charge, reco::GsfElectron::ChargeInfo &info)
bool momentumFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalVector &momentum) const
void checkCtfTrack(edm::Handle< reco::TrackCollection > currentCtfTracks)
float hcalDepth1TowerSumEt
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers)
const InputTagsConfiguration inputCfg
edm::ESHandle< EcalSeverityLevelAlgo > sevLevel
TrajectoryStateOnSurface innTSOS
float hcalDepth1TowerSumEtBc
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
EgammaTowerIsolation * hadDepth1Isolation03
const StrategyConfiguration strategyCfg
SoftElectronMVAEstimator * sElectronMVAEstimator
GsfElectronAlgo(const InputTagsConfiguration &, const StrategyConfiguration &, const CutsConfiguration &cutsCfg, const CutsConfiguration &cutsCfgPflow, const ElectronHcalHelper::Configuration &hcalCfg, const ElectronHcalHelper::Configuration &hcalCfgPflow, const IsolationConfiguration &, const EcalRecHitsConfiguration &, EcalClusterFunctionBaseClass *superClusterErrorFunction, EcalClusterFunctionBaseClass *crackCorrectionFunction, const SoftElectronMVAEstimator::Configuration &mvaCfg, const RegressionHelper::Configuration ®Cfg)
edm::ESHandle< CaloTopology > caloTopo
void doFlagChecks(const std::vector< int > &v)
reco::TrackRef conversionPartnerCtfTk() const
void setSuperClusterFbrem(float fbrem)
CaloClusterPtr electronCluster
static bool stripTIDHitFilter(uint32_t pattern)
EgammaRecHitIsolation * ecalBarrelIsol04
TrajectoryStateOnSurface constrainedVtxTSOS
virtual float getValue(const reco::BasicCluster &, const EcalRecHitCollection &) const =0
const RegressionHelper::Configuration regCfg
bool isGsfCtfScPixConsistent
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
bool isNonnull() const
Checks for non-null.
ElectronTkIsolation * tkIsolation03
GeneralData(const InputTagsConfiguration &, const StrategyConfiguration &, const CutsConfiguration &cutsCfg, const CutsConfiguration &cutsCfgPflow, const ElectronHcalHelper::Configuration &hcalCfg, const ElectronHcalHelper::Configuration &hcalCfgPflow, const IsolationConfiguration &, const EcalRecHitsConfiguration &, EcalClusterFunctionBaseClass *superClusterErrorFunction, EcalClusterFunctionBaseClass *crackCorrectionFunction, const SoftElectronMVAEstimator::Configuration &mvaCfg, const RegressionHelper::Configuration &)
void setUseNumCrystals(bool b=true)
float deltaEtaSuperClusterTrackAtVtx() const
std::vector< int > recHitSeverityToBeExcludedBarrel
void setCorrectedEcalEnergyError(float newEnergyError)
bool isNull() const
Checks for null.
float sigmaIetaIeta() const
float eSeedClusterOverPout
void calculateShowerShape_full5x5(const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
void simpleParameterizationUncertainty(reco::GsfElectron &)
unsigned long long cacheSevLevel
void setCutBasedPreselectionFlag(reco::GsfElectron *ele, const reco::BeamSpot &)
double dPhi(double phi1, double phi2)
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
EgammaRecHitIsolation * ecalEndcapIsol03
EgammaTowerIsolation * hadDepth2Isolation03Bc
RealType normalized_phi(RealType phi)
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
GsfConstraintAtVertex * constraintAtVtx
static bool isNextToPhiBoundary(EBDetId id)
float sumPhotonEt
sum pt of PF photons // old float photonIso ;
edm::Handle< EcalRecHitCollection > barrelRecHits
float deltaPhiSuperClusterTrackAtVtx() const
std::vector< GsfElectronCore > GsfElectronCoreCollection
void correct(reco::GsfElectron &, TrajectoryStateOnSurface &)
static bool pixelHitFilter(uint32_t pattern)
float hcalOverEcal() const
void setPassMvaPreselection(bool flag)
bool pureTrackerDrivenEcalErrorFromSimpleParameterization
IsolationValueMaps pfIsolationValues
Abs< T >::type abs(const T &t)
std::vector< CaloTowerDetId > hcalTowersBehindClusters
float deltaEtaSeedClusterAtCalo
const MultiTrajectoryStateTransform * mtsTransform
static bool isNextToRingBoundary(EEDetId id)
std::list< reco::GsfElectron * > GsfElectronPtrCollection
bool originalCtfTrackCollectionRetreived
double hcalESumDepth2(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
double energy() const
cluster energy
const CutsConfiguration cutsCfg
ElectronHcalHelper * hcalHelper
float sumNeutralHadronEt
sum pt of neutral hadrons // old float neutralHadronIso ;
const reco::BeamSpot * beamspot
edm::ESHandle< MagneticField > magField
GsfElectronPtrCollection * electrons
CaloClusterPtr getEleBasicCluster(const MultiTrajectoryStateTransform *)
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
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< int > recHitFlagsToBeExcludedBarrel
void setIsolation04(const IsolationVariables &dr04)
void doSeverityChecks(const EcalRecHitCollection *const recHits, const std::vector< int > &v)
unsigned long long cacheIDMagField
void classify(reco::GsfElectron &)
EgammaTowerIsolation * hadDepth2Isolation04Bc
unsigned long long cacheIDTDGeom
edm::Handle< reco::GsfElectronCollection > previousElectrons
float hcalDepth2TowerSumEtBc
float hcalDepth1OverEcal() const
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
void classBasedParameterizationEnergy(reco::GsfElectron &, const reco::BeamSpot &bs)
edm::Handle< reco::VertexCollection > vertices
EgammaRecHitIsolation * ecalBarrelIsol03
reco::TrackRef ctfTrackRef
edm::Handle< reco::GsfElectronCollection > pflowElectrons
bool isGsfScPixConsistent
std::vector< int > recHitFlagsToBeExcludedEndcaps
float hcalDepth2TowerSumEt
EcalClusterFunctionBaseClass * superClusterErrorFunction
double maxSigmaIetaIetaBarrel
REF castTo() const
cast to a concrete type
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
void setPflowPreselectionFlag(reco::GsfElectron *ele)
const MvaOutput & mvaOutput() const
T const * product() const
const reco::GsfTrackRef gsfTrackRef
bool ecalDrivenEcalEnergyFromClassBasedParameterization
void ele_convert(const Type1 &obj1, Type2 &obj2)
void setMVAOutputs(const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaOutput > &mvaOutputs)
T const * product() const
float hcalDepth2OverEcalBc
bool calculateTSOS(const MultiTrajectoryStateTransform *, GsfConstraintAtVertex *)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
virtual GsfElectronCoreRef core() const
float deltaEtaEleClusterAtCalo
return(e1-e2)*(e1-e2)+dp *dp
double mva(const reco::GsfElectron &myElectron, const edm::Event &evt)
double getPtTracks(const reco::GsfElectron *) const
TrajectoryStateOnSurface seedTSOS
float hcalDepth1OverEcalBc
void refineWithPflow(reco::GsfElectron &)
void setIsolation03(const IsolationVariables &dr03)
ESHandle< TrackerGeometry > geometry
edm::Handle< reco::GsfTrackCollection > originalGsfTracks
void applyEcalRegression(reco::GsfElectron &electron, const edm::Handle< reco::VertexCollection > &vertices, const edm::Handle< EcalRecHitCollection > &rechitsEB, const edm::Handle< EcalRecHitCollection > &rechitsEE) const
float eEleClusterOverPout
EgammaTowerIsolation * hadDepth2Isolation04
void setVetoClustered(bool b=true)
void setPfSuperClusterFbrem(float fbrem)
static std::atomic< unsigned int > counter
const reco::GsfElectronCoreRef coreRef
float deltaPhiEleClusterAtCalo
edm::Handle< reco::TrackCollection > currentCtfTracks
double getTowerEtSum(const reco::Candidate *cand, const std::vector< CaloTowerDetId > *detIdToExclude=0) const
edm::ESHandle< CaloGeometry > caloGeom
EcalClusterFunctionBaseClass * crackCorrectionFunction
void removeAmbiguousElectrons()
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
void displayInternalElectrons(const std::string &title) const
void setPassPflowPreselection(bool flag)
EgammaRecHitIsolation * ecalEndcapIsol04
void removeNotPreselectedElectrons()
const reco::SuperClusterRef superClusterRef
TrajectoryStateOnSurface eleTSOS
float deltaPhiSeedClusterAtCalo
const Point & position() const
position
TrajectoryStateOnSurface outTSOS
RegressionHelper * regHelper
ElectronData(const reco::GsfElectronCoreRef &core, const reco::BeamSpot &bs)
void copyElectrons(reco::GsfElectronCollection &)
ProductID id() const
Accessor for product ID.
ElectronTkIsolation * tkIsolation04
volatile std::atomic< bool > shutdown_flag false
ElectronData * electronData_
edm::ESHandle< TrackerGeometry > trackerHandle
void setAmbiguityData(bool ignoreNotPreselected=true)
IsolationValueMaps edIsolationValues
T const * get() const
Returns C++ pointer to the item.
virtual float pt() const GCC11_FINAL
transverse momentum
uint32_t getHitPattern(int position) const
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
virtual void init(const edm::EventSetup &es)=0
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
GlobalVector vtxMomWithConstraint
int ietaAbs() const
get the absolute value of the crystal ieta
void classBasedParameterizationUncertainty(reco::GsfElectron &)
void checkSetup(const edm::EventSetup &)
edm::Handle< CaloTowerCollection > towers
void calculateMode(const MultiTrajectoryStateMode *mtsMode)
math::PtEtaPhiELorentzVectorF LorentzVector
Global3DVector GlobalVector
void checkSetup(const edm::EventSetup &)
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
TrajectoryStateOnSurface vtxTSOS
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
bool ecalDrivenSeed() const
static bool stripTIBHitFilter(uint32_t pattern)
Candidate::LorentzVector calculateMomentum()
bool passingPflowPreselection() const
const reco::BeamSpot beamSpot