CMS 3D CMS Logo

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, const edm::ParameterSet &tkIsol03Cfg, const edm::ParameterSet &tkIsol04Cfg)
 
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 calculateSaturationInfo (const reco::SuperClusterRef &, reco::GsfElectron::SaturationInfo &)
 
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_
 
EleTkIsolFromCands tkIsol03Calc_
 
EleTkIsolFromCands tkIsol04Calc_
 

Detailed Description

Definition at line 58 of file GsfElectronAlgo.h.

Member Typedef Documentation

Definition at line 212 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,
const edm::ParameterSet tkIsol03Cfg,
const edm::ParameterSet tkIsol04Cfg 
)

Definition at line 725 of file GsfElectronAlgo.cc.

Referenced by calculateShowerShape_full5x5().

742  : generalData_(new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,recHitsCfg,superClusterErrorFunction,crackCorrectionFunction,mva_NIso_Cfg,mva_Iso_Cfg,regCfg)),
743  eventSetupData_(new EventSetupData),
744  eventData_(nullptr), electronData_(nullptr),
745  tkIsol03Calc_(tkIsol03Cfg),tkIsol04Calc_(tkIsol04Cfg)
746  {}
GeneralData * generalData_
EventSetupData * eventSetupData_
EleTkIsolFromCands tkIsol04Calc_
EventData * eventData_
ElectronData * electronData_
EleTkIsolFromCands tkIsol03Calc_
GsfElectronAlgo::~GsfElectronAlgo ( )

Definition at line 748 of file GsfElectronAlgo.cc.

References electronData_, eventData_, eventSetupData_, and generalData_.

749  {
750  delete generalData_ ;
751  delete eventSetupData_ ;
752  delete eventData_ ;
753  delete electronData_ ;
754  }
GeneralData * generalData_
EventSetupData * eventSetupData_
EventData * eventData_
ElectronData * electronData_

Member Function Documentation

void GsfElectronAlgo::addPflowInfo ( )

Definition at line 1011 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::edIsolationValues, GsfElectronAlgo::EventData::electrons, eventData_, Exception, funct::false, runEdmFileComparison::found, 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().

1012  {
1013  bool found ;
1014  const GsfElectronCollection * edElectrons = eventData_->previousElectrons.product() ;
1015  const GsfElectronCollection * pfElectrons = eventData_->pflowElectrons.product() ;
1016  GsfElectronCollection::const_iterator pfElectron, edElectron ;
1017  unsigned int edIndex, pfIndex ;
1018 
1019  GsfElectronPtrCollection::iterator el ;
1020  for
1021  ( el = eventData_->electrons->begin() ;
1022  el != eventData_->electrons->end() ;
1023  el++ )
1024  {
1025 
1026  // Retreive info from pflow electrons
1027  found = false ;
1028  for
1029  ( pfIndex = 0, pfElectron = pfElectrons->begin() ; pfElectron != pfElectrons->end() ; pfIndex++, pfElectron++ )
1030  {
1031  if (pfElectron->gsfTrack()==(*el)->gsfTrack())
1032  {
1033  if (found)
1034  {
1035  edm::LogWarning("GsfElectronProducer")<<"associated pfGsfElectron already found" ;
1036  }
1037  else
1038  {
1039  found = true ;
1040 
1041  // Isolation Values
1042  if( !(eventData_->pfIsolationValues).empty() )
1043  {
1045  pfElectronRef(eventData_->pflowElectrons, pfIndex);
1047  isoVariables.sumChargedHadronPt =(*(eventData_->pfIsolationValues)[0])[pfElectronRef];
1048  isoVariables.sumPhotonEt =(*(eventData_->pfIsolationValues)[1])[pfElectronRef];
1049  isoVariables.sumNeutralHadronEt =(*(eventData_->pfIsolationValues)[2])[pfElectronRef];
1050  (*el)->setPfIsolationVariables(isoVariables);
1051  }
1052 
1053 // (*el)->setPfIsolationVariables(pfElectron->pfIsolationVariables()) ;
1054  (*el)->setMvaInput(pfElectron->mvaInput()) ;
1055  (*el)->setMvaOutput(pfElectron->mvaOutput()) ;
1056  if ((*el)->ecalDrivenSeed())
1057  { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),false) ; }
1058  else
1059  { (*el)->setP4(GsfElectron::P4_PFLOW_COMBINATION,pfElectron->p4(GsfElectron::P4_PFLOW_COMBINATION),pfElectron->p4Error(GsfElectron::P4_PFLOW_COMBINATION),true) ; }
1060  double noCutMin = -999999999. ;
1061  if ((*el)->mva_e_pi()<noCutMin) { throw cms::Exception("GsfElectronAlgo|UnexpectedMvaValue")<<"unexpected MVA value: "<<(*el)->mva_e_pi() ; }
1062  }
1063  }
1064  }
1065 
1066  // Isolation Values
1067  // Retreive not found info from ed electrons
1068  if( !(eventData_->edIsolationValues).empty() )
1069  {
1070  edIndex = 0, edElectron = edElectrons->begin() ;
1071  while ((found == false)&&(edElectron != edElectrons->end()))
1072  {
1073  if (edElectron->gsfTrack()==(*el)->gsfTrack())
1074  {
1075  found = true ;
1076 
1077  // CONSTRUCTION D UNE REF dans le handle eventData_->previousElectrons avec l'indice edIndex,
1078  // puis recuperation dans la ValueMap ED
1079 
1081  edElectronRef(eventData_->previousElectrons, edIndex);
1083  isoVariables.sumChargedHadronPt =(*(eventData_->edIsolationValues)[0])[edElectronRef];
1084  isoVariables.sumPhotonEt =(*(eventData_->edIsolationValues)[1])[edElectronRef];
1085  isoVariables.sumNeutralHadronEt =(*(eventData_->edIsolationValues)[2])[edElectronRef];
1086  (*el)->setPfIsolationVariables(isoVariables);
1087  }
1088 
1089  edIndex++ ;
1090  edElectron++ ;
1091  }
1092  }
1093 
1094  // Preselection
1096 
1097  }
1098  }
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
float sumPhotonEt
sum pt of PF photons // old float photonIso ;
Definition: GsfElectron.h:627
IsolationValueMaps pfIsolationValues
float sumNeutralHadronEt
sum pt of neutral hadrons // old float neutralHadronIso ;
Definition: GsfElectron.h:626
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_
IsolationValueMaps edIsolationValues
float sumChargedHadronPt
sum-pt of charged Hadron // old float chargedHadronIso ;
Definition: GsfElectron.h:625
void GsfElectronAlgo::beginEvent ( edm::Event event)

Definition at line 823 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, GsfElectronAlgo::EventData::event, GsfElectronAlgo::EventData::EventData(), eventData_, eventSetupData_, Exception, generalData_, edm::Event::getByToken(), 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::intRadiusEcalBarrel, GsfElectronAlgo::IsolationConfiguration::intRadiusEcalEndcaps, GsfElectronAlgo::IsolationConfiguration::intRadiusHcal, GsfElectronAlgo::GeneralData::isoCfg, GsfElectronAlgo::IsolationConfiguration::jurassicWidth, GsfElectronAlgo::EventData::pfIsolationValues, GsfElectronAlgo::InputTagsConfiguration::pfIsoVals, GsfElectronAlgo::EventData::pflowElectrons, GsfElectronAlgo::InputTagsConfiguration::pflowGsfElectronsTag, GsfElectronAlgo::InputTagsConfiguration::pfMVA, GsfElectronAlgo::EventData::pfMva, GsfElectronAlgo::EventData::previousElectrons, GsfElectronAlgo::InputTagsConfiguration::previousGsfElectrons, edm::Handle< T >::product(), edm::ESHandle< T >::product(), 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::EventData::towers, GsfElectronAlgo::StrategyConfiguration::useGsfPfRecTracks, GsfElectronAlgo::IsolationConfiguration::useNumCrystals, GsfElectronAlgo::EventData::vertices, GsfElectronAlgo::IsolationConfiguration::vetoClustered, and GsfElectronAlgo::InputTagsConfiguration::vtxCollectionTag.

Referenced by GsfElectronBaseProducer::beginEvent().

