CMS 3D CMS Logo

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

#include <GsfElectronAlgo.h>

Classes

struct  CutsConfiguration
 
struct  ElectronData
 
struct  EventData
 
struct  EventSetupData
 
struct  GeneralData
 
struct  InputTagsConfiguration
 
struct  IsolationConfiguration
 
struct  SpikeConfiguration
 
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 ()
 
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 SpikeConfiguration &, EcalClusterFunctionBaseClass *superClusterErrorFunction)
 
void removeAmbiguousElectrons ()
 
void removeNotPreselectedElectrons ()
 
void setAmbiguityData (bool ignoreNotPreselected=true)
 
 ~GsfElectronAlgo ()
 

Private Member Functions

void calculateShowerShape (const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
 
void createElectron ()
 
const reco::SuperClusterRef getTrSuperCluster (const reco::GsfTrackRef &trackRef)
 
bool isPreselected (reco::GsfElectron *ele)
 
void setCutBasedPreselectionFlag (reco::GsfElectron *ele, const reco::BeamSpot &)
 
void setMvaPreselectionFlag (reco::GsfElectron *ele)
 

Private Attributes

ElectronDataelectronData_
 
EventDataeventData_
 
EventSetupDataeventSetupData_
 
GeneralDatageneralData_
 

Detailed Description

Definition at line 49 of file GsfElectronAlgo.h.

Member Typedef Documentation

Definition at line 188 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 SpikeConfiguration spikeCfg,
EcalClusterFunctionBaseClass superClusterErrorFunction 
)

Definition at line 566 of file GsfElectronAlgo.cc.

576  : generalData_(new GeneralData(inputCfg,strategyCfg,cutsCfg,cutsCfgPflow,hcalCfg,hcalCfgPflow,isoCfg,spikeCfg,superClusterErrorFunction)),
577  eventSetupData_(new EventSetupData),
579  {}
GeneralData * generalData_
EventSetupData * eventSetupData_
EventData * eventData_
ElectronData * electronData_
GsfElectronAlgo::~GsfElectronAlgo ( )

Definition at line 581 of file GsfElectronAlgo.cc.

References electronData_, eventData_, eventSetupData_, and generalData_.

582  {
583  delete generalData_ ;
584  delete eventSetupData_ ;
585  delete eventData_ ;
586  delete electronData_ ;
587  }
GeneralData * generalData_
EventSetupData * eventSetupData_
EventData * eventData_
ElectronData * electronData_

Member Function Documentation

void GsfElectronAlgo::addPflowInfo ( )

Definition at line 812 of file GsfElectronAlgo.cc.

References calculateShowerShape(), GsfElectronAlgo::EventData::electrons, eventData_, edm::hlt::Exception, funct::false, newFWLiteAna::found, GsfElectronAlgo::EventData::pflowElectrons, edm::Handle< T >::product(), setMvaPreselectionFlag(), and funct::true.

Referenced by GsfElectronProducer::produce().

