44 #include <Math/Point3D.h>
51 using namespace reco ;
111 : inputCfg(inputConfig),
112 strategyCfg(strategyConfig),
114 cutsCfgPflow(cutsConfigPflow),
116 recHitsCfg(recHitsConfig),
119 superClusterErrorFunction(superClusterErrorFunc),
120 crackCorrectionFunction(crackCorrectionFunc),
130 delete hcalHelperPflow ;
165 : cacheIDGeom(0), cacheIDTopo(0), cacheIDTDGeom(0), cacheIDMagField(0),
172 delete constraintAtVtx ;
173 delete mtsTransform ;
192 void retreiveOriginalTrackCollections
229 originalCtfTrackCollectionRetreived(
false),
230 originalGsfTrackCollectionRetreived(
false),
231 tkIsolation03(0), tkIsolation04(0),
232 hadDepth1Isolation03(0), hadDepth1Isolation04(0),
233 hadDepth2Isolation03(0), hadDepth2Isolation04(0),
234 hadDepth1Isolation03Bc(0), hadDepth1Isolation04Bc(0),
235 hadDepth2Isolation03Bc(0), hadDepth2Isolation04Bc(0),
236 ecalBarrelIsol03(0), ecalBarrelIsol04(0),
237 ecalEndcapIsol03(0), ecalEndcapIsol04(0)
244 delete tkIsolation03 ;
245 delete tkIsolation04 ;
246 delete hadDepth1Isolation03 ;
247 delete hadDepth1Isolation04 ;
248 delete hadDepth2Isolation03 ;
249 delete hadDepth2Isolation04 ;
250 delete hadDepth1Isolation03Bc ;
251 delete hadDepth1Isolation04Bc ;
252 delete hadDepth2Isolation03Bc ;
253 delete hadDepth2Isolation04Bc ;
254 delete ecalBarrelIsol03 ;
255 delete ecalBarrelIsol04 ;
256 delete ecalEndcapIsol03 ;
257 delete ecalEndcapIsol04 ;
259 GsfElectronPtrCollection::const_iterator it ;
260 for ( it = electrons->begin() ; it != electrons->end() ; it++ )
268 if ((!originalCtfTrackCollectionRetreived)&&(ctfTrack.
isNonnull()))
270 event->get(ctfTrack.
id(),originalCtfTracks) ;
271 originalCtfTrackCollectionRetreived =
true ;
273 if ((!originalGsfTrackCollectionRetreived)&&(gsfTrack.
isNonnull()))
275 event->get(gsfTrack.
id(),originalGsfTracks) ;
276 originalGsfTrackCollectionRetreived =
true ;
328 gsfTrackRef(coreRef->gsfTrack()),
329 superClusterRef(coreRef->superCluster()),
330 ctfTrackRef(coreRef->ctfTrack()), shFracInnerHits(coreRef->ctfGsfOverlap()),
339 if (!ctfTrackRef.isNull())
return ;
343 shFracInnerHits = 0 ;
350 TrackCollection::const_iterator ctfTkIter ;
351 for (ctfTkIter = ctfTrackCollection->begin(), counter = 0;
352 ctfTkIter != ctfTrackCollection->end(); ctfTkIter++, counter++)
354 double dEta = gsfTrackRef->eta() - ctfTkIter->eta() ;
355 double dPhi = gsfTrackRef->phi() - ctfTkIter->phi() ;
356 double pi = acos(-1.);
360 if (
sqrt(dEta*dEta + dPhi*dPhi) > 0.3) continue ;
362 unsigned int shared = 0 ;
363 int gsfHitCounter = 0 ;
364 int numGsfInnerHits = 0 ;
365 int numCtfInnerHits = 0 ;
371 for (elHitsIt = gsfTrackRef->recHitsBegin();
372 elHitsIt != gsfTrackRef->recHitsEnd();
373 elHitsIt++, gsfHitCounter++)
375 if (!((**elHitsIt).isValid()))
379 uint32_t gsfHit = gsfHitPattern.
getHitPattern(HitPattern::TRACK_HITS, gsfHitCounter) ;
380 if (!(HitPattern::pixelHitFilter(gsfHit)
381 || HitPattern::stripTIBHitFilter(gsfHit)
382 || HitPattern::stripTIDHitFilter(gsfHit))){
388 int ctfHitsCounter = 0 ;
389 numCtfInnerHits = 0 ;
391 for (ctfHitsIt = ctfTkIter->recHitsBegin();
392 ctfHitsIt != ctfTkIter->recHitsEnd();
393 ctfHitsIt++, ctfHitsCounter++ )
395 if(!((**ctfHitsIt).isValid()))
398 uint32_t ctfHit = ctfHitPattern.
getHitPattern(HitPattern::TRACK_HITS, ctfHitsCounter);
399 if(!(HitPattern::pixelHitFilter(ctfHit)
400 || HitPattern::stripTIBHitFilter(ctfHit)
401 || HitPattern::stripTIDHitFilter(ctfHit)))
418 if ((numGsfInnerHits==0)||(numCtfInnerHits==0))
421 if ( static_cast<float>(shared)/
min(numGsfInnerHits,numCtfInnerHits) > shFracInnerHits )
423 shFracInnerHits =
static_cast<float>(shared)/
min(numGsfInnerHits, numCtfInnerHits);
424 ctfTrackRef =
TrackRef(currentCtfTracks,counter);
444 int chargeGsf = gsfTrackRef->charge() ;
446 info.
isGsfCtfConsistent = (ctfTrackRef.isNonnull()&&((chargeGsf*ctfTrackRef->charge())>0)) ;
453 { charge = ctfTrackRef->charge() ; }
462 float dphimin = 1.e30 ;
463 for (
CaloCluster_iterator bc=superClusterRef->clustersBegin(); bc!=superClusterRef->clustersEnd(); bc++)
465 GlobalPoint posclu((*bc)->position().x(),(*bc)->position().y(),(*bc)->position().z()) ;
467 if (!tempTSOS.isValid()) tempTSOS=outTSOS ;
485 if (!innTSOS.isValid())
return false;
492 if (!vtxTSOS.isValid()) vtxTSOS=innTSOS;
496 if (!outTSOS.isValid())
return false;
500 GlobalPoint(superClusterRef->seed()->position().x(),
501 superClusterRef->seed()->position().y(),
502 superClusterRef->seed()->position().z()));
503 if (!seedTSOS.isValid()) seedTSOS=outTSOS;
507 if (!sclTSOS.isValid()) sclTSOS=outTSOS;
534 double scale = superClusterRef->energy()/vtxMom.mag() ;
537 superClusterRef->energy() ) ;
545 int detector = seedXtalId.
subdetId() ;
550 std::vector<int> recHitFlagsToBeExcluded ;
551 std::vector<int> recHitSeverityToBeExcluded ;
565 std::vector<float> covariances = EcalClusterTools::covariances(seedCluster,recHits,topology,geometry) ;
566 std::vector<float> localCovariances = EcalClusterTools::localCovariances(seedCluster,recHits,topology) ;
570 showerShape.
e1x5 = EcalClusterTools::e1x5(seedCluster,recHits,topology) ;
571 showerShape.
e2x5Max = EcalClusterTools::e2x5Max(seedCluster,recHits,topology) ;
572 showerShape.
e5x5 = EcalClusterTools::e5x5(seedCluster,recHits,topology) ;
573 showerShape.
r9 = EcalClusterTools::e3x3(seedCluster,recHits,topology)/theClus->rawEnergy() ;
598 int detector = seedXtalId.
subdetId() ;
603 std::vector<int> recHitFlagsToBeExcluded ;
604 std::vector<int> recHitSeverityToBeExcluded ;
666 :
generalData_(
new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,recHitsCfg,superClusterErrorFunction,crackCorrectionFunction,mva_NIso_Cfg,mva_Iso_Cfg,regCfg)),
682 bool updateField(
false);
689 bool updateGeometry(
false);
691 updateGeometry =
true;
696 if ( updateField || updateGeometry ) {
738 GsfElectronPtrCollection::const_iterator it ;
743 { outEle.push_back(**it) ; }
749 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected event data" ; }
777 float extRadiusSmall=0.3, extRadiusLarge=0.4 ;
783 float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
785 int egHcalDepth1=1, egHcalDepth2=2;
820 std::vector<edm::InputTag> inputTagIsoVals;
828 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
835 inputTagIsoVals.clear();
842 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
851 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"lacking event data" ; }
858 LogTrace(
"GsfElectronAlgo") <<
"========== " << title <<
" ==========";
861 GsfElectronPtrCollection::const_iterator it ;
864 LogTrace(
"GsfElectronAlgo") <<
"Electron with charge, pt, eta, phi: " << (*it)->charge() <<
" , "
865 << (*it)->pt() <<
" , " << (*it)->eta() <<
" , " << (*it)->phi();
867 LogTrace(
"GsfElectronAlgo") <<
"=================================================";
873 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected electron data" ; }
876 for (
unsigned int i=0 ;
i<coreCollection->size() ; ++
i )
880 bool coreFound =
false ;
881 GsfElectronPtrCollection::const_iterator itrEle ;
887 if ((*itrEle)->core()==coreRef)
893 if (coreFound) continue ;
896 if (coreRef->superCluster().
isNull())
continue ;
917 GsfElectronCollection::const_iterator oldElectron ;
919 ( oldElectron = oldElectrons->begin() ;
920 oldElectron != oldElectrons->end() ;
924 const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack() ;
926 for ( icore=0 ; icore<newCores->size() ; ++icore )
928 if (oldElectronGsfTrackRef==(*newCores)[icore].gsfTrack())
945 GsfElectronCollection::const_iterator pfElectron, edElectron ;
946 unsigned int edIndex, pfIndex ;
948 GsfElectronPtrCollection::iterator el ;
958 ( pfIndex = 0, pfElectron = pfElectrons->begin() ; pfElectron != pfElectrons->end() ; pfIndex++, pfElectron++ )
960 if (pfElectron->gsfTrack()==(*el)->gsfTrack())
964 edm::LogWarning(
"GsfElectronProducer")<<
"associated pfGsfElectron already found" ;
979 (*el)->setPfIsolationVariables(isoVariables);
983 (*el)->setMvaInput(pfElectron->mvaInput()) ;
984 (*el)->setMvaOutput(pfElectron->mvaOutput()) ;
985 if ((*el)->ecalDrivenSeed())
986 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
false) ; }
988 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
true) ; }
989 double noCutMin = -999999999. ;
990 if ((*el)->mva_e_pi()<noCutMin) {
throw cms::Exception(
"GsfElectronAlgo|UnexpectedMvaValue")<<
"unexpected MVA value: "<<(*el)->mva_e_pi() ; }
999 edIndex = 0, edElectron = edElectrons->begin() ;
1000 while ((found ==
false)&&(edElectron != edElectrons->end()))
1002 if (edElectron->gsfTrack()==(*el)->gsfTrack())
1015 (*el)->setPfIsolationVariables(isoVariables);
1037 return passmva && passCutBased;
1042 return passCutBased || passPF || passmva;
1046 return passCutBased || passPF;
1058 LogTrace(
"GsfElectronAlgo")<<
"========== removed not preselected "<<ei<<
"/"<<emax<<
"==========" ;
1073 bool eg = ele->
core()->ecalDrivenSeed() ;
1074 bool pf = ele->
core()->trackerDrivenSeed() && !ele->
core()->ecalDrivenSeed() ;
1076 if (eg&&pf) {
throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<
"An electron cannot be both egamma and purely pflow" ; }
1077 if ((!eg)&&(!pf)) {
throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<
"An electron cannot be neither egamma nor purely pflow" ; }
1083 double etValue = ele->
superCluster()->energy()/cosh(etaValue) ;
1084 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue ;
1087 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
1091 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue ;
1096 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
1103 bool HoEveto =
false ;
1107 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
1111 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta ;
1114 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
1118 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
1121 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
1127 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
1133 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
1141 {
throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed")<<
"The GsfTrack seed is not an ElectronSeed ?!" ; }
1143 {
if (elseed->subDet2()==6)
return ; }
1148 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied" ;
1150 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied" ;
1158 if (ele->
core()->ecalDrivenSeed())
1164 {
LogTrace(
"GsfElectronAlgo") <<
"Main mva criterion is satisfied" ; }
1172 GsfElectronPtrCollection::iterator el ;
1178 std::map<reco::GsfTrackRef,reco::GsfElectron::MvaInput>::const_iterator itcheck=mvaInputs.find((*el)->gsfTrack());
1179 (*el)->setMvaInput(itcheck->second);
1184 const std::map<reco::GsfTrackRef,reco::GsfElectron::MvaOutput> & mvaOutputs)
1186 GsfElectronPtrCollection::iterator el ;
1196 mvaOutput.
mva_e_pi = mva_NIso_Value ;
1198 (*el)->setMvaOutput(mvaOutput);
1201 std::map<reco::GsfTrackRef,reco::GsfElectron::MvaOutput>::const_iterator itcheck=mvaOutputs.find((*el)->gsfTrack());
1202 (*el)->setMvaOutput(itcheck->second);
1290 int detector = seedXtalId.
subdetId() ;
1321 {
throw cms::Exception(
"GsfElectronAlgo|UnknownXtalRegion")<<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1351 ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1355 conversionVars.
flags = conversionInfo.
flag() ;
1356 conversionVars.
dist = conversionInfo.
dist() ;
1357 conversionVars.
dcot = conversionInfo.
dcot() ;
1359 if ((conversionVars.
flags==0)
or(conversionVars.
flags==1))
1361 else if ((conversionVars.
flags==2)
or(conversionVars.
flags==3))
1372 tcMatching, tkExtra, ctfInfo,
1373 fiducialFlags,showerShape, full5x5_showerShape,
1377 ele->
setP4(GsfElectron::P4_FROM_SUPER_CLUSTER,momentum,0,
true) ;
1393 if (sc->clustersSize()>1)
1395 float pf_fbrem =( sc->energy() - cl->energy() ) / sc->energy();
1422 if (ele->
core()->ecalDrivenSeed())
1438 if (ele->
core()->ecalDrivenSeed())
1486 LogTrace(
"GsfElectronAlgo")<<
"Constructed new electron with energy "<< ele->
p4().e() ;
1501 GsfElectronPtrCollection::iterator e1, e2 ;
1515 (*e1)->clearAmbiguousGsfTracks() ;
1516 (*e1)->setAmbiguous(
false) ;
1529 GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
1530 for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
1531 gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
1534 if (gsfPfRecTrack->gsfTrackRef()==(*e1)->gsfTrack())
1538 edm::LogWarning(
"GsfElectronAlgo")<<
"associated gsfPfRecTrack already found" ;
1543 const std::vector<reco::GsfPFRecTrackRef> & duplicates(gsfPfRecTrack->convBremGsfPFRecTrackRef()) ;
1544 std::vector<reco::GsfPFRecTrackRef>::const_iterator
duplicate ;
1545 for ( duplicate = duplicates.begin() ; duplicate != duplicates.end() ; duplicate ++ )
1546 { (*e1)->addAmbiguousGsfTrack((*duplicate)->gsfTrackRef()) ; }
1560 if ((*e1)->ambiguous())
continue ;
1561 if ( ignoreNotPreselected && !
isPreselected(*e1) )
continue ;
1566 <<
"Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1567 <<
", cluster " << scRef1.
get()
1568 <<
" & track " << (*e1)->gsfTrack().get() ;
1575 if ((*e2)->ambiguous())
continue ;
1576 if ( ignoreNotPreselected && !
isPreselected(*e2) )
continue ;
1582 bool sameCluster =
false ;
1584 { sameCluster = (scRef1==scRef2) ; }
1602 <<
"Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1603 <<
", cluster " << scRef2.
get()
1604 <<
" and track " << (*e2)->gsfTrack().get() ;
1605 (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1606 (*e2)->setAmbiguous(
true) ;
1608 else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1611 <<
"Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1612 <<
", cluster " << scRef2.
get()
1613 <<
" and track " << (*e2)->gsfTrack().get() ;
1614 (*e2)->setAmbiguous(
true) ;
1627 LogTrace(
"GsfElectronAlgo")<<
"========== remove ambiguous "<<ei<<
"/"<<emax<<
"==========" ;
1628 if ((*eitr)->ambiguous())
1650 sd1 = elseed->subDet1() ;
1651 sd2 = elseed->subDet2() ;
1652 dPhi1 = (ele->
charge()>0) ? elseed->dPhi1Pos() : elseed->dPhi1() ;
1653 dPhi2 = (ele->
charge()>0) ? elseed->dPhi2Pos() : elseed->dPhi2() ;
1654 dRz1 = (ele->
charge()>0) ? elseed->dRz1Pos () : elseed->dRz1 () ;
1655 dRz2 = (ele->
charge()>0) ? elseed->dRz2Pos () : elseed->dRz2 () ;
TrajectoryStateOnSurface constrainAtBeamSpot(const reco::GsfTrack &, const reco::BeamSpot &) const
(multi)TSOS after including the beamspot
CaloClusterPtr electronCluster() const
ElectronHcalHelper * hcalHelperPflow
void setPixelMatchInfomation(reco::GsfElectron *)
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 setMVAOutputs(const gsfAlgoHelpers::HeavyObjectCache *, const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaOutput > &mvaOutputs)
void setTrackFbrem(float fbrem)
edm::Handle< edm::ValueMap< float > > pfMva
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
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
void setPixelMatchDRz2(float dRz2)
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 &)
void setPixelMatchDPhi1(float dPhi1)
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)
void completeElectrons(const gsfAlgoHelpers::HeavyObjectCache *)
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
virtual double pt() const
transverse momentum
const StrategyConfiguration strategyCfg
ProductID id() const
Accessor for product ID.
void setPixelMatchSubdetectors(int sd1, int sd2)
edm::ESHandle< CaloTopology > caloTopo
void doFlagChecks(const std::vector< int > &v)
reco::TrackRef conversionPartnerCtfTk() const
void createElectron(const gsfAlgoHelpers::HeavyObjectCache *)
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 &)
virtual int charge() const
electric charge
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
void setPixelMatchDPhi2(float dPhi2)
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
bool isNull() const
Checks for null.
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)
float hcalDepth2OverEcalBc
bool calculateTSOS(const MultiTrajectoryStateTransform *, GsfConstraintAtVertex *)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
virtual GsfElectronCoreRef core() const
float deltaEtaEleClusterAtCalo
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)
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 &)
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 &)
void setPixelMatchDRz1(float dRz1)
edm::Handle< CaloTowerCollection > towers
std::unique_ptr< const ElectronMVAEstimator > iElectronMVAEstimator
void calculateMode(const MultiTrajectoryStateMode *mtsMode)
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
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