44 #include <Math/Point3D.h>
51 using namespace reco ;
112 : inputCfg(inputConfig),
113 strategyCfg(strategyConfig),
115 cutsCfgPflow(cutsConfigPflow),
117 recHitsCfg(recHitsConfig),
120 superClusterErrorFunction(superClusterErrorFunc),
121 crackCorrectionFunction(crackCorrectionFunc),
131 delete hcalHelperPflow ;
132 delete sElectronMVAEstimator;
133 delete iElectronMVAEstimator;
166 : cacheIDGeom(0), cacheIDTopo(0), cacheIDTDGeom(0), cacheIDMagField(0),
173 delete constraintAtVtx ;
174 delete mtsTransform ;
193 void retreiveOriginalTrackCollections
229 :
event(0), beamspot(0),
230 originalCtfTrackCollectionRetreived(
false),
231 originalGsfTrackCollectionRetreived(
false),
232 tkIsolation03(0), tkIsolation04(0),
233 hadDepth1Isolation03(0), hadDepth1Isolation04(0),
234 hadDepth2Isolation03(0), hadDepth2Isolation04(0),
235 hadDepth1Isolation03Bc(0), hadDepth1Isolation04Bc(0),
236 hadDepth2Isolation03Bc(0), hadDepth2Isolation04Bc(0),
237 ecalBarrelIsol03(0), ecalBarrelIsol04(0),
238 ecalEndcapIsol03(0), ecalEndcapIsol04(0)
245 delete tkIsolation03 ;
246 delete tkIsolation04 ;
247 delete hadDepth1Isolation03 ;
248 delete hadDepth1Isolation04 ;
249 delete hadDepth2Isolation03 ;
250 delete hadDepth2Isolation04 ;
251 delete hadDepth1Isolation03Bc ;
252 delete hadDepth1Isolation04Bc ;
253 delete hadDepth2Isolation03Bc ;
254 delete hadDepth2Isolation04Bc ;
255 delete ecalBarrelIsol03 ;
256 delete ecalBarrelIsol04 ;
257 delete ecalEndcapIsol03 ;
258 delete ecalEndcapIsol04 ;
260 GsfElectronPtrCollection::const_iterator it ;
269 if ((!originalCtfTrackCollectionRetreived)&&(ctfTrack.
isNonnull()))
271 event->get(ctfTrack.
id(),originalCtfTracks) ;
272 originalCtfTrackCollectionRetreived =
true ;
274 if ((!originalGsfTrackCollectionRetreived)&&(gsfTrack.
isNonnull()))
276 event->get(gsfTrack.
id(),originalGsfTracks) ;
277 originalGsfTrackCollectionRetreived =
true ;
329 gsfTrackRef(coreRef->gsfTrack()),
330 superClusterRef(coreRef->superCluster()),
331 ctfTrackRef(coreRef->ctfTrack()), shFracInnerHits(coreRef->ctfGsfOverlap()),
340 if (!ctfTrackRef.isNull())
return ;
344 shFracInnerHits = 0 ;
351 TrackCollection::const_iterator ctfTkIter ;
352 for (ctfTkIter = ctfTrackCollection->begin(), counter = 0;
353 ctfTkIter != ctfTrackCollection->end(); ctfTkIter++, counter++)
355 double dEta = gsfTrackRef->eta() - ctfTkIter->eta() ;
356 double dPhi = gsfTrackRef->phi() - ctfTkIter->phi() ;
357 double pi = acos(-1.);
361 if (
sqrt(dEta*dEta + dPhi*dPhi) > 0.3) continue ;
363 unsigned int shared = 0 ;
364 int gsfHitCounter = 0 ;
365 int numGsfInnerHits = 0 ;
366 int numCtfInnerHits = 0 ;
372 for (elHitsIt = gsfTrackRef->recHitsBegin();
373 elHitsIt != gsfTrackRef->recHitsEnd();
374 elHitsIt++, gsfHitCounter++)
376 if (!((**elHitsIt).isValid()))
380 uint32_t gsfHit = gsfHitPattern.
getHitPattern(HitPattern::TRACK_HITS, gsfHitCounter) ;
381 if (!(HitPattern::pixelHitFilter(gsfHit)
382 || HitPattern::stripTIBHitFilter(gsfHit)
383 || HitPattern::stripTIDHitFilter(gsfHit))){
389 int ctfHitsCounter = 0 ;
390 numCtfInnerHits = 0 ;
392 for (ctfHitsIt = ctfTkIter->recHitsBegin();
393 ctfHitsIt != ctfTkIter->recHitsEnd();
394 ctfHitsIt++, ctfHitsCounter++ )
396 if(!((**ctfHitsIt).isValid()))
399 uint32_t ctfHit = ctfHitPattern.
getHitPattern(HitPattern::TRACK_HITS, ctfHitsCounter);
400 if(!(HitPattern::pixelHitFilter(ctfHit)
401 || HitPattern::stripTIBHitFilter(ctfHit)
402 || HitPattern::stripTIDHitFilter(ctfHit)))
419 if ((numGsfInnerHits==0)||(numCtfInnerHits==0))
422 if ( static_cast<float>(shared)/
min(numGsfInnerHits,numCtfInnerHits) > shFracInnerHits )
424 shFracInnerHits =
static_cast<float>(shared)/
min(numGsfInnerHits, numCtfInnerHits);
425 ctfTrackRef =
TrackRef(currentCtfTracks,counter);
445 int chargeGsf = gsfTrackRef->charge() ;
447 info.
isGsfCtfConsistent = (ctfTrackRef.isNonnull()&&((chargeGsf*ctfTrackRef->charge())>0)) ;
454 { charge = ctfTrackRef->charge() ; }
463 float dphimin = 1.e30 ;
464 for (
CaloCluster_iterator bc=superClusterRef->clustersBegin(); bc!=superClusterRef->clustersEnd(); bc++)
466 GlobalPoint posclu((*bc)->position().x(),(*bc)->position().y(),(*bc)->position().z()) ;
468 if (!tempTSOS.isValid()) tempTSOS=outTSOS ;
486 if (!innTSOS.isValid())
return false;
493 if (!vtxTSOS.isValid()) vtxTSOS=innTSOS;
497 if (!outTSOS.isValid())
return false;
501 GlobalPoint(superClusterRef->seed()->position().x(),
502 superClusterRef->seed()->position().y(),
503 superClusterRef->seed()->position().z()));
504 if (!seedTSOS.isValid()) seedTSOS=outTSOS;
508 if (!sclTSOS.isValid()) sclTSOS=outTSOS;
535 double scale = superClusterRef->energy()/vtxMom.mag() ;
538 superClusterRef->energy() ) ;
546 int detector = seedXtalId.
subdetId() ;
551 std::vector<int> recHitFlagsToBeExcluded ;
552 std::vector<int> recHitSeverityToBeExcluded ;
566 std::vector<float> covariances = EcalClusterTools::covariances(seedCluster,recHits,topology,geometry) ;
567 std::vector<float> localCovariances = EcalClusterTools::localCovariances(seedCluster,recHits,topology) ;
571 showerShape.
e1x5 = EcalClusterTools::e1x5(seedCluster,recHits,topology) ;
572 showerShape.
e2x5Max = EcalClusterTools::e2x5Max(seedCluster,recHits,topology) ;
573 showerShape.
e5x5 = EcalClusterTools::e5x5(seedCluster,recHits,topology) ;
574 showerShape.
r9 = EcalClusterTools::e3x3(seedCluster,recHits,topology)/theClus->rawEnergy() ;
599 int detector = seedXtalId.
subdetId() ;
604 std::vector<int> recHitFlagsToBeExcluded ;
605 std::vector<int> recHitSeverityToBeExcluded ;
667 :
generalData_(
new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,recHitsCfg,superClusterErrorFunction,crackCorrectionFunction,mva_NIso_Cfg,mva_Iso_Cfg,regCfg)),
683 bool updateField(
false);
690 bool updateGeometry(
false);
692 updateGeometry =
true;
697 if ( updateField || updateGeometry ) {
739 GsfElectronPtrCollection::const_iterator it ;
744 { outEle.push_back(**it) ; }
750 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected event data" ; }
778 float extRadiusSmall=0.3, extRadiusLarge=0.4 ;
784 float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
786 int egHcalDepth1=1, egHcalDepth2=2;
821 std::vector<edm::InputTag> inputTagIsoVals;
829 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
836 inputTagIsoVals.clear();
843 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
852 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"lacking event data" ; }
859 LogTrace(
"GsfElectronAlgo") <<
"========== " << title <<
" ==========";
862 GsfElectronPtrCollection::const_iterator it ;
865 LogTrace(
"GsfElectronAlgo") <<
"Electron with charge, pt, eta, phi: " << (*it)->charge() <<
" , "
866 << (*it)->pt() <<
" , " << (*it)->eta() <<
" , " << (*it)->phi();
868 LogTrace(
"GsfElectronAlgo") <<
"=================================================";
874 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected electron data" ; }
877 for (
unsigned int i=0 ;
i<coreCollection->size() ; ++
i )
881 bool coreFound =
false ;
882 GsfElectronPtrCollection::const_iterator itrEle ;
888 if ((*itrEle)->core()==coreRef)
894 if (coreFound) continue ;
897 if (coreRef->superCluster().
isNull())
continue ;
918 GsfElectronCollection::const_iterator oldElectron ;
920 ( oldElectron = oldElectrons->begin() ;
921 oldElectron != oldElectrons->end() ;
925 const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack() ;
927 for ( icore=0 ; icore<newCores->size() ; ++icore )
929 if (oldElectronGsfTrackRef==(*newCores)[icore].gsfTrack())
946 GsfElectronCollection::const_iterator pfElectron, edElectron ;
947 unsigned int edIndex, pfIndex ;
949 GsfElectronPtrCollection::iterator el ;
970 ( pfIndex = 0, pfElectron = pfElectrons->begin() ; pfElectron != pfElectrons->end() ; pfIndex++, pfElectron++ )
972 if (pfElectron->gsfTrack()==(*el)->gsfTrack())
976 edm::LogWarning(
"GsfElectronProducer")<<
"associated pfGsfElectron already found" ;
991 (*el)->setPfIsolationVariables(isoVariables);
995 (*el)->setMvaInput(pfElectron->mvaInput()) ;
996 (*el)->setMvaOutput(pfElectron->mvaOutput()) ;
997 if ((*el)->ecalDrivenSeed())
998 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
false) ; }
1000 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
true) ; }
1001 double noCutMin = -999999999. ;
1002 if ((*el)->mva_e_pi()<noCutMin) {
throw cms::Exception(
"GsfElectronAlgo|UnexpectedMvaValue")<<
"unexpected MVA value: "<<(*el)->mva_e_pi() ; }
1011 edIndex = 0, edElectron = edElectrons->begin() ;
1012 while ((found ==
false)&&(edElectron != edElectrons->end()))
1014 if (edElectron->gsfTrack()==(*el)->gsfTrack())
1027 (*el)->setPfIsolationVariables(isoVariables);
1039 if (!((*el)->parentSuperCluster().isNull()))
1043 (*el)->setPfShowerShape(pflowShowerShape) ;
1045 else if ((*el)->passingPflowPreselection())
1046 {
edm::LogError(
"GsfElectronCoreProducer")<<
"Preselected tracker driven GsfTrack with no associated pflow SuperCluster." ; }
1053 if (sc->clustersSize()>1)
1056 (*el)->setPfSuperClusterFbrem((sc->energy()-(*first)->energy())/sc->energy()) ;
1059 { (*el)->setPfSuperClusterFbrem(0.) ; }
1075 return passmva && passCutBased;
1080 return passCutBased || passPF || passmva;
1084 return passCutBased || passPF;
1096 LogTrace(
"GsfElectronAlgo")<<
"========== removed not preselected "<<ei<<
"/"<<emax<<
"==========" ;
1111 bool eg = ele->
core()->ecalDrivenSeed() ;
1112 bool pf = ele->
core()->trackerDrivenSeed() && !ele->
core()->ecalDrivenSeed() ;
1114 if (eg&&pf) {
throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<
"An electron cannot be both egamma and purely pflow" ; }
1115 if ((!eg)&&(!pf)) {
throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<
"An electron cannot be neither egamma nor purely pflow" ; }
1121 double etValue = ele->
superCluster()->energy()/cosh(etaValue) ;
1122 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue ;
1125 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
1129 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue ;
1134 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
1141 bool HoEveto =
false ;
1145 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
1149 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta ;
1152 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
1156 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
1159 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
1165 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
1171 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
1179 {
throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed")<<
"The GsfTrack seed is not an ElectronSeed ?!" ; }
1181 {
if (elseed->subDet2()==6)
return ; }
1186 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied" ;
1188 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied" ;
1196 if (ele->
core()->ecalDrivenSeed())
1202 {
LogTrace(
"GsfElectronAlgo") <<
"Main mva criterion is satisfied" ; }
1225 GsfElectronPtrCollection::iterator el ;
1231 std::map<reco::GsfTrackRef,reco::GsfElectron::MvaInput>::const_iterator itcheck=mvaInputs.find((*el)->gsfTrack());
1232 (*el)->setMvaInput(itcheck->second);
1238 GsfElectronPtrCollection::iterator el ;
1248 mvaOutput.
mva_e_pi = mva_NIso_Value ;
1250 (*el)->setMvaOutput(mvaOutput);
1253 std::map<reco::GsfTrackRef,reco::GsfElectron::MvaOutput>::const_iterator itcheck=mvaOutputs.find((*el)->gsfTrack());
1254 (*el)->setMvaOutput(itcheck->second);
1342 int detector = seedXtalId.
subdetId() ;
1373 {
throw cms::Exception(
"GsfElectronAlgo|UnknownXtalRegion")<<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1403 ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1407 conversionVars.
flags = conversionInfo.
flag() ;
1408 conversionVars.
dist = conversionInfo.
dist() ;
1409 conversionVars.
dcot = conversionInfo.
dcot() ;
1411 if ((conversionVars.
flags==0)
or(conversionVars.
flags==1))
1413 else if ((conversionVars.
flags==2)
or(conversionVars.
flags==3))
1424 tcMatching, tkExtra, ctfInfo,
1425 fiducialFlags,showerShape, full5x5_showerShape,
1429 ele->
setP4(GsfElectron::P4_FROM_SUPER_CLUSTER,momentum,0,
true) ;
1445 if (sc->clustersSize()>1)
1447 float pf_fbrem =( sc->energy() - cl->energy() ) / sc->energy();
1476 if (ele->
core()->ecalDrivenSeed())
1492 if (ele->
core()->ecalDrivenSeed())
1529 LogTrace(
"GsfElectronAlgo")<<
"Constructed new electron with energy "<< ele->
p4().e() ;
1544 GsfElectronPtrCollection::iterator e1, e2 ;
1558 (*e1)->clearAmbiguousGsfTracks() ;
1559 (*e1)->setAmbiguous(
false) ;
1572 GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
1573 for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
1574 gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
1577 if (gsfPfRecTrack->gsfTrackRef()==(*e1)->gsfTrack())
1581 edm::LogWarning(
"GsfElectronAlgo")<<
"associated gsfPfRecTrack already found" ;
1586 const std::vector<reco::GsfPFRecTrackRef> & duplicates(gsfPfRecTrack->convBremGsfPFRecTrackRef()) ;
1587 std::vector<reco::GsfPFRecTrackRef>::const_iterator
duplicate ;
1588 for ( duplicate = duplicates.begin() ; duplicate != duplicates.end() ; duplicate ++ )
1589 { (*e1)->addAmbiguousGsfTrack((*duplicate)->gsfTrackRef()) ; }
1603 if ((*e1)->ambiguous())
continue ;
1604 if ( ignoreNotPreselected && !
isPreselected(*e1) )
continue ;
1609 <<
"Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1610 <<
", cluster " << scRef1.
get()
1611 <<
" & track " << (*e1)->gsfTrack().get() ;
1618 if ((*e2)->ambiguous())
continue ;
1619 if ( ignoreNotPreselected && !
isPreselected(*e2) )
continue ;
1625 bool sameCluster =
false ;
1627 { sameCluster = (scRef1==scRef2) ; }
1645 <<
"Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1646 <<
", cluster " << scRef2.
get()
1647 <<
" and track " << (*e2)->gsfTrack().get() ;
1648 (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1649 (*e2)->setAmbiguous(
true) ;
1651 else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1654 <<
"Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1655 <<
", cluster " << scRef2.
get()
1656 <<
" and track " << (*e2)->gsfTrack().get() ;
1657 (*e2)->setAmbiguous(
true) ;
1670 LogTrace(
"GsfElectronAlgo")<<
"========== remove ambiguous "<<ei<<
"/"<<emax<<
"==========" ;
1671 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
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 &mva_NIso_Cfg, const ElectronMVAEstimator::Configuration &mva_Iso_Cfg, const RegressionHelper::Configuration &)
static bool isNextToEtaBoundary(EBDetId id)
EgammaTowerIsolation * hadDepth1Isolation04Bc
reco::GsfTrackRef conversionPartnerGsfTk() const
bool originalGsfTrackCollectionRetreived
void setPassCutBasedPreselection(bool flag)
bool isNonnull() const
Checks for non-null.
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
virtual float pt() const
transverse momentum
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
ProductID id() const
Accessor for product ID.
edm::ESHandle< CaloTopology > caloTopo
void doFlagChecks(const std::vector< int > &v)
reco::TrackRef conversionPartnerCtfTk() const
void setSuperClusterFbrem(float fbrem)
CaloClusterPtr electronCluster
EgammaRecHitIsolation * ecalBarrelIsol04
TrajectoryStateOnSurface constrainedVtxTSOS
virtual float getValue(const reco::BasicCluster &, const EcalRecHitCollection &) const =0
const RegressionHelper::Configuration regCfg
bool isGsfCtfScPixConsistent
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
ElectronTkIsolation * tkIsolation03
void setUseNumCrystals(bool b=true)
float deltaEtaSuperClusterTrackAtVtx() const
std::vector< int > recHitSeverityToBeExcludedBarrel
void setCorrectedEcalEnergyError(float newEnergyError)
float sigmaIetaIeta() const
float eSeedClusterOverPout
static const boost::regex duplicate("duplicateIOV[[:print:]]+?[S|s]ince[=| ]([[:alnum:]]+?);.*")
void calculateShowerShape_full5x5(const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
uint16_t hitPattern[ARRAY_LENGTH]
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 &)
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 ;
T const * get() const
Returns C++ pointer to the item.
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
bool isNull() const
Checks for null.
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
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 &mva_NIso_Cfg, const ElectronMVAEstimator::Configuration &mva_Iso_Cfg, const RegressionHelper::Configuration ®Cfg)
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
T const * product() const
EcalClusterFunctionBaseClass * superClusterErrorFunction
REF castTo() const
cast to a concrete type
double maxSigmaIetaIetaBarrel
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)
float hcalDepth2OverEcalBc
bool calculateTSOS(const MultiTrajectoryStateTransform *, GsfConstraintAtVertex *)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
virtual GsfElectronCoreRef core() const
float deltaEtaEleClusterAtCalo
double mva(const reco::GsfElectron &myElectron, const edm::Event &evt)
double mva(const reco::GsfElectron &myElectron, int nvertices=0)
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
ElectronMVAEstimator * iElectronMVAEstimator
ElectronData(const reco::GsfElectronCoreRef &core, const reco::BeamSpot &bs)
void copyElectrons(reco::GsfElectronCollection &)
ElectronTkIsolation * tkIsolation04
volatile std::atomic< bool > shutdown_flag false
ElectronData * electronData_
uint16_t getHitPattern(HitCategory category, int position) const
edm::ESHandle< TrackerGeometry > trackerHandle
void setAmbiguityData(bool ignoreNotPreselected=true)
IsolationValueMaps edIsolationValues
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
Candidate::LorentzVector calculateMomentum()
bool passingPflowPreselection() const
const reco::BeamSpot beamSpot