813  {
814  bool found ;
815  const GsfElectronCollection * pfElectrons = eventData_->pflowElectrons.product() ;
816  GsfElectronCollection::const_iterator pfElectron ;
817 
818  GsfElectronPtrCollection::iterator el ;
819  for
820  ( el = eventData_->electrons->begin() ;
821  el != eventData_->electrons->end() ;
822  el++ )
823  {
824 // // MVA
825 // // we check that the value is never inferior to the no-cut value
826 // // we generally use in the configuration file for minMVA.
827 // GsfTrackRef gsfTrackRef = (*el)->gsfTrack() ;
828 // float mva = (*eventData_->pfMva.product())[gsfTrackRef] ;
829 // if (mva<noCutMin) { throw cms::Exception("GsfElectronAlgo|UnexpectedMvaValue")<<"unexpected MVA value: "<<mva ; }
830 //
831 // // Mva Output
832 // GsfElectron::MvaOutput mvaOutput ;
833 // mvaOutput.mva = mva ;
834 // (*el)->setMvaOutput(mvaOutput) ;
835 
836  // Retreive info from pflow electrons
837  found = false ;
838  for
839  ( pfElectron = pfElectrons->begin() ; pfElectron != pfElectrons->end() ; pfElectron++ )
840  {
841  if (pfElectron->gsfTrack()==(*el)->gsfTrack())
842  {
843  if (found)
844  {
845  edm::LogWarning("GsfElectronProducer")<<"associated pfGsfElectron already found" ;
846  }
847  else
848  {
849  found = true ;
850  (*el)->setPfIsolationVariables(pfElectron->pfIsolationVariables()) ;
851  (*el)->setMvaInput(pfElectron->mvaInput()) ;
852  (*el)->setMvaOutput(pfElectron->mvaOutput()) ;
853  double noCutMin = -999999999 ;
854  if ((*el)->mva()<noCutMin) { throw cms::Exception("GsfElectronAlgo|UnexpectedMvaValue")<<"unexpected MVA value: "<<(*el)->mva() ; }
855  }
856  }
857  }
858 
859  // Preselection
861 
862  // Shower Shape of pflow cluster
863  if (!((*el)->pflowSuperCluster().isNull()))
864  {
865  reco::GsfElectron::ShowerShape pflowShowerShape ;
866  calculateShowerShape((*el)->pflowSuperCluster(),true,pflowShowerShape) ;
867  (*el)->setPfShowerShape(pflowShowerShape) ;
868  }
869  else if ((*el)->passingMvaPreselection())
870  { edm::LogError("GsfElectronCoreProducer")<<"Preselected tracker driven GsfTrack with no associated pflow SuperCluster." ; }
871  }
872  }
void setMvaPreselectionFlag(reco::GsfElectron *ele)
void calculateShowerShape(const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
GsfElectronPtrCollection * electrons
edm::Handle< reco::GsfElectronCollection > pflowElectrons
T const * product() const
Definition: Handle.h:74
EventData * eventData_
void GsfElectronAlgo::beginEvent ( edm::Event event)

Definition at line 651 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventData::beamspot, GsfElectronAlgo::InputTagsConfiguration::beamSpotTag, GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventSetupData::chStatus, GsfElectronAlgo::EventData::coreElectrons, GsfElectronAlgo::InputTagsConfiguration::ctfTracks, GsfElectronAlgo::EventData::currentCtfTracks, EgammaRecHitIsolation::doFlagChecks(), EgammaRecHitIsolation::doSpikeRemoval(), DetId::Ecal, GsfElectronAlgo::EventData::ecalBarrelHitsMeta, GsfElectronAlgo::EventData::ecalBarrelIsol03, GsfElectronAlgo::EventData::ecalBarrelIsol04, GsfElectronAlgo::EventData::ecalEndcapHitsMeta, GsfElectronAlgo::EventData::ecalEndcapIsol03, GsfElectronAlgo::EventData::ecalEndcapIsol04, GsfElectronAlgo::IsolationConfiguration::eMinBarrel, GsfElectronAlgo::IsolationConfiguration::eMinEndcaps, GsfElectronAlgo::IsolationConfiguration::etMinBarrel, GsfElectronAlgo::IsolationConfiguration::etMinEndcaps, GsfElectronAlgo::IsolationConfiguration::etMinHcal, event(), GsfElectronAlgo::EventData::event, eventData_, eventSetupData_, edm::hlt::Exception, generalData_, GsfElectronAlgo::InputTagsConfiguration::gsfElectronCores, GsfElectronAlgo::EventData::gsfPfRecTracks, GsfElectronAlgo::InputTagsConfiguration::gsfPfRecTracksTag, GsfElectronAlgo::EventData::hadDepth1Isolation03, GsfElectronAlgo::EventData::hadDepth1Isolation04, GsfElectronAlgo::EventData::hadDepth2Isolation03, GsfElectronAlgo::EventData::hadDepth2Isolation04, GsfElectronAlgo::GeneralData::hcalHelper, GsfElectronAlgo::GeneralData::hcalHelperPflow, GsfElectronAlgo::InputTagsConfiguration::hcalTowersTag, GsfElectronAlgo::GeneralData::inputCfg, GsfElectronAlgo::IsolationConfiguration::intRadiusBarrelTk, GsfElectronAlgo::IsolationConfiguration::intRadiusEcalBarrel, GsfElectronAlgo::IsolationConfiguration::intRadiusEcalEndcaps, GsfElectronAlgo::IsolationConfiguration::intRadiusEndcapTk, GsfElectronAlgo::IsolationConfiguration::intRadiusHcal, GsfElectronAlgo::GeneralData::isoCfg, GsfElectronAlgo::IsolationConfiguration::jurassicWidth, GsfElectronAlgo::IsolationConfiguration::maxDrbTk, GsfElectronAlgo::IsolationConfiguration::maxVtxDistTk, GsfElectronAlgo::EventData::pflowElectrons, GsfElectronAlgo::InputTagsConfiguration::pflowGsfElectronsTag, GsfElectronAlgo::InputTagsConfiguration::pfMVA, GsfElectronAlgo::EventData::pfMva, reco::BeamSpot::position(), GsfElectronAlgo::EventData::previousElectrons, GsfElectronAlgo::InputTagsConfiguration::previousGsfElectrons, edm::Handle< T >::product(), edm::ESHandle< class >::product(), PtMinSelector_cfg::ptMin, GsfElectronAlgo::IsolationConfiguration::ptMinTk, ElectronHcalHelper::readEvent(), GsfElectronAlgo::SpikeConfiguration::recHitFlagsToBeExcluded, GsfElectronAlgo::InputTagsConfiguration::reducedBarrelRecHitCollection, GsfElectronAlgo::EventData::reducedEBRecHits, GsfElectronAlgo::EventData::reducedEERecHits, GsfElectronAlgo::InputTagsConfiguration::reducedEndcapRecHitCollection, GsfElectronAlgo::EventData::seeds, GsfElectronAlgo::InputTagsConfiguration::seedsTag, EgammaRecHitIsolation::setUseNumCrystals(), EgammaRecHitIsolation::setVetoClustered(), GsfElectronAlgo::SpikeConfiguration::severityLevelCut, GsfElectronAlgo::EventSetupData::sevLevel, GsfElectronAlgo::GeneralData::spikeCfg, GsfElectronAlgo::GeneralData::strategyCfg, GsfElectronAlgo::IsolationConfiguration::stripBarrelTk, GsfElectronAlgo::IsolationConfiguration::stripEndcapTk, GsfElectronAlgo::EventData::tkIsolation03, GsfElectronAlgo::EventData::tkIsolation04, GsfElectronAlgo::EventData::towers, GsfElectronAlgo::StrategyConfiguration::useGsfPfRecTracks, GsfElectronAlgo::IsolationConfiguration::useNumCrystals, and GsfElectronAlgo::IsolationConfiguration::vetoClustered.

Referenced by GsfElectronBaseProducer::beginEvent().

652  {
653  if (eventData_!=0)
654  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"unexpected event data" ; }
655  eventData_ = new EventData ;
656 
657  // init the handles linked to the current event
658  eventData_->event = &event ;
665  event.getByLabel(generalData_->inputCfg.hcalTowersTag,eventData_->towers) ;
666  event.getByLabel(generalData_->inputCfg.pfMVA,eventData_->pfMva) ;
667  event.getByLabel(generalData_->inputCfg.seedsTag,eventData_->seeds) ;
670 
671  // get the beamspot from the Event:
672  edm::Handle<reco::BeamSpot> recoBeamSpotHandle ;
673  event.getByLabel(generalData_->inputCfg.beamSpotTag,recoBeamSpotHandle) ;
674  eventData_->beamspot = recoBeamSpotHandle.product() ;
675 
676  // prepare access to hcal data
679 
680  // Isolation algos
681  float extRadiusSmall=0.3, extRadiusLarge=0.4 ;
682  float intRadiusBarrel=generalData_->isoCfg.intRadiusBarrelTk, intRadiusEndcap=generalData_->isoCfg.intRadiusEndcapTk, stripBarrel=generalData_->isoCfg.stripBarrelTk, stripEndcap=generalData_->isoCfg.stripEndcapTk ;
684  eventData_->tkIsolation03 = new ElectronTkIsolation(extRadiusSmall,intRadiusBarrel,intRadiusEndcap,stripBarrel,stripEndcap,ptMin,maxVtxDist,drb,eventData_->currentCtfTracks.product(),eventData_->beamspot->position()) ;
685  eventData_->tkIsolation04 = new ElectronTkIsolation(extRadiusLarge,intRadiusBarrel,intRadiusEndcap,stripBarrel,stripEndcap,ptMin,maxVtxDist,drb,eventData_->currentCtfTracks.product(),eventData_->beamspot->position()) ;
686 
687  float egHcalIsoConeSizeOutSmall=0.3, egHcalIsoConeSizeOutLarge=0.4;
688  float egHcalIsoConeSizeIn=generalData_->isoCfg.intRadiusHcal,egHcalIsoPtMin=generalData_->isoCfg.etMinHcal;
689  int egHcalDepth1=1, egHcalDepth2=2;
690  eventData_->hadDepth1Isolation03 = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
691  eventData_->hadDepth2Isolation03 = new EgammaTowerIsolation(egHcalIsoConeSizeOutSmall,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
692  eventData_->hadDepth1Isolation04 = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth1,eventData_->towers.product()) ;
693  eventData_->hadDepth2Isolation04 = new EgammaTowerIsolation(egHcalIsoConeSizeOutLarge,egHcalIsoConeSizeIn,egHcalIsoPtMin,egHcalDepth2,eventData_->towers.product()) ;
694 
695  float egIsoConeSizeOutSmall=0.3, egIsoConeSizeOutLarge=0.4, egIsoJurassicWidth=generalData_->isoCfg.jurassicWidth;
696  float egIsoPtMinBarrel=generalData_->isoCfg.etMinBarrel,egIsoEMinBarrel=generalData_->isoCfg.eMinBarrel, egIsoConeSizeInBarrel=generalData_->isoCfg.intRadiusEcalBarrel;
697  float egIsoPtMinEndcap=generalData_->isoCfg.etMinEndcaps,egIsoEMinEndcap=generalData_->isoCfg.eMinEndcaps, egIsoConeSizeInEndcap=generalData_->isoCfg.intRadiusEcalEndcaps;
700  eventData_->ecalBarrelIsol03 = new EgammaRecHitIsolation(egIsoConeSizeOutSmall,egIsoConeSizeInBarrel,egIsoJurassicWidth,egIsoPtMinBarrel,egIsoEMinBarrel,eventSetupData_->caloGeom,eventData_->ecalBarrelHitsMeta,eventSetupData_->sevLevel.product(),DetId::Ecal);
701  eventData_->ecalBarrelIsol04 = new EgammaRecHitIsolation(egIsoConeSizeOutLarge,egIsoConeSizeInBarrel,egIsoJurassicWidth,egIsoPtMinBarrel,egIsoEMinBarrel,eventSetupData_->caloGeom,eventData_->ecalBarrelHitsMeta,eventSetupData_->sevLevel.product(),DetId::Ecal);
702  eventData_->ecalEndcapIsol03 = new EgammaRecHitIsolation(egIsoConeSizeOutSmall,egIsoConeSizeInEndcap,egIsoJurassicWidth,egIsoPtMinEndcap,egIsoEMinEndcap,eventSetupData_->caloGeom,eventData_->ecalEndcapHitsMeta,eventSetupData_->sevLevel.product(),DetId::Ecal);
703  eventData_->ecalEndcapIsol04 = new EgammaRecHitIsolation(egIsoConeSizeOutLarge,egIsoConeSizeInEndcap,egIsoJurassicWidth,egIsoPtMinEndcap,egIsoEMinEndcap,eventSetupData_->caloGeom,eventData_->ecalEndcapHitsMeta,eventSetupData_->sevLevel.product(),DetId::Ecal);
706  //eventData_->ecalBarrelIsol03->doSpikeRemoval(eventData_->reducedEBRecHits.product(),eventSetupData_->chStatus.product(),generalData_->spikeCfg.severityLevelCut,generalData_->spikeCfg.severityRecHitThreshold,generalData_->spikeCfg.spikeId,generalData_->spikeCfg.spikeIdThreshold);
711  //eventData_->ecalBarrelIsol04->doSpikeRemoval(eventData_->reducedEBRecHits.product(),eventSetupData_->chStatus.product(),generalData_->spikeCfg.severityLevelCut,generalData_->spikeCfg.severityRecHitThreshold,generalData_->spikeCfg.spikeId,generalData_->spikeCfg.spikeIdThreshold);
720  }
ElectronHcalHelper * hcalHelperPflow
edm::Handle< reco::ElectronSeedCollection > seeds
edm::Handle< edm::ValueMap< float > > pfMva
GeneralData * generalData_
const IsolationConfiguration isoCfg
EventSetupData * eventSetupData_
const InputTagsConfiguration inputCfg
edm::ESHandle< EcalChannelStatus > chStatus
edm::ESHandle< EcalSeverityLevelAlgo > sevLevel
void doFlagChecks(const std::vector< int > v)
EgammaTowerIsolation * hadDepth1Isolation03
const StrategyConfiguration strategyCfg
EgammaRecHitIsolation * ecalBarrelIsol04
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
ElectronTkIsolation * tkIsolation03
void setUseNumCrystals(bool b=true)
EgammaRecHitIsolation * ecalEndcapIsol03
void readEvent(edm::Event &)
ElectronHcalHelper * hcalHelper
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::Handle< reco::GsfElectronCollection > previousElectrons
EgammaRecHitIsolation * ecalBarrelIsol03
edm::Handle< reco::GsfElectronCollection > pflowElectrons
EcalRecHitMetaCollection * ecalBarrelHitsMeta
const SpikeConfiguration spikeCfg
T const * product() const
Definition: ESHandle.h:62
T const * product() const
Definition: Handle.h:74
edm::Handle< EcalRecHitCollection > reducedEBRecHits
std::vector< int > recHitFlagsToBeExcluded
EgammaTowerIsolation * hadDepth2Isolation04
void setVetoClustered(bool b=true)
SimpleCaloRecHitMetaCollection< EcalRecHitCollection > EcalRecHitMetaCollection
edm::Handle< reco::TrackCollection > currentCtfTracks
edm::ESHandle< CaloGeometry > caloGeom
EgammaRecHitIsolation * ecalEndcapIsol04
edm::Handle< EcalRecHitCollection > reducedEERecHits
const Point & position() const
position
Definition: BeamSpot.h:63
EventData * eventData_
ElectronTkIsolation * tkIsolation04
void doSpikeRemoval(const EcalRecHitCollection *const recHits, const EcalChannelStatus *const chStatus, const int &severityLevelCut=3)
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
edm::Handle< CaloTowerCollection > towers
EcalRecHitMetaCollection * ecalEndcapHitsMeta
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
void GsfElectronAlgo::calculateShowerShape ( const reco::SuperClusterRef theClus,
bool  pflow,
reco::GsfElectron::ShowerShape showerShape 
)
private

