test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes
GsfElectronAlgo Class Reference

#include <GsfElectronAlgo.h>

Classes

struct  CutsConfiguration
 
struct  EcalRecHitsConfiguration
 
struct  ElectronData
 
struct  EventData
 
struct  EventSetupData
 
struct  GeneralData
 
struct  InputTagsConfiguration
 
struct  IsolationConfiguration
 
struct  StrategyConfiguration
 

Public Types

typedef std::list
< reco::GsfElectron * > 
GsfElectronPtrCollection
 

Public Member Functions

void addPflowInfo ()
 
void beginEvent (edm::Event &)
 
void checkSetup (const edm::EventSetup &)
 
void clonePreviousElectrons ()
 
void completeElectrons (const gsfAlgoHelpers::HeavyObjectCache *)
 
void copyElectrons (reco::GsfElectronCollection &)
 
void displayInternalElectrons (const std::string &title) const
 
void endEvent ()
 
 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 &regCfg)
 
void removeAmbiguousElectrons ()
 
void removeNotPreselectedElectrons ()
 
void setAmbiguityData (bool ignoreNotPreselected=true)
 
void setMVAInputs (const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaInput > &mvaInputs)
 
void setMVAOutputs (const gsfAlgoHelpers::HeavyObjectCache *, const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaOutput > &mvaOutputs)
 
 ~GsfElectronAlgo ()
 

Private Member Functions

void calculateShowerShape (const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
 
void calculateShowerShape_full5x5 (const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
 
void createElectron (const gsfAlgoHelpers::HeavyObjectCache *)
 
const reco::SuperClusterRef getTrSuperCluster (const reco::GsfTrackRef &trackRef)
 
bool isPreselected (reco::GsfElectron *ele)
 
void setCutBasedPreselectionFlag (reco::GsfElectron *ele, const reco::BeamSpot &)
 
void setMVAepiBasedPreselectionFlag (reco::GsfElectron *ele)
 
void setPflowPreselectionFlag (reco::GsfElectron *ele)
 
void setPixelMatchInfomation (reco::GsfElectron *)
 

Private Attributes

ElectronDataelectronData_
 
EventDataeventData_
 
EventSetupDataeventSetupData_
 
GeneralDatageneralData_
 

Detailed Description

Definition at line 58 of file GsfElectronAlgo.h.

Member Typedef Documentation

Definition at line 216 of file GsfElectronAlgo.h.

Constructor & Destructor Documentation

GsfElectronAlgo::GsfElectronAlgo ( const InputTagsConfiguration inputCfg,
const StrategyConfiguration strategyCfg,
const CutsConfiguration cutsCfg,
const CutsConfiguration cutsCfgPflow,
const ElectronHcalHelper::Configuration hcalCfg,
const ElectronHcalHelper::Configuration hcalCfgPflow,
const IsolationConfiguration isoCfg,
const EcalRecHitsConfiguration recHitsCfg,
EcalClusterFunctionBaseClass superClusterErrorFunction,
EcalClusterFunctionBaseClass crackCorrectionFunction,
const SoftElectronMVAEstimator::Configuration mva_NIso_Cfg,
const ElectronMVAEstimator::Configuration mva_Iso_Cfg,
const RegressionHelper::Configuration regCfg 
)

Definition at line 689 of file GsfElectronAlgo.cc.

703  : generalData_(new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,recHitsCfg,superClusterErrorFunction,crackCorrectionFunction,mva_NIso_Cfg,mva_Iso_Cfg,regCfg)),
704  eventSetupData_(new EventSetupData),
706  {}
GeneralData * generalData_
EventSetupData * eventSetupData_
EventData * eventData_
ElectronData * electronData_
GsfElectronAlgo::~GsfElectronAlgo ( )

Definition at line 708 of file GsfElectronAlgo.cc.

References electronData_, eventData_, eventSetupData_, and generalData_.

709  {
710  delete generalData_ ;
711  delete eventSetupData_ ;
712  delete eventData_ ;
713  delete electronData_ ;
714  }
GeneralData * generalData_
EventSetupData * eventSetupData_
EventData * eventData_
ElectronData * electronData_

Member Function Documentation

void GsfElectronAlgo::addPflowInfo ( )

Definition at line 977 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::edIsolationValues, GsfElectronAlgo::EventData::electrons, eventData_, Exception, edm::false, newFWLiteAna::found, pfElectrons_cff::pfElectrons, GsfElectronAlgo::EventData::pfIsolationValues, GsfElectronAlgo::EventData::pflowElectrons, GsfElectronAlgo::EventData::previousElectrons, edm::Handle< T >::product(), setPflowPreselectionFlag(), reco::GsfElectron::PflowIsolationVariables::sumChargedHadronPt, reco::GsfElectron::PflowIsolationVariables::sumNeutralHadronEt, reco::GsfElectron::PflowIsolationVariables::sumPhotonEt, and funct::true.

Referenced by GsfElectronProducer::produce().

978  {
979  bool found ;
980  const GsfElectronCollection * edElectrons = eventData_->previousElectrons.product() ;
982  GsfElectronCollection::const_iterator pfElectron, edElectron ;
983  unsigned int edIndex, pfIndex ;
984 
985  GsfElectronPtrCollection::iterator el ;
986  for
987  ( el = eventData_->electrons->begin() ;
988  el != eventData_->electrons->end() ;
989  el++ )
990  {
991 
992  // Retreive info from pflow electrons
993  found = false ;
994  for
995  ( pfIndex = 0, pfElectron = pfElectrons->begin() ; pfElectron != pfElectrons->end() ; pfIndex++, pfElectron++ )
996  {
997  if (pfElectron->gsfTrack()==(*el)->gsfTrack())
998  {
999  if (found)
1000  {
1001  edm::LogWarning("GsfElectronProducer")<<"associated pfGsfElectron already found" ;
1002  }
1003  else
1004  {
1005  found = true ;
1006 
1007  // Isolation Values
1008  if( (eventData_->pfIsolationValues).size() != 0 )
1009  {
1011  pfElectronRef(eventData_->pflowElectrons, pfIndex);
1013  isoVariables.sumChargedHadronPt =(*(eventData_->pfIsolationValues)[0])[pfElectronRef];
1014  isoVariables.sumPhotonEt =(*(eventData_->pfIsolationValues)[1])[pfElectronRef];
1015  isoVariables.sumNeutralHadronEt =(*(eventData_->pfIsolationValues)[2])[pfElectronRef];
1016  (*el)->setPfIsolationVariables(isoVariables);
1017  }
1018 
1019 // (*el)->setPfIsolationVariables(pfElectron->pfIsolationVariables()) ;
1020  (*el)->setMvaInput(pfElectron->mvaInput()) ;
1021  (*el)->setMvaOutput(pfElectron->mvaOutput()) ;
1022  if ((*el)->ecalDrivenSeed())
1023  { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),false) ; }
1024  else
1025  { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),true) ; }
1026  double noCutMin = -999999999. ;
1027  if ((*el)->mva_e_pi()<noCutMin) { throw cms::Exception("GsfElectronAlgo|UnexpectedMvaValue")<<"unexpected MVA value: "<<(*el)->mva_e_pi() ; }
1028  }
1029  }
1030  }
1031 
1032  // Isolation Values
1033  // Retreive not found info from ed electrons
1034  if( (eventData_->edIsolationValues).size() != 0 )
1035  {
1036  edIndex = 0, edElectron = edElectrons->begin() ;
1037  while ((found == false)&&(edElectron != edElectrons->end()))
1038  {
1039  if (edElectron->gsfTrack()==(*el)->gsfTrack())
1040  {
1041  found = true ;
1042 
1043  // CONSTRUCTION D UNE REF dans le handle eventData_->previousElectrons avec l'indice edIndex,
1044  // puis recuperation dans la ValueMap ED
1045 
1047  edElectronRef(eventData_->previousElectrons, edIndex);
1049  isoVariables.sumChargedHadronPt =(*(eventData_->edIsolationValues)[0])[edElectronRef];
1050  isoVariables.sumPhotonEt =(*(eventData_->edIsolationValues)[1])[edElectronRef];
1051  isoVariables.sumNeutralHadronEt =(*(eventData_->edIsolationValues)[2])[edElectronRef];
1052  (*el)->setPfIsolationVariables(isoVariables);
1053  }
1054 
1055  edIndex++ ;
1056  edElectron++ ;
1057  }
1058  }
1059 
1060  // Preselection
1062 
1063  }
1064  }
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
float sumPhotonEt
sum pt of PF photons // old float photonIso ;
Definition: GsfElectron.h:575
IsolationValueMaps pfIsolationValues
float sumNeutralHadronEt
sum pt of neutral hadrons // old float neutralHadronIso ;
Definition: GsfElectron.h:574
GsfElectronPtrCollection * electrons
edm::Handle< reco::GsfElectronCollection > previousElectrons
edm::Handle< reco::GsfElectronCollection > pflowElectrons
T const * product() const
Definition: Handle.h:81
void setPflowPreselectionFlag(reco::GsfElectron *ele)
EventData * eventData_
volatile std::atomic< bool > shutdown_flag false
IsolationValueMaps edIsolationValues
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
Definition: GsfElectron.h:573
void GsfElectronAlgo::beginEvent ( edm::Event event)

Definition at line 783 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::InputTagsConfiguration::barrelRecHitCollection, GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventData::beamspot, GsfElectronAlgo::InputTagsConfiguration::beamSpotTag, GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventData::coreElectrons, GsfElectronAlgo::InputTagsConfiguration::ctfTracks, GsfElectronAlgo::EventData::currentCtfTracks, EgammaRecHitIsolation::doFlagChecks(), EgammaRecHitIsolation::doSeverityChecks(), DetId::Ecal, GsfElectronAlgo::EventData::ecalBarrelIsol03, GsfElectronAlgo::EventData::ecalBarrelIsol04, GsfElectronAlgo::EventData::ecalEndcapIsol03, GsfElectronAlgo::EventData::ecalEndcapIsol04, GsfElectronAlgo::EventData::edIsolationValues, GsfElectronAlgo::InputTagsConfiguration::edIsoVals, GsfElectronAlgo::IsolationConfiguration::eMinBarrel, GsfElectronAlgo::IsolationConfiguration::eMinEndcaps, edm::ParameterSet::empty(), GsfElectronAlgo::InputTagsConfiguration::endcapRecHitCollection, GsfElectronAlgo::EventData::endcapRecHits, GsfElectronAlgo::IsolationConfiguration::etMinBarrel, GsfElectronAlgo::IsolationConfiguration::etMinEndcaps, GsfElectronAlgo::IsolationConfiguration::etMinHcal, event(), GsfElectronAlgo::EventData::event, eventData_, eventSetupData_, Exception, generalData_, edm::ParameterSet::getParameter(), GsfElectronAlgo::InputTagsConfiguration::gsfElectronCores, GsfElectronAlgo::EventData::gsfPfRecTracks, GsfElectronAlgo::InputTagsConfiguration::gsfPfRecTracksTag, GsfElectronAlgo::EventData::hadDepth1Isolation03, GsfElectronAlgo::EventData::hadDepth1Isolation03Bc, GsfElectronAlgo::EventData::hadDepth1Isolation04, GsfElectronAlgo::EventData::hadDepth1Isolation04Bc, GsfElectronAlgo::EventData::hadDepth2Isolation03, GsfElectronAlgo::EventData::hadDepth2Isolation03Bc, GsfElectronAlgo::EventData::hadDepth2Isolation04, GsfElectronAlgo::EventData::hadDepth2Isolation04Bc, GsfElectronAlgo::GeneralData::hcalHelper, GsfElectronAlgo::GeneralData::hcalHelperPflow, GsfElectronAlgo::InputTagsConfiguration::hcalTowersTag, GsfElectronAlgo::GeneralData::inputCfg, GsfElectronAlgo::IsolationConfiguration::intRadiusBarrelTk, GsfElectronAlgo::IsolationConfiguration::intRadiusEcalBarrel, GsfElectronAlgo::IsolationConfiguration::intRadiusEcalEndcaps, GsfElectronAlgo::IsolationConfiguration::intRadiusEndcapTk, GsfElectronAlgo::IsolationConfiguration::intRadiusHcal, GsfElectronAlgo::GeneralData::isoCfg, j, GsfElectronAlgo::IsolationConfiguration::jurassicWidth, GsfElectronAlgo::IsolationConfiguration::maxDrbTk, GsfElectronAlgo::IsolationConfiguration::maxVtxDistTk, GsfElectronAlgo::EventData::pfIsolationValues, GsfElectronAlgo::InputTagsConfiguration::pfIsoVals, GsfElectronAlgo::EventData::pflowElectrons, GsfElectronAlgo::InputTagsConfiguration::pflowGsfElectronsTag, GsfElectronAlgo::InputTagsConfiguration::pfMVA, GsfElectronAlgo::EventData::pfMva, reco::BeamSpot::position(), GsfElectronAlgo::EventData::previousElectrons, GsfElectronAlgo::InputTagsConfiguration::previousGsfElectrons, edm::Handle< T >::product(), edm::ESHandle< class >::product(), PtMinSelector_cfg::ptMin, GsfElectronAlgo::IsolationConfiguration::ptMinTk, ElectronHcalHelper::readEvent(), GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedEndcaps, GsfElectronAlgo::GeneralData::recHitsCfg, GsfElectronAlgo::EcalRecHitsConfiguration::recHitSeverityToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitSeverityToBeExcludedEndcaps, GsfElectronAlgo::EventData::seeds, GsfElectronAlgo::InputTagsConfiguration::seedsTag, EgammaRecHitIsolation::setUseNumCrystals(), EgammaRecHitIsolation::setVetoClustered(), GsfElectronAlgo::EventSetupData::sevLevel, GsfElectronAlgo::GeneralData::strategyCfg, GsfElectronAlgo::IsolationConfiguration::stripBarrelTk, GsfElectronAlgo::IsolationConfiguration::stripEndcapTk, GsfElectronAlgo::EventData::tkIsolation03, GsfElectronAlgo::EventData::tkIsolation04, GsfElectronAlgo::EventData::towers, GsfElectronAlgo::StrategyConfiguration::useGsfPfRecTracks, GsfElectronAlgo::IsolationConfiguration::useNumCrystals, GsfElectronAlgo::EventData::vertices, GsfElectronAlgo::IsolationConfiguration::vetoClustered, and GsfElectronAlgo::InputTagsConfiguration::vtxCollectionTag.

