55 #include "CLHEP/Units/GlobalPhysicalConstants.h"
58 #include <Math/VectorUtil.h>
59 #include <Math/Point3D.h>
66 using namespace reco ;
113 : inputCfg(inputConfig),
114 strategyCfg(strategyConfig),
116 cutsCfgPflow(cutsConfigPflow),
118 spikeCfg(spikeConfig),
121 superClusterErrorFunction(superClusterErrorFunc)
127 delete hcalHelperPflow ;
159 : cacheIDGeom(0), cacheIDTopo(0), cacheIDTDGeom(0), cacheIDMagField(0),cacheChStatus(0),
166 delete constraintAtVtx ;
167 delete mtsTransform ;
186 void retreiveOriginalTrackCollections
215 originalCtfTrackCollectionRetreived(
false),
216 originalGsfTrackCollectionRetreived(
false),
217 tkIsolation03(0), tkIsolation04(0),
218 hadDepth1Isolation03(0), hadDepth1Isolation04(0),
219 hadDepth2Isolation03(0), hadDepth2Isolation04(0),
220 ecalBarrelHitsMeta(0), ecalEndcapHitsMeta(0),
221 ecalBarrelIsol03(0), ecalBarrelIsol04(0),
222 ecalEndcapIsol03(0), ecalEndcapIsol04(0)
229 delete tkIsolation03 ;
230 delete tkIsolation04 ;
231 delete hadDepth1Isolation03 ;
232 delete hadDepth1Isolation04 ;
233 delete hadDepth2Isolation03 ;
234 delete hadDepth2Isolation04 ;
235 delete ecalBarrelHitsMeta ;
236 delete ecalEndcapHitsMeta ;
237 delete ecalBarrelIsol03 ;
238 delete ecalBarrelIsol04 ;
239 delete ecalEndcapIsol03 ;
240 delete ecalEndcapIsol04 ;
242 GsfElectronPtrCollection::const_iterator it ;
243 for ( it = electrons->begin() ; it != electrons->end() ; it++ )
251 if ((!originalCtfTrackCollectionRetreived)&&(ctfTrack.
isNonnull()))
253 event->get(ctfTrack.
id(),originalCtfTracks) ;
254 originalCtfTrackCollectionRetreived =
true ;
256 if ((!originalGsfTrackCollectionRetreived)&&(gsfTrack.
isNonnull()))
258 event->get(gsfTrack.
id(),originalGsfTracks) ;
259 originalGsfTrackCollectionRetreived =
true ;
311 gsfTrackRef(coreRef->gsfTrack()),
312 superClusterRef(coreRef->superCluster()),
313 ctfTrackRef(coreRef->ctfTrack()), shFracInnerHits(coreRef->ctfGsfOverlap()),
322 if (!ctfTrackRef.isNull())
return ;
326 shFracInnerHits = 0 ;
330 const HitPattern & gsfHitPattern = gsfTrackRef->hitPattern() ;
333 TrackCollection::const_iterator ctfTkIter ;
334 for ( ctfTkIter = ctfTrackCollection->begin() , counter = 0 ;
335 ctfTkIter != ctfTrackCollection->end() ; ctfTkIter++, counter++ )
338 double dEta = gsfTrackRef->eta() - ctfTkIter->eta() ;
339 double dPhi = gsfTrackRef->phi() - ctfTkIter->phi() ;
340 double pi = acos(-1.);
344 if (
sqrt(dEta*dEta + dPhi*dPhi) > 0.3) continue ;
346 unsigned int shared = 0 ;
347 int gsfHitCounter = 0 ;
348 int numGsfInnerHits = 0 ;
349 int numCtfInnerHits = 0 ;
352 const HitPattern & ctfHitPattern = ctfTkIter->hitPattern() ;
355 for ( elHitsIt = gsfTrackRef->recHitsBegin() ;
356 elHitsIt != gsfTrackRef->recHitsEnd() ;
357 elHitsIt++, gsfHitCounter++ )
359 if (!((**elHitsIt).isValid()))
363 uint32_t gsfHit = gsfHitPattern.
getHitPattern(gsfHitCounter) ;
371 int ctfHitsCounter = 0 ;
372 numCtfInnerHits = 0 ;
374 for ( ctfHitsIt = ctfTkIter->recHitsBegin() ;
375 ctfHitsIt != ctfTkIter->recHitsEnd() ;
376 ctfHitsIt++, ctfHitsCounter++ )
378 if(!((**ctfHitsIt).isValid()))
381 uint32_t ctfHit = ctfHitPattern.
getHitPattern(ctfHitsCounter);
399 if ((numGsfInnerHits==0)||(numCtfInnerHits==0))
402 if ( static_cast<float>(shared)/
min(numGsfInnerHits,numCtfInnerHits) > shFracInnerHits )
404 shFracInnerHits =
static_cast<float>(shared)/
min(numGsfInnerHits, numCtfInnerHits);
405 ctfTrackRef =
TrackRef(currentCtfTracks,counter);
425 int chargeGsf = gsfTrackRef->charge() ;
427 info.
isGsfCtfConsistent = (ctfTrackRef.isNonnull()&&((chargeGsf*ctfTrackRef->charge())>0)) ;
434 { charge = ctfTrackRef->charge() ; }
443 float dphimin = 1.e30 ;
444 for (
CaloCluster_iterator bc=superClusterRef->clustersBegin(); bc!=superClusterRef->clustersEnd(); bc++)
446 GlobalPoint posclu((*bc)->position().x(),(*bc)->position().y(),(*bc)->position().z()) ;
448 if (!tempTSOS.isValid()) tempTSOS=outTSOS ;
466 if (!innTSOS.isValid())
return false;
473 if (!vtxTSOS.isValid()) vtxTSOS=innTSOS;
477 if (!outTSOS.isValid())
return false;
481 GlobalPoint(superClusterRef->seed()->position().x(),
482 superClusterRef->seed()->position().y(),
483 superClusterRef->seed()->position().z()));
484 if (!seedTSOS.isValid()) seedTSOS=outTSOS;
488 if (!sclTSOS.isValid()) sclTSOS=outTSOS;
515 double scale = superClusterRef->energy()/vtxMom.mag() ;
517 ( vtxMom.x()*scale,vtxMom.y()*scale,vtxMom.z()*scale,
518 superClusterRef->energy() ) ;
537 :
generalData_(
new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,spikeCfg,superClusterErrorFunction)),
553 bool updateField(
false);
560 bool updateGeometry(
false);
562 updateGeometry =
true;
567 if ( updateField || updateGeometry ) {
604 GsfElectronPtrCollection::const_iterator it ;
609 { outEle.push_back(**it) ; }
615 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected event data" ; }
639 float extRadiusSmall=0.3, extRadiusLarge=0.4 ;
645 float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
647 int egHcalDepth1=1, egHcalDepth2=2;
683 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"lacking event data" ; }
690 LogTrace(
"GsfElectronAlgo") <<
"========== " << title <<
" ==========";
693 GsfElectronPtrCollection::const_iterator it ;
696 LogTrace(
"GsfElectronAlgo") <<
"Electron with charge, pt, eta, phi: " << (*it)->charge() <<
" , "
697 << (*it)->pt() <<
" , " << (*it)->eta() <<
" , " << (*it)->phi();
699 LogTrace(
"GsfElectronAlgo") <<
"=================================================";
705 {
throw cms::Exception(
"GsfElectronAlgo|InternalError")<<
"unexpected electron data" ; }
708 for (
unsigned int i=0 ;
i<coreCollection->size() ; ++
i )
712 bool coreFound =
false ;
713 GsfElectronPtrCollection::const_iterator itrEle ;
719 if ((*itrEle)->core()==coreRef)
725 if (coreFound) continue ;
728 if (coreRef->superCluster().
isNull())
continue ;
749 GsfElectronCollection::const_iterator
electron ;
751 ( electron = oldElectrons->begin() ;
752 electron != oldElectrons->end() ;
755 const GsfTrackRef electronGsfTrackRef = electron->gsfTrack() ;
757 for ( icore=0 ; icore<newCores->size() ; ++icore )
759 if (electronGsfTrackRef==(*newCores)[icore].gsfTrack())
771 GsfElectronPtrCollection::iterator el ;
782 double noCutMin = -999999999 ;
783 if (mva<noCutMin) {
throw cms::Exception(
"GsfElectronAlgo|UnexpectedMvaValue")<<
"unexpected MVA value: "<<mva ; }
799 LogTrace(
"GsfElectronAlgo")<<
"========== removed not preselected "<<ei<<
"/"<<emax<<
"==========" ;
813 bool eg = ele->
core()->ecalDrivenSeed() ;
814 bool pf = ele->
core()->trackerDrivenSeed() && !ele->
core()->ecalDrivenSeed() ;
815 if (eg&&pf) {
throw cms::Exception(
"GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<
"An electron cannot be both egamma and purely pflow" ; }
816 if ((!eg)&&(!pf)) {
throw cms::Exception(
"GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<
"An electron cannot be neither egamma nor purely pflow" ; }
821 double etValue = ele->
superCluster()->energy()/cosh(etaValue) ;
822 LogTrace(
"GsfElectronAlgo") <<
"Et : " << etValue ;
825 LogTrace(
"GsfElectronAlgo") <<
"Et criteria are satisfied";
829 LogTrace(
"GsfElectronAlgo") <<
"E/p : " << eopValue ;
834 LogTrace(
"GsfElectronAlgo") <<
"E/p criteria are satisfied";
841 bool HoEveto =
false ;
845 LogTrace(
"GsfElectronAlgo") <<
"H/E criteria are satisfied";
849 LogTrace(
"GsfElectronAlgo") <<
"delta eta : " << deta ;
852 LogTrace(
"GsfElectronAlgo") <<
"Delta eta criteria are satisfied";
856 LogTrace(
"GsfElectronAlgo") <<
"delta phi : " << dphi;
859 LogTrace(
"GsfElectronAlgo") <<
"Delta phi criteria are satisfied";
865 LogTrace(
"GsfElectronAlgo") <<
"Sigma ieta ieta criteria are satisfied";
871 LogTrace(
"GsfElectronAlgo") <<
"Fiducial flags criteria are satisfied";
879 {
throw cms::Exception(
"GsfElectronAlgo|NotElectronSeed")<<
"The GsfTrack seed is not an ElectronSeed ?!" ; }
881 {
if (elseed->subDet2()==6)
return ; }
886 LogTrace(
"GsfElectronAlgo") <<
"TIP criterion is satisfied" ;
888 LogTrace(
"GsfElectronAlgo") <<
"All cut based criteria are satisfied" ;
895 if (ele->
core()->ecalDrivenSeed())
900 {
LogTrace(
"GsfElectronAlgo") <<
"Mva criterion is satisfied" ; }
1017 {
throw cms::Exception(
"GsfElectronAlgo|UnknownXtalRegion")<<
"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1028 if (fiducialFlags.
isEB)
1070 ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1074 conversionVars.
flags = conversionInfo.
flag() ;
1075 conversionVars.
dist = conversionInfo.
dist() ;
1076 conversionVars.
dcot = conversionInfo.
dcot() ;
1078 if ((conversionVars.
flags==0)
or(conversionVars.
flags==1))
1080 else if ((conversionVars.
flags==2)
or(conversionVars.
flags==3))
1098 tcMatching, tkExtra, ctfInfo,
1099 fiducialFlags,showerShape,
1107 if (ele->
core()->ecalDrivenSeed()) {
1131 LogTrace(
"GsfElectronAlgo")<<
"Constructed new electron with energy "<< ele->
p4().e() ;
1146 GsfElectronPtrCollection::iterator e1, e2 ;
1160 (*e1)->clearAmbiguousGsfTracks() ;
1161 (*e1)->setAmbiguous(
false) ;
1170 if ((*e1)->ambiguous())
continue ;
1171 if ( ignoreNotPreselected && !
isPreselected(*e1) )
continue ;
1176 <<
"Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1177 <<
", cluster " << scRef1.
get()
1178 <<
" & track " << (*e1)->gsfTrack().get() ;
1185 if ((*e2)->ambiguous())
continue ;
1186 if ( ignoreNotPreselected && !
isPreselected(*e2) )
continue ;
1192 bool sameCluster =
false ;
1194 { sameCluster = (scRef1==scRef2) ; }
1212 <<
"Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1213 <<
", cluster " << scRef2.
get()
1214 <<
" and track " << (*e2)->gsfTrack().get() ;
1215 (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1216 (*e2)->setAmbiguous(
true) ;
1218 else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1221 <<
"Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1222 <<
", cluster " << scRef2.
get()
1223 <<
" and track " << (*e2)->gsfTrack().get() ;
1224 (*e2)->setAmbiguous(
true) ;
1236 LogTrace(
"GsfElectronAlgo")<<
"========== remove ambiguous "<<ei<<
"/"<<emax<<
"==========" ;
1237 if ((*eitr)->ambiguous())
TrajectoryStateOnSurface constrainAtBeamSpot(const reco::GsfTrack &, const reco::BeamSpot &) const
(multi)TSOS after including the beamspot
ElectronHcalHelper * hcalHelperPflow
edm::Handle< reco::TrackCollection > originalCtfTracks
double hcalESumDepth2(const reco::SuperCluster &)
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
edm::Handle< edm::ValueMap< float > > pfMva
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
static bool isNextToEtaBoundary(EBDetId id)
reco::GsfTrackRef conversionPartnerGsfTk() const
bool originalGsfTrackCollectionRetreived
GsfElectronAlgo(const InputTagsConfiguration &, const StrategyConfiguration &, const CutsConfiguration &cutsCfg, const CutsConfiguration &cutsCfgPflow, const ElectronHcalHelper::Configuration &hcalCfg, const ElectronHcalHelper::Configuration &hcalCfgPflow, const IsolationConfiguration &, const SpikeConfiguration &, EcalClusterFunctionBaseClass *superClusterErrorFunction)
void setPassCutBasedPreselection(bool flag)
bool positionFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalPoint &position) const
double intRadiusEcalEndcaps
unsigned long long cacheIDGeom
unsigned ambClustersOverlapStrategy
virtual void correct(reco::GsfElectron &)
void setMvaPreselectionFlag(reco::GsfElectron *ele)
double radiusOfConversion() const
void clonePreviousElectrons()
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 &)
float severityRecHitThreshold
float hcalDepth2OverEcal() const
double getEtSum(const reco::Candidate *emObject) const
const IsolationConfiguration isoCfg
double intRadiusEcalBarrel
unsigned ambSortingStrategy
void beginEvent(edm::Event &)
unsigned long long cacheIDTopo
double maxSigmaIetaIetaEndcaps
TrajectoryStateOnSurface sclTSOS
Geom::Phi< T > phi() const
EventSetupData * eventSetupData_
Global3DPoint GlobalPoint
std::vector< Track > TrackCollection
collection of Tracks
bool stripTIBHitFilter(uint32_t pattern) const
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)
SuperClusterRef superCluster() const
reference to a SuperCluster
bool momentumFromModeCartesian(const TrajectoryStateOnSurface tsos, GlobalVector &momentum) const
void checkCtfTrack(edm::Handle< reco::TrackCollection > currentCtfTracks)
float hcalDepth1TowerSumEt
const InputTagsConfiguration inputCfg
edm::ESHandle< EcalChannelStatus > chStatus
TrajectoryStateOnSurface innTSOS
void doFlagChecks(const std::vector< int > v)
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
EgammaTowerIsolation * hadDepth1Isolation03
const StrategyConfiguration strategyCfg
Candidate::LorentzVector computeMomemtum()
edm::ESHandle< CaloTopology > caloTopo
reco::TrackRef conversionPartnerCtfTk() const
CaloClusterPtr electronCluster
EgammaRecHitIsolation * ecalBarrelIsol04
TrajectoryStateOnSurface constrainedVtxTSOS
bool isGsfCtfScPixConsistent
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
bool isNonnull() const
Checks for non-null.
ElectronTkIsolation * tkIsolation03
void setUseNumCrystals(bool b=true)
float deltaEtaSuperClusterTrackAtVtx() const
bool isNull() const
Checks for null.
float sigmaIetaIeta() const
float eSeedClusterOverPout
unsigned long long cacheSevLevel
void setCutBasedPreselectionFlag(reco::GsfElectron *ele, const reco::BeamSpot &)
double dPhi(double phi1, double phi2)
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
EgammaRecHitIsolation * ecalEndcapIsol03
RealType normalized_phi(RealType phi)
GsfConstraintAtVertex * constraintAtVtx
static bool isNextToPhiBoundary(EBDetId id)
float deltaPhiSuperClusterTrackAtVtx() const
std::vector< GsfElectronCore > GsfElectronCoreCollection
void correct(reco::GsfElectron &, TrajectoryStateOnSurface &)
void readEvent(edm::Event &)
float hcalOverEcal() const
void setPassMvaPreselection(bool flag)
float deltaEtaSeedClusterAtCalo
const MultiTrajectoryStateTransform * mtsTransform
static bool isNextToRingBoundary(EEDetId id)
std::list< reco::GsfElectron * > GsfElectronPtrCollection
bool originalCtfTrackCollectionRetreived
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
GeneralData(const InputTagsConfiguration &, const StrategyConfiguration &, const CutsConfiguration &cutsCfg, const CutsConfiguration &cutsCfgPflow, const ElectronHcalHelper::Configuration &hcalCfg, const ElectronHcalHelper::Configuration &hcalCfgPflow, const IsolationConfiguration &, const SpikeConfiguration &, EcalClusterFunctionBaseClass *superClusterErrorFunction)
double maxDeltaPhiEndcaps
bool pixelHitFilter(uint32_t pattern) const
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
void setIsolation04(const IsolationVariables &dr04)
virtual GsfElectronCoreRef core() const
unsigned long long cacheIDMagField
unsigned long long cacheIDTDGeom
edm::Handle< reco::GsfElectronCollection > previousElectrons
float hcalDepth1OverEcal() const
GsfTrackRef gsfTrack() const
reference to a GsfTrack
EgammaRecHitIsolation * ecalBarrelIsol03
reco::TrackRef ctfTrackRef
EcalRecHitMetaCollection * ecalBarrelHitsMeta
bool isGsfScPixConsistent
float hcalDepth2TowerSumEt
const SpikeConfiguration spikeCfg
EcalClusterFunctionBaseClass * superClusterErrorFunction
double maxSigmaIetaIetaBarrel
REF castTo() const
cast to a concrete type
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
T const * product() const
const reco::GsfTrackRef gsfTrackRef
void ele_convert(const Type1 &obj1, Type2 &obj2)
T const * product() const
bool calculateTSOS(const MultiTrajectoryStateTransform *, GsfConstraintAtVertex *)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
float deltaEtaEleClusterAtCalo
edm::Handle< EcalRecHitCollection > reducedEBRecHits
double getPtTracks(const reco::GsfElectron *) const
TrajectoryStateOnSurface seedTSOS
std::vector< int > recHitFlagsToBeExcluded
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
edm::ESHandle< CaloGeometry > caloGeom
void removeAmbiguousElectrons()
void displayInternalElectrons(const std::string &title) const
EgammaRecHitIsolation * ecalEndcapIsol04
void removeNotPreselectedElectrons()
const reco::SuperClusterRef superClusterRef
TrajectoryStateOnSurface eleTSOS
float deltaPhiSeedClusterAtCalo
edm::Handle< EcalRecHitCollection > reducedEERecHits
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_
double getTowerEtSum(const reco::Candidate *) const
edm::ESHandle< TrackerGeometry > trackerHandle
void setAmbiguityData(bool ignoreNotPreselected=true)
double hcalESumDepth1(const reco::SuperCluster &)
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
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
GlobalVector vtxMomWithConstraint
int ietaAbs() const
get the absolute value of the crystal ieta
void doSpikeRemoval(const EcalRecHitCollection *const recHits, const EcalChannelStatus *const chStatus, const int &severityLevelCut=3, const float &sevRecHitThresh=5.0, const EcalSeverityLevelAlgo::SpikeId &id=EcalSeverityLevelAlgo::kSwissCross, const float &spIdThresh=0.95)
bool stripTIDHitFilter(uint32_t pattern) const
edm::Handle< CaloTowerCollection > towers
EcalSeverityLevelAlgo::SpikeId spikeId
void calculateMode(const MultiTrajectoryStateMode *mtsMode)
void correct(reco::GsfElectron &, const reco::BeamSpot &bs, bool applyEtaCorrection=true)
math::PtEtaPhiELorentzVectorF LorentzVector
EcalRecHitMetaCollection * ecalEndcapHitsMeta
Global3DVector GlobalVector
void checkSetup(const edm::EventSetup &)
TrajectoryStateOnSurface vtxTSOS
unsigned long long cacheChStatus
const reco::BeamSpot beamSpot