Definition at line 525 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventSetupData::caloGeom, GsfElectronAlgo::EventSetupData::caloTopo, EcalClusterTools::covariances(), EcalClusterTools::e1x5(), reco::GsfElectron::ShowerShape::e1x5, EcalClusterTools::e2x5Max(), reco::GsfElectron::ShowerShape::e2x5Max, EcalClusterTools::e5x5(), reco::GsfElectron::ShowerShape::e5x5, EcalBarrel, eventData_, eventSetupData_, generalData_, geometry, reco::GsfElectron::ShowerShape::hcalDepth1OverEcal, reco::GsfElectron::ShowerShape::hcalDepth2OverEcal, ElectronHcalHelper::hcalESumDepth1(), ElectronHcalHelper::hcalESumDepth2(), GsfElectronAlgo::GeneralData::hcalHelper, GsfElectronAlgo::GeneralData::hcalHelperPflow, reco::CaloCluster::hitsAndFractions(), EcalClusterTools::localCovariances(), edm::ESHandle< class >::product(), GsfElectronAlgo::EventData::reducedEBRecHits, GsfElectronAlgo::EventData::reducedEERecHits, Reconstruction_cff::reducedRecHits, reco::GsfElectron::ShowerShape::sigmaEtaEta, reco::GsfElectron::ShowerShape::sigmaIetaIeta, mathSSE::sqrt(), and DetId::subdetId().

Referenced by addPflowInfo(), and createElectron().

526  {
527  const reco::CaloCluster & seedCluster = *(theClus->seed()) ;
528  // temporary, till CaloCluster->seed() is made available
529  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
530  int detector = seedXtalId.subdetId() ;
531 
532  const CaloTopology * topology = eventSetupData_->caloTopo.product() ;
535  if (detector==EcalBarrel)
536  { reducedRecHits = eventData_->reducedEBRecHits.product() ; }
537  else
538  { reducedRecHits = eventData_->reducedEERecHits.product() ; }
539 
540  std::vector<float> covariances = EcalClusterTools::covariances(seedCluster,reducedRecHits,topology,geometry) ;
541  std::vector<float> localCovariances = EcalClusterTools::localCovariances(seedCluster,reducedRecHits,topology) ;
542  showerShape.sigmaEtaEta = sqrt(covariances[0]) ;
543  showerShape.sigmaIetaIeta = sqrt(localCovariances[0]) ;
544  showerShape.e1x5 = EcalClusterTools::e1x5(seedCluster,reducedRecHits,topology) ;
545  showerShape.e2x5Max = EcalClusterTools::e2x5Max(seedCluster,reducedRecHits,topology) ;
546  showerShape.e5x5 = EcalClusterTools::e5x5(seedCluster,reducedRecHits,topology) ;
547 
548  if (pflow)
549  {
550  showerShape.hcalDepth1OverEcal = generalData_->hcalHelperPflow->hcalESumDepth1(*theClus)/theClus->energy() ;
551  showerShape.hcalDepth2OverEcal = generalData_->hcalHelperPflow->hcalESumDepth2(*theClus)/theClus->energy() ;
552  }
553  else
554  {
555  showerShape.hcalDepth1OverEcal = generalData_->hcalHelper->hcalESumDepth1(*theClus)/theClus->energy() ;
556  showerShape.hcalDepth2OverEcal = generalData_->hcalHelper->hcalESumDepth2(*theClus)/theClus->energy() ;
557  }
558  }
ElectronHcalHelper * hcalHelperPflow
double hcalESumDepth2(const reco::SuperCluster &)
GeneralData * generalData_
EventSetupData * eventSetupData_
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:189
edm::ESHandle< CaloTopology > caloTopo
static std::vector< float > covariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, const CaloGeometry *geometry, float w0=4.7)
static std::vector< float > localCovariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, float w0=4.7)
T sqrt(T t)
Definition: SSEVec.h:28
ElectronHcalHelper * hcalHelper
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:39
Definition: DetId.h:20
T const * product() const
Definition: ESHandle.h:62
edm::Handle< EcalRecHitCollection > reducedEBRecHits
ESHandle< TrackerGeometry > geometry
static float e2x5Max(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
edm::ESHandle< CaloGeometry > caloGeom
static float e5x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e1x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
edm::Handle< EcalRecHitCollection > reducedEERecHits
EventData * eventData_
double hcalESumDepth1(const reco::SuperCluster &)
void GsfElectronAlgo::checkSetup ( const edm::EventSetup es)

Definition at line 589 of file GsfElectronAlgo.cc.

References GsfElectronAlgo::EventSetupData::cacheChStatus, 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(), GsfElectronAlgo::EventSetupData::chStatus, GsfElectronAlgo::EventSetupData::constraintAtVtx, eventSetupData_, generalData_, edm::EventSetup::get(), GsfElectronAlgo::GeneralData::hcalHelper, GsfElectronAlgo::GeneralData::hcalHelperPflow, EcalClusterFunctionBaseClass::init(), GsfElectronAlgo::EventSetupData::magField, GsfElectronAlgo::EventSetupData::mtsTransform, edm::ESHandle< class >::product(), GsfElectronAlgo::EventSetupData::sevLevel, GsfElectronAlgo::GeneralData::superClusterErrorFunction, and GsfElectronAlgo::EventSetupData::trackerHandle.

Referenced by GsfElectronBaseProducer::beginEvent().

590  {
591  // get EventSetupRecords if needed
592  bool updateField(false);
594  updateField = true;
597  }
598 
599  bool updateGeometry(false);
601  updateGeometry = true;
604  }
605 
606  if ( updateField || updateGeometry ) {
607  delete eventSetupData_->mtsTransform ;
611  }
612 
614  eventSetupData_->cacheIDGeom=es.get<CaloGeometryRecord>().cacheIdentifier();
616  }
617 
619  eventSetupData_->cacheIDTopo=es.get<CaloTopologyRecord>().cacheIdentifier();
621  }
622 
625 
628 
629 
631  eventSetupData_->cacheChStatus=es.get<EcalChannelStatusRcd>().cacheIdentifier();
633  }
634 
636  eventSetupData_->cacheSevLevel = es.get<EcalSeverityLevelAlgoRcd>().cacheIdentifier();
638  }
639  }
ElectronHcalHelper * hcalHelperPflow
unsigned long long cacheIdentifier() const
GeneralData * generalData_
EventSetupData * eventSetupData_
void checkSetup(const edm::EventSetup &)
edm::ESHandle< EcalChannelStatus > chStatus
edm::ESHandle< EcalSeverityLevelAlgo > sevLevel
edm::ESHandle< CaloTopology > caloTopo
GsfConstraintAtVertex * constraintAtVtx
const MultiTrajectoryStateTransform * mtsTransform
ElectronHcalHelper * hcalHelper
edm::ESHandle< MagneticField > magField
EcalClusterFunctionBaseClass * superClusterErrorFunction
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
edm::ESHandle< CaloGeometry > caloGeom
edm::ESHandle< TrackerGeometry > trackerHandle
virtual void init(const edm::EventSetup &es)=0
void GsfElectronAlgo::clonePreviousElectrons ( )