Referenced by GsfElectronBaseProducer::beginEvent().

784  {
785  if (eventData_!=0)
786  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"unexpected event data" ; }
787  eventData_ = new EventData ;
788 
789  // init the handles linked to the current event
790  eventData_->event = &event ;
797  event.getByToken(generalData_->inputCfg.hcalTowersTag,eventData_->towers) ;
798  event.getByToken(generalData_->inputCfg.pfMVA,eventData_->pfMva) ;
799  event.getByToken(generalData_->inputCfg.seedsTag,eventData_->seeds) ;
803 
804  // get the beamspot from the Event:
805  edm::Handle<reco::BeamSpot> recoBeamSpotHandle ;
806  event.getByToken(generalData_->inputCfg.beamSpotTag,recoBeamSpotHandle) ;
807  eventData_->beamspot = recoBeamSpotHandle.product() ;
808 
809  // prepare access to hcal data
812 
813  // Isolation algos
814  float extRadiusSmall=0.3, extRadiusLarge=0.4 ;
815  float intRadiusBarrel=generalData_->isoCfg.intRadiusBarrelTk, intRadiusEndcap=generalData_->isoCfg.intRadiusEndcapTk, stripBarrel=generalData_->isoCfg.stripBarrelTk, stripEndcap=generalData_->isoCfg.stripEndcapTk ;
817  eventData_->tkIsolation03 = new ElectronTkIsolation(extRadiusSmall,intRadiusBarrel,intRadiusEndcap,stripBarrel,stripEndcap,ptMin,maxVtxDist,drb,eventData_->currentCtfTracks.product(),eventData_->beamspot->position()) ;
818  eventData_->tkIsolation04 = new ElectronTkIsolation(extRadiusLarge,intRadiusBarrel,intRadiusEndcap,stripBarrel,stripEndcap,ptMin,maxVtxDist,drb,eventData_->currentCtfTracks.product(),eventData_->beamspot->position()) ;
819 
820  float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
821  float egHcalIsoConeSizeIn=generalData_->isoCfg.intRadiusHcal,egHcalIsoPtMin=generalData_->isoCfg.etMinHcal;
822  int egHcalDepth1=1, egHcalDepth2=2;
823  eventData_->hadDepth1Isolation03 = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
824  eventData_->hadDepth2Isolation03 = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
825  eventData_->hadDepth1Isolation04 = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
826  eventData_->hadDepth2Isolation04 = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
827  eventData_->hadDepth1Isolation03Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,0.,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
828  eventData_->hadDepth2Isolation03Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,0.,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
829  eventData_->hadDepth1Isolation04Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,0.,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
830  eventData_->hadDepth2Isolation04Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,0.,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
831 
832  float egIsoConeSizeOutSmall=0.3, egIsoConeSizeOutLarge=0.4, egIsoJurassicWidth=generalData_->isoCfg.jurassicWidth;
833  float egIsoPtMinBarrel=generalData_->isoCfg.etMinBarrel,egIsoEMinBarrel=generalData_->isoCfg.eMinBarrel, egIsoConeSizeInBarrel=generalData_->isoCfg.intRadiusEcalBarrel;
834  float egIsoPtMinEndcap=generalData_->isoCfg.etMinEndcaps,egIsoEMinEndcap=generalData_->isoCfg.eMinEndcaps, egIsoConeSizeInEndcap=generalData_->isoCfg.intRadiusEcalEndcaps;
835  eventData_->ecalBarrelIsol03 = new EgammaRecHitIsolation(egIsoConeSizeOutSmall,egIsoConeSizeInBarrel,egIsoJurassicWidth,egIsoPtMinBarrel,egIsoEMinBarrel,eventSetupData_->caloGeom,*(eventData_->barrelRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
836  eventData_->ecalBarrelIsol04 = new EgammaRecHitIsolation(egIsoConeSizeOutLarge,egIsoConeSizeInBarrel,egIsoJurassicWidth,egIsoPtMinBarrel,egIsoEMinBarrel,eventSetupData_->caloGeom,*(eventData_->barrelRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
837  eventData_->ecalEndcapIsol03 = new EgammaRecHitIsolation(egIsoConeSizeOutSmall,egIsoConeSizeInEndcap,egIsoJurassicWidth,egIsoPtMinEndcap,egIsoEMinEndcap,eventSetupData_->caloGeom,*(eventData_->endcapRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
838  eventData_->ecalEndcapIsol04 = new EgammaRecHitIsolation(egIsoConeSizeOutLarge,egIsoConeSizeInEndcap,egIsoJurassicWidth,egIsoPtMinEndcap,egIsoEMinEndcap,eventSetupData_->caloGeom,*(eventData_->endcapRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
855 
856  //Fill in the Isolation Value Maps for PF and EcalDriven electrons
857  std::vector<edm::InputTag> inputTagIsoVals;
859  inputTagIsoVals.push_back(generalData_->inputCfg.pfIsoVals.getParameter<edm::InputTag>("pfSumChargedHadronPt"));
860  inputTagIsoVals.push_back(generalData_->inputCfg.pfIsoVals.getParameter<edm::InputTag>("pfSumPhotonEt"));
861  inputTagIsoVals.push_back(generalData_->inputCfg.pfIsoVals.getParameter<edm::InputTag>("pfSumNeutralHadronEt"));
862 
863  eventData_->pfIsolationValues.resize(inputTagIsoVals.size());
864 
865  for (size_t j = 0; j<inputTagIsoVals.size(); ++j) {
866  event.getByLabel(inputTagIsoVals[j], eventData_->pfIsolationValues[j]);
867  }
868 
869  }
870 
872  inputTagIsoVals.clear();
873  inputTagIsoVals.push_back(generalData_->inputCfg.edIsoVals.getParameter<edm::InputTag>("edSumChargedHadronPt"));
874  inputTagIsoVals.push_back(generalData_->inputCfg.edIsoVals.getParameter<edm::InputTag>("edSumPhotonEt"));
875  inputTagIsoVals.push_back(generalData_->inputCfg.edIsoVals.getParameter<edm::InputTag>("edSumNeutralHadronEt"));
876 
877  eventData_->edIsolationValues.resize(inputTagIsoVals.size());
878 
879  for (size_t j = 0; j<inputTagIsoVals.size(); ++j) {
880  event.getByLabel(inputTagIsoVals[j], eventData_->edIsolationValues[j]);
881  }
882  }
883  }
ElectronHcalHelper * hcalHelperPflow
T getParameter(std::string const &) const
edm::Handle< reco::ElectronSeedCollection > seeds
bool empty() const
Definition: ParameterSet.h:218
edm::Handle< edm::ValueMap< float > > pfMva
GeneralData * generalData_
EgammaTowerIsolation * hadDepth1Isolation04Bc
edm::EDGetTokenT< reco::GsfElectronCoreCollection > gsfElectronCores
void readEvent(const edm::Event &)
EgammaTowerIsolation * hadDepth1Isolation03Bc
edm::EDGetTokenT< reco::GsfElectronCollection > previousGsfElectrons
const IsolationConfiguration isoCfg
edm::EDGetTokenT< reco::VertexCollection > vtxCollectionTag
const EcalRecHitsConfiguration recHitsCfg
EventSetupData * eventSetupData_
edm::Handle< EcalRecHitCollection > endcapRecHits
edm::EDGetTokenT< EcalRecHitCollection > endcapRecHitCollection
const InputTagsConfiguration inputCfg
edm::ESHandle< EcalSeverityLevelAlgo > sevLevel
EgammaTowerIsolation * hadDepth1Isolation03
edm::EDGetTokenT< reco::GsfElectronCollection > pflowGsfElectronsTag
const StrategyConfiguration strategyCfg
edm::EDGetTokenT< EcalRecHitCollection > barrelRecHitCollection
void doFlagChecks(const std::vector< int > &v)
edm::EDGetTokenT< reco::GsfPFRecTrackCollection > gsfPfRecTracksTag
EgammaRecHitIsolation * ecalBarrelIsol04
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag
ElectronTkIsolation * tkIsolation03
void setUseNumCrystals(bool b=true)
EgammaRecHitIsolation * ecalEndcapIsol03
EgammaTowerIsolation * hadDepth2Isolation03Bc
edm::Handle< EcalRecHitCollection > barrelRecHits
IsolationValueMaps pfIsolationValues
int j
Definition: DBlmapReader.cc:9
ElectronHcalHelper * hcalHelper
edm::EDGetTokenT< reco::ElectronSeedCollection > seedsTag
const reco::BeamSpot * beamspot
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
edm::EDGetTokenT< edm::ValueMap< float > > pfMVA
void doSeverityChecks(const EcalRecHitCollection *const recHits, const std::vector< int > &v)
edm::EDGetTokenT< CaloTowerCollection > hcalTowersTag
EgammaTowerIsolation * hadDepth2Isolation04Bc
edm::EDGetTokenT< reco::TrackCollection > ctfTracks
edm::Handle< reco::GsfElectronCollection > previousElectrons
edm::Handle< reco::VertexCollection > vertices
EgammaRecHitIsolation * ecalBarrelIsol03
edm::Handle< reco::GsfElectronCollection > pflowElectrons
T const * product() const
Definition: Handle.h:81
T const * product() const
Definition: ESHandle.h:86
EgammaTowerIsolation * hadDepth2Isolation04
void setVetoClustered(bool b=true)
edm::Handle< reco::TrackCollection > currentCtfTracks
edm::ESHandle< CaloGeometry > caloGeom
EgammaRecHitIsolation * ecalEndcapIsol04
const Point & position() const
position
Definition: BeamSpot.h:62
EventData * eventData_
ElectronTkIsolation * tkIsolation04
IsolationValueMaps edIsolationValues
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
edm::Handle< CaloTowerCollection > towers
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
void GsfElectronAlgo::calculateShowerShape ( const reco::SuperClusterRef theClus,
bool  pflow,
reco::GsfElectron::ShowerShape showerShape 
)
private

Definition at line 543 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventSetupData::caloTopo, reco::GsfElectron::ShowerShape::e1x5, reco::GsfElectron::ShowerShape::e2nd, reco::GsfElectron::ShowerShape::e2x5Max, reco::GsfElectron::ShowerShape::e5x5, reco::GsfElectron::ShowerShape::eBottom, EcalBarrel, reco::GsfElectron::ShowerShape::eLeft, reco::GsfElectron::ShowerShape::eMax, GsfElectronAlgo::EventData::endcapRecHits, reco::GsfElectron::ShowerShape::eRight, reco::GsfElectron::ShowerShape::eTop, eventData_, eventSetupData_, generalData_, geometry, reco::GsfElectron::ShowerShape::hcalDepth1OverEcal, reco::GsfElectron::ShowerShape::hcalDepth1OverEcalBc, reco::GsfElectron::ShowerShape::hcalDepth2OverEcal, reco::GsfElectron::ShowerShape::hcalDepth2OverEcalBc, ElectronHcalHelper::hcalESumDepth1(), ElectronHcalHelper::hcalESumDepth1BehindClusters(), ElectronHcalHelper::hcalESumDepth2(), ElectronHcalHelper::hcalESumDepth2BehindClusters(), GsfElectronAlgo::GeneralData::hcalHelper, GsfElectronAlgo::GeneralData::hcalHelperPflow, ElectronHcalHelper::hcalTowersBehindClusters(), reco::GsfElectron::ShowerShape::hcalTowersBehindClusters, reco::CaloCluster::hitsAndFractions(), edm::isNotFinite(), edm::ESHandle< class >::product(), reco::GsfElectron::ShowerShape::r9, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedEndcaps, HLT_25ns10e33_v2_cff::recHits, GsfElectronAlgo::GeneralData::recHitsCfg, GsfElectronAlgo::EcalRecHitsConfiguration::recHitSeverityToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitSeverityToBeExcludedEndcaps, reco::GsfElectron::ShowerShape::sigmaEtaEta, reco::GsfElectron::ShowerShape::sigmaIetaIeta, reco::GsfElectron::ShowerShape::sigmaIetaIphi, reco::GsfElectron::ShowerShape::sigmaIphiIphi, mathSSE::sqrt(), DetId::subdetId(), and ecaldqm::topology().

Referenced by createElectron().

545  {
546  const reco::CaloCluster & seedCluster = *(theClus->seed()) ;
547  // temporary, till CaloCluster->seed() is made available
548  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
549  int detector = seedXtalId.subdetId() ;
550 
553  const EcalRecHitCollection * recHits = 0 ;
554  std::vector<int> recHitFlagsToBeExcluded ;
555  std::vector<int> recHitSeverityToBeExcluded ;
556  if (detector==EcalBarrel)
557  {
558  recHits = eventData_->barrelRecHits.product() ;
559  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedBarrel ;
560  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedBarrel ;
561  }
562  else
563  {
564  recHits = eventData_->endcapRecHits.product() ;
565  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedEndcaps ;
566  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedEndcaps ;
567  }
568 
569  std::vector<float> covariances = EcalClusterTools::covariances(seedCluster,recHits,topology,geometry) ;
570  std::vector<float> localCovariances = EcalClusterTools::localCovariances(seedCluster,recHits,topology) ;
571  showerShape.sigmaEtaEta = sqrt(covariances[0]) ;
572  showerShape.sigmaIetaIeta = sqrt(localCovariances[0]) ;
573  if (!edm::isNotFinite(localCovariances[2])) showerShape.sigmaIphiIphi = sqrt(localCovariances[2]) ;
574  showerShape.e1x5 = EcalClusterTools::e1x5(seedCluster,recHits,topology) ;
575  showerShape.e2x5Max = EcalClusterTools::e2x5Max(seedCluster,recHits,topology) ;
576  showerShape.e5x5 = EcalClusterTools::e5x5(seedCluster,recHits,topology) ;
577  showerShape.r9 = EcalClusterTools::e3x3(seedCluster,recHits,topology)/theClus->rawEnergy() ;
578 
579  if (pflow)
580  {
581  showerShape.hcalDepth1OverEcal = generalData_->hcalHelperPflow->hcalESumDepth1(*theClus)/theClus->energy() ;
582  showerShape.hcalDepth2OverEcal = generalData_->hcalHelperPflow->hcalESumDepth2(*theClus)/theClus->energy() ;
586  }
587  else
588  {
589  showerShape.hcalDepth1OverEcal = generalData_->hcalHelper->hcalESumDepth1(*theClus)/theClus->energy() ;
590  showerShape.hcalDepth2OverEcal = generalData_->hcalHelper->hcalESumDepth2(*theClus)/theClus->energy() ;
594  }
595 
596  // extra shower shapes
597  const float see_by_spp = showerShape.sigmaIetaIeta*showerShape.sigmaIphiIphi;
598  if( see_by_spp > 0 ) {
599  showerShape.sigmaIetaIphi = localCovariances[1] / see_by_spp;
600  } else if ( localCovariances[1] > 0 ) {
601  showerShape.sigmaIetaIphi = 1.f;
602  } else {
603  showerShape.sigmaIetaIphi = -1.f;
604  }
605  showerShape.eMax = EcalClusterTools::eMax(seedCluster,recHits);
606  showerShape.e2nd = EcalClusterTools::e2nd(seedCluster,recHits);
607  showerShape.eTop = EcalClusterTools::eTop(seedCluster,recHits,topology);
608  showerShape.eLeft = EcalClusterTools::eLeft(seedCluster,recHits,topology);
609  showerShape.eRight = EcalClusterTools::eRight(seedCluster,recHits,topology);
610  showerShape.eBottom = EcalClusterTools::eBottom(seedCluster,recHits,topology);
611  }
ElectronHcalHelper * hcalHelperPflow
GeneralData * generalData_
CaloTopology const * topology(0)
const EcalRecHitsConfiguration recHitsCfg
EventSetupData * eventSetupData_
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
Definition: CaloCluster.h:192
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers)
edm::ESHandle< CaloTopology > caloTopo
bool isNotFinite(T x)
Definition: isFinite.h:10
T sqrt(T t)
Definition: SSEVec.h:18
edm::Handle< EcalRecHitCollection > barrelRecHits
std::vector< CaloTowerDetId > hcalTowersBehindClusters
Definition: GsfElectron.h:386
double hcalESumDepth2(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
ElectronHcalHelper * hcalHelper
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
Definition: DetId.h:18
T const * product() const
Definition: ESHandle.h:86
ESHandle< TrackerGeometry > geometry
edm::ESHandle< CaloGeometry > caloGeom
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
EventData * eventData_
void GsfElectronAlgo::calculateShowerShape_full5x5 ( const reco::SuperClusterRef theClus,
bool  pflow,
reco::GsfElectron::ShowerShape showerShape 
)
private

Definition at line 613 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventSetupData::caloTopo, EcalClusterToolsT< noZS >::covariances(), EcalClusterToolsT< noZS >::e1x5(), reco::GsfElectron::ShowerShape::e1x5, EcalClusterToolsT< noZS >::e2nd(), reco::GsfElectron::ShowerShape::e2nd, EcalClusterToolsT< noZS >::e2x5Max(), reco::GsfElectron::ShowerShape::e2x5Max, EcalClusterToolsT< noZS >::e3x3(), EcalClusterToolsT< noZS >::e5x5(), reco::GsfElectron::ShowerShape::e5x5, EcalClusterToolsT< noZS >::eBottom(), reco::GsfElectron::ShowerShape::eBottom, EcalBarrel, EcalClusterToolsT< noZS >::eLeft(), reco::GsfElectron::ShowerShape::eLeft, EcalClusterToolsT< noZS >::eMax(), reco::GsfElectron::ShowerShape::eMax, GsfElectronAlgo::EventData::endcapRecHits, EcalClusterToolsT< noZS >::eRight(), reco::GsfElectron::ShowerShape::eRight, EcalClusterToolsT< noZS >::eTop(), reco::GsfElectron::ShowerShape::eTop, eventData_, eventSetupData_, generalData_, geometry, reco::GsfElectron::ShowerShape::hcalDepth1OverEcal, reco::GsfElectron::ShowerShape::hcalDepth1OverEcalBc, reco::GsfElectron::ShowerShape::hcalDepth2OverEcal, reco::GsfElectron::ShowerShape::hcalDepth2OverEcalBc, ElectronHcalHelper::hcalESumDepth1(), ElectronHcalHelper::hcalESumDepth1BehindClusters(), ElectronHcalHelper::hcalESumDepth2(), ElectronHcalHelper::hcalESumDepth2BehindClusters(), GsfElectronAlgo::GeneralData::hcalHelper, GsfElectronAlgo::GeneralData::hcalHelperPflow, ElectronHcalHelper::hcalTowersBehindClusters(), reco::GsfElectron::ShowerShape::hcalTowersBehindClusters, reco::CaloCluster::hitsAndFractions(), edm::isNotFinite(), EcalClusterToolsT< noZS >::localCovariances(), edm::ESHandle< class >::product(), reco::GsfElectron::ShowerShape::r9, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedEndcaps, HLT_25ns10e33_v2_cff::recHits, GsfElectronAlgo::GeneralData::recHitsCfg, GsfElectronAlgo::EcalRecHitsConfiguration::recHitSeverityToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitSeverityToBeExcludedEndcaps, reco::GsfElectron::ShowerShape::sigmaEtaEta, reco::GsfElectron::ShowerShape::sigmaIetaIeta, reco::GsfElectron::ShowerShape::sigmaIetaIphi, reco::GsfElectron::ShowerShape::sigmaIphiIphi, mathSSE::sqrt(), DetId::subdetId(), and ecaldqm::topology().

Referenced by createElectron().

615  {
616  const reco::CaloCluster & seedCluster = *(theClus->seed()) ;
617  // temporary, till CaloCluster->seed() is made available
618  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
619  int detector = seedXtalId.subdetId() ;
620 
623  const EcalRecHitCollection * recHits = 0 ;
624  std::vector<int> recHitFlagsToBeExcluded ;
625  std::vector<int> recHitSeverityToBeExcluded ;
626  if (detector==EcalBarrel)
627  {
628  recHits = eventData_->barrelRecHits.product() ;
629  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedBarrel ;
630  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedBarrel ;
631  }
632  else
633  {
634  recHits = eventData_->endcapRecHits.product() ;
635  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedEndcaps ;
636  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedEndcaps ;
637  }
638 
639  std::vector<float> covariances = noZS::EcalClusterTools::covariances(seedCluster,recHits,topology,geometry) ;
640  std::vector<float> localCovariances = noZS::EcalClusterTools::localCovariances(seedCluster,recHits,topology) ;
641  showerShape.sigmaEtaEta = sqrt(covariances[0]) ;
642  showerShape.sigmaIetaIeta = sqrt(localCovariances[0]) ;
643  if (!edm::isNotFinite(localCovariances[2])) showerShape.sigmaIphiIphi = sqrt(localCovariances[2]) ;
644  showerShape.e1x5 = noZS::EcalClusterTools::e1x5(seedCluster,recHits,topology) ;
645  showerShape.e2x5Max = noZS::EcalClusterTools::e2x5Max(seedCluster,recHits,topology) ;
646  showerShape.e5x5 = noZS::EcalClusterTools::e5x5(seedCluster,recHits,topology) ;
647  showerShape.r9 = noZS::EcalClusterTools::e3x3(seedCluster,recHits,topology)/theClus->rawEnergy() ;
648 
649  if (pflow)
650  {
651  showerShape.hcalDepth1OverEcal = generalData_->hcalHelperPflow->hcalESumDepth1(*theClus)/theClus->energy() ;
652  showerShape.hcalDepth2OverEcal = generalData_->hcalHelperPflow->hcalESumDepth2(*theClus)/theClus->energy() ;
656  }
657  else
658  {
659  showerShape.hcalDepth1OverEcal = generalData_->hcalHelper->hcalESumDepth1(*theClus)/theClus->energy() ;
660  showerShape.hcalDepth2OverEcal = generalData_->hcalHelper->hcalESumDepth2(*theClus)/theClus->energy() ;
664  }
665 
666  // extra shower shapes
667  const float see_by_spp = showerShape.sigmaIetaIeta*showerShape.sigmaIphiIphi;
668  if( see_by_spp > 0 ) {
669  showerShape.sigmaIetaIphi = localCovariances[1] / see_by_spp;
670  } else if ( localCovariances[1] > 0 ) {
671  showerShape.sigmaIetaIphi = 1.f;
672  } else {
673  showerShape.sigmaIetaIphi = -1.f;
674  }
675  showerShape.eMax = noZS::EcalClusterTools::eMax(seedCluster,recHits);
676  showerShape.e2nd = noZS::EcalClusterTools::e2nd(seedCluster,recHits);
677  showerShape.eTop = noZS::EcalClusterTools::eTop(seedCluster,recHits,topology);
678  showerShape.eLeft = noZS::EcalClusterTools::eLeft(seedCluster,recHits,topology);
679  showerShape.eRight = noZS::EcalClusterTools::eRight(seedCluster,recHits,topology);
680  showerShape.eBottom = noZS::EcalClusterTools::eBottom(seedCluster,recHits,topology);
681  }
ElectronHcalHelper * hcalHelperPflow
GeneralData * generalData_
static std::vector< float > covariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, const CaloGeometry *geometry, float w0=4.7)
CaloTopology const * topology(0)
static float eMax(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits)
const EcalRecHitsConfiguration recHitsCfg
EventSetupData * eventSetupData_
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
Definition: CaloCluster.h:192
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers)
edm::ESHandle< CaloTopology > caloTopo
bool isNotFinite(T x)
Definition: isFinite.h:10
T sqrt(T t)
Definition: SSEVec.h:18
edm::Handle< EcalRecHitCollection > barrelRecHits
static float e2nd(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits)
std::vector< CaloTowerDetId > hcalTowersBehindClusters
Definition: GsfElectron.h:386
static float e2x5Max(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
double hcalESumDepth2(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
static float eBottom(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
ElectronHcalHelper * hcalHelper
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
static float eTop(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: DetId.h:18
T const * product() const
Definition: ESHandle.h:86
ESHandle< TrackerGeometry > geometry
edm::ESHandle< CaloGeometry > caloGeom
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
static float eRight(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
EventData * eventData_
static float e3x3(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float eLeft(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static std::vector< float > localCovariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, float w0=4.7)
static float e1x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e5x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
void GsfElectronAlgo::checkSetup ( const edm::EventSetup es)

Definition at line 716 of file GsfElectronAlgo.cc.

References edm::eventsetup::EventSetupRecord::cacheIdentifier(), GsfElectronAlgo::EventSetupData::cacheIDGeom, GsfElectronAlgo::EventSetupData::cacheIDMagField, GsfElectronAlgo::EventSetupData::cacheIDTDGeom, GsfElectronAlgo::EventSetupData::cacheIDTopo, GsfElectronAlgo::EventSetupData::cacheSevLevel, GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventSetupData::caloTopo, ElectronHcalHelper::checkSetup(), RegressionHelper::checkSetup(), GsfElectronAlgo::EventSetupData::constraintAtVtx, GsfElectronAlgo::GeneralData::crackCorrectionFunction, eventSetupData_, generalData_, edm::EventSetup::get(), GsfElectronAlgo::GeneralData::hcalHelper, GsfElectronAlgo::GeneralData::hcalHelperPflow, EcalClusterFunctionBaseClass::init(), GsfElectronAlgo::EventSetupData::magField, GsfElectronAlgo::EventSetupData::mtsTransform, edm::ESHandle< class >::product(), GsfElectronAlgo::GeneralData::regHelper, GsfElectronAlgo::EventSetupData::sevLevel, GsfElectronAlgo::GeneralData::strategyCfg, GsfElectronAlgo::GeneralData::superClusterErrorFunction, GsfElectronAlgo::EventSetupData::trackerHandle, GsfElectronAlgo::StrategyConfiguration::useCombinationRegression, and GsfElectronAlgo::StrategyConfiguration::useEcalRegression.

Referenced by GsfElectronBaseProducer::beginEvent().

717  {
718  // get EventSetupRecords if needed
719  bool updateField(false);
721  updateField = true;
724  }
725 
726  bool updateGeometry(false);
728  updateGeometry = true;
731  }
732 
733  if ( updateField || updateGeometry ) {
734  delete eventSetupData_->mtsTransform ;
738  }
739 
741  eventSetupData_->cacheIDGeom=es.get<CaloGeometryRecord>().cacheIdentifier();
743  }
744 
746  eventSetupData_->cacheIDTopo=es.get<CaloTopologyRecord>().cacheIdentifier();
748  }
749 
754 
755 
760 
761  //if(eventSetupData_->cacheChStatus!=es.get<EcalChannelStatusRcd>().cacheIdentifier()){
762  // eventSetupData_->cacheChStatus=es.get<EcalChannelStatusRcd>().cacheIdentifier();
763  // es.get<EcalChannelStatusRcd>().get(eventSetupData_->chStatus);
764  //}
765 
767  eventSetupData_->cacheSevLevel = es.get<EcalSeverityLevelAlgoRcd>().cacheIdentifier();
769  }
770  }
ElectronHcalHelper * hcalHelperPflow
unsigned long long cacheIdentifier() const
GeneralData * generalData_
EventSetupData * eventSetupData_
void checkSetup(const edm::EventSetup &)
edm::ESHandle< EcalSeverityLevelAlgo > sevLevel
const StrategyConfiguration strategyCfg
edm::ESHandle< CaloTopology > caloTopo
GsfConstraintAtVertex * constraintAtVtx
const MultiTrajectoryStateTransform * mtsTransform
ElectronHcalHelper * hcalHelper
edm::ESHandle< MagneticField > magField
EcalClusterFunctionBaseClass * superClusterErrorFunction
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
edm::ESHandle< CaloGeometry > caloGeom
EcalClusterFunctionBaseClass * crackCorrectionFunction
RegressionHelper * regHelper
edm::ESHandle< TrackerGeometry > trackerHandle
virtual void init(const edm::EventSetup &es)=0
void checkSetup(const edm::EventSetup &)
void GsfElectronAlgo::clonePreviousElectrons ( )

Definition at line 950 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::coreElectrons, GsfElectronAlgo::EventData::electrons, eventData_, GsfElectronAlgo::EventData::previousElectrons, and edm::Handle< T >::product().

Referenced by GsfElectronProducer::produce().

951  {
952  const GsfElectronCollection * oldElectrons = eventData_->previousElectrons.product() ;
954  GsfElectronCollection::const_iterator oldElectron ;
955  for
956  ( oldElectron = oldElectrons->begin() ;
957  oldElectron != oldElectrons->end() ;
958  ++oldElectron )
959  {
960  const GsfElectronCoreRef oldCoreRef = oldElectron->core() ;
961  const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack() ;
962  unsigned int icore ;
963  for ( icore=0 ; icore<newCores->size() ; ++icore )
964  {
965  if (oldElectronGsfTrackRef==(*newCores)[icore].gsfTrack())
966  {
968  eventData_->electrons->push_back(new GsfElectron(*oldElectron,coreRef)) ;
969  break ;
970  }
971  }
972  }
973  }
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
std::vector< GsfElectronCore > GsfElectronCoreCollection
GsfElectronPtrCollection * electrons
edm::Handle< reco::GsfElectronCollection > previousElectrons
T const * product() const
Definition: Handle.h:81
EventData * eventData_
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
void GsfElectronAlgo::completeElectrons ( const gsfAlgoHelpers::HeavyObjectCache hoc)

Definition at line 907 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::beamspot, GsfElectronAlgo::ElectronData::calculateTSOS(), GsfElectronAlgo::EventSetupData::constraintAtVtx, GsfElectronAlgo::EventData::coreElectrons, createElectron(), electronData_, GsfElectronAlgo::EventData::electrons, eventData_, eventSetupData_, Exception, edm::false, i, edm::Ref< C, T, F >::isNull(), GsfElectronAlgo::EventSetupData::mtsTransform, edm::Handle< T >::product(), and funct::true.

Referenced by GsfElectronEcalDrivenProducer::produce(), GsfElectronProducer::produce(), and GEDGsfElectronProducer::produce().

908  {
909  if (electronData_!=0)
910  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"unexpected electron data" ; }
911 
912  const GsfElectronCoreCollection * coreCollection = eventData_->coreElectrons.product() ;
913  for ( unsigned int i=0 ; i<coreCollection->size() ; ++i )
914  {
915  // check there is no existing electron with this core
917  bool coreFound = false ;
918  GsfElectronPtrCollection::const_iterator itrEle ;
919  for
920  ( itrEle = eventData_->electrons->begin() ;
921  itrEle != eventData_->electrons->end() ;
922  itrEle++ )
923  {
924  if ((*itrEle)->core()==coreRef)
925  {
926  coreFound = true ;
927  break ;
928  }
929  }
930  if (coreFound) continue ;
931 
932  // check there is a super-cluster
933  if (coreRef->superCluster().isNull()) continue ;
934 
935  // prepare internal structure for electron specific data
936  delete electronData_ ;
937  electronData_ = new ElectronData(coreRef,*eventData_->beamspot) ;
938 
939  // calculate and check Trajectory StatesOnSurface....
941 
942  createElectron(hoc) ;
943 
944  } // loop over tracks
945 
946  delete electronData_ ;
947  electronData_ = 0 ;
948  }
int i
Definition: DBlmapReader.cc:9
EventSetupData * eventSetupData_
void createElectron(const gsfAlgoHelpers::HeavyObjectCache *)
GsfConstraintAtVertex * constraintAtVtx
std::vector< GsfElectronCore > GsfElectronCoreCollection
const MultiTrajectoryStateTransform * mtsTransform
const reco::BeamSpot * beamspot
GsfElectronPtrCollection * electrons
bool isNull() const
Checks for null.
Definition: Ref.h:249
T const * product() const
Definition: Handle.h:81
bool calculateTSOS(const MultiTrajectoryStateTransform *, GsfConstraintAtVertex *)
EventData * eventData_
volatile std::atomic< bool > shutdown_flag false
ElectronData * electronData_
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
void GsfElectronAlgo::copyElectrons ( reco::GsfElectronCollection outEle)

Definition at line 773 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::electrons, and eventData_.

Referenced by GsfElectronBaseProducer::fillEvent().

774  {
775  GsfElectronPtrCollection::const_iterator it ;
776  for
777  ( it = eventData_->electrons->begin() ;
778  it != eventData_->electrons->end() ;
779  it++ )
780  { outEle.push_back(**it) ; }
781  }
GsfElectronPtrCollection * electrons
EventData * eventData_
void GsfElectronAlgo::createElectron ( const gsfAlgoHelpers::HeavyObjectCache hoc)
private

Definition at line 1244 of file GsfElectronAlgo.cc.

References funct::abs(), RegressionHelper::applyCombinationRegression(), RegressionHelper::applyEcalRegression(), GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventData::beamspot, GsfElectronAlgo::ElectronData::calculateMode(), GsfElectronAlgo::ElectronData::calculateMomentum(), calculateShowerShape(), calculateShowerShape_full5x5(), GsfElectronAlgo::ElectronData::checkCtfTrack(), GetRecoTauVFromDQM_MC_cff::cl, ElectronEnergyCorrector::classBasedParameterizationEnergy(), ElectronEnergyCorrector::classBasedParameterizationUncertainty(), ElectronClassification::classify(), GsfElectronAlgo::ElectronData::computeCharge(), ConversionInfo::conversionPartnerCtfTk(), ConversionInfo::conversionPartnerGsfTk(), reco::GsfElectron::core(), GsfElectronAlgo::ElectronData::coreRef, ElectronMomentumCorrector::correct(), GsfElectronAlgo::GeneralData::crackCorrectionFunction, reco::GsfElectron::ClosestCtfTrack::ctfTrack, GsfElectronAlgo::ElectronData::ctfTrackRef, GsfElectronAlgo::StrategyConfiguration::ctfTracksCheck, GsfElectronAlgo::EventData::currentCtfTracks, ConversionInfo::dcot(), reco::GsfElectron::ConversionRejection::dcot, reco::GsfElectron::TrackClusterMatching::deltaEtaEleClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaEtaSeedClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaEtaSuperClusterAtVtx, reco::GsfElectron::TrackClusterMatching::deltaPhiEleClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaPhiSeedClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaPhiSuperClusterAtVtx, DetId::det(), ConversionInfo::dist(), reco::GsfElectron::ConversionRejection::dist, EcalBarrel, GsfElectronAlgo::EventData::ecalBarrelIsol03, GsfElectronAlgo::EventData::ecalBarrelIsol04, GsfElectronAlgo::StrategyConfiguration::ecalDrivenEcalEnergyFromClassBasedParameterization, GsfElectronAlgo::StrategyConfiguration::ecalDrivenEcalErrorFromClassBasedParameterization, EcalEndcap, GsfElectronAlgo::EventData::ecalEndcapIsol03, GsfElectronAlgo::EventData::ecalEndcapIsol04, reco::GsfElectron::IsolationVariables::ecalRecHitSumEt, reco::GsfElectron::TrackClusterMatching::eEleClusterOverPout, ele_convert(), reco::GsfElectron::TrackClusterMatching::electronCluster, reco::GsfElectron::electronCluster(), electronData_, GsfElectronAlgo::EventData::electrons, GsfElectronAlgo::ElectronData::eleMom, GsfElectronAlgo::ElectronData::elePos, GsfElectronAlgo::EventData::endcapRecHits, reco::CaloCluster::energy(), reco::GsfElectron::TrackClusterMatching::eSeedClusterOverP, reco::GsfElectron::TrackClusterMatching::eSeedClusterOverPout, reco::GsfElectron::TrackClusterMatching::eSuperClusterOverP, eventData_, eventSetupData_, Exception, ConversionInfo::flag(), reco::GsfElectron::ConversionRejection::flags, DetId::Forward, generalData_, GsfElectronAlgo::ElectronData::getEleBasicCluster(), EgammaRecHitIsolation::getEtSum(), ElectronTkIsolation::getPtTracks(), EgammaTowerIsolation::getTowerEtSum(), EcalClusterFunctionBaseClass::getValue(), GsfElectronAlgo::EventData::hadDepth1Isolation03, GsfElectronAlgo::EventData::hadDepth1Isolation03Bc, GsfElectronAlgo::EventData::hadDepth1Isolation04, GsfElectronAlgo::EventData::hadDepth1Isolation04Bc, GsfElectronAlgo::EventData::hadDepth2Isolation03, GsfElectronAlgo::EventData::hadDepth2Isolation03Bc, GsfElectronAlgo::EventData::hadDepth2Isolation04, GsfElectronAlgo::EventData::hadDepth2Isolation04Bc, DetId::Hcal, reco::GsfElectron::IsolationVariables::hcalDepth1TowerSumEt, reco::GsfElectron::IsolationVariables::hcalDepth1TowerSumEtBc, reco::GsfElectron::IsolationVariables::hcalDepth2TowerSumEt, reco::GsfElectron::IsolationVariables::hcalDepth2TowerSumEtBc, reco::GsfElectron::ShowerShape::hcalTowersBehindClusters, reco::CaloCluster::hitsAndFractions(), EBDetId::ietaAbs(), GsfElectronAlgo::ElectronData::innMom, reco::GsfElectron::FiducialFlags::isEB, reco::GsfElectron::FiducialFlags::isEBEEGap, reco::GsfElectron::FiducialFlags::isEBEtaGap, reco::GsfElectron::FiducialFlags::isEBPhiGap, reco::GsfElectron::FiducialFlags::isEE, reco::GsfElectron::FiducialFlags::isEEDeeGap, reco::GsfElectron::FiducialFlags::isEERingGap, EEDetId::isNextToDBoundary(), EBDetId::isNextToEtaBoundary(), EBDetId::isNextToPhiBoundary(), EEDetId::isNextToRingBoundary(), edm::Ref< C, T, F >::isNull(), edm::HandleBase::isValid(), LogTrace, PV3DBase< T, PVType, FrameType >::mag(), GsfElectronAlgo::EventSetupData::magField, reco::GsfElectron::TrackExtrapolations::momentumAtCalo, reco::GsfElectron::TrackExtrapolations::momentumAtEleClus, reco::GsfElectron::TrackExtrapolations::momentumAtVtx, reco::GsfElectron::TrackExtrapolations::momentumAtVtxWithConstraint, reco::GsfElectron::TrackExtrapolations::momentumOut, GsfElectronAlgo::EventSetupData::mtsMode, GsfElectronAlgo::EventSetupData::mtsTransform, or, GsfElectronAlgo::EventData::originalCtfTracks, GsfElectronAlgo::EventData::originalGsfTracks, GsfElectronAlgo::ElectronData::outMom, reco::GsfElectron::p4(), reco::GsfElectron::ConversionRejection::partner, reco::BeamSpot::position(), reco::CaloCluster::position(), reco::GsfElectron::TrackExtrapolations::positionAtCalo, reco::GsfElectron::TrackExtrapolations::positionAtVtx, GsfElectronAlgo::StrategyConfiguration::PreSelectMVA, GsfElectronAlgo::StrategyConfiguration::pureTrackerDrivenEcalErrorFromSimpleParameterization, reco::GsfElectron::ConversionRejection::radius, ConversionInfo::radiusOfConversion(), ElectronClassification::refineWithPflow(), GsfElectronAlgo::GeneralData::regHelper, HLT_25ns10e33_v2_cff::region, GsfElectronAlgo::EventData::retreiveOriginalTrackCollections(), SimDataFormats::CaloAnalysis::sc, GsfElectronAlgo::ElectronData::sclMom, GsfElectronAlgo::ElectronData::sclPos, GsfElectronAlgo::ElectronData::seedMom, GsfElectronAlgo::ElectronData::seedPos, gsfAlgoHelpers::HeavyObjectCache::sElectronMVAEstimator, reco::GsfElectron::setCorrectedEcalEnergyError(), setCutBasedPreselectionFlag(), reco::GsfElectron::setIsolation03(), reco::GsfElectron::setIsolation04(), reco::GsfElectron::setP4(), reco::GsfElectron::setPassMvaPreselection(), setPixelMatchInfomation(), reco::GsfElectron::setSuperClusterFbrem(), reco::GsfElectron::setTrackFbrem(), reco::GsfElectron::ClosestCtfTrack::shFracInnerHits, GsfElectronAlgo::ElectronData::shFracInnerHits, ElectronEnergyCorrector::simpleParameterizationUncertainty(), GsfElectronAlgo::GeneralData::strategyCfg, DetId::subdetId(), reco::GsfElectron::superCluster(), GsfElectronAlgo::GeneralData::superClusterErrorFunction, GsfElectronAlgo::ElectronData::superClusterRef, GsfElectronAlgo::EventData::tkIsolation03, GsfElectronAlgo::EventData::tkIsolation04, reco::GsfElectron::IsolationVariables::tkSumPt, funct::true, GsfElectronAlgo::StrategyConfiguration::useCombinationRegression, GsfElectronAlgo::StrategyConfiguration::useEcalRegression, GsfElectronAlgo::EventData::vertices, GsfElectronAlgo::ElectronData::vtxMom, GsfElectronAlgo::ElectronData::vtxMomWithConstraint, GsfElectronAlgo::ElectronData::vtxPos, and GsfElectronAlgo::ElectronData::vtxTSOS.

Referenced by completeElectrons().

1245  {
1246  // eventually check ctf track
1249 
1250  // charge ID
1251  int eleCharge ;
1252  GsfElectron::ChargeInfo eleChargeInfo ;
1253  electronData_->computeCharge(eleCharge,eleChargeInfo) ;
1254 
1255  // electron basic cluster
1257 
1258  // Seed cluster
1259  const reco::CaloCluster & seedCluster = *(electronData_->superClusterRef->seed()) ;
1260 
1261  // seed Xtal
1262  // temporary, till CaloCluster->seed() is made available
1263  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
1264 
1266 
1267 
1268  //====================================================
1269  // Candidate attributes
1270  //====================================================
1271 
1273 
1274 
1275  //====================================================
1276  // Track-Cluster Matching
1277  //====================================================
1278 
1280  tcMatching.electronCluster = elbcRef ;
1281  tcMatching.eSuperClusterOverP = (electronData_->vtxMom.mag()>0)?(electronData_->superClusterRef->energy()/electronData_->vtxMom.mag()):(-1.) ;
1282  tcMatching.eSeedClusterOverP = (electronData_->vtxMom.mag()>0.)?(seedCluster.energy()/electronData_->vtxMom.mag()):(-1) ;
1283  tcMatching.eSeedClusterOverPout = (electronData_->seedMom.mag()>0.)?(seedCluster.energy()/electronData_->seedMom.mag()):(-1.) ;
1284  tcMatching.eEleClusterOverPout = (electronData_->eleMom.mag()>0.)?(elbcRef->energy()/electronData_->eleMom.mag()):(-1.) ;
1285 
1287  tcMatching.deltaEtaSuperClusterAtVtx = scAtVtx.dEta() ;
1288  tcMatching.deltaPhiSuperClusterAtVtx = scAtVtx.dPhi() ;
1289 
1290  EleRelPointPair seedAtCalo(seedCluster.position(),electronData_->seedPos,eventData_->beamspot->position()) ;
1291  tcMatching.deltaEtaSeedClusterAtCalo = seedAtCalo.dEta() ;
1292  tcMatching.deltaPhiSeedClusterAtCalo = seedAtCalo.dPhi() ;
1293 
1294  EleRelPointPair ecAtCalo(elbcRef->position(),electronData_->elePos,eventData_->beamspot->position()) ;
1295  tcMatching.deltaEtaEleClusterAtCalo = ecAtCalo.dEta() ;
1296  tcMatching.deltaPhiEleClusterAtCalo = ecAtCalo.dPhi() ;
1297 
1298 
1299  //=======================================================
1300  // Track extrapolations
1301  //=======================================================
1302 
1311 
1312 
1313  //=======================================================
1314  // Closest Ctf Track
1315  //=======================================================
1316 
1318  ctfInfo.ctfTrack = electronData_->ctfTrackRef ;
1320 
1321 
1322  //====================================================
1323  // FiducialFlags, using nextToBoundary definition of gaps
1324  //====================================================
1325 
1326  reco::GsfElectron::FiducialFlags fiducialFlags ;
1327  int region = seedXtalId.det();
1328  int detector = seedXtalId.subdetId() ;
1329  double feta=std::abs(electronData_->superClusterRef->position().eta()) ;
1330  if (detector==EcalBarrel)
1331  {
1332  fiducialFlags.isEB = true ;
1333  EBDetId ebdetid(seedXtalId);
1334  if (EBDetId::isNextToEtaBoundary(ebdetid))
1335  {
1336  if (ebdetid.ietaAbs()==85)
1337  { fiducialFlags.isEBEEGap = true ; }
1338  else
1339  { fiducialFlags.isEBEtaGap = true ; }
1340  }
1341  if (EBDetId::isNextToPhiBoundary(ebdetid))
1342  { fiducialFlags.isEBPhiGap = true ; }
1343  }
1344  else if (detector==EcalEndcap)
1345  {
1346  fiducialFlags.isEE = true ;
1347  EEDetId eedetid(seedXtalId);
1348  if (EEDetId::isNextToRingBoundary(eedetid))
1349  {
1350  if (std::abs(feta)<2.)
1351  { fiducialFlags.isEBEEGap = true ; }
1352  else
1353  { fiducialFlags.isEERingGap = true ; }
1354  }
1355  if (EEDetId::isNextToDBoundary(eedetid))
1356  { fiducialFlags.isEEDeeGap = true ; }
1357  }
1358  else if ( region==DetId::Forward || region == DetId::Hcal )
1359  {
1360  fiducialFlags.isEE = true ;
1361  //HGCalDetId eeDetid(seedXtalId);
1362  // fill in fiducial information when we know how to use it...
1363  }
1364  else
1365  { throw cms::Exception("GsfElectronAlgo|UnknownXtalRegion")<<"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1366 
1367 
1368  //====================================================
1369  // ShowerShape
1370  //====================================================
1371 
1372  reco::GsfElectron::ShowerShape showerShape;
1373  reco::GsfElectron::ShowerShape full5x5_showerShape;
1374  if( !(region==DetId::Forward || region == DetId::Hcal) ) {
1375  calculateShowerShape(electronData_->superClusterRef,!(electronData_->coreRef->ecalDrivenSeed()),showerShape) ;
1376  calculateShowerShape_full5x5(electronData_->superClusterRef,!(electronData_->coreRef->ecalDrivenSeed()),full5x5_showerShape) ;
1377  }
1378 
1379  //====================================================
1380  // ConversionRejection
1381  //====================================================
1382 
1384 
1385  ConversionFinder conversionFinder ;
1386  double BInTesla = eventSetupData_->magField->inTesla(GlobalPoint(0.,0.,0.)).z() ;
1388  if (!ctfTracks.isValid()) { ctfTracks = eventData_->currentCtfTracks ; }
1389 
1390  // values of conversionInfo.flag()
1391  // -9999 : Partner track was not found
1392  // 0 : Partner track found in the CTF collection using
1393  // 1 : Partner track found in the CTF collection using
1394  // 2 : Partner track found in the GSF collection using
1395  // 3 : Partner track found in the GSF collection using the electron's GSF track
1396  ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1397  (*electronData_->coreRef,ctfTracks,eventData_->originalGsfTracks,BInTesla) ;
1398 
1400  conversionVars.flags = conversionInfo.flag() ;
1401  conversionVars.dist = conversionInfo.dist() ;
1402  conversionVars.dcot = conversionInfo.dcot() ;
1403  conversionVars.radius = conversionInfo.radiusOfConversion() ;
1404  if ((conversionVars.flags==0)or(conversionVars.flags==1))
1405  conversionVars.partner = TrackBaseRef(conversionInfo.conversionPartnerCtfTk()) ;
1406  else if ((conversionVars.flags==2)or(conversionVars.flags==3))
1407  conversionVars.partner = TrackBaseRef(conversionInfo.conversionPartnerGsfTk()) ;
1408 
1409 
1410  //====================================================
1411  // Go !
1412  //====================================================
1413 
1414  GsfElectron * ele = new
1415  GsfElectron
1416  ( eleCharge,eleChargeInfo,electronData_->coreRef,
1417  tcMatching, tkExtra, ctfInfo,
1418  fiducialFlags,showerShape, full5x5_showerShape,
1419  conversionVars ) ;
1420  // Will be overwritten later in the case of the regression
1422  ele->setP4(GsfElectron::P4_FROM_SUPER_CLUSTER,momentum,0,true) ;
1423 
1424  //====================================================
1425  // brems fractions
1426  //====================================================
1427 
1428  if (electronData_->innMom.mag()>0.)
1430 
1431  // the supercluster is the refined one The seed is not necessarily the first cluster
1432  // hence the use of the electronCluster
1433  SuperClusterRef sc = ele->superCluster() ;
1434  if (!(sc.isNull()))
1435  {
1436  CaloClusterPtr cl = ele->electronCluster() ;
1437  if (sc->clustersSize()>1)
1438  {
1439  float pf_fbrem =( sc->energy() - cl->energy() ) / sc->energy();
1440  ele->setSuperClusterFbrem( pf_fbrem ) ;
1441  }
1442  else
1443  {
1444  ele->setSuperClusterFbrem(0) ;
1445  }
1446  }
1447 
1448  //====================================================
1449  // classification and corrections
1450  //====================================================
1451  // classification
1452  ElectronClassification theClassifier ;
1453  theClassifier.classify(*ele) ;
1454  theClassifier.refineWithPflow(*ele) ;
1455  // ecal energy
1458  {
1463  }
1464  else // original implementation
1465  {
1466  if( region!=DetId::Forward && region != DetId::Hcal ) {
1467  if (ele->core()->ecalDrivenSeed())
1468  {
1470  { theEnCorrector.classBasedParameterizationEnergy(*ele,*eventData_->beamspot) ; }
1472  { theEnCorrector.classBasedParameterizationUncertainty(*ele) ; }
1473  }
1474  else
1475  {
1477  { theEnCorrector.simpleParameterizationUncertainty(*ele) ; }
1478  }
1479  }
1480  }
1481 
1482  // momentum
1483  // Keep the default correction running first. The track momentum error is computed in there
1484  if (ele->core()->ecalDrivenSeed())
1485  {
1486  ElectronMomentumCorrector theMomCorrector;
1487  theMomCorrector.correct(*ele,electronData_->vtxTSOS);
1488  }
1490  {
1492  }
1493 
1494  //====================================================
1495  // now isolation variables
1496  //====================================================
1497 
1501  if( !(region==DetId::Forward || region == DetId::Hcal) ) {
1514  }
1515  ele->setIsolation03(dr03);
1516  ele->setIsolation04(dr04);
1517 
1518 
1519  //====================================================
1520  // preselection flag
1521  //====================================================
1522 
1524  //setting mva flag, currently GedGsfElectron and GsfElectron pre-selection flags have desynced
1525  //this is for GedGsfElectrons, GsfElectrons (ie old pre 7X std reco) resets this later on
1526  //in the function "addPfInfo"
1527  //yes this is awful, we'll fix it once we work out how to...
1528  float mvaValue = hoc->sElectronMVAEstimator->mva( *(ele),*(eventData_->vertices));
1530 
1531  //====================================================
1532  // Pixel match variables
1533  //====================================================
1535 
1536  LogTrace("GsfElectronAlgo")<<"Constructed new electron with energy "<< ele->p4().e() ;
1537 
1538  eventData_->electrons->push_back(ele) ;
1539  }
CaloClusterPtr electronCluster() const
Definition: GsfElectron.h:242
void setPixelMatchInfomation(reco::GsfElectron *)
edm::Handle< reco::TrackCollection > originalCtfTracks
const MultiTrajectoryStateMode * mtsMode
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:126
void applyCombinationRegression(reco::GsfElectron &ele) const
void setTrackFbrem(float fbrem)
Definition: GsfElectron.h:701
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate)
Definition: GsfElectron.cc:198
GeneralData * generalData_
static bool isNextToEtaBoundary(EBDetId id)
Definition: EBDetId.cc:125
EgammaTowerIsolation * hadDepth1Isolation04Bc
reco::GsfTrackRef conversionPartnerGsfTk() const
EgammaTowerIsolation * hadDepth1Isolation03Bc
double radiusOfConversion() const
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:224
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
Definition: Activities.doc:12
void retreiveOriginalTrackCollections(const reco::TrackRef &, const reco::GsfTrackRef &)
double getEtSum(const reco::Candidate *emObject) const
void calculateShowerShape(const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
EventSetupData * eventSetupData_
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
edm::Handle< EcalRecHitCollection > endcapRecHits
double dist() const
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:192
void computeCharge(int &charge, reco::GsfElectron::ChargeInfo &info)
void checkCtfTrack(edm::Handle< reco::TrackCollection > currentCtfTracks)
EgammaTowerIsolation * hadDepth1Isolation03
const StrategyConfiguration strategyCfg
reco::TrackRef conversionPartnerCtfTk() const
void setSuperClusterFbrem(float fbrem)
Definition: GsfElectron.h:702
EgammaRecHitIsolation * ecalBarrelIsol04
virtual float getValue(const reco::BasicCluster &, const EcalRecHitCollection &) const =0
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
ElectronTkIsolation * tkIsolation03
void setCorrectedEcalEnergyError(float newEnergyError)
Definition: GsfElectron.cc:178
T mag() const
Definition: PV3DBase.h:67
void calculateShowerShape_full5x5(const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
void setCutBasedPreselectionFlag(reco::GsfElectron *ele, const reco::BeamSpot &)
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
Definition: TrackFwd.h:32
EgammaRecHitIsolation * ecalEndcapIsol03
EgammaTowerIsolation * hadDepth2Isolation03Bc
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:182
static bool isNextToPhiBoundary(EBDetId id)
Definition: EBDetId.cc:130
edm::Handle< EcalRecHitCollection > barrelRecHits
void correct(reco::GsfElectron &, TrajectoryStateOnSurface &)
void setPassMvaPreselection(bool flag)
Definition: GsfElectron.h:661
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< CaloTowerDetId > hcalTowersBehindClusters
Definition: GsfElectron.h:386
const MultiTrajectoryStateTransform * mtsTransform
static bool isNextToRingBoundary(EEDetId id)
Definition: EEDetId.cc:375
double energy() const
cluster energy
Definition: CaloCluster.h:121
const reco::BeamSpot * beamspot
edm::ESHandle< MagneticField > magField
GsfElectronPtrCollection * electrons
CaloClusterPtr getEleBasicCluster(const MultiTrajectoryStateTransform *)
static bool isNextToDBoundary(EEDetId id)
Definition: EEDetId.cc:367
bool isValid() const
Definition: HandleBase.h:75
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
bool isNull() const
Checks for null.
Definition: Ref.h:249
void setIsolation04(const IsolationVariables &dr04)
Definition: GsfElectron.h:518
#define LogTrace(id)
void classify(reco::GsfElectron &)
EgammaTowerIsolation * hadDepth2Isolation04Bc
Definition: DetId.h:18
edm::Handle< reco::VertexCollection > vertices
EgammaRecHitIsolation * ecalBarrelIsol03
int flag() const
EcalClusterFunctionBaseClass * superClusterErrorFunction
void ele_convert(const Type1 &obj1, Type2 &obj2)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:37
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
math::XYZVectorF momentumAtVtxWithConstraint
Definition: GsfElectron.h:283
double getPtTracks(const reco::GsfElectron *) const
void refineWithPflow(reco::GsfElectron &)
void setIsolation03(const IsolationVariables &dr03)
Definition: GsfElectron.h:517
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
EgammaTowerIsolation * hadDepth2Isolation04
const reco::GsfElectronCoreRef coreRef
edm::Handle< reco::TrackCollection > currentCtfTracks
double getTowerEtSum(const reco::Candidate *cand, const std::vector< CaloTowerDetId > *detIdToExclude=0) const
EcalClusterFunctionBaseClass * crackCorrectionFunction
EgammaRecHitIsolation * ecalEndcapIsol04
const reco::SuperClusterRef superClusterRef
const Point & position() const
position
Definition: BeamSpot.h:62
EventData * eventData_
double dcot() const
RegressionHelper * regHelper
ElectronTkIsolation * tkIsolation04
ElectronData * electronData_
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
void calculateMode(const MultiTrajectoryStateMode *mtsMode)
TrajectoryStateOnSurface vtxTSOS
Candidate::LorentzVector calculateMomentum()
void GsfElectronAlgo::displayInternalElectrons ( const std::string &  title) const

Definition at line 893 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::electrons, GsfElectronAlgo::EventData::event, eventData_, edm::EventBase::id(), and LogTrace.

Referenced by GsfElectronBaseProducer::fillEvent().

894  {
895  LogTrace("GsfElectronAlgo") << "========== " << title << " ==========";
896  LogTrace("GsfElectronAlgo") << "Event: " << eventData_->event->id();
897  LogTrace("GsfElectronAlgo") << "Number of electrons: " << eventData_->electrons->size() ;
898  GsfElectronPtrCollection::const_iterator it ;
899  for ( it = eventData_->electrons->begin(); it != eventData_->electrons->end(); it++ )
900  {
901  LogTrace("GsfElectronAlgo") << "Electron with charge, pt, eta, phi: " << (*it)->charge() << " , "
902  << (*it)->pt() << " , " << (*it)->eta() << " , " << (*it)->phi();
903  }
904  LogTrace("GsfElectronAlgo") << "=================================================";
905  }
GsfElectronPtrCollection * electrons
#define LogTrace(id)
edm::EventID id() const
Definition: EventBase.h:58
EventData * eventData_
void GsfElectronAlgo::endEvent ( )

Definition at line 885 of file GsfElectronAlgo.cc.

References eventData_, and Exception.

Referenced by GsfElectronBaseProducer::endEvent().

886  {
887  if (eventData_==0)
888  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"lacking event data" ; }
889  delete eventData_ ;
890  eventData_ = 0 ;
891  }
EventData * eventData_
const reco::SuperClusterRef GsfElectronAlgo::getTrSuperCluster ( const reco::GsfTrackRef trackRef)
private
bool GsfElectronAlgo::isPreselected ( reco::GsfElectron ele)
private

Definition at line 1066 of file GsfElectronAlgo.cc.

References reco::GsfElectron::ecalDrivenSeed(), GsfElectronAlgo::StrategyConfiguration::gedElectronMode, generalData_, GsfElectronAlgo::StrategyConfiguration::MaxElePtForOnlyMVA, reco::GsfElectron::passingCutBasedPreselection(), reco::GsfElectron::passingMvaPreselection(), reco::GsfElectron::passingPflowPreselection(), reco::LeafCandidate::pt(), and GsfElectronAlgo::GeneralData::strategyCfg.

Referenced by removeNotPreselectedElectrons(), and setAmbiguityData().

1067  {
1068  bool passCutBased=ele->passingCutBasedPreselection();
1069  bool passPF=ele->passingPflowPreselection(); //it is worth nothing for gedGsfElectrons, this does nothing as its not set till GedGsfElectron finaliser, this is always false
1071  bool passmva=ele->passingMvaPreselection();
1072  if(!ele->ecalDrivenSeed()){
1074  return passmva && passCutBased;
1075  else
1076  return passmva;
1077  }
1078  else{
1079  return passCutBased || passPF || passmva;
1080  }
1081  }
1082  else{
1083  return passCutBased || passPF;
1084  }
1085 
1086  return true;
1087  }
GeneralData * generalData_
bool passingCutBasedPreselection() const
Definition: GsfElectron.h:646
bool passingMvaPreselection() const
Definition: GsfElectron.h:662
const StrategyConfiguration strategyCfg
virtual double pt() const final
transverse momentum
bool ecalDrivenSeed() const
Definition: GsfElectron.h:186
bool passingPflowPreselection() const
Definition: GsfElectron.h:647
void GsfElectronAlgo::removeAmbiguousElectrons ( )

Definition at line 1671 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::electrons, eventData_, and LogTrace.

Referenced by GsfElectronBaseProducer::fillEvent().

1672  {
1673  GsfElectronPtrCollection::size_type ei = 1, emax = eventData_->electrons->size() ;
1674  GsfElectronPtrCollection::iterator eitr = eventData_->electrons->begin() ;
1675  while (eitr!=eventData_->electrons->end())
1676  {
1677  LogTrace("GsfElectronAlgo")<<"========== remove ambiguous "<<ei<<"/"<<emax<<"==========" ;
1678  if ((*eitr)->ambiguous())
1679  { delete (*eitr) ; eitr = eventData_->electrons->erase(eitr) ; ++ei ; }
1680  else
1681  { ++eitr ; ++ei ; }
1682  }
1683  }
uint16_t size_type
GsfElectronPtrCollection * electrons
#define LogTrace(id)
EventData * eventData_
void GsfElectronAlgo::removeNotPreselectedElectrons ( )

Definition at line 1089 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::electrons, eventData_, isPreselected(), and LogTrace.

Referenced by GsfElectronBaseProducer::fillEvent().

1090  {
1091  GsfElectronPtrCollection::size_type ei = 1, emax = eventData_->electrons->size() ;
1092  GsfElectronPtrCollection::iterator eitr = eventData_->electrons->begin() ;
1093  while (eitr!=eventData_->electrons->end())
1094  {
1095  LogTrace("GsfElectronAlgo")<<"========== removed not preselected "<<ei<<"/"<<emax<<"==========" ;
1096  if (isPreselected(*eitr))
1097  { ++eitr ; ++ei ; }
1098  else
1099  { delete (*eitr) ; eitr = eventData_->electrons->erase(eitr) ; ++ei ; }
1100  }
1101  }
bool isPreselected(reco::GsfElectron *ele)
uint16_t size_type
GsfElectronPtrCollection * electrons
#define LogTrace(id)
EventData * eventData_
void GsfElectronAlgo::setAmbiguityData ( bool  ignoreNotPreselected = true)

Definition at line 1549 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::StrategyConfiguration::ambClustersOverlapStrategy, GsfElectronAlgo::StrategyConfiguration::ambSortingStrategy, GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventData::beamspot, reco::e1, reco::e2, GsfElectronAlgo::EventData::electrons, GsfElectronAlgo::EventData::endcapRecHits, eta, eventData_, eventSetupData_, Exception, edm::false, newFWLiteAna::found, generalData_, edm::Ref< C, T, F >::get(), GsfElectronAlgo::EventData::gsfPfRecTracks, EgAmbiguityTools::isBetter(), isPreselected(), LogDebug, reco::BeamSpot::position(), edm::Handle< T >::product(), EgAmbiguityTools::sharedEnergy(), GsfElectronAlgo::GeneralData::strategyCfg, dtDQMClient_cfg::threshold, GsfElectronAlgo::EventSetupData::trackerHandle, funct::true, and GsfElectronAlgo::StrategyConfiguration::useGsfPfRecTracks.

Referenced by GsfElectronBaseProducer::fillEvent().

1550  {
1551  GsfElectronPtrCollection::iterator e1, e2 ;
1556  else
1557  { throw cms::Exception("GsfElectronAlgo|UnknownAmbiguitySortingStrategy")<<"value of generalData_->strategyCfg.ambSortingStrategy is : "<<generalData_->strategyCfg.ambSortingStrategy ; }
1558 
1559  // init
1560  for
1561  ( e1 = eventData_->electrons->begin() ;
1562  e1 != eventData_->electrons->end() ;
1563  ++e1 )
1564  {
1565  (*e1)->clearAmbiguousGsfTracks() ;
1566  (*e1)->setAmbiguous(false) ;
1567  }
1568 
1569  // get ambiguous from GsfPfRecTracks
1571  {
1572  for
1573  ( e1 = eventData_->electrons->begin() ;
1574  e1 != eventData_->electrons->end() ;
1575  ++e1 )
1576  {
1577  bool found = false ;
1578  const GsfPFRecTrackCollection * gsfPfRecTrackCollection = eventData_->gsfPfRecTracks.product() ;
1579  GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
1580  for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
1581  gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
1582  ++gsfPfRecTrack )
1583  {
1584  if (gsfPfRecTrack->gsfTrackRef()==(*e1)->gsfTrack())
1585  {
1586  if (found)
1587  {
1588  edm::LogWarning("GsfElectronAlgo")<<"associated gsfPfRecTrack already found" ;
1589  }
1590  else
1591  {
1592  found = true ;
1593  const std::vector<reco::GsfPFRecTrackRef> & duplicates(gsfPfRecTrack->convBremGsfPFRecTrackRef()) ;
1594  std::vector<reco::GsfPFRecTrackRef>::const_iterator duplicate ;
1595  for ( duplicate = duplicates.begin() ; duplicate != duplicates.end() ; duplicate ++ )
1596  { (*e1)->addAmbiguousGsfTrack((*duplicate)->gsfTrackRef()) ; }
1597  }
1598  }
1599  }
1600  }
1601  }
1602  // or search overlapping clusters
1603  else
1604  {
1605  for
1606  ( e1 = eventData_->electrons->begin() ;
1607  e1 != eventData_->electrons->end() ;
1608  ++e1 )
1609  {
1610  if ((*e1)->ambiguous()) continue ;
1611  if ( ignoreNotPreselected && !isPreselected(*e1) ) continue ;
1612 
1613  SuperClusterRef scRef1 = (*e1)->superCluster();
1614  CaloClusterPtr eleClu1 = (*e1)->electronCluster();
1615  LogDebug("GsfElectronAlgo")
1616  << "Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1617  << ", cluster " << scRef1.get()
1618  << " & track " << (*e1)->gsfTrack().get() ;
1619 
1620  for
1621  ( e2 = e1, ++e2 ;
1622  e2 != eventData_->electrons->end() ;
1623  ++e2 )
1624  {
1625  if ((*e2)->ambiguous()) continue ;
1626  if ( ignoreNotPreselected && !isPreselected(*e2) ) continue ;
1627 
1628  SuperClusterRef scRef2 = (*e2)->superCluster();
1629  CaloClusterPtr eleClu2 = (*e2)->electronCluster();
1630 
1631  // search if same cluster
1632  bool sameCluster = false ;
1634  { sameCluster = (scRef1==scRef2) ; }
1636  {
1637  float eMin = 1. ;
1638  float threshold = eMin*cosh(EleRelPoint(scRef1->position(),eventData_->beamspot->position()).eta()) ;
1639  sameCluster =
1641  (EgAmbiguityTools::sharedEnergy(&(*scRef1->seed()),&(*eleClu2),eventData_->barrelRecHits,eventData_->endcapRecHits)>=threshold) ||
1643  (EgAmbiguityTools::sharedEnergy(&(*scRef1->seed()),&(*scRef2->seed()),eventData_->barrelRecHits,eventData_->endcapRecHits)>=threshold) ) ;
1644  }
1645  else
1646  { throw cms::Exception("GsfElectronAlgo|UnknownAmbiguityClustersOverlapStrategy")<<"value of generalData_->strategyCfg.ambClustersOverlapStrategy is : "<<generalData_->strategyCfg.ambClustersOverlapStrategy ; }
1647 
1648  // main instructions
1649  if (sameCluster)
1650  {
1651  LogDebug("GsfElectronAlgo")
1652  << "Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1653  << ", cluster " << scRef2.get()
1654  << " and track " << (*e2)->gsfTrack().get() ;
1655  (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1656  (*e2)->setAmbiguous(true) ;
1657  }
1658  else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1659  {
1660  edm::LogWarning("GsfElectronAlgo")
1661  << "Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1662  << ", cluster " << scRef2.get()
1663  << " and track " << (*e2)->gsfTrack().get() ;
1664  (*e2)->setAmbiguous(true) ;
1665  }
1666  }
1667  }
1668  }
1669  }
#define LogDebug(id)
bool isPreselected(reco::GsfElectron *ele)
GeneralData * generalData_
bool isBetter(const reco::GsfElectron *, const reco::GsfElectron *)
EventSetupData * eventSetupData_
edm::Handle< EcalRecHitCollection > endcapRecHits
const StrategyConfiguration strategyCfg
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
float sharedEnergy(const reco::CaloCluster *, const reco::CaloCluster *, edm::Handle< EcalRecHitCollection > &barrelRecHits, edm::Handle< EcalRecHitCollection > &endcapRecHits)
edm::Handle< EcalRecHitCollection > barrelRecHits
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
const reco::BeamSpot * beamspot
GsfElectronPtrCollection * electrons
Float e1
Definition: deltaR.h:20
T const * product() const
Definition: Handle.h:81
Float e2
Definition: deltaR.h:21
const Point & position() const
position
Definition: BeamSpot.h:62
EventData * eventData_
volatile std::atomic< bool > shutdown_flag false
edm::ESHandle< TrackerGeometry > trackerHandle
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
void GsfElectronAlgo::setCutBasedPreselectionFlag ( reco::GsfElectron ele,
const reco::BeamSpot bs 
)
private

Definition at line 1104 of file GsfElectronAlgo.cc.

References funct::abs(), edm::RefToBase< T >::castTo(), looper::cfg, reco::GsfElectron::core(), GsfElectronAlgo::GeneralData::cutsCfg, GsfElectronAlgo::GeneralData::cutsCfgPflow, reco::GsfElectron::deltaEtaSuperClusterTrackAtVtx(), reco::GsfElectron::deltaPhiSuperClusterTrackAtVtx(), EcalBarrel, EcalEndcap, reco::GsfElectron::eSuperClusterOverP(), eta, Exception, edm::false, GsfElectronAlgo::StrategyConfiguration::gedElectronMode, generalData_, reco::GsfElectron::gsfTrack(), reco::GsfElectron::hcalDepth1OverEcal(), reco::GsfElectron::hcalDepth2OverEcal(), reco::GsfElectron::hcalOverEcal(), reco::CaloCluster::hitsAndFractions(), GsfElectronAlgo::CutsConfiguration::isBarrel, reco::GsfElectron::isEB(), reco::GsfElectron::isEBEEGap(), reco::GsfElectron::isEBEtaGap(), reco::GsfElectron::isEBPhiGap(), reco::GsfElectron::isEE(), reco::GsfElectron::isEEDeeGap(), reco::GsfElectron::isEERingGap(), GsfElectronAlgo::CutsConfiguration::isEndcaps, GsfElectronAlgo::CutsConfiguration::isFiducial, edm::Ref< C, T, F >::isNull(), LogTrace, GsfElectronAlgo::CutsConfiguration::maxDeltaEtaBarrel, GsfElectronAlgo::CutsConfiguration::maxDeltaEtaEndcaps, GsfElectronAlgo::CutsConfiguration::maxDeltaPhiBarrel, GsfElectronAlgo::CutsConfiguration::maxDeltaPhiEndcaps, GsfElectronAlgo::CutsConfiguration::maxEOverPBarrel, GsfElectronAlgo::CutsConfiguration::maxEOverPEndcaps, GsfElectronAlgo::CutsConfiguration::maxHOverEBarrel, GsfElectronAlgo::CutsConfiguration::maxHOverEEndcaps, GsfElectronAlgo::CutsConfiguration::maxSigmaIetaIetaBarrel, GsfElectronAlgo::CutsConfiguration::maxSigmaIetaIetaEndcaps, GsfElectronAlgo::CutsConfiguration::maxTIP, GsfElectronAlgo::CutsConfiguration::minEOverPBarrel, GsfElectronAlgo::CutsConfiguration::minEOverPEndcaps, GsfElectronAlgo::CutsConfiguration::minSCEtBarrel, GsfElectronAlgo::CutsConfiguration::minSCEtEndcaps, reco::BeamSpot::position(), reco::return(), fileCollector::seed, GsfElectronAlgo::CutsConfiguration::seedFromTEC, reco::GsfElectron::setPassCutBasedPreselection(), reco::GsfElectron::sigmaIetaIeta(), GsfElectronAlgo::GeneralData::strategyCfg, and reco::GsfElectron::superCluster().

Referenced by createElectron().

1105  {
1106  // default value
1107  ele->setPassCutBasedPreselection(false) ;
1108 
1109  // kind of seeding
1110  bool eg = ele->core()->ecalDrivenSeed() ;
1111  bool pf = ele->core()->trackerDrivenSeed() && !ele->core()->ecalDrivenSeed() ;
1112  bool gedMode = generalData_->strategyCfg.gedElectronMode;
1113  if (eg&&pf) { throw cms::Exception("GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<"An electron cannot be both egamma and purely pflow" ; }
1114  if ((!eg)&&(!pf)) { throw cms::Exception("GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<"An electron cannot be neither egamma nor purely pflow" ; }
1115 
1116  const CutsConfiguration * cfg = ((eg||gedMode)?&generalData_->cutsCfg:&generalData_->cutsCfgPflow);
1117 
1118  // Et cut
1119  double etaValue = EleRelPoint(ele->superCluster()->position(),bs.position()).eta() ;
1120  double etValue = ele->superCluster()->energy()/cosh(etaValue) ;
1121  LogTrace("GsfElectronAlgo") << "Et : " << etValue ;
1122  if (ele->isEB() && (etValue < cfg->minSCEtBarrel)) return ;
1123  if (ele->isEE() && (etValue < cfg->minSCEtEndcaps)) return ;
1124  LogTrace("GsfElectronAlgo") << "Et criteria are satisfied";
1125 
1126  // E/p cut
1127  double eopValue = ele->eSuperClusterOverP() ;
1128  LogTrace("GsfElectronAlgo") << "E/p : " << eopValue ;
1129  if (ele->isEB() && (eopValue > cfg->maxEOverPBarrel)) return ;
1130  if (ele->isEE() && (eopValue > cfg->maxEOverPEndcaps)) return ;
1131  if (ele->isEB() && (eopValue < cfg->minEOverPBarrel)) return ;
1132  if (ele->isEE() && (eopValue < cfg->minEOverPEndcaps)) return ;
1133  LogTrace("GsfElectronAlgo") << "E/p criteria are satisfied";
1134 
1135  // HoE cuts
1136  LogTrace("GsfElectronAlgo") << "HoE1 : " << ele->hcalDepth1OverEcal() << ", HoE2 : " << ele->hcalDepth2OverEcal();
1137  double had = ele->hcalOverEcal()*ele->superCluster()->energy() ;
1138  const reco::CaloCluster & seedCluster = *(ele->superCluster()->seed()) ;
1139  int detector = seedCluster.hitsAndFractions()[0].first.subdetId() ;
1140  bool HoEveto = false ;
1141  if (detector==EcalBarrel && (had<cfg->maxHBarrel || (had/ele->superCluster()->energy())<cfg->maxHOverEBarrel)) HoEveto=true;
1142  else if (detector==EcalEndcap && (had<cfg->maxHEndcaps || (had/ele->superCluster()->energy())<cfg->maxHOverEEndcaps)) HoEveto=true;
1143  if ( !HoEveto ) return ;
1144  LogTrace("GsfElectronAlgo") << "H/E criteria are satisfied";
1145 
1146  // delta eta criteria
1147  double deta = ele->deltaEtaSuperClusterTrackAtVtx() ;
1148  LogTrace("GsfElectronAlgo") << "delta eta : " << deta ;
1149  if (ele->isEB() && (std::abs(deta) > cfg->maxDeltaEtaBarrel)) return ;
1150  if (ele->isEE() && (std::abs(deta) > cfg->maxDeltaEtaEndcaps)) return ;
1151  LogTrace("GsfElectronAlgo") << "Delta eta criteria are satisfied";
1152 
1153  // delta phi criteria
1154  double dphi = ele->deltaPhiSuperClusterTrackAtVtx();
1155  LogTrace("GsfElectronAlgo") << "delta phi : " << dphi;
1156  if (ele->isEB() && (std::abs(dphi) > cfg->maxDeltaPhiBarrel)) return ;
1157  if (ele->isEE() && (std::abs(dphi) > cfg->maxDeltaPhiEndcaps)) return ;
1158  LogTrace("GsfElectronAlgo") << "Delta phi criteria are satisfied";
1159 
1160  // sigma ieta ieta
1161  LogTrace("GsfElectronAlgo") << "sigma ieta ieta : " << ele->sigmaIetaIeta();
1162  if (ele->isEB() && (ele->sigmaIetaIeta() > cfg->maxSigmaIetaIetaBarrel)) return ;
1163  if (ele->isEE() && (ele->sigmaIetaIeta() > cfg->maxSigmaIetaIetaEndcaps)) return ;
1164  LogTrace("GsfElectronAlgo") << "Sigma ieta ieta criteria are satisfied";
1165 
1166  // fiducial
1167  if (!ele->isEB() && cfg->isBarrel) return ;
1168  if (!ele->isEE() && cfg->isEndcaps) return ;
1169  if (cfg->isFiducial && (ele->isEBEEGap()||ele->isEBEtaGap()||ele->isEBPhiGap()||ele->isEERingGap()||ele->isEEDeeGap())) return ;
1170  LogTrace("GsfElectronAlgo") << "Fiducial flags criteria are satisfied";
1171 
1172  // seed in TEC
1173  edm::RefToBase<TrajectorySeed> seed = ele->gsfTrack()->extra()->seedRef() ;
1174  ElectronSeedRef elseed = seed.castTo<ElectronSeedRef>() ;
1175  if (eg && !generalData_->cutsCfg.seedFromTEC)
1176  {
1177  if (elseed.isNull())
1178  { throw cms::Exception("GsfElectronAlgo|NotElectronSeed")<<"The GsfTrack seed is not an ElectronSeed ?!" ; }
1179  else
1180  { if (elseed->subDet2()==6) return ; }
1181  }
1182 
1183  // transverse impact parameter
1184  if (std::abs(ele->gsfTrack()->dxy(bs.position()))>cfg->maxTIP) return ;
1185  LogTrace("GsfElectronAlgo") << "TIP criterion is satisfied" ;
1186 
1187  LogTrace("GsfElectronAlgo") << "All cut based criteria are satisfied" ;
1188  ele->setPassCutBasedPreselection(true) ;
1189  }
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
void setPassCutBasedPreselection(bool flag)
Definition: GsfElectron.h:654
tuple cfg
Definition: looper.py:293
bool isEBEtaGap() const
Definition: GsfElectron.h:355
float eSuperClusterOverP() const
Definition: GsfElectron.h:243
bool isEBEEGap() const
Definition: GsfElectron.h:353
float hcalDepth2OverEcal() const
Definition: GsfElectron.h:423
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:192
bool isEERingGap() const
Definition: GsfElectron.h:359
bool isEEDeeGap() const
Definition: GsfElectron.h:358
const StrategyConfiguration strategyCfg
bool isEE() const
Definition: GsfElectron.h:351
bool isEB() const
Definition: GsfElectron.h:350
float deltaEtaSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:247
float sigmaIetaIeta() const
Definition: GsfElectron.h:416
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:182
float deltaPhiSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:250
float hcalOverEcal() const
Definition: GsfElectron.h:424
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const CutsConfiguration cutsCfg
bool isNull() const
Checks for null.
Definition: Ref.h:249
#define LogTrace(id)
float hcalDepth1OverEcal() const
Definition: GsfElectron.h:422
REF castTo() const
Definition: RefToBase.h:286
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
return(e1-e2)*(e1-e2)+dp *dp
bool isEBPhiGap() const
Definition: GsfElectron.h:356
const Point & position() const
position
Definition: BeamSpot.h:62
volatile std::atomic< bool > shutdown_flag false
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:183
void GsfElectronAlgo::setMVAepiBasedPreselectionFlag ( reco::GsfElectron ele)
private
void GsfElectronAlgo::setMVAInputs ( const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaInput > &  mvaInputs)

Definition at line 1207 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::electrons, and eventData_.

Referenced by GEDGsfElectronProducer::produce().

1208 {
1209  GsfElectronPtrCollection::iterator el ;
1210  for
1211  ( el = eventData_->electrons->begin() ;
1212  el != eventData_->electrons->end() ;
1213  el++ )
1214  {
1215  std::map<reco::GsfTrackRef,reco::GsfElectron::MvaInput>::const_iterator itcheck=mvaInputs.find((*el)->gsfTrack());
1216  (*el)->setMvaInput(itcheck->second);
1217  }
1218 }
GsfElectronPtrCollection * electrons
EventData * eventData_
void GsfElectronAlgo::setMVAOutputs ( const gsfAlgoHelpers::HeavyObjectCache hoc,
const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaOutput > &  mvaOutputs 
)

Definition at line 1220 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::electrons, eventData_, GsfElectronAlgo::StrategyConfiguration::gedElectronMode, generalData_, gsfAlgoHelpers::HeavyObjectCache::iElectronMVAEstimator, reco::GsfElectron::MvaOutput::mva_e_pi, reco::GsfElectron::MvaOutput::mva_Isolated, gsfAlgoHelpers::HeavyObjectCache::sElectronMVAEstimator, GsfElectronAlgo::GeneralData::strategyCfg, and GsfElectronAlgo::EventData::vertices.

Referenced by GEDGsfElectronProducer::produce().

1222 {
1223  GsfElectronPtrCollection::iterator el ;
1224  for
1225  ( el = eventData_->electrons->begin() ;
1226  el != eventData_->electrons->end() ;
1227  el++ )
1228  {
1230  float mva_NIso_Value= hoc->sElectronMVAEstimator->mva( *(*el), *(eventData_->vertices));
1231  float mva_Iso_Value = hoc->iElectronMVAEstimator->mva( *(*el), eventData_->vertices->size() );
1232  GsfElectron::MvaOutput mvaOutput ;
1233  mvaOutput.mva_e_pi = mva_NIso_Value ;
1234  mvaOutput.mva_Isolated = mva_Iso_Value ;
1235  (*el)->setMvaOutput(mvaOutput);
1236  }
1237  else{
1238  std::map<reco::GsfTrackRef,reco::GsfElectron::MvaOutput>::const_iterator itcheck=mvaOutputs.find((*el)->gsfTrack());
1239  (*el)->setMvaOutput(itcheck->second);
1240  }
1241  }
1242 }
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
GeneralData * generalData_
const StrategyConfiguration strategyCfg
GsfElectronPtrCollection * electrons
edm::Handle< reco::VertexCollection > vertices
EventData * eventData_
std::unique_ptr< const ElectronMVAEstimator > iElectronMVAEstimator
void GsfElectronAlgo::setPflowPreselectionFlag ( reco::GsfElectron ele)
private

Definition at line 1191 of file GsfElectronAlgo.cc.

References reco::GsfElectron::core(), GsfElectronAlgo::GeneralData::cutsCfg, GsfElectronAlgo::GeneralData::cutsCfgPflow, generalData_, LogTrace, GsfElectronAlgo::CutsConfiguration::minMVA, reco::GsfElectron::MvaOutput::mva_e_pi, reco::GsfElectron::mvaOutput(), reco::GsfElectron::passingMvaPreselection(), reco::GsfElectron::setPassMvaPreselection(), and reco::GsfElectron::setPassPflowPreselection().

Referenced by addPflowInfo().

1192  {
1193  ele->setPassMvaPreselection(false) ;
1194 
1195  if (ele->core()->ecalDrivenSeed())
1196  { if (ele->mvaOutput().mva_e_pi>=generalData_->cutsCfg.minMVA) ele->setPassMvaPreselection(true) ; }
1197  else
1199 
1200  if (ele->passingMvaPreselection())
1201  { LogTrace("GsfElectronAlgo") << "Main mva criterion is satisfied" ; }
1202 
1204 
1205  }
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
bool passingMvaPreselection() const
Definition: GsfElectron.h:662
void setPassMvaPreselection(bool flag)
Definition: GsfElectron.h:661
const CutsConfiguration cutsCfg
#define LogTrace(id)
const MvaOutput & mvaOutput() const
Definition: GsfElectron.h:620
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
void setPassPflowPreselection(bool flag)
Definition: GsfElectron.h:655
void GsfElectronAlgo::setPixelMatchInfomation ( reco::GsfElectron ele)
private

Definition at line 1687 of file GsfElectronAlgo.cc.

References edm::RefToBase< T >::castTo(), reco::LeafCandidate::charge(), reco::GsfElectron::gsfTrack(), edm::RefToBase< T >::isNull(), edm::Ref< C, T, F >::isNull(), fileCollector::seed, reco::GsfElectron::setPixelMatchDPhi1(), reco::GsfElectron::setPixelMatchDPhi2(), reco::GsfElectron::setPixelMatchDRz1(), reco::GsfElectron::setPixelMatchDRz2(), and reco::GsfElectron::setPixelMatchSubdetectors().

Referenced by createElectron().

1687  {
1688  int sd1 = 0 ;
1689  int sd2 = 0 ;
1690  float dPhi1 = 0 ;
1691  float dPhi2 = 0 ;
1692  float dRz1 = 0 ;
1693  float dRz2 = 0 ;
1694  edm::RefToBase<TrajectorySeed> seed = ele->gsfTrack()->extra()->seedRef();
1695  ElectronSeedRef elseed = seed.castTo<ElectronSeedRef>();
1696  if(seed.isNull()){}
1697  else{
1698  if(elseed.isNull()){}
1699  else{
1700  sd1 = elseed->subDet1() ;
1701  sd2 = elseed->subDet2() ;
1702  dPhi1 = (ele->charge()>0) ? elseed->dPhi1Pos() : elseed->dPhi1() ;
1703  dPhi2 = (ele->charge()>0) ? elseed->dPhi2Pos() : elseed->dPhi2() ;
1704  dRz1 = (ele->charge()>0) ? elseed->dRz1Pos () : elseed->dRz1 () ;
1705  dRz2 = (ele->charge()>0) ? elseed->dRz2Pos () : elseed->dRz2 () ;
1706  }
1707  }
1708  ele->setPixelMatchSubdetectors(sd1,sd2) ;
1709  ele->setPixelMatchDPhi1(dPhi1) ;
1710  ele->setPixelMatchDPhi2(dPhi2) ;
1711  ele->setPixelMatchDRz1 (dRz1 ) ;
1712  ele->setPixelMatchDRz2 (dRz2 ) ;
1713 }
void setPixelMatchDRz2(float dRz2)
Definition: GsfElectron.h:829
void setPixelMatchDPhi1(float dPhi1)
Definition: GsfElectron.h:826
void setPixelMatchSubdetectors(int sd1, int sd2)
Definition: GsfElectron.h:825
virtual int charge() const final
electric charge
Definition: LeafCandidate.h:91
bool isNull() const
Checks for null.
Definition: Ref.h:249
void setPixelMatchDPhi2(float dPhi2)
Definition: GsfElectron.h:827
REF castTo() const
Definition: RefToBase.h:286
bool isNull() const
Checks for null.
Definition: RefToBase.h:328
void setPixelMatchDRz1(float dRz1)
Definition: GsfElectron.h:828
virtual GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:183

Member Data Documentation

ElectronData* GsfElectronAlgo::electronData_
private

Definition at line 244 of file GsfElectronAlgo.h.

Referenced by completeElectrons(), createElectron(), and ~GsfElectronAlgo().

EventData* GsfElectronAlgo::eventData_
private
EventSetupData* GsfElectronAlgo::eventSetupData_
private
GeneralData* GsfElectronAlgo::generalData_
private