824  {
825  if (eventData_!=nullptr)
826  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"unexpected event data" ; }
827  eventData_ = new EventData ;
828 
829  // init the handles linked to the current event
830  eventData_->event = &event ;
837  event.getByToken(generalData_->inputCfg.hcalTowersTag,eventData_->towers) ;
838  event.getByToken(generalData_->inputCfg.pfMVA,eventData_->pfMva) ;
839  event.getByToken(generalData_->inputCfg.seedsTag,eventData_->seeds) ;
843 
844  // get the beamspot from the Event:
845  edm::Handle<reco::BeamSpot> recoBeamSpotHandle ;
846  event.getByToken(generalData_->inputCfg.beamSpotTag,recoBeamSpotHandle) ;
847  eventData_->beamspot = recoBeamSpotHandle.product() ;
848 
849  // prepare access to hcal data
852 
853  // Isolation algos
854  float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
855  float egHcalIsoConeSizeIn=generalData_->isoCfg.intRadiusHcal,egHcalIsoPtMin=generalData_->isoCfg.etMinHcal;
856  int egHcalDepth1=1, egHcalDepth2=2;
857  eventData_->hadDepth1Isolation03 = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
858  eventData_->hadDepth2Isolation03 = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
859  eventData_->hadDepth1Isolation04 = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
860  eventData_->hadDepth2Isolation04 = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
861  eventData_->hadDepth1Isolation03Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,0.,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
862  eventData_->hadDepth2Isolation03Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,0.,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
863  eventData_->hadDepth1Isolation04Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,0.,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
864  eventData_->hadDepth2Isolation04Bc = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,0.,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
865 
866  float egIsoConeSizeOutSmall=0.3, egIsoConeSizeOutLarge=0.4, egIsoJurassicWidth=generalData_->isoCfg.jurassicWidth;
867  float egIsoPtMinBarrel=generalData_->isoCfg.etMinBarrel,egIsoEMinBarrel=generalData_->isoCfg.eMinBarrel, egIsoConeSizeInBarrel=generalData_->isoCfg.intRadiusEcalBarrel;
868  float egIsoPtMinEndcap=generalData_->isoCfg.etMinEndcaps,egIsoEMinEndcap=generalData_->isoCfg.eMinEndcaps, egIsoConeSizeInEndcap=generalData_->isoCfg.intRadiusEcalEndcaps;
869  eventData_->ecalBarrelIsol03 = new EgammaRecHitIsolation(egIsoConeSizeOutSmall,egIsoConeSizeInBarrel,egIsoJurassicWidth,egIsoPtMinBarrel,egIsoEMinBarrel,eventSetupData_->caloGeom,*(eventData_->barrelRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
870  eventData_->ecalBarrelIsol04 = new EgammaRecHitIsolation(egIsoConeSizeOutLarge,egIsoConeSizeInBarrel,egIsoJurassicWidth,egIsoPtMinBarrel,egIsoEMinBarrel,eventSetupData_->caloGeom,*(eventData_->barrelRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
871  eventData_->ecalEndcapIsol03 = new EgammaRecHitIsolation(egIsoConeSizeOutSmall,egIsoConeSizeInEndcap,egIsoJurassicWidth,egIsoPtMinEndcap,egIsoEMinEndcap,eventSetupData_->caloGeom,*(eventData_->endcapRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
872  eventData_->ecalEndcapIsol04 = new EgammaRecHitIsolation(egIsoConeSizeOutLarge,egIsoConeSizeInEndcap,egIsoJurassicWidth,egIsoPtMinEndcap,egIsoEMinEndcap,eventSetupData_->caloGeom,*(eventData_->endcapRecHits),eventSetupData_->sevLevel.product(),DetId::Ecal);
889 
890  //Fill in the Isolation Value Maps for PF and EcalDriven electrons
891  std::vector<edm::InputTag> inputTagIsoVals;
893  inputTagIsoVals.push_back(generalData_->inputCfg.pfIsoVals.getParameter<edm::InputTag>("pfSumChargedHadronPt"));
894  inputTagIsoVals.push_back(generalData_->inputCfg.pfIsoVals.getParameter<edm::InputTag>("pfSumPhotonEt"));
895  inputTagIsoVals.push_back(generalData_->inputCfg.pfIsoVals.getParameter<edm::InputTag>("pfSumNeutralHadronEt"));
896 
897  eventData_->pfIsolationValues.resize(inputTagIsoVals.size());
898 
899  for (size_t j = 0; j<inputTagIsoVals.size(); ++j) {
900  event.getByLabel(inputTagIsoVals[j], eventData_->pfIsolationValues[j]);
901  }
902 
903  }
904 
906  inputTagIsoVals.clear();
907  inputTagIsoVals.push_back(generalData_->inputCfg.edIsoVals.getParameter<edm::InputTag>("edSumChargedHadronPt"));
908  inputTagIsoVals.push_back(generalData_->inputCfg.edIsoVals.getParameter<edm::InputTag>("edSumPhotonEt"));
909  inputTagIsoVals.push_back(generalData_->inputCfg.edIsoVals.getParameter<edm::InputTag>("edSumNeutralHadronEt"));
910 
911  eventData_->edIsolationValues.resize(inputTagIsoVals.size());
912 
913  for (size_t j = 0; j<inputTagIsoVals.size(); ++j) {
914  event.getByLabel(inputTagIsoVals[j], eventData_->edIsolationValues[j]);
915  }
916  }
917  }
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
void setUseNumCrystals(bool b=true)
EgammaRecHitIsolation * ecalEndcapIsol03
EgammaTowerIsolation * hadDepth2Isolation03Bc
edm::Handle< EcalRecHitCollection > barrelRecHits
IsolationValueMaps pfIsolationValues
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
EgammaTowerIsolation * hadDepth2Isolation04
void setVetoClustered(bool b=true)
edm::Handle< reco::TrackCollection > currentCtfTracks
edm::ESHandle< CaloGeometry > caloGeom
EgammaRecHitIsolation * ecalEndcapIsol04
EventData * eventData_
IsolationValueMaps edIsolationValues
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
T const * product() const
Definition: ESHandle.h:86
edm::Handle< CaloTowerCollection > towers
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
void GsfElectronAlgo::calculateSaturationInfo ( const reco::SuperClusterRef theClus,
reco::GsfElectron::SaturationInfo si 
)
private

Definition at line 539 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::barrelRecHits, gamEcalExtractorBlocks_cff::detector, EcalBarrel, ecalRecalibRecHit_cfi::ecalRecHit, edm::SortedCollection< T, SORT >::end(), GsfElectronAlgo::EventData::endcapRecHits, eventData_, edm::SortedCollection< T, SORT >::find(), reco::GsfElectron::SaturationInfo::isSeedSaturated, reco::GsfElectron::SaturationInfo::nSaturatedXtals, nullptr, reco::CaloCluster::seed(), and DetId::subdetId().

Referenced by createElectron().

540  {
541 
542  const reco::CaloCluster & seedCluster = *(theClus->seed()) ;
543  DetId seedXtalId = seedCluster.seed();
544  int detector = seedXtalId.subdetId();
545  const EcalRecHitCollection* ecalRecHits = nullptr ;
546  if (detector==EcalBarrel)
547  ecalRecHits = eventData_->barrelRecHits.product() ;
548  else
549  ecalRecHits = eventData_->endcapRecHits.product() ;
550 
551  int nSaturatedXtals = 0;
552  bool isSeedSaturated = false;
553  const auto hitsAndFractions = theClus->hitsAndFractions();
554  for (auto&& hitFractionPair : hitsAndFractions) {
555  auto&& ecalRecHit = ecalRecHits->find(hitFractionPair.first);
556  if (ecalRecHit == ecalRecHits->end()) continue;
557  if (ecalRecHit->checkFlag(EcalRecHit::Flags::kSaturated)) {
558  nSaturatedXtals++;
559  if (seedXtalId == ecalRecHit->detid())
560  isSeedSaturated = true;
561  }
562  }
563  si.nSaturatedXtals = nSaturatedXtals;
564  si.isSeedSaturated = isSeedSaturated;
565 
566 }
edm::Handle< EcalRecHitCollection > endcapRecHits
#define nullptr
edm::Handle< EcalRecHitCollection > barrelRecHits
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:38
const_iterator end() const
Definition: DetId.h:18
DetId seed() const
return DetId of seed
Definition: CaloCluster.h:205
iterator find(key_type k)
EventData * eventData_
void GsfElectronAlgo::calculateShowerShape ( const reco::SuperClusterRef theClus,
bool  pflow,
reco::GsfElectron::ShowerShape showerShape 
)
private

Definition at line 568 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventSetupData::caloTopo, gamEcalExtractorBlocks_cff::detector, heepElectronID_HEEPV50_CSA14_25ns_cff::e1x5, reco::GsfElectron::ShowerShape::e1x5, reco::GsfElectron::ShowerShape::e2nd, reco::GsfElectron::ShowerShape::e2x5Bottom, reco::GsfElectron::ShowerShape::e2x5Left, reco::GsfElectron::ShowerShape::e2x5Max, reco::GsfElectron::ShowerShape::e2x5Right, reco::GsfElectron::ShowerShape::e2x5Top, heepElectronID_HEEPV50_CSA14_25ns_cff::e5x5, reco::GsfElectron::ShowerShape::e5x5, reco::GsfElectron::ShowerShape::eBottom, EcalBarrel, reco::GsfElectron::ShowerShape::eLeft, photonPostprocessing_cfi::eMax, reco::GsfElectron::ShowerShape::eMax, GsfElectronAlgo::EventData::endcapRecHits, reco::GsfElectron::ShowerShape::eRight, reco::GsfElectron::ShowerShape::eTop, eventData_, eventSetupData_, generalData_, 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(), nullptr, edm::ESHandle< T >::product(), reco::GsfElectron::ShowerShape::r9, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedEndcaps, 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().

570  {
571  const reco::CaloCluster & seedCluster = *(theClus->seed()) ;
572  // temporary, till CaloCluster->seed() is made available
573  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
574  int detector = seedXtalId.subdetId() ;
575 
578  const EcalRecHitCollection * recHits = nullptr ;
579  std::vector<int> recHitFlagsToBeExcluded ;
580  std::vector<int> recHitSeverityToBeExcluded ;
581  if (detector==EcalBarrel)
582  {
583  recHits = eventData_->barrelRecHits.product() ;
584  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedBarrel ;
585  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedBarrel ;
586  }
587  else
588  {
589  recHits = eventData_->endcapRecHits.product() ;
590  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedEndcaps ;
591  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedEndcaps ;
592  }
593 
594  std::vector<float> covariances = EcalClusterTools::covariances(seedCluster,recHits,topology,geometry) ;
595  std::vector<float> localCovariances = EcalClusterTools::localCovariances(seedCluster,recHits,topology) ;
596  showerShape.sigmaEtaEta = sqrt(covariances[0]) ;
597  showerShape.sigmaIetaIeta = sqrt(localCovariances[0]) ;
598  if (!edm::isNotFinite(localCovariances[2])) showerShape.sigmaIphiIphi = sqrt(localCovariances[2]) ;
599  showerShape.e1x5 = EcalClusterTools::e1x5(seedCluster,recHits,topology) ;
600  showerShape.e2x5Max = EcalClusterTools::e2x5Max(seedCluster,recHits,topology) ;
601  showerShape.e5x5 = EcalClusterTools::e5x5(seedCluster,recHits,topology) ;
602  showerShape.r9 = EcalClusterTools::e3x3(seedCluster,recHits,topology)/theClus->rawEnergy() ;
603 
604  if (pflow)
605  {
606  showerShape.hcalDepth1OverEcal = generalData_->hcalHelperPflow->hcalESumDepth1(*theClus)/theClus->energy() ;
607  showerShape.hcalDepth2OverEcal = generalData_->hcalHelperPflow->hcalESumDepth2(*theClus)/theClus->energy() ;
611  }
612  else
613  {
614  showerShape.hcalDepth1OverEcal = generalData_->hcalHelper->hcalESumDepth1(*theClus)/theClus->energy() ;
615  showerShape.hcalDepth2OverEcal = generalData_->hcalHelper->hcalESumDepth2(*theClus)/theClus->energy() ;
619  }
620 
621  // extra shower shapes
622  const float see_by_spp = showerShape.sigmaIetaIeta*showerShape.sigmaIphiIphi;
623  if( see_by_spp > 0 ) {
624  showerShape.sigmaIetaIphi = localCovariances[1] / see_by_spp;
625  } else if ( localCovariances[1] > 0 ) {
626  showerShape.sigmaIetaIphi = 1.f;
627  } else {
628  showerShape.sigmaIetaIphi = -1.f;
629  }
630  showerShape.eMax = EcalClusterTools::eMax(seedCluster,recHits);
631  showerShape.e2nd = EcalClusterTools::e2nd(seedCluster,recHits);
632  showerShape.eTop = EcalClusterTools::eTop(seedCluster,recHits,topology);
633  showerShape.eLeft = EcalClusterTools::eLeft(seedCluster,recHits,topology);
634  showerShape.eRight = EcalClusterTools::eRight(seedCluster,recHits,topology);
635  showerShape.eBottom = EcalClusterTools::eBottom(seedCluster,recHits,topology);
636 
637  showerShape.e2x5Left = EcalClusterTools::e2x5Left(seedCluster,recHits,topology);
638  showerShape.e2x5Right = EcalClusterTools::e2x5Right(seedCluster,recHits,topology);
639  showerShape.e2x5Top = EcalClusterTools::e2x5Top(seedCluster,recHits,topology);
640  showerShape.e2x5Bottom = EcalClusterTools::e2x5Bottom(seedCluster,recHits,topology);
641  }
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:195
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers)
#define nullptr
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:396
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:38
Definition: DetId.h:18
edm::ESHandle< CaloGeometry > caloGeom
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
EventData * eventData_
T const * product() const
Definition: ESHandle.h:86
void GsfElectronAlgo::calculateShowerShape_full5x5 ( const reco::SuperClusterRef theClus,
bool  pflow,
reco::GsfElectron::ShowerShape showerShape 
)
private

Definition at line 643 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventSetupData::caloTopo, EcalClusterToolsT< noZS >::covariances(), gamEcalExtractorBlocks_cff::detector, EcalClusterToolsT< noZS >::e1x5(), reco::GsfElectron::ShowerShape::e1x5, EcalClusterToolsT< noZS >::e2nd(), reco::GsfElectron::ShowerShape::e2nd, EcalClusterToolsT< noZS >::e2x5Bottom(), reco::GsfElectron::ShowerShape::e2x5Bottom, EcalClusterToolsT< noZS >::e2x5Left(), reco::GsfElectron::ShowerShape::e2x5Left, EcalClusterToolsT< noZS >::e2x5Max(), reco::GsfElectron::ShowerShape::e2x5Max, EcalClusterToolsT< noZS >::e2x5Right(), reco::GsfElectron::ShowerShape::e2x5Right, EcalClusterToolsT< noZS >::e2x5Top(), reco::GsfElectron::ShowerShape::e2x5Top, 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_, GsfElectronAlgo(), 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(), nullptr, edm::ESHandle< T >::product(), reco::GsfElectron::ShowerShape::r9, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedBarrel, GsfElectronAlgo::EcalRecHitsConfiguration::recHitFlagsToBeExcludedEndcaps, 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().

645  {
646  const reco::CaloCluster & seedCluster = *(theClus->seed()) ;
647  // temporary, till CaloCluster->seed() is made available
648  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
649  int detector = seedXtalId.subdetId() ;
650 
653  const EcalRecHitCollection * recHits = nullptr ;
654  std::vector<int> recHitFlagsToBeExcluded ;
655  std::vector<int> recHitSeverityToBeExcluded ;
656  if (detector==EcalBarrel)
657  {
658  recHits = eventData_->barrelRecHits.product() ;
659  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedBarrel ;
660  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedBarrel ;
661  }
662  else
663  {
664  recHits = eventData_->endcapRecHits.product() ;
665  recHitFlagsToBeExcluded = generalData_->recHitsCfg.recHitFlagsToBeExcludedEndcaps ;
666  recHitSeverityToBeExcluded = generalData_->recHitsCfg.recHitSeverityToBeExcludedEndcaps ;
667  }
668 
669  std::vector<float> covariances = noZS::EcalClusterTools::covariances(seedCluster,recHits,topology,geometry) ;
670  std::vector<float> localCovariances = noZS::EcalClusterTools::localCovariances(seedCluster,recHits,topology) ;
671  showerShape.sigmaEtaEta = sqrt(covariances[0]) ;
672  showerShape.sigmaIetaIeta = sqrt(localCovariances[0]) ;
673  if (!edm::isNotFinite(localCovariances[2])) showerShape.sigmaIphiIphi = sqrt(localCovariances[2]) ;
674  showerShape.e1x5 = noZS::EcalClusterTools::e1x5(seedCluster,recHits,topology) ;
675  showerShape.e2x5Max = noZS::EcalClusterTools::e2x5Max(seedCluster,recHits,topology) ;
676  showerShape.e5x5 = noZS::EcalClusterTools::e5x5(seedCluster,recHits,topology) ;
677  showerShape.r9 = noZS::EcalClusterTools::e3x3(seedCluster,recHits,topology)/theClus->rawEnergy() ;
678 
679  if (pflow)
680  {
681  showerShape.hcalDepth1OverEcal = generalData_->hcalHelperPflow->hcalESumDepth1(*theClus)/theClus->energy() ;
682  showerShape.hcalDepth2OverEcal = generalData_->hcalHelperPflow->hcalESumDepth2(*theClus)/theClus->energy() ;
686  }
687  else
688  {
689  showerShape.hcalDepth1OverEcal = generalData_->hcalHelper->hcalESumDepth1(*theClus)/theClus->energy() ;
690  showerShape.hcalDepth2OverEcal = generalData_->hcalHelper->hcalESumDepth2(*theClus)/theClus->energy() ;
694  }
695 
696  // extra shower shapes
697  const float see_by_spp = showerShape.sigmaIetaIeta*showerShape.sigmaIphiIphi;
698  if( see_by_spp > 0 ) {
699  showerShape.sigmaIetaIphi = localCovariances[1] / see_by_spp;
700  } else if ( localCovariances[1] > 0 ) {
701  showerShape.sigmaIetaIphi = 1.f;
702  } else {
703  showerShape.sigmaIetaIphi = -1.f;
704  }
705  showerShape.eMax = noZS::EcalClusterTools::eMax(seedCluster,recHits);
706  showerShape.e2nd = noZS::EcalClusterTools::e2nd(seedCluster,recHits);
707  showerShape.eTop = noZS::EcalClusterTools::eTop(seedCluster,recHits,topology);
708  showerShape.eLeft = noZS::EcalClusterTools::eLeft(seedCluster,recHits,topology);
709  showerShape.eRight = noZS::EcalClusterTools::eRight(seedCluster,recHits,topology);
710  showerShape.eBottom = noZS::EcalClusterTools::eBottom(seedCluster,recHits,topology);
711 
712  showerShape.e2x5Left = noZS::EcalClusterTools::e2x5Left(seedCluster,recHits,topology);
713  showerShape.e2x5Right = noZS::EcalClusterTools::e2x5Right(seedCluster,recHits,topology);
714  showerShape.e2x5Top = noZS::EcalClusterTools::e2x5Top(seedCluster,recHits,topology);
715  showerShape.e2x5Bottom = noZS::EcalClusterTools::e2x5Bottom(seedCluster,recHits,topology);
716 
717  }
ElectronHcalHelper * hcalHelperPflow
GeneralData * generalData_
static float e2x5Bottom(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
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:195
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers)
#define nullptr
edm::ESHandle< CaloTopology > caloTopo
static float e2x5Top(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
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:396
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)
static float e2x5Right(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:38
static float eTop(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
Definition: DetId.h:18
static float e2x5Left(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
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)
T const * product() const
Definition: ESHandle.h:86
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 756 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< T >::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().

757  {
758  // get EventSetupRecords if needed
759  bool updateField(false);
761  updateField = true;
764  }
765 
766  bool updateGeometry(false);
768  updateGeometry = true;
771  }
772 
773  if ( updateField || updateGeometry ) {
774  delete eventSetupData_->mtsTransform ;
778  }
779 
781  eventSetupData_->cacheIDGeom=es.get<CaloGeometryRecord>().cacheIdentifier();
783  }
784 
786  eventSetupData_->cacheIDTopo=es.get<CaloTopologyRecord>().cacheIdentifier();
788  }
789 
794 
795 
800 
801  //if(eventSetupData_->cacheChStatus!=es.get<EcalChannelStatusRcd>().cacheIdentifier()){
802  // eventSetupData_->cacheChStatus=es.get<EcalChannelStatusRcd>().cacheIdentifier();
803  // es.get<EcalChannelStatusRcd>().get(eventSetupData_->chStatus);
804  //}
805 
807  eventSetupData_->cacheSevLevel = es.get<EcalSeverityLevelAlgoRcd>().cacheIdentifier();
809  }
810  }
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:59
edm::ESHandle< CaloGeometry > caloGeom
EcalClusterFunctionBaseClass * crackCorrectionFunction
RegressionHelper * regHelper
edm::ESHandle< TrackerGeometry > trackerHandle
virtual void init(const edm::EventSetup &es)=0
T const * product() const
Definition: ESHandle.h:86
void checkSetup(const edm::EventSetup &)
void GsfElectronAlgo::clonePreviousElectrons ( )