Definition at line 787 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronProducer::produce().

788  {
789  const GsfElectronCollection * oldElectrons = eventData_->previousElectrons.product() ;
791  GsfElectronCollection::const_iterator oldElectron ;
792  for
793  ( oldElectron = oldElectrons->begin() ;
794  oldElectron != oldElectrons->end() ;
795  ++oldElectron )
796  {
797  const GsfElectronCoreRef oldCoreRef = oldElectron->core() ;
798  const GsfTrackRef oldElectronGsfTrackRef = oldCoreRef->gsfTrack() ;
799  unsigned int icore ;
800  for ( icore=0 ; icore<newCores->size() ; ++icore )
801  {
802  if (oldElectronGsfTrackRef==(*newCores)[icore].gsfTrack())
803  {
805  eventData_->electrons->push_back(new GsfElectron(*oldElectron,coreRef)) ;
806  break ;
807  }
808  }
809  }
810  }
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:74
EventData * eventData_
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
void GsfElectronAlgo::completeElectrons ( )

Definition at line 744 of file GsfElectronAlgo.cc.

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

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

745  {
746  if (electronData_!=0)
747  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"unexpected electron data" ; }
748 
749  const GsfElectronCoreCollection * coreCollection = eventData_->coreElectrons.product() ;
750  for ( unsigned int i=0 ; i<coreCollection->size() ; ++i )
751  {
752  // check there is no existing electron with this core
754  bool coreFound = false ;
755  GsfElectronPtrCollection::const_iterator itrEle ;
756  for
757  ( itrEle = eventData_->electrons->begin() ;
758  itrEle != eventData_->electrons->end() ;
759  itrEle++ )
760  {
761  if ((*itrEle)->core()==coreRef)
762  {
763  coreFound = true ;
764  break ;
765  }
766  }
767  if (coreFound) continue ;
768 
769  // check there is a super-cluster
770  if (coreRef->superCluster().isNull()) continue ;
771 
772  // prepare internal structure for electron specific data
773  delete electronData_ ;
774  electronData_ = new ElectronData(coreRef,*eventData_->beamspot) ;
775 
776  // calculate and check Trajectory StatesOnSurface....
778 
779  createElectron() ;
780 
781  } // loop over tracks
782 
783  delete electronData_ ;
784  electronData_ = 0 ;
785  }
int i
Definition: DBlmapReader.cc:9
EventSetupData * eventSetupData_
bool isNull() const
Checks for null.
Definition: Ref.h:246
GsfConstraintAtVertex * constraintAtVtx
std::vector< GsfElectronCore > GsfElectronCoreCollection
const MultiTrajectoryStateTransform * mtsTransform
const reco::BeamSpot * beamspot
GsfElectronPtrCollection * electrons
T const * product() const
Definition: Handle.h:74
bool calculateTSOS(const MultiTrajectoryStateTransform *, GsfConstraintAtVertex *)
EventData * eventData_
ElectronData * electronData_
edm::Handle< reco::GsfElectronCoreCollection > coreElectrons
void GsfElectronAlgo::copyElectrons ( reco::GsfElectronCollection outEle)

Definition at line 641 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

642  {
643  GsfElectronPtrCollection::const_iterator it ;
644  for
645  ( it = eventData_->electrons->begin() ;
646  it != eventData_->electrons->end() ;
647  it++ )
648  { outEle.push_back(**it) ; }
649  }
GsfElectronPtrCollection * electrons
EventData * eventData_
void GsfElectronAlgo::createElectron ( )
private

Definition at line 987 of file GsfElectronAlgo.cc.

References abs, GsfElectronAlgo::StrategyConfiguration::applyEtaCorrection, GsfElectronAlgo::EventData::beamspot, GsfElectronAlgo::ElectronData::calculateMode(), GsfElectronAlgo::ElectronData::calculateMomentum(), calculateShowerShape(), GsfElectronAlgo::ElectronData::checkCtfTrack(), GsfElectronAlgo::ElectronData::computeCharge(), ConversionInfo::conversionPartnerCtfTk(), ConversionInfo::conversionPartnerGsfTk(), reco::GsfElectron::core(), GsfElectronAlgo::ElectronData::coreRef, ElectronEnergyCorrector::correct(), ElectronClassification::correct(), ElectronMomentumCorrector::correct(), reco::GsfElectron::ClosestCtfTrack::ctfTrack, GsfElectronAlgo::ElectronData::ctfTrackRef, GsfElectronAlgo::StrategyConfiguration::ctfTracksCheck, GsfElectronAlgo::EventData::currentCtfTracks, ConversionInfo::dcot(), reco::GsfElectron::ConversionRejection::dcot, reco::GsfElectron::TrackClusterMatching::deltaEtaEleClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaEtaSeedClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaEtaSuperClusterAtVtx, reco::GsfElectron::TrackClusterMatching::deltaPhiEleClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaPhiSeedClusterAtCalo, reco::GsfElectron::TrackClusterMatching::deltaPhiSuperClusterAtVtx, ConversionInfo::dist(), reco::GsfElectron::ConversionRejection::dist, EcalBarrel, GsfElectronAlgo::EventData::ecalBarrelIsol03, GsfElectronAlgo::EventData::ecalBarrelIsol04, EcalEndcap, GsfElectronAlgo::EventData::ecalEndcapIsol03, GsfElectronAlgo::EventData::ecalEndcapIsol04, reco::GsfElectron::IsolationVariables::ecalRecHitSumEt, reco::GsfElectron::TrackClusterMatching::eEleClusterOverPout, ele_convert(), reco::GsfElectron::TrackClusterMatching::electronCluster, electronData_, GsfElectronAlgo::EventData::electrons, GsfElectronAlgo::ElectronData::eleMom, GsfElectronAlgo::ElectronData::elePos, reco::CaloCluster::energy(), reco::GsfElectron::TrackClusterMatching::eSeedClusterOverP, reco::GsfElectron::TrackClusterMatching::eSeedClusterOverPout, reco::GsfElectron::TrackClusterMatching::eSuperClusterOverP, eventData_, eventSetupData_, edm::hlt::Exception, ConversionInfo::flag(), reco::GsfElectron::ConversionRejection::flags, generalData_, GsfElectronAlgo::ElectronData::getEleBasicCluster(), EgammaRecHitIsolation::getEtSum(), ElectronTkIsolation::getPtTracks(), EgammaTowerIsolation::getTowerEtSum(), GsfElectronAlgo::EventData::hadDepth1Isolation03, GsfElectronAlgo::EventData::hadDepth1Isolation04, GsfElectronAlgo::EventData::hadDepth2Isolation03, GsfElectronAlgo::EventData::hadDepth2Isolation04, reco::GsfElectron::IsolationVariables::hcalDepth1TowerSumEt, reco::GsfElectron::IsolationVariables::hcalDepth2TowerSumEt, reco::CaloCluster::hitsAndFractions(), EBDetId::ietaAbs(), GsfElectronAlgo::ElectronData::innMom, reco::GsfElectron::FiducialFlags::isEB, reco::GsfElectron::FiducialFlags::isEBEEGap, reco::GsfElectron::FiducialFlags::isEBEtaGap, reco::GsfElectron::FiducialFlags::isEBPhiGap, reco::GsfElectron::FiducialFlags::isEE, reco::GsfElectron::FiducialFlags::isEEDeeGap, reco::GsfElectron::FiducialFlags::isEERingGap, EEDetId::isNextToDBoundary(), EBDetId::isNextToEtaBoundary(), EBDetId::isNextToPhiBoundary(), EEDetId::isNextToRingBoundary(), edm::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, reco::GsfElectron::ConversionRejection::radius, ConversionInfo::radiusOfConversion(), GsfElectronAlgo::EventData::retreiveOriginalTrackCollections(), GsfElectronAlgo::ElectronData::sclMom, GsfElectronAlgo::ElectronData::sclPos, GsfElectronAlgo::ElectronData::seedMom, GsfElectronAlgo::ElectronData::seedPos, setCutBasedPreselectionFlag(), reco::GsfElectron::setIsolation03(), reco::GsfElectron::setIsolation04(), reco::GsfElectron::setP4(), GsfElectronAlgo::ElectronData::shFracInnerHits, reco::GsfElectron::ClosestCtfTrack::shFracInnerHits, GsfElectronAlgo::GeneralData::strategyCfg, DetId::subdetId(), GsfElectronAlgo::GeneralData::superClusterErrorFunction, GsfElectronAlgo::ElectronData::superClusterRef, GsfElectronAlgo::EventData::tkIsolation03, GsfElectronAlgo::EventData::tkIsolation04, reco::GsfElectron::IsolationVariables::tkSumPt, funct::true, GsfElectronAlgo::ElectronData::vtxMom, GsfElectronAlgo::ElectronData::vtxMomWithConstraint, GsfElectronAlgo::ElectronData::vtxPos, and GsfElectronAlgo::ElectronData::vtxTSOS.

