45 #include <Math/Point3D.h>
52 using namespace reco ;
102 : inputCfg(inputConfig),
103 strategyCfg(strategyConfig),
105 cutsCfgPflow(cutsConfigPflow),
107 recHitsCfg(recHitsConfig),
110 superClusterErrorFunction(superClusterErrorFunc),
111 crackCorrectionFunction(crackCorrectionFunc)
117 delete hcalHelperPflow ;
149 : cacheIDGeom(0), cacheIDTopo(0), cacheIDTDGeom(0), cacheIDMagField(0),
156 delete constraintAtVtx ;
157 delete mtsTransform ;
176 void retreiveOriginalTrackCollections
213 :
event(0), beamspot(0),
214 originalCtfTrackCollectionRetreived(
false),
215 originalGsfTrackCollectionRetreived(
false),
216 tkIsolation03(0), tkIsolation04(0),
217 hadDepth1Isolation03(0), hadDepth1Isolation04(0),
218 hadDepth2Isolation03(0), hadDepth2Isolation04(0),
219 ecalBarrelHitsMeta(0), ecalEndcapHitsMeta(0),
220 ecalBarrelIsol03(0), ecalBarrelIsol04(0),
221 ecalEndcapIsol03(0), ecalEndcapIsol04(0)
228 delete tkIsolation03 ;
229 delete tkIsolation04 ;
230 delete hadDepth1Isolation03 ;
231 delete hadDepth1Isolation04 ;
232 delete hadDepth2Isolation03 ;
233 delete hadDepth2Isolation04 ;
234 delete ecalBarrelHitsMeta ;
235 delete ecalEndcapHitsMeta ;
236 delete ecalBarrelIsol03 ;
237 delete ecalBarrelIsol04 ;
238 delete ecalEndcapIsol03 ;
239 delete ecalEndcapIsol04 ;
241 GsfElectronPtrCollection::const_iterator it ;
250 if ((!originalCtfTrackCollectionRetreived)&&(ctfTrack.
isNonnull()))
252 event->get(ctfTrack.
id(),originalCtfTracks) ;
253 originalCtfTrackCollectionRetreived =
true ;
255 if ((!originalGsfTrackCollectionRetreived)&&(gsfTrack.
isNonnull()))
257 event->get(gsfTrack.
id(),originalGsfTracks) ;
258 originalGsfTrackCollectionRetreived =
true ;
310 gsfTrackRef(coreRef->gsfTrack()),
311 superClusterRef(coreRef->superCluster()),
312 ctfTrackRef(coreRef->ctfTrack()), shFracInnerHits(coreRef->ctfGsfOverlap()),
321 if (!ctfTrackRef.isNull())
return ;
325 shFracInnerHits = 0 ;
329 const HitPattern & gsfHitPattern = gsfTrackRef->hitPattern() ;
331 unsigned int counter ;
332 TrackCollection::const_iterator ctfTkIter ;
333 for ( ctfTkIter = ctfTrackCollection->begin() , counter = 0 ;
334 ctfTkIter != ctfTrackCollection->end() ; ctfTkIter++, counter++ )
337 double dEta = gsfTrackRef->eta() - ctfTkIter->eta() ;
338 double dPhi = gsfTrackRef->phi() - ctfTkIter->phi() ;
339 double pi = acos(-1.);
343 if (
sqrt(dEta*dEta + dPhi*dPhi) > 0.3) continue ;
345 unsigned int shared = 0 ;
346 int gsfHitCounter = 0 ;
347 int numGsfInnerHits = 0 ;
348 int numCtfInnerHits = 0 ;
351 const HitPattern & ctfHitPattern = ctfTkIter->hitPattern() ;
354 for ( elHitsIt = gsfTrackRef->recHitsBegin() ;
355 elHitsIt != gsfTrackRef->recHitsEnd() ;
356 elHitsIt++, gsfHitCounter++ )
358 if (!((**elHitsIt).isValid()))
362 uint32_t gsfHit = gsfHitPattern.
getHitPattern(gsfHitCounter) ;
370 int ctfHitsCounter = 0 ;
371 numCtfInnerHits = 0 ;
373 for ( ctfHitsIt = ctfTkIter->recHitsBegin() ;
374 ctfHitsIt != ctfTkIter->recHitsEnd() ;
375 ctfHitsIt++, ctfHitsCounter++ )
377 if(!((**ctfHitsIt).isValid()))
380 uint32_t ctfHit = ctfHitPattern.
getHitPattern(ctfHitsCounter);
398 if ((numGsfInnerHits==0)||(numCtfInnerHits==0))
401 if ( static_cast<float>(shared)/
min(numGsfInnerHits,numCtfInnerHits) > shFracInnerHits )
403 shFracInnerHits =
static_cast<float>(shared)/
min(numGsfInnerHits, numCtfInnerHits);
404 ctfTrackRef =
TrackRef(currentCtfTracks,counter);
424 int chargeGsf = gsfTrackRef->charge() ;
426 info.
isGsfCtfConsistent = (ctfTrackRef.isNonnull()&&((chargeGsf*ctfTrackRef->charge())>0)) ;
433 { charge = ctfTrackRef->charge() ; }
442 float dphimin = 1.e30 ;
443 for (
CaloCluster_iterator bc=superClusterRef->clustersBegin(); bc!=superClusterRef->clustersEnd(); bc++)
445 GlobalPoint posclu((*bc)->position().x(),(*bc)->position().y(),(*bc)->position().z()) ;
447 if (!tempTSOS.isValid()) tempTSOS=outTSOS ;
465 if (!innTSOS.isValid())
return false;
472 if (!vtxTSOS.isValid()) vtxTSOS=innTSOS;
476 if (!outTSOS.isValid())
return false;
480 GlobalPoint(superClusterRef->seed()->position().x(),
481 superClusterRef->seed()->position().y(),
482 superClusterRef->seed()->position().z()));
483 if (!seedTSOS.isValid()) seedTSOS=outTSOS;
487 if (!sclTSOS.isValid()) sclTSOS=outTSOS;
514 double scale = superClusterRef->energy()/vtxMom.mag() ;
517 superClusterRef->energy() ) ;
525 int detector = seedXtalId.
subdetId() ;
530 std::vector<int> recHitFlagsToBeExcluded ;
531 std::vector<int> recHitSeverityToBeExcluded ;
546 std::vector<float> covariances =
EcalClusterTools::covariances(seedCluster,recHits,topology,geometry,recHitFlagsToBeExcluded,recHitSeverityToBeExcluded,severityLevelAlgo) ;
547 std::vector<float> localCovariances =
EcalClusterTools::localCovariances(seedCluster,recHits,topology,recHitFlagsToBeExcluded,recHitSeverityToBeExcluded,severityLevelAlgo) ;
551 showerShape.
e1x5 =
EcalClusterTools::e1x5(seedCluster,recHits,topology,recHitFlagsToBeExcluded,recHitSeverityToBeExcluded,severityLevelAlgo) ;
553 showerShape.
e5x5 =
EcalClusterTools::e5x5(seedCluster,recHits,topology,recHitFlagsToBeExcluded,recHitSeverityToBeExcluded,severityLevelAlgo) ;
554 showerShape.
r9 =
EcalClusterTools::e3x3(seedCluster,recHits,topology,recHitFlagsToBeExcluded,recHitSeverityToBeExcluded,severityLevelAlgo)/theClus->rawEnergy() ;
591 :
generalData_(
new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,recHitsCfg,superClusterErrorFunction,crackCorrectionFunction)),
607 bool updateField(
false);
614 bool updateGeometry(
false);
616 updateGeometry =
true;
621 if ( updateField || updateGeometry ) {
659 GsfElectronPtrCollection::const_iterator it ;
664 { outEle.push_back(**it) ; }
670 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected event data" ; }
697 float extRadiusSmall=0.3, extRadiusLarge=0.4 ;
703 float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
705 int egHcalDepth1=1, egHcalDepth2=2;
742 std::vector<edm::InputTag> inputTagIsoVals;
750 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
757 inputTagIsoVals.clear();
764 for (
size_t j = 0;
j<inputTagIsoVals.size(); ++
j) {
773 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"lacking event data" ; }
780 LogTrace(
"GsfElectronAlgo") <<
"========== " << title <<
" ==========";
783 GsfElectronPtrCollection::const_iterator it ;
786 LogTrace(
"GsfElectronAlgo") <<
"Electron with charge, pt, eta, phi: " << (*it)->charge() <<
" , "
787 << (*it)->pt() <<
" , " << (*it)->eta() <<
" , " << (*it)->phi();
789 LogTrace(
"GsfElectronAlgo") <<
"=================================================";
795 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected electron data" ; }
798 for (
unsigned int i=0 ;
i<coreCollection->size() ; ++
i )
802 bool coreFound =
false ;
803 GsfElectronPtrCollection::const_iterator itrEle ;
809 if ((*itrEle)->core()==coreRef)
815 if (coreFound) continue ;
818 if (coreRef->superCluster().
isNull())
continue ;
839 GsfElectronCollection::const_iterator oldElectron ;
841 ( oldElectron = oldElectrons->begin() ;
842 oldElectron != oldElectrons->end() ;
846 const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack() ;
848 for ( icore=0 ; icore<newCores->size() ; ++icore )
850 if (oldElectronGsfTrackRef==(*newCores)[icore].gsfTrack())
865 GsfElectronCollection::const_iterator pfElectron, edElectron ;
866 unsigned int edIndex, pfIndex ;
868 GsfElectronPtrCollection::iterator el ;
889 ( pfIndex = 0, pfElectron = pfElectrons->begin() ; pfElectron != pfElectrons->end() ; pfIndex++, pfElectron++ )
891 if (pfElectron->gsfTrack()==(*el)->gsfTrack())
895 edm::LogWarning(
"GsfElectronProducer")<<
"associated pfGsfElectron already found" ;
910 (*el)->setPfIsolationVariables(isoVariables);
914 (*el)->setMvaInput(pfElectron->mvaInput()) ;
915 (*el)->setMvaOutput(pfElectron->mvaOutput()) ;
916 if ((*el)->ecalDrivenSeed())
917 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
false) ; }
919 { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),
true) ; }
920 double noCutMin = -999999999. ;
921 if ((*el)->mva()<noCutMin) {
throw cms::Exception(
"GsfElectronAlgo|UnexpectedMvaValue")<<
"unexpected MVA value: "<<(*el)->mva() ; }
930 edIndex = 0, edElectron = edElectrons->begin() ;
931 while ((found ==
false)&&(edElectron != edElectrons->end()))
933 if (edElectron->gsfTrack()==(*el)->gsfTrack())
946 (*el)->setPfIsolationVariables(isoVariables);
958 if (!((*el)->pflowSuperCluster().isNull()))
962 (*el)->setPfShowerShape(pflowShowerShape) ;
964 else if ((*el)->passingPflowPreselection())
965 {
edm::LogError(
"GsfElectronCoreProducer")<<
"Preselected tracker driven GsfTrack with no associated pflow SuperCluster." ; }
972 if (sc->clustersSize()>1)
975 (*el)->setPfSuperClusterFbrem((sc->energy()-(*first)->energy())/sc->energy()) ;
978 { (*el)->setPfSuperClusterFbrem(0.) ; }
994 LogTrace(
"GsfElectronAlgo")<<
"========== removed not preselected "<<ei<<
"/"<<emax<<
"==========" ;
1008 bool eg = ele->
core()->ecalDrivenSeed() ;
1009 bool pf = ele->
core()->trackerDrivenSeed() && !ele->
core()->ecalDrivenSeed() ;
1010 if (eg&&pf) {
throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<
"An electron cannot be both egamma and purely pflow" ; }
1011 if ((!eg)&&(!pf)) {
throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<
"An electron cannot be neither egamma nor purely pflow" ; }
1016 double etValue = ele->
superCluster()->energy()/cosh(etaValue) ;
1017 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue ;
1020 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
1024 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue ;
1029 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
1036 bool HoEveto =
false ;
1040 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
1044 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta ;
1047 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
1051 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
1054 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
1060 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
1066 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
1074 {
throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed")<<
"The GsfTrack seed is not an ElectronSeed ?!" ; }
1076 {
if (elseed->subDet2()==6)
return ; }
1081 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied" ;
1083 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied" ;
1091 if (ele->
core()->ecalDrivenSeed())
1097 {
LogTrace(
"GsfElectronAlgo") <<
"Main mva criterion is satisfied" ; }
1201 int detector = seedXtalId.
subdetId() ;
1232 {
throw cms::Exception(
"GsfElectronAlgo|UnknownXtalRegion")<<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1260 ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1264 conversionVars.
flags = conversionInfo.
flag() ;
1265 conversionVars.
dist = conversionInfo.
dist() ;
1266 conversionVars.
dcot = conversionInfo.
dcot() ;
1268 if ((conversionVars.
flags==0)
or(conversionVars.
flags==1))
1270 else if ((conversionVars.
flags==2)
or(conversionVars.
flags==3))
1281 tcMatching, tkExtra, ctfInfo,
1282 fiducialFlags,showerShape,
1285 ele->
setP4(GsfElectron::P4_FROM_SUPER_CLUSTER,momentum,0,
true) ;
1299 if (sc->clustersSize()>1)
1316 if (ele->
core()->ecalDrivenSeed())
1330 if (ele->
core()->ecalDrivenSeed())
1364 LogTrace(
"GsfElectronAlgo")<<
"Constructed new electron with energy "<< ele->
p4().e() ;
1379 GsfElectronPtrCollection::iterator
e1,
e2 ;
1393 (*e1)->clearAmbiguousGsfTracks() ;
1394 (*e1)->setAmbiguous(
false) ;
1407 GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
1408 for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
1409 gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
1412 if (gsfPfRecTrack->gsfTrackRef()==(*e1)->gsfTrack())
1416 edm::LogWarning(
"GsfElectronAlgo")<<
"associated gsfPfRecTrack already found" ;
1421 const std::vector<reco::GsfPFRecTrackRef> & duplicates(gsfPfRecTrack->convBremGsfPFRecTrackRef()) ;
1422 std::vector<reco::GsfPFRecTrackRef>::const_iterator duplicate ;
1423 for ( duplicate = duplicates.begin() ; duplicate != duplicates.end() ; duplicate ++ )
1424 { (*e1)->addAmbiguousGsfTrack((*duplicate)->gsfTrackRef()) ; }
1438 if ((*e1)->ambiguous())
continue ;
1439 if ( ignoreNotPreselected && !
isPreselected(*e1) )
continue ;
1444 <<
"Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1445 <<
", cluster " << scRef1.
get()
1446 <<
" & track " << (*e1)->gsfTrack().get() ;
1453 if ((*e2)->ambiguous())
continue ;
1454 if ( ignoreNotPreselected && !
isPreselected(*e2) )
continue ;
1460 bool sameCluster =
false ;
1462 { sameCluster = (scRef1==scRef2) ; }
1480 <<
"Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1481 <<
", cluster " << scRef2.
get()
1482 <<
" and track " << (*e2)->gsfTrack().get() ;
1483 (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1484 (*e2)->setAmbiguous(
true) ;
1486 else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1489 <<
"Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1490 <<
", cluster " << scRef2.
get()
1491 <<
" and track " << (*e2)->gsfTrack().get() ;
1492 (*e2)->setAmbiguous(
true) ;
1505 LogTrace(
"GsfElectronAlgo")<<
"========== remove ambiguous "<<ei<<
"/"<<emax<<
"==========" ;
1506 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 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
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
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)
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 &)
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
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
bool isGsfCtfScPixConsistent
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
bool isNonnull() const
Checks for non-null.
ElectronTkIsolation * tkIsolation03
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 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)
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
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
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)
EgammaRecHitIsolation * ecalBarrelIsol03
reco::TrackRef ctfTrackRef
edm::Handle< reco::GsfElectronCollection > pflowElectrons
EcalRecHitMetaCollection * ecalBarrelHitsMeta
bool isGsfScPixConsistent
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)
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)
T const * product() const
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
float eEleClusterOverPout
EgammaTowerIsolation * hadDepth2Isolation04
void setVetoClustered(bool b=true)
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
ElectronData(const reco::GsfElectronCoreRef &core, const reco::BeamSpot &bs)
void copyElectrons(reco::GsfElectronCollection &)
ProductID id() const
Accessor for product ID.
ElectronTkIsolation * tkIsolation04
ElectronData * electronData_
edm::ESHandle< TrackerGeometry > trackerHandle
void setAmbiguityData(bool ignoreNotPreselected=true)
IsolationValueMaps edIsolationValues
T const * get() const
Returns C++ pointer to the item.
uint32_t getHitPattern(int position) const
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 &)
edm::Handle< CaloTowerCollection > towers
void calculateMode(const MultiTrajectoryStateMode *mtsMode)
math::PtEtaPhiELorentzVectorF LorentzVector
EcalRecHitMetaCollection * ecalEndcapHitsMeta
Global3DVector GlobalVector
void checkSetup(const edm::EventSetup &)
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
TrajectoryStateOnSurface vtxTSOS
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
static bool stripTIBHitFilter(uint32_t pattern)
Candidate::LorentzVector calculateMomentum()
bool passingPflowPreselection() const
const reco::BeamSpot beamSpot