Definition at line 984 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronProducer::produce().

985  {
986  const GsfElectronCollection * oldElectrons = eventData_->previousElectrons.product() ;
988  GsfElectronCollection::const_iterator oldElectron ;
989  for
990  ( oldElectron = oldElectrons->begin() ;
991  oldElectron != oldElectrons->end() ;
992  ++oldElectron )
993  {
994  const GsfElectronCoreRef oldCoreRef = oldElectron->core() ;
995  const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack() ;
996  unsigned int icore ;
997  for ( icore=0 ; icore<newCores->size() ; ++icore )
998  {
999  if (oldElectronGsfTrackRef==(*newCores)[icore].gsfTrack())
1000  {
1002  eventData_->electrons->push_back(new GsfElectron(*oldElectron,coreRef)) ;
1003  break ;
1004  }
1005  }
1006  }
1007  }
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 941 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, funct::false, mps_fire::i, edm::Ref< C, T, F >::isNull(), GsfElectronAlgo::EventSetupData::mtsTransform, nullptr, edm::Handle< T >::product(), and funct::true.

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

942  {
943  if (electronData_!=nullptr)
944  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"unexpected electron data" ; }
945 
946  const GsfElectronCoreCollection * coreCollection = eventData_->coreElectrons.product() ;
947  for ( unsigned int i=0 ; i<coreCollection->size() ; ++i )
948  {
949  // check there is no existing electron with this core
951  bool coreFound = false ;
952  GsfElectronPtrCollection::const_iterator itrEle ;
953  for
954  ( itrEle = eventData_->electrons->begin() ;
955  itrEle != eventData_->electrons->end() ;
956  itrEle++ )
957  {
958  if ((*itrEle)->core()==coreRef)
959  {
960  coreFound = true ;
961  break ;
962  }
963  }
964  if (coreFound) continue ;
965 
966  // check there is a super-cluster
967  if (coreRef->superCluster().isNull()) continue ;
968 
969  // prepare internal structure for electron specific data
970  delete electronData_ ;
971  electronData_ = new ElectronData(coreRef,*eventData_->beamspot) ;
972 
973  // calculate and check Trajectory StatesOnSurface....
975 
976  createElectron(hoc) ;
977 
978  } // loop over tracks
979 
980  delete electronData_ ;
982  }
EventSetupData * eventSetupData_
#define nullptr
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:250
T const * product() const
Definition: Handle.h:81
bool calculateTSOS(const MultiTrajectoryStateTransform *, GsfConstraintAtVertex *)
EventData * eventData_
ElectronData * electronData_
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
void GsfElectronAlgo::copyElectrons ( reco::GsfElectronCollection outEle)