Referenced by completeElectrons().

988  {
989  // eventually check ctf track
992 
993  // charge ID
994  int eleCharge ;
995  GsfElectron::ChargeInfo eleChargeInfo ;
996  electronData_->computeCharge(eleCharge,eleChargeInfo) ;
997 
998  // electron basic cluster
1000 
1001  // Seed cluster
1002  const reco::CaloCluster & seedCluster = *(electronData_->superClusterRef->seed()) ;
1003 
1004  // seed Xtal
1005  // temporary, till CaloCluster->seed() is made available
1006  DetId seedXtalId = seedCluster.hitsAndFractions()[0].first ;
1007 
1009 
1010 
1011  //====================================================
1012  // Candidate attributes
1013  //====================================================
1014 
1016 
1017 
1018  //====================================================
1019  // Track-Cluster Matching
1020  //====================================================
1021 
1023  tcMatching.electronCluster = elbcRef ;
1024  tcMatching.eSuperClusterOverP = (electronData_->vtxMom.mag()>0)?(electronData_->superClusterRef->energy()/electronData_->vtxMom.mag()):(-1.) ;
1025  tcMatching.eSeedClusterOverP = (electronData_->vtxMom.mag()>0.)?(seedCluster.energy()/electronData_->vtxMom.mag()):(-1) ;
1026  tcMatching.eSeedClusterOverPout = (electronData_->seedMom.mag()>0.)?(seedCluster.energy()/electronData_->seedMom.mag()):(-1.) ;
1027  tcMatching.eEleClusterOverPout = (electronData_->eleMom.mag()>0.)?(elbcRef->energy()/electronData_->eleMom.mag()):(-1.) ;
1028 
1030  tcMatching.deltaEtaSuperClusterAtVtx = scAtVtx.dEta() ;
1031  tcMatching.deltaPhiSuperClusterAtVtx = scAtVtx.dPhi() ;
1032 
1033  EleRelPointPair seedAtCalo(seedCluster.position(),electronData_->seedPos,eventData_->beamspot->position()) ;
1034  tcMatching.deltaEtaSeedClusterAtCalo = seedAtCalo.dEta() ;
1035  tcMatching.deltaPhiSeedClusterAtCalo = seedAtCalo.dPhi() ;
1036 
1037  EleRelPointPair ecAtCalo(elbcRef->position(),electronData_->elePos,eventData_->beamspot->position()) ;
1038  tcMatching.deltaEtaEleClusterAtCalo = ecAtCalo.dEta() ;
1039  tcMatching.deltaPhiEleClusterAtCalo = ecAtCalo.dPhi() ;
1040 
1041 
1042  //=======================================================
1043  // Track extrapolations
1044  //=======================================================
1045 
1054 
1055 
1056  //=======================================================
1057  // Closest Ctf Track
1058  //=======================================================
1059 
1061  ctfInfo.ctfTrack = electronData_->ctfTrackRef ;
1063 
1064 
1065  //====================================================
1066  // FiducialFlags, using nextToBoundary definition of gaps
1067  //====================================================
1068 
1069  reco::GsfElectron::FiducialFlags fiducialFlags ;
1070  int detector = seedXtalId.subdetId() ;
1071  double feta=std::abs(electronData_->superClusterRef->position().eta()) ;
1072  if (detector==EcalBarrel)
1073  {
1074  fiducialFlags.isEB = true ;
1075  EBDetId ebdetid(seedXtalId);
1076  if (EBDetId::isNextToEtaBoundary(ebdetid))
1077  {
1078  if (ebdetid.ietaAbs()==85)
1079  { fiducialFlags.isEBEEGap = true ; }
1080  else
1081  { fiducialFlags.isEBEtaGap = true ; }
1082  }
1083  if (EBDetId::isNextToPhiBoundary(ebdetid))
1084  { fiducialFlags.isEBPhiGap = true ; }
1085  }
1086  else if (detector==EcalEndcap)
1087  {
1088  fiducialFlags.isEE = true ;
1089  EEDetId eedetid(seedXtalId);
1090  if (EEDetId::isNextToRingBoundary(eedetid))
1091  {
1092  if (std::abs(feta)<2.)
1093  { fiducialFlags.isEBEEGap = true ; }
1094  else
1095  { fiducialFlags.isEERingGap = true ; }
1096  }
1097  if (EEDetId::isNextToDBoundary(eedetid))
1098  { fiducialFlags.isEEDeeGap = true ; }
1099  }
1100  else
1101  { throw cms::Exception("GsfElectronAlgo|UnknownXtalRegion")<<"createElectron(): do not know if it is a barrel or endcap seed cluster !!!!" ; }
1102 
1103 
1104  //====================================================
1105  // ShowerShape
1106  //====================================================
1107 
1108  reco::GsfElectron::ShowerShape showerShape ;
1109  calculateShowerShape(electronData_->superClusterRef,!(electronData_->coreRef->ecalDrivenSeed()),showerShape) ;
1110 
1111 
1112  //====================================================
1113  // ConversionRejection
1114  //====================================================
1115 
1117 
1118  ConversionFinder conversionFinder ;
1119  double BInTesla = eventSetupData_->magField->inTesla(GlobalPoint(0.,0.,0.)).z() ;
1121  if (!ctfTracks.isValid()) { ctfTracks = eventData_->currentCtfTracks ; }
1122 
1123  // values of conversionInfo.flag()
1124  // -9999 : Partner track was not found
1125  // 0 : Partner track found in the CTF collection using
1126  // 1 : Partner track found in the CTF collection using
1127  // 2 : Partner track found in the GSF collection using
1128  // 3 : Partner track found in the GSF collection using the electron's GSF track
1129  ConversionInfo conversionInfo = conversionFinder.getConversionInfo
1130  (*electronData_->coreRef,ctfTracks,eventData_->originalGsfTracks,BInTesla) ;
1131 
1133  conversionVars.flags = conversionInfo.flag() ;
1134  conversionVars.dist = conversionInfo.dist() ;
1135  conversionVars.dcot = conversionInfo.dcot() ;
1136  conversionVars.radius = conversionInfo.radiusOfConversion() ;
1137  if ((conversionVars.flags==0)or(conversionVars.flags==1))
1138  conversionVars.partner = TrackBaseRef(conversionInfo.conversionPartnerCtfTk()) ;
1139  else if ((conversionVars.flags==2)or(conversionVars.flags==3))
1140  conversionVars.partner = TrackBaseRef(conversionInfo.conversionPartnerGsfTk()) ;
1141 
1142 
1143  //====================================================
1144  // brems fraction
1145  //====================================================
1146 
1147  float fbrem = (electronData_->outMom.mag()>0.)?((electronData_->innMom.mag()-electronData_->outMom.mag())/electronData_->innMom.mag()):1.e30 ;
1148 
1149 
1150  //====================================================
1151  // Go !
1152  //====================================================
1153 
1154  GsfElectron * ele = new
1155  GsfElectron
1156  ( eleCharge,eleChargeInfo,electronData_->coreRef,
1157  tcMatching, tkExtra, ctfInfo,
1158  fiducialFlags,showerShape,
1159  conversionVars,
1160  fbrem) ;
1161  ele->setP4(GsfElectron::P4_FROM_SUPER_CLUSTER,momentum,0,true) ;
1162 
1163  // set corrections + classification
1164  ElectronClassification theClassifier;
1165  theClassifier.correct(*ele);
1166  // energy corrections only for ecalDriven electrons
1167  if (ele->core()->ecalDrivenSeed()) {
1169  theEnCorrector.correct(*ele, *eventData_->beamspot, generalData_->strategyCfg.applyEtaCorrection);
1170  ElectronMomentumCorrector theMomCorrector;
1171  theMomCorrector.correct(*ele,electronData_->vtxTSOS);
1172  }
1173 
1174 
1175  // now isolation variables
1185  ele->setIsolation03(dr03);
1186  ele->setIsolation04(dr04);
1187 
1188  // preselection flag
1190 
1191  LogTrace("GsfElectronAlgo")<<"Constructed new electron with energy "<< ele->p4().e() ;
1192 
1193  eventData_->electrons->push_back(ele) ;
1194  }
edm::Handle< reco::TrackCollection > originalCtfTracks
const MultiTrajectoryStateMode * mtsMode
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:123
void setP4(P4Kind kind, const LorentzVector &p4, float p4Error, bool setCandidate)
Definition: GsfElectron.cc:170
GeneralData * generalData_
static bool isNextToEtaBoundary(EBDetId id)
Definition: EBDetId.cc:175
reco::GsfTrackRef conversionPartnerGsfTk() const
virtual void correct(reco::GsfElectron &)
double radiusOfConversion() const
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:196
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
void retreiveOriginalTrackCollections(const reco::TrackRef &, const reco::GsfTrackRef &)
double getEtSum(const reco::Candidate *emObject) const
void calculateShowerShape(const reco::SuperClusterRef &, bool pflow, reco::GsfElectron::ShowerShape &)
EventSetupData * eventSetupData_
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
double dist() const
#define abs(x)
Definition: mlp_lapack.h:159
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:189
void computeCharge(int &charge, reco::GsfElectron::ChargeInfo &info)
void checkCtfTrack(edm::Handle< reco::TrackCollection > currentCtfTracks)
EgammaTowerIsolation * hadDepth1Isolation03
const StrategyConfiguration strategyCfg
reco::TrackRef conversionPartnerCtfTk() const
EgammaRecHitIsolation * ecalBarrelIsol04
EgammaTowerIsolation * hadDepth2Isolation03
EgammaTowerIsolation * hadDepth1Isolation04
ElectronTkIsolation * tkIsolation03
T mag() const
Definition: PV3DBase.h:61
void setCutBasedPreselectionFlag(reco::GsfElectron *ele, const reco::BeamSpot &)
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
Definition: TrackFwd.h:22
EgammaRecHitIsolation * ecalEndcapIsol03
static bool isNextToPhiBoundary(EBDetId id)
Definition: EBDetId.cc:180
void correct(reco::GsfElectron &, TrajectoryStateOnSurface &)
const MultiTrajectoryStateTransform * mtsTransform
static bool isNextToRingBoundary(EEDetId id)
Definition: EEDetId.cc:391
double energy() const
cluster energy
Definition: CaloCluster.h:120
const reco::BeamSpot * beamspot
edm::ESHandle< MagneticField > magField
GsfElectronPtrCollection * electrons
CaloClusterPtr getEleBasicCluster(const MultiTrajectoryStateTransform *)
static bool isNextToDBoundary(EEDetId id)
Definition: EEDetId.cc:383
bool isValid() const
Definition: HandleBase.h:76
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:39
void setIsolation04(const IsolationVariables &dr04)
Definition: GsfElectron.h:449
#define LogTrace(id)
Definition: DetId.h:20
EgammaRecHitIsolation * ecalBarrelIsol03
int flag() const
EcalClusterFunctionBaseClass * superClusterErrorFunction
void ele_convert(const Type1 &obj1, Type2 &obj2)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:39
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
math::XYZVectorF momentumAtVtxWithConstraint
Definition: GsfElectron.h:252
double getPtTracks(const reco::GsfElectron *) const
void setIsolation03(const IsolationVariables &dr03)
Definition: GsfElectron.h:448
edm::Handle< reco::GsfTrackCollection > originalGsfTracks
EgammaTowerIsolation * hadDepth2Isolation04
const reco::GsfElectronCoreRef coreRef
edm::Handle< reco::TrackCollection > currentCtfTracks
EgammaRecHitIsolation * ecalEndcapIsol04
const reco::SuperClusterRef superClusterRef
const Point & position() const
position
Definition: BeamSpot.h:63
EventData * eventData_
double dcot() const
ElectronTkIsolation * tkIsolation04
ElectronData * electronData_
double getTowerEtSum(const reco::Candidate *) const
void calculateMode(const MultiTrajectoryStateMode *mtsMode)
TrajectoryStateOnSurface vtxTSOS
Candidate::LorentzVector calculateMomentum()
void GsfElectronAlgo::displayInternalElectrons ( const std::string &  title) const