Definition at line 813 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

814  {
815  GsfElectronPtrCollection::const_iterator it ;
816  for
817  ( it = eventData_->electrons->begin() ;
818  it != eventData_->electrons->end() ;
819  it++ )
820  { outEle.push_back(**it) ; }
821  }
GsfElectronPtrCollection * electrons
EventData * eventData_
void GsfElectronAlgo::createElectron ( const gsfAlgoHelpers::HeavyObjectCache hoc)
private

Definition at line 1278 of file GsfElectronAlgo.cc.

References funct::abs(), RegressionHelper::applyCombinationRegression(), RegressionHelper::applyEcalRegression(), GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventData::beamspot, GsfElectronAlgo::ElectronData::calculateMode(), GsfElectronAlgo::ElectronData::calculateMomentum(), calculateSaturationInfo(), calculateShowerShape(), calculateShowerShape_full5x5(), EleTkIsolFromCands::calIsolPt(), 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, gedGsfElectronCores_cfi::ctfTracks, 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(), gamEcalExtractorBlocks_cff::detector, 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(), EgammaTowerIsolation::getTowerEtSum(), EcalClusterFunctionBaseClass::getValue(), reco::GsfElectron::gsfTrack(), 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, MagneticField::inTesla(), 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, 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, tkIsol03Calc_, tkIsol04Calc_, reco::GsfElectron::IsolationVariables::tkSumPt, funct::true, GsfElectronAlgo::StrategyConfiguration::useCombinationRegression, GsfElectronAlgo::StrategyConfiguration::useEcalRegression, GsfElectronAlgo::EventData::vertices, GsfElectronAlgo::ElectronData::vtxMom, GsfElectronAlgo::ElectronData::vtxMomWithConstraint, GsfElectronAlgo::ElectronData::vtxPos, GsfElectronAlgo::ElectronData::vtxTSOS, and PV3DBase< T, PVType, FrameType >::z().

Referenced by completeElectrons().