Definition at line 730 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

731  {
732  LogTrace("GsfElectronAlgo") << "========== " << title << " ==========";
733  LogTrace("GsfElectronAlgo") << "Event: " << eventData_->event->id();
734  LogTrace("GsfElectronAlgo") << "Number of electrons: " << eventData_->electrons->size() ;
735  GsfElectronPtrCollection::const_iterator it ;
736  for ( it = eventData_->electrons->begin(); it != eventData_->electrons->end(); it++ )
737  {
738  LogTrace("GsfElectronAlgo") << "Electron with charge, pt, eta, phi: " << (*it)->charge() << " , "
739  << (*it)->pt() << " , " << (*it)->eta() << " , " << (*it)->phi();
740  }
741  LogTrace("GsfElectronAlgo") << "=================================================";
742  }
GsfElectronPtrCollection * electrons
#define LogTrace(id)
edm::EventID id() const
Definition: EventBase.h:56
EventData * eventData_
void GsfElectronAlgo::endEvent ( )

Definition at line 722 of file GsfElectronAlgo.cc.

References eventData_, and edm::hlt::Exception.

Referenced by GsfElectronBaseProducer::endEvent().

723  {
724  if (eventData_==0)
725  { throw cms::Exception("GsfElectronAlgo|InternalError")<<"lacking event data" ; }
726  delete eventData_ ;
727  eventData_ = 0 ;
728  }
EventData * eventData_
const reco::SuperClusterRef GsfElectronAlgo::getTrSuperCluster ( const reco::GsfTrackRef trackRef)
private
bool GsfElectronAlgo::isPreselected ( reco::GsfElectron ele)
private
void GsfElectronAlgo::removeAmbiguousElectrons ( )

Definition at line 1326 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

1327  {
1328  GsfElectronPtrCollection::size_type ei = 1, emax = eventData_->electrons->size() ;
1329  GsfElectronPtrCollection::iterator eitr = eventData_->electrons->begin() ;
1330  while (eitr!=eventData_->electrons->end())
1331  {
1332  LogTrace("GsfElectronAlgo")<<"========== remove ambiguous "<<ei<<"/"<<emax<<"==========" ;
1333  if ((*eitr)->ambiguous())
1334  { delete (*eitr) ; eitr = eventData_->electrons->erase(eitr) ; ++ei ; }
1335  else
1336  { ++eitr ; ++ei ; }
1337  }
1338  }
uint16_t size_type
GsfElectronPtrCollection * electrons
#define LogTrace(id)
EventData * eventData_
void GsfElectronAlgo::removeNotPreselectedElectrons ( )

Definition at line 877 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

878  {
880  GsfElectronPtrCollection::iterator eitr = eventData_->electrons->begin() ;
881  while (eitr!=eventData_->electrons->end())
882  {
883  LogTrace("GsfElectronAlgo")<<"========== removed not preselected "<<ei<<"/"<<emax<<"==========" ;
884  if (isPreselected(*eitr))
885  { ++eitr ; ++ei ; }
886  else
887  { delete (*eitr) ; eitr = eventData_->electrons->erase(eitr) ; ++ei ; }
888  }
889  }
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 1204 of file GsfElectronAlgo.cc.

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

Referenced by GsfElectronBaseProducer::fillEvent().

1205  {
1206  GsfElectronPtrCollection::iterator e1, e2 ;
1211  else
1212  { throw cms::Exception("GsfElectronAlgo|UnknownAmbiguitySortingStrategy")<<"value of generalData_->strategyCfg.ambSortingStrategy is : "<<generalData_->strategyCfg.ambSortingStrategy ; }
1213 
1214  // init
1215  for
1216  ( e1 = eventData_->electrons->begin() ;
1217  e1 != eventData_->electrons->end() ;
1218  ++e1 )
1219  {
1220  (*e1)->clearAmbiguousGsfTracks() ;
1221  (*e1)->setAmbiguous(false) ;
1222  }
1223 
1224  // get ambiguous from GsfPfRecTracks
1226  {
1227  for
1228  ( e1 = eventData_->electrons->begin() ;
1229  e1 != eventData_->electrons->end() ;
1230  ++e1 )
1231  {
1232  bool found = false ;
1233  const GsfPFRecTrackCollection * gsfPfRecTrackCollection = eventData_->gsfPfRecTracks.product() ;
1234  GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
1235  for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
1236  gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
1237  ++gsfPfRecTrack )
1238  {
1239  if (gsfPfRecTrack->gsfTrackRef()==(*e1)->gsfTrack())
1240  {
1241  if (found)
1242  {
1243  edm::LogWarning("GsfElectronAlgo")<<"associated gsfPfRecTrack already found" ;
1244  }
1245  else
1246  {
1247  found = true ;
1248  const std::vector<reco::GsfPFRecTrackRef> & duplicates(gsfPfRecTrack->convBremGsfPFRecTrackRef()) ;
1249  std::vector<reco::GsfPFRecTrackRef>::const_iterator duplicate ;
1250  for ( duplicate = duplicates.begin() ; duplicate != duplicates.end() ; duplicate ++ )
1251  { (*e1)->addAmbiguousGsfTrack((*duplicate)->gsfTrackRef()) ; }
1252  }
1253  }
1254  }
1255  }
1256  }
1257  // or search overlapping clusters
1258  else
1259  {
1260  for
1261  ( e1 = eventData_->electrons->begin() ;
1262  e1 != eventData_->electrons->end() ;
1263  ++e1 )
1264  {
1265  if ((*e1)->ambiguous()) continue ;
1266  if ( ignoreNotPreselected && !isPreselected(*e1) ) continue ;
1267 
1268  SuperClusterRef scRef1 = (*e1)->superCluster();
1269  CaloClusterPtr eleClu1 = (*e1)->electronCluster();
1270  LogDebug("GsfElectronAlgo")
1271  << "Blessing electron with E/P " << (*e1)->eSuperClusterOverP()
1272  << ", cluster " << scRef1.get()
1273  << " & track " << (*e1)->gsfTrack().get() ;
1274 
1275  for
1276  ( e2 = e1, ++e2 ;
1277  e2 != eventData_->electrons->end() ;
1278  ++e2 )
1279  {
1280  if ((*e2)->ambiguous()) continue ;
1281  if ( ignoreNotPreselected && !isPreselected(*e2) ) continue ;
1282 
1283  SuperClusterRef scRef2 = (*e2)->superCluster();
1284  CaloClusterPtr eleClu2 = (*e2)->electronCluster();
1285 
1286  // search if same cluster
1287  bool sameCluster = false ;
1289  { sameCluster = (scRef1==scRef2) ; }
1291  {
1292  float eMin = 1. ;
1293  float threshold = eMin*cosh(EleRelPoint(scRef1->position(),eventData_->beamspot->position()).eta()) ;
1294  sameCluster =
1296  (EgAmbiguityTools::sharedEnergy(&(*scRef1->seed()),&(*eleClu2),eventData_->reducedEBRecHits,eventData_->reducedEERecHits)>=threshold) ||
1298  (EgAmbiguityTools::sharedEnergy(&(*scRef1->seed()),&(*scRef2->seed()),eventData_->reducedEBRecHits,eventData_->reducedEERecHits)>=threshold) ) ;
1299  }
1300  else
1301  { throw cms::Exception("GsfElectronAlgo|UnknownAmbiguityClustersOverlapStrategy")<<"value of generalData_->strategyCfg.ambClustersOverlapStrategy is : "<<generalData_->strategyCfg.ambClustersOverlapStrategy ; }
1302 
1303  // main instructions
1304  if (sameCluster)
1305  {
1306  LogDebug("GsfElectronAlgo")
1307  << "Discarding electron with E/P " << (*e2)->eSuperClusterOverP()
1308  << ", cluster " << scRef2.get()
1309  << " and track " << (*e2)->gsfTrack().get() ;
1310  (*e1)->addAmbiguousGsfTrack((*e2)->gsfTrack()) ;
1311  (*e2)->setAmbiguous(true) ;
1312  }
1313  else if ((*e1)->gsfTrack()==(*e2)->gsfTrack())
1314  {
1315  edm::LogWarning("GsfElectronAlgo")
1316  << "Forgetting electron with E/P " << (*e2)->eSuperClusterOverP()
1317  << ", cluster " << scRef2.get()
1318  << " and track " << (*e2)->gsfTrack().get() ;
1319  (*e2)->setAmbiguous(true) ;
1320  }
1321  }
1322  }
1323  }
1324  }
#define LogDebug(id)
bool isPreselected(reco::GsfElectron *ele)
GeneralData * generalData_
bool isBetter(const reco::GsfElectron *, const reco::GsfElectron *)
EventSetupData * eventSetupData_
T eta() const
const StrategyConfiguration strategyCfg
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
const reco::BeamSpot * beamspot
GsfElectronPtrCollection * electrons
T const * product() const
Definition: Handle.h:74
edm::Handle< EcalRecHitCollection > reducedEBRecHits
float sharedEnergy(const reco::CaloCluster *, const reco::CaloCluster *, edm::Handle< EcalRecHitCollection > &reducedEBRecHits, edm::Handle< EcalRecHitCollection > &reducedEERecHits)
edm::Handle< EcalRecHitCollection > reducedEERecHits
const Point & position() const
position
Definition: BeamSpot.h:63
EventData * eventData_
edm::ESHandle< TrackerGeometry > trackerHandle
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:241
edm::Handle< reco::GsfPFRecTrackCollection > gsfPfRecTracks
void GsfElectronAlgo::setCutBasedPreselectionFlag ( reco::GsfElectron ele,
const reco::BeamSpot bs 
)
private

Definition at line 891 of file GsfElectronAlgo.cc.

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

Referenced by createElectron().