1279  {
1280  // eventually check ctf track
1283 
1284  // charge ID
1285  int eleCharge ;
1286  GsfElectron::ChargeInfo eleChargeInfo ;
1287  electronData_->computeCharge(eleCharge,eleChargeInfo) ;
1288 
1289  // electron basic cluster
1291 
1292  // Seed cluster
1293  const reco::CaloCluster & seedCluster = *(electronData_->superClusterRef->seed()) ;
1294 
1295  // seed Xtal
1296  // temporary, till CaloCluster->seed() is made available
1297  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
1298 
1300 
1301 
1302  //====================================================
1303  // Candidate attributes
1304  //====================================================
1305 
1307 
1308 
1309  //====================================================
1310  // Track-Cluster Matching
1311  //====================================================
1312 
1314  tcMatching.electronCluster = elbcRef ;
1315  tcMatching.eSuperClusterOverP = (electronData_->vtxMom.mag()>0)?(electronData_->superClusterRef->energy()/electronData_->vtxMom.mag()):(-1.) ;
1316  tcMatching.eSeedClusterOverP = (electronData_->vtxMom.mag()>0.)?(seedCluster.energy()/electronData_->vtxMom.mag()):(-1) ;
1317  tcMatching.eSeedClusterOverPout = (electronData_->seedMom.mag()>0.)?(seedCluster.energy()/electronData_->seedMom.mag()):(-1.) ;
1318  tcMatching.eEleClusterOverPout = (electronData_->eleMom.mag()>0.)?(elbcRef->energy()/electronData_->eleMom.mag()):(-1.) ;
1319 
1321  tcMatching.deltaEtaSuperClusterAtVtx = scAtVtx.dEta() ;
1322  tcMatching.deltaPhiSuperClusterAtVtx = scAtVtx.dPhi() ;
1323 
1324  EleRelPointPair seedAtCalo(seedCluster.position(),electronData_->seedPos,eventData_->beamspot->position()) ;
1325  tcMatching.deltaEtaSeedClusterAtCalo = seedAtCalo.dEta() ;
1326  tcMatching.deltaPhiSeedClusterAtCalo = seedAtCalo.dPhi() ;
1327 
1329  tcMatching.deltaEtaEleClusterAtCalo = ecAtCalo.dEta() ;
1330  tcMatching.deltaPhiEleClusterAtCalo = ecAtCalo.dPhi() ;
1331 
1332 
1333  //=======================================================
1334  // Track extrapolations
1335  //=======================================================
1336 
1345 
1346 
1347  //=======================================================
1348  // Closest Ctf Track
1349  //=======================================================
1350 
1352  ctfInfo.ctfTrack = electronData_->ctfTrackRef ;
1354 
1355 
1356  //====================================================
1357  // FiducialFlags, using nextToBoundary definition of gaps
1358  //====================================================
1359 
1360  reco::GsfElectron::FiducialFlags fiducialFlags ;
1361  int region = seedXtalId.det();
1362  int detector = seedXtalId.subdetId() ;
1363  double feta=std::abs(electronData_->superClusterRef->position().eta()) ;
1364  if (detector==EcalBarrel)
1365  {
1366  fiducialFlags.isEB = true ;
1367  EBDetId ebdetid(seedXtalId);
1368  if (EBDetId::isNextToEtaBoundary(ebdetid))
1369  {
1370  if (ebdetid.ietaAbs()==85)
1371  { fiducialFlags.isEBEEGap = true ; }
1372  else
1373  { fiducialFlags.isEBEtaGap = true ; }
1374  }
1375  if (EBDetId::isNextToPhiBoundary(ebdetid))
1376  { fiducialFlags.isEBPhiGap = true ; }
1377  }
1378  else if (detector==EcalEndcap)
1379  {
1380  fiducialFlags.isEE = true ;
1381  EEDetId eedetid(seedXtalId);
1382  if (EEDetId::isNextToRingBoundary(eedetid))
1383  {
1384  if (std::abs(feta)<2.)
1385  { fiducialFlags.isEBEEGap = true ; }
1386  else
1387  { fiducialFlags.isEERingGap = true ; }
1388  }
1389  if (EEDetId::isNextToDBoundary(eedetid))
1390  { fiducialFlags.isEEDeeGap = true ; }
1391  }
1392  else if ( region==DetId::Forward || region == DetId::Hcal )
1393  {
1394  fiducialFlags.isEE = true ;
1395  //HGCalDetId eeDetid(seedXtalId);
1396  // fill in fiducial information when we know how to use it...
1397  }
1398  else
1399  { throw cms::Exception("GsfElectronAlgo|UnknownXtalRegion")<<"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1400 
1401 
1402  //====================================================
1403  // SaturationInfo
1404  //====================================================
1405 
1406  reco::GsfElectron::SaturationInfo saturationInfo;
1408 
1409  //====================================================
1410  // ShowerShape
1411  //====================================================
1412 
1413  reco::GsfElectron::ShowerShape showerShape;
1414  reco::GsfElectron::ShowerShape full5x5_showerShape;
1415  if( !(region==DetId::Forward || region == DetId::Hcal) ) {
1416  calculateShowerShape(electronData_->superClusterRef,!(electronData_->coreRef->ecalDrivenSeed()),showerShape) ;
1417  calculateShowerShape_full5x5(electronData_->superClusterRef,!(electronData_->coreRef->ecalDrivenSeed()),full5x5_showerShape) ;
1418  }
1419 
1420  //====================================================
1421  // ConversionRejection
1422  //====================================================
1423 
1425 
1426  ConversionFinder conversionFinder ;
1427  double BInTesla = eventSetupData_->magField->inTesla(GlobalPoint(0.,0.,0.)).z() ;
1429  if (!ctfTracks.isValid()) { ctfTracks = eventData_->currentCtfTracks ; }
1430 
1431  // values of conversionInfo.flag()
1432  // -9999 : Partner track was not found
1433  // 0 : Partner track found in the CTF collection using
1434  // 1 : Partner track found in the CTF collection using
1435  // 2 : Partner track found in the GSF collection using
1436  // 3 : Partner track found in the GSF collection using the electron's GSF track
1437  ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1438  (*electronData_->coreRef,ctfTracks,eventData_->originalGsfTracks,BInTesla) ;
1439 
1441  conversionVars.flags = conversionInfo.flag() ;
1442  conversionVars.dist = conversionInfo.dist() ;
1443  conversionVars.dcot = conversionInfo.dcot() ;
1444  conversionVars.radius = conversionInfo.radiusOfConversion() ;
1445  if ((conversionVars.flags==0)or(conversionVars.flags==1))
1446  conversionVars.partner = TrackBaseRef(conversionInfo.conversionPartnerCtfTk()) ;
1447  else if ((conversionVars.flags==2)or(conversionVars.flags==3))
1448  conversionVars.partner = TrackBaseRef(conversionInfo.conversionPartnerGsfTk()) ;
1449 
1450 
1451  //====================================================
1452  // Go !
1453  //====================================================
1454 
1455  GsfElectron * ele = new
1456  GsfElectron
1457  ( eleCharge,eleChargeInfo,electronData_->coreRef,
1458  tcMatching, tkExtra, ctfInfo,
1459  fiducialFlags,showerShape, full5x5_showerShape,
1460  conversionVars, saturationInfo ) ;
1461  // Will be overwritten later in the case of the regression
1463  ele->setP4(GsfElectron::P4_FROM_SUPER_CLUSTER,momentum,0,true) ;
1464 
1465  //====================================================
1466  // brems fractions
1467  //====================================================
1468 
1469  if (electronData_->innMom.mag()>0.)
1471 
1472  // the supercluster is the refined one The seed is not necessarily the first cluster
1473  // hence the use of the electronCluster
1474  SuperClusterRef sc = ele->superCluster() ;
1475  if (!(sc.isNull()))
1476  {
1477  CaloClusterPtr cl = ele->electronCluster() ;
1478  if (sc->clustersSize()>1)
1479  {
1480  float pf_fbrem =( sc->energy() - cl->energy() ) / sc->energy();
1481  ele->setSuperClusterFbrem( pf_fbrem ) ;
1482  }
1483  else
1484  {
1485  ele->setSuperClusterFbrem(0) ;
1486  }
1487  }
1488 
1489  //====================================================
1490  // classification and corrections
1491  //====================================================
1492  // classification
1493  ElectronClassification theClassifier ;
1494  theClassifier.classify(*ele) ;
1495  theClassifier.refineWithPflow(*ele) ;
1496  // ecal energy
1499  {
1504  }
1505  else // original implementation
1506  {
1507  if( region!=DetId::Forward && region != DetId::Hcal ) {
1508  if (ele->core()->ecalDrivenSeed())
1509  {
1511  { theEnCorrector.classBasedParameterizationEnergy(*ele,*eventData_->beamspot) ; }
1513  { theEnCorrector.classBasedParameterizationUncertainty(*ele) ; }
1514  }
1515  else
1516  {
1518  { theEnCorrector.simpleParameterizationUncertainty(*ele) ; }
1519  }
1520  }
1521  }
1522 
1523  // momentum
1524  // Keep the default correction running first. The track momentum error is computed in there
1525  if (ele->core()->ecalDrivenSeed())
1526  {
1527  ElectronMomentumCorrector theMomCorrector;
1528  theMomCorrector.correct(*ele,electronData_->vtxTSOS);
1529  }
1531  {
1533  }
1534 
1535  //====================================================
1536  // now isolation variables
1537  //====================================================
1538 
1542 
1543  if( !(region==DetId::Forward || region == DetId::Hcal) ) {
1556  }
1557  ele->setIsolation03(dr03);
1558  ele->setIsolation04(dr04);
1559 
1560 
1561  //====================================================
1562  // preselection flag
1563  //====================================================
1564 
1566  //setting mva flag, currently GedGsfElectron and GsfElectron pre-selection flags have desynced
1567  //this is for GedGsfElectrons, GsfElectrons (ie old pre 7X std reco) resets this later on
1568  //in the function "addPfInfo"
1569  //yes this is awful, we'll fix it once we work out how to...
1570  float mvaValue = hoc->sElectronMVAEstimator->mva( *(ele),*(eventData_->vertices));
1572 
1573  //====================================================
1574  // Pixel match variables
1575  //====================================================
1577 
1578  LogTrace("GsfElectronAlgo")<<"Constructed new electron with energy "<< ele->p4().e() ;
1579 
1580  eventData_->electrons->push_back(ele) ;
1581  }
CaloClusterPtr electronCluster() const
Definition: GsfElectron.h:244
void setPixelMatchInfomation(reco::GsfElectron *)
edm::Handle< reco::TrackCollection > originalCtfTracks
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:185
const MultiTrajectoryStateMode * mtsMode
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:129
void applyCombinationRegression(reco::GsfElectron &ele) const
void setTrackFbrem(float fbrem)
Definition: GsfElectron.h:760
std::unique_ptr< const SoftElectronMVAEstimator > sElectronMVAEstimator
void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate)
Definition: GsfElectron.cc:199
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:225
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:195
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:761
EgammaRecHitIsolation * ecalBarrelIsol04
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
virtual float getValue(const reco::BasicCluster &, const EcalRecHitCollection &) const =0
void setCorrectedEcalEnergyError(float newEnergyError)
Definition: GsfElectron.cc:179
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
static bool isNextToPhiBoundary(EBDetId id)
Definition: EBDetId.cc:130
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::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
edm::Handle< EcalRecHitCollection > barrelRecHits
T z() const
Definition: PV3DBase.h:64
void correct(reco::GsfElectron &, TrajectoryStateOnSurface &)
void setPassMvaPreselection(bool flag)
Definition: GsfElectron.h:720
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< CaloTowerDetId > hcalTowersBehindClusters
Definition: GsfElectron.h:396
const MultiTrajectoryStateTransform * mtsTransform
static bool isNextToRingBoundary(EEDetId id)
Definition: EEDetId.cc:375
double energy() const
cluster energy
Definition: CaloCluster.h:124
double calIsolPt(Args &&...args) const
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:74
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:38
bool isNull() const
Checks for null.
Definition: Ref.h:250
void setIsolation04(const IsolationVariables &dr04)
Definition: GsfElectron.h:570
#define LogTrace(id)
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
void classify(reco::GsfElectron &)
EgammaTowerIsolation * hadDepth2Isolation04Bc
Definition: DetId.h:18
edm::Handle< reco::VertexCollection > vertices
EgammaRecHitIsolation * ecalBarrelIsol03
int flag() const
void calculateSaturationInfo(const reco::SuperClusterRef &, reco::GsfElectron::SaturationInfo &)
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:285
void refineWithPflow(reco::GsfElectron &)
void setIsolation03(const IsolationVariables &dr03)
Definition: GsfElectron.h:569
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
EleTkIsolFromCands tkIsol04Calc_
double getTowerEtSum(const reco::Candidate *cand, const std::vector< CaloTowerDetId > *detIdToExclude=0) const
EcalClusterFunctionBaseClass * crackCorrectionFunction
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:184
EgammaRecHitIsolation * ecalEndcapIsol04
const reco::SuperClusterRef superClusterRef
const Point & position() const
position
Definition: BeamSpot.h:62
EventData * eventData_
double dcot() const
RegressionHelper * regHelper
ElectronData * electronData_
Detector det() const
get the detector field from this detid
Definition: DetId.h:36
EleTkIsolFromCands tkIsol03Calc_
void calculateMode(const MultiTrajectoryStateMode *mtsMode)
TrajectoryStateOnSurface vtxTSOS
Candidate::LorentzVector calculateMomentum()
void GsfElectronAlgo::displayInternalElectrons ( const std::string &  title) const

Definition at line 927 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

928  {
929  LogTrace("GsfElectronAlgo") << "========== " << title << " ==========";
930  LogTrace("GsfElectronAlgo") << "Event: " << eventData_->event->id();
931  LogTrace("GsfElectronAlgo") << "Number of electrons: " << eventData_->electrons->size() ;
932  GsfElectronPtrCollection::const_iterator it ;
933  for ( it = eventData_->electrons->begin(); it != eventData_->electrons->end(); it++ )
934  {
935  LogTrace("GsfElectronAlgo") << "Electron with charge, pt, eta, phi: " << (*it)->charge() << " , "
936  << (*it)->pt() << " , " << (*it)->eta() << " , " << (*it)->phi();
937  }
938  LogTrace("GsfElectronAlgo") << "=================================================";
939  }
GsfElectronPtrCollection * electrons
#define LogTrace(id)
edm::EventID id() const
Definition: EventBase.h:60
EventData * eventData_
void GsfElectronAlgo::endEvent ( )

Definition at line 919 of file GsfElectronAlgo.cc.

References eventData_, Exception, and nullptr.

Referenced by GsfElectronBaseProducer::endEvent().

920  {
921  if (eventData_==nullptr)
922  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"lacking event data" ; }
923  delete eventData_ ;
924  eventData_ = nullptr ;
925  }
#define nullptr
EventData * eventData_
const reco::SuperClusterRef GsfElectronAlgo::getTrSuperCluster ( const reco::GsfTrackRef trackRef)
private
bool GsfElectronAlgo::isPreselected ( reco::GsfElectron ele)
private

Definition at line 1100 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().

1101  {
1102  bool passCutBased=ele->passingCutBasedPreselection();
1103  bool passPF=ele->passingPflowPreselection(); //it is worth nothing for gedGsfElectrons, this does nothing as its not set till GedGsfElectron finaliser, this is always false
1105  bool passmva=ele->passingMvaPreselection();
1106  if(!ele->ecalDrivenSeed()){
1108  return passmva && passCutBased;
1109  else
1110  return passmva;
1111  }
1112  else{
1113  return passCutBased || passPF || passmva;
1114  }
1115  }
1116  else{
1117  return passCutBased || passPF;
1118  }
1119 
1120  return true;
1121  }
GeneralData * generalData_
double pt() const final
transverse momentum
bool passingCutBasedPreselection() const
Definition: GsfElectron.h:705
bool passingMvaPreselection() const
Definition: GsfElectron.h:721
const StrategyConfiguration strategyCfg
bool ecalDrivenSeed() const
Definition: GsfElectron.h:188
bool passingPflowPreselection() const
Definition: GsfElectron.h:706
void GsfElectronAlgo::removeAmbiguousElectrons ( )

Definition at line 1713 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

1714  {
1715  GsfElectronPtrCollection::size_type ei = 1, emax = eventData_->electrons->size() ;
1716  GsfElectronPtrCollection::iterator eitr = eventData_->electrons->begin() ;
1717  while (eitr!=eventData_->electrons->end())
1718  {
1719  LogTrace("GsfElectronAlgo")<<"========== remove ambiguous "<<ei<<"/"<<emax<<"==========" ;
1720  if ((*eitr)->ambiguous())
1721  { delete (*eitr) ; eitr = eventData_->electrons->erase(eitr) ; ++ei ; }
1722  else
1723  { ++eitr ; ++ei ; }
1724  }
1725  }
uint16_t size_type
GsfElectronPtrCollection * electrons
#define LogTrace(id)
EventData * eventData_
void GsfElectronAlgo::removeNotPreselectedElectrons ( )

Definition at line 1123 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

1124  {
1125  GsfElectronPtrCollection::size_type ei = 1, emax = eventData_->electrons->size() ;
1126  GsfElectronPtrCollection::iterator eitr = eventData_->electrons->begin() ;
1127  while (eitr!=eventData_->electrons->end())
1128  {
1129  LogTrace("GsfElectronAlgo")<<"========== removed not preselected "<<ei<<"/"<<emax<<"==========" ;
1130  if (isPreselected(*eitr))
1131  { ++eitr ; ++ei ; }
1132  else
1133  { delete (*eitr) ; eitr = eventData_->electrons->erase(eitr) ; ++ei ; }
1134  }
1135  }
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 1591 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::StrategyConfiguration::ambClustersOverlapStrategy, GsfElectronAlgo::StrategyConfiguration::ambSortingStrategy, GsfElectronAlgo::EventData::barrelRecHits, GsfElectronAlgo::EventData::beamspot, reco::e1, reco::e2, GsfElectronAlgo::EventData::electrons, photonPostprocessing_cfi::eMin, GsfElectronAlgo::EventData::endcapRecHits, PVValHelper::eta, eventData_, eventSetupData_, Exception, funct::false, runEdmFileComparison::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, electronIdCutBased_cfi::threshold, GsfElectronAlgo::EventSetupData::trackerHandle, funct::true, and GsfElectronAlgo::StrategyConfiguration::useGsfPfRecTracks.

Referenced by GsfElectronBaseProducer::fillEvent().

1592  {
1593  GsfElectronPtrCollection::iterator e1, e2 ;
1598  else
1599  { throw cms::Exception("GsfElectronAlgo|UnknownAmbiguitySortingStrategy")<<"value of generalData_->strategyCfg.ambSortingStrategy is : "<<generalData_->strategyCfg.ambSortingStrategy ; }
1600 
1601  // init
1602  for
1603  ( e1 = eventData_->electrons->begin() ;
1604  e1 != eventData_->electrons->end() ;
1605  ++e1 )
1606  {
1607  (*e1)->clearAmbiguousGsfTracks() ;
1608  (*e1)->setAmbiguous(false) ;
1609  }
1610 
1611  // get ambiguous from GsfPfRecTracks
1613  {
1614  for
1615  ( e1 = eventData_->electrons->begin() ;
1616  e1 != eventData_->electrons->end() ;
1617  ++e1 )
1618  {
1619  bool found = false ;
1620  const GsfPFRecTrackCollection * gsfPfRecTrackCollection = eventData_->gsfPfRecTracks.product() ;
1621  GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
1622  for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
1623  gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
1624  ++gsfPfRecTrack )
1625  {
1626  if (gsfPfRecTrack->gsfTrackRef()==(*e1)->gsfTrack())
1627  {
1628  if (found)
1629  {
1630  edm::LogWarning("GsfElectronAlgo")<<"associated gsfPfRecTrack already found" ;
1631  }
1632  else
1633  {
1634  found = true ;
1635  const std::vector<reco::GsfPFRecTrackRef> & duplicates(gsfPfRecTrack->convBremGsfPFRecTrackRef()) ;
1636  std::vector<reco::GsfPFRecTrackRef>::const_iterator duplicate ;
1637  for ( duplicate = duplicates.begin() ; duplicate != duplicates.end() ; duplicate ++ )
1638  { (*e1)->addAmbiguousGsfTrack((*duplicate)->gsfTrackRef()) ; }
1639  }
1640  }
1641  }
1642  }
1643  }
1644  // or search overlapping clusters
1645  else
1646  {
1647  for
1648  ( e1 = eventData_->electrons->begin() ;
1649  e1 != eventData_->electrons->end() ;
1650  ++e1 )
1651  {
1652  if ((*e1)->ambiguous()) continue ;
1653  if ( ignoreNotPreselected && !isPreselected(*e1) ) continue ;
1654 
1655  SuperClusterRef scRef1 = (*e1)->superCluster();
1656  CaloClusterPtr eleClu1 = (*e1)->electronCluster();
1657  LogDebug("GsfElectronAlgo")
1658  << "Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1659  << ", cluster " << scRef1.get()
1660  << " & track " << (*e1)->gsfTrack().get() ;
1661 
1662  for
1663  ( e2 = e1, ++e2 ;
1664  e2 != eventData_->electrons->end() ;
1665  ++e2 )
1666  {
1667  if ((*e2)->ambiguous()) continue ;
1668  if ( ignoreNotPreselected && !isPreselected(*e2) ) continue ;
1669 
1670  SuperClusterRef scRef2 = (*e2)->superCluster();
1671  CaloClusterPtr eleClu2 = (*e2)->electronCluster();
1672 
1673  // search if same cluster
1674  bool sameCluster = false ;
1676  { sameCluster = (scRef1==scRef2) ; }
1678  {
1679  float eMin = 1. ;
1680  float threshold = eMin*cosh(EleRelPoint(scRef1->position(),eventData_->beamspot->position()).eta()) ;
1681  sameCluster =
1683  (EgAmbiguityTools::sharedEnergy(&(*scRef1->seed()),&(*eleClu2),eventData_->barrelRecHits,eventData_->endcapRecHits)>=threshold) ||
1685  (EgAmbiguityTools::sharedEnergy(&(*scRef1->seed()),&(*scRef2->seed()),eventData_->barrelRecHits,eventData_->endcapRecHits)>=threshold) ) ;
1686  }
1687  else
1688  { throw cms::Exception("GsfElectronAlgo|UnknownAmbiguityClustersOverlapStrategy")<<"value of generalData_->strategyCfg.ambClustersOverlapStrategy is : "<<generalData_->strategyCfg.ambClustersOverlapStrategy ; }
1689 
1690  // main instructions
1691  if (sameCluster)
1692  {
1693  LogDebug("GsfElectronAlgo")
1694  << "Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1695  << ", cluster " << scRef2.get()
1696  << " and track " << (*e2)->gsfTrack().get() ;
1697  (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1698  (*e2)->setAmbiguous(true) ;
1699  }
1700  else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1701  {
1702  edm::LogWarning("GsfElectronAlgo")
1703  << "Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1704  << ", cluster " << scRef2.get()
1705  << " and track " << (*e2)->gsfTrack().get() ;
1706  (*e2)->setAmbiguous(true) ;
1707  }
1708  }
1709  }
1710  }
1711  }
#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:245
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_
edm::ESHandle< TrackerGeometry > trackerHandle
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
void GsfElectronAlgo::setCutBasedPreselectionFlag ( reco::GsfElectron ele,
const reco::BeamSpot bs 
)
private

Definition at line 1138 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(), gamEcalExtractorBlocks_cff::detector, EcalBarrel, EcalEndcap, reco::GsfElectron::eSuperClusterOverP(), PVValHelper::eta, Exception, funct::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, ecalDrivenElectronSeedsParameters_cff::maxHBarrel, ecalDrivenElectronSeedsParameters_cff::maxHEndcaps, 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, packedPFCandidateRefMixer_cfi::pf, reco::BeamSpot::position(), reco::return(), SurveyInfoScenario_cff::seed, GsfElectronAlgo::CutsConfiguration::seedFromTEC, reco::GsfElectron::setPassCutBasedPreselection(), reco::GsfElectron::sigmaIetaIeta(), GsfElectronAlgo::GeneralData::strategyCfg, and reco::GsfElectron::superCluster().

Referenced by createElectron().

1139  {
1140  // default value
1141  ele->setPassCutBasedPreselection(false) ;
1142 
1143  // kind of seeding
1144  bool eg = ele->core()->ecalDrivenSeed() ;
1145  bool pf = ele->core()->trackerDrivenSeed() && !ele->core()->ecalDrivenSeed() ;
1146  bool gedMode = generalData_->strategyCfg.gedElectronMode;
1147  if (eg&&pf) { throw cms::Exception("GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<"An electron cannot be both egamma and purely pflow" ; }
1148  if ((!eg)&&(!pf)) { throw cms::Exception("GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<"An electron cannot be neither egamma nor purely pflow" ; }
1149 
1150  const CutsConfiguration * cfg = ((eg||gedMode)?&generalData_->cutsCfg:&generalData_->cutsCfgPflow);
1151 
1152  // Et cut
1153  double etaValue = EleRelPoint(ele->superCluster()->position(),bs.position()).eta() ;
1154  double etValue = ele->superCluster()->energy()/cosh(etaValue) ;
1155  LogTrace("GsfElectronAlgo") << "Et : " << etValue ;
1156  if (ele->isEB() && (etValue < cfg->minSCEtBarrel)) return ;
1157  if (ele->isEE() && (etValue < cfg->minSCEtEndcaps)) return ;
1158  LogTrace("GsfElectronAlgo") << "Et criteria are satisfied";
1159 
1160  // E/p cut
1161  double eopValue = ele->eSuperClusterOverP() ;
1162  LogTrace("GsfElectronAlgo") << "E/p : " << eopValue ;
1163  if (ele->isEB() && (eopValue > cfg->maxEOverPBarrel)) return ;
1164  if (ele->isEE() && (eopValue > cfg->maxEOverPEndcaps)) return ;
1165  if (ele->isEB() && (eopValue < cfg->minEOverPBarrel)) return ;
1166  if (ele->isEE() && (eopValue < cfg->minEOverPEndcaps)) return ;
1167  LogTrace("GsfElectronAlgo") << "E/p criteria are satisfied";
1168 
1169  // HoE cuts
1170  LogTrace("GsfElectronAlgo") << "HoE1 : " << ele->hcalDepth1OverEcal() << ", HoE2 : " << ele->hcalDepth2OverEcal();
1171  double had = ele->hcalOverEcal()*ele->superCluster()->energy() ;
1172  const reco::CaloCluster & seedCluster = *(ele->superCluster()->seed()) ;
1173  int detector = seedCluster.hitsAndFractions()[0].first.subdetId() ;
1174  bool HoEveto = false ;
1175  if (detector==EcalBarrel && (had<cfg->maxHBarrel || (had/ele->superCluster()->energy())<cfg->maxHOverEBarrel)) HoEveto=true;
1176  else if (detector==EcalEndcap && (had<cfg->maxHEndcaps || (had/ele->superCluster()->energy())<cfg->maxHOverEEndcaps)) HoEveto=true;
1177  if ( !HoEveto ) return ;
1178  LogTrace("GsfElectronAlgo") << "H/E criteria are satisfied";
1179 
1180  // delta eta criteria
1181  double deta = ele->deltaEtaSuperClusterTrackAtVtx() ;
1182  LogTrace("GsfElectronAlgo") << "delta eta : " << deta ;
1183  if (ele->isEB() && (std::abs(deta) > cfg->maxDeltaEtaBarrel)) return ;
1184  if (ele->isEE() && (std::abs(deta) > cfg->maxDeltaEtaEndcaps)) return ;
1185  LogTrace("GsfElectronAlgo") << "Delta eta criteria are satisfied";
1186 
1187  // delta phi criteria
1188  double dphi = ele->deltaPhiSuperClusterTrackAtVtx();
1189  LogTrace("GsfElectronAlgo") << "delta phi : " << dphi;
1190  if (ele->isEB() && (std::abs(dphi) > cfg->maxDeltaPhiBarrel)) return ;
1191  if (ele->isEE() && (std::abs(dphi) > cfg->maxDeltaPhiEndcaps)) return ;
1192  LogTrace("GsfElectronAlgo") << "Delta phi criteria are satisfied";
1193 
1194  // sigma ieta ieta
1195  LogTrace("GsfElectronAlgo") << "sigma ieta ieta : " << ele->sigmaIetaIeta();
1196  if (ele->isEB() && (ele->sigmaIetaIeta() > cfg->maxSigmaIetaIetaBarrel)) return ;
1197  if (ele->isEE() && (ele->sigmaIetaIeta() > cfg->maxSigmaIetaIetaEndcaps)) return ;
1198  LogTrace("GsfElectronAlgo") << "Sigma ieta ieta criteria are satisfied";
1199 
1200  // fiducial
1201  if (!ele->isEB() && cfg->isBarrel) return ;
1202  if (!ele->isEE() && cfg->isEndcaps) return ;
1203  if (cfg->isFiducial && (ele->isEBEEGap()||ele->isEBEtaGap()||ele->isEBPhiGap()||ele->isEERingGap()||ele->isEEDeeGap())) return ;
1204  LogTrace("GsfElectronAlgo") << "Fiducial flags criteria are satisfied";
1205 
1206  // seed in TEC
1207  edm::RefToBase<TrajectorySeed> seed = ele->gsfTrack()->extra()->seedRef() ;
1208  ElectronSeedRef elseed = seed.castTo<ElectronSeedRef>() ;
1209  if (eg && !generalData_->cutsCfg.seedFromTEC)
1210  {
1211  if (elseed.isNull())
1212  { throw cms::Exception("GsfElectronAlgo|NotElectronSeed")<<"The GsfTrack seed is not an ElectronSeed ?!" ; }
1213  else
1214  { if (elseed->subDet2()==6) return ; }
1215  }
1216 
1217  // transverse impact parameter
1218  if (std::abs(ele->gsfTrack()->dxy(bs.position()))>cfg->maxTIP) return ;
1219  LogTrace("GsfElectronAlgo") << "TIP criterion is satisfied" ;
1220 
1221  LogTrace("GsfElectronAlgo") << "All cut based criteria are satisfied" ;
1222  ele->setPassCutBasedPreselection(true) ;
1223  }
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:185
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
void setPassCutBasedPreselection(bool flag)
Definition: GsfElectron.h:713
bool isEBEtaGap() const
Definition: GsfElectron.h:357
float eSuperClusterOverP() const
Definition: GsfElectron.h:245
bool isEBEEGap() const
Definition: GsfElectron.h:355
float hcalDepth2OverEcal() const
Definition: GsfElectron.h:441
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:195
bool isEERingGap() const
Definition: GsfElectron.h:361
bool isEEDeeGap() const
Definition: GsfElectron.h:360
const StrategyConfiguration strategyCfg
bool isEE() const
Definition: GsfElectron.h:353
bool isEB() const
Definition: GsfElectron.h:352
float deltaEtaSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:249
float sigmaIetaIeta() const
Definition: GsfElectron.h:434
float deltaPhiSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:252
float hcalOverEcal() const
Definition: GsfElectron.h:442
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const CutsConfiguration cutsCfg
bool isNull() const
Checks for null.
Definition: Ref.h:250
#define LogTrace(id)
float hcalDepth1OverEcal() const
Definition: GsfElectron.h:440
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:358
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:184
const Point & position() const
position
Definition: BeamSpot.h:62
void GsfElectronAlgo::setMVAepiBasedPreselectionFlag ( reco::GsfElectron ele)
private
void GsfElectronAlgo::setMVAInputs ( const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaInput > &  mvaInputs)

Definition at line 1241 of file GsfElectronAlgo.cc.

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

Referenced by GEDGsfElectronProducer::produce().

1242 {
1243  GsfElectronPtrCollection::iterator el ;
1244  for
1245  ( el = eventData_->electrons->begin() ;
1246  el != eventData_->electrons->end() ;
1247  el++ )
1248  {
1249  std::map<reco::GsfTrackRef,reco::GsfElectron::MvaInput>::const_iterator itcheck=mvaInputs.find((*el)->gsfTrack());
1250  (*el)->setMvaInput(itcheck->second);
1251  }
1252 }
GsfElectronPtrCollection * electrons
EventData * eventData_
void GsfElectronAlgo::setMVAOutputs ( const gsfAlgoHelpers::HeavyObjectCache hoc,
const std::map< reco::GsfTrackRef, reco::GsfElectron::MvaOutput > &  mvaOutputs 
)

Definition at line 1254 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().

1256 {
1257  GsfElectronPtrCollection::iterator el ;
1258  for
1259  ( el = eventData_->electrons->begin() ;
1260  el != eventData_->electrons->end() ;
1261  el++ )
1262  {
1264  float mva_NIso_Value= hoc->sElectronMVAEstimator->mva( *(*el), *(eventData_->vertices));
1265  float mva_Iso_Value = hoc->iElectronMVAEstimator->mva( *(*el), eventData_->vertices->size() );
1266  GsfElectron::MvaOutput mvaOutput ;
1267  mvaOutput.mva_e_pi = mva_NIso_Value ;
1268  mvaOutput.mva_Isolated = mva_Iso_Value ;
1269  (*el)->setMvaOutput(mvaOutput);
1270  }
1271  else{
1272  std::map<reco::GsfTrackRef,reco::GsfElectron::MvaOutput>::const_iterator itcheck=mvaOutputs.find((*el)->gsfTrack());
1273  (*el)->setMvaOutput(itcheck->second);
1274  }
1275  }
1276 }
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 1225 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().

1226  {
1227  ele->setPassMvaPreselection(false) ;
1228 
1229  if (ele->core()->ecalDrivenSeed())
1230  { if (ele->mvaOutput().mva_e_pi>=generalData_->cutsCfg.minMVA) ele->setPassMvaPreselection(true) ; }
1231  else
1233 
1234  if (ele->passingMvaPreselection())
1235  { LogTrace("GsfElectronAlgo") << "Main mva criterion is satisfied" ; }
1236 
1238 
1239  }
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
bool passingMvaPreselection() const
Definition: GsfElectron.h:721
void setPassMvaPreselection(bool flag)
Definition: GsfElectron.h:720
const CutsConfiguration cutsCfg
#define LogTrace(id)
const MvaOutput & mvaOutput() const
Definition: GsfElectron.h:679
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
void setPassPflowPreselection(bool flag)
Definition: GsfElectron.h:714
void GsfElectronAlgo::setPixelMatchInfomation ( reco::GsfElectron ele)
private

Definition at line 1729 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(), SurveyInfoScenario_cff::seed, reco::GsfElectron::setPixelMatchDPhi1(), reco::GsfElectron::setPixelMatchDPhi2(), reco::GsfElectron::setPixelMatchDRz1(), reco::GsfElectron::setPixelMatchDRz2(), and reco::GsfElectron::setPixelMatchSubdetectors().

Referenced by createElectron().

1729  {
1730  int sd1 = 0 ;
1731  int sd2 = 0 ;
1732  float dPhi1 = 0 ;
1733  float dPhi2 = 0 ;
1734  float dRz1 = 0 ;
1735  float dRz2 = 0 ;
1736  edm::RefToBase<TrajectorySeed> seed = ele->gsfTrack()->extra()->seedRef();
1737  ElectronSeedRef elseed = seed.castTo<ElectronSeedRef>();
1738  if(seed.isNull()){}
1739  else{
1740  if(elseed.isNull()){}
1741  else{
1742  sd1 = elseed->subDet1() ;
1743  sd2 = elseed->subDet2() ;
1744  dPhi1 = (ele->charge()>0) ? elseed->dPhi1Pos() : elseed->dPhi1() ;
1745  dPhi2 = (ele->charge()>0) ? elseed->dPhi2Pos() : elseed->dPhi2() ;
1746  dRz1 = (ele->charge()>0) ? elseed->dRz1Pos () : elseed->dRz1 () ;
1747  dRz2 = (ele->charge()>0) ? elseed->dRz2Pos () : elseed->dRz2 () ;
1748  }
1749  }
1750  ele->setPixelMatchSubdetectors(sd1,sd2) ;
1751  ele->setPixelMatchDPhi1(dPhi1) ;
1752  ele->setPixelMatchDPhi2(dPhi2) ;
1753  ele->setPixelMatchDRz1 (dRz1 ) ;
1754  ele->setPixelMatchDRz2 (dRz2 ) ;
1755 }
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:185
void setPixelMatchDRz2(float dRz2)
Definition: GsfElectron.h:888
void setPixelMatchDPhi1(float dPhi1)
Definition: GsfElectron.h:885
int charge() const final
electric charge
Definition: LeafCandidate.h:91
void setPixelMatchSubdetectors(int sd1, int sd2)
Definition: GsfElectron.h:884
bool isNull() const
Checks for null.
Definition: Ref.h:250
void setPixelMatchDPhi2(float dPhi2)
Definition: GsfElectron.h:886
REF castTo() const
Definition: RefToBase.h:286
bool isNull() const
Checks for null.
Definition: RefToBase.h:328
void setPixelMatchDRz1(float dRz1)
Definition: GsfElectron.h:887

Member Data Documentation

ElectronData* GsfElectronAlgo::electronData_
private

Definition at line 240 of file GsfElectronAlgo.h.

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

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

Definition at line 242 of file GsfElectronAlgo.h.

Referenced by createElectron().

EleTkIsolFromCands GsfElectronAlgo::tkIsol04Calc_
private

Definition at line 243 of file GsfElectronAlgo.h.

Referenced by createElectron().