892  {
893  // default value
894  ele->setPassCutBasedPreselection(false) ;
895 
896  // kind of seeding
897  bool eg = ele->core()->ecalDrivenSeed() ;
898  bool pf = ele->core()->trackerDrivenSeed() && !ele->core()->ecalDrivenSeed() ;
899  if (eg&&pf) { throw cms::Exception("GsfElectronAlgo|BothEcalAndPureTrackerDriven")<<"An electron cannot be both egamma and purely pflow" ; }
900  if ((!eg)&&(!pf)) { throw cms::Exception("GsfElectronAlgo|NeitherEcalNorPureTrackerDriven")<<"An electron cannot be neither egamma nor purely pflow" ; }
901  const CutsConfiguration * cfg = (eg?&generalData_->cutsCfg:&generalData_->cutsCfgPflow) ;
902 
903  // Et cut
904  double etaValue = EleRelPoint(ele->superCluster()->position(),bs.position()).eta() ;
905  double etValue = ele->superCluster()->energy()/cosh(etaValue) ;
906  LogTrace("GsfElectronAlgo") << "Et : " << etValue ;
907  if (ele->isEB() && (etValue < cfg->minSCEtBarrel)) return ;
908  if (ele->isEE() && (etValue < cfg->minSCEtEndcaps)) return ;
909  LogTrace("GsfElectronAlgo") << "Et criteria are satisfied";
910 
911  // E/p cut
912  double eopValue = ele->eSuperClusterOverP() ;
913  LogTrace("GsfElectronAlgo") << "E/p : " << eopValue ;
914  if (ele->isEB() && (eopValue > cfg->maxEOverPBarrel)) return ;
915  if (ele->isEE() && (eopValue > cfg->maxEOverPEndcaps)) return ;
916  if (ele->isEB() && (eopValue < cfg->minEOverPBarrel)) return ;
917  if (ele->isEE() && (eopValue < cfg->minEOverPEndcaps)) return ;
918  LogTrace("GsfElectronAlgo") << "E/p criteria are satisfied";
919 
920  // HoE cuts
921  LogTrace("GsfElectronAlgo") << "HoE1 : " << ele->hcalDepth1OverEcal() << ", HoE2 : " << ele->hcalDepth2OverEcal();
922  double had = ele->hcalOverEcal()*ele->superCluster()->energy() ;
923  const reco::CaloCluster & seedCluster = *(ele->superCluster()->seed()) ;
924  int detector = seedCluster.hitsAndFractions()[0].first.subdetId() ;
925  bool HoEveto = false ;
926  if (detector==EcalBarrel && (had<cfg->maxHBarrel || (had/ele->superCluster()->energy())<cfg->maxHOverEBarrel)) HoEveto=true;
927  else if (detector==EcalEndcap && (had<cfg->maxHEndcaps || (had/ele->superCluster()->energy())<cfg->maxHOverEEndcaps)) HoEveto=true;
928  if ( !HoEveto ) return ;
929  LogTrace("GsfElectronAlgo") << "H/E criteria are satisfied";
930 
931  // delta eta criteria
932  double deta = ele->deltaEtaSuperClusterTrackAtVtx() ;
933  LogTrace("GsfElectronAlgo") << "delta eta : " << deta ;
934  if (ele->isEB() && (std::abs(deta) > cfg->maxDeltaEtaBarrel)) return ;
935  if (ele->isEE() && (std::abs(deta) > cfg->maxDeltaEtaEndcaps)) return ;
936  LogTrace("GsfElectronAlgo") << "Delta eta criteria are satisfied";
937 
938  // delta phi criteria
939  double dphi = ele->deltaPhiSuperClusterTrackAtVtx();
940  LogTrace("GsfElectronAlgo") << "delta phi : " << dphi;
941  if (ele->isEB() && (std::abs(dphi) > cfg->maxDeltaPhiBarrel)) return ;
942  if (ele->isEE() && (std::abs(dphi) > cfg->maxDeltaPhiEndcaps)) return ;
943  LogTrace("GsfElectronAlgo") << "Delta phi criteria are satisfied";
944 
945  // sigma ieta ieta
946  LogTrace("GsfElectronAlgo") << "sigma ieta ieta : " << ele->sigmaIetaIeta();
947  if (ele->isEB() && (ele->sigmaIetaIeta() > cfg->maxSigmaIetaIetaBarrel)) return ;
948  if (ele->isEE() && (ele->sigmaIetaIeta() > cfg->maxSigmaIetaIetaEndcaps)) return ;
949  LogTrace("GsfElectronAlgo") << "Sigma ieta ieta criteria are satisfied";
950 
951  // fiducial
952  if (!ele->isEB() && cfg->isBarrel) return ;
953  if (!ele->isEE() && cfg->isEndcaps) return ;
954  if (cfg->isFiducial && (ele->isEBEEGap()||ele->isEBEtaGap()||ele->isEBPhiGap()||ele->isEERingGap()||ele->isEEDeeGap())) return ;
955  LogTrace("GsfElectronAlgo") << "Fiducial flags criteria are satisfied";
956 
957  // seed in TEC
958  edm::RefToBase<TrajectorySeed> seed = ele->gsfTrack()->extra()->seedRef() ;
959  ElectronSeedRef elseed = seed.castTo<ElectronSeedRef>() ;
960  if (eg && !generalData_->cutsCfg.seedFromTEC)
961  {
962  if (elseed.isNull())
963  { throw cms::Exception("GsfElectronAlgo|NotElectronSeed")<<"The GsfTrack seed is not an ElectronSeed ?!" ; }
964  else
965  { if (elseed->subDet2()==6) return ; }
966  }
967 
968  // transverse impact parameter
969  if (std::abs(ele->gsfTrack()->dxy(bs.position()))>cfg->maxTIP) return ;
970  LogTrace("GsfElectronAlgo") << "TIP criterion is satisfied" ;
971 
972  LogTrace("GsfElectronAlgo") << "All cut based criteria are satisfied" ;
973  ele->setPassCutBasedPreselection(true) ;
974  }
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
void setPassCutBasedPreselection(bool flag)
Definition: GsfElectron.h:574
bool isEBEtaGap() const
Definition: GsfElectron.h:345
float eSuperClusterOverP() const
Definition: GsfElectron.h:215
bool isEBEEGap() const
Definition: GsfElectron.h:343
float hcalDepth2OverEcal() const
Definition: GsfElectron.h:389
#define abs(x)
Definition: mlp_lapack.h:159
const std::vector< std::pair< DetId, float > > & hitsAndFractions() const
Definition: CaloCluster.h:189
bool isEERingGap() const
Definition: GsfElectron.h:349
SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:168
T eta() const
bool isEEDeeGap() const
Definition: GsfElectron.h:348
bool isEE() const
Definition: GsfElectron.h:341
bool isEB() const
Definition: GsfElectron.h:340
return((rh^lh)&mask)
float deltaEtaSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:219
bool isNull() const
Checks for null.
Definition: Ref.h:246
float sigmaIetaIeta() const
Definition: GsfElectron.h:384
float deltaPhiSuperClusterTrackAtVtx() const
Definition: GsfElectron.h:222
float hcalOverEcal() const
Definition: GsfElectron.h:390
const CutsConfiguration cutsCfg
#define LogTrace(id)
float hcalDepth1OverEcal() const
Definition: GsfElectron.h:388
GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:169
REF castTo() const
cast to a concrete type
Definition: RefToBase.h:241
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
bool isEBPhiGap() const
Definition: GsfElectron.h:346
const Point & position() const
position
Definition: BeamSpot.h:63
void GsfElectronAlgo::setMvaPreselectionFlag ( reco::GsfElectron ele)
private

Definition at line 976 of file GsfElectronAlgo.cc.

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

Referenced by addPflowInfo().

977  {
978  ele->setPassMvaPreselection(false) ;
979  if (ele->core()->ecalDrivenSeed())
980  { if (ele->mva()>=generalData_->cutsCfg.minMVA) ele->setPassMvaPreselection(true) ; }
981  else
982  { if (ele->mva()>=generalData_->cutsCfgPflow.minMVA) ele->setPassMvaPreselection(true) ; }
983  if (ele->passingMvaPreselection())
984  { LogTrace("GsfElectronAlgo") << "Mva criterion is satisfied" ; }
985  }
GeneralData * generalData_
const CutsConfiguration cutsCfgPflow
bool passingMvaPreselection() const
Definition: GsfElectron.h:567
float mva() const
Definition: GsfElectron.h:548
void setPassMvaPreselection(bool flag)
Definition: GsfElectron.h:575
const CutsConfiguration cutsCfg
#define LogTrace(id)
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8

Member Data Documentation

ElectronData* GsfElectronAlgo::electronData_
private

Definition at line 214 of file GsfElectronAlgo.h